Skip to content

Inhaltsverzeichnis

**📌 Einführung: Prozesse und Scheduling

Im Rahmen dieser Lehrveranstaltung wurden wir wöchentlich zu dem Buch 🔗 O-STEP Book einzeln abgefragt. Wir haben Kapitel 3-38 behandelt. In der Abfrage konnte alles mögliche was in den jeweiligen Kapiteln zu finden ist, drankommen. Wöchentlich wurden in etwa 2-3 Kapitel behandelt. Diese Seite und die zugehörigen Zusammenfassungen wurden nachträglich erstellt - also erst im Anschluss an den jeweiligen Kurs. Die Inhalte dienen vor allem dazu, einen Einblick in die behandelten Themen zu geben.
Es kann daher vorkommen, dass einzelne Aspekte verkürzt, vereinfacht oder nicht vollständig dokumentiert sind.

🔹 Kapitel 4 - Prozesse

  • Ein Prozess ist ein laufendes Programm mit einem eigenen Adressraum.
  • Prozesse haben Zustände: running, ready, waiting.

🔹 Kapitel 5 - Process API

  • Prozesse werden mit fork() erstellt und mit exec() ersetzt.
  • wait() sorgt dafür, dass ein Elternprozess auf sein Kind wartet.

🔹 Kapitel 6 - Direct Execution

  • Ein Programm läuft direkt auf der CPU, aber das Betriebssystem verwaltet den Zugriff auf Ressourcen über System Calls.

🔹 Kapitel 7 - CPU Scheduling

  • First-Come, First-Served (FCFS) → einfacher, aber unfair.
  • Round Robin (RR) → jeder Prozess erhält eine feste Zeitscheibe.
  • Shortest Job First (SJF) → optimale Wartezeiten, aber schwer vorherzusagen.

🔹 Kapitel 8 - Multi-Level Feedback Queue (MLFQ)

  • Dynamisches Scheduling, das Prozesse priorisiert, die schnell reagieren müssen.

🔹 Kapitel 9 - Lottery Scheduling

  • Threads erhalten "Lottoscheine", und einer wird zufällig zur Ausführung ausgewählt.

🔹 Kapitel 10 - Multi-CPU Scheduling

  • Symmetrisches und asymmetrisches Multi-Prozessor-Scheduling.

🔹 Kapitel 11 - Zusammenfassung der Scheduling-Strategien

  • Vergleich aller Scheduling-Algorithmen und deren Effizienz.

📌 Teil 2: Speicherverwaltung (Kapitel 12-24)

🔹 Kapitel 12 - Adressräume

  • Jeder Prozess hat seinen eigenen virtuellen Adressraum (Heap, Stack, Code, Data).

🔹 Kapitel 13 - Address Spaces & Code

  • Trennung von virtuellen und physischen Adressen.
  • OS verwaltet den Speicher mit Paging oder Segmentierung.

🔹 Kapitel 14 - Memory API

  • Heap-Management: malloc(), free() und Speicherallokatoren.

🔹 Kapitel 15 - Address Translation

  • MMU (Memory Management Unit) übersetzt virtuelle in physische Adressen.

🔹 Kapitel 16 - Segmentation

  • Speicher wird in logische Segmente unterteilt.
  • Problem: Fragmentierung.

🔹 Kapitel 17 - Free Space Management

  • Buddy-System & Bitmap-Allokatoren verwalten freien Speicherplatz.

🔹 Kapitel 18 - Einführung in Paging

  • Paging unterteilt den Speicher in gleich große Seiten.
  • Vorteile: Kein Fragmentierungsproblem wie bei Segmentierung.

🔹 Kapitel 19 - Translation Lookaside Buffer (TLB)

  • TLB (Translation Lookaside Buffer) speichert häufig verwendete Adressübersetzungen.

🔹 Kapitel 20 - Fortgeschrittene Page Tables

  • Multi-Level Page Tables sparen Speicherplatz.
  • Inverted Page Tables speichern nur verwendete Seiten.

🔹 Kapitel 21 - Swapping: Mechanismen

  • Swapping lagert inaktive Prozesse auf die Festplatte aus.

🔹 Kapitel 22 - Swapping: Policies

  • Wann und wie oft Prozesse geswappt werden, beeinflusst die Performance.

🔹 Kapitel 23 - Vollständige VM-Systeme

  • Kombiniert Paging, TLBs und Swapping für ein effizientes Speichersystem.

🔹 Kapitel 24 - Zusammenfassung der Speicherverwaltung

  • Vergleich von Paging, Swapping und Segmentierung.

📌 Teil 3: Concurrency & Synchronisation (Kapitel 25-34)

🔹 Kapitel 25 - Einführung in Concurrency

  • Mehrere Threads können parallel laufen, müssen aber synchronisiert werden.

🔹 Kapitel 26 - Thread API

  • POSIX-Threads (pthread)pthread_create(), pthread_join().

🔹 Kapitel 27 - Locks

  • Mutexe (pthread_mutex_lock) verhindern Race Conditions.

🔹 Kapitel 28 - Locks mit Spinlocks

  • Spin Locks vermeiden teure Kontextwechsel, verbrauchen aber CPU-Zeit.

🔹 Kapitel 29 - Gesperrte Datenstrukturen

  • Fine-Grained Locking: Mehrere Locks für verschiedene Teile der Datenstruktur.

🔹 Kapitel 30 - Bedingungsvariablen

  • pthread_cond_wait() blockiert Threads, bis eine Bedingung erfüllt ist.

🔹 Kapitel 31 - Semaphoren

  • sem_wait(), sem_post() kontrollieren den Zugriff auf mehrere Ressourcen.

🔹 Kapitel 32 - Race Conditions & Bugs

  • Typische Fehler: Deadlocks, Starvation, Lost Updates.

🔹 Kapitel 33 - Event-basierte Concurrency

  • Alternative zu Threads: asynchrone Ereignisbehandlung.

🔹 Kapitel 34 - Zusammenfassung der Synchronisationstechniken

  • Vergleich: Mutexe, Semaphoren, Bedingungsvariablen, Spinlocks.