Avanti Indietro Indice

8. I Demoni del Kernel

Se eseguite il comandops aux, vedrete probabilmente qualcosa di simile:

USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
root         1  0.1  8.0  1284   536   ? S    07:37   0:04 init [2] 
root         2  0.0  0.0     0     0   ? SW   07:37   0:00 (kflushd)
root         3  0.0  0.0     0     0   ? SW   07:37   0:00 (kupdate)
root         4  0.0  0.0     0     0   ? SW   07:37   0:00 (kpiod)
root         5  0.0  0.0     0     0   ? SW   07:37   0:00 (kswapd)
root        52  0.0 10.7  1552   716   ? S    07:38   0:01 syslogd -m 0 
root        54  0.0  7.1  1276   480   ? S    07:38   0:00 klogd 
root        56  0.3 17.3  2232  1156   1 S    07:38   0:13 -bash 
root        57  0.0  7.1  1272   480   2 S    07:38   0:01 /sbin/agetty 38400 tt
root        64  0.1  7.2  1272   484  S1 S    08:16   0:01 /sbin/agetty -L ttyS1
root        70  0.0 10.6  1472   708   1 R   Sep 11   0:01 ps aux 

Questa è una lista dei processi in esecuzione sul sistema. Le informazioni provengono dal filesystem /proc che ho descritto nella sezione precedente.

Notate che init è il processo numero uno. I process 2, 3, 4 e 5 sono kflushd, kupdate, kpiod e kswapd. C'è tuttavia qualcosa di strano: notate che in entrambe le colonne del Virtual Storage Size (SIZE) e del Real Storage Size (RSS), questi processi hanno valori nulli. Come può un processo non utilizzare memoria?

Questi processi sono i demoni del kernel. La maggior parte dei kernel non mostra affatto una lista dei processi attivi, e potete capire quanta memoria questi stanno utilizzando solamente sottraendo la memoria disponibile da quella totale del sistema. I demoni del kernel vengono avviati dopo init, e quindi prendono un numero di processo come fanno tutti gli altri processi. Ma il loro codice ed i loro dati risiedono nella parte di memoria riservata al kernel.

Intorno alle voci della colonna dei comandi ci sono le parentesi perché il filesystem /proc non contiene informazioni sulla linea di comando per questi processi.

Ma allora a cosa servono questi demoni del kernel? Versioni precedenti di questo documento riportavano una richiesta di aiuto per questo paragrafo, dal momento che non sapevo molto sui demoni del kernel. La storia parziale che segue è stata realizzata combinando le diverse risposte a questa richiesta, per le quali sono veramente grato. Maggiori informazioni, riferimenti e correzioni sono benvenute!

L'input e l'output viene realizzato tramite i buffer in memoria. Questo consente di far eseguire le cose più velocemente. Quello che i programmi scrivono può essere tenuto in memoria, in un buffer, e quindi scritto su blocchi di disco in modo molto più efficiente. I demoni kflushd e kupdate hanno questo compito: kupdate viene eseguito periodicamente (5 secondi?) per verificare se vi siano dei buffer utilizzati. Se ci sono, richiama kflushd per riversarli sul disco.

Spesso i processi non hanno nulla da fare, e spesso, quelli in esecuzione non hanno bisogno di tenere in memoria tutto il loro codice ed i loro dati. Questo significa che possiamo fare un utilizzo migliore della memoria, spostando le porzioni inutilizzate dei programmi sulla(e) partizione(i) di swap dell'hard disk. Il trasferimento di questi dati da e verso la memoria a seconda della necessità viene gestito di demoni kpiod e kswapd. Ogni secondo circa, kswapd si attiva e verifica lo stato della memoria e, se qualcosa che era stato portato sul disco diventa necessario alla memoria, o se non c'è memoria libera a sufficienza, viene attivato kpiod.

Sul vostro sistema potrebbe essere in esecuzione anche il demone kapmd, se avete configurato il kernel con la gestione automatica dell'energia.

8.1 Configurazione

Il programma update vi consente di configurare kflushd e kswapd. Provate il comando update -h per avere maggiori informazioni.

Lo spazio di swap viene attivato da swapon, e disattivato da swapoff. Lo script di init (/etc/rc.sysinit oppure /etc/rc.d/rc.sysinit) generalmente fa una chiamata a swapon quando il sistema si avvia. Mi è stato detto che swapoff è comodo per il risparmio energetico sui portatili.

8.2 Esercizi

Eseguite un update -d (NdT: al momento della traduzione, l'opzione -d non viene contemplata dal programma udate, e notate cosa viene blaterato nell'ultima riga riguardo al ``threshold for buffer fratricide'' (NdT: ``punto limite per un fratricidio tra buffer''). Ecco un argomento intrigante, provate ad investigare!

Entrate nella directory /proc/sys/vm e visualizzate con cat i file ivi contenuti. Vedete cosa riuscite a scoprire.

8.3 Maggiori Informazioni

Il documento ``The Linux Kernel'' su Linux Documentation Project (LDP) (vedete la sessione The Linux Kernel per la URL)

Il codice sorgente del kernel Linux, se siete abbastanza coraggiosi! Il codice di kswapd è in linux/mm/vmscan.c, quello di kflushd e di kupdate sono in linux/fs/buffer.c.


Avanti Indietro Indice