Betriebssysteme II 2022

Prof. Dr. Andreas Polze
Andreas Grapentin, Sven Köhler, Felix Grzelka, 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 Termine zur Besprechung des Projektfortschritts geben. Folgender Termin ist dafür vorgesehen:

  • Zeit: Donnerstags, 11:00 Uhr
  • Ort: HS3

Beide Termine werden zusätzlich in folgenden Zoom Raum übertragen:

Zoom-Meeting: https://zoom.us/j/5198175573?pwd=K3Q2b1V2a09HaHA3bFY3YUtCMWlzZz09
Meeting-ID: 519 817 5573 | Kenncode: 4711
Telefonische Einwahl: +496971049922,,5198175573#,,#,4711# | +493056795800,,5198175573#,,#,4711#

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 entfällt für Projektarbeit
  • 24.05.2022 09:15 Vorlesung: I/O Processing und Dateisysteme
  • 26.05.2022 11:00 entfällt
  • 31.05.2022 09:15 Vorlesung: Dateisysteme
  • 02.06.2022 11:00 Vorlesung: ZFS und Modern File Systems
  • 07.06.2022 09:15 Vorlesung: NTFS Erweiterungen
  • 09.06.2022 11:00 Einführungsvorträge der Projekte
  • 14.06.2022 09:15 entfällt für Projektarbeit
  • 16.06.2022 11:00 Vorlesung: Dateisystem Verschlüsselung und Einblick POSIX
  • 21.06.2022 09:15 Vorlesung: Netzwerk - Historische Perspektive
  • 23.06.2022 11:00 Vorlesung: Netzwerk- und Socket-Programmierung
  • 28.06.2022 09:15 Vorlesung: Einführung Virtualisierung
  • 30.06.2022 11:00 Vorlesung: Virtualisierung Überblick
  • 05.07.2022 09:15 Vorlesung: CPU und Speicher Virtualisierung
  • 07.07.2022 11:00 Vorlesung: Geräte Virtualisierung
  • 12.07.2022 09:15 Vorlesung: OS Virtualisierungs Techniken
  • 14.07.2022 11:00 Abschlussvorträge der Projekte
  • 15.07.2022 09:30 Abschlussvorträge der Projekte
  • 19.07.2022 09:15 Übung: Socket Programmierung und Rechenzentrumsbesuch
  • 21.07.2022 11:00 Übung: Socket Programmierung und Prüfungsvorbereitung
  • 26.07.2022 09:15 entfällt für individuelle Prüfungsvorbereitung
  • 28.07.2022 11:00 entfällt für individuelle Prüfungsvorbereitung

Prüfungszeitraum:

Die Durchführung der mündlichen Prüfung ist in der ersten Augustwoche oder alternativ im September möglich. Termine dafür werden individuell vergeben. Das Buchungssystem für Prüfungstermine ist hier verfügbar:

https://osm.hpi.de/termin/bs2/

Unterlagen zur Vorlesung

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

Foliensätze:

Exkurs zum Debugging von Syscalls: https://github.com/osmhpi/syscall_observation

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. Zur Leistungserfassung wird eine mündlichen Prüfung gegen Ende der vorlesungsfreien Zeit durchgeführt (August bis September).
  4. In den ersten zehn Minuten der mündlichen Prüfung können Sie (optional) frei zu einem Thema aus der Vorlesung (ihrer Wahl) sprechen. Anschließend werden weitere Fragen zur Vorlesung gestellt.
  5. Die Ermittlung der Endnote erfolgt zu gleichen Teilen durch die Note der mündlichen Prüfung, sowie die Bewertung der Projektarbeit.

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