• Keine Ergebnisse gefunden

JensSmiatekundAxelArnold ComputergrundlagenTuringmaschinenundProgrammierung

N/A
N/A
Protected

Academic year: 2021

Aktie "JensSmiatekundAxelArnold ComputergrundlagenTuringmaschinenundProgrammierung"

Copied!
22
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

http://www .icp .uni-stuttgar t.de

Computergrundlagen

Turingmaschinen und Programmierung

Jens Smiatek und Axel Arnold

Institut für Computerphysik

Universität Stuttgart

Wintersemester 2016/17

(2)

http://www .icp .uni-stuttgar t.de

Was ist ein Computer?

Ein Computer (Rechner oder elektronische

Datenverarbeitungsanlage) ist ein Gerät, welches mittels programmierbarer Rechenvorschriften (Algorithmen) Daten verarbeitet.

Fragen:

• Was heisst programmierbar?

• Wie sehen Rechenvorschriften (Algorithmen) aus?

(3)

http://www .icp .uni-stuttgar t.de

Theoretische Informatik (Berechenbarkeit)

A. Turing, 1912 - 1954

Turingmaschine Zustand s

1 0 1 0 1 0 1 0

Arbeitsband (Speicher)

Aktuelle Schreib−/Leseposition p

• ca 1920, D. Hilbert: Was ist berechenbar, was beweisbar?

• 1931, K. Gödel: Entweder widerspruchsfrei oder vollständig!

• Nicht alles ist berechenbar!

• Wir können nicht mal bestimmen, was nicht beweisbar ist

(4)

http://www .icp .uni-stuttgar t.de

Implikationen

Entscheidungsproblem (David Hilbert):

Ist eine Formel allgemeingültig?

Ist jede Interpretation einer formal logischen Aussage wahr?

Turingmaschine (Alan Turing):

Definition des Algorithmus und der Berechenbarkeit als formale, mathematische

Begriffe

A. Turing: On computable numbers, with an application to the

Entscheidungsproblem. (1936)

(5)

http://www .icp .uni-stuttgar t.de

Turingmaschinen

Eine Turingmaschine ist definiert durch

• eine endliche Menge Γ, das Arbeitsalphabet, mit Leerzeichen t ∈ Γ

• eine endliche Menge Z von Zuständen der Maschine

• den Startzustand s ∈ Z und den Haltezustand h ∈ Z

• eine Überführungsfunktion δ : Z × Γ → Z × Γ × {←, ↓, →}

Eine Konfiguration ist

• eine Zeichenkette w über dem Arbeitsalphabet

• eine Position p in w , die aktuelle Arbeitsposition

• der aktuelle Zustand z der Turingmaschine

Eine Konfiguration (w, p, z) führt in eine andere (w

0

, p

0

, z

0

) über, wenn δ(z, w

p

) = (z

0

, w

p0

, d ), und d p nach p

0

versetzt.

Startkonfiguration: Eine Eingabe w, p am Anfang von w, Zustand s.

(6)

http://www .icp .uni-stuttgar t.de

Darstellung von Turingmaschinen Beispiel: Eine „1“ vorne einfügen

B

h A

s

t:1,→ 0:1,→

1:1,→

0:0,→

1:1,→ 1:0,→

0:1,→ t:0,→

t:1,→

A: „0“ gemerkt

B: „1“ gemerkt

s 0 A 1 →

s 1 B 1 →

s t h 1 →

A 0 A 0 →

A 1 B 0 →

A t h 0 →

B 0 A 1 →

B 1 B 1 →

B t h 1 →

Ablauf: Schreibe Zustand in das Arbeitsband vor die aktuelle Position, ` bezeichnet Übergang

s101 ` 1B01 ` 11A1 ` 110Bt ` 1101ht

(7)

http://www .icp .uni-stuttgar t.de

Turingmaschinen II

• Turingmaschinen können kombiniert werden Beispiel: Hinter jedem Zeichen eine 0 einfügen

• universelle Turingmaschine: eine Turingmaschine, die berechnet, was eine Turingmaschine tut

• Halteproblem: es gibt keine Turingmaschine, die entscheidet, ob eine gegebene Turingmaschine bei leerer Eingabe anhält

• Turingmaschinen und von Neumann-Computer sind äquivalent

• Church-Turing-These:

Turing-berechenbare Funktionen sind genau die von

Menschen intuitiv berechenbaren Funktionen

(8)

http://www .icp .uni-stuttgar t.de

Was sind Programme?

• In dieser Vorlesung: Python, C, L

A

TEX, bash

• Sind das alle Typen von Programmiersprachen?

Wie kann man Programmiersprachen klassifizieren?

• Kein Prozessor versteht Python-, C- oder Shell-Befehle

• Was muss alles passieren, um ein Programm laufen zu lassen?

Wie wird aus unserem Programm etwas, dass der

Prozessor ausführen kann?

(9)

http://www .icp .uni-stuttgar t.de

Kommunikation mit Computern

Kommunikation zwischen R2-D2 (Computer), C3-PO (Übersetzer) und Luke (Mensch?)

(10)

http://www .icp .uni-stuttgar t.de

Programmiersprachen Imperative Sprachen

Beispiele: Python, C, Shell, BASIC...

• Die meisten Sprachen sind imperativ

• Programme erklären, wie ein Problem gelöst werden soll

• Umsetzung des von Neumann-Rechners: Befehle und Schleifen

prozedural heißen Sprachen, die Prozeduren kennen Beispiele: alle außer einfachem BASIC

Deklarative Sprachen

• Keine von Neumann-artigen Befehle, kein innerer Zustand

• Rekursion anstatt Schleifen

funktional, basierend auf Funktion im mathematischen Sinn Beispiele: Haskell, Erlang, Scheme...

logisch, basierend auf Fakten, Axiomen und logischer Ableitung

Beispiele: Prolog

(11)

http://www .icp .uni-stuttgar t.de

Dozent -vorlesungen: Liste von Vorlesungen +halteVorlesung(vorlesung:Vorlesung) +haltePrüfung(vorlesung:Vorlesung): Note +getTitel(): String

Person +name: String +getName(): String +getTitel(): String

Student +kurs: Kurs

+vorlesungen: Liste von Vorlesungen +hoertVorlesung(vorlesung:Vorlesung) +machePrüfung(vorlesung:Vorlesung) +getTitel(): String

• Objektorientierung (OO) ist ein sprachunabhängiges Programmiermodell

• Ziel ist die bessere Wartbarkeit und Austauschbarkeit von Software durch starke Isolation von Teilproblemen

• Speziell darauf ausgelegt sind z.B. C++, Java, Python,...

• UML (Unified Modelling Language) beschreibt OO-Modelle

(12)

http://www .icp .uni-stuttgar t.de

Terminologie

Klasse: beschreibt Eigenschaften und Methoden von Objekten Beispiel: Klassen sind z.B. Dozent, Student, Person

Objekt: eine Instanz einer Klasse. Ein Objekt hat stets eine Klasse, aber es kann viele Instanzen geben

Beispiel: Maria Fyta ist ein Dozent (neutral...), ich auch

Eigenschaften: Datenelemente von Objekten

Beispiel: Dozent hat Name, Titel und zu haltende Vorlesungen

Methoden: Funktionen einer Klasse

Beispiel: Personen können ihren Namen sagen

Datenkapselung: Eigenschaften werden nur durch Funktionen der Klasse verändert

Beispiel: der Name einer Person kann nicht geändert werden

Vererbung: Klassen können von anderen abgeleitet werden, erben dadurch deren Eigenschaften und Funktionen

Beispiel: Jede Person hat einen Namen

(13)

http://www .icp .uni-stuttgar t.de

Interpreter- und Compilersprachen Python-Skript

Python-Interpreter

Ausgabe

interpretiert

produziert

Ausgabe Binärprogramm C-Compiler+Linker

C-Quellcode übersetzt erzeugt produziert Interpretersprachen

• Z.B. Python, Java, C#, Basic, PHP, Shellsprachen

• Das Programm wird vom Interpreter gelesen und ausgeführt

• Es wird nie in Maschinencode für den Prozessor übersetzt

• Ausnahme: Just-in-Time (JIT) Compiler

(14)

http://www .icp .uni-stuttgar t.de

Interpreter- und Compilersprachen Python-Skript

Python-Interpreter

Ausgabe

interpretiert

produziert

Ausgabe Binärprogramm C-Compiler+Linker

C-Quellcode übersetzt erzeugt produziert Compilersprachen

• Z.B. C/C++, Fortran, Pascal/Delphi

• Compiler übersetzt in maschinenlesbaren Code

• Nicht portabel, erschwerte Fehlersuche, deutlich schneller

• Interpreter selbst müssen compiliert werden

(15)

http://www .icp .uni-stuttgar t.de

Maschinensprache

Aber was versteht nun der Prozessor?

Zahlenkolonnen, z.B.

AD 34 12 18 69 2A 8D 34 12 AD 35 12 69 00 8d 35 12

• Maschinencode für den 6502-Mikroprozessor

• Addiert 42 zur 16-bit-Zahl an Speicherstellen 1234h und 1235h

Wie wird aus einem Programm Maschinencode?

(16)

http://www .icp .uni-stuttgar t.de

Assembler

• Assembler ist die menschenlesbare Form der Maschinensprache

• Assembler bezeichnet auch das Programm, das die Befehle in Zahlen übersetzt und Labels an Speicherzellen knüpft

• Zeitkritische Anwendungen werden auch heute noch manchmal

in Assembler geschrieben

(17)

http://www .icp .uni-stuttgar t.de

Vom Sourcecode zum Programm

programm.c Präprozessor

Parser Zwischencode-Generator

Optimierer

Code-Generator

Assembler

Objekt-Datei Linker

Binärprogramm Compiler

• Ein Programm durchläuft viele Schritte bis zur fertigen ausführbaren Datei

Präprozessor, Compiler, Assembler und Linker sind meist separate Programme

• meist mehrere Objektdateien aus verschiedenen Quelltextdateien

(18)

http://www .icp .uni-stuttgar t.de

Vom Sourcecode zum Programm

programm.c Präprozessor

Parser Zwischencode-Generator

Optimierer

Code-Generator

Assembler

Objekt-Datei Linker

Binärprogramm Compiler

Präprozessor

• Im Prinzip sprachunabhängig, rein textbasiert

• Bindet weitere Quelltextdateien ein

• Erlaubt den Einsatz von Makros (Ersetzungen)

(19)

http://www .icp .uni-stuttgar t.de

Der Compiler

Parser übersetzt den Quellcode in einen Syntaxbaum

=

a +

×

int 3 c

×

int 2 b

a = 2 ∗ b + 3 ∗ c

Zwischencode-Generator erzeugt daraus Pseudocode, etwa:

r 1 = b r 2 = r 1 × 2 r 3 = c r4 = r 3 × 3 r 5 = r 2 + r 4 a = r 5

Optimierer versucht, diesen zu verbessern, z.B. durch

Prozessorregisterzuweisung

Einfügen kurzer Funktionen, Entrollen von Schleifen

Suche nach gemeinsamen Termen, ...

Code-Generator erzeugt Assembler aus dem Zwischencode

(20)

http://www .icp .uni-stuttgar t.de

Der Assembler

programm.c

Präprozessor Parser

Zwischencode-Generator Optimierer

Code-Generator

Assembler Objekt-Datei

Linker Binärprogramm Compiler

obj1.o:

... call 0000 Defined:

Undefined: blupp obj2.o:

...

Defined: blupp Undefined:

Der Assembler erzeugt eine Objektdatei mit

• Maschinencode

• den Speicherpositionen von globalen Variablen und Funktionen

• Stellen, an denen Stellen Information über solche Positionen aus

andere Objektdateien benötigt wird

(21)

http://www .icp .uni-stuttgar t.de

Der Linker

programm.c

Präprozessor Parser

Zwischencode-Generator Optimierer

Code-Generator

Assembler Objekt-Datei

Linker Binärprogramm Compiler

obj1.o:

... call 0000 Defined:

Undefined: blupp obj2.o:

...

Defined: blupp Undefined:

• Verbindet mehrere solcher Objektdateien zu einer ausführbaren Datei (Binary) oder einer Bibliothek

• Bibliotheken sind Sammlungen von Objektdateien

• Der Linker verbindet Zugriffe zwischen Objektdateien

• Nur wenn alle Zugriffe aufgelöst wurden, entsteht ein Binary

(22)

http://www .icp .uni-stuttgar t.de

Dynamisches Linken

programm.c

Präprozessor Parser

Zwischencode-Generator Optimierer

Code-Generator

Assembler Objekt-Datei

Linker Binärprogramm Compiler

obj1.o:

... call 0000 Defined:

Undefined: blupp obj2.o:

...

Defined: blupp Undefined:

• Beim dynamischen Linken wird das Linken gegen die Bibliotheken erst beim Starten des Programms erledigt.

• Dadurch können Teile des Programms geupdated werden

• Und mehrfach benutzte Bibliotheken werden nur einmal geladen

• Erfordert spezielle dynamische Bibliotheken (.so, .dylib oder .dll)

Referenzen

ÄHNLICHE DOKUMENTE

Deshalb gibt es einen Zugriffsbereich für Vererbung, der alle Subklassen einer Klasse umfasst. Programmelemente, die als geschützt deklariert

Jeder traditionsreiche Verband kann auf einen Gründungsmythos zurückblicken, der der weiteren Entwicklung der Or- ganisation zugrunde liegt. Im Falle des Deutschen Vereins ist es

Kritiker wenden zu Recht ein, dass ein teilweiser Verzicht auf Forderungen – ob frei- willig oder unfreiwillig, über einen harten Schnitt oder durch längere Laufzeiten – Gefahren

Wenn Sie sich nicht sicher sind, daß eine siche- re Übertragung gewährleistet ist, sollten Sie auf jeden Fall auf die Versendung von sensiblen Daten, wie

[Für den Hinterkopf: Es gibt auch abstrakte Methoden.

Achtung: In UML wird für Vererbung immer der Pfeil verwendet, bei dem die Spitze ein leeres Dreieck ist!.. Generalisierung/Spezialisierung

Wenn das Blatt vollständig ausgefüllt ist, behält das Kind, das das letzte Feld eingetragen hat, das Blatt und verfasst nun als Schulübung oder als Hausübung die Beschreibung

Die Belastungen für die Menschen und die Natur des Münchner Umlandes und des Erdinger Mooses sind bereits heute grenzwertig und dürfen nicht weiter erhöht werden.. Allein schon mit