SelfLinux » Überblick über Linux » Der Linux-Kernel » Teil 1 SelfLinux-0.8.0
« zurück weiter »
SelfLinux logo
OrdnerDer Linux-Kernel Revision: 1.1.2.7
Autor: Erwin Dogs
Layout: Matthias Hagedorn
Lizenz: GFDL

1 Der Kernel

Der Betriebssystemkern (Kernel) erledigt in einem Betriebssystem die grundlegendsten Aufgaben. Dazu gehören: Verwaltung von Prozessen, Verwaltung des Dateisystems, Steuerung von Hardwareressourcen, Speicherverwaltung. Der Kernel ist somit das Herz des Betriebssystems. Unter Linux beinhaltet der Kernel auch Gerätetreiber, die das System braucht (als Runtime-Module oder fest eingebaut). Nichts funktioniert ohne einen Kernel, und genau das ist es, was Linux zu Linux macht, denn wenn wir von Linux sprechen, meinen wir eigentlich den Kernel in der aktuellen stabilen Version 2.4.x.

Aber ein Kernel allein macht noch kein Betriebssystem aus, sondern muss auch irgendwie vom Benutzer angesprochen werden können, damit es überhaupt Arbeit gibt, die er verrichten kann.

Der Kernel liegt als Datei (bzImage) auf einem Datenträger vor, und muss für den Start in den Hauptspeicher eingelesen werden.

Dazu gibt es verschiedene Methoden, welche sich dadurch unterscheiden, wo die Kerneldatei liegt. Wir kennen 3 verschiedene Orte, an denen ein bootfähiger Kernel residieren kann:

  1. Internet

  2. Intranet

  3. Localhost - Diskette, Festplatte, CD-ROM, EPROM, EEPROM o.ä.

Betrachtet wird hier die Variante Diskette, welche fast zwingend neben der Betriebsboot-Möglichkeit am localhost vorhanden sein sollte.

Praxisübung:

Suchen Sie die Kerneldatei, mit der Ihre Distribution den Rechner zum Booten gebracht hat. Kopieren Sie diese Datei im raw-Modus auf eine roh (ohne Erstellung eines Filesystems) formatierte 3,5"-Diskette:
root@linux / # dd if=KERNELFILE of=/dev/fd0u1440

Zur Erprobung booten Sie Ihren Rechner mit dieser Diskette. Dazu ist die Bootreihenfolge im BIOS möglicherweise wie folgt umzustellen:

A: CDROM: C:

Dieser Bootvorgang wird mit grosser Wahrscheinlichkeit fehlschlagen, und das ist gut so. Der Kernel der Distribution hat die Root-Partition in sich gespeichert. Diese stimmt in den seltensten Fällen mit der tatsächlichen Root-Partition überein. Abhilfe schafft eine Behandlung der Diskette mit dem Befehl rdev.

Falls das Booten nicht fehlgeschlagen ist, weil die Root-Partition stimmt, ist es lohnenswert, einmal mit rdev eine falsche Root-Partition in den Kernel zu schreiben, um einen fehlerhaften Bootvorgang (Kernel bleibt stehen) beobachten (und später erkennen) zu können.

Ein auf dem eigenen Rechner selbst compilierter Kernel hat die richtige Root-Partition in sich gespeichert.



2 Init

Als "Kommunikationsschnittstelle" zwischen dem Kernel und dem Benutzer fungiert der init-Prozess.

init gibt Aufgaben an den Kernel weiter und empfängt Anweisungen vom Kernel (etwa "init starte bitte Programm xy als Prozess yz"). Das ist die Aufgabe von init. Außerdem überwacht init, dass einige bestimmte Programme, die das System zum Arbeiten benötigt, immer laufen und startet diese neu, wenn diese Prozesse einmal beendet werden.

Beim Systemstart und -herunterfahren startet bzw. stoppt init die benötigten Programme.

Die Informationen, die der init-Prozess braucht, um zu wissen, welche Programme gestartet werden müssen, findet er in der Regel im Verzeichnis /etc/init.d. In diesem Verzeichnis liegen die Startskripte für die meisten Dienste. Diese Skripte enthalten Anweisungen, wie welche Programme gestartet und auch gestoppt werden. Nun wird in sogennannten "Runlevels" festgelegt, welche Sammlung von Diensten in einem bestimmten Systemmodus gestartet wird. Dazu liegen in den entsprechenden Runlevelverzeichnissen (i.d.R. /etc/rc(s,0-6).d) Links auf die Skripte in /etc/init.d. Diese Links können zum Starten als Sxx-Skript (S="start") oder zum Stoppen als Kxx-Skript (K="kill") aufgerufen werden. XX steht für eine Zahl, z.B. S02checkfs. Mit dieser kann die Priorität und damit Reihenfolge des Aufrufs festgelegt werden.

Die Information, in welches Runlevel das System standardmäßig startet, in welchem Verzeichnis die Links liegen und auch noch einige andere, finden sich in der Konfigurationsdatei /etc/inittab.

Aber nicht nur beim Systemstart, sondern auch im laufenden Betrieb verrichtet init ständig seine Arbeit. Dazu muss es eine Umgebung geben, in der der Benutzer Befehle an das System geben kann. Dies ist unter Linux die Shell.



3 Shell

Die Shell ist die Schnittstelle zwischen Benutzer und System. In ihr gibt der Benutzer Befehle an das System und die Shell führt diesen Befehl aus, indem sie init veranlasst, das ausführbare Programm, das hinter diesem Befehl steht, zu starten. Die Standardshell unter Linux ist die bash (Bourne Again Shell), die modernste und mächtigste aller Shells. Prinzipiell jedoch kann jede Unix-Shell (z.B. Bourne-Shell, C-Shell, Korn-Shell...) unter Linux verwendet werden.


kernel2.png
kernel2.png

Der Weg eines Befehls, den ein User eingibt, wird schematisch im Schaubild oben dargestellt:

User->Shell->init->Kernel->Hardware->Kernel->init->Shell->User

« zurück weiter »
Inhalt