Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » BST 2016-10-05 (Übersicht)
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
pruefungen:hauptstudium:ls4:bst-2016-10-05 [05.10.2016 09:57] – angelegt F30 | pruefungen:hauptstudium:ls4:bst-2016-10-05 [05.10.2016 12:43] (aktuell) – F30 | ||
---|---|---|---|
Zeile 9: | Zeile 9: | ||
===== Fragen ===== | ===== Fragen ===== | ||
- | **F: | + | **F: |
- | **A: | + | |
+ | **A: | ||
+ | |||
+ | **F:** Wie funktioniert das z.B. bei Linux genau? | ||
+ | |||
+ | **A:** Syscall-Stub als normale Bibliotheksfunktion, | ||
+ | |||
+ | **F:** (Malt Grafik mit zwei Seiten und Registerfile in der Mitte.) Wie werden denn hier die Parameter übergeben? | ||
+ | |||
+ | **A:** Anhand normaler Calling-Convention zum Stub, dieser legt sie in Register (wenn sie dort nicht eh schon liegen). | ||
+ | |||
+ | **F:** Was ist, wenn sie dem Stumpf eh schon in Registern übergeben werden? Müssen wir dann wirklich nichts tun? | ||
+ | |||
+ | **A:** Sie sollten schon auch in den richtigen Registern liegen, also wohl doch. | ||
+ | |||
+ | **F:** Wer legt die Register für Syscalls nämlich fest? | ||
+ | |||
+ | **A:** Das Betriebssystem. | ||
+ | |||
+ | **F:** Vor den Betriebssystemfunktionen steht ja häufig '' | ||
+ | |||
+ | **Beisitzer: | ||
+ | |||
+ | **F:** Jedenfalls, was tut das denn? | ||
+ | |||
+ | **A:** Ich schau mit den Teil auch nicht so oft an, aber es hat wohl was mit Registerübergabe zu tun. Also entweder über Register oder über den Stack, ansich ginge bei Assembler ja auch beides. | ||
+ | |||
+ | **F:** Ja, es werden dann alle Parameter über den Stack übergebn. Was gibt es denn noch für alternative Möglichkeiten für Syscalls? | ||
+ | |||
+ | **A:** Spezialbefehle, | ||
+ | |||
+ | **F:** Gut, da ist die Parameterübergabe ja genauso; muss ich auch irgendwie über Register machen. Ich mein jetzt im Bezug auf Parameterübergabe. | ||
+ | |||
+ | **A:** Indem das Betriebssystem sie vom User-Stack holt. | ||
+ | |||
+ | **F:** Gut, aber ich mein grundlegend für Syscalls. Bisher hatten wir ja den Primitivbefehl, | ||
+ | |||
+ | **A:** ... | ||
+ | |||
+ | **F:** Aha, Vorlesungsfolien wohl nicht gelesen. Was verarbeitet denn so ein Prozessor? | ||
+ | |||
+ | **A:** Doch, eigentlich schon; einen Befehlsstrom. | ||
+ | |||
+ | **F:** Aha. Und was können wir damit für Syscalls machen? | ||
+ | |||
+ | **A:** Spezialinstruktionen für einzelne Syscalls? | ||
+ | |||
+ | **F:** Nee, nicht in Hardware. Es geht bloß um die Parameter. | ||
+ | |||
+ | **A:** Ja, man kann sie im Befehlsstrom enkodieren. So langsam dämmert es. | ||
+ | |||
+ | **F:** Und welche Einschränkung hat man damit? | ||
+ | |||
+ | **A:** Müssen statisch sein und zur Compile-Zeit feststehen. | ||
+ | |||
+ | **F:** Genau. Nochmal zurück zum Primitivbefehl, | ||
+ | |||
+ | **A:** Durch die Anzahl der Register. | ||
+ | |||
+ | **F:** Und was machen wir, wenn wir mehr haben? | ||
+ | |||
+ | **A:** Geht halt nicht. | ||
+ | |||
+ | **F:** Bei Linux geht es aber ja doch! | ||
+ | |||
+ | **A:** Ja, dann müssen wir doch wieder den Stack zu Hilfe nehmen und das Betriebssystem muss auf den User-Stack zugreifen. | ||
+ | |||
+ | **F:** Ja, irgendwie anders jedenfalls. Jetzt müsste das Betriebssystem ja auf den Benutzer-Adressraum zugreifen, geht das denn so einfach? | ||
+ | |||
+ | **A:** Kommt drauf an, Exklusions-/ | ||
+ | |||
+ | **F:** Und andersherum? | ||
+ | |||
+ | **A:** Natürlich nicht, das wäre schlecht. | ||
+ | |||
+ | **F:** Und wie stellen wir das sicher? | ||
+ | |||
+ | **A:** Über entsprechende Einstellungen in der Page-Table mit Überprüfung durch die MMU. | ||
+ | |||
+ | **F:** Existiert der Kernel-Adressraum also für die Anwendungen? | ||
+ | |||
+ | **A:** Kann man unterschiedlich sehen, darauf zugreifen können sie zumindest nicht. | ||
+ | |||
+ | **F:** Ja, deshalb sage ich er existiert für sie auch nicht. Wir haben hier also einen Adressraum, der irgendwo geteilt ist (zeichnet ihn hin). | ||
+ | |||
+ | **A:** Ja, z.B. in der Mitte. Dann haben Kernel und Anwendungen jeweils nur noch halb so viel Platz. | ||
+ | |||
+ | **F:** Bei mir SP gehört? | ||
+ | |||
+ | **A:** Ja. | ||
+ | |||
+ | **F:** Welches klassische Adressraumkonzept aus SP haben wir hier? | ||
+ | |||
+ | **A:** ... | ||
+ | |||
+ | **F:** Ein Gatter/ | ||
+ | |||
+ | **A:** Er sollte prüfen, ob es sich wirklich um eine User-Adresse handelt. Sonst könnte die Anwendung eine Kernel-Adresse übergeben und den Kernel dazu bringen, in seinem eigenen Adressraum Dinge zu tun. | ||
+ | |||
+ | **F:** Genau, und wie überprüft man das? | ||
+ | |||
+ | **A:** Adresse sollte auf der richtigen Seite der Grenze liegen. | ||
+ | |||
+ | **F:** Es muss ja keine einzige Grenze geben, die Bereiche können auch feiner gestreut sein. Wie prüfen wir das dann? | ||
+ | |||
+ | **A:** Über den entsprechenden Eintrag in der Page-Table, muss present und für User erlaubt sein. | ||
+ | |||
+ | **F:** OK, was ist denn das Exklusionsmodell? | ||
+ | |||
+ | **A:** Betriebssystem kann nicht einfach auf User-Adressraum zugreifen, Spezialbefehle oder Fenster. | ||
+ | |||
+ | **F:** Fenster, was bedeutet das? | ||
+ | |||
+ | **A:** Teil eines Benutzer-Adressraums wird im Kernel eingeblendet, | ||
+ | |||
+ | **F:** Wie macht man das technisch? | ||
+ | |||
+ | **A:** Bei x86 gibt es da z.B. das Extra-Segment… | ||
+ | |||
+ | **F:** Na gut, etwas moderner vielleicht. Wie macht man es heutzutage? | ||
+ | |||
+ | **A:** User-Seite wird in Kernel-Page-Table gemapped. | ||
+ | |||
+ | **F:** Und wie finde ich diese Seite? | ||
+ | |||
+ | **A:** Über die User-Page-Table. | ||
+ | |||
+ | **F:** Das sind ja jetzt alles Mehradressraumsysteme. Was gibt es denn noch? | ||
+ | |||
+ | **A:** Einadressraumsysteme. | ||
+ | |||
+ | **F:** Wie funktionieren die? | ||
+ | |||
+ | **A:** Es gibt einen großen gemeinsamen Adressraum für alle Prozesse und das Betriebssystem mit Berechtigungen für die einzelnen Teile. | ||
+ | |||
+ | **F:** Wie funktioniert denn da die Isolation? | ||
+ | |||
+ | **A:** Capabilities geben vor, welcher Prozess auf welche Adressbereiche… | ||
+ | |||
+ | **F:** Capabilities kommen erst im zweiten Schritt, Isolation geht auch ohne sie. | ||
+ | |||
+ | **A:** ... | ||
+ | |||
+ | **F:** Wir brauchen etwas, das quasi jeder aktuelle Rechner hat. Man könnte Einadressraumsysteme also heute implementieren. | ||
+ | |||
+ | **A:** Eine MMU? | ||
+ | |||
+ | **F:** Nee, hier nicht. Wir groß muss denn der Adressraum sein? | ||
+ | |||
+ | **A:** So groß, dass alles rein passt. | ||
+ | |||
+ | **F:** Gut, aber 2³² ist schon ganz schön groß. Muss er trotzdem größer sein? | ||
+ | |||
+ | **A:** ... | ||
+ | |||
+ | **F:** Was könnte ein böser Prozess denn tun, um das System außer Kraft zu setzen? | ||
+ | |||
+ | **A:** Allen Speicher allokieren. | ||
+ | |||
+ | **F:** Genau, dann ist für das Betriebssystem auch nichts mehr übrig. Der Adressraum muss also möglichst groß sein – wie lang würde der Angriff mit 64 Bit dauern? | ||
+ | |||
+ | **A:** Lange. | ||
+ | |||
+ | **F:** Genau, 500 Jahre – so lang läuft mein Rechner nicht. Worauf muss ich denn achten, wenn ich in einem Einadressraumsystem speicher vergebe? | ||
+ | |||
+ | **A:** ... | ||
+ | |||
+ | **F:** Es soll ja niemand erraten könne, was wo liegt? Wie mach ich es also? | ||
+ | |||
+ | **A:** Zufällig. | ||
+ | |||
+ | **F:** Genau, und die Capabilties kommen erst im Schritt danach für Lesen/ | ||
+ | |||
+ | **A:** Ist ein Passwort. Wenn der Prozess die Rechte bei der Weitergabe einschränken möchte, ist es natürlich komplizierter. | ||
+ | |||
+ | **F:** Das Stichwort Passwort reicht mir schon. | ||
===== Bewertung ===== | ===== Bewertung ===== | ||
Zeile 16: | Zeile 192: | ||
===== Vorbereitung ===== | ===== Vorbereitung ===== | ||
- | wosch erwähnt in der ersten Vorlesung, dass man sich lieber auf die Übung konzentrieren solle, falls man nicht für Vorlesung und Übung Zeit hat. Hab ich nicht gemacht (war in Vorlesung und Übung), würde ich für die Prüfung | + | wosch erwähnt in der ersten Vorlesung, dass man sich lieber auf die Übung konzentrieren solle, falls man nicht für Vorlesung und Übung Zeit hat. Hab ich nicht gemacht (war in Vorlesung und Übung) |
Neben meiner Zusammenfassung der Vorlesungsfolien bin ich nochmal den Code aus der Übung durchgegangen und hab mir das Vorgehen an kritischen Stellen rausgeschrieben (für die aus BST bekannten „Wie habt ihr das denn gemacht? | Neben meiner Zusammenfassung der Vorlesungsfolien bin ich nochmal den Code aus der Übung durchgegangen und hab mir das Vorgehen an kritischen Stellen rausgeschrieben (für die aus BST bekannten „Wie habt ihr das denn gemacht? |