Nächste Vorhergehende Inhalt

8. Kernel Daemons

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.

8.1 Konfiguration

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.

8.2 Übungen

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.

8.3 Mehr Informationen

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.


Nächste Vorhergehende Inhalt