Die Studenten verstehen die Funktionsweisen und Strukturen moderner Betriebssysteme sowie ihre Einbettung in die jeweiligen Rechnerarchitekturen. Sie erlernen dieses Wissen zur Entwicklung performanter und systemnaher Software einzusetzen und entsprechende Software zu konzipieren und zu implementieren. Die komplexen Programmieraufgaben sind als Teamarbeit ausgelegt und unterstützen damit nicht nur die Verbesserung der fachlichen Kompetenz, sondern dienen gezielt der Entwicklung von Sozial- und Selbstkompetenz.
Die Studierenden nutzen ihre Programmierkenntnisse in Gruppenarbeit an einem Projekt. Anhand verschiedener Aufgaben werden prinzipielle Techniken der systemnahen Programmierung angewandt, sowie allgemeine Programmiertechniken vertieft. Darüber hinaus verstehen die Studierenden die Grundlagen des Compiler-Baus.
Im Rahmen der Lehrveranstaltung Betriebssysteme werden nicht nur die grundlegenden Aufgaben und Arbeitsweisen moderner Betriebssysteme vermittelt, sondern die Studierenden erlernen auch diese Techniken selbständig und strukturiert im Team zur Lösung typischer systemnaher Entwicklungsaufgaben einzusetzen. Die Vorlesung selbst gliedert sich hierzu in vier Teile:
Während im ersten Teil die Verbindung zwischen Rechnerarchitektur und Betriebssystem geschaffen wird und ein prinzipielles Verständnis für die Aufgaben eines Betriebssystems entwickelt wird, stehen in den darauffolgenden Abschnitten die Vermittlung der spezifischen Probleme, das Verstehen der typischen Lösungsstrategien und das Anwenden dieser Strategien im entsprechenden Kontext im Vordergrund. Insbesondere werden folgende Punkte behandelt: Prozessorvirtualisierung, Speichervirtualisierung, Limited Direct Execution, Scheduling-Algorithmen, Free-Space Management, Segmentierung, Page Frames, Prozesse, Threads, Mutex, Semaphor, Condition Variable, Monitore und Patterns zur parallelen Programmierung. Hinzu kommen die zentralen Konzepte von Dateisystemen, deren Aufbau und Realisierung, bis zur Behandlung von Raid-Konzepten und dem Umgang mit modernen SSDs.
Die in Gruppen durchzuführende Aufgaben kommt aus dem Gebiet Compiler-Bau. Im ersten Teil wird den Studierenden die Funktionsweise eines Scanners sowie dessen Einordnung innerhalb eines Compilers vermittelt. Die durchzuführende Implementierung in C++ vertieft die Fähigkeiten im Umgang mit dynamischen Datenstrukturen, eigener Speicherverwaltung und Zeigern. Diese Kenntnisse werden im zweiten Teil des Labors im Rahmen der Entwicklung eines Parsers vertieft. Im Mittelpunkt steht hier der Umgang mit rekursiven Datenstrukturen. Die Studierenden erlernen, wie sich durch den Einsatz von Entwurfsmustern Strukturen einfacher bearbeiten und verwalten lassen.
Seminaristischer Unterricht; betreutes Labor