Helaas bevat deze sectie meer vermoedens en vragen dan feiten. Misschien dat je kunt helpen?
Als je de opdracht ps aux
aanroept, dan zul je iets te zien
krijgen als het volgende:
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
Dit is een lijst met de processen die op het systeem draaien.
Hiervan is init
procesnummer één. De processen
2, 3, 4 en 5 zijn kflushd, kupdate, kpiod en kswapd.
Hier doet zich echter iets vreemds voor: merk op dat bij deze processen
in de kolom met de virtuele opslagomvang (SIZE) als ook de werkelijke
opslagomvang (RSS) een nul staat. Hoe kan een proces geen geheugen gebruiken?
Deze processen maken werkelijk deel uit van de kernel. De kernel staat
helemaal niet in de lijst met processen, en je kunt er alleen achter komen
hoeveel geheugen het gebruikt door het beschikbare geheugen af te trekken
van de hoeveelheid op je systeem. Zouden de haakjes rondom de opdrachtnaam
kunnen betekenen dat dit kernelprocessen zijn (?).
kswapd
verplaatst delen van programma's die thans niet worden
gebruikt uit de echte opslag (dwz RAM) naar swapspace (dwz harddisk).
kflushd
schrijft data vanuit buffers naar disk. Hierdoor draait
het sneller. Wat programma's schrijven kan in het geheugen worden bewaard,
in een buffer, en dan naar disk worden geschreven en grotere efficiëntere
brokken. Ik weet niet waar kupdate
en kpiod
voor dienen.
Hier eindigt mijn kennis. Wat doen die laatste twee daemons? Waarom krijgen kerneldaemons expliciete procesnummers in plaats van dat het gewoon anonieme bits met kernelcode zijn? Start init ze werkelijk op, of draaien ze al als init in beeld verschijnt?
Ik plaatste een script voor het mounten van /proc
en uitvoeren van
ps aux
in /sbin/init
. Proces 1 was het script zelf, en
de processen 2, 3, 4 en 5 waren de kerneldaemons net als onder de echte
init. De kernel moet deze processen daar plaatsen, omdat mijn script het
beslist niet deed!
Ik ben niet bekend met enige configuratie voor deze kerneldaemons.
Zoek uit waar deze processen voor zijn, en schrijf een nieuwe ``Kernel daemons'' sectie voor dit document, en stuur dat naar me op!
De ``Linux Kernel'' van het Linux Documentatie Project (zie De Linux Kernel voor een url), en de broncode van de kernel is alles wat ik kan bedenken.