Title: IN0009_GBS / GBS: Kapitel 2: Prozess und Prozessorverwaltung
On every note of this deck, unless a note says otherwise:
Title: IN0009_GBS::GBS: Kapitel 2: Prozess und Prozessorverwaltung
Logo: tum_logo.png

Front: Was sind die 5 Stufen um C Quellcode zu einem ausführbaren Programm zu transformieren?
Back: 1. Präprozessor (Auflösen von Makros und anderen Direktiven wie #include)
2. Compiler (Übersetzer von C in Assembler)
3. Assembler (Übersetzer von Assemblersprache in ISA-spezifischen Maschinencode)
4. Linker (Binden von einzelnen Modulen zu einer ausführbaren Datei)
5. Loader des Betriebsystems (Laden der gebundenen Objekte in den Speicher)

Front: Was sind die IOPL Bits im Flag Register eines x86 Prozessors
Back: Die I/O Privilege Level (IOPL) Bits spezifizieren die aktuelle Privilegienlevel.
Die IOPL Bits im Flag Register eines x86 Prozessors definieren das Privilegienlevel für I/O-Operationen. Es gibt vier Privilegienebenen (Ringe 0 bis 3), wobei Ring 0 das höchste Privileg und Ring 3 das niedrigste darstellt.

Front: Wie sieht ein Prozess im Speicher aus (x86)
Back: Von 0xFFFF...FFFF nach 0x0000...0000!
1. Stack - Beginnt bei der höchsten Adresse und wächst nach unten. Enthält lokale Variablen und Funktionsaufrufe.
2. Heap - Wächst dynamisch nach oben, liegt direkt über dem Data-Segment.
3. Data - Enthält globale und statische Variablen; liegt über dem Code-Segment.
4. Code/Text - Befindet sich im unteren Teil des Adressraums; enthält ausführbaren Programmcode.

Front: Was ist ein Prozesskontext?
Back: Der Prozesskontext umfasst alle Informationen, die ein Betriebssystem über einen Prozess speichert, um dessen Ausführungszustand zu verwalten.

Front: Was ist der virtuelle Addressraum?
Back: Der virtuelle Addressraum ist eine Abstraktion des physischen Speichers. Jeder Prozess verfügt über einen eigenen Addressraum, die voneinnander abgeschottet sind.

Front: Prozesskontext im Betriebssystem: Registerzustände
Back: - Registerinhalte
- Program Counter
- Stack Pointer
- Statusregister

Front: Prozesskontext im Betriebssystem: Prozessidentifikation und -zustand
Back: - Prozesszustand
- Priorität
- Process ID (PID)
- Parent PID (PPID)
- Process Group ID (PGID)

Front: Prozesskontext im Betriebssystem: Ressourcenverweise und Sicherheitskontext
Back: - Pointer auf Speichersegmente
- Größe der Segmente
- Dateideskriptoren
- User ID (UID)
- Group ID (GID)

Front: Warum ist die Prozess-Verarbeitung oftmals nur quasi-parallel?
Back: In Einprozessorsystemen kann die CPU tatsächlich nur einen Prozess gleichzeitig ausführen. Quasi-Parallelität entsteht durch schnelles Umschalten zwischen Prozessen (Scheduling), wodurch der Eindruck simultaner Ausführung entsteht.

Front: Wie beeinflusst der I/O-Warteanteil p die CPU-Auslastung bei n Prozessen?
Back: Ist der Anteil der Wartezeit auf I/O für einen Prozess p, so ist die erwartete CPU-Auslastung bei n gleichzeitig laufenden Prozessen probabilistisch 1 - p^n.

Front: Was sind die Zustände eines Prozesses?
Back: - ready: Der Prozess ist bereit zur Ausführung und wartet auf Zuweisung eines Prozessors.
- running: Der Prozess wird aktuell auf dem Prozessor ausgeführt.
- blocked/waiting: Der Prozess kann nicht fortgesetzt werden, bis ein bestimmtes Ereignis eintritt.
- swapped out/ausgelagert: Der Prozess wurde aus dem Arbeitsspeicher ausgelagert.
- swapped in/eingelagert: Ein ausgelagerter Prozess wird wieder in den Arbeitsspeicher geladen.

Front: Was initiiert der Zustandsübergang 'add' bei einem Prozess?
Back: Der Zustandsübergang 'add' fügt einen neu erzeugten Prozess zur Menge der rechenwilligen (ready) Prozesse hinzu.

Front: Welche Wirkung hat der Zustandsübergang 'assign' auf einen Prozess?
Back: Der Zustandsübergang 'assign' ordnet einem Prozess die CPU zu und ändert seinen Status auf 'running'.

Front: Durch was wird der Zustandsübergang 'block' bei einem Prozess veranlasst?
Back: Der Zustandsübergang 'block' wird durch einen I/O-Aufruf oder eine Synchronisationsoperation ausgelöst und versetzt den Prozess in den Zustand 'blocked/waiting'.

Front: Wann erfolgt der Zustandsübergang eines Prozesses zurück in 'ready'?
Back: Der Zustandsübergang zurück in 'ready' erfolgt, nachdem die blockierende Operation beendet ist oder die Blockade aufgehoben wurde.

Front: Welcher Zustandsübergang wird mit 'resign' beschrieben?
Back: Der Zustandsübergang 'resign' entzieht einem laufenden Prozess die CPU, wodurch er in den Zustand 'ready' zurückkehrt.

Front: Was kennzeichnet den Zustandsübergang 'retire' bei einem Prozess?
Back: Der Zustandsübergang 'retire' tritt ein, wenn ein Prozess seine Ausführung beendet und aus dem System entfernt wird.

Front: Was resultiert aus dem Zustandsübergang 'swap out' für einen Prozess?
Back: Der Zustandsübergang 'swap out' lagert einen Prozess aus dem Arbeitsspeicher in die Swap-Datei auf der Festplatte aus.

Front: Welchen Zustand erreicht ein Prozess durch den Zustandsübergang 'swap in'?
Back: Durch den Zustandsübergang 'swap in' wird ein ausgelagerter Prozess wieder in den Arbeitsspeicher geladen.

Front: Prozess vs. Thread
Back: - Prozess: Einzelne Ausführungseinheit mit eigenem Adressraum, die Ressourcen wie CPU und Speicher nutzt.
- Thread: Leichtgewichtiger Prozess innerhalb eines Prozesses, der einen eigenen Kontrollfluss hat, aber Ressourcen mit anderen Threads teilt.

Front: Warum lässt sich ein Prozess und Thread konzeptuell trennen?
Back: Ressourcen und Kontrollfluss sind unabhängige Konzepte und lassen sich trennen.

Front: Eigenschaften eines Threads
Back: - Abstraktion eines physischen Prozessors
- Jeder Prozess hat einen eigenen Kontrollfluss
- Threads eines Prozesses teilen sich den Addressraum
- Eigener Befehlzähler

Front: Thread-Kontext
Back: Der Thread-Kontext umfasst u.a:
- Programmzähler
- Registerwerte
- Stackpointer auf eigenem Stack

Front: Was sind die 5 möglichen Zustände eines Threads?
Back: - (erzeugt)
- rechenwillig
- rechnend
- wartend
- terminiert

Front: Warum haben Threads generell einen geringeren Overhead als Prozesse?
Back: - Einfache Kommunikation zwischen Threads einens Prozesses über gemeinsamen Addressraum (Anstelle von aufwendiger inter-prozess-communication (IPC))
- Erstellen eines Threads wesentlich geringer als einen Prozess zu erzeugen (Faktor 10-100)
- Schneller Kontextwechsel

Front: Was ist der Process Control Block (PCB)?
Back: Speicherung von Informationen über:
- Prozessverwaltung
- Speicherverwaltung (engl. memory management)
- Dateiverwaltung (engl. file management)

Front: Welche Informationen werden für die Speicherverwaltung eines Prozesses benötigt?
Back: Pointer zu Code-, Daten-, und Stack-Segment Anfang und Größe der Segmente.

Front: Welche Informationen werden für die Dateiverwaltung eines Prozesses benötigt?
Back: - Root Verzeichnis
- File Deskriptoren
- UID und GID

Front: Was ist eine Prozesstabelle
Back: Eine verkettete Liste von PCBs

Front: BS Dienste zur Prozessverwaltung
Back: - Dienste zur Erzeugung eines Prozesses
- Dienste zur Terminierung von Prozessen
- Strategien zur Prozessorzuteilung (Scheduling)
- Dienste zur Prozessor-Anbundung (Dispatching)

Front: Auslöser einer Prozesserzeugung
Back: - Während der Systeminitialisierung (Init started daemons)
- Durch andere Prozesse (z.B. via fork)
- Durch einen Benutzer (Beispiel: Starten eines Programmes)
- Durch das BS (z.B. Batch-Systeme)

Front: Was macht der POSIX-Systemcall fork?
Back: - Kindprozess mit gleichem Speicherabbild (Kopie)
  - Auch file descriptors
- Vergabe einer neuen PID
- Prozesse laufen unabhängig voneinander

Front: Was ist die Besonderheit bei dem Rückgabewert von fork?
Back: Eltern-Prozess bekommt die PID des Kindes zurückgegeben, während der Kindprozess 0 zurückgegeben bekommt. Das kann nützlich sein, um z.B. das Speicherabbild des Kindes zu überschreiben.

Front: Welche Arten der Prozessterminierung gibt es?
Back: - Normale Beendigung (freiwillig)
  - void exit (int status)
  - return status aus main()
- Vorzeitige Beendigung durch Fehler (freiwillig)
  - Fehler wird von Programm abgefangen. Programm terminiert.
- Vorzeitige Beendigung durch fatalen Fehler
  - Exception wird nicht abgefangen, oder kann nicht abgefangen werden (i.e. Segmentation Fault)
- Terminierung durch einen anderen Prozess
  - Durch senden eines Signals

Front: Welche PID hat der Prozess init?
Back: PID=1. Init ist der erste Prozess der bei einem UNIX(-ähnlichen) System startet.

Front: Wer started PID 1?
Back: Der Kernel.

Front: (Extra) Was würde passieren, wenn PID 1 crashed?
Back: - Alle Kinder sind nun Weisen (Praktisch alle anderen Prozesse)
- Init ist normalerweise verantwortlich für das Herunterfahren und Neustarten des Systemes
- PID 1 kann nicht neugestartet werden -> System Neustart notwendig

Front: Was ist eine Prozessgruppe?
Back: Eine Prozessgruppe ist eine Gruppe von einem oder mehreren Prozessen, die für Zwecke der Jobsteuerung und Signalverarbeitung als eine einzelne Einheit behandelt werden.
Jeder Prozess inkl. seiner Kinder formen eine Prozessgruppe (Mit PPID identifiziert).

Front: Warum sind Prozesshierarchien natürlich in UNIX(-ähnlichen) Systemen?
Back: Ein Prozess wird von einem bestehenden Prozess erstellt und ist somit sein Kind. Der erste Prozess (PID 1) wird allerdings vom BS gestartet.

Front: Zombies in Prozesshierarchien
Back: - Entsteht, wenn ein Kind-Prozess seine Ausführung beendet, bevor der Eltern-Prozess endet.
- Speicher des Kind-Prozesses wird freigegeben, aber sein Exit-Status wird in den Process Control Block (PCB) geschrieben, wodurch ein Zombie entsteht.
- Belegen Platz in der Prozesstabelle.
- Führen keinen Code mehr aus

Front: Umgang mit Zombie-Prozessen
Back: - Der Eltern-Prozess kann wait oder waitpid verwenden, um auf die Beendigung des Kind-Prozesses zu warten.
- Der Eltern-Prozess blockiert (wird in die Wait-Queue eingefügt), bis das Kind terminiert.
- Nach der Beendigung des Kindes kann der Elternprozess den Grund der Terminierung erfragen.
- Das Lesen des Exit-Status des Kindes entfernt den Zombie-Prozess.

Front: Waisenprozesse
Back: - Waisen entstehen, wenn der Eltern-Prozess vor dem Kind-Prozess endet.
- Der verwaiste Kind-Prozess wird vom Init-Prozess adoptiert (PPID = 1).

Front: Was ist erforderlich, damit ein Waisenprozess zu einem Daemon wird?
Back: Loslösung von Gruppen-ID und Benutzer-ID und die Umleitung von Filedeskriptoren (stdin, stdout, stderr).

Front: Prozesshierarchien in Windows
Back: - Windows hat keine Prozesshierarchien ähnlich wie Unix/Linux.
- Jeder Windows-Prozess erhält bei der Erstellung einen eindeutigen Handle.
- Handles können zwischen Prozessen übertragen werden.

Front: Welche zwei Hauptaufgaben werden in der Prozessorverwaltung unterschieden?
Back: - Verwaltung in Dispatcher und Scheduler aufgeteilt. Der Dispatcher realisiert Prozess-Zustandsübergänge von rechenwillig nach rechnend, während der Scheduler die Reihenfolge der Prozessausführung bestimmt.

Front: Welche Rolle spielt der Scheduler in der Prozessorverwaltung?
Back: - Verwaltet die Warteschlange der rechenwilligen Prozesse (Run Queue)
- Wählt mit Hilfe von Scheduling-Algorithmen den nächste(n) Prozess(e) zur Ausführung aus

Front: Was macht ein Dispatcher?
Back: - Implementiert Zustandsübergang zwischen rechnend und rechenwillig
- Dispatcher entzieht dem rechnenden Prozess/Thread die CPU und teilt sie einem anderen rechenbereitem Prozess/Thread zu

Front: Abfolge von Dispatching
Back: 1. Ändert den Zustand des rechnenden Prozesses zu wartend oder rechenbereit
2. Sichert den Kontext des zuvor rechnenden Prozesses/Threads im PCB
3. Lädt den Kontext des rechenbereiten Prozesses/Threads
4. Ändert den Zustand des rechenbereiten Prozesses zu rechnend

Front: Strategische Entscheidungen des Schedulers
Back: Der Scheduler trifft strategische Entscheidungen darüber, welchen Prozess oder Thread er wann und wie lange an die CPU bindet. In Multiprozessor-Systemen entscheidet er auch, an welche CPU der Prozess gebunden wird.

Front: Wie nutzt der Scheduler das typische Verhalten von Prozessen für das Scheduling?
Back: Der Scheduler berücksichtigt, dass CPU-Nutzungs-Bursts sich mit I/O-Wartephasen abwechseln. Er beachtet sowohl CPU-limitierte als auch I/O-limitierte Prozesse, um eine effiziente CPU-Zuteilung zu erreichen.

Front: Scheduler-Aktivierung
Back: Der Scheduler wird bei bestimmten Ereignissen aktiv:
- Erzeugung neuer Prozesse
- Terminierung von Prozessen
- Wenn ein Prozess blockiert wird (z.B. durch I/O oder Semaphoren)
- Interrupts, wie beispielsweise von einem I/O-Gerät

Front: Welche Rolle spielt der Scheduler bei Prozessblockierungen und Interrupts?
Back: - Prozessblockierungen: Entscheidungen bei Blockierung durch I/O, Semaphoren etc.
- Belegte Ressourcen: Was passiert, wenn ein blockierender Prozess eine benötigte Ressource belegt?
- Nächster Prozess: Auswahl, wenn der nächste Prozess die belegte Ressource benötigt.
- Interrupts: Aufwecken blockierter Prozesse durch I/O-Geräte-Interrupts.
- Timer-Interrupts: Scheduling-Entscheidungen bei jedem Timer-Interrupt.

Front: Thread Implementierungen
Back: - User-Level-Threads (Scheduling im User-Space)
  - Meistens nur koorperativ (nicht-preemptiv)
- Kernel-Level-Threads
  - Threadtabelle im Kern. BS kontrolliert Zuteilung.
  - Thread-Operationen führen zu einem Trap in den Kern (Syscall)
- Hybride Implementierung (n:m Abbildung zwischen n Threads in User-Space und m Kernel Threads)

Front: Vorteile von User-Level Threads
Back: - BS-unabhängig
- Schnelles Umschalten zwischen User-Level-Threads (keine Syscalls)
- Anwendungsspezifisches Scheduling

Front: Nachteile von User-Level Threads
Back: - Blockieren eines Threads
- Threads werden eingesetzt, um blockierende Aufrufe zu parallelisieren
- Threads können die CPU monopolisieren

Front: Vorteile von Kernel-Level Threads
Back: 1. CPU-Scheduling und Multi-Processing:
  - Echte Parallelität
2. Einfacheres Blocking und I/O-Operationen:
  - Wenn ein Kernel-Thread eine blockierende I/O-Operation durchführt, kann das Betriebssystem andere Threads im selben Prozess weiterlaufen lassen.
  - User-Level-Threads würden bei einer blockierenden Operation den gesamten Prozess blockieren.
3. Prioritätsgesteuertes Scheduling:
  - Das Betriebssystem kann Kernel-Threads basierend auf Prioritäten planen, was für Echtzeitanwendungen entscheidend sein kann.

Front: Nachteile von Kernel-Level Threads
Back: 1. Overhead bei der Kontextumschaltung:
  - System Calls notwendig
2. Höhere Erzeugungs- und Verwaltungskosten:
  - Das Erstellen und Verwalten von Kernel-Threads ist oft aufwendiger als bei User-Level-Threads.
  - Jeder Kernel-Thread benötigt eigene Kernel-Ressourcen, was bei vielen Threads zu einem erhöhten Ressourcenbedarf führt.
3. Skalierbarkeitsprobleme:
  - Betriebssysteme begrenzen häufig die Anzahl der Threads, die ein Prozess haben kann, was die Skalierbarkeit von Anwendungen mit vielen Threads einschränken kann.
4. Geringere Flexibilität in der Scheduling-Politik:
  - Bei Kernel-Level-Threads ist das Scheduling meist fest im Kernel verankert, was die Anpassung an spezifische Anwendungsbedürfnisse erschwert.

Front: Unix-Threads
Back: - UNIX-Systeme unterstützen Kernel-Level Threads.
- LinuxThreads: Erste Thread-Implementierung unter Linux.
  - Gemeinsame Ressourcen: Adressraum, Datei-Deskriptoren, Signale etc.
  - Eigene IDs: Jeder Thread hat unterschiedliche PIDs und PPIDs.
  - Manager-Thread: Benötigt für Erzeugung und Terminierung von Threads.
  - Thread-Erzeugung: Verwendung des Systemcalls clone().
- Java Threads (JVM Verwendet NPTL)
  - Java Thread wird 1:1 auf einen Kernel-Level-Thread abgebildet

Front: Wichtige POSIX Threads Funktionen
Back: - pthread_create (Erstellen eines neuen Threads)
- pthread_exit (Aufrufender Thread wird beendet)
- pthread_join (Warten auf die Terminierung und Rückgabewert des Threads)

Front: Was sind Scheduling Ziele für alle Systeme?
Back: - Fairness: Jeder Prozess soll einen fairen Anteil der CPU erhalten
- Balance: Alle Teile des Systems (CPU, I/O) möglichst effektiv auslasten

Front: Was sind Scheduling Ziele für Batch-Systeme?
Back: - Durchsatz: Maximiere Anzahl der Aufträge pro Zeit, Maß für Systemauslastung
- Ausführungszeit: Minimiere Ausführungszeit
- CPU Belegung: Konstante Belegung der CPU

Front: Was sind Scheduling Ziele für Interaktive-Systeme?
Back: - Antwortzeit: Minimiere die Antwortzeit für eingehende Anfragen
- Proportionalität: Berücksichtige die Erwartungshaltung der Benutzer

Front: Was sind Scheduling Ziele für Echtzeit-Systeme?
Back: - Deadlines einhalten: Vermeide Datenverlust (Soft-Deadlines).
- Vorhersagbarkeit: Vermeide Qualitätsverlust z.B. in Multimediasystemen

Front: Was sind Kriterien zur Auswahl von Prozessen
Back: - Fairness vs. Priorität
- I/O vs. CPU-Bound Prozesse
- Wartezeit
- CPU-Belegung vs. Durchsatz

Front: Welche prinzipiellen Scheduling-Klassen gibt es?
Back: - Nicht-unterbrechend (non-preemptive)
- Unterbrechend (preemptive)

Front: Was zeichnet nicht-unterbrechendes Scheduling aus?
Back: Prozesse werden so lange ausgeführt, bis sie blockieren oder freiwillig die CPU abgeben.

Front: Was zeichnet unterbrechendes Scheduling aus?
Back: Prozesse werden beim Auftreten von bestimmten Ereignissen (z.B. Timer-Interrupt) unterbrochen.

Front: Welche drei Scheduling Strategien können für Batch-Systeme genutzt werden? Sind sie unterbrechend?
Back: - First-Come-First-Served (FCFS): nicht unterbrechend
- Shortest Job First (SJF): nicht unterbrechend
- Shortest Remaining Time Next (SRTN) unterbrechend

Front: Wie ist FCFS aufgebaut?
Back: - FIFO-Run-Queue (Ready-Queue) mit rechenwilligen Prozessen
- Prozess wird so lange ausgeführt, bis er blockiert, oder freiwillig die CPU abgibt
- Bei Abgabe wird der nächste Prozess aus der FIFO Queue aktiv

Front: Welchen Nachteil hat die FCFS Scheduling Strategie?
Back: Der Hauptnachteil der FCFS-Scheduling-Strategie ist der Convoy-Effekt, bei dem lange Prozesse kürzere Prozesse in der Warteschlange blockieren, was zu ineffizienter CPU-Nutzung und längeren Wartezeiten führt.

Front: Warum sind "Shortest Job First" und "Shortest Remaining Time Next" ungeeignet für Scheduling in interaktiven Systemen?
Back: Die Ausführungszeiten müssen vorab bekannt sein.

Front: Wann wird ein Prozess bei "Shortest Remaining Time Next" unterbrochen?
Back: Bei Ankunft neuer Prozesse.

Front: Wie funktioniert die SJF Scheduling Strategie?
Back: - CPU wird einem Prozess mit der kürzesten Rechenzeit zugewiesen

Front: Wann ist die SJF Scheduling Strategie optimal?
Back: Wenn alle Jobs am Anfang vorliegen und alle Rechenzeiten bekannt sind.

Front: Wie können auch Prozesse mit unbekannter Rechenzeit mit der SJF Scheduling Strategie verarbeitet werden?
Back: Die Rechenzeit wird in Phasen approximiert. Dabei wird die nächste Rechenphase abgeschätzt und mit der letzten (tatsächlichen) Ausführungszeit korrigiert.
TODO: Formel

Front: Beschreibe wie die SRTN Scheduling Strategie funktioniert.
Back: SRTN (Shortest Remaining Time Next) ist die unterbrechbare Variante von Shortest Job First (SJF).
1. Sobald ein neuer Prozess rechenwillig wird, wird seine Gesamt-Rechenzeit mit der verbleibenden Zeit des aktiven Prozesses verglichen
2. Ist die Rechenzeit des neuen Prozesses kürzer, wird der aktive Prozess unterbrochen.

Front: Nenne zwei Scheduling Strategien für interaktive Systeme.
Back: - Round-Robin Scheduling (RR)
- Priority Scheduling

Front: Was passiert, wenn das Zeitquantum bei m Round-Robin Scheduling Algorithmus zu kurz gewählt wird?
Back: Es werden zu viele teure Kontextwechsel erzeugt.

Front: Was passiert, wenn das Zeitquantum bei m Round-Robin Scheduling Algorithmus zu lang gewählt wird?
Back: Das Verhalten ist ähnlich wie bei einem FCFS-Scheduling, was zu langen Wartezeiten für andere Prozesse und einer verringerten Systemreaktivität führt.

Front: Wie heißen die zwei vorgestellten Scheduling-Strategien für Echtzeit-Systeme?
Back: - Earliest Deadline First (EDF)
- Rate-Monotonic Scheduling (RMS)

Front: Beschreibe wie Priority Scheduling für interaktive Systeme funktioniert
Back: - Jedem Prozess wird eine Priorität zugewiesen
- CPU wird einem rechenwilligen Prozess mit der höchsten Priorität zugewiesen
- Prozesse mit gleicher Priorität werden in einer Queue verwaltet -> Eine Queue pro Priorität
- Kontextwechsel: Sobald höher-prioritisierter, rechenwilliger Prozess bereit ist

Front: Welche Probleme entstehen wenn beim Priority Scheduling die Prioritäten nur statisch gewählt werden?
Back: 1. Prozesse verhungern: Niedrig prioritisierte Prozesse könnten keine CPU Zeit bekommen und verhungern
2. Flexibilität: Gerade bei interaktiven System ändert sich die Priorität häufig.
3. Vorausplanen der Priorität schwierig bei interaktiven Systemen

Front: Wie könnte eine Dynamische Prioritisierung (z.B. nach einem Timer-Interrupt) ablaufen?
Back: - Prioritätsverringerung: Vermeiden, dass zu hoch-prioritisiere Prozesse endlos laufen
- Prioritätserhöhung: Vermeiden, dass niedrig-prioritisiere Prozesse verhungern
- I/O-Boost: Kurzzeitige Bervorzugung von I/O-Bound Prozessen

Front: Welche Datenstruktur kann für die Dynamische Prioritisierung genutzt werden?
Back: Multilevel-Feedback-Warteschlange

Front: Was ist ein weiches Echtzeit System?
Back: - Es wird toleriert, dass nicht alle Deadlines eingehalten werden (soft deadlines)
- Beispiel: Verlieren von (Netzwerk-)Paketen während einer Videokonferenz

Front: Was ist ein hartes Echtzeit System?
Back: - Harte Deadlines die eingehalten werden müssen
- Bsp. Sicherheitskritische Anwendungen, oder Prozessabläufe

Front: Earliest Deadline First (EDF)
Back: - CPU wird dem Prozess der nächsten Deadline zugeordnet
- Preemptive: Prozess wird unterprochen, sobald ein Prozess mit einer früheren Deadline rechenwillig ist.
- Non-preemptive (Prozess muss kooperieren. Kontextwechsel nach Beendigung, oder Yield)

Front: Rate-Monotonic Scheduling (RMS)
Back: - Für periodische Prozesse
- Prozess-Priorität in Abhängigkeit von der Periode zugeordnet
- Deadline entspricht dem Ende der Periode
- Periode mit der höchsten Frequenz (kleinste Periode) -> Höchste Priorität
- Periode wird statisch vergeben

Front: Was ist das Hauptziel des Mehrschichtigen Schedulings?
Back: Das Hauptziel des Mehrschichtigen Schedulings ist es, nicht alle rechenwilligen Prozesse sofort im Speicher zu lagern, sondern dies vorab effizient zu organisieren.

Front: Wie unterscheidet sich preemptive von non-preemptive Scheduling?
Back: Preemptive Scheduling erlaubt die Unterbrechung eines laufenden Prozesses, während non-preemptive Scheduling den Prozess bis zu seinem Ende ohne Unterbrechung laufen lässt.

Front: Was ist die Aufgabe des Short-Term-Schedulers (STS)?
Back: Der Short-Term-Scheduler (STS) wählt geeignete Prozesse aus der Run-Queue (Ready-Queue) für die Ausführung aus und verwendet dabei verschiedene vorgestellte Verfahren.

Front: Wahr oder Falsch: Der Dispatcher ist immer Teil des Short-Term-Schedulers.
Back: Wahr. Der Dispatcher ist in der Regel ein Bestandteil des Short-Term-Schedulers und wird sehr häufig aufgerufen.

Front: Was ist die Funktion des Medium-Term-Schedulers (MTS)?
Back: Der Medium-Term-Scheduler (MTS) entscheidet, ob ein Prozess in den Speicher eingelagert werden soll und ist ein Teil des Swapping-Mechanismus.

Front: Erkläre die Rolle des Long-Term-Schedulers (LTS).
Back: Der Long-Term-Scheduler (LTS) zielt darauf ab, einen guten Mix aus I/O-intensiven und rechenintensiven Prozessen zu erreichen und entscheidet über die Einlagerung neuer Aufträge in den Arbeitsspeicher.

Front: Wie beeinflusst der Long-Term-Scheduler den Grad des Multiprogrammings?
Back: Der Long-Term-Scheduler steuert, wie viele Prozesse gleichzeitig im Arbeitsspeicher liegen, und beeinflusst somit den Grad des Multiprogrammings.

Front: Wann wird der Long-Term-Scheduler typischerweise aufgerufen?
Back: Der Long-Term-Scheduler wird aufgerufen, sobald ein neuer Prozess erzeugt wird, und entscheidet, ob dieser zur Ready-Queue hinzugefügt werden soll.

Front: Wahr oder Falsch: Der Long-Term-Scheduler ist immer in Betriebssystemen vorhanden.
Back: Falsch. Der Long-Term-Scheduler ist nicht immer vorhanden, zum Beispiel nicht unter Linux.

Front: Was ist der Unterschied zwischen Short-Term- und Long-Term-Scheduling?
Back: Short-Term-Scheduling befasst sich mit der Auswahl von Prozessen zur Ausführung aus der Ready-Queue, während Long-Term-Scheduling entscheidet, welche Prozesse in den Speicher gelangen und den Multiprogramming-Grad beeinflusst.

Front: Wie werden Threads unter Linux für das Scheduling behandelt?
Back: Unter Linux werden Threads 1:1 auf Kernel-Level-Threads abgebildet, was zu einem thread-basierten Scheduling führt.

Front: Welche drei Thread-Klassen unterscheidet Linux beim Scheduling?
Back: Linux unterscheidet zwischen Echtzeit-FIFO, Echtzeit-Round-Robin und Timesharing-Threads.

Front: Was war die Besonderheit des Linux-Schedulers bis zur Kernelversion 2.6?
Back: Bis zur Kernelversion 2.6 verwendete Linux den O(1)-Scheduler, der auf Priority Scheduling mit 140 Prioritäten basierte.

Front: Was ist der Completely-Fair-Scheduler (CFS) und wie unterscheidet er sich vom O(1)-Scheduler?
Back: Der Completely-Fair-Scheduler (CFS), eingeführt ab Kernelversion 2.6, verwendet eine Red-Black Tree basierte Run-Queue und ordnet Prozesse nach ihrer bereits verbrauchten CPU-Rechenzeit an, im Gegensatz zum O(1)-Scheduler.

Front: Wie sind die 140 Prioritäten im Linux-Scheduling verteilt?
Back: Von den 140 Prioritäten unter Linux sind 0-99 für Echtzeit-Threads und 100-139 für Timesharing-Threads reserviert.

Front: Wahr oder Falsch: Echtzeit-Threads unter dem Standard-Linux-Kernel können für Echtzeitanwendungen genutzt werden.
Back: Falsch. Echtzeit-Threads können mit dem Standard-Linux-Kernel nicht für Echtzeitanwendungen genutzt werden.

Front: Welche Herausforderungen ergeben sich beim Multicore-/Multiprozessorscheduling?
Back: Zu den Herausforderungen gehören die Zuordnung von Prozessen zu einzelnen Kernen/Prozessoren, unterschiedliche Charakteristika der Recheneinheiten und die Balance zwischen Scheduling-Qualität und -geschwindigkeit.

Front: Was ist das Ziel beim Scheduling von N Prozessen auf M Prozessoren und warum ist es komplex?
Back: Ziel ist es, einen Schedule zu finden, der die Gesamtausführungszeit minimiert. Für M>1 ist dies äquivalent zum multiway number partitioning und somit NP-hard, was es komplex macht.

Front: Was sind die Unterschiede zwischen Time Sharing und Space Sharing im Kontext des Schedulings?
Back: Time Sharing ermöglicht die abwechselnde Nutzung von Ressourcen, während Space Sharing abhängigen Prozessen den direkten Austausch und gemeinsame Ressourcennutzung erlaubt.

Front: Was versteht man unter Gang Scheduling?
Back: Gang Scheduling ist eine Kombination von Time und Space Sharing, bei der abhängige Prozesse als eine Einheit behandelt werden und gemeinsame Zeitscheiben für die Ausführung erhalten.

Front: Erkläre das Konzept der "Globalen Warteschlange" im Kontext von CPU-Management und Multi-CPU Scheduling.
Back: - Alle CPUs nutzen eine gemeinsame Warteschlange für Prozesse
- Gute CPU-Auslastung und Fairness für alle Prozesse
- Schlechte Skalierbarkeit durch lock contention und schlechte Cache Lokalität

Front: Was sind die Vorteile einer Warteschlange für jede CPU bei Multi-CPU Scheduling?
Back: Implementierung, Skalierbarkeit durch die Vermeidung von lock contention, und bessere Cache Lokalität.

Front: Nenne einen Nachteil der Verwendung einer Warteschlange für jede CPU.
Back: Ungleiche Auslastung der CPUs, was zu Unfairness gegenüber Prozessen führen kann.

Front: Was ist die hybridge Implementierung von CPU und Prozess Warteschlangen?
Back: - Verwendung einer globalen mit lokalen Warteschlangen
- Verschiebung von lokale Warteschlange in eine andere
  - Gute Auslastung
  - Wiederverwendung von Daten im Cache

Front: Was versteht man unter der Heterogenität von Prozessen?
Back: - Ausführungszeit eines Prozesses stark von der Wahl des Prozessors ab
- Cache Reuse: Weiternutzen von existierenden Daten im Cache eines Prozessors
- Hitze: Beispiel: Perfomance vs. Efficiency Cores

Front: Was ist NUMA (Non-Uniform Memory Access)
Back: Zugriffszeit auf den Arbeitsspeicher ist nicht für alle Prozessoren identisch. Prozesse sollten möglichst nahe an dem von ihnen benötigten Speicher ausgeführt werden.

Front: Nenne eine alternative Architektur, die den Kernel parallelisiert
Back: - Konzept heißt Multi-Kernel
- Bisher:
  - Bei paralleler Ausführung werden oftmals kritische Abschnitte geschützt (skaliert schlecht)
  - Kernel muss für alle Applikationen möglichst gut sein
- Aufteilung: Ein Kern pro Rechenkern oder NUMA-Knoten
- Zustandsreplizierung zwischen verschiedenen Kernen

Front: Datenzentrischer Kernel
Back: - Betriebsystem aggregiert und verwaltet viele Daten
- Idee: Zentralisieren aller Daten in einer Datenbank
- Bisher nur ein Konzept

Front: Welcher der folgenden Systemcalls wird unter Unix für die Behandlung von Signalen verwendet? pause, alarm, kill, sigaction, wait, pthread_kill?
Back: Unter Unix wird der Systemaufruf sigaction verwendet, um die Behandlung von Signalen zu steuern.

Front: Welche der folgenden Systemcalls werden unter Unix für die Prozessverwaltung verwendet? wait, select, pthread_create, creat, getcpu, fork
Back: wait, fork

Front: Was sind notwendige Bedingungen für das Auftreten eines Deadlocks nach Coffman et al. (1971)? mutual exclusion, hold-and-wait, circular preemption, no-preemption, circular wait, mutual preemption
Back: Mutual exclusion, hold-and-wait, no-preemption, circular wait

Front: Die Größe welcher der folgenden Segmente sind dem Betriebssystem bereits unmittelbar nach dem Programmstart bekannt? .heap, .rodata, .text, .data
Back: .rodata, .text, .data

Front: Nenne die 4 Betriebsarten eines Betriebsystems.
Back: - Echtzeitbetrieb (Real-time mode)
- Dialogbetrieb (Interactive mode)
- Stapelverarbeitung (Batch processing):
- Transaktionsbetrieb (Transaction processing): In dieser Betriebsart werden Transaktionen, oft in Datenbanken, verarbeitet, wobei die Integrität der Daten trotz gleichzeitiger Zugriffe mehrerer Benutzer oder Systeme gewährleistet werden muss.

Front: Nenne den Interval von validen niceness Werten zur Prioritisierung von Processen.
Back: Der niceness Wert kann zwischen -20 (inkl.) und 19 (inkl.) liegen.

Front: Gegeben ist ein Process mit niceness Wert 10 und ein anderer mit niceness Wert 0. Welcher der beiden Prozesse hat eine höhere Priorität?
Back: Generell gilt: Je niedriger der niceness Wert, desto höher die Priorität. Somit hat der Prozess mit niceness Wert 0 eine höhere Priorität.

Front: Was ist das Zeitquantum des CFS Schedulers?
Back: Es existiert kein festes Zeitquantum. Stattdessen wird dynamisch vor jeder Ausführung ein Quantum bzw. ein Time Slice TS berechnet.
Hier wird die Anzahl aller Prozesse, als auch die Prioritäten aller aktuell aktiven Prozesse berücksichtigt.

Front: Was ist die Target Latency (TL) des CFS Schedulers?
Back: Die TL stellt ein Intervall dar, in dem alle Prozesse mindestens einmal die CPU bekommen sollen.

Front: Warum wird eine virtual runtime (vt) verwendet?
Back: Die virtual runtime ist eine Kombination der tatsächlichen Laufzeit eines Prozesses mit der Gewichtung des Prozesses.
Sie wird verwendet, um die Fairness des Schedulers zu gewährleisten.