03_Prozessverwaltung Flashcards
Prozesse
Virtueller Adressraum von Prozessen
- Prozess verfügt über Code, Daten und dynamische Speicherbereiche (Heap und Stack)

(vereinfachte Darstellung ohne pages)
Prozesse
Definition
- Programm -> von Betriebssystem in Adressraum eines Prozesses/freien Teil des RAM geladen
- Prozess = Programm, das im Hauptspeicher zur Ausführung kommt
Prozesse
Prozesserzeugung (UNIX)
- durch Kopieren aus Initialisierungsprozessen
-
fork() = Systemaufruf, der Kopie des aufrufenden Prozesses mit eigener PID erstellt
- Vererbung von Eigenschaften (User-ID, Group-ID) + Ressourcen (offene Dateien, Pipes, Sockets, …)
- neu erzeugter Adressraum
- return 0 an Kind, >0 an Vater, <0 Fehler
- exec(„PATH“) = Systemaufruf, der BS veranlasst, den Adressraum des rufenden Prozesses mit dem Code und den Daten aus der ausführbaren Datei „PATH“ zu überladen -> Beginn an Startadresse des neuen Programmes
- wait() = Vaterprozess wartet auf Beendigung des erzeugten Prozesses und Rückgabewert (EXIT(…)) - Prozesse laufen parallel

Prozesse
Erzeugungsmechanismen
nur exec() - wenn Prozess seinen Zweck erfüllt hat

Prozesse
Prozesserzeugungsbaum UNIX
- Systemprozesse starten als Kopien von init -> schaffen Benutzerumgebungen
- blau: Rechte des Systemadministrators
- Shell nach Login, da User zugeordnet -> UID wird gesetzt -> Login wird nicht mehr benötigt
- auch Systemanwendungen (daemons) in Initialisierungsphase gestartet (z.B. inetd = Internetdaemon)

Prozesse
Prozesszustände
- geladen: Programm in Hauptspeicher geladen, Prozess existiert und hat PID
- bereit: Prozess ist bereit, Prozessor zugeteilt zu bekommen, um Programmcode auszuführen
- rechnend: Prozess hat Prozessor, Programmcode wird ausgeführt
- wartend: Prozess hat system call gestellt und wartet auf Beendigung
- ausgelagert: BS hat Prozess auf Externspeicher ausgelagert, um Speicherplatz frei zu machen
- nicht existent: Prozess hat BS Auftrag gegeben, ihn zu beenden -> alle Ressourcen freigegeben

Prozesse
Fehlerfälle

Prozesse
Prozessende
- Timerbaustein, der in relativ kurzen Zeitabständen (ca. 10 ms) einen Hardwareinterrupt generiert, der zum Einsprung ins Betriebssystem führt
- System stellt fest, ob dem Prozess der Prozessor entzogen werden muss, da seine ihm zustehende Bearbeitungszeit abgelaufen ist -> anderen Prozess den Prozessor zuteilen
- ermöglicht Multitasking-System
- o. Prozess wartet auf Eingabe u. gibt Prozessor selbst ab
- Abmeldung des Users: beendet seine ihm zugeordnete oberste Shell der Prozesshierarchie -> Signal SIGHUP an alle Kindprozesse -> beenden sich
Prozessverwaltung
Prozess-Kontext + Switching
- BS speichert Informationen für jeden Prozess im Prozess-Kontext: Programme und Daten des Programms + Informationen, die im Betriebssystem für einen Prozess verwaltet werden + Inhalte aller Hardware-Register (Befehlszähler, PSW, MMU-Register, …)
- Kontext-Switching: wenn gerader aktiver Prozess die CPU verliert -> Hardware-Kontext des laufenden Prozesses gesichert + Hardware-Kontext des neu aktivierten Prozesses in Ablaufumgebung geladen
- Prozesstabelle: spezielle Datenstruktur des BS mit allen aktuellen Prozessen gesamte Information für Prozessverwaltung
- Process Control Block (PCB): Eintrag in Prozesstabelle

Prozessverwaltung
Informationen im PCB
- Prozesspriorität (entscheidend für Laufzeitverhalten)
- Signalmaske
- bisherige Rechenzeit
- Erzeugungszeitpunkt
- Kontext (Register etc., insbes. PC)
- Prozessnummer (process identifier, PID)
- Eigentümer (user ID UID, group ID GID)
- Eltern-PID (PPID)
- Dateideskriptoren (offene Dateien)

Prozessverwaltung
Ziele von Prozessscheduling
- Optimierung der Ressourcennutzung
- Maximierung des Durchsatzes
- Minimierung der Antwortzeiten
- Auslastung der CPU
- Fairness (es sollen keine Prozesse oder Anwender benachteiligt werden, v.a. nicht verhungern)
- Garantie von Antwortzeiten (Echtzeit)
Prozessverwaltung
Arten des Scheduling
-
preemptiv: BS hat Timer, unterbricht die Prozesse
- Round-Robin-Scheduling
- Multilevel Feedback Scheduling
-
nicht preemptiv: Prozess behält Prozessor bis zum Prozessende oder gibt ihn selber frei
- FCFS
- SJF
Threads
Speicher
- “leichtgewichtige Prozesse”
- nebenläufige Ausführungseinheit innerhalb eines Prozesses
- erben offene Dateien und Netzwerkverbindungen
- kein neuer Daten- und Codebereich
- nur weiterer Stack
- Zugriff auf globale Daten des Thread-Erzeugers

Threads
KLT - Kernel-Level-Threats
- mit system call erzeugt und verwaltet
- können synchronisiert werden
- ähnlich wie Prozesse wahrgenommen
- entsprechend der Strategien des Schedulers Prozessorzeit eingeräumt

Threads
ULT - User-Level-Threats
- Thread-Bibliothek (ULT) mit Aufgabe, Threads zu generieren + Betriebsmittel (Stack) u. Prozessor zuzuweisen
- für BS nur ein Prozess zusehen
- z.B. auf Rechnern, deren BS keine Threads unterstützt

Threads
Vorteile und Probleme
- Wechsel zwischen Threads weniger aufwendig als Kontextwechsel zwischen Prozessen
- keine Neuparametrisierung der MMU, TLB wird nicht invalide
- Cache muss nicht geleert werden - virtuelle Adressen bleiben
- Nachteil: Race Conditions -> Threads arbeiten zeitgleich/mit Überholvorgängen auf gemeinsamen Daten -> Race Conditions: Konkurrenz um Speichervariable, gegenseitiges Überschreiben des Ergebnisses
Schedulingstrategien
Round-Robin-Scheduling
- präemptiv
- jeder Prozess bekommt Zeitscheibe (Quantum)
- Prozess, dessen Laufzeitquantum abgelaufen ist, wird danach am Ende der „bereit“-Schlange eingereiht
- Prozess, der in „bereit“-Schlange an erster Stelle steht, wird ausgeführt
- „wait i/o“-Schlange: Prozesse warten auf Ende eines Systemaufrufs dann in „bereit“-Schlange eingereiht

Aufgaben des Betriebssystems
Rechner und alle Komponenten verwalten
- Speicherverwaltung
- Prozessorverwaltung
- Prozessverwaltung
- Dateiverwaltung
- Userverwaltung
- Rechteverwaltung
- Kommunikationsdienste
- Synchronisierung
- Uhrzeitverwaltung
- Geräteverwaltung
Nutzer-Modus, Kernel-Modus
- Prozessor muss für sicheres BS mind. 2 Privilegierungsstufen unterscheiden
- Kernel-Modus für BS
- User-Modus für Benutzerprozesse
- Stufe 0 für vollen Befehlsumfang der CPU (BS)
- Stufe 3 für Anwendungen - verboten z.B.
- Ändern der Privilegstufen
- Setzen der Interruptsperre
- Verwenden der I/O-Befehle
- CPU startet mit höchster Privilegstufe + startet BS darin

Schedulingstrategien
First Come First Served
Shortest Job First
- nicht präemptiv
-
FCFS: Prozesse in der Reihenfolge ausgeführt, in der sie eintreffen
- relative lange mittlere Antwortzeite
- einfach zu implementieren, geringer Overload
-
SJF: wenn man Laufzeit der Prozesse kennt -> Prozess mit kürzester Laufzeit bzw. Prozessornutzung zwischen zwischen Wartezeiten bevorzug
- schnelle mittlere Antwortzeiten

Schedulingstrategien
Multilevel Feedback Scheduling
- präemptiv
- Warteschlangen mit unterschiedlichen Prioritäten
- Prozesse der nächsten Priorität (z.B. P1) erst ausgeführt, wenn keine mehr in höherer Prioritätsstufe sind (z.B. P0)
-
Feedback:
- beim Prozessstart höchste Priorität
- wegen Zeitscheibe unterbrochen: in Priorität herabgestuft (Prozesse mit viel Rechenzeit)
- vor Ende der Zeitscheibe Prozessor abgegeben: I/O-wartend in selbe Priorität eingeordnet
- Anwendung: für schnelle Antwortzeiten bei Mausbewegungen, Schreiben etc.

Schedulingstrategien
Echtzeit
- Echtzeit: Anwendungen mit unterschiedlichen Zeitanforderungen, z.B. zeitkritische Prozesse und Prozesse ohne zeitl. Anforderungen
- Aktion muss nach einer vom übergeordneten System generierten Anforderung zu einem bestimmten Zeitpunkt (Deadline) beendet sein, sonst ist sie sinnlos oder gar gefährlich
- “weiche” Echtzeit: kleiner Anteil an Verletzungen der Zeitschranken tolerabel, z.B. Audio- und Videoanwendungen
- starre Prioritäten: Administrator des Systems hat durch Prioritätszuweisung volle Kontrolle
- unfaires Verfahren -> Prozesse niedriger Priorität können verhungern
- Prozesse mit gleichen Prioritäten werden nach RR oder FCFS behandelt

Prozessverwaltung
Systemaufrufe
- damit Prozess mit Umwelt in Kontakt treten kann über Peripherie des Rechners -> von BS verwaltet
- Systemaufrufe/Systemcalls -> Prozess bittet BS um Unterstützung
- durch Interrupt realisiert
- meist nicht von Anwendung selbst, sondern durch Bibliotheken abgesetzt
- Maschinenbefehl SYSCALL für weniger aufwendigen Wechsel ins BS
- BS kann entscheiden, ob Fortsetzung des Programms sinnvoll ist, wenn das im Aufruf gewünschte nicht unmittelbar ausgeführt werden kann
- Beispiele: Zeichen von Standardeingabe holen, Ausgabe eines Zeichens auf Standardausgabe, Dateien öffnen/schließen, Daten in Datei schreiben, Datenblock über LAN senden, Taskende
Prozessverwaltung
Ablauf eines Systemaufrufs
- mit Syscall in Kontext des BS wechseln
- im BS Auftrag auswerten und entsprechende Funktionseinheit (Festplattentreiber, LAN-Treiber, etc.) mit weiterer Ausführung betrauen
- Treiber wandelt abstrakten Auftrag in Auftrag um, der von entsprechenden Geräten (IDE-Controller, LAN-Controller, USB-Controller) verstanden wird
- Treiber kehrt zu BS zurück
- Scheduler blockiert rufende Anwendung („wartend“) und wechselt zu Anwendung 2 („bereit“)
- Auftrag abgeschlossen: Meldung per Interrupt an Treiber -> andere Anwendung unterbrochen und Treiber aktiviert
- Treiber meldet Auftragsende an BS -> Anwendung in Zustand „bereit“ gesetzt und in Warteschlange einsortiert
- keine Anwendung vor ihr: Anwendung erhält CPU und wird im Code unmittelbar nach Systemcall fortgesetzt





