|

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.

© 2001,2002 Jürgen Wolf
|