# Prozessstruktur ## Prozessdarstellung - Umfasst [_Zustände_](05_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 -  Beispiel: Terminalbefehl **- size** -  ## Prozesse im Speicher -  - 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 -  ## Erzeugung von neuen Prozessen - Systemaufruf **exec** - Ersetzt bestehenden Prozess durch einen anderen - neuer Prozess erbt PID des aufrufenden Prozesses -  - Soll aus einem Prozess (_bspw. Kommandozeilen-Interpreter (Shell)_) heraus ein Programm gestartet werden: - _fork_ -> _exec_ -  ## Übersicht Erzeugung/Verkettung/Vergabelung  ## 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 -  -  ## 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, ...