TU Wien:Abstrakte Maschinen VO (Krall)/Fragestunde Zusammenfassung

Aus VoWi
Wechseln zu: Navigation, Suche

Low Level Zeug[Bearbeiten]

RISC vs. CISC, ISA vs Microarchitecture Instruction Level-Parallelism (Pipelining) branch prediction Inorder vs. Out of Order Was brauch ich für Out of Order Executions? Reservation Stations, Completion Queue, Register Renaming Was sind Presize Interrupts? Artikel PPC 4604

Threaded Codes (Kopien der Folien)[Bearbeiten]

Welche Arten? Subroutinge Threaded, Indirect Threaded, Token Threaded Unterschiede? Was ist schneller? Subroutine vs Direct Threaded ==> Das hängt davon ab CISC (Rücksprung am Stack) vs RISC (Rücksprung im Register) im allgemeinen Direct schnller

Forth ähnlichen Sprachen[Bearbeiten]

Interpretative Prozessor das ist eine Stack-Maschine, Grundlage für viel anderes Wie funktioniert das? andere (lesbare) Stack-Maschinen (PostScript <=> Stack Maschine Assembler) JVM => JASMIN

Pascal P4 Maschine[Bearbeiten]

Eine der 1. wirklichen Stackmaschinenen Zwischensprachen für Compiler-Interpreter-Systeme hats schon früher so was ähnliches gegeben Pascal P4 ist typischer Vertreter Wie schaut die Maschine aus? getypte Stackmaschine einen / zwei Rechenbefehle erklären (add, sub) wesentliche Register Program Counter Stackpointer Extreme Pointer 4 Instruktionen für den Unterprogrammaufruf Zuerst Stack Frame aufbauen, dann in die Prozedur hinein (enter),... wie schaut Stack Frame aus, Static Link, Dynamic Link

Java VM[Bearbeiten]

Java VM ist getypt, nicht vollständig getypt (swap, dup nicht getypt) spezifiziert die Basis Typen (Pointer, 64bit Int, Double, Long, ...) nicht definiert, wie der Activation Record aussieht (der Programmiererin überlassen) Argumente eines Methodenaufrufs sind die ersten lokalen Variablen (wo? was?) Refernzen und PC sind 32 bit, sind aber relativ einfach konvertierbar (Wenn Typen von Stack bekannt) es gibt .class Files, wichtig da drin ist der Constant Pool drin sind auch Attribute Code-Attribut ist wichtig, da steht der Byte Code drin 3- 4 Befehle sollten erklärbar sein

Wie funktioniert der CACAO-JIT? Einfache Übersetzung nicht hochoptimierter Maschinen-Code 4-Schritte: 1. Parsen 2. Stackanalyse (Befehle und Typen berechnen, wo liegen die Zwischenergebnisse) 3. Registerbelegung 4. Codeauswahl

Dalvik Folien selber runter laden (google it!, wenn nicht gefunden -> e-mail)

dot-Net[Bearbeiten]

unterschied Java VM <-> .Net VM dort gibts eine Unterscheidung managed / unmanaged unmanaged Teil ist unsicher, kann C und Pointer und alles Unterstützung für funktionale Programmierung (kommt aber schön langsam nach Java)

Baum-Maschinen[Bearbeiten]

Was ist ein abstrakter Syntaxbaum? Editoren auf Syntaxbäumen (etwas anders als Fullscreen-Editor) Tricks für effiziente Interpreter!! Impliziter / expliziter Stack iterativer Zeiger auf Vaterknoten (rekursion dann nicht mehr nötig) Cornell-Synthesizer hat den Syntaxbaum nicht als Pointer-Struktur sondern GOTOs (viele kleine Programmteile, durch GOTOs verbunden) PSG (Darmstädter ProgramGenerator) hat verschiedene Programmiersprachen für konkrete / abstrakte Syntax, statische / dynamische Semantik um Compiler und Interpreter zu beschreiben generiert Automatisch Editor / Interpreter

Dalvik VM[Bearbeiten]

was ist effizienter? Stack vs Registermaschine (gibt einen Artikel) Vor/Nachteile Stack/Registermaschine Stackmaschine werden dynamisch viele Instruktionen ausgeführt Bandbreite bei Registermaschine ist höher, da mehr Operanden(kodiert) Registermaschine ist im allgemeinen Effizienter Abstrakte-Maschine großteil der Zeit obstruct (?) & dispatch einfacher Switch-based Interpreter: größter Vorteil für Register Maschine, umso intelligenterer Interpreter desto weniger Vorteil für Register deswegen LUA und DALVIK VM Registermaschine nicht nur 8 oder 16 register, Dalvik hat 256 Davlik-VM schreibt .class Files um wie bei Archiv alles zusammengefasst (nicht nur Constant pool so groß) nach typen sortiert, damit fallen typ-tags weg

abstrakte Maschinen für logische Sprachen[Bearbeiten]

Unifikation in Einzelschritte zerlegen für diese gibt es einzelne Befehle in der maschine einfache gibts überall, unterscheidung void, global und lokale variablen einfach auftreten vs weiter auftreten clause und last-call optimierung Warren-Abstract Maschine (ungefähr klassische Registermaschine) hat Argumentregister, wie bei RegisterMaschine mit Argumenten und calls die Unifikation wird in Argumentregister, put-Befehle schreiben in Argumentregister, clause aufrufen, get-instruktionen führe unifikation durch 2 Arten von Stackframes Choice Points Deterministischen Nicht ganze Information darauf speichere Werte in Argumentregister Vorteile: einfache Last-Calloptimierung weil Werte schon in Argumentregistern stehen, brauch ich keinen neuen Call und PUT Stackframes müssen nicht hin und her kopiert werden Nachteil: Aufgeteilt in PUT-Teil und 2. Schritt im GET-Teil => Typ-Abfragen versucht die Vienna Abstract Maschine auszugleichen holt gleichzeitig einen Befehl für subgoal und head, führt vermanschten Befehl aus Es gibt mehre Varianten von Vienna Abstrackt Maschine (1p und 2p) 1P und 2P, 1 oder 2 Instruktionspointer 2p maschine funktioniert auf realer Hardware nicht für Compiler gibt es die 1P maschine / befehlskombination zur compile-zeit optimierung zur laufzeit zur compile zeit kann auch schon viel unnötiges entfernt Reference Chain -> impl VAM 1p zu impl.

SECD[Bearbeiten]

grundlagen, Lambda Kalkül nicht verlangt: Lambda-Ausdruck mit mehr als 3 Zeichen verstehen Norman-Order, Applikativ-Order Alpha, Beta, Etha Conversion SECD-Maschine, wofür stehen die Buchstaben (Register) Stack Environment Code Dump ist eine Stack Maschine alles als Liste implementiert Grundlage für viele LISP-ähnliche und funktionale Sprachen und Hardware if-then-else: continuation ist am dump (?)