Sie befinden sich hier: Termine » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » vm-2020-02-12   (Übersicht)

Die Prüfungssituation war den Umständen entsprechend sehr angenehm. Prof. Sieh ist ein sehr ruhiger Prüfer, die Prüfungssituation ist daher eher wie ein Dialog. Wie zuvor angekündigt, fragt Prof. Sieh so lange weiter, bis man keine Antwort mehr parat hat. Davon darf man sich in der Situation nicht verunsichern lassen. Ich bin nach der Prüfung aus dem Raum gegangen und hatte das Gefühl die Hälfte der Fragen nicht beantworten zu können. Das Prüfungsergebnis lässt jedoch keinen Spielraum nach oben :) Nachfolgend findet ihr mein Gedächtnisprotokoll mit Stichpunkt artigen Fragen. Im Gegensatz zu den vorherigen Prüfungsprotokollen hielten wir uns eigentlich nur bei Interpreter/JIT auf und gingen hier auch auf Themen wie mehrfach assoziativer Speicher ein.

Interpreter, was ist langsam? Wie kann man das schneller machen?

–> Lazy flag (auch in Hinblick auf Exception)

Wie funktioniert das bei Emulation?

–> Operand merken und bei Exception flags berechnen

Was ist noch langsam?

–> Speicherzugriff (7 mal pro Instruktion, siehe Vorlesung)

Was passiert da und wie macht man das in der Simulation?

–> Hier habe ich alles aus der Vorlesung raus gehauen. Alignment-Check, Segmentation, Debug-Einheit, Level 1&2 Cache, MMU. Verbesserung: Arbeiten mit unserem Pseudo-TLB, einzelne Bits für checks. Aufteilung in mehrere TLBS (read, write, exec) usw.

Warum ist der virtualisierte Speicher nicht mehrfach assoziativ?

–> Die reale CPU besitzt einen mehrfach assoziativen Speicher. Das bedeutet, das auf einen TLB-Eintrag mehrere Pages gemappt werden. Wird ein TLB-Eintrag gehittet, schaut die CPU mehrere Pages parallel an, ob das die gewünschte Page ist. –> In der Virtualisierung macht das keinen Sinn, da wir das sequentiell machen müssten, das kostet Performance.

Du hast ja bereits den JIT erwähnt, warum ist der schneller als ein Interpreter?

–> Block-Reuse, anwendbare Optimierungen, Blockverkettung, Overhead-Minimierung (Strom, sleep, interrupt) usw.

Warum ist die maximale Block-Länge die page size?

–> CISC Instruktionen

Wann invalidieren wir kompilierte Blöcke?

–> Sobald wir self modifying code haben.

Wer macht denn sowas?

–> ein simulierter JIT, ein Kernel bei der Terminierung von Programmen

Zum Ende: Bibliotheksbasierte Virtualisierung. Was ist wichtig?

–> Gleiche Instruktionen, austauschbare Bibliotheken, OS Personalization falls nicht (siehe Vorlesung).

Jetzt ist ja nicht jede CPU gleich…

–> Es muss der verwendete Subset an CPU Instruktionen unterstützt werden, nicht komplett gleiche CPU sein.

Als Vorbereitung habe ich vor allem die vorherigen Prüfungsprotokolle herangezogen. Bis auf die Frage mit der Speicherassoziation kamen auch keine komplett neuen Fragen dran.