Wenn Sie folgendes Kommando eingeben ps aux
, werden Sie etwas, wie Folgendes sehen:
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
Das ist eine Liste der Prozesse, die auf dem System laufen. Die Informationen kommen
aus dem /proc
Dateisystem, welches ich in der vorangegangenen Sektion behandelt hatte.
Beachten Sie das init
der Prozess Nummer eins ist. Prozesse 2, 3, 4 und 5 sind kflushd, kupdate, kpiod und
kswapd. Doch ist hier etwas seltsam: beachten Sie, daß in beiden, der virtuelllen
Speichergrösse (SIZE) und der realen Speichergrösse (RSS), diese Prozesse
Null haben. Wie kann ein Prozess keinen Speicher brauchen?
Diese Prozesse sind die Kernel daemons. Das meiste des Kernels erscheint nicht auf der Prozessliste, und Sie können nur herausfinden wieviel Speicher diese belegen, in dem Sie den verfügbaren Speicher vom Gesamtvolumen abziehen. Die Kernel daemons wurden nach init gestartet, so bekommen sie Prozessnummern, wie jeder andere normale auch. Aber ihr Code und ihre Daten existieren im Teil den der Kernel vom Speicher beansprucht.
Die Einträge in der Kommando Spalte sind in Klammern
weil das /proc
Dateisystem keine Kommandozeileninformationen
für diese Prozesse beinhaltet.
Also wofür sind diese Kernel daemons gut? Frühere Versionen dieses Dokumentes hatten eine Bitte um Hilfe, da ich nicht viel von Kernel daemons wußte. Die folgende Geschichte wurde zusammengetragen aus den Antworten zu meinem Hilfegesuch, für welche ich sehr dankbar bin. Weitere Hinweise, Referenzen und Korrekturen sind sehr willkomen!
Ein- und Ausgabe geschieht über Puffer im Speicher.
Das erlaubt den Dingen, schneller abzulaufen. Was
Programme schreiben, kann im Speicher gehalten werden, in einem Puffer. Dann wird es in effizienteren Ketten auf einen Plattenspeicher
geschrieben. Die daemons kflushd
und kupdate
kümmern sich darum:
kupdate
läuft periodisch (5 Sekunden?)
um heraus zu finden ob es belegte Puffer gibt. Wenn dies so ist, ruft es
kflushd
auf, um diese auf den Plattenspeicher zu schreiben.
Prozesse haben oft nichts zu tun, und einige die oft laufen
brauchen nicht all ihren Code im Speicher. Das bedeutet, das wir
den Speicher besser nutzen können, in dem wir unbenutzte Teile von laufenden Programmen
auf die swap Partition(en) der Festplatte auslagern.
Um diese Daten in und aus dem Speicher zu schreiben wird
kpiod
und kswapd
benutzt. Jede Sekunde oder so, überwacht kswapd
den Speicher und wenn etwas auf der Festplatte
im Speicher gebraucht wird, oder es nicht genug Speicher gibt, wird
kpiod
aufgerufen.
Es könnte auch ein kapmd
daemon auf Ihrem System laufen, wenn Sie
das automatische Powermanagement in Ihrem Kernel konfiguriert haben.
Das Programm update
erlaubt Ihnen kflushd
und kswapd
zu konfigurieren.
Versuchen Sie update -h
für Informationen.
Swap Speicher wird eingeschaltet durch swapon
und ausgeschaltet durch swapoff
.
Das init Script (/etc/rc.sysinit
oder /etc/rc.d/rc.sysinit
)
ruft normalerweise swapon
auf, wenn das System startet.
Man hat mir gesagt, daß swapoff
gut ist um Strom auf einem Laptop zu sparen.
Starten Sie ein update -d
, beachten Sie die Meldungen in der letzten Zeile
über "threshold for puffer fratricide (die Schwelle zur Puffervernichtung)".
Das ist ein interessantes Konzept, untersuchen Sie es!
Wechseln Sie das Verzeichnis nach /proc/sys/vm
und führen Sie ein cat
auf die
Dateien dort aus. Sehen Sie nach, was sie dabei heraus finden.
The Linux Documentation Project's "The Linux Kernel" (siehe Sektion Der Linux Kernel)
Der Linux Kernel Quelltext, wenn Sie tapfer genug sind!
Der kswapd
Code ist in linux/mm/vmscan.c
,
und kflushd
und kupdate
sind in linux/fs/buffer.c
zu finden.