2 - Prozesse [ID:18273]
50 von 166 angezeigt

Im nächsten Schritt wollen wir uns nochmal genauer anschauen, was ein Prozess eigentlich

ist.

Wenn wir der Definition der Vorlesung folgen, dann ist ein Prozess ein Programm in Ausführung,

wobei ein Programm wiederum eine Folge von Anweisungen ist.

Ein Prozess führt also ein Programm aus.

Außerdem ist mit ihm eine Prozess-ID assoziiert.

Die sogenannte PID ist dabei ganzzahlig und positiv.

Mit einem Prozess oder genauer gesagt mit einer Prozessinkarnation sind einige Ressourcen

verknüpft.

Dazu gehören zum einen der Speicher, also physisch vorhandene Seiten, ein virtueller

Adressraum und zum Beispiel offene Dateien.

Prozesse bilden untereinander eine Prozess-Hierarchie.

Die ergibt sich aus der Eltern-Kind-Beziehung von Prozessen, wobei ein Prozess mehrere

Kindprozesse erzeugen kann.

Der erste Prozess, der vom Betriebssystem gestartet wird, ist dabei der Init-Prozess.

Dieser bekommt immer die PID 1.

Dessen Aufgabe ist es, alle weiteren Programme, die ausgeführt werden sollen, zu starten.

Dazu gehören zum Beispiel eine Reihe von Dämonen, zum Beispiel dem SSH-Dämon oder

GDM, was in diesem Fall der WinDOM-Manager bzw.

Login-Manager ist.

Der Dämon-GDM ist dafür verantwortlich, einen Nutzer zu authentifizieren und, sobald

dies gelungen ist, einen X-Server zu starten und zum Beispiel einen WinDOM-Manager, wie

in diesem Fall den WinDOM-Maker, zu starten, damit der Nutzer auf einer grafischen Oberfläche

arbeiten kann.

Der WinDOM-Manager hingegen kann wieder andere Programme starten.

Wenn ein Nutzer zum Beispiel ein Terminal startet, in diesem Fall Xterm, ist dies ein

Kindprozess des WinDOM-Managers.

Die Shell, die in den Terminal läuft, ist wiederum ein Kind des Terminals und die Shell

selber startet beliebige Programme, zum Beispiel ein Texteditor, Cade.

Daraus ergibt sich ein Baum von Prozessen bzw. die Prozess-Hierarchie.

Nachdem wir nun grob wissen, was ein Prozess ist, wollen wir noch schauen, wie man einen

Prozess erstellen kann.

Dies geht mittels des Fork-Systemaufrufs.

Sobald man Fork aufruft, erzeugt man einen neuen Kindprozess, der eine quasi exakte Kopie

des Elternprozesses ist.

Das bedeutet, die der Prozessinstanz zugeordneten Daten werden einmal kopiert, zum Beispiel

werden das Datensegment und das Stacksegment kopiert.

Andere Segmente, wie zum Beispiel das Textsegment, die nur lesbar sind, werden nicht kopiert,

sondern gemeinsam genutzt.

Darüber hinaus bleiben auch alle geöffneten Dateien ebenfalls für den Kindprozess erhalten,

sowie die Registerinhalte und der einzige wirkliche Unterschied zwischen diesen beiden

Prozessinstanzen ist die PID.

Dabei startet die Ausführung des Kindprozesses direkt nach der Ausführung von Fork mit eben

dem geerbten Zustand.

Möchte nun ein Prozess feststellen, ob er nach dem Fork der Elternprozess oder der Kindprozess

ist, dann muss er dies anhand des Rückgabewerts des Fork-Systemaufrufs prüfen.

Der Elternprozess bekommt als Rückgabewert die PID des entstandenen Kindes, der Kindprozess

hingegen erhält als Rückgabewert den Wert Null.

Hier ist ein kleines Beispiel, wie man mit Fork umgehen kann.

In diesem Beispiel haben wir ein kleines Codeschnipsel, in dem einmal eine Variable erstellt wird,

Teil einer Videoserie :
Teil eines Kapitels:
Prozesse

Zugänglich über

Offener Zugang

Dauer

00:11:27 Min

Aufnahmedatum

2020-06-21

Hochgeladen am

2020-06-21 23:46:35

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen