# Prozessstruktur ## Prozessdarstellung - Umfasst [_Zustände_](prozesszustaende.md) und _Struktur_ eines laufenden Programms - Grundlegende Komponenten, die die _Speicherrepräsentation_ eines Prozesses vorhanden sein können - Systemumgebung - Stack - Heap - BSS (Block Started by Symbol) - Datensegment - Codesegment - ![image_8.png](image_8.png) Beispiel: Terminalbefehl **- size** - ![image_9.png](image_9.png) ## Prozesse im Speicher - ![image_10.png](image_10.png) - Ablage im physischen Speicher erfolgt in nicht fortlaufender Weise durch den virtuellen Speicher - nicht zwangsläufig ständig im Hauptspeicher ## Erzeugung von Prozesskopien - Systemaufruf **fork** unter Linux/Unix - Erzeugung einer _identischen Kopie_ eines Prozesses - aufrufender Prozess: _Elternprozess (Parent Process)_ - neuer Prozess: _Kind-Prozess_ (Child Process) - hat gleichen _Programmcode_ und _Befehlszähler_ - verweist auf gleiche Zeile im Programmcode - Speicherbereiche von Kind- und Elternprozess streng getrennt - ![image_11.png](image_11.png) ## Erzeugung von neuen Prozessen - Systemaufruf **exec** - Ersetzt bestehenden Prozess durch einen anderen - neuer Prozess erbt PID des aufrufenden Prozesses - ![image_12.png](image_12.png) - Soll aus einem Prozess (_bspw. Kommandozeilen-Interpreter (Shell)_) heraus ein Programm gestartet werden: - _fork_ -> _exec_ - ![image_13.png](image_13.png) ## Übersicht Erzeugung/Verkettung/Vergabelung ![image_14.png](image_14.png) ## Beenden von Prozessen Arten des Beendens: - Normales Beenden (freiwillig, im Code definiert) - Beenden aufgrund eines Fehlers (freiwillig, im Code definiert) - Beenden aufgrund eines schwerwiegenden Fehlers (unfreiwillig, durch BS) - Beenden durch einen anderen Prozess (unfreiwillig) Unix Befehl: **kill** erstellt einen Wrapper um BS-Aufruf _kilL()_ - ist auf jedem Unix als alleinstehende Anwendung vorhanden (_/bin/kill_) ## Zeitliche Ausführung von Prozessen - **Scheduler** ist wichtige Komponente des Betriebssystems - Zuständig für Zuweisung von CPU-Ressourcen an laufenden Prozessen - Hauptaufgabe: _Reihenfolge_ festlegen - **Dispatcher**: Umsetzung der Scheduling-Entscheidungen - Implementierung der Entscheidung - Wechsel des _Kontrollflusses_ von einem laufenden Prozess zu einem anderen - Einleiten des Umschaltens durch einen _Timer-Interrupt_ - Interrupt wird periodisch ausgelöst und startet entsprechende Softwareroutine - ![image_15.png](image_15.png) - ![image_16.png](image_16.png) ## POSIX-API _Portable Operating System Interface_ - Standard, der von der IEE(_Institute of Electrical and Electronics Engineers_) entwickelt wurde - Definiert Schnittstelle zwischen Anwendung und Betriebssystem - erleichtert Portabilität von Software zwischen verschiedenen Unix BS - bspw: - fork, wait/waitpid, sleep, getpid/getppid/setpgid, execl/execv/execve, kill, ...