Autori del libro: Daniel Pierre Bovet e Marco Cesati
Editore: O'Reilly
Recensione di: Cosimo
Giudizio:
Data: 07/05/2006
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.
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.
Un libro notevole, molto interessante e completo. Lo consiglierei a chi vuole cominciare ad approfondire la conoscenza di Linux.