Il kernel (nucleo) è il componente centrale di un sistema operativo, incaricato di gestire l’interazione tra l’hardware del computer e le applicazioni software. È il primo programma a essere caricato in memoria durante l’avvio (boot) e rimane attivo fino allo spegnimento del sistema.
Le responsabilità ingegneristiche principali di un kernel includono:
- Gestione dei processi: pianifica l’esecuzione dei programmi sulla CPU (scheduling), gestendo il multitasking e la comunicazione tra i processi (IPC).
- Gestione della memoria: assegna e protegge gli spazi di memoria RAM per ogni processo, implementando spesso la memoria virtuale.
- Gestione dell’I/O: comunica con le periferiche (dischi, schede video, tastiere) attraverso i driver di dispositivo.
- System Call: fornisce un’interfaccia protetta alle applicazioni per richiedere servizi di basso livello.
Esistono diverse architetture di kernel:
- Monolitici (es. Linux, FreeBSD): tutti i servizi di base (file system, driver, stack di rete) girano nello stesso spazio di memoria protetto (kernel space), massimizzando le prestazioni.
- Microkernel (es. Mach, Minix): solo le funzioni minimali girano nello spazio kernel; gli altri servizi girano come processi utenti separati, aumentando la sicurezza e la modularità.
- Ibridi (es. NT di Windows, XNU di macOS): una via di mezzo che cerca di coniugare la velocità del monolitico con la stabilità del microkernel.