Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Prüfungsprotokoll   (Übersicht)

Prüfungsprotokoll

Prüfer: Marius Kamp

Bemerkungen: Sehr faire Prüfung, wirklich angenehme Atmosphäre, der Einstieg über die Übung hilft beim reinkommen. Stellenweise war ich glaube ich etwas zu schnell (zu viel Inhalt in zu kurzer Zeit), wir waren wohl wirklich flott durch die angedachten Themen durch.

Ergebnis: Sehr gut

Praktikum

Was haben wir gemacht?

Tvm, virtuelle maschine,…

Loader:

Was tut der, wofür… Welche Strukturen haben wir da so?

Interpreter:

  • Einfach
  • Indirekt durchgefädelt (warum besser?)
  • Vorübersetzt (warum besser?)

Jit:

Was macht jit1: instruktionsweise Assembler emittieren

Jetzt wollen wir das aber inkrementell (und just in time) machen? Worauf müssen wir achten? ??? (Wollten auf Trampolin raus, hab dann nach dem Hinweis erklärt, was das Trampolin so tut)

Wie kann man das Trampolin optimieren:

  1. Einbetten
  2. Durchgefädelte Interpretation. Bspw. bc_proc und bc_func in globale Variablen legen, damit sie nicht als Parameter den direkten Funktionsaufruf stören und dann ein globales Feld für die anzuspringenden „Native-code Adressen“ haben. Dort dann zunächst Trampolin hinterlegen, nach jitten dann die native Adresse…

Registervergabe was haben wir wie gemacht?

  • Linearer Scan mit SCCs erklärt

Inlining:

  • Auf welcher Ebene? → Bytecode weil dieser schon von Variablennamen abstrahiert, aber noch keine Hw-spezifika (Prologe, Registervergabe o.Ä.) vorhanden sind
  • Worauf müssen wir aufpassen? → Rekursion, Kreuzrekursion (gabs bei E ja nicht)…
  • Was müssen wir patchen?
    • Im Aufrufer: Sprünge, Argumentenübergabe
    • Im aufgerufenen: Sprünge, Variablenoffsets, Returns

Vorlesung

Exceptions:

  • Welche Varianten gibt es + kurze Erklärung
    • stack cutting
    • stack unwinding
  • Vor- und Nachteile:
    • Vor allem Laufzeit spricht für unwinding (außer pathologische Fälle)
    • Unwinding: Effizientes Handling von Automatics möglich (nicht in Folien gezeigt)

Was müssen wir beachten, wenn wir Ausnahmen in der Sprache haben? Ausnahmetreue, etc.

Garbage Collection:

  • Wie funktioniert mark & sweep?
  • Dabei: Was sind Wurzeln/die Wurzelmenge
  • Ok, jetzt haben wir D. D ist wie C++ nur mit kaputterer Syntax und mit Garbage Collector. Was würdest du tun um den GC kaputt zu machen? → Adressen in files, nach Integer casten,…

Prolog:

Gegeben ist folgendes Programm:

p(a, c).
p(b, c).

und die folgende Anfrage:

p(b, X)

Wie würde der M.A.U.S interpreter das Programm ausführen?

initial:

p(b, X), << ("X", X)

<HTML><ol style=„list-style-type: decimal;“></HTML> <HTML><li></HTML><HTML><p></HTML>Attach<HTML></p></HTML>

[p(a,c) ?= p(b, X)], << ("X", X)
[p(b,c) ?= p(b, X)], << ("X", X)

<HTML></li></HTML> <HTML><li></HTML><HTML><p></HTML>Unify schlägt fehl, zeile abräumen<HTML></p></HTML>

[p(b,c) ?= p(b, X)], << ("X", X)

<HTML></li></HTML> <HTML><li></HTML><HTML><p></HTML>Unify erfolgreich<HTML></p></HTML>

[p(b,c) == p(b, X)], << ("X", c)

<HTML></li></HTML> <HTML><li></HTML><HTML><p></HTML>Match<HTML></p></HTML>

<< ("X", c)

<HTML></li></HTML> <HTML><li></HTML><HTML><p></HTML>Succeed<HTML></p></HTML>

Ausgabe: X = c

<HTML></li></HTML><HTML></ol></HTML>

Dynamic Libraries

Wie funktionieren dynamische Bibliotheken? (PIC, GOT, PLT, was macht der Linker wann…)