Avanti Indietro Indice

4. Il Kernel Linux

Il kernel assume molti compiti. Credo che un modo semplice per riassumerli sia quello di dire che esso fa in modo che l'hardware soddisfi tutte le richieste dei programmi, in modo semplice ed efficiente.

Il processore può eseguire solo un'istruzione alla volta, ma i sistemi Linux sembrano far girare molte cose contemporaneamente. Il kernel riesce a fare questo passando molto velocemente da un task ad un altro. Riesce a fare il miglior uso del processore, tenendo traccia dei processi che sono pronti per essere eseguiti, e di quelli invece che sono in attesa di qualcosa, come un record da un file sull'hard disk o di un input dalla tastiera. Questa attività del kernel è chiamata scheduling.

Se un programma non sta facendo nulla, allora non è necessario che risieda nella RAM. Anche se un programma sta facendo qualcosa, potrebbe avere delle parti che non stanno facendo nulla. Lo spazio degli indirizzi di memoria di ciascun processo viene diviso in pagine. Il kernel tiene traccia delle pagine di cui i processi stanno facendo maggiore uso. Le pagine che non vengono utilizzate con frequenza possono venire spostate nella partizione di swap. Quando saranno nuovamente necessarie, un'altra pagina non utilizzata potrà essere spostata per fare lo spazio. Questa è la gestione della memoria virtuale.

Se avete compilato qualche volta il vostro kernel, avrete notato che esistono moltissime opzioni per specifici dispositivi. Il kernel contiene una grande quantità di codice specifico per comunicare con diverse tipologie di hardware, e presentarle ai programmi applicativi in modo semplice e uniforme.

Il kernel inoltre gestisce il filesystem, le comunicazioni tra i processi e diverso materiale riguardante il il networking.

Una volta che il kernel è stato caricato, la prima cosa che fa è quella di cercare un programma init da eseguire.

4.1 Configurazione

La maggior parte della configurazione del kernel viene fatta durante la sua compilazione, utilizzando il comando make menuconfig, o make xconfig da dentro la directory /usr/src/linux/ (o comunque dalla directory contenente i sorgenti del kernel Linux). Potete riconfigurare i valori della modalità video predefinita, il filesystem radice, il dispositivo di swap, e la dimensione del disco RAM, tramite il comando rdev. (NdT: dalla versione 0.95 del kernel Linux il comandordev -s per l'indicazione delle partizioni di swap non è più valido, in quanto l'attivazione dello swap viene effettuato tramite la chiamata di sistema swapon()). Questi parametri e altri ancora possono essere passati al kernel attraverso lilo. Potete fornire a lilo i parametri da passare al kernel o dal file di configurazione lilo.conf, o direttamente dal prompt di lilo. Per esempio, se voleste utilizzare hda3 come filesystem radice al posto di hda2, potreste digitare il comando

        LILO: linux root=/dev/hda3

Se state costruendo un sistema dai sorgenti, potete rendervi la vita molto più semplice se create un kernel ``monolitico''. Ossia senza moduli. A questo punto non avrete bisogno di copiare i moduli del kernel sul sistema per cui è stato compilato.

NOTA: il file System.map viene utilizzato dal logger del kernel per determinare i nomi dei moduli che generano messaggi. Anche il programma top utilizza queste informazioni. Quando copiate il kernel sul nuovo sistema, copiate anche il file System.map.

4.2 Esercizi

Riflettete su questo: /dev/hda3 è un file speciale che descrive una partizione dell'hard disk. Ma risiede su un filesystem, proprio come tutti gli altri file. Il kernel vuole sapere quale partizione deve montare come filesystem radice - ma questa non ha ancora un filesystem. Allora, come può leggere /dev/hda3 per sapere quale partizione montare?

Se non lo avete ancora fatto: compilatevi un kernel. Leggete tutta la documentazione di aiuto per ciascuna opzione.

Vedete quanto piccolo riuscite a compilare un kernel che ancora funzioni. Potrete imparare molto se lascerete fuori le cose sbagliate!

Leggete ``The Linux Kernel'' (vedi l'indirizzo URL più sotto) e, mentre lo leggete, individuate le parti di codice sorgente a cui fa riferimento. Il libro (come ho detto) si riferisce alla versione 2.0.33 del kernel, che è piuttosto vecchia. Potrebbe essere più semplice da seguire se scaricaste questa vecchia versione del kernel ed esaminaste quel codice sorgente. Trovo sia entusiasmante trovare pezzi di codice C chiamati ``processo'' e ``pagina''.

Hack! Vedete se riuscite a farvi sputare fuori qualche messaggio extra o cose simili.

4.3 Maggiori Informazioni


Avanti Indietro Indice