|
Das Prozeßkonzept
Jeder Prozeß, der im Betriebssystemkern aktiviert wird, erhält eine eindeutigeKennzeichnung, die sogenannte Prozeßnummer (PID). Über diese kann jeder Prozeß eindeutig identifiziert werden. Da die Prozeßnummer eine positive Integer-Zahl ist,gibt es eine maximale Prozeßnummer. Wird diese erreicht, beginnt die Zählung wiedervon vorne, wobei noch existierende Prozesse mit niedriger Nummer übersprungen werden.Ein neuer Prozeß kann nur von einem bereits laufenden Prozeß erzeugt werden. Dadurch werden, ähnlich wie beim Dateibaum,die einzelnen Prozesse imBetriebssystemkern in einer baumartigen, hierarchischen Struktur verwaltet. Jeder Kind-Prozeß ist genau einem Eltern-Prozeß untergeordnet. Ein Eltern-Prozeß
kann jedoch beliebig viele Kind-Prozesse besitzen. Die Wurzel der Prozeßstruktur
wird durch den Systemstart geschaffen und als init-Prozeß (PID 1) bezeichnet.
In der Regel wartet der Eltern-Prozeß auf die Beendigung seiner Kind-Prozesse.
Diese Art der Prozeßsynchronisation wird als synchrone Ausführung
bezeichnet, der Kind-Prozeß wird als Vordergrundprozeß
ausgeführt. Bezogen auf einen Benutzer ist die Shell (Login-Shell)
der Eltern-Prozeß. Alle Kommandos, die der Benutzer startet, sind
Kind-Prozesse. Während diese abgearbeitet werden ruht der
Eltern-Prozeß. Als asynchroner Prozeß oder Hintergrundprozeß werden
solche Prozesse bezeichnet, bei denen der Eltern-Prozeß nicht
auf das Ende seines Kind-Prozesses wartet, sondern parallel (quasiparallel
auf einer Ein-Prozessor-Maschine) asynchron weiterläuft.
Auf der Shell-Ebene kann jeder Prozeß durch Anfügen von '&' (kaufm. UND)
in der Kommandozeile als Hintergrundprozeß gestartet werden.
- Jeder Prozeß kann beliebig viele neue Prozesse erzeugen
- Die Kindprozesse erben die gesamte Prozeß-Umgebung (Home-Directory,
Standard-Pfadnamen, Terminal-Typ, etc.)
- Eltern- und Kindprozesse laufen asynchron (Elternprozeß kann
auf Ende des/der Kindprozess(e) warten --> Synchronisation)
- Eltern- und Kindprozesse können miteinamder kommunizieren
- Prozeß-Generierung mit fork()
- Zwei Prozesse können miteinander kommunizieren und sich untereinander
synchronisieren
- Ein Prozeß kann einen Nachfolgeprozeß starten: exec()
- 40 externe Prioritätsebenen, 2 interne Prioritätsebenen (System/User)
|
|
|