Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » ueb1-vm-2011_3
Pruefer: Michael Philippsen, Volkmar Sieh
Themengebiete: Uebersetzerbau 1, Virtuelle Maschinen
Uebersetzerbau 1:
- Bootstrapping:
- „Nehmen Sie mal Ihre Lieblingssprache und schreiben sie einen Compiler dafür“
- Habe C++ genommen (Nein, nicht meine Lieblingssprache! Aber ich dachte halt an das einfachere Subset…) und wollte als Subset C nehmen. Ihm war C aber immernoch zu groß und wollte genau wissen, was man alles weglassen sollte und ob man den Compiler dann wirklich noch in Maschinensprache schreiben wuerde.
- Semantische Analyse
- gegebener Code: int c = true + 6;
- Deklariertheitseigenschaft, Typpruefung
- AST dafuer malen, da bin ich ueber die Deklaration gestrauchelt
- Visitor-Pattern erklaeren
- Zusatzfrage: muss man das Double-Dispatch in allen Sprachen machen oder liegt das nur an Java?
- in dem Kontext auch Methodenauswahl kurz angeschnitten, z.B. a.foo()
Virtuelle Maschinen:
- Was muss man denn alles so machen, wenn man einen kompletten PC emulieren will?
(einzelne Komponenten emulieren, usw.) - Speicherzugriffe
(MMU emulieren, evtl. direkten Zugriff erlauben, nur bestimmte Seiten mappen) - Wie funktionieren I/O-Zugriffe?
- Wie sind die Komponenten denn verbunden?
(Busse)- Wie macht man das effizient (Tabelle mit Mapping von Adressen zu Devices anlegen)
- Wann fuellt man das aus?
(Da wollte er hoeren, dass man das inkrementell zur Laufzeit machen kann, waehrend ich irgendwie an der Konfiguration festgehalten hatte)
- JIT erklaeren
- Wie kann man das machen, wenn man nur ein Software-Programm emulieren moechte?
(JIT-freundliche Hardware, was kann man alles weglassen, usw.) - [Die letzte Frage war dann so ein bisschen ein Mix aus Uebersetzerbau und VM:] Wie ist das denn bei der JVM, kann man den Bytecode so einfach auf x86 ausfuehren?
(Kellermaschine vs. Registermaschine, Umwandlung noetig, Stichworte Registerfärben und Lebendigkeit von Variablen)