Per rispondere a questa domanda è utile una contro-domanda: cosa non è un kernel? Il kernel non è il nucleo di un processore, bensì il nucleodel sistema operativo. Un kernel non è nemmeno un’API o un framework.
Infatti, i sistemi operativi multi-kernel possono usare diversi core di un processore multi-core come una rete di CPU indipendenti. Come funziona? Attraverso la speciale struttura del kernel, che è costituito da un certo numero di componenti diversi:
- Al livello può basso permette alla macchina di comunicare direttamente con l’hardware, il processore e la memoria. Nei cinque livelli, le funzioni del kernel sono svariate, dalla gestione dei processi alla gestione dei dispositivi. Il livello superiore non ha accesso alla macchina ma è responsabile del passaggio al software.
- I software applicativi girano sul sistema operativo separatamente dal kernel e accedono solo alle sue funzioni. Senza il kernel, la comunicazione tra software e hardware non sarebbe possibile.
- Diversi processi possono essere eseguiti allo stesso tempo grazie alla capacità di multitasking del kernel. Ma una CPU può gestire solo un processo alla volta, a meno che il sistema non sia multi-core. Il cambio veloce dei processi, simile dopotutto a un multitasking, è gestito dallo scheduler.
Le quattro funzioni di un kernel possono essere derivate dai suoi componenti:
- Gestione della memoria: controlla quanta RAM viene usata e dove.
- Gestione dei processi: determina quali processi possono usare la CPU, quando e per quanto tempo.
- Driver del dispositivo: si occupa dell’intermediazione tra l’hardware e i processi.
- Chiamata del sistema e sicurezza: accetta richieste di servizio dai processi.
Le funzioni di un kernel, se implementate correttamente, rimangono invisibili agli utenti. Un kernel, infatti, opera all’interno del suo mondo, lo spazio del kernel. Tutto ciò che l’utente vede (file, programmi, giochi, browser, ecc.), invece, accade nello spazio utente. L’interazione dei due mondi avviene tramite l’interfaccia di chiamata di sistema, la System Call Interface (SCI).
Il kernel nel sistema operativo
Per capire come funziona il kernel di un sistema operativo, si può pensare a un computer come se fosse diviso in tre livelli:
- Hardware: la base del sistema costituita da memoria, processore e dispositivi di input e output. La CPU esegue letture, scritture e calcoli per la memoria.
- Kernel: il nucleo di un sistema operativo. Dice alla CPU cosa fare.
- Processi utente: tutti i processi in esecuzione che il kernel gestisce. Il kernel permette la comunicazione tra processi e server, conosciuta anche come comunicazione tra processi (IPC).
Esistono fondamentalmente due modalità per il codice in un sistema: modalità kernel e modalità utente. Il codice in modalità kernel ha accesso illimitato all’hardware, mentre il codice in modalità utente ha accesso limitato al SCI. Quando si verifica un errore in modalità utente, non succede granché, dal momento che lo stesso kernel interviene per correggere i possibili danni. D’altra parte, un crash del kernel può compromettere l’intero sistema, ma per evitare che ciò accada possono essere adottate delle precauzioni di sicurezza.