Con più di 13 milioni di linee, il Kernel Linux è il più grande progetto open-source del mondo. Ma cos’è un kernel? E cosa fa?
Cos’è un kernel
Un Kernel è il livello più basso di software che si interfaccia con l’hardware del computer. E’ il responsabile dell’interfaccia di tutte le applicazioni che vengono eseguite in modalità utente all’hardware e permette ai processi di interagire usando l’inter-processing communication (IPC).
Diversi tipi di kernel
Ci sono diversi tipi di kernel, ovviamente. Ci sono tre grandi categorie di kernel: monolitico, microkernel e ibrido. Linux è un kernel monolitico, mentre OS X e Windows 7 sono ibridi. Diamogli un’occhiata singolarmente.
Microkernel
Un microkernel lavora solo su quello che deve: CPU, memorie e IPC. Il grande vantaggio del Microkernel è la sua portabilità in quanto non deve preoccuparsi di cambiamenti di componenti, etc. Inoltre sono più sicuri nell’utilizzo a causa del minor footprint. I suoi pregi principali sono la portabilità, la sicurezza e il piccolo footprint, mentre tra i contro si possono elencare una certa astrazione dell’hardware, la maggior lentezza dovuta alla mancata gestione dei driver (che saranno eseguiti in user mode) e una certa attesa nell’accesso ai processi.
Kernel monolitico
Sono l’opposto dei minikernel perchè gestiscono non solo l’essenziale, ma anche i driver, il file system, etc. I kernel monolitici sono migliori nel multitasking perchè i servizi non devono attendere per essere processati. Però anche questo ha un prezzo: quando si gestiscono molte cose allo stesso tempo c’è sempre il rischio che una non funzioni come dovrebbe, causando molti problemi di gestione. I pregi del kernel monolitico sono il maggior accesso all’hardware per i processi, è più facile per i processi stessi comunicare tra di loro, se un dispositivo è supportato non c’è bisogno di ulteriori installazioni e i processi reagiscono più velocemente a causa della maggior interazione di sistema. I contro invece sono la grande dimensione del footprint e la minor sicurezza.
Kernel ibrido
I kernel ibridi hanno la capacità di scegliere cosa eseguire in modalità utente e cosa eseguire in modalità supervisore. Spesso il file system e i driver sono gestiti in modalità utente, mentre l’IPC e altre cose sono eseguite in modalità supervisore. Questo da una parte è il meglio dei due mondi, ma dall’altra parte richiede processori più potenti. Possono anche avere qualche problema di latenza come i microkernel. I pregi del kernel ibrido sono la possibilità di scelta tra modalità utente e supervisore e la flessibilità, mentre i difetti sono la gestione dei driver manuale e la lentezza dei processi simile a quella del microkernel.
Dove sono i file kernel?
Il file kernel, in Ubuntu, è nella cartella /boot ed è chiamato vmlinuz-version. La versione è indicata in formato A.B.C.D. A.B probabilmente è 2.6, C è la versione e D indica patch o simili. Non è sempre usata la stessa compressione e certi file kernel possono essere leggermente diversi proprio per questo motivo.
Nella cartella /boot ci sono altri file importanti, come initrd.img-version, system.map-version, e config-version. Il fine initrd è un piccolo “disco” RAM che serve a caricare il kernel, mentre il file system.map è usato per la gestione della memoria prima che il kernel si carichi. Infine il file di configurazione sceglie le opzioni e i moduli da caricare.
Moduli kernel
Un modulo kernel aggiunge funzioni al kernel base per la gestione di driver, file system, etc. Dato che il kernel è modulabile può essere fortemente personalizzato, quindi “giocando” un po’ con i suoi file si può decidere cosa caricare e cosa no, come editare i file di configurazione, etc. I moduli possono essere scaricati o inclusi in distribuzioni come Ubuntu, anche se certi prodotti non hanno file kernel dedicati.
Per ulteriori informazioni rivolgersi al sito Kernel.org