Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Ausgewählte Kapitel aus dem Übersetzerbau

Ausgewählte Kapitel aus dem Übersetzerbau

Allgemein

Angenehme Atmosphäre. Wie üblich stehen Papier und Stift bereit. Erster Teil der Prüfung geht über das Praktikum. Es gefühlt so lange nach weiteren Möglichkeiten gefragt, bis man nichts mehr weiß.

Prüfungsverlauf

F: Was haben wir im Praktikum gemacht?

  • Interpreter und JIT für Bytecode gebaut

F: Warum Bytecode?

  • CISC-Maschinencode nicht gleich lang, je nachdem wo angesprungen unterschiedliche Instruktion

F: Wie funktioniert ein Interpreter?

  • switch/case über Opcodes
  • Ausführung des Befehls in Funktion
  • Rücksprung
  • Erneute Ausführung

F: Wie kann man es besser machen?

  • Indirekt durchgefädelte Interpretation
  • Instruktionsroutinen springen nicht zurück, sondern springen nächste Instruktion direkt an

F: Noch bessere Variante?

  • Direkt durchgefädelte/vorübersetzte Interpretation
  • Vorübersetzungsschritt erzeugt Array mit Funktionspointern, die hintereinander ausgeführt werden und die Instruktionsroutinen anspringen
  • Anmerkung: Gibt noch eine (nicht in der Vorlesung besprochene Variante), bei der der Code zum Aufruf der Funktionen direkt als Maschinencode in der Tabelle steht (vergleiche auch PLT)

F: Was macht JIT1?

  • Einfachen Maschinencode erzeugen (keine Optimierungen)
  • Trampolinfunktion

F: Was braucht die Trampolinfunktion alles?

  • Ist aufgerufene Funktion schon kompiliert? Soll sie interpretiert werden?
  • Aufruf der Funktion mit richtigen Parametern
  • Rückgabe des von der aufgerufenen Funktion zurückgegebenen Returnwertes

F: Was macht JIT2?

  • Registervergabe (aber nicht nach Graphfärben, um Zeit zu sparen)
  • Linear Scan
    • Lebendigkeitsintervalle auf ZHKs aufbauen
    • ZHKs sind topologisch sortiert
    • Registervergabe wie in VL
    • Heuristiken zum Spillen

F: Verbesserungen?

  • Lebensspannen aufteilen, falls Löcher
  • U.U. mehr freie Register

F: Verbesserungen?

  • Bin-Packing an einer Zeichnung erklärt

F: Was macht JIT3?

  • Inlining
  • Welche Jumps wie anzupassen sind (vor geinlinter, in geinlinter, nach geinlinter Funktion, returns, calls, Offsets)

F: Linker & Loader: Was macht ein einfacher Linker?

  • Relokation
  • Compiler produziert Assembler mit „Verweisen“
  • Assembler produziert Maschinencode mit Dummyverweisen (0x0) und Relokationstabelle
  • Linker schreibt korrekte Adressen hinein

F: Welche Teile hat eine Objektdatei (Eingabe des Linkers)?

  • Symboltabelle
  • Text
  • Daten
  • Debuggininformationen
  • Relokationstabelle

F: Warum extra Datensegment?

  • Will man nicht ausführen können
  • Hilfreich für dynamische Bibliotheken
  • noch gezeigt, wie mehrere Objectfiles gelinkt werden

F: Gemeine Frage: Was ist ein Modell, was ein Metamodell

  • Domäne: Problembereich (Menge aller C Programme)
  • Modell: formale Beschreibung einer Probleminstanz (C Programm)
  • Metamodell: formale Beschreibung des Problembereiches (C Spezifikation)

F: Speicherverwaltung: Was machen malloc und free?

  • Freispeicherliste auf Heap (Heap mit mmap/brk)
  • Unterschiedliche Sortiervarianten (nicht sortiert, nach Adresse, nach Größe, …)

F Warum muss man zum Mergen benachbarter Freispeicherelemente nicht unbedingt nach Adresse sortieren?

  • Größe und Tag an beiden Seiten des Freispeicherbereiches

F: Was kann man noch machen?

  • ???
  • Mehrere Listen für unterschiedliche Größen