Recensione di "Understanding the Linux Kernel" (3ª edizione)

Autori del libro: Daniel Pierre Bovet e Marco Cesati
Editore: O'Reilly
Recensione di: Cosimo
Giudizio: ****
Data: 07/05/2006
Copertina del libro

Questo libro, tutto dedicato al kernel di Linux, è alla sua 3ª edizione, La prima, uscita nel 2000, tratta del kernel 2.2, con alcuni accenni agli ultimi sviluppi del 2.4. La seconda, datata fine 2002, contemplava la versione 2.4 completa. E la terza eccola qua, relativa al kernel 2.6.11.

Gli autori Daniel Bovet e Marco Cesati insegnano all'Università di Roma Tor Vergata utilizzando proprio Linux come "materiale didattico" per i propri corsi sui sistemi operativi.

Il libro consta di ben 923 pagine strutturati in 20 capitoli, 2 appendici e un indice analitico del codice sorgente di Linux. Gli argomenti trattati sono molti, dal livello più basso (gestione della memoria, processi, interrupt) al più alto (device driver, filesystem ext2/ext3, file eseguibili).

La trattazione dei vari aspetti di Linux si riferisce nello specifico all' architettura x86, che per certi versi è la più semplice, anche se vengono comunque enunciati i principi base che valgono indipendentemente dalla piattaforma.
Ad esempio, nel (non facile) capitolo che spiega la gestione della memoria, ci viene spiegato come il kernel di Linux implementi le funzioni di paginazione e gestione della memoria che gli permettono di supportare tutta una serie di architetture diverse (sia monoprocessore, sia SMP), pur senza sacrificare l'ottimizzazione delle prestazioni.

Per sfruttare al meglio questo libro, è bene avere una conoscenza base del linguaggio C e anche qualche rudimento di Assembler. Spesso vengono presentati brani di codice tratti direttamente dal sorgente di Linux oppure un po' semplificati, che vengono analizzati spiegando in dettaglio il funzionamento e l'interazione del codice con le strutture dati del kernel.

Confesso che alcuni capitoli mi sono stati un po' ostici, soprattutto quelli riguardanti l'indirizzamento e la paginazione della memoria, o lo spazio di indirizzamento dei processi, che si spingono in dettaglio anche sugli aspetti hardware (x86). In questi casi, una doppia e tripla rilettura non fa male.

UtLK takes you on a guided tour of the most significant data structure, algorithms and programming tricks used in the kernel.

Altri argomenti, come la gestione del tempo (capitolo 6), il virtual filesystem (capitolo 12), o i device drivers, sono più discorsivi, semplici nell'esposizione e veramente molto interessanti e stimolanti.
Sapevate ad esempio che nelle architetture x86 sono presenti fino a 4 diversi circuiti di timing? E che il kernel utilizza automaticamente il migliore disponibile analizzando l'hardware in fase di boot?

Molto interessante il capitolo 7 (Process Scheduling). Spiega, tra l'altro, il nuovo meccanismo di scheduling dei processi del kernel 2.6 che viene eseguito in tempo costante, qualsiasi sia il numero di processi in esecuzione, cioè un algoritmo a complessità O(1).
Il capitolo illustra il meccanismo di scheduling precedente del kernel 2.4, tutte le strutture dati coinvolte, e in che modo l'adozione di una diversa struttura dati abbia reso possibile questo spettacolare miglioramento.

Il grande pregio di questo libro secondo me è quello di costituire un ottimo compagno di studio. Leggendo magari anche solo un capitolo, o parte di esso, viene la curiosità di esaminare da vicino quella parte di codice indicata nel libro, e... sorpresa! È tutto più chiaro! Ovviamente non si arriva ad avere "La Conoscenza", ma almeno si ha una minima chiave di lettura che permette di orientarsi: la differenza tra vagare al buio ed avere una piccola torcia.

Tra i tanti pregi, vorrei segnalare un aspetto negativo: il fatto che in alcune parti, come la gestione della cache di pagine in memoria, o la parte sugli interrupt, vengano spiegati i dettagli implementativi di funzioni del kernel con elenchi lunghissimi di passaggi (anche 30!). In questi casi, leggere senza codice sorgente sott'occhio non è proponibile e questi "algoritmi" sono più che altro utili come reference che come lettura fine a se stessa.

Completa il libro un indice analitico del codice sorgente di Linux, utile per chi vorrà utilizzare il volume nelle sue notti insonni passate tra i meandri di /usr/src/linux. Ci si può trovare una lista completa di macro, funzioni e strutture con il relativo file sorgente di definizione.
Volendo fare proprio sul serio, vi consiglio di utilizzare vim e ctags, oppure meglio ancora LXR.

Conclusioni

Un libro notevole, molto interessante e completo. Lo consiglierei a chi vuole cominciare ad approfondire la conoscenza di Linux.

Pro

Contro