Der Computer von Neumann



Ähnliche Dokumente
Einführung ins Programmieren

1. Einführung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Systemprogrammierung (37-023)

Einführung in PHP. (mit Aufgaben)

Computer-Architektur Ein Überblick

0. Einführung. C und C++ (CPP)

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Übungen zu C++ Kapitel 1

Programmiersprachen und Programmierkonzepte

Kapitel 1: Einführung

Grundlagen. Kapitel 1

Einführung in Eclipse und Java

Einführung (0) Erster funktionsfähiger programmgesteuerter Rechenautomat Z3, fertiggestellt 1941 Bild: Nachbau im Deutschen Museum München

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

2 Grundlagen der Programmierung

Modellierung und Programmierung 1

Erster Bug: eine Motte

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Informatik I Debugging

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Staatlich geprüfter EDV-Führerschein

Tutorium Rechnerorganisation

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Computeria Urdorf. Treff vom 16. Januar Was ist ein Computer?

Die Mikroprogrammebene eines Rechners

Im Original veränderbare Word-Dateien

Einführung in die Programmierung

Fragen zur GridVis MSSQL-Server

2D22 Prinzipien der Softwareentwicklung. Prinzipien der Softwareentwicklung S. Strahringer 1

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

4D Server v12 64-bit Version BETA VERSION

5 Speicherverwaltung. bs-5.1 1

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Programmieren was ist das genau?

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Informatik in der Elektrotechnik (BIE) Aufnahme des Übungsbetriebs

Objektorientiertes Programmieren mit Suse Linux

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Programmierkurs Java

Applications Applets (eingeschränkte Rechte)

Internet Explorer Version 6

Benutzerkonto unter Windows 2000

Compiler und Codegenerierung. Hw-Sw-Co-Design

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Vorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7

Proseminar Technische Informatik A survey of virtualization technologies

Einführung in die C-Programmierung

Einführung in Betriebssysteme

VBA-Programmierung: Zusammenfassung

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Algorithmen mit Python

Problemorientierte Programmiersprachen Nachteile von Programmen in Maschinensprache sehr aufwendig bei komplexeren Aufgabenstellungen fehleranfällig

Informatik I Tutorial

Verwendung des Terminalservers der MUG

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Formale Sprachen und Grammatiken

Formular»Fragenkatalog BIM-Server«

Programmieren. Wie entsteht ein Programm

Installation LehrerConsole (für Version 6.2)

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Propädeutikum. Dipl.-Inf. Frank Güttler

Version 0.3. Installation von MinGW und Eclipse CDT

Fragen. f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))?

E-PRIME TUTORIUM Die Programmiersprache BASIC

Java Einführung Operatoren Kapitel 2 und 3

DLLs (dynamic loaded libraries) mit MingW erstellen

TIMI: Technische Informatik für Medieninformatiker

Softwarepraktikum: Einführung in gcc / g++

Grundbegriffe der Informatik

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Persona-SVS e-sync GUI/Client Installation

Kapitel 1: Einführung. Was ist Informatik? Begriff und Grundprobleme der Informatik. Abschnitt 1.1 in Küchlin/Weber: Einführung in die Informatik

Einführung in die C++ Programmierung für Ingenieure

Programmieren in Haskell Einführung

Liesmich zum Kurs: Programmieren in der Bioinformatik mit Perl Konfigurierung der Programmierumgebung

Open Source Software. Workshop : Open Source Software 3. Mannheimer Fachtag Medien Referent : Christopher Wieser (

Informatik 1 Tutorial

Installationsanleitung

Informatik I (D-MAVT)

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

IntelliRestore Seedload und Notfallwiederherstellung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe

Die Programmiersprache C

Rillsoft Project - Installation der Software

Klausur in Programmieren

Installation und Inbetriebnahme von Microsoft Visual C Express

Java Entwicklung für Embedded Devices Best & Worst Practices!

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Diese CD ersetzt die ursprünglich auf der RAVE-CD enthaltenen Repair Operation Times (ROTs) und die auf der KSD-CD enthaltenen Fehlercodes.

Präsentation Von Laura Baake und Janina Schwemer

Kapitel 3. Mein erstes C-Programm

Transkript:

1. Einführung Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Aufbau eines Computers!Systemumgebung!Vorgang des Programmierens!Editor, Debugger, Linker!Programmiersprachen - Geschichte Copyright: M. Gross, ETHZ, 2003 2 Der Computer von Neumann Peripherals Ein- und Ausgabegeräte Bildschirm Tastatur Maus Drucker Lautsprecher Mikrophon Scanner... CPU Prozessor Register Cache Arithmetisch- Logische Einheit Ausführung von Befehlen Main Memory Netzwerkverbindungen Hauptspeicher Programmcode Programmdaten Stack, Heap Storage Devices Speicher Lokales Netzwerk (LAN) Modem... Diskettenlaufwerk CD Festplatte Magnetband... 1

Copyright: M. Gross, ETHZ, 2003 3 Von Neumann sche Maschine // von Neumann Zyklus pc = 0; do { instruction=memory[pc++]; decode(intruction); fetch (operands); execute; store(results); } while (intruction!=halt);! Erster General Purpose Computer ENIAC! 20 Register! 18000 Röhren! Integration von Daten- und Programmspeicher! Adressierbarer Speicher Copyright: M. Gross, ETHZ, 2003 4 Programmierbeispiel mit Text A L U REGISTER FILE PC IR M A R M D R MEMORY ALU Arithmetic Logic Unit PC Program Counter MAR Memory Address Register MDR Memory Data Register IR Instruction Register! Registersatz (file) zum schnellen Zugriff auf Daten! Häufig gebrauchte Daten werden in Registern gehalten! Versteht nur Maschinen- Code! Häufig Instruktionen mit 3 Operanden! Instr <source1>, <source2>, <dest>! z. B.:add %r2, %r3, %r2 (SPARC) 2

Copyright: M. Gross, ETHZ, 2003 5 Systemumgebung - Software Anwendungen (Applications) Windowssysteme Betriebssysteme Web Browser, Text-Editoren, Compilers Xfree, Xwindows, MSWindows... UNIX, Linux, Windows 95/NT/2000, OS/2 Hardware Copyright: M. Gross, ETHZ, 2003 6 Programmieren! Erzeugen einer Folge von Anweisungen (Instruktionen), die von der CPU eines Computers ausgeführt werden können! Programm muss im Maschinencode vorliegen! Es wird ebenfalls im Memory der Maschine gespeichert! Es wird Instruktion für Instruktion aus dem Speicher genommen und von der CPU interpretiert! CPU Register halten Programmadresse (pc) und Daten! Wir können auf verschiedenen Abstraktionsebenen programmieren 3

Copyright: M. Gross, ETHZ, 2003 7 Programmieren! Wir können auf verschiedenen Ebenen programmieren! Maschinen-Level ( mit 0 und 1 )! Assembler-Level (mov %r1, %r2)! Hochsprachen-Level (while (TRUE) fork();)! Programme werden heute hauptsächlich in höheren Programmiersprachen geschrieben! Wir unterscheiden! Prozedurale: FORTRAN, COBOL, PASCAL, MODULA, C...! Objektorientierte: C++, Java, Eiffel, SMALLTALK...! Funktionsorientierte: LISP,! Logische: PROLOG,... Copyright: M. Gross, ETHZ, 2003 8 Programmieren Editor Compiler Quellcode schreiben Compilieren Textdatei Objektdatei Nein Fehler Ja Debuggen Debugger Linker Linken Executable Executable Nein Fehler Ja Testen Ja Fehler Nein Okay! 4

Copyright: M. Gross, ETHZ, 2003 9 Programmierbeispiel mit Text /* Testprogramm * Berechnung der Fläche eines Dreiecks */ #include <iostream.h> int main() { int hoehe = 3; int grundseite = 5; double flaeche = hoehe * grundseite * 0.5; cout<< Fläche: <<flaeche<< \n ; return 0; }! Programmtext (source code) besitzt einen formalen Aufbau, die Syntaxstruktur! Syntax ist von Sprache zu Sprache verschieden! Beispiel:! If (<Bedingung>) <Anweisung_1>; else <Anweisung_2>; Copyright: M. Gross, ETHZ, 2003 10 Programmierbeispiel mit Text char a Compilezeitfehler int A[6] long x! Compilezeitfehler sind Fehler, die der Compiler finden kann, wie z.b. Typumwandlungen: long x; /*eine ganze Zahl*/ char a; /* ein Zeichen */ a = x;! Laufzeitfehler sind Fehler die erst erscheinen, wenn das Programm läuft, wie z.b. Division durch Null! Laufzeitfehler sind nicht immer einfach zu finden!! Testen kann keine Fehlerfreiheit beweisen Laufzeitfehler 5

Copyright: M. Gross, ETHZ, 2003 11 Programmierfehler! Syntaxfehler! werden vom Compiler gemeldet! Linkfehler! auf fehlende Objektdateien oder Bibliotheken zurückzuführen! Laufzeitfehler: semantische/logische Fehler! werden nur durch Testen und Analysieren des lauffähigen Programms entdeckt! Laufzeitfehler sind teuer : Wenig Unterstützung seitens des Rechners Kosten für Benutzer des fehlerhaften Programms! Qualität und Umfang der Tests sind entscheidend! Copyright: M. Gross, ETHZ, 2003 12 Der Compiler andere Programmteile Bibliotheken dynamische Bibliotheken Quellprogramm Compiler Ziel-Assemblerprogramm Assembler verschiebbarer Maschinencode Linker ausführbarer Maschinencode Lader / Binder Speicherbereich mit dem ausführbaren Programm! Quellprogramm in Hochsprache muss in Maschinencode übersetzt werden! Hierzu dienen Interpreter oder Compiler! Interpreter übersetzen während der Programmausführung (z.b. UNIX shell-scripts)! Compiler übersetzen das Programm vorab (MS Visual C++) 6

Copyright: M. Gross, ETHZ, 2003 13 Der Compiler! Compiler übersetzt den Quellcode (source) zunächst in Assembler-Code! Im Speicher noch verschiebbarer Maschinencode! Hat eine symbolische Repräsentation! Assembler übersetzt Assembler-Code in Maschinen- Code! Linker bindet noch notwendige Module mit an! Können vorab übersetzte Bibliotheken sein! Liegen bereits im Maschinen-Code vor! Loader lädt den Maschinen-Code zur Ausführung in den Hauptspeicher! Kann zur Laufzeit weitere Module anbinden (dynamic link) Copyright: M. Gross, ETHZ, 2003 14 Beispiel - Assembler! Assembler-Programm (Sparc): // q.c int max(i,j) int i,j; { if (i<j) return j; else return i; }! C-Codefragment zur Berechnung des Maximums zweier Zahlen! > gcc S q.c 7

Copyright: M. Gross, ETHZ, 2003 15 Beispiel - Assembler! Symbolischer Assembler-Code mit CPU-Instruktionen.file "q.c".global max.type max,#function max: mov %o0,%g2 mov %o1,%o0 cmp %g2,%o0 bge,a.ll2 mov %g2,%o0.ll2: retl nop.ident "GCC: (GNU) 2.7.2" Copyright: M. Gross, ETHZ, 2003 16 Beispiel - Assembler! > gcc o q q.s main.c! > gdb q 0x106b8 <max>: 0x84100008 mov %o0, %g2 0x106bc <max+4>: 0x90100009 mov %o1, %o0 0x106c0 <max+8>: 0x80a08008 cmp %g2, %o0 0x106c4 <max+12>: 0x36800002 bge,a 0x106cc 0x106c8 <max+16>: 0x90100002 mov %g2, %o0 0x106cc <max+20>: 0x81c3e008 retl 0x106d0 <max+24>: 0x01000000 nop! Wir erhalten einen Ausdruck des Programmspeichers mit Maschinencode und disassemblierten Instruktionen 8

Copyright: M. Gross, ETHZ, 2003 17 Der Compiler nochmals im Detail position := initial + rate * 60; lexikalische Analyse id 1 := id 2 + id 3 * 60 syntaktische Analyse semantische Analyse := id 1 + id 2 * id 3 inttoreal 60 Zwischencode-Erzeugung temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3! Lexikalische Analyse: Namen von Zeichen werden ersetzt, Eindeutigkeit geprüft! Syntaktische Analyse: Sprachsyntax wird geprüft! Semantische Analyse: Positionen von Zeichen bestimmen den Sinn des Ausdruckes (rechts-links)! Zwischencode: Oft wird ein maschinenunabhängiger Zwischencode erzeugt Copyright: M. Gross, ETHZ, 2003 18 Der Compiler nochmals im Detail Code-Optimierung temp1 := id3 * 60.0 id1 := id2 + temp1 Code-Generierung MOVF MULF MOVF ADDF MOVF Assemblierung id3, R2 #60.0, R2 id2, R1 R2, R1 R1, id1! Code-Optimierungen: Unnötiges Speichern Eliminieren, Umsortieren von Instruktionen, Register-Allokation! Code-Generierung: Es wird Assembler-Code erzeugt (s- flag bei gcc)! Maschinen-Code Erzeugung 3c5f3ead fe004ca3 3c5e2278 9e002c5f 3c5a9d2f 9

Copyright: M. Gross, ETHZ, 2003 19 Lebenszyklus eines Programmes Voraussetzungen Programmdesign Programmieren Spezifizieren Testen Debugging Revidieren Pflege Produkt Copyright: M. Gross, ETHZ, 2003 20 Warum C, C++?! C ist historisch eng mit der Entwicklung von UNIX verknüpft! Ersetzt Assembler auf Systemprogrammierebene (I/O, Betriebssystem, HW-Treiber, Micorcontroller)! Mehrzahl kommerzieller Anwendungspakete sowie Systemsoftware ist in C oder C++ geschrieben! Als plattformunabhängige Sprache etabliert! C++ ist mittlerweile die praktisch bedeutendste Programmiersprache! C++ erlaubt sowohl prozedurale, als auch objektorientierte Programmierung! C++ ist sehr mächtig Obermenge von C 10

Copyright: M. Gross, ETHZ, 2003 21 Historische Entwicklung! BCPL (Richards 1967, typenlos)! B (Thompson 1970, typenlos)! C (Ritchie 1971, typisiert)! ANSI C (1983-1987, Standardisierung)! C++ (Stroustrup 1986, Klassen und OO)! 1990-1998 Final Standard ISO/ANSI! C++ entwickelt sich noch immer Copyright: M. Gross, ETHZ, 2003 22 Der Prozessor 11