Praktische Einführung und Programmierung
Stefan Bosse
Universität Koblenz - FB Informatik
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle ::
ad-dpunkt 6.1
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Als erstes formales Modell betrachten wir die sogenannten Registermaschinen. Registermaschinen befinden sich von der Abstraktion nahe an tatsächlichen Computern und bilden daher quasi eine Art »idealisierte« Version eines Prozessors mit Maschinencode-Steuerung.
Eine Registermaschine als Prozessor führt ein Maschinenprogramm aus, das als durchnummerierte Liste von Einzelschritten vorliegt (dies entspricht tatsächlichen Maschinenprogrammen in Rechnern). Die einzige Kontrollstruktur neben der durch die Nummerierung impliziten Sequenz bilden (bedingte) Sprünge, die es erlauben, an einer beliebigen Stelle des Programms mit der Ausführung weiterzufahren.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Daten werden in einem direkt adressierbaren Speicher gehalten, der eine Abstraktion des bekannten Hauptspeichers darstellt.
Arithmetische Manipulationen werden ausschließlich im Akkumulatorregister des Prozessors ausgeführt.
Diese (maschinennahe) Präzisierung des Algorithmenbegriffs werden wir nun als Registermaschinen exakt definieren. Diese stellen eine relativ simple Abstraktion der programmierbaren Rechner dar, so dass wir in den Bezeichnungen auf vertraute Begriffe der technischen Informatik zurückgreifen.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Eine Registermaschine besteht aus den Registern
B, C0, C1, C2, …, Cn, …
und einem Programm.
Das Register B heißt Befehlszähler, C0 heißt Arbeitsregister oder Akkumulator und jedes der Register Cn, n ≥ 1 heißt Speicherregister.
Jedes Register enthält als Wert eine natürliche Zahl. Enthält das Register B die Zahl b und für n ≥ 0 das Register Cn die Zahl cn, so heißt das unendliche Tupel
(b, c0, c1, …, cn, …)
Konfiguration der Registermaschine.
Das Programm ist eine endliche Folge von Befehlen. Durch die Anwendung eines Befehls wird die Konfiguration der Registermaschine geändert.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Befehle bewirken eine Änderung einer Konfiguration (Zustandsänderung ↦ Imperative Algorithmen!)
(b, c0, c1, … cn, …)
in die neue Konfiguration
(b′, c′0, c′1, …, c′n, …),
geschrieben als
(b, c0, c1, … cn, …) ↦ (b′, c′0, c′1, …, c′n, …),
an.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Ein- und Ausgabebefehle einer Registermaschine
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Arithmetische Befehle von Registermaschinen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Sprung- und Stoppbefehle einer Registermaschine
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Architektur und Aufbau einer Registermaschine
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
LOAD 1 DIV 2 MULT 2 STORE 3 LOAD 1 SUB 3 STORE 3 END
Ein einfaches Maschinenprogramm für die Registermaschine - eine reine lineare Sequenz
Stehen in den Registern zuerst die Zahlen
b = 1, c0 = 0, c1 = 32, c2 = 5, c3 = 0,
so ergibt sich diese Folge von Konfigurationen
(1, 0, 32, 5, 0, …) ↦ (2, 32, 32, 5, 0, …) ↦ (3, 6, 32, 5, 0, …) ↦ (4, 30, 32, 5, 0, …) ↦ (5, 30, 32, 5, 30, …) ↦ (6, 32, 32, 5, 30, …) ↦ (7, 2, 32, 5, 30, …) ↦ (8, 2, 32, 5, 2, …),
womit der »stoppende« Befehl erreicht wird.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Sind die Inhalte der Register dagegen
b = 1, c0 = 0, c1 = 100, c2 = 20, c3 = 0,
so ergibt sich folgende Folge von Konfigurationen
(1, 0, 100, 20, 0, …) ↦ (2, 100, 100, 20, 0, …) ↦ (3, 5, 100, 20, 0, …) ↦ (4, 100, 100, 20, 0, …) ↦ (5, 100, 100, 20, 100, …) ↦ (6, 100, 100, 20, 100, …) ↦ (7, 0, 100, 20, 100, …) ↦ (8, 0, 100, 20, 0, …).
Allgemeiner lässt sich Folgendes feststellen. Wir betrachten eine Konfiguration, die durch
b = 1, c0 = 0, c1 = n, c2 = m, c3 = 0
gegeben ist, und nehmen an, dass n = q·m + r mit 0 ≤ r < m gilt, d.h., q = ⌊n/m⌋ ist das ganzzahlige Ergebnis der Division von n durch m und r ist der verbleibende Rest bei dieser Division.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
Dann ergibt sich immer die Folge
(1, 0, n, m, 0, …) ↦ (2, n, n, m, 0, …) ↦ (3, q, n, m, 0, …) ↦ (4, q · m, n, m, 0, …) ↦ (5, q · m, n, m, q · m, …) ↦ (6, n, n, m, q · m, …) ↦ (7, r, n, m, q · m, …) ↦ (8, r, n, m, r, …).
Diese Berechnungsfolge der Registermaschine M1 berechnet also den ganzzahligen Rest der Division zweier natürlicher Zahlen.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Registermaschine
1. CLOAD 12. STORE 33. LOAD 24. IF c0 = 0 GOTO 125. LOAD 36. MULT 17. STORE 38 .LOAD 29. CSUB 110 .STORE 211. GOTO 412. END
Mit Kontrollbefehlen und Verzweigung - jetzt werden die Adressen wichtig!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Stackmaschine
Bisher gabe es eine klassische von-Neumann Rechnerarchitektur bei der Registermaschine. Häufig werden aber Stackmaschinen als Virtuelle Maschinen verwendet.
Meistens gibt es keine reinen Stackmaschinen sondern eine Mischung aus einer Stack- und Registermaschinen.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Stackmaschine
Prinzipielle Architektur einer Stackmaschine mit einem Programmspeicher, Programmzähler PC und Stackzeiger SP
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Stackmaschine
Die Continuum VM ist ein Beispiel für eine Stackmaschine.
Continuum ist eine virtuelle JavaScript-Maschine, die in JavaScript implementiert ist.
Vorteil: Codeobjekte können eine portable Form serialisierbar sein, so dass Code einmal kompiliert und dann in dieser Form weiterverteilt und ausgeführt werden kann.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Stackmaschine
Das besondere von Continuum ist die enge Kopplung von Bytecode Instruktionen (die innerhalbe der VM ausgeführt werden) mit externen JavaScript Funktionen und Daten (z.B. Ein- und Ausgabe).
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Stackmaschine
Prinzipielle Architekturder Continuum VM
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Stackmaschine
ADD, AND, ARRAY, ARG, ARGS, ARGUMENTS, ARRAY_DONE, BINARY, BINDING, CALL, CASE, CLASS_DECL, CLASS_EXPR, COMPLETE, CONST, CONSTRUCT, DEBUGGER, DEFAULT, DEFINE, DUP, ELEMENT, ENUM, EXTENSIBLE, EVAL, FLIP, FUNCTION, GET, GET_GLOBAL, HAS_BINDING, HAS_GLOBAL, INC, INDEX, INTERNAL_MEMBER, ITERATE, JUMP, JEQ_NULL, JEQ_UNDEFINED, JFALSE, JLT, JLTE, JGT, JGTE, JNEQ_NULL, JNEQ_UNDEFINED, JTRUE, LET, LITERAL, LOG, LOOP, MEMBER, METHOD, MOVE, NATIVE_CALL, NATIVE_REF, OBJECT, OR, POP, POPN, PROPERTY, PROTO, PUT, PUT_GLOBAL, REF, REFSYMBOL,REGEXP, REST, RETURN, ROTATE, SAVE, SCOPE_CLONE, SCOPE_POP, SCOPE_PUSH, SPREAD, SPREAD_ARG, SPREAD_ARRAY, STRING, SUPER_ELEMENT, SUPER_MEMBER, SWAP, SYMBOL, TEMPLATE, THIS, THROW, TO_OBJECT, UNARY, UNDEFINED, UPDATE, VAR, WITH, YIELD
Der ISA Befehlsatz von Continuum: Doch schon umfangreicher als bei rein formalen Modellen und Maschinen!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Stackmaschine
ADD(context)───────────────────────────────────────────────────────────context.stack[context.sp - 1] += context.ops[context.ip][0]DUP(context)───────────────────────────────────────────────────────────context.stack[context.sp] = context.stack[context.sp++ - 1]LITERAL(context)───────────────────────────────────────────────────────────context.stack[context.sp++] = context.ops[context.ip][0]JUMP(context)───────────────────────────────────────────────────────────context.ip = context.ops[context.ip][0]JTRUE(context)───────────────────────────────────────────────────────────isTrue(context.stack[--context.sp])? context.ip = context.ops[context.ip][0]
Wirkung von einzelnen Bytecode Befehlen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Stackmaschine
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Abstrakte Maschine
TODO
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Markov Algorithmen
TODO
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Church’sche These
TODO
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Endliche Automaten
TODO
AuD DP 17.4.1/17.4.2
Stefan Bosse - Algorithmen und Datenstrukturen - Modul M Formale Algorithmenmodelle :: Endliche Automaten