SISTEMI OPERATIVI Prof. Enrico Terrone A. S: 2008/09 Che cos’è il sistema operativo Il sistema operativo (SO) è il software che gestisce e rende accessibili (sia ai programmatori e ai programmi, sia agli utenti) le principali risorse hardware e software presenti su un computer. Gli utenti di solito identificano il SO con la sua interfaccia grafica, ma questa è solo la “confezione” di un software molto più complesso, che serve a governare il funzionamento dell’intero computer (e che può anche avere un’interfaccia testuale: si veda il Prompt dei comandi”). Che cos’è il sistema operativo Per avere un’idea di quali siano le funzioni principali del sistema operativo aprire esplora risorse (gestore delle informazioni), pannello di controllo (gestore delle periferiche) e soprattutto premere CTRL+ALT+CANC (task manager: gestore di memoria e processore). Il SO non è indispensabile in teoria ma è lo è in pratica: in sua assenza, ogni programma dovrebbe contenere tutte le istruzioni necessarie per gestire le componenti hardware. Che cos’è il sistema operativo Il sistema operativo rappresenta uno dei livelli basilari del modello di Tanenbaum: al di sotto ci sono soltanto l’hardware (che il SO deve gestire) e il linguaggio macchina (le cui istruzioni costituiscono il SO). Applicazioni Linguaggio di alto livello Assembly Sistema operativo Linguaggio macchina Hardware Che cos’è il sistema operativo I sistemi operativi più diffusi sono quelli prodotti da Microsoft (Windows XP, Vista, Windows 7) ma vanno considerati anche i SO della “famiglia” UnixLinux e quelli della famiglia Apple (MAC-OS). Il sistema operativo è il primo programma che viene caricato in memoria RAM all’accensione del computer (bootstrap); esso resta sempre in esecuzione, fino allo spegnimento (shutdown) del computer. È il primo programma che arriva e l’ultimo che se ne va. Che cos’è il sistema operativo Il sistema operativo è un software molto complesso composto di molti programmi collegati e coordinati fra loro. Lo si può suddividere in livelli. I livelli più vicini all’hardware formano il kernel. Per capire come funziona il SO occorre conoscere la struttura dell’hardware (modello di Von Neumann). Interfaccia utente (Shell) Gestore delle informazioni Gestore delle periferiche Gestore della memoria Gestore dei processi (Nucleo) Hardware Il modello di Von Neumann Memoria centrale Input Output CPU (CU + ALU) Il gestore dei processi Un processo è un programma in esecuzione. Da un singolo programma si possono dunque ricavare più processi. Il sistema operativo carica il processo in memoria centrale (tramite il gestore della memoria, vedi dopo) e poi gli concede l’utilizzo della CPU in modo che esso possa eseguire le istruzioni da cui è composto. I vecchi sistemi operativi (MS-Dos) eseguivano i processi in sequenza, uno dopo l’altro. Questa modalità di esecuzione si chiama batch e impone che un processo sia terminato perché il successivo possa iniziare. Il gestore dei processi I moderni computer funzionano invece secondo la modalità multitasking: più processi (che graficamente corrispondono a più finestre) possono essere in esecuzione contemporaneamente. In realtà la CPU, in un dato istante di tempo, è sempre assegnata a un unico processo: il parallelismo è simulato alternando rapidamente l’utilizzo della CPU fra i vari processi in esecuzione (time sharing). P1 P2 P3 P1 P2 P3 Il gestore dei processi Chiaramente è molto più complicato realizzare un SO multitasking anziché un SO batch: il SO multitasking deve infatti alternare in continuazione l’utilizzo della CPU fra i differenti processi in esecuzione. L’operazione di assegnazione della CPU fra i vari processi si chiama scheduling. Un processo viene tolto dalla CPU quando scade il suo tempo (time slice) oppure quando si blocca esso stesso per un’operazione di input/output. [schema p. 238] [schema p. 250] t Gli stati del processo Il gestore della memoria Il gestore della memoria assegna a un processo (cioè alle sue variabili e alle sue istruzioni) lo spazio di memoria centrale necessario alla sua esecuzione. Questa operazione si chiama “allocazione del processo”. Nei SO batch in memoria centrale a un dato istante ci sono soltanto il SO stesso e il processo in esecuzione, per cui la gestione è abbastanza semplice. Invece nei SO multitasking in memoria ci possono essere contemporaneamente più processi e quindi la gestione è più complessa: occorre infatti fare in modo che ogni processo abbia un suo spazio e non interferisca negli spazi degli altri processi. Il gestore della memoria SO P1 P3 P2 P4 Il gestore della memoria Per una gestione ottimale della memoria i moderni SO utilizzano tecniche dette di paginazione e di segmentazione. Quando un processo termina, la memoria che occupava viene liberata per un altro processo, che però potrebbe essere più piccolo o più grande di quello terminato. In questo modo si creano dei “buchi” in memoria centrale. La paginazione divide la memoria in blocchi e i processi in pagine, che possono essere collocati in blocchi anche non contigui della memoria, in modo da occupare il più possibile i “buchi”. Il gestore della memoria Se si usa la paginazione, il sistema operativo deve preservare l’unità del processo gestendo la memoria attraverso una tabella dei blocchi (che per ciascun blocco indica se è libero o da quale processo è occupato) e i processi attraverso una tabella della pagine (che per ciascuna pagina indica in quale blocco si trova). Un miglioramento ulteriore si ha introducendo la memoria virtuale, per cui un processo può essere eseguito senza dover stare tutto in memoria centrale: alcune pagine sono parcheggiate su disco e richiamate soltanto quando occorre eseguire le istruzioni presenti al loro interno. Il gestore della memoria La segmentazione è una tecnica simile alla paginazione, con la differenza che pagine hanno tutte la stessa dimensione mentre i segmenti hanno dimensione variabile. Attraverso la segmentazione, si può “affettare” un processo tenendo conto della sua struttura logica. La segmentazione paginata è una tecnica che si basa su una suddivisione dei processi in segmenti e quindi dei segmenti in pagine: essa unisce i vantaggi della paginazione (gestione ottimale della memoria) e della segmentazione (rispetto della suddivisione logica del programma). Si noti che quanto più efficiente una tecnica, tanto più complesso da realizzare sarà il SO. Gerarchia di memorie