Malheureusement, cette section contient plus de questions et de conjectures que de faits. Peut-être pouvez-vous apporter votre pierre ?
Si vous saisissez la commande ps aux
, vous verrez quelque chose
ressemblant à ce qui suit :
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
C'est une liste de processus en cours d'exécution sur le système. Remarquez
que init
est le processus numéro un. Les processus 2, 3,4 et 5 sont
kflushd, kupdate, kpiod et kswapd. Il y a quand même quelque chose
d'étrange : dans les deux colonnes de la taille virtuelle de stockage (SIZE)
et la taille réelle de stockage (Real Storage Size, RSS), ces processus
renvoient zéro. Comment un processus peut-il ne pas utiliser de mémoire ?
En réalité, ces processus font partie du noyau. Le noyau, lui, n'apparaît
pas du tout sur la liste des processus, et vous ne pouvez définir la mémoire
utilisée qu'en soustrayant la mémoire disponible du total installé sur votre
système. Les parenthèses autour du nom de commande pourraient signifier
qu'il s'agit d'un processus noyau (?)
kswapd
déplace des parties d'un programme non utilisées à un instant
donné de l'espace de stockage réel (c'est-à-dire la RAM) vers l'espace de
swap (c'est-à-dire le disque dur). kflushd
écrit les données des
buffers vers le disque. Ceci permet aux choses d'aller plus vite. Ce que les
programmes écrivent peut être conservé en mémoire, dans un buffer, puis
écrit sur le disque par morceaux plus larges et de façon plus efficace
(NDT : principe du cache). Je ne sais pas à quoi servent kupdate
et kpiod
.
C'est ici que finissent mes connaissances. Que font ces deux derniers démons ? Pourquoi les démons noyau ont-ils des numéros de processus explicites plutôt que d'être simplement des bouts de code anonymes ? Est-ce qu'init les lance effectivement, ou tournent-ils déjà lorsque init apparaît ?
J'ai mis dans /sbin/init
un script pour monter /proc
et faire
un ps aux
. Le processus 1 était le script lui-même, et les
processus 2, 3, 4 et 5 étaient les démons noyau, juste au dessous du vrai
init. Le noyau les a forcément mis là, car ce n'est sûrement pas mon script
qui l'a fait.
Les hypothèses suivantes viennent de David Leadbeater :
Ces processus semblent s'occuper des accès disque, ils semblent être lancés par le noyau, mais après avoir lancé le processus init. Il semble qu'en étant lancés comme des processus noyau plutôt que comme des processus séparés, ils soient protégés et ne peuvent être tués (kill -9 ne les arrête pas), je ne sais pas vraiment pourquoi ils sont lancés en tant que threads séparés. Il semble y avoir un rapport avec les accès disque.
kflushd et kupdate Ces deux processus sont démarrés pour vider les buffers "sales" (c'est-à-dire modifiés) vers le disque. kflushd est lancé quand les buffers sont pleins et kupdate se lance périodiquement (5 secondes ?) pour synchroniser les disques avec les buffers en mémoire.
kpiod et kswapd Ils ont pour tâche l'exportation de pages (sections) de mémoire vers le fichier d'échange de façon à ce que la mémoire principale ne soit jamais remplie, ils ressemblent à kflushd et kupdate dans le sens où l'un est lancé en cas de besoin (kpiod) et l'autre (kswapd) est lancé périodiquement (à intervalles d'une seconde).
Autres démons du noyau
Sur une installation par défaut de RedHat 6, kupdate a disparu mais udpate tourne en tant que démon dans l'espace utilisateur, et il semble qu'il ait besoin d'être lancé. Il y a également un autre démon, mdrecoveryd, qui lui semble d'occuper du RAID. En regardant dans les sources du noyau, il semble que certains pilotes SCSI lancent eux aussi des processus séparés.
Je ne connais toujours pas la signification des parenthèses, mais elles semblent apparaître quand la RSS d'un processus est à zéro, ce qui signifie qu'il n'utilise pas de mémoire (?).
(fin de citation, merci David)
Je n'ai pas connaissance d'une configuration de ces démons noyau.
Trouvez à quoi servent ces processus, comment ils fonctionnent, et écrivez une nouvelle section `Démons Noyau'' pour ce document, et envoyez-la moi !
``Le Kernel Linux'' du Projet de Documentation Linux (LDP). (voir section Le noyau Linux pour l'url), et les sources du noyau, c'est tout ce que je vois pour le moment.