3. ram als rechnermodell - swl.htwsaar.de · 2 motivation § wir möchten...
TRANSCRIPT
2
Motivation§ Wir möchten Berechnungsvorschriften (Algorithmen)
formal beschreiben und deren Eigenschaften wieKorrektheit und Laufzeit analysieren
§ Rechnermodell abstrahiert vom verwendeten Rechner(z.B. Desktop-PC vs. leistungsstarker Server) unddessen spezifischer Konfiguration(z.B. verfügbarer Speicher)
Informatik 1 / Kapitel 3: RAM als Rechnermodell
3
Inhalt§ 3.1 RAM als Rechnermodell
§ 3.2 Korrektheit von Programmen
§ 3.3 Laufzeit von Programmen
Informatik 1 / Kapitel 3: RAM als Rechnermodell
4
3.1 RAM als Rechnermodell§ Random Access Machine (RAM) kann wahlfrei auf
beliebige Stellen ihres Speichers zugreifen
§ RAM kennt nur wenige Befehle, kann aber alles berechnen, was berechenbar ist(vgl. Theoretische Informatik)
§ Andere Rechnermodelle (z.B. Turing-Maschine) hingegenkönnen nur sequenziell auf ihren Speicher zugreifen(vgl. Theoretische Informatik)
Informatik 1 / Kapitel 3: RAM als Rechnermodell
5
RAM als Rechnermodell
Random Access Machine
Akkumulator a
IP
Programmspeicher
p[0]
i1
i2
p[1]
p[n]
…
Datenspeicher
s[0]
s[1]
…endlich viele
Speicherstellenunendlich vieleSpeicherstellen
Informatik 1 / Kapitel 3: RAM als Rechnermodell
6
Bestandteile der RAM§ Programmspeicher (p[0],…,p[n]) ist ein endlich
großer Speicher für Programmanweisungen
§ Datenspeicher (Eingabe und Ausgabe) (s[0],s[1]…)ist ein potenziell unendlich großer Speicher für Daten(z.B. ganze Zahlen)
§ Akkumulator (Akku) a ist eineRechenregister(+, -, *, /, div, mod)
Random Access Machine
Akkumulator a
IP
Programmspeicher
p[0]
i1
i2
p[1]
p[n]
…
Datenspeicher
s[0]
s[1]
…
Informatik 1 / Kapitel 3: RAM als Rechnermodell
7
Bestandteile der RAM§ Instruction Pointer IP enthält die Nummer der
Programmspeicherstelle, die als nächstesausgeführt wird
§ Indexregister i1 und i2 sind Hilfsregister z.B. zum Zugriffauf den Datenspeicher (z.B. s[i1]), enthalten ganze Zahlen und können nur zählen (+1 und -1)
Random Access Machine
Akkumulator a
IP
Programmspeicher
p[0]
i1
i2
p[1]
p[n]
…
Datenspeicher
s[0]
s[1]
…
Informatik 1 / Kapitel 3: RAM als Rechnermodell
8
Befehlssatz der RAM§ Transportbefehle z.B.
§ a ← s[0] transportiert den Inhalt der Speicherstelle s[0] in den Akkumulator
§ i1 ← 1 weist dem Indexregister i1 den Wert 1 zu
Informatik 1 / Kapitel 3: RAM als Rechnermodell
9
Befehlssatz der RAM§ Sprungbefehle z.B.
§ jump 2 führt als nächstes die Anweisung in p[2] aus
§ if a >= 0 then jump 2 führt als nächstes dieAnweisung in p[2] aus,wenn der Wert im Akkumulator größer gleich 0ist, ansonsten die nächsteAnweisung
Informatik 1 / Kapitel 3: RAM als Rechnermodell
10
Befehlssatz der RAM§ Arithmetikbefehle (nur für den Akkumulator a) z.B.
§ a ← a*2 verdoppelt den Wert des Akkumulators
§ a ← a*s[2] multipliziert den Wert des Akkumulatorsmit dem Wert in der Speicherstelle s[2]
§ a ← a mod 2 setzt den Akkumulator auf den ganzzahligenRest der Division seines Werts durch Zwei
Informatik 1 / Kapitel 3: RAM als Rechnermodell
11
Befehlssatz der RAM§ Indexbefehle z.B.
§ i1 ← i1+1 erhöht den Wert des Indexregisters i1
§ i1 ← i1-1 vermindert den Wert des Indexregisters i1
§ Eingabe und Ausgabe
§ INPUT n..m legt fest, dass die Eingabe in den Speicherstellen s[n]..s[m] steht
§ OUTPUT n..m legt fest, dass die Ausgabe in den Speicherstellen s[n]..s[m] steht
§ HALT markiert das Ende eines Programms
Informatik 1 / Kapitel 3: RAM als Rechnermodell
12
Befehlssatz der RAM§ Kommentare zur besseren Lesbarkeit von Programmen
§ // erhöhe den Wert des Indexregisters
Informatik 1 / Kapitel 3: RAM als Rechnermodell
13
Befehlssatz und Emulator§ Eine Übersicht aller Befehle der RAM findet sich unter:
http://isl-www.htwsaar.de/.../16_ws_i1/ram.pdf
§ RAMSES-Emulatorhttp://isl-s-03.htwsaar.de/ramses/
Informatik 1 / Kapitel 3: RAM als Rechnermodell
14
Addieren zweier Zahlen x und y§ Unser erstes RAM-Programm addiert zwei Zahlen x und y
(in s[0] und s[1]) und legt das Ergebnis in s[2] ab
INPUT 0..1
OUTPUT 20: a <- s[0]
1: a <- a + s[1]2: s[2] <- a
3: HALT
Informatik 1 / Kapitel 3: RAM als Rechnermodell
15
Addieren zweier Zahlen x und y§ Ablauf eines Programms lässt sich in Tabelle darstellen
§ jede Zeile gibt den Inhalt des Speichers und der Registernach Abarbeitung der Anweisung P[IP] an
§ undefinierte Werte werden als undef markiert
§ vorm Start des Programms hat der Instruction Pointerden Wert INIT
§ wird kein Sprungbefehl abgearbeitet, so erhöht sich der Wert des Instruction Pointers um 1, d.h. es wird der nächste Befehl im Programm abgearbeitet
Informatik 1 / Kapitel 3: RAM als Rechnermodell
16
Addieren zweier Zahlen x und y
IP a s[0] s[1] s[2]
INIT undef x y undef0 x x y undef1 x+ y x y undef2 x+ y x y x+ y
INPUT 0..1OUTPUT 2
0: a <- s[0]1: a <- a + s[1]
2: s[2] <- a3: HALT
Informatik 1 / Kapitel 3: RAM als Rechnermodell
17
Addieren zweier Zahlen x und y§ Laufzeit eines Programms messen wir als die Zahl der
abgearbeiteten Anweisungen (Zeit T)
§ Beispielprogramm hat konstante Laufzeit T = 3,die nicht von der Eingabe x und y abhängt
Informatik 1 / Kapitel 3: RAM als Rechnermodell
18
Berechnen von x2 + 3§ Wir schreiben nun ein RAM-Programm, welches die
Eingabe x in s[0] erwartet, den Wert x2 + 3 berechnetund diesen als Ausgabe in s[1] ablegt
Informatik 1 / Kapitel 3: RAM als Rechnermodell
20
Ganzzahlige Teilbarkeit durch 2§ Wir wollen feststellen, ob eine in s[0] als Eingabe
gegebene Zahl n ganzzahlig durch 2 teilbar ist;ist dies der Fall soll 0 in s[1], andernfalls 1 als Ausgabe zurückgegeben werden
Informatik 1 / Kapitel 3: RAM als Rechnermodell
22
Berechnen von Zweierpotenzen§ Wir schreiben nun ein Programm zum Berechnen von
Zweierpotenzen der Form 2n
§ Eingabe n in s[0]§ Ausgabe von 2n in s[1]
§ Beobachte hierzu, dass gilt
d.h. um 2n zu berechnen, müssen wir die Zahl 1n-mal mit 2 multiplizieren
Informatik 1 / Kapitel 3: RAM als Rechnermodell
20 = 1, 21 = 2 · 1, 22 = 2 · 2 · 1, . . .
23
Berechnen von Zweierpotenzen§ Unser Programm geht wie folgt vor:
§ speichere die Zahl n im Indexregister i1§ speichere die Zahl 1 im Akkumulator a§ solange der Wert in i1 nicht 0 ist, multipliziere a mit 2
und reduziere den Wert in i1 um 1
Informatik 1 / Kapitel 3: RAM als Rechnermodell
24
Berechnen von Zweierpotenzen
Informatik 1 / Kapitel 3: RAM als Rechnermodell
INPUT 0
OUTPUT 10: a <- 1
1: i1 <- s[0]2: if i1 = 0 then jump 6
3: a <- a*24: i1 <- i1 - 1
5: jump 26: s[1] <- a
7: HALT
25
Berechnen von Zweierpotenzen§ Ablauf des Programms
für Eingabe n = 3
§ Kompaktere Notationerfasst nur geänderteWerte in der Tabelle
Informatik 1 / Kapitel 3: RAM als Rechnermodell
IP a i1 s[0] s[1]
INIT undef undef 3 undef0 11 323 24 2523 44 1523 84 0526 8
26
Berechnen von Zweierpotenzen§ Für n = 3 beträgt die Laufzeit des Programms T(3) = 16
§ Offenbar wächst die Laufzeit T(n) mit dem Wert n, da die Anweisungen 2-5 immer häufiger durchlaufen werden
§ Wir werden später sehen, wie man die Laufzeit T(n) für eine beliebige Eingabe n ermitteln kann
Informatik 1 / Kapitel 3: RAM als Rechnermodell
27
Ermitteln der Stellenanzahl einer Zahl§ Wir schreiben nun ein RAM-Programm, welches für eine
in s[0] gegebene Zahl n die Anzahl ihrer Stellen in Binärdarstellung als Ausgabe in s[1]zurückgibt
§ Beispiel: Für n = 13 soll 4 zurückgegeben werden, da
Informatik 1 / Kapitel 3: RAM als Rechnermodell
(13)10 = (1101)2
30
Zusammenfassung§ Random Access Machine (RAM) als Rechnermodell
kann wahlfrei auf ihren Speicher zugreifen
§ Befehlssatz der RAM besteht aus u.a. Transportbefehlen,Sprungbefehlen, Arithmetikbefehlen und Indexbefehlen
§ Ablauf eines Programms kann in einer Tabelle, welche dieÄnderung des Register- und Speicherinhalts erfasst,dargestellt und analysiert werden
§ Laufzeit eines Programms für eine bestimmte Eingabeentspricht der Zahl der abgearbeiteten Befehle
Informatik 1 / Kapitel 3: RAM als Rechnermodell