1.1.1 Il Ruolo del Kernel
I tre componenti principali di un sistema operativo sono il kernel, la shell e il filesystem. Il kernel del sistema operativo è come un controllore del traffico aereo in un aeroporto. Il kernel determina quale programma ottiene quali pezzi di memoria, avvia e uccide i programmi e gestisce la visualizzazione del testo su un monitor. Quando un’applicazione deve scrivere su disco, deve chiedere al sistema operativo di completare l’operazione di scrittura. Se due applicazioni richiedono la stessa risorsa, il kernel decide chi lo ottiene e, in alcuni casi, uccide una delle applicazioni per salvare il resto del sistema.
Il kernel gestisce anche il passaggio tra le applicazioni. Un computer avrà un piccolo numero di CPU e una quantità finita di memoria. Il kernel si occupa di scaricare un’attività e caricare una nuova attività se ci sono più attività rispetto alle CPU. Quando l’attività corrente è stata eseguita per un periodo di tempo sufficiente, la CPU mette in pausa l’attività in modo che un’altra possa essere eseguita. Questo si chiama multitasking preventivo. Il multitasking indica che il computer sta eseguendo più attività contemporaneamente e la prevenzione indica che il kernel sta decidendo quando passare al focus tra le attività. Con il rapido passaggio delle attività, sembra che il computer stia facendo molte cose contemporaneamente.
Ogni applicazione può pensare di avere un grande blocco di memoria sul sistema, ma è il kernel che mantiene questa illusione, rimappando blocchi di memoria più piccoli, condividendo blocchi di memoria con altre applicazioni o addirittura sostituendo blocchi che non sono stati toccati su disco.
All’avvio del computer, carica un piccolo pezzo di codice chiamato bootloader. Il compito del bootloader è caricare il kernel e avviarlo. Se hai più familiarità con sistemi operativi come Microsoft Windows o OS X di Apple, probabilmente non vedrai mai il bootloader, ma nel mondo UNIX è solitamente visibile in modo da poter modificare il modo in cui il tuo computer si avvia.
Il bootloader carica il kernel Linux e quindi trasferisce il controllo. Linux quindi continua con l’esecuzione dei programmi necessari per rendere utile il computer, come la connessione alla rete o l’avvio di un server web.