Der Kernel hat wirklich viel zu tun. Ich denke fair zusammengefaßt, veranlaßt der Kernel die Hardware das zu tun, was die Programme brauchen. Fair und effizient.
Der Prozessor kann zu einer Zeit immer nur eine Aufgabe ausführen, aber in Linux Systemen sieht es so aus, als wenn mehrere Dinge gleichzietig ablaufen würden. Der Kernel erreicht dies, in dem er sehr schnell zwischen den einzelnen Aufgaben umschaltet. Der beste Nutzen wird aus dem Prozessor geholt, wenn immer bekannt ist, welche Prozesse fertig zur Abarbeitung anstehen und welche noch auf irgendwelche Daten, wie Tastatureingaben oder Daten von der Festplatte warten. Diese Kernelaufgabe wird "Scheduling (Zeitplan)" genannt.
Wenn ein Programm nichts tut, dann braucht es auch nicht im RAM zu sein. Sogar ein Programm, das gerade beschätigt ist, hat manchmal Teile, die nichts tun. Der Adressraum jedes Prozesses ist eingeteilt in Seiten. Der Kernel merkt sich, welche Seiten von welchem Prozess am meisten benutzt werden. Die Seiten, welche nicht so oft benutzt werden, können ausgelagert werden in den "Swap" Speicher. Wenn sie wieder gebraucht werden, werden andere unbenutzte Seiten ausgelagert um für diese Platz zu schaffen. Das ist virtuelles Speicher Mangement.
Wenn Sie jemals einen eigenen Kernel kompilliert haben wissen Sie, das es sehr viele Einstellungen für viele Geräte gibt. Der Kernel beinhaltet eine Menge speziellen Code um mit diverser Hardware kommunizieren zu können und bietet diesen in einer einheitlichen Weise den Programmen an.
Der Kernel verwaltet auch das Dateisystem, die Interprozeß-Kommunikation, und eine Menge Netzwerk Dinge.
Wenn der Kernel einmal geladen ist, ist seine erste Aufgabe nach init
zu suchen und dieses Programm auszuführen.
Das meiste der Konfiguration des Kernels ist mit der Erstellung getan, benutzen Sie dazu
make menuconfig
, oder make xconfig
in /usr/src/linux/
(oder wo auch immer Ihre Linux Kernel Quelle ist). Sie können folgendes zurück setzen den Standard Video Modus, das "root" Dateisystem, die "swap" Datei und die RAM Größe durch Benutzung von rdev
.
Diese Parameter und noch viel mehr können dem Kernel auch durch lilo übergeben werden.
Sie können lilo Parameter für den Kernel in der Datei lilo.conf oder am lilo Prompt geben.
Wenn Sie zum Beispiel hda3 anstatt hda2 als Ihr root Dateisystem benutzen wollen, geben Sie folgendes ein:
LILO: linux root=/dev/hda3
Wenn Sie ein System aus den Quellen erstellen wollen, können Sie sich das Leben erleichtern, wenn Sie einen "monolithischen" Kernel erstellen. Das ist einer ohne Module. Dann haben Sie keine Kernel Module zum Zielsystem zu kopieren.
Beachten Sie: Die System.map
Datei wird vom Kernel-Log Dienst benutzt um zu entscheiden, welche Module Meldungen erzeugen.
Das Programm top
benutzt diese Informationen auch.
Wenn Sie den Kernel zum Zielsystem kopieren, kopieren Sie
System.map
auch.
Denken Sie darüber nach: /dev/hda3
ist ein spezieller Typ von Datei, welcher eine Festplattenpartition beschreibt.
Aber es existiert auf einem Dateisystem, wie jede andere Datei auch.
Der Kernel möchte wissen, welche Partition er als root Partition laden soll - er hat bis jetzt kein Dateisystem.
Also, wie kann er
/dev/hda3
lesen um heraus zu finden, welche Partition einzuhängen ist?
Wenn Sie es nicht bereits getan haben: erstellen Sie Ihren eigenen Kernel. Lesen Sie alle Hilfeseiten für jede Option.
Finden Sie heraus wie klein Sie einen Kernel machen können, so das er noch funktioniert. Sie lernen eine Menge, wenn Sie die falschen Sachen weg lassen!
Lesen Sie "The Linux Kernel" (URL unten) und während Sie das tun, finden Sie die Teile des Quelltextes, die gerade behandelt werden. Das Buch (welches ich schreibe) referiert den Kernel Version 2.0.33, welcher bereits sehr alt ist. Es wird für Sie leichter sein, wenn Sie diese alte Version herunterladen und die Quellen dort lesen. Es ist erstaunlich C-Code zu finden, genannt "process" und "page".
Versuchen Sie andere Meldungen hervor zu rufen.
/usr/src/linux/README
und der Inhalt von
/usr/src/linux/Documentation/
(Diese könnten auch an einem anderen Platz in Ihrem System liegen)make menuconfig
oder make xconfig