







|

Jeder der sich ernsthaft mit der Programmierung und Linux auseinandersetzen
will, sollte wissen worum es sich bei Prozessen handelt. Unter Linux
ist die Prozessverwaltung 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 Prozess ist ein in der Ausführung befindliches Programm mit seiner
Ausführungsumgebung (Environment).
Die Prozessverwaltung
Da Linux ein echtes Multitaskingsystem ist, werden mehrer Programme (Prozesse, Task)
"gleichzeitig" ausgeführt. Wobei "Gleichzeitig" nicht stimmt. Ein Prozessor (CPU)
kann logischerweise immer nur mit einem Prozess arbeiten. Wollen sie wirklich 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 Prozess hat also einen ,extra für sich, virtuellen Adressraum. Somit
kann keiner der Prozesse den anderen Stören oder Beeinflussen.
Zugegriffen wird auf die einzelnen Prozesses nacheinander von der CPU.
Wie lange und in welcher Reihenfolge entscheidet der Prozess-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 Prozess die CPU benutzen darf und wann
der nächste Prozess an der Reihe ist. Wollen sie in den Prozess-Scheduler
eingreifen, können sie dies als root mit dem Kommando 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 = Prozess-ID. Jeder Prozess bekommt eine eigenen eindeutige Prozess-ID.
Über diese Prozess-ID werden wir später auf diesen Prozess zugreifen können.
Wenn sie zum Beispiel Informationen zum Prozess mit der ID 1501 haben wollen
geben sie das Kommando.......
ps 1501
...ein. Kennen sie die Prozess-ID nicht, aber das laufende Kommando, geben
sie in der Konsole..........
pidof /bin/bash
...ein und sie erhalten die Prozess-ID dafür.
- TTY = Zeigt an in welchem (Kontroll)Terminal der Prozess ausgeführt wird.
Steht dort kein Wert handelt es sich meist um einen Dämon-Prozess (kommt noch).
- STAT = Zeigt den aktuellen Status des Prozesses 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 Prozesses
- COMMAND = Kommandoname des Prozesses mit dem sie diese gestartet haben z.B.
Die Anordnung der Prozesse unter Linux sind Hierarchisch. Dies läuft wie bei
einem Familienstammbaum ab. Jeder Prozess besitzt Informationen von welchem Prozess
er erzeugt wurde. Also dem Vaterprozess.
Sind sie nun Interessiert welche Prozess wie viel CPU-Zeit benötigt können
sie das Kommando top verwenden. Diese zeigt Ihnen eine Überblick wie viel
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 Prozess benötigt ja fast die ganze Rechenzeit. Da auf unserem System
ja momentan nicht allzu viel läuft, müssen die Prozesse 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 Prozesstabelle in der Headerdatei...
/usr/include/linux/sched.h
Nach der Struktur struct task_struct müssen sie Ausschau halten. Hier befinden
sich alle Zustandsinformationen zu einem Prozess. Diese Informationen sind
recht Umfangreich und alle jetzt zu Erklären würde nicht allzu viel bringen.
Aber ich finde es ist ganz gut Kommentiert. Grob zusammengefasst finden sie
darin folgende Informationen.............
- Prozessidenfikation - Hier steht fest welche Rechte der Prozess hat. Diese wiederum ergeben sich
aus den effektiven bzw. realen Benutzer- und Gruppennummern. Natürlich
finden sie hier die oben besprochene Prozessnummer (PID) wieder.
- Prozesspriorität - Sie wissen ja das Linux einen Prozess 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 Prozess er
als nächstes ansteuert.
- Accounting Informationen - Hier stehen die Informationen zu den Speicherzugriffen im virtuellen Speicher. Diese Informationen werden benötigt wenn ein
Prozess 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 Prozess, 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 Prozessen unter Linux.
In den nächsten Kapiteln werden sie sehen, wie sie Prozesse kreieren 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ämonprozesse schreibt.

© 2001,2002 Jürgen Wolf
|