A bekapcsolástól a bash promptig: Kernel démonok

Következő Előző Tartalom

## 8. Kernel démonok

Ha kiadod a "`ps aux`" parancsot, valami ehhez hasonlót fogsz látni:

    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

Ez a rendszerben futó folyamatok listája. Az információ a `/proc` fájlrendszerből (amit az előző részben már említettem) származik. Figyeld meg, hogy az "`init`" az egyes számú folyamat. A "kflushd", "kupdate", "kpiod" és a "kswapd" a 2, 3, 4 és 5-ös számú folyamatok. Van azonban valami furcsa: nézd meg mind a virtuális tárolási méret (SIZE), mind a valódi tárolási méret (RSS) nevű oszlopokat. Ezeknél a folyamatoknál nullák szerepelnek. Hogyhogy egy folyamat nem használ memóriát?

Ezek a folyamatok a kernel démonok. A kernel legnagyobb része egyáltalán nem mutatkozik a folyamatlistákon. Csak úgy találhatod ki mennyi memóriát használnak, ha kivonod a gépben lévő memóriából a rendelkezésre álló memória mennyiségét. A kernel démonok az "init" után indulnak el, így kapnak folyamatszámot ugyanúgy, mint a normál folyamatok. De a kódjuk és adataik a kernel részére lefoglalt memóriában van.

A COMMAND oszlop bejegyzéseinél zárójelek vannak, mivel a `/proc` fájlrendszer nem tartalmaz parancssori információkat ezekről a folyamatokról.

Tehát mire is valók ezek a kernel démonok? E dokumentum előző verzióiban volt egy segítségkérő rész, mivel nem tudtam sokat róluk. A következő történet az erre adott válaszokból (amiért nagyon hálás vagyok) lett összerakva. Szívesen fogadom a további okosításokat, referenciákat és kiigazításokat!

A bevitel és kivitel puffereken (buffers) keresztül történik a memóriában. Ettől gyorsabban mennek a dolgok. Amit a programok írnak, a memóriában lehet tartan - egy pufferben - ezután nagyobb (hatékonyabb) darabokban lehet a lemezre írni. A "`kflushd`" és "`kupdate`" démonok ezt a munkát végzik: a "`kupdate`" periodikusan lefut (5 másodpercenként?), hogy leellenőrizze van-e használt puffer (dirty buffers). Ha igen, utasítja a "`kflushd`" démont, hogy írja ki őket a lemezre.

A folyamatoknak gyakran semmi dolguk, és azoknak amik éppen futnak, gyakran nincs arra szükségük, hogy az össszes kódjukat és adataikat a memóriában tartsák. Ez azt jelenti, hogy jobb hasznát vesszük a memóriánknak, ha a futó programok éppen nem használt részeit kiírjuk a merevlemez csere (swap) partíciójára. Az adat szükséges ki- és bemozgatását a memóriába (-ból) a "`kpiod`" és a "`kswapd`" végzi. Minden másodpercben vagy valahogy így, a "`kswapd`" felébred, hogy leellenőrizze a memória helyzetét, és ha szükség van valamire a memóriában - ami a lemezen található - vagy nincs elég szabad memória, a "`kpiod`" hívódik meg.

Lehet, hogy a "`kapmd`" démon is fut a rendszereden, ha az automatikus áramgazdálkodás (automatic power management) be van fordítva a kerneledbe.

## 8.1 Beállítás

Az "`update`" programal lehet beállítani a "`kflushd`" és a "`kswapd`" démonokatt. Próbáld az "`update -h`" parancsot kiadni valami információért.

A csere partíciót be lehet kapcsolni a "`swapon`", és ki lehet kapcsolni a "`swapoff`" paranccsal. Az init szkript (`/etc/rc.sysinit` vagy `/etc/rc.d/rc.sysinit`) általában meghívja a "`swapon`"-t, amint a rendszer elindul. Azt mondták nekem, hogy a "`swapoff`" praktikus, ha áramot akarunk spórolni laptopon.

## 8.2 Gyakorlatok

Csinálj egy `update -d`-t, és figyeld a dumát az utolsó sorban a "threshold for buffer fratricide"-ről. Most már van egy érdekes fogalmad, járj utána!

Lépj be a `/proc/sys/vm` könyvtárba és adj ki egy "`cat`" parancsot az ott lévő fájlokra. Figyeld meg, mi mindenre tudsz rájönni ezáltal.

## 8.3 További információ

A Linux Dokumentációs Projekt "The Linux Kernel" dokumentuma (lásd A Linux kernel fejezetet URL-ért)

A Linux kernel forráskódja, ha elég bátor vagy! A "`kswapd`" kódja a `linux/mm/vmscan.c`-ben, a "`kflushd`" és "`kupdate`" kódja pedig a `linux/fs/buffer.c` fájlban van.

Következő Előző Tartalom