TU Wien:Abstrakte Maschinen VO (Krall)/Fragestunde 2014S Zusammenfassung
Zur Navigation springen
Zur Suche springen
Low Level Zeug[Bearbeiten | Quelltext 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 Precise Interrupts?
- Artikel PPC 4604
Threaded Codes (Kopien der Folien)[Bearbeiten | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext 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:
- Parsen
- Stackanalyse (Befehle und Typen berechnen, wo liegen die Zwischenergebnisse)
- Registerbelegung
- Codeauswahl
Dalvik Folien selber runter laden (google it!, wenn nicht gefunden -> e-mail)
- https://sites.google.com/site/io/dalvik-vm-in99ternals/
- bit.ly/1lAZNvw
- https://web.archive.org/web/20180730213612/https://de.slideshare.net/yeg239/android-internals-05-dalvik-vm-rev11
dot-Net[Bearbeiten | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext 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 (wird von JOIN dann verbraucht)