Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » BST 2016-10-05
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Letzte ÜberarbeitungBeide Seiten, nächste Ü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 10:54] – Zwischenstand F30 | ||
---|---|---|---|
Zeile 9: | Zeile 9: | ||
===== Fragen ===== | ===== Fragen ===== | ||
+ | **F:** Systemaufrufe – was, warum, wie? | ||
+ | |||
+ | **A:** Privilegiertes Betriebssystem und unprivilegierte Anwendungen, | ||
+ | |||
+ | **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 `asmlinkage` – zumindest in den alten Kernel-Versionen, | ||
+ | |||
+ | **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:** 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 existiert er für sie auch nicht. Wenn bei einem Systemaufruf jetzt ein Zeiger übergeben wird, kann der Kernel den einfachen verwenden oder muss er noch irgendwas prüfen? | ||
+ | |||
+ | **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:** Über den entsprechenden Eintrag in der Page-Table, muss present und für User erlaubt sein. | ||
+ | |||
**F:** TODO | **F:** TODO | ||
- | **A:** TODO | ||
===== Bewertung ===== | ===== Bewertung ===== | ||
Zeile 16: | Zeile 107: | ||
===== 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? |