|
Appunti informatica |
|
Visite: 1086 | Gradito: | [ Picolo appunti ] |
Leggi anche appunti:Definizione di Sistema OperativoDefinizione di Sistema Operativo Un Sistema Operativo (SO) è un software, quasi Il microprocessore :storia ed evoluzioneIl microprocessore :storia ed evoluzione Storia Il microprocessore nasce Meccanismi di sincronizzazione tra processiMECCANISMI DI SINCRONIZZAZIONE TRA PROCESSI Le macchine concorrenti seguono |
STRUTTURA DI UN SISTEMA OPERATIVO
Un SO è schematizzabile come una 'cipolla', ossia è formato da più strati o "livelli" concentrici. Cerchiamo di capire in che senso si può affermare questo.
Abbiamo detto che ogni qual volta che un processo in corso di esecuzione necessita del SO (in quanto dev'essere fatta un'operazione non direttamente accessibile) si ha una SUPERVISOR CALL (SRC). Ad esempio, se stiamo eseguendo un programma in C e si incontra un'istruzione di read da una periferica di input, questo comporta, come si sa, il richiamo della giusta subroutine dall'interno di una libreria fornita insieme al linguaggio. La subroutine non fa altro che richiedere una SRC che effettua 'a basso livello' (ossia a stretto contatto con l'hardware) l'operazione di I/O.
Ci si potrebbe domandare perché mai non può essere direttamente il programma utente ad effettuare la SRC e in questo caso la risposta sarebbe duplice:
1) una SRC non può essere ottenuta se non con un'istruzione in linguaggio macchina; questa è la risposta più ovvia ma è anche poco soddisfacente;
2) un'operazione di ingresso/uscita necessita della conoscenza di tutta una serie di informazioni non banali che riguardano il 'come operare' e il 'su che cosa operare', al di fuori della portata dell'utilizzatore medio e che dipendono solo in piccola parte dal particolare programma in esecuzione. Queste informazioni sono note al kernel del sistema operativo, che le può quindi mettere a disposizione della procedura richiamata (in questo caso una read) per il buon funzionamento dell'operazione. È bene che il programma utente si limiti a fornire soltanto le indicazioni dipendenti dalla volontà di quest'ultimo, come ad esempio la variabile nella quale va posizionato il risultato.
È dunque la read a produrre la SRC, che in pratica consiste in un salto ad una routine di servizio. Queste routine sono parte integrante del kernel del SO. È probabile che tali routine abbiano a loro volta bisogno di altre routine, sempre facenti parte del SO. Un esempio potrebbe essere il seguente: il programma utente richiama una routine di libreria del linguaggio simbolico, la quale da parte sua effettua mediante una SRC una chiamata al SO. Il particolare processo del SO che viene interpellato potrebbe comportare l'uso di una certa quantità di memoria. Allora, esso chiama a sua volta il gestore della memoria che, se possibile, gli mette a disposizione tale spazio di memoria.
Abbiamo quindi già individuato due livelli del kernel del SO: uno più esterno, contenente fra le altre la routine di lettura, e uno più interno, quello che nel nostro esempio include il gestore della memoria. È chiaro che i processi facenti parte dello strato più esterno non possono prescindere da quelli dello strato più interno, mentre non è vero il contrario.
Che succede se la memoria richiesta non è disponibile? Subentra un terzo processo, posto ad un livello più basso rispetto ai due che abbiamo esaminato, che si occupa della gestione dei due livelli immediatamente superiori. Esso prende il nome di SEMAFORO (si parlerà ampiamente di semafori nel seguito). Come mai questo nome? In caso di mancanza di memoria, il processo che l'ha richiesta non può continuare a funzionare e occorre quindi temporaneamente 'bloccarlo'. Il semaforo si incarica di gestire tale situazione: arresta il processo originario e crea le condizioni affinché ne possa partire un altro. Non appena si sarà resa disponibile una porzione sufficiente di memoria, il semaforo farà ripartire il processo che era stato temporaneamente sospeso.
Da questo discorso si comprende come sia possibile considerare un SO come suddiviso in più livelli, l'uno dentro l'altro. In un SO ben fatto ogni livello deve definire verso il proprio esterno una macchina virtuale. Il nucleo del SO, ossia il livello più interno, è l'hardware dell'elaboratore. Subito dopo viene il gestore dei processi. Esso genera verso l'esterno la propria macchina virtuale: i livelli superiori devono cioè poter guardare al gestore dei processi come ad una macchina entro la quale ogni processo possa essere svolto dal proprio processore. Il terzo strato a partire dall'interno, che possiamo supporre sia il gestore della memoria, rappresenta per i processi dei livelli superiori l'illusione di una macchina virtuale che possa fornire ad ogni processo il proprio processore e la propria memoria, e così via.
Appunti su: |
|