Betriebssysteme // Kapitel 2: System Calls


Aufgabe 1: Was sind die Hauptaufgaben eines Betriebssystems laut der Folien?
1. Abstraktion der tatsächlichen Hardware.
2. Bereitstellung einer einheitlichen Programmier-Schnittstelle (API) für Anwendungssoftware.
Aufgabe 2: Wie ist der schematische Schichtenaufbau eines modernen Computers dargestellt?
Von unten nach oben:
1. Hardware
2. Betriebssystem
3. Betriebssystem API
4. Prozesse (Anwendungen)
Aufgabe 3: Was war die 'Erste Idee' für Betriebssystem-Aufrufe und welches Beispiel wird genannt?
Die Idee war, dass die Schnittstelle des Betriebssystems direkt aufgerufen werden kann (wie eine Bibliotheksfunktion).
Beispiel: Microsoft DOS.
Aufgabe 4: Was sind die Nachteile von direkten Betriebssystem-Aufrufen?
Obwohl schnell, gibt es viele Nachteile:
- Keine Trennung zwischen OS und Applikation.
- Keine Trennung zwischen Applikationen.
- Keine Berechtigungskontrolle.
- Abstürze können Hardwareschäden verursachen.
Aufgabe 5: Welche Vorteile bieten 'Moderne System-Calls'?
- Klare Trennung zwischen OS und Applikation.
- Trennung zwischen mehreren Applikationen.
- Überprüfung von Berechtigungen.
- Unterbinden von direktem Hardware-Zugriff.
- Das System wird robuster.
Aufgabe 6: Was versteht man unter den 'Berechtigungs-Ringen' (Kernel-Mode vs. User-Mode)?
- Kernel-Mode: Dem Betriebssystem vorbehalten.
- User-Mode: Für Applikationen (kein direkter Hardware-Zugriff).
Direkte Funktionsaufrufe an das OS funktionieren daher nicht mehr.
Aufgabe 7: Wie wird zwischen User-Mode und Kernel-Mode gewechselt?
Durch einen Kontext-Switch mittels 'Traps'.
Ein Trap wird durch die Applikation ausgelöst und im Kernel-Mode durch eine Ausnahme-Routine behandelt.
Aufgabe 8: Nennen Sie Beispiele für Ereignisse, die 'Traps' auslösen können.
- Überlauf bei arithmetischer Operation
- Division durch 0
- Unbekannter Befehl
- System-Call
- Fehler bei Speicherzugriff
Aufgabe 9: Beschreiben Sie den schematischen Ablauf eines System-Calls.
1. Applikationscode (User-Mode)
2. System-Call löst Trap aus
3. Trap-Behandlung (Wechsel in Kernel-Mode)
4. OS-Code wird ausgeführt (Kernel-Mode)
5. Rückkehr zum Applikationscode (Wechsel in User-Mode)
Aufgabe 10: Erklären Sie das einfache Linux API Beispiel sys_exit.
mov eax, 1: Schreibt System-Call-Nummer (1) in Register eax.
int 0x80: Löst Interrupt/Trap aus, um Kernel zu rufen.
Aufgabe 11: Wie werden System-Call Parameter bei der x86-Architektur typischerweise übergeben?
Elementare Parameter werden in spezifischen Registern übergeben. Speziell genannt werden: EBX, ECX, EDX, ESI und EDI.
Aufgabe 12: Erklären Sie das Linux API Beispiel sys_write (System-Call 4).
mov eax, 4 (sys_write)
mov ebx, 1 (Dateideskriptor stdout)
mov ecx, userMsg (Zeiger auf String)
mov edx, lenUserMsg (Länge)
int 80h (Trap auslösen)
Aufgabe 13: Warum sollte man höhere APIs (z.B. glibc) anstelle von direkten System-Calls verwenden?
Höhere APIs bieten Zusatzfunktionen im User-Mode (z.B. atexit-Handler), die bei direkten System-Calls fehlen. Zudem ist der Code portabler.
Aufgabe 14: Welche Relevanz haben System-Calls im Bereich IT-Security?
- Mustererkennung für Malware (Reihenfolge/Häufigkeit von Calls).
- Exploits nutzen oft direkten Assembly-Code für System-Calls.