ein Kapitel zurück                                           ein Kapitel weiter

Jeder der sich ernsthaft mit der Programmierung und Linux auseinandersetzen will, sollte wissen worum es sich um Prozessen handelt. Unter Linux ist die Prozeßverwaltung sozusagen die Schlüsselfigur bei vielen Programmen die sie Schreiben werden.

Dafür ist diese Kaptitel gedacht. Sie werden erst mal einiges zu Prozessen lernen bevor sie selber welche Erzeugen.

Definition eines Prozesses
Ein Prozeß ist ein in der Ausführung befindliches Programm mit seiner Ausführungsumgebung (Environment).

Die Prozeßverwaltung
Da Linux ein echtes Multitaskingsystem ist, werden mehrer Programme (Prozesse, Task) "gleichzeitig" ausgeführt. Wobei "gleichzeit" nicht stimmt. Ein Prozessor (CPU) kann logischerweise immer nur mit einem Prozeß arbeiten. Wollen sie wirkleich gleichzeitig das mehrere Programme parallel ablaufen, benötigen sie entweder mehrere Rechner oder mehrer Prozessoren. Dies dürfte aber für die meisten Anwender uninteressant sein (wegen den Anschaffungskosten).

Jeder Prozeß hat also einen ,extra für sich, virtuellen Adressraum. Somit kann keiner der Prozesse den anderen Stören oder Beeinflußen.

Zugegriffen wird auf die einzelnen Prozesses nacheinander von der CPU. Wie lange und in welcher Reihenfolge entscheidet der Prozeß-Scheduler. Von der Geschwindigkeit werden sie aber nichts mitkriegen. Sie werden den Eindruck habe das die Prozesse wirklich parallel laufen.

Linux ist als ein preemptive Multitaskingsystem. Dies bedeutet das Linux selbst entscheidet wie lange ein Prozeß die CPU benutzen darf und wann der nächste Prozeß an der Reihe ist. Wollen sie in den Prozeß-Scheduler eingreifen, können sie dies als root mit dem Kommano nice. Mehr unter man nice oder nice --help

Welche Prozesse momentan laufen können sie mit dem Kommando ps anzeigen lassen.......

ps -x  

Nun wird ein Liste der momentan laufenden Prozesse ausgegeben. Hierzu kurz ein Erläuterung was die einzelnen Sektionen bedeuten..........

PID  TTY              STAT    TIME   COMMAND
1234 pts/0            R       0:00   ps -x


  • PID = Prozeß-ID. Jeder Prozess bekommt eine eigenen eindeutige Prozeß-ID. Über diese Prozeß-ID werden wir später auf diesen Prozeß zugreifen können. Wenn sie zum Beispiel Informationen zum Prozeß mit der ID 1501 haben wollen geben sie das Kommando.......

    ps 1501  

    ...ein. Kennen sie die Prozeß-ID nicht, aber das laufende Kommando, geben sie in der Konsole..........

    pidof /bin/bash  

    ...ein und sie erhalten die Prozeß-ID dafür.

  • TTY = Zeigt an in welchem (Kontroll)Terminal der Prozeß ausgeführt wird. Steht dort kein Wert handelt es sich meist um einen Dämon-Prozeß (kommt noch).

  • STAT = Zeigt den akutellen Status des Prozeßes an. In unserem Fall steht hier ein R für RUN. Dieser Prozess ist also gerade Aktiv. Folgende Bedeutung haben folgende Zeichen:

     S = sleeping
     SW= Datei wurde in dem Swap-Speicher ausgelagert (siehe auch "man mkswap")
     R = running
     Z = Zombie (Prozess ist abgelaufen aber hat noch keinen Rückgabestatus an
         den Vaterprozess geschickt)  


  • TIME = Laufzeit des Prozeßes

  • COMMAND = Kommandoname des Prozeßes mit dem sie diese gestartet haben z.B.


Die Anordnung der Prozeße unter Linux sind Hierachisch. Dies läuft wie bei einem Familienstammbaum ab. Jeder Prozeß besitzt Informationen von welchem Prozeß er erzeugt wurde. Also dem Vaterprozeß.

Sind sie nun Interessiert welche Prozeß wieviel CPU-Zeit benötigt können sie das Kommando top verwenden. Diese zeigt Ihnen eine Überblick wieviel Rechenzeit ein CPU gerade für ein bestimmtes Programm verbrät. Mit 'q' können sie das Programm wieder beenden. Achten sie auf die '%CPU' Rechenzeit.

Ein bißchen verwirren wird sie dabei der Eintrag kapm-idled oder nur idled. Dieser Prozeß benötigt ja fast die ganze Rechenzeit. Da auf unserem System ja momentan nicht allzuviel läuft, müssen die Prozeße ja ein wenig aufgeteilt werden. Idled kann man sich praktisch als eine Endlosschleife vorstellen, die immer ausgeführt wird, wenn nichts anderes zu tun ist. Sie können ja mal eine Kernel compilieren, ein Diskette formatieren und dann das Kommando top eingeben.

Die Prozeßtabelle
Mancher Wissensdurstiger wird jetzt wo sich dieser Scheduler für den Prozess befindet. Sie finden diese Prozeßtabelle in der Headerdatei...

/usr/include/linux/sched.h  

Nach der Struktur struct task_struct müssen sie Auschau halten. Hier befinden sich alle Zustandsinformationen zu einem Prozess. Diese Informationen sind recht Umfangreich und alle jetzt zu Erklären würde nicht allzuviel bringen. Aber ich finde es ist ganz gut Kommentiert. Grob zusammengefasst finden sie darin folgende Informationen.............

  • Prozeßidenfikation - Hier steht fest welche Rechte der Prozeß hat. Diese wiederum ergeben sich aus den effektiven bzw. realen Benutzer- und Gruppennummern. Natürlich finden sie hier die oben besprochene Prozeßnummer (PID) wieder.

  • Prozeßpriorität - Sie wissen ja das Linux einen Prozeß nach dem anderen durchläuft. Jeder Prozeß hat nun eine bestimmte Zeit für sich zur Verfügung. Ist diese Zeit um, muss er sein Arbeit hinlegen, sofern er nicht fertig ist und warten bis er das nächste mal dran kommt. Und dieser Teil ist dafür Zuständig. So kann der Kernel feststellen welchen Prozeß er als nächstes ansteuert.

  • Accounting Informationen - Hier sthen die Informationen zu den Speicherzugriffen im virtuellen Speicher. Diese Informationen werden benötigt wenn ein Prozeß auf eine bestimmte Speicherseite zugreifen will, diese aber noch nicht geladen wurde. Nun meldet die Hardware eine Page Fault worauf der Kernel mit dem Nachladen dieser Seite antwortet.

  • Kontrollterminal - Jeder Prozeß, abgesehen von den Dämonprozessen benötigt ein Kontrollterminal wo sie die Einträge für Standard-Ein/Aus und Fehlerausgabe befinden (stdin, stdout, stderr).

  • Lokale Deskriptortabelle - Diese Tabelle wird von Prozessen benötigt die auf die Speicherverwaltung von M$-Systemen zugreifen wollen. Wird von Windows-Emulationen verwendet.

Dies war jetzt ein erster kurzer Überblick zu den Prozeßen unter Linux. In den nächsten Kapiteln werden sie sehen, wie sie Prozesse kreiern können und diese miteinander Kommunieren kommunizieren können. Natürlich werden sie auch etwas zu den Dämonprozessen erfahren. Wie und Wozu man sie verwendet. Wir werden auch sehen wie man eigene Dämaonprozesse schreibt.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf