Betriebssysteme II 2022

Prof. Dr. Andreas Polze
Andreas Grapentin, Sven Köhler, Felix Gzelka, Felix Eberhardt

Die Lehrveranstaltung richtet ihren Schwerpunkt auf Technologien in Standard-Betriebssystemen (general-purpose operating systems) und diskutiert Techniken und Ansätze am Beispiel der Microsoft Windows NT/2000/XP-Betriebssystemfamilie. Diese Ansätze werden in Relation gesetzt zu Lösungen, die in UNIX/Mac OS X/ Linux, dem VMS-Betriebssystem und eingebetteten Systemen realisiert worden sind.

Auf diesen Seiten finden Sie Unterlagen zu den Vorlesungen, die laufend ergänzt werden. Insbesondere finden Sie einige Foliensätze, die über das in der Vorlesung gezeigte Material hinausgehen.

Als Teilnehmer der Lehrveranstaltung sind Sie berechtigt Kopien der Unterlagen für Ihre eigene Verwendung anzufertigen. Jegliche Vervielfältigung und Nachnutzung der Unterlagen in elektronischer oder gedruckter Form bedürfen der schriftlichen Zustimmung des Autors.

Vorlesung und Projektarbeit

Die Vorlesung teilt sich in einen inhaltlichen und einen praktischen Teil. Dabei entfallen ca. 50% der Zeit auf Vorlesungsinhalte, und 50% der Zeit auf Projektarbeit und Auswertung.

Termine

Es findet wöchentlich eine Vorlesung statt.

  • Zeit: Dienstags, 09:15 Uhr
  • Ort: HS3

Dazu wird es zwei-wöchentliche Videokonferenz zur Besprechung des Projektfortschritts geben. Folgender Termin ist dafür vorgesehen:

Der erste Termin ist der 21.04.2022 (virtuell).

Termine:

  • 21.04.2022 11:00 Vorlesung: Einführung (virtuell)
  • 26.04.2022 09:15 Einladung zum FutureSOC Lab Day
  • 28.04.2022 11:00 Vorstellung der Projektthemen (virtuell)
  • 03.05.2022 09:15 Vorlesung: The Mach Operating System
  • 05.05.2022 11:00 Besprechung der Projektthemen
  • 10.05.2022 09:15 Vorlesung: Principles of I/O Systems
  • 12.05.2022 11:00 Vorlesung: Barrelfish
  • 17.05.2022 09:15 abweichend Besprechung der Projektthemen
  • 19.05.2022 11:00 abweichend Vorlesung: Principles of I/O Systems (cntd.)
  • 24.05.2022 09:15 Vorlesung: tba
  • 26.05.2022 11:00 entfällt
  • 31.05.2022 09:15 Vorlesung: tba
  • 02.06.2022 11:00 Besprechung der Projektthemen

Unterlagen zur Vorlesung

Die Vorlesung wird auf deutsch gehalten. Die Folien, sowie die meisten weiterführenden Materialien, liegen in englischer Sprache vor.

Leistungserfassung

Es gelten folgende Regeln:

  1. Es handelt sich um eine 6 Punkte Bachelor-Vorlesung.
  2. Ergänzend zur Vorlesung werden Projekte durchgeführt.
  3. Die Ermittlung der Endnote erfolgt zu gleichen Teilen durch die Bewertung der Projektarbeit, sowie eines abschließenden Reports.
  4. Zum Bestehen der Veranstaltung ist die Teilnahme an den wöchentlichen Projektgesprächen erforderlich

Projektarbeit

Im Projektteil der Veranstaltung können die folgenden Themen bearbeitet werden:

Energiegewahres Rechnen

  • Energie-Instrumentierung auf Prozessebene: Der Linuxkernel bietet eine umfangreiche Sammlung an Performance Countern, die detaillierte Einsicht über das Verhalten eines Programmes (Anzahl Instruktionen, Branches, Cache-Misses) bis auf die Codezeile hinab ermöglichen. Gemeinsam wollen wir in diesem Projekt die kernel-seitige Architektur kennen lernen und virtuelle Energiezähler entwerfen, damit wir verstehen können welche Programmbereiche am energiehungrigsten sind.
  • Energiemessungen auf FreeBSD: FreeBSD gehört zu den versteckten aber omnipräsenten Champions unserer IT-Infrastruktur. Leider fehlen dem System aber noch die Möglichkeit den Energieverbrauch von Prozessen zu messen. In diesem Projekt wollen wir (z.B. auf Basis von Pinpoint) eine Schnittstelle entwerfen, mit der wir FreeBSD-Usern Energieinformationen in ihre Ausführungsstatistik integrieren können.

Nicht-Flüchtige Speichertechnologien

  • Dateisysteme in Nicht-Flüchtigem Hauptspeicher: Die entwicklung persistenter Hauptspeichertechnologien wirkt sich auf viele Bereiche des Computing aus. Dateisysteme, die klassischerweise auf Geräten mit Blockzugriffs-Semantik operieren, müssen sich nun an eine Load-Store Semantik anpassen. Welche Ansätze dafür gibt es, und wie unterscheiden sich diese?

Nicht-Uniforme, Heterogene Speicherhierarchien

  • Instrumentierung und Analyse: Die Speicherplatzierung ist ein wichtiger Faktor der Performance einer Applikation. Mit bestehenden Werkzeugen lassen sich Aussagen zum Allokations-Verhalten treffen. Diese sind für einige System-Typen, wie NUMA (Non-uniform Memory Access) Systeme jedoch nicht aussagekräftig genug. Hier werden genauere Informationen über die Platzierung von Speicherseiten in den einzelnen Lokalitäts-Domänen (z.B. CPU-Sockeln) benötigt. Die Aufgabe besteht darin, das Werkzeug Heaptrack (https://github.com/KDE/heaptrack) entsprechend zu erweitern.
  • Disaggregation und Verlässlichkeit: Mit größeren Speichern, die möglicherweise auch weitverteilt sein können, steigt die Gefahr, dass Teile des Adressraumes für Zugriff ausfallen. Klassicherweise begegnet man diesen Fehlerursachen mit regelmäßigen Zustandssicherungen (Checkpointing). Doch was, wenn ein Neustart sehr kostspielig ist oder die Frequenz der Ausfälle zu hoch? In diesem Projekt sollen alternative Ansätze überprüft werden: Können Teile der Applikation identifiziert und ausfallsicher gegenüber, z.B. eines SIGBUS-Szenarios gehärtet werden? Wie sähe eine solche Architektur aus und was muss alles beachtet werden?
  • GPU Memory Swapping für Deep Learning Frameworks: Im Vergleich zum Hauptspeicher (RAM) der CPU, der durch das Betriebssystem verwaltet wird, muss der Speicher von GPUs manuell verwaltet werden. Dies führt im Beispiel von Jupyter Notebooks und Tensorflow schnell zu out of Memory Exceptions, da eine Anwendung den Speicher nicht automatisch freigibt (obwohl der Speicher zurzeit nicht benötigt würde), wenn eine andere Anwendung Speicher anfordern will. Eine mögliche Lösung wäre das implementieren eines Swappings für GPU Speicher. So könnte ungenutzter Speicher wieder für andere Anwendungen freigegeben werden, ohne die Trainingsergebnisse anderer Nutzer zu verlieren.Es existieren bereits Implementierungen, die als Beispiel dienen können. Für dieses Seminar wäre der spezielle Fokus auf Deep Learning workloads interessant.

Neue Programmierparadigmen in Betriebssystemen

  • Rust als Programmiersprache im Kernel: Aktuelle Diskussionen rund um den Linux-Kernel betreffen die Integration der Programmiersprache Rust für die Treiber-Infrasturktur. In vorherigen Iterationen der Vorlesung gibt es bereits Vorarbeiten, die prototypisch bereits einen Treiber in Rust implementiert haben. In diesem Projekt sollen die Vor- und Nachteile eines solchen Ansatzes erörtert werden. Dazu soll die Kernel-Mailing-Liste herangezogen werden, um offizielle Vorschläge einzuordnen. Weiterhin sollen die Experimente aus der vorherigen Iteration gegebenenfalls erweitert oder neu geschrieben werden, um mögliche Einschränkungen zu demonstrieren.

Betriebssystem Kernel Architekturen

  • Mikrokern, Monolith, Multikern, Unikern: Nicht alle Betriebssysteme sind Monolithisch aufgebaut. Untersuchen Sie alternative Architektur-Ansätze aus Praxis und Literatur, bringen Sie sie zum Laufen, und Vergleichen Sie deren Eigenschaften, Designziele und Anwendungsbereiche.

Betriebssystemgeschichte

  • Lebendige Geschichte der Betriebssysteme: Viele historische Systeme können heute noch in Emulation oder auf echter historischer oder nachgebildeter Hardware betrieben werden. Mache Systeme werden von einzelnen Menschen am Leben erhalten, andere sind sogar noch als Quelltext verfügbar. Betrachten Sie ein oder mehrere konkrete historische Systeme, und setzen Sie sich mit ihnen auseinander.
  • Betriebssystem-Galerie InstantLab: Untersuchen und Erweitern Sie InstantLab, unsere Plattform zur Bereitstellung von Betriebssystem-Instanzen im Webbrowser. InstantLab wird eingesetzt zur Implementierung der Betriebssystem-Galerie, einem System zur Pflege der Betriebssystemgeschichte durch schnell verfügbare Instanzen historischer Systeme.

Literaturhinweise

Diese Liste wird ständig ergänzt.

  • Sysinternals Webseite www.sysinternals.com
  • (CRK) Tools
  • Mark A.Russinovich/David A. Solomon, "Windows Internals", 4th Edition, MS Press 2005.
  • David A. Solomon/Mark E. Russinovich, "Inside Windows 2000", 3rd Edition, MS Press, 2000.
  • John Hart, "Win32 System Programming", Addison-Wesley, 1997.
  • Abraham Silberschatz, Peter B. Galvin, "Operating System Concepts", John Wiley & Sons, 6th Ed., 2003; Webseite zu diesem Buch unter os-book.com
  • Gary Nutt, "OS Projects using Windows NT", Addison-Wesley, 1999.
  • Helen Custer, "Inside Windows NT", MS Press, 1993.
  • Andrew S. Tanenbaum, "Distributed Operating Systems", Prentice Hall, 1995.
  • Walter Oney, "Programming the Microsoft Windows Driver Model", MS Press, 2003.
  • VMware curriculum repository: GoVirtual.org