**Prüfer:** Wosch\\ **Beisitzer:** Andreas\\ **ECTS:** 7,5 Die Atmosphäre war entspannt und Wosch hat selbst viel erklärt. Skizzieren musste ich nichts. ====== Verlauf ====== **P: In Stubsmi wurden (im Hinblick auf Adressraumtrennung) als allererstes Systemcalls eingebaut, warum?**\\ S: Privilegientrennung -> privilegierte Befehle nur von Kernel ausführbar machen. Z.B. Adressraumwechsel. **P: Ihr habt Syscalls auf zwei Arten implementiert, eine langsame und eine schnelle. Welche waren das?**\\ S: Langsam: Interrupts/Traps. Schnell: Spezialbefehle sysenter/sysexit **P: Was war da der Unterschied?**\\ S: Spezialbefehle sichern keinen Kontext. **P: Wie können bei Syscalls die Parameter übergeben werdem?**\\ S: Über Register, über Stack (Primitivbefehle) und im Befehlstrom kodiert (Komplexbefehl). Betriebsystem entscheidet über Registerreihenfolge **P: Warum werden im Dispatcher (bei Parametern in Registern) alle Register gespeichert, auch wenn sie keine Parameter enthalten?**\\ S: Um Kerneldaten nicht in den Userspace zu leaken. **P: Braucht man das auch bei Parameterübergabe aufm Stack? Bzw welche Vorteile gibt es hier? **\\ S: (hier hab ich etwas gebraucht bis ich darauf gekommen bin) Speicherzugriff, nurnoch ein Register notwendig für SYSNUM. Man spart Kopiervorgänge, theoretisch beliebig viele Parameter möglich (nicht durch Registeranzahl begrenzt). **P: Warum macht man das eig nicht öfter? Immerhin wollten Betriebsystementwickler ja auch sysenter/sysexit weil es schneller ist?**\\ S: Man muss bei komplett privaten Adressräumen den Stack im Kernel mappen -> kostet auch Zeit. **P: Wie sieht so ein Komplexbefehl aus?**\\ S: Befehlsatzebene: Opcode + Argumente -> Im Endeffekt wie ein normaler Befehl auch, muss aber von CPU unterstützt werden. **P: Welche Vor-/Nachteile haben den Komplexbefehle bzw. Primitivbefehle?**\\ S: Komplexbefehle brauchen keine Register/keinen Stack zur Parameterübergabe. **P: Was ist denn der Unterschied zwischen partiell und vollständig privaten Adressräumen?**\\ S: Kernel im Userspace gemappt. Jedoch nur zugreifbar von Kernel (Ring 0). (mehr wollte er hier nicht) **P: Wo stehen diese Unterschiede?**\\ S: Im Seitendeskriptor wenn man Paging verwendet. **P: Ok gut, aber braucht man das überhaupt? Also geht das nicht auch ohne dem "privilege"-Eintrag im Seitendeskriptor?**\\ S: (wurde hier etwas verwirrt weil er sich selbst auch verwirrt hat, aber im Endeffekt wollte er folgendes:) Ja, ohne kann man nämlich nicht zwischen Kernel- und Userspaceadressbereichen unterscheiden und unsere Privilegientrennung ist nutzlos. **P: Was will man denn tun wenn man Syscalls bekommt die einen Pointer enthalten? Z.B. bei read/write**\\ S: Man muss überprüfen, ob der Pointer auf den Userspace zeigt. **P: Warum? Ist das sonst iwie kritisch? Was würde passieren, wenn man das nicht tut?**\\ S: Bei read: Man könnte eine Kerneladresse übergeben und hier das System die Pagetables gezielt kaputtschreiben lassen -> Zugriff auf alles.\\ Bei write: Man könnte Daten aus dem Kernel extrahieren. **P: Es gibt auch noch Einadressraumsysteme. Was benötigen die? Wieso geht das mit mpstubs aus BS nicht?**\\ S: mpstubs: 32bit-System -> Adressraum ist deutlich zu klein. Man benötigt ein ausreichend großen Adressraum (min. 64bit!), zufällige Verteilung von Speicher. **P: Was bringt das dann?**\\ S: Anwendungen finden sich gegenseitig nur sehr unwahrscheinlich. Security by Obscurity. Adressraum durchsuchen dauert zu lange! **P: Braucht man für die Absicherung sonst noch was?**\\ S: Hab erstmal was von MMU gesagt, da meinte er aber die braucht man sowieso (man hat ja weniger Speicher als der Adressraum groß ist). Hab dann Capabilities/Befähigungen genannt. Beispiel: Adresse weitergeben. Es wurde teilweise noch etwas mehr gefragt, aber ich kann mich leider nicht mehr daran erinnern. Note war sehr gut.