Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » vm-2019-04-03
Athmosphäre in der Prüfung war sehr entspannt. Der Herr Sieh ist ein sehr ruhiger und freundlicher Prüfer. Die Fragen sind im Folgenden nicht (immer) chronologisch geordnet, evtl auch nicht vollständig.
Überblick über Virtualisierungsmethoden behandelt in der Vorlesung.
Was ist die allgemeingültigste virtualisierungsmethode ? → Emulation
Warum macht man das dann nicht immer? → langsam
Warum langsam? Wie funktioniert denn Emulation? Schleife, Kompontenten Step funktionen, Komponten an Bussen; Speichern der Callbacks bzw Pointer in der CPU Hier auch abgefragt: Die 3 Möglichkeiten, Graphik zu emulieren (callback, Treiber, Speicher)
Wie kann man Emulation verschnellern? → Jit
Wie funktioniert ein JIT? WIe geht man vor wenn man den baut? (Microinstruktionen, etc..) In dem Zusammenhang hat er auch gefragt was Basicblöcke sind und warum man die nicht beliebig lang machen kann, bzw warum Rücksprünge innerhalb eines Basic Blockes eine schelchte Idee sind. Und wie man die Blockgröße noch wählen kann (maximal pagesize src code, sonst mehr als 2 pages zum invalidieren bei intel, etc)
Warum ist der Jit denn schneller als einfach Emulation? Optimierungen, etc
Wie ist das so mit der Verkettung von Basic Blöcken bzw wie wann und wieso muss man die wieder rückgängig machen? → …, 2 Möglichkeiten: counter, signale
Wie funktioniert das mit Code-Invalidieren? TLB slow vs fast Case, extra TLB für schreiben (sonst braucht man die Zugriffsüberprüfung auch fürs Lesen)
Was macht die JVM geeignet zur Emulation? → wenig Exceptions, Flags nur nach bestimmten Instruktionen, Interrupts multithreaded abgehandelt, … Hier hat er auch gefragt, wie das so mit den Exceptions funktioniert. Er wollte (glaub ich) hören, dass man da keine Abfrage nach kritischen Instruktionen braucht; Beispielsweise löst eine Nullptr-Exception einen Trap aus, der an das echte BS geht, das schickt der JVM ein SIgnal und der Signal-Handler springt dann zum entsprechenden Catch-Block.
Irgendwann kam auch eine Frage die hierauf abzielte: Nachteil JVM: viele Mem Zugriffe → übersetzen in microinstruktionen und dann optimieren indem man zum beispiel store(tmp1, reg1); tmp1 = load(reg1); das load weglässt wenn das hintereinander kommt;
Letzte Frage: wie funktioniert das ganz grob mit bib-basierter Virtualisierung?
Manche Fragen sind oberflächlich gewesen, aber die meisten gingen tatsächlich sehr ins Detail. Man sollte auf jeden Fall auf Verständnis lernen, so ein paar Fakten hinbratzen reicht tatsächlich überhaupt nicht wenn man eine gute Note will. Ich kann empfehlen die Vorlesungsaufzeichnungen von 2015 anzusehen und die Folien anhand dessen zu ergänzen.