update
This commit is contained in:
75
Writerside/topics/BS/06_prozessstruktur.md
Normal file
75
Writerside/topics/BS/06_prozessstruktur.md
Normal file
@ -0,0 +1,75 @@
|
||||
# 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, ...
|
Reference in New Issue
Block a user