next up previous contents index
Next: Abstürzende Programme und Up: Systemverwaltung Previous: Das System abschalten

Prozeßordnung

Alle Benutzeraktivitäten unter Linux finden in irgendwelchen Prozessen statt. Ein solcher Prozeß besteht nicht nur aus einem Programm im Speicher. Als Prozeß wird die Gesamtheit aller Systemdaten zu einem Programm gezählt. Dazu gehört die Prozeßumgebung, die Prozeßgruppe, der Eigentümer, das kontrollierende Terminal, die von dem Programm geöffneten Dateien (auch Devices), das Arbeitsverzeichnis und eine Menge weiterer Daten.

Ein neuer Prozeß entsteht, indem ein laufender Prozeß sich mit dem fork  Systemaufruf teilt. Dabei wird ein neuer Eintrag in der Prozeßtabelle  angelegt, und ein paar weitere Datenstrukturen werden initialisiert. Damit ist ein neuer lauffähiger Prozeß entstanden, der als Kindprozeß (child process)  bezeichnet wird.

Der Scheduler wählt aus den lauffähigen Prozessen jeweils den Prozeß mit der höchsten Priorität aus und teilt ihm Rechenzeit zu. Wenn ein neuer Eintrag das erste Mal vom Scheduler aufgerufen wird, also Rechenzeit zugeteilt bekommt, befindet sich der Kindprozeß (fast) in demselben Speicherbereich, den auch der Elternprozeß belegt. Erst wenn der Kindprozeß in eine Speicherseite schreibt, wird die Speicherseite kopiert und belegt so eigenen Raum im Arbeitsspeicher (copy on write) . Durch einen exec- Systemaufruf kann der Kindprozeß ein neues Programm in den Speicher laden. Auch dabei wird vom Kernel nicht sofort der gesamte Programmtext in den Speicher geholt (der dann immer neue Seiten des Speicherbereichs des Elternprozesses überschreiben würde und deshalb in einen neuen Speicherbereich kopiert werden müßte), sondern es werden nur die Speicherseiten geladen, auf die das neue Programm gerade zugreift (demand loading) .

Der erste Prozeß, und damit Vater aller weiteren Prozesse, ist das bereits beschriebene init-Programm. Die daraus entstandenen getty-Programme erzeugen die login-Prozesse, die ihrerseits eine Benutzershell starten und damit eine Session eröffnen. Wenn ein Anwender in dieser Shell ein Kommando aufruft, wird die Shell zur Mutter und das aufgerufene Kommando zum Kind. Häufig wartet ein Elternprozeß auf die Beendigung des Kindprozesses; das ist zum Beispiel der Fall, wenn die Shell ein Kommando nicht im Hintergrund ausführt.

Die Prozeßtabelle kann mit dem ps-Kommando angesehen werden. Daraus läßt sich unter anderem die Prozeßnummer ( PID) und die Nummer des Elternprozesses ( PPID) ermitteln.

In der Prozeßtabelle werden außerdem die Benutzer- und Gruppennummer ( UID, GID) des aufrufenden Benutzers sowie gegebenenfalls davon abweichende effektive Benutzer- und Gruppenkennung ( EUID, EGID) festgehalten. Die effektiven Kennungen können durch Änderung der entsprechenden Zugriffsrechte auf die ausführbare Programmdatei geändert werden.

Prozesse können Signale senden und empfangen und auf diese Weise miteinander kommunizieren. Der Benutzer hat die Möglichkeit, mit dem kill-Kommando an dieser Kommunikation aktiv teilzunehmen.





next up previous contents index
Next: Abstürzende Programme und Up: Systemverwaltung Previous: Das System abschalten



Linux Anwenderhandbuch -- Copyright 1993, 1994, 1995 S. Hetze, D. Hohndel, O. Kirch, M. Müller