Betriebssysteme KU - Einführungstutorium SWEB-Tutoren 5. Oktober 2008
1 Grundlagen 2 SWEB 3 Kernel Basics Memory Management Details 4 Userspace 5 Hacking 6 Beispiele 7 Assignment 0
Aufgaben eines Betriebssystems Ressourcenverwaltung Speicher CPU-Zeit (Scheduling - welcher Thread kommt wann dran) I/O (z.b. Kommunikation mit Keyboard, Maus, Festplatte,...) Interrupts Schnittstelle zwischen Applikation ( Userprogramm ) und Hardware Zugriff auf Festplatte/Dateisystem Einlesen von gedrückten Tasten einer Tastatur Erzeugung weiterer Prozesse Ausführen von Binaries etc Realisierung über System Calls genauere Erklärung in VO
Schon Wieder Ein Betriebssystem SWEB Mercurial http://hg.sharesource.org/sweb SWEB Bug Tracker http://sweb.sharesource.org/ Book of SWEB http://www.iaik.tugraz.at/content/teaching/ bachelor_courses/betriebssysteme/practicals/ Newsgroup: Alles was die Übung angeht in Bezug auf SWEB news://news.tugraz.at:119/tu-graz.lv.bs.sweb
SWEB Installation 1 Klonen von SWEB $ hg clone http : / / hg. sharesource. org/sweb 2 Initialisieren des make Systems (auch beim Hinzufügen von neuen Dateien!) $ cmake. 3 bauen von SWEB $ make 4 Starten mit bochs $ make bochs
SWEB-Kernel geschrieben in Assembler, C, C++ Aufteilung in architekturabhängigen Code (x86) sweb/arch allgemeinen Code sweb/common weder Exceptions noch STL verwendbar Ersatz: Template-Datenstrukturen Array List Map etc common/include/util
Memory-Management im SWEB-Kernel Paging physikalische Speicher in Seiten fixer Größe (4kiB bzw. 4MiB) unterteilt Seiten vom PageManager verwaltet Speicher ist virtuell: Adressen laufen durch Memory-Management-Unit (=MMU) Mappen von virtuellen auf physikalische Adressen dynamische Speicherverwaltung im Kernel: KernelMemoryManager (=KMM) new/delete/new[]/delete[] rufen die Funktionen des KMM auf -> können ohne Probleme verwendet werden (nur im Kernel!)
Memory Aufteilung
Protection Betriebssystemfunktionalität muss vor bösen oder fehlerhaften Userprogrammen geschützt werden ausführbare Instruktionen eingeschränkt Zugriff nur auf bestimmten Speicherbereich Kernel: privilege level 0 Userspace: privilage level 3 wenn besondere Funktionalität benötigt -> Kernel fragen : System Call
System Calls für Userprogramme normale C-Libraryfunktionen über Trapdoor Sprung in den Kernel Space in SWEB: Interrupt Context Switch in den Kernel Mode Abarbeitung der gewünschten Routine Rücksprung in den Usermode
Threading verschieden Dienste/Programme wollen gleichzeitig ausgeführt werden -> Multithreading Thread: Ausführungsstrang Klasse Thread Userprocess assoziiert mit einem Binary (durch Loader geladen) eigener Speicherbereich -> Pages eigener Stack für Userspace (eine Page) ein (oder mehrere?) Ausführungsstränge (Threads) Klasse UserProcess
Interrupts Hardware vs. Software Interrupts Ablauf Unterbrechung des aktuellen Programmablaufes Sicherung des aktuellen Zustandes Abarbeitung des Interrupt Handlers Rückkehr zum vorherigen Programmablauf In SWEB verwendet für Timer PageFault System Call yield etc.
Userspace geschrieben in C (keine Klassen etc.) es gibt keine dynamische Speicherverwaltung (malloc/free) in sweb/userspace C-library sweb/userspace/libc bietet Funktionen wie printf, scanf, putchar, getchar, atoi,... Ort für den Userspace-Code von System Calls Anwenderprogramme sweb/userspace/tests Ort für Testprogramme
Hacking SWEB Exceptions gibt es nicht Klassen ableiten kein Problem Statische Objekte: keine Initialisierung besser: Singleton keine FPU im Kernel Interrupts Abschalten: nein! höchstens es geht nicht anders Stack Begrenzung 8kiB/4kiB keine Rekursionen! debug Outputs
Beispiel Page Manager: Wie bekommt man eine freie Seite? Hält Bitmap für alle Pages Anforderung einer freien Seite PageManager : : getfreephysicalpage Freigeben einer Seite PageManager : : freepage wird z.b. verwendet von Loader : : loadonepagesafebutslow
Beispiel: kurzer Blick auf Kernel Memory Manager Hält double-linked list für allokierbaren sowie allokierten Speicher im Kernel Anforderung eines Speicherbereichs KernelMemoryManager : : allocatememory Freigeben einer Seite KernelMemoryManager : : freememory
Beispiel System Call: Lesen von der Tastatur read wird indirekt vom Userspace Programm stdin_test.c aufgerufen: 1 stdin test.c 2 scanf.c: scanf 3 scanf.c gets 4 read.c read 5... 6 Syscall::read
Beispiel Threading: Laufende Threads? Anzeigen der Threadliste mit F12 Erstellen eines neuen Threads in main.cpp Ableiten von der Klasse Thread überladen der Run Methode Hinzufügen zur Liste der laufenden Threads Scheduler : : instance() >addnewthread
Beispiel Interrupts: InterruptUtils jedem Interrupt wird eine Funktion zugewiesen, die ausgeführt werden soll, wenn dieser Auftritt. siehe: arch_interrupts.s InterruptUtils.cpp zum Beispiel: ERROR_HANDLER (0,# DE : Divide by Zero )
Assignment 0 jeder hat eine Frage auszuarbeiten http://www.iaik.tugraz.at/content/teaching/ bachelor_courses/betriebssysteme/practicals/ Abgabe: in einer Woche (Anwesenheitspflicht) Leistung: mündliche Präsentation ca. 2 bis 3 min Tafel Source Code wichtig: finden aller benötigten Source Dateien Verstehen aller relevanten Funktionen und Methoden Ablauf verstanden haben und erklären können