Il sistema operativo Vito Perrone Corso di Informatica A per Gestionali
Indice Architettura Gestione dei processi Gestione della memoria centrale Driver Gestione dei file
Il sistema operativo E’ uno strato software che opera direttamente sull’hardware Isola gli utenti dai dettagli dell’hardware Mono-utente o multi-utente E’ organizzato a strati: Architettura a buccia di cipolla Ogni strato costituisce una macchina virtuale Programmi utente Interprete comandi attivazione programmi d’utente o di sistema File system controllo e gestione degli accessi a file Gestione delle periferiche gestione di ingresso/uscita da periferica Gestione della memoria allocazione e gestione della memoria Gestione dei processi (nucleo) gestione dei processi e delle interruzioni Macchina fisica Kernel
Funzioni del sistema operativo Il gestore dei processi (o nucleo) è responsabile dell’esecuzione dei programmi da parte dell’unità di elaborazione Il gestore della memoria ha la funzione di allocare la memoria e partizionarla tra i vari programmi I driver sono responsabili delle operazioni di ingresso/uscita che coinvolgono le periferiche Il file system è responsabile della gestione dei file in memoria di massa L’interprete comandi consente all’utente di attivare i programmi
Gestione dei processi
Definizione di processo Il termine processo fa riferimento all’esecuzione di un programma Un processo P è una coppia di elementi (E, S), che comprende il codice eseguibile E del programma e lo stato S del processo Lo stesso programma può essere associato a più processi: Un programma può essere scomposto in varie parti e ognuna di esse può essere associata ad un diverso processo Lo stesso programma può essere associato a diversi processi quando diverse copie del medesimo processo sono mandate in esecuzione
Stati di un processo (1) L’unità di elaborazione che esegue i processi prende nome di processore. In generale vi saranno n processori I processi possono essere classificati come: In esecuzione Pronti In attesa Ipotesi semplificative: Un programma sia associato a un solo processo Il sistema sia dotato di un unico processore Uno solo dei processi può essere in esecuzione in un certo istante, gli altri processi saranno pronti oppure in attesa
Processo in esecuzione Stati di un processo (2) Processo in esecuzione Processo pronto Processo in attesa Inizio esecuzione Primo processo pronto - Fine quanto di tempo - Interruzione esterna Interruzione interna Evento esterno atteso - Fine esecuzione - Abort per errore In esecuzione: assegnato al processore ed eseguito da esso Pronto: può andare in esecuzione, se il gestore dei processi lo decide In attesa: attende il verificarsi di un evento esterno per andare in stato di pronto
Processo in esecuzione Stati di un processo (3) I processi appena creati sono messi in stato di pronto Processo in esecuzione Processo pronto Processo in attesa Inizio esecuzione Primo processo pronto - Fine quanto di tempo - Interruzione esterna Interruzione interna Evento esterno atteso - Fine esecuzione - Abort per errore P2 P1 Il nucleo decide quale processo pronto mettere in stato di esecuzione Il nucleo assegna il processore a un processo per un quanto di tempo Coda dei processi pronti Round-robin Priorità dei processi Round Robin: Scheduling alghoritm; Molto adatto per i sistemi multi-tasking; Semplice algoritmo di scheduling nel quale ogni processo è attivato in modo ciclico ed è eseguito per un quanto di tempo o timeslice. Quando un processo termina il quanto viene messo in coda. Quando un processo è in attesa di qualche risorsa, input o terminazione di processi figli passa il controllo allo scheduler. Una delle virtù dell’algoritmo è la sua semplicità in quanto solo gli stessi processi hanno bisogno di sapere per cosa sono stati messi in attesa e come rilevare l’evento che li risveglia (evento esterno). Uno degli svantaggi è che quando un pro
Processo in esecuzione Stati di un processo (4) Processo in esecuzione Processo pronto Processo in attesa Inizio esecuzione Primo processo pronto - Fine quanto di tempo - Interruzione esterna Interruzione interna Evento esterno atteso - Fine esecuzione - Abort per errore Il processo in esecuzione passa in stato di attesa se richiede operazioni di I/O (interruzione interna) Corrisponde alla esecuzione dell’istruzione “chiamata a supervisore” (SuperVisor Call, SVC) P2 P1
Processo in esecuzione Stati di un processo (5) Processo in esecuzione Processo pronto Processo in attesa Inizio esecuzione Primo processo pronto - Fine quanto di tempo - Interruzione esterna Interruzione interna Evento esterno atteso - Fine esecuzione - Abort per errore Cambiamento di contesto: Salvare il contesto di P1 nel suo descrittore di processo P2 Il processore è ora libero, un altro processo passerà in esecuzione P1
Processo in esecuzione Stati di un processo (6) Quando l’operazione di I/O è finita viene generata un’interruzione esterna Il processo in esecuzione viene interrotto Processo in esecuzione Processo pronto Processo in attesa Inizio esecuzione Primo processo pronto - Fine quanto di tempo - Interruzione esterna Interruzione interna Evento esterno atteso - Fine esecuzione - Abort per errore P2 Il nucleo esegue il gestore delle interruzioni che esegue le azioni opportune P1 può tornare pronto P1 Il nucleo sceglie quale processo mandare in esecuzione
Processo in esecuzione Stati di un processo (7) Processo in esecuzione Processo pronto Processo in attesa Inizio esecuzione Primo processo pronto - Fine quanto di tempo - Interruzione esterna Interruzione interna Evento esterno atteso - Fine esecuzione - Abort per errore Pre-emption: quando il quanto di tempo è scaduto, il nucleo interrompe il processo in esecuzione P2 Si cerca di garantire un uso equo della CPU a tutti i processi P1
Sincronizzazione A volte, i processi devono sincronizzarsi, ovvero coordinare le loro attività Il coordinamento sequenziale: un processo termina invocando l’attivazione di un altro processo La competizione: due processi vogliono accedere simultaneamente a una medesima risorsa (risorsa critica)
Gestione della memoria centrale
Rilocazione e paginazione La gestione concorrente di molti processi, comporta la presenza di molti programmi in memoria centrale Per allocare i programmi in memoria è necessario rilocarli (trasformare gli indirizzi logici, presenti nei programmi, in indirizzi fisici) Paginazione: La memoria centrale è considerata dal gestore della memoria come partizionata in pagine Ciascuna di queste è un’area di memoria contigua, di dimensione fissata Dati e programmi vengono partizionati in pagine e allocati in un numero intero di pagine, non necessariamente contigue
Segmentazione Segmentazione: Durante la compilazione, il programma è frazionato in parti che svolgono differenti funzioni Per es. si possono separare i dati dalle istruzioni E’ una partizione logica del programma. Consente al gestore della memoria di caricare i segmenti che compongono il programma stesso in maniera indipendente Mentre le pagine hanno lunghezza fissa, i segmenti, hanno lunghezza variabile La segmentazione e la paginazione non sono tecniche alternative. Spesso sono applicate contemporaneamente
La memoria virtuale In entrambi i casi, il gestore della memoria offre al programma applicativo la visione di una memoria virtuale La memoria virtuale è maggiore di quella fisica: E’ possibile allocare più pagine o segmenti di quelle che possono stare nella memoria fisica allo stesso tempo Le pagine o i segmenti che non sono al momento caricate nella memoria fisica rimango disponibili nella memoria di massa La gestione della memoria è coordinata con la gestione dei processi: Quando un processo è eseguito, le pagine o i segmenti che sono al momento in esecuzione o che contengono i dati attualmente indirizzati devono essere caricati in memoria Se una pagina o un segmento necessario al programma non è presente, il processo deve essere sospeso per consentire il caricamento
La catena di programmazione (1) Il compilatore trasforma un modulo di programma sorgente in un modulo di programma oggetto Un programma può essere suddiviso in parti (moduli) I nomi delle variabili locali al modulo di programma vengono tradotti in indirizzi rilocabili (espressi in forma logica) I riferimenti alle variabili esterne al modulo, restano in formato simbolico Il linker trasforma diversi moduli oggetto in un unico programma eseguibile Il linker risolve i riferimenti a variabili definite esternamente a ciascun modulo, trasformando i residui indirizzi simbolici in indirizzi rilocabili
La catena di programmazione (2) A volte (raramente) gli indirizzi sono espressi in formato assoluto (calcolati a partire da una specifica cella di memoria) Il loader carica il programma eseguibile in memoria Indirizzi assoluti: il loader caricare il programma nella specifica zona di memoria Indirizzi rilocabili: il loader è responsabile della loro rilocazione
La rilocazione Rilocazione statica: Rilocazione dinamica: + All’atto del caricamento in memoria Trasforma il codice: indirizzi rilocabili indirizzi assoluti Registro base Indirizzo rilocabile + Indirizzo calcolato Rilocazione dinamica: Non comporta una conversione del codice Richiede l’utilizzo di due registri speciali: Il registro base contiene il valore dell’indirizzo della prima cella di memoria a partire dalla quale il programma è stato caricato Il registro dimensione contenente la dimensione del programma; permette di verificare che l’indirizzo generato dal programma rientri nello spazio indirizzabile
Modo S e modo U La memoria è suddivisa in: Memoria di modo S (supervisore): contiene i programmi di sistema operativo e vengono create le strutture dati da esso utilizzate Memoria di modo U (utente): contiene i programmi utente Se il processore sta eseguendo un processo utente : Lo si dice attivo in modo utente (in modo U) Può accedere soltanto alla memoria di modo U Se il processore sta eseguendo un processo di sistema: E’ attivo il nucleo Si dice attivo in modo supervisore (in modo S) Può accedere alla memoria di modo S e di modo U Può eseguire istruzioni “privilegiate”
Driver
I driver Sono meccanismi software cui è affidato il compito di comunicare dati da e verso le periferiche Garantiscono ai programmi che li usano una visione di alto livello E’ possibile leggere o scrivere tramite primitive indipendenti dalla struttura hardware delle periferiche Si distingue fra: Driver fisici (hardware). Vengono attivati direttamente dal gestore delle interruzioni Driver logici (software). Fanno parte del sistema operativo e forniscono una gerarchia di operazioni, con un’organizzazione a strati
Gestione dei file
Il file system Consente di gestire i file sulla memoria di massa: Creare un file Dargli un nome Collocarlo in un opportuno spazio nella memoria di massa Accedervi in lettura e scrittura Gestione dei file indipendente dalle caratteristiche fisiche della memoria di massa I file vengono inclusi all’interno di directory (o cataloghi): Hanno una tipica organizzazione ad albero Alcuni sistemi operativi permettono una struttura a grafo
La struttura ad albero
Organizzazione dei file A ciascun utente è normalmente associata una directory specifica, detta home directory Il livello di protezione di un file indica quali operazioni possono essere eseguite da ciascun utente Ciascun file ha un pathname (o nome completo) che include l’intero cammino dalla radice dell’albero Il contesto di un utente all’interno del file system è la directory in cui correntemente si trova