zusammenfassungen/Writerside/topics/prozessstruktur.md
David Schirrmeister a8a57d63b6 update
2024-04-29 11:05:26 +02:00

61 lines
2.1 KiB
Markdown

# 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
-