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.
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.
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.
/usr/src/linux/README
és a
/usr/src/linux/Documentation/
tartalma
(Lehet, hogy ezek máshol vannak a Te rendszereden)make menuconfig
vagy make xconfig
használatakor