Le parti principali del kernel

Il kernel di Linux consiste di diverse parti importanti: la gestione dei processi, la gestione della memoria, i driver per i dispositivi hardware, quelli per i filesystem, la gestione della rete ed altre parti minori. In Figura 2-1 ne sono mostrati alcuni.

Figura 2-1. Alcune delle parti più importanti del kernel di Linux

Probabilmente le parti più importanti del kernel (nient'altro funziona senza di esse) sono la gestione della memoria e dei processi. La gestione della memoria si occupa di assegnare le aree di memoria e di spazio di swap ai processi, a parti del kernel e per la cache di buffer. La gestione dei processi crea i processi ed implementa il multitasking cambiando il processo attivo sul processore.

Al livello più basso, il kernel contiene un driver per ciascun dispositivo hardware che supporta. Dato che il mondo è pieno di tipi diversi di hardware il numero dei driver è enorme. Ci sono spesso molti componenti hardware simili che differiscono solo in come vengono controllati dal software; queste similitudini rendono possibile avere delle classi generali di driver che supportano operazioni simili: ogni membro della classe ha la stessa interfaccia con il resto del kernel, ma si distingue in quello che serve per implementarlo. Ad esempio, tutti i driver dei dischi sembrano uguali dal punto di vista del resto del kernel, cioè hanno tutti operazioni come `inizializza il driver', `leggi il settore N' e `scrivi il settore N'.

Alcuni dei servizi software forniti dal kernel stesso hanno proprietà simili e possono dunque essere astratti in classi. Ad esempio, i vari protocolli di rete sono stati astratti in un'interfaccia di programmazione, la BSD socket library. Un altro esempio è il livello filesystem virtuale (VFS), che astrae le operazioni su filesystem senza considerare la loro implementazione. Ciascun tipo di filesystem fornisce un'implementazione di ogni operazione; quando un'entità prova ad usare un filesystem, la richiesta passa per il VFS che la gira al driver opportuno.