Következő Előző Tartalom

4. A Linux kernel

A kernel valójában nagyon sok mindent csinál. Úgy gondolom jó összefoglalása a dolgoknak az, hogy ráveszi a hardvert, azt tegye amit a programok akarnak, méghozzá hatékonyan és jól.

A processzor egyszerre csak egy utasítást tud végrehajtani, de a Linux rendszerek látszólag több dolgot is végeznek egyszerre. A kernel ezt úgy éri el, hogy nagyon gyorsan váltogatja a feladatokat. Ezzel a lehető legjobban ki lehet használni a processzort, úgy, hogy követjük melyik folyamat kész a futásra, és melyik várakozik valamire - mint például egy rekordra egy merevlemez fájlból, vagy egy billentyű leütésére. Ezt nevezik ütemezésnek (scheduling).

Ha egy program nem csinál semmit, nem kell a memóriában lennie. Még egy olyan programnak is ami csinál valamit, lehet, hogy vannak olyan részei amik nem csinálnak semmit. Mindegyik folyamat (process) címzési tartománya fel van osztva lapokra. A kernel nyilvántartja, melyik folyamat melyik lapja van a legtöbbet használva. Azokat a lapokat, amik kevésbé használtak, ki lehet helyezni a csere (swap) partícióra. Amikor megint szükség van rájuk, egy másik nem használt lapot lehet kihelyezni. Ez a virtuális memóriakezelés.

Ha már fordítottál saját kernelt, észrevehetted milyen sok az eszközfüggő beállítás. A kernel sok egyedi kódot tartalmaz, a különböző hardverekkel történő kommunikáláshoz, valamint hogy szép egységes felületet mutasson az alkalmazások felé.

Szintén a kernel irányítja a fájlrendszert, a folyamatok közötti kommunikációt, és egy csomó hálozati dolgot.

Amikor a kernel betöltődött, az első dolog amit csinál, hogy egy "init" programot keres és lefuttaja.

4.1 Beállítás

A kernel beállításának legnagyobb része akkor történik, amikor futtatod a "make menuconfig"-ot vagy a "make xconfig"-ot az /usr/src/linux/ könyvtárban, (vagy bárhol máshol, ahol a Linux kernel forráskód van). Újra tudod állítani az alapértelmezett video módot, gyökér (root) fájlrendszert, csere (swap) eszközt és a RAM disk méretét, ha az "rdev"-et használod. Ezeket - vagy még több paramétert - a lilo is át tud adni a kernelnek. Adhatsz a lilo-nak paramétereket a lilo.conf fájlban, vagy a lilo promptjánál, hogy átadja ezeket az információkat. Például ha a hda3-at akarod használni mint root fájlrendszert a hda2 helyett, begépelheted hogy:

        LILO: linux root=/dev/hda3

Ha forrásból építesz rendszert, sokkal egyszerűbbé teheted az életet, ha "monolitikus" kernelt csinálsz. Ez azt jelenti, hogy nincsenek moduljai. Ekkor nem kell kernel modulokat másolni a cél rendszerbe.

FIGYELEM: A System.map fájlt a kernel logger (naplózó) használja, hogy meghatározza a modulneveket generáló üzeneteket. A top nevű program szintén használja ezt az információt. Amikor a kernelt a célrendszerbe másolod, másold át a "System.map"-ot is.

4.2 Gyakorlatok

Egy kis gondolkodnivaló: a /dev/hda3 egy különleges fájl, ami leír egy merevlemez particiót. De egy olyan fájlrendszeren van, mint bármelyik másik fájl. A kernel meg akarja tudni, hogy melyik particiót csatolja fel (mount), mint gyökér fájlrendszert - de még nincs is fájlrendszere. Mégis hogyan tudja olvasni a /dev/hda3 partíciót, hogy megtudja melyik lemezrészt csatolja?

Ha még nem tetted meg, készíts saját kernelt. Olvass el minden súgóinformációt az opciókhoz.

Próbáld ki, mekkora a legkisebb kernel ami még működik. Sokat tanulhatsz abból, ha kihagyod a felesleges dolgokat!

Olvasd el a "The Linux Kernel"-t (URL alább), és közben keresd meg a forráskód azon részeit, amire hivatkozik. A könyv (amint ezt írom) a 2.0.33-as kernel verzióval foglalkozik, ami elég öreg már. Könnyebb követni, ha letöltöd ezt az öreg verziót, és ott olvasod a forrást. Fantasztikus érzés "process" és "page" nevű C kóddarabokat találni.

Hackelj! Próbálj meg extra üzeneteket vagy valami mást kiíratni.

4.3 További információ


Következő Előző Tartalom