SISTEMI OPERATIVI – parte 2
Eccoci giunti alla seconda lezione riguardante i SO. Per chi avesse perso la prima troverà il link alla fine di questo articolo.
Comunque iniziamo con questa lezione ad analizzare le varie parti che compongono un SO. Utilizzeremo un approccio down-top, cioè partiremo dal “cuore” del SO e man mano raggiungeremo ciò che è visibile a tutti.
Come detto partiremo dal “cuore” del SO, o meglio dal kernel (in italiano nucleo). Cos’è il kernel di un SO? Non è “nient’altro” che un software che ha il compito di fornire ai processi (un processo è un programma in esecuzione) un accesso sicuro e controllato all’hardware. Dato che, la maggior parte dei SO moderni (per non dire tutti) riescono ad eseguire più di un processo alla volta (affermazione assolutamente non vera anche se l’utente ha questa parvenza), esso ha anche il compito di assegnare il tempo di esecuzione e di accesso hardware ad ogni processo. Ovviamente l’accesso diretto all’hardware è un qualcosa di estremamente complesso, è anche per questo che all’interno del kernel è implementata anche un’astrazione dell’hardware. Per farvi capire cos’è eccovi un piccolo esempio: lettura del contenuto del disco rigido. Se voglio leggere il contenuto del disco rigido, mi basta aprire il programma che mi mostra il contenuto delle cartelle e accedere al disco di cui voglio visualizzare il contenuto. Semplice no? Ma volete sapere il kernel che ha combinato per fare questa piccola operazione? Innanzitutto ha fatto una richiesta di accesso all’hard-disk. Quando quest’ultimo è pronto ad eseguire un’operazione, ha inviato al kernel un segnale per fargli capire che è disponibile. A quel punto il kernel gli ha comunicato l’operazione che vuole eseguire (lettura – READ) e l’inidirizzo fisico della zona da controllare. A questo punto il disco rigido ha messo in funzione il motorino interno, raggiunto con la sua puntina la zona corrispondente a quell’indirizzo, letto magneticamente i dati e messi su un buffer di comunicazione. Dopodichè ha inviato un segnale al kernel per fargli capire chel’operazione da esso richiesta è stata effettuata. Il kernel a questo punto preleva i dati, li codifica, e li passa al programma richiedente (quello che mostra il contenuto della cartella). Menomale che era un’operazione da nulla…Ovviamente noi non ci siamo accorti di niente, ha fatto tutto il kernel!!!
In base al grado di astrazione dell’hardware, i kernel si dividono in queste quattro categorie:
- Kernel monolitici, che implementano direttamente una completa astrazione dell’hardware sottostante.
- Microkernel, che forniscono un insieme ristretto e semplice di astrazione dell’hardware e usano software (chiamati device driver o server) per fornire maggiori funzionalità .
- Kernel ibridi (o microkernel modificati), che si differenziano dai microkernel puri per l’implementazione di alcune funzioni aggiuntive al fine di incrementare le prestazioni.
- Esokernel, che rimuovono tutte le limitazioni legate all’astrazione dell’hardware e si limitano a garantire l’accesso concorrente allo stesso, permettendo alle singole applicazioni di implementare autonomamente le tradizionali astrazioni del sistema operativo per mezzo di speciali librerie.
E con questo terminiamo la prima parte riguardante il kernel. Nella prossima lezione scenderemo ancor più nello specifico, spiegando come i processi vengono avviati e gestiti dal kernel.









