Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Teil III Vom Rechenwerk zum Computer

Ähnliche Präsentationen


Präsentation zum Thema: "Teil III Vom Rechenwerk zum Computer"—  Präsentation transkript:

1 Teil III Vom Rechenwerk zum Computer
Themen Erweiterung einer ALU um Register Anbindung eines Befehlsspeichers an die ALU Struktur von Mikrobefehlen Anbindung eines RAM-Speichers Steuerwerk und Rechenwerk die „von Neumann Rechnerarchitektur“ Ebnen der Programmierung - Mikroinstruktionen - Maschinebefehle - Assembler höhere Programmiersprachen / Programmierparadigmen

2 Zur Erinnerung: Im Foliensatz CAI-05 hatten wir uns angesehen, wie eine ALU aufgebaut werden kann, die logische und arithmetische Operationen ausführen kann. Im Foliensatz CAI-06 haben wir Speicherelemente und Register eingeführt. Dateneingänge 16 16 N Z Steuer- eingang ALU 16 Datenausgang qn = q Jetzt: was wird noch benötigt, um daraus einen programmierbaren Rechner aufzubauen? wie stöpselt man alles zusammen?

3 Erweiterung der ALU um Register
Ziel: Man möchte genau steuern können, zu welchem Zeitpunkt eine ALU-Funktion ausgewählt wird, wann diese auf die Operatoren angewandt wird und wann das Ergebnis der Operation abrufbar ist. Ansatz: Als Schnittstelle zur „Außenwelt“ werden alle Ein- und Ausgabe-leitungen der ALU über Register „gepuffert“. 16 16 zwei Operanden-Register (A und B) Befehls-Register A B 16 16 2 F0 N 2 F1 ALU Z 16 R Status-Register Ergebnis-Register 16

4 Erweiterung der ALU um ein Schieberegister
Ziel: Für einige arithmetischen Rechenoperationen (Multiplikation u. Division) und für zahlreiche andere Anwendungen (z.B. Bildverarbeitung) benötigt man (Shift-) Operationen, mit denen man einzelne Bits eines Maschinenworts nach links bzw. nach rechts verschieben kann. Ansatz: ersetze das Ausgaberegister durch ein Schieberegister ergänze zwei weitere Steuerleitungen S0 und S1 *erg bezeichne den neuen Inhalt von SH nach Ausführung eines Befehls (S0 S1 ) 16 16 A B 16 16 S0 S1 *erg (in SH) erg left-shift(erg) 0 right-shift(erg) nicht erlaubt F0 2 2 2 Eingang c0 ist Überflüssig und wird daher weggelassen. F1 ALU SR 2 S0 erg 16 Status-Register SR S1 SH Shifter-Register SH 16 *erg

5 Registertypen und Registerfile
Akkumulator-Register: zum „Aufsammeln“ des Berechnungsergebnisses. Ein von der ALU geliefertes Resultat wird auf den Akkumulatorinhalt aufaddiert. Konstanten-Register: zur Ablage der Werte 0 und 1 (arithmetisch bzw. logisch interpretiert) sowie weiterer häufig benötigter Werte, z.B. –1. Die Inhalte dieser Spezialregister sind nicht überschreibbar. Befehlszähler: um mitzuzählen, der wievielte Befehl gerade ausgeführt wird. weitere allgemein nutzbare Register, z.B., für häufig genutzte Variablen (Zählervariablen in For-Schleifen etc.)

6 Entwurf eines Datenbusses
Konzept des Datenbusses: - Ein Datenbus ist ein Bündel von n paralleler Leitungen, an die beliebig viele Bauteile mit je n Anschlüssen gelegt werden können, um Daten auszutauschen. - die angesprochene Funktionseinheit holt sich vom Bus, was für sie bestimmt ist - Die Anzahl n der parallelen Datenleitungen wird auch als Busbreite (oder Bandbreite des Busses) bezeichnet. Anbindungen an Bus Gerät 1 Gerät 3 . . . Gerät n 4 Datenbus Gerät 2

7 Registeranbindung an ALU über Datenbusse
Anforderung: - Der Inhalt eines Registers soll wahlweise auf den Eingang A oder B der ALU gelegt werden können. - Der Ausgang S (Shifted Result) der ALU soll auf einen beliebigen Registereingang gelegt werden können (mit Ausnahme der Konstantenregister) - Die Auswahl eines Registers muss steuerbar sein. Ansatz: - verwende 3 separate Datenbusse für A, B und S - Auswahl der Register und „Datenflussrichtung“ erfolgt über sog. enable -Leitungen der Register. Ausgang S wegen Schieberegister SR-ALU enable (S) enable (A) n R1 S-Bus n B-Bus A-Bus enable (B)

8 Registeranbindung an ALU über Datenbusse
enable Beispiel: 3 Busse der Breite 16 Bit (A-Bus, B-Bus, S-Bus) - 3 Enable-Leitungen pro Register (bzw. 2 für Konstantenregister) Bus Arbitration Logic (BAL) - Schaltung, die die Zuordnung der Register zu den Datenbussen übernimmt. A-Bus B-Bus Bus Arbitration Logic 16 16 +1 13 enable -1 PC R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 Ausgang S wegen Schieberegister SR-ALU AC A B S-Bus ALU Shifter

9 Bus Arbitration Logic Prinzip:
enable A-Bus B-Bus 4 B-Bus- Decoder 16 Register- file 4 A-Bus- Decoder 16 13 enable 4 S-Bus- Decoder PC B A S R0 R1 R2 R3 R4 enable R5 R6 R7 Prinzip: - Zur Auswahl der hier gezeigten 16 Register wird für jeden der 3 Busse ein 4:16 Decoder eingesetzt. R8 R9 Decoder legt genau die Ausgabeleitung auf 1, deren Index dem Binärwert der Eingabe entspricht. Beispiel: 0011 legt Leitung 3 auf 1 Enable S-Bus wir benötigt, damit Registerinhalte nicht vorabüberschrieben werden. R10 AC A B ALU S-Bus Shifter

10 Zeitliche Koordination
Problem: Neben der Frage, welches Register ausgewählt werden soll und wie die Auswahl technisch realisiert werden kann, stellt sich die Frage nach der zeitlichen Reihenfolge, in der die Registeransteuerung und schließlich die Ansteuerung der ALU erfolgen soll. Ansatz: Erweiterung des Rechenwerks um eine sog. Timing Unit. Aufgabe der Timing Unit: Die Komponenten des Rechenwerks (ALU und Register) sollen in der zeitlichen Reihenfolge c1, c2, c3, und c4 angesteuert werden: Load operation Enable S-Bus Clock input Timing Unit (4-Phasen-Uhr) C1 C2 C3 C4 Load input in ALU C1 C2 C4

11 Zeitliche Koordination
Realisierung der Timing Unit: - durch Verwendung von Verzögerungsglieder. - Eingabetaktsignal (Clock Input) wird zyklisch zum nächsten Ausgang Ci+1 durchgereicht wobei C4+1 = C1 - ein kompletter Durchlauf (hier 4 Takte) heißt Maschinen-Zyklus. Clock input C1 C2 C3 C4 Zeit 1 Zyklus Blockschaltbild Clock input Clock input Timing Unit (4-Phasen-Uhr) C1 C2 C3 C4 C1 C2 C3 C4 delay1 delay2 delay3

12 Rechenwerk mit zeitlicher Steuerung
A-Bus B-Bus 4 BAL 16 enable 4 16 enable 4 13 enable enable S-Bus Register- file B A S S-Bus 16 Load input in ALU F A B S SH-ALU 2 2 4 Status Load operation Clock input TU C1 C2 C3 C4

13 Rechenwerk mit zeitlicher Steuerung (Detailansicht)
enable A-Bus B-Bus enable 4 B-Bus- Decoder 16 4 A-Bus- Decoder 16 +1 13 enable -1 S-Bus 4 S-Bus- Decoder PC R0 B A S R1 enable S-Bus R2 R3 16 R4 R5 R6 F R7 S R8 R9 R10 Load operation Load input in ALU AC Clock input Timing Unit C1 C2 C3 C4 A B C1 C2 C4 2 ALU Status 2 2 2 Shifter

14 Mikro-Instruktion-Befehl, -Programm und -Code
Definition: Mikrooperation: eine in der ALU fest verdrahtete Elementaroperation (Schaltfunktion), die durch genau ein ihr zugeordnetes Steuersignal ausgelöst werden kann. Die Ausführung einer Mikrooperation benötigt genau einen Maschinen-Zyklus. Mikrobefehl: Steuerwort fester Länge, das eine oder mehrere Mikrooperationen auslöst. Mikroprogramm: Folge von Mikrobefehlen Mikrocode: die Gesamtheit aller von einer ALU unterstützten Mikrobefehle. Anmerkungen: Bei modernen Rechnern unterscheidet man zwischen: - RISC-Architekturen (Reduced Instruction Set) mit meist weniger als 100 Befehlen. - CISC-Architekturen (Complex Instruction Set) über 200 Befehle

15 Notation von Mikro-Instruktionen
Motivation: Gegeben: eine ALU mit Steuer- und Dateneingängen und Shift Register (SH) als Ausgang. Zur Verbesserung der Lesbarkeit der Mikroinstruktionen ordnet man deren binären Darstellungen eine symbolische Darstellung zu. Beispiel: F0 F1 S0 S1 symbolisch Beschreibung SH <– A Identitiät (Transfer) SH <– lsh(A) Bits um 1 Stelle nach links schieben SH <– rsh(A) Bits um 1 Stelle nach rechts schieben kein gültiger Befehl SH <– A + B Addition SH <– lsh(A+B) Summe um 1 Stelle nach links schieben SH <– rsh(A+B) Summe um 1 Stelle nach rechts schieben SH <– A  B Logisch UND DMF's für y1, y2 und y3 ableiten

16 Struktur eines Befehls
Einträge im Befehlsregister (MIR) setzen sich zusammen aus: - einer Codierung für die auszuführende Rechenoperation, d.h., Belegungen der Steuerleitungen F0, F1 und S0, S1 zur Auswahl von arithmetisch-logischen bzw. Shift-Operationen. - Adressen der beiden Register, in denen die Operanden A und B abgelegt sind - Adresse des Registers, in dem das Ergebnis abgelegt wird. Mikrobefehl Interpretation / Verwendung Bit 0-3 Index einer Rechenoperation (arithmetisch, logisch oder shift) Bit 4-7 Adresse des Registers, dessen Inhalt Operand A ist Bit Adresse des Registers, dessen Inhalt Operand B ist Bit Adresse des Registers, in dem das Ergebnis abgelegt wird.

17 Verbindung von Rechenwerk und Steuerwerk
A-Bus B-Bus 16 enable Bus Arbitration Logic (BAL) 16 enable 13 enable Speicherwerk Register- file S-Bus 12 (= 3*4) E/A-Werk Load input in ALU c2 enable S-Bus c4 A B Steuerwerk SH-ALU 2 2 4 StW StW Status Clock input TU C4 C3 C2 C1 BAL SH-ALU c1 B A S F SH Befehlsregister (MIR) Load operation 16

18 Zusammenfassung: Rechenwerk
Aufgaben: Verarbeitung von Daten durch: - arithmetische und logische Operationen (ALU) - Vergleiche, logische Entscheidungen (ALU / Statusregister) Komponenten: - Funktionseinheiten (ALU) - Register ALU mit folgenden Grundoperationen: - Boolesche Operationen: logisches UND / ODER - Arithmetische Verknüpfungen: Addition, Subtraktion - Schiebe-Operationen: Links-/Rechts-Schieben - Transfer-Operationen: Laden, Speichern von Operanden Register dienen der Speicherung von: Operanden Operationsergebnissen (in Akkumulator-Registern) Zustandsbeschreibungen der Funktionseinheiten (in Statusregistern)

19 Vom Rechenwerk zum Universal-Rechner
Rechenwerk kann nur einzelne Mikrobefehle ausführen Ziel: Ausführung von Programmen (d.h. Befehlssequenzen). => benötigt werden: - eine Möglichkeit zur Ablage von Befehlssequenzen - ein Steuerwerk, das die Abarbeitung der Befehle organisiert. Kopplung des Rechenwerks mit einem größeren Speicherbaustein bzw. mit einem externen Massenspeichermedium => gelöst durch Einsatz von: - erweitertem Buskonzept und - Integration eines Memory-Controllers. Verbesserung der Kommunikation mit der Außenwelt: U.a. sind bisher alle Ein- und Ausgaben als Maschinenworte in Binärkodierung => Anschluss geeigneter Ein- und Ausgabegeräte und Verwendung von für Menschen leicht verständlicher Codierungen.

20 Erweiterung der CPU um einen Befehlsspeicher
Anbindung eines ROM Befehlsspeichers an CPU m-CPU Daten- RAM CPU Befehls- ROM : Steuerbus : Adressbus : Datenbus Kernkomponenten eines m-Computers m-Computer Mikroprogramm- Speicher CPU/ROM-IF CPU Steuer- werk CPU/RAM-IF Daten- Speicher StW/RW-IF Rechen- werk

21 Abarbeitung von Mikrobefehlen
Eine Sequenz von Mikrobefehlen bildet ein Mikroprogramm. Mikroprogramme werden vom Steuerwerk der CPU nach einem festen Schema abgearbeitet,dem FETCH-EXECUTE Zyklus. FETCH: Holen von Befehlen, d.h. Befehl gemäß des Inhalts des Programm Counter Registers (PC) adressieren und in MIR laden. EXECUTE: Initiieren der Befehlsausführung, d.h. an der Befehlsausführung beteiligte Funktionseinheiten mit den notwendigen Steuersignalen versorgen: – Operand(en) adressieren und (aus dem Speicher) laden – Operation ausführen – Ergebnis speichern – Befehlszähler PC verändern Anmerkung: Die Abarbeitung von Mikrobefehlssequenzen mit dem Fetch-Execute Zyklus bedeutet, dass der Befehlszähler zu Beginn auf 0 steht und dann nach jedem Befehl jeweils um den Wert 1 inkrementiert wird.

22 Erweiterung des Mikro-Instruction Register (MIR)
Ziel: Möglichkeit zur Realisierung flexiblerer Programmabläufe mit Verzweigungen und Schleifen. Ansatz: Einführung von Sprungbefehlen, die es erlauben, zu einem beliebigen im Programmspeicher abgelegten Befehl zu springen. Sei k der Wert des PC‘s, dann unterscheidet man: - Rücksprung; Sprung zu Befehl dessen Adresse kleiner als k ist. - Vorwärtssprung; Sprung zu Befehl dessen Adresse größer als k ist. - Wiederholung; der selbe Befehl wird nochmals ausgeführt. Einführung von bedingten Sprungbefehlen: Die Entscheidung, ob ein Sprung erfolgt, wird von einer Bedingung (= bestimmte Registerbelegung) abhängig gemacht. Für die Sprungsteuerung ergeben sich drei Fälle: – unbedingter Sprung; d.h., die Sprungbedingung ist immer erfüllt – nie Sprung; d.h., die Sprungbedingung ist nie erfüllt – möglicher Sprung; d.h., die Sprungbedingung kann erfüllt sein oder auch nicht.

23 Sprungbedingungen Frage:
Wovon soll man Sprünge abhängig machen und wie formuliert man entsprechende Sprungbedingungen? Anforderung: möglichst einfache technische Realisierung, die nur eine minimale Erweiterung der CPU-Schaltung erfordert. Ansatz: Man nutzt die Statusausgänge N (Negative) und Z (Zero) der ALU und erweitert das Steuerwerk um ein ROM-Interface mit den Komponenten: - Bit-Komparator: Micro Sequence Logic, MSL, mit dem man das N bzw. das Z Flag mit einer Vorgabe vergleichen kann, - einem Befehlszähler: Micro Instruction Counter, dem man im Fall eines Sprungs beliebige Adresse zuweisen kann. A B m-Rom-IF ROM StatusR N Z MIC MSL ALU 2 8 Shifter 2

24 Aufbau und Darstellung von Sprungbefehlen
Anforderung: Zur Darstellung von Sprungbefehlen benötigt man folgende Erweiterungen: a) eine Codierung dafür, unter welchen Bedingungen ein Sprung ausgeführt werden soll. b) eine Codierung für die Adresse des Befehle, zu dem ggf. gesprungen werden soll. Ansatz: zu a): Erweiterung um zwei Bits: jump-select Bits (js-Bits) j s Bits Interpretation / Verwendung symbolisch 0 0 kein Sprung ./. 0 1 Sprung, wenn N =1 (Negative = true) if N goto ADR 1 0 Sprung, wenn Z =1 (Zero =true) if Z goto ADR 1 1 unbedingter Sprung goto ADR

25 Struktur des erweiterten Mikrobefehls
zu b): Erweiterung um Bits zur Ablage einer Befehlsadresse. Aus a) und b) folgt eine erweiterte Struktur für Mikrobefehle auf 32 Bit: MemIF BAL calc m-ROM-IF Befehls-register MIR enM as ld-MAR ld-MDR ds B A S F SH enS js iADR 8 Bit zur Ablage von Befehlsadressen 5 Bit 12 Bit 4 Bit j und s Bit zur Codierung der Sprungbedingung zusätzliches Steuerbit (enableS). Falls nicht gesetzt, wird ALU Ergebnis nicht in Ergebnis-Register transferiert. => nur Test von N oder Z 11 Bit 32 Bit

26 Struktur des erweiterten Mikrobefehls
Einträge im Befehlsregister (MIR) setzen sich jetzt zusammen aus: - Codierung für die auszuführende Rechenoperation, ( F0, F1, S0, S1) - Adressen der beiden Register, in denen die Operanden A und B abgelegt sind - Adresse des Registers, in dem das Ergebnis abgelegt wird. - Codierungen für Befehle zur Steuerung des Memory-Controllers - Codierungen zur Steuerung von Sprüngen Bit Interpretation / Verwendung Bit 0-3 Index einer Rechenoperation (arithmetisch, logisch oder shift) Bit 4-7 Adresse des Registers, dessen Inhalt Operand A ist Bit Adresse des Registers, dessen Inhalt Operand B ist Bit Adresse des Registers, in dem das Ergebnis abgelegt wird. Bit Steuerung des Memory-Controllers Bit Steuerung von Sprüngen Bit Adresse, unter dem Befehl abgelegt ist

27 Entwicklung von Mikro-Programmen
Beobachtung: Mit seriellen Anweisungen zur Inkrementierung und Dekrementierung von Datenwerten und bedingten Sprungbefehlen lassen sich alle prinzipiell berechenbaren Funktionen programmieren. Die zur Programmierung verwendbaren Mikro-Befehle unterscheiden sich in Anzahl und Format zum Teil erheblich von CPU zu CPU. => Mikro-Programme sind nicht portabel. => minimale Befehlssätze ziehen oft aufwändige Programm- Formulierungen nach sich. CISC vs. RISC- Architekturen CISC (Complex Instruction Set Computer): oft mehr als 200 Befehle, 3 bis 10 Takte pro Befehl, komplexer Aufbau. RISC (Reduced Instruction Set Computer): meist weniger als 100 Befehle, wenig Takte pro Befehl, mehrere Register (> 32), einfacherer Aufbau des Steuerwerks. (Bekannter Vertreter: Sun Micro-Systems) RISC ist derzeit dominant auf Mikro-Code Ebene. Jedoch nicht auf ISA-Ebne

28 Anbindung eines Datenspeichers an die CPU
Ziel: zur Bearbeitung größerer Datenmengen reichen die in der CPU enthaltenen Register nicht aus. Des weiteren dienen Register vornehmlich zur Speicherung von Zwischenergebnissen einer Berechnung. => Bereitstellung eines Speicherwerks (z.B. technisch durch RAM Bausteine realisiert), das so an die CPU angebunden wird, dass Daten von dort gelesen bzw. dort hinein geschrieben werden können. => Erweiterung des Steuerwerks um eine Schnittstelle zum Speicherwerk CPU StW Daten- RAM RW

29 Anbindung eines Datenspeichers an die CPU
Anbindung des Datenspeichers wird mit dem Bus-Konzept realisiert. Die zwischen CPU und dem Speicher auszutauschende Information wird unterteilt in: - Adress-Information zur Auswahl einer bestimmten Speicherzelle. Mit einer Adressbusbreite von 16 Bit (= 16 parallele Leitungen) können 216 Speicherzellen im RAM angesprochen werden. - Dateninformation, d.h. das in einer Zelle abgelegte bzw. abzulegende Datum (z.B. Binärcodierungen von Zahlen und Zeichen) - Steuer-Information zur Aktivierung („enable“) des Speichers sowie zur Einstellung des Zugriffmodus (Lesen / Schreiben) => Verwendung von drei separaten Bussen 216 Speicherzellen a 1 Byte = 64 KByte Speicherbaustein CPU : Steuerbus : Adressbus : Datenbus StW Daten- RAM RW

30 Erweiterte Busstruktur
Datenbus – Übertragung von Daten (bidirektional) – Breite des Datenbusses entspricht i.a. Anzahl der Bits eines Arbeitsspeicherelements Adressbus – Übertragung der von der CPU berechneten Speicheradressen – Adressbus und Datenbus werden stets zusammen benutzt: Adresse auf Adressbus gibt Quelle/Ziel der Übertragung des Datums auf dem Datenbus an Steuerbus (oder Kontrollbus) – Übermittelt Steuersignale zwischen der CPU und den anderen Funktionseinheiten

31 Anbindung eines Datenspeichers an die CPU
Die Schaltung zur Anbindung eines Datenspeichers wird als Speicherschnittstelle (Memory-Interface oder Memory-Controller) bezeichnet. Diese Komponente besteht aus: - einem Memory-Adress-Register (MAR) - einem Memory-Daten-Register (MDR) - den drei Bussen (Adress-, Daten- und Steuerbus) zur Auswahl RAM Adressen MAR Adressbus load Datenbus Daten MDR Steuerbus as (Zugriffsmodus: R /W) enM (enable Memory) Schnittstelle zum/vom Speicher

32 Anforderungen an den Memory Conroller
Der Memory-Controller muss ermöglichen: Einlesen des Inhalts einer Speicherzelle mit Adresse addr in ein Operandenregister des Rechenwerks (z.B. in Register A) Schreiben eines Berechnungsergebnisses in eine Speicherzelle mit Adresse addr. => Erweiterung der CPU um: - eine Verzweigung, mit der wahlweise der Inhalt des Registers MDR in ein Operandenregister (z.B. Eingang A) der ALU gelegt werden kann. - die Möglichkeit, eine Adresse in das Register MAR zu laden. => Erweiterung des Maschinenzyklus um: - zusätzliche Schritte zum laden von Speicheradressen und zum Lesen bzw. Schreiben von RAM-Inhalten.

33 Anbindung eines Datenspeichers an die CPU
Memory Memory/CPU-Interface CPU Clock c3 Timing Unit RAM Adressen B-Bus MAR Adress-Bus ld-MAR ld-MDR A-MUX Daten-Bus Daten MDR SH-ALU as enM S-Bus Schnittstelle zum/vom Speicher Schnittstelle zur/von CPU Steuerbus S-Bus = Datenbus für Ergebnis A-MUX ist ein Multiplexer, mit dem wahlweise ALU-Eingang A auf das MDR gelegt werden kann. clock c3 triggert den Schritt zum Adressieren einer RAM-Zelle im erweiterten Maschinenzyklus.

34 Komponenten eines Mikrobefehls
MemIF BAL calc m-ROM-IF enM as ld-MAR ld-MDR ds B A S F SH enS js iADR Aktivierung - RAM - load Register - S-Bus Auswahl (select) - RAM Modus - Register/RAM - Jump-Befehle Adressen - Register - Befehle Funktionsauswahl - arithmetisch, logisch, shift

35 Um ein ROM-Interface erweiterte CPU
RAM Rechenwerk ROM 16 enable Bus Arbitration Logic (BAL) c4 16 enable A-Bus B-Bus enable enable S-Bus 13 Register- file 8 Steuerwerk 12 S-Bus MemIF Load input in ALU MAR A MDR c2 A-MUX B c3 ld / ci-MAR / ld / ci-MDR 2 4 SH-ALU Status as enM 2 c4 m-Rom-IF MIC MSL 8 Clock input TU C3 C4 C2 C1 c1 MemIF BAL calc m-ROM-IF enM as ld-MAR ld-MDR ds B A S F SH enS js iADR Load operation Befehlsregister MIR 32

36 Informationsflüsse in der erweiterten CPU
Universalrechner „m-Comp“ Daten- Speicher Mikroprogramm- Speicher (ROM) CPU/RAM-IF CPU/ROM-IF CPU RW Register- file ALU StW/RW-IF MemIF BAL calc m-ROM-IF enM as ld-MAR ld-MDR ds B A S F SH enS js iADR : Daten : Befehlswort : Funktionsauswahl (calc) : Adressen : Auswahl : Aktivierung

37 Microcontoller vs. Prozessoren
ALU und Register sind die Grundkomponenten, aus denen sowohl einfache Mikrokontroller als auch hoch-komplexe Computer-Prozessoren aufgebaut sind. Beispiele: - RISC-Microcontroller von AMD (z.B. zur Steuerung eines kleinen Roboters) - Itanium-Prozessor von Intel - 64 Bit - 128 FP-Register - 128 GP-Register - mehrere spezialisierte ALUs auf einem Chip

38 Entwicklung von Intel CPUs
Core 2 Quad 2.66 GHz T Core 2 Duo 2.33 GHz T Pentium D 3.6 GHz T Pentium 66 MHz T Intel 4004 108 KHz 2 300 T Intel 486 25 MHz T ... RISC ist derzeit dominant auf Mikro-Code Ebene. Jedoch nicht auf ISA-Ebne 1971 1989 1993 2006 2005 2007 Quelle:

39 Aufbau des Pentium 3 Prozessors von Intel
Teil des Steuerwerks Cache für Befehle Steuerung für Adress- & Datenbusse Ganzzahl- Rechenwerk Cache für Daten Gleitpunkt- Rechenwerk TLB: Translation Lookaside Buffer; BTB: Branch Trace Logic Teil des Steuerwerks

40 Quelle: Forschungszentrum Jülich
Super-Computer Idee man schaltet viele CPUs zu einem Super-Computer zusammen und lässt diese synchronisiert komplexe Berechnungen ausführen. z.B: Blue Gene Serie von IBM 180 Gigaflop/s Node Book = 64 CPUs 5.6 Teraflop/s Rack = 2048 CPUs Blue Gene /L 45.6 Teraflop/s JUBL= 8 Racks = CPUs ab 2008: Blue Gene /P mit über 1 Billiarde Operationen/Sek Card = 4 CPUs 11.2 Gigaflop/s Node = 2 CPUs Quelle: Forschungszentrum Jülich 5.6 Gigaflop/s

41 Die von-Neumann-Rechnerarchitektur
Die meisten Computer sind (immer noch) nach dem klassischen Konzept des von Neumann‘schen Universalrechners organisiert, (entwickelt zwischen von Burks, Goldstine und von Neumann) Kontrollfluss V Datenfluss E A CPU = Central Processing Unit (Zentraleinheit)

42 Komponenten der von-Neumann Rechnerarchitektur
Rechenwerk (Datenprozessor), das die zu bearbeitenden Daten verknüpft und verändert, d.h., Ausführung arithmetischer (+, -, *, / ) und logischer ( ,  , ¬) Operationen. Steuerwerk, Leitwerk (Befehlsprozessor), das den Programmablauf steuert. Die Befehle werden interpretiert und deren Ausführung veranlasst, gesteuert und überwacht. Speicherwerk (Hauptspeicher, Arbeitsspeicher, Main Memory): zur Ablage von sowohl Programmbefehlen als auch Daten, die binär als Maschinenworte vorliegen. Von der Darstellung her besteht kein Unterschied zwischen Daten und Befehlen. Die Unterscheidung wird durch separate Speicherung getroffen. Ein- und Ausgabewerk (E/A-Prozessoren): Zusammen mit E/A-Geräten stellen sie die Schnittstelle zur Außenwelt (Peripherie) dar.

43 Vom Rechenwerk zum Universal-Rechner
Zur Kommunikation (d.h. zum Datenaustausch) mit der Außenwelt wird der Micro-Computer (bestehend aus CPU, RAM und ROM) zum DVS ausgebaut durch: - Kopplung mit einem Ein- sowie mit einem Ausgabewerk, - Anbindung eines externen Massenspeichers Datenverarbeitungssystem (DVS) Peripherie m-Comp Eingabe- werk Ausgabe- werk V A E : Steuerbus : Adressbus : Datenbus Speicherung (extern) S

44 Beispiel eines Motherboards
Schnittstellen (teilweise verdeckt) Sound, Netz, parallel, seriell, USB, Tastatur, Maus Memory - Controller AGP Slot 5 PCI Slots CPU-Sockel für Pentium 4 4 RIMM Sockel BIOS Batterie PCI - Controller Netz-Anschluss Stecker für Festplatten

45 Ein- und Ausgabewerk Aufgabe:
Externe Ein- und Ausgabe von Daten/Programmen Beispiele für Ein-/Ausgabegeräte (E/A-Geräte, Peripherie): Eingabe: – Tastatur – Maus- oder Stift-gesteuerte Menü-Auswahl am Bildschirm – Sensoren (Druck, Temperatur, ...) Ausgabe: – Bildschirm (CRT / TFT), Beamer – Drucker – Lautsprecher weitere Ein- und Ausgabe: – Vernetzung mit anderen Computern (z.B. über Modem, DSL, Ethernet, Token Ring, ATM, …) – externe Speicher: Festplatte, Diskette, CD, DVD, ...

46 Verarbeitung von Maschinen-Programmen
Die Verarbeitung eines Maschinen-Programms läuft nach dem zyklischen Fetch-Decode-Execute Schema ab: Fetch: Inkrement PC Lade Maschinenbefehl in IR 1. Start: Rechner einschalten Decodieren: Maschinenbefehl aus IR  Folge von Mikrobefehlen Nacheinander in MIR laden Laden der Operanden 2. Execute: Folge von Mikrobefehlen ausführen Ergebnisse speichern (Register) 3. Stop: Rechner ausschalten

47 Beispiel eines einfachen Maschinen-Programms (y=x!)
Adr. Inhalt symbolisch Erläuterung LOAD 959 Setze Acc auf 1 STORE 958 Setze y auf 1 LOAD 957 Lade x in Acc JUMPZ 956 ENDE, falls x = 0 MUL 958 <Acc> * y -> Acc STORE 958 <Acc> -> y LOAD 957 x -> Acc SUB 959 <Acc> - 1 -> <Acc> STORE 957 <Acc> -> x JUMP 949 Ende 957 x Zelle für x 958 undef Zelle für y Hilfsgröße

48 Sprachebenen der Programmierung
Abstraktionsgrad hoch Anwender programmierbar Plattform-unabhängig symbolisch, mit Sprachkonstrukten zur bequemeren Programmierung. Hochsprachen Abbildung auf Anwender programmierbar durch Emulatoren unabhängiger vom verwendeten Prozessor symbolisch => besser lesbar Assembler Abbildung auf Befehle einer virtuellen Maschine Anwender programmierbar prozessorabhängig schwer lesbar (binär) Abbildung auf Maschinen-Befehle Abbildung auf abhängig vom Prozessor elementare Funktionen vom Hersteller programmiert schwer lesbar (binär) Mikro-Befehle niedrig

49 Assembler Trotz der Einführung von Makrobefehlen ist die Programmierung in Maschinen-Sprache wenig komfortabel, da Maschinen-Befehle als Bitfolgen angegeben werden müssen. => Für Menschen sind Maschinen-Programme nur schwer lesbar. => Einführung von: 1. einer symbolischen Notation für Maschinenbefehle Günstig: Verwendung mnemotechnischer Befehlsbezeichnungen. 2. eines Mechanismus, der symbolische Befehlsbezeichnungen in Maschinen-Sprache (d.h., Bitfolgen) übersetzt. Als Assembler bezeichnet man sowohl: 1. eine Sprache bestehend aus Symbolen für Befehle und Zeichen zur Darstellung von Adressen und Konstanten. 2. ein Programm zur Übersetzung von in Assembler formulierten Programmen in Maschinensprache.

50 Assembler Beispiele ARM Prozessor Pentium
.loop ; Mark the loop start position CMP R0, R10 ; Compare R0 with R10 SWINE & ; Not equal: Call SWI &40017 ADDNE R0, R0, #1 ; Add 1 to R0 BNE loop ; Branch to 'loop' MOV R10, #0 ; Equal : Set R10 to zero LDMFD R13!, {R0-R12,PC} ; Return to caller Pentium ; Berechnung von x*x mov eax, DWORD PTR [ebp + 8] ; put x into eax for multiplication imul DWORD PTR [ebp + 8] ; multiply it by x mov DWORD PTR [ebp-4], eax ; save the result in a temporary mov eax, DWORD PTR [ebp-4] ; put it into eax for returning DWORD steht für double word = 2*16 Bit

51 Sprachebenen der Programmierung
Abstraktionsgrad hoch Hochsprachen Abbildung auf Assembler Abbildung auf Befehle einer virtuellen Maschine Abbildung auf Maschinen-Befehle Abbildung auf Mikro-Befehle niedrig

52 Warum höhere Programmiersprachen?
In Maschinensprache bzw. in Assembler lassen sich im Prinzip alle mit einem Programm lösbaren Aufgaben codieren und auf einem Rechner ausführen. Aber - für komplexere Aufgaben werden Assemblerprogramme schnell sehr umfangreich und unübersichtlich => Programm-Entwicklung ist aufwändig => Fehler oft schwer zu finden; Assembler-Programmierung erfordert eine bestimmte Denkweise bei der Problemlösung. (Man muss in Anweisungen, Verzweigungen und Schleifen „denken“). => umständliche Lösungen für gewisse Problemklassen. - Programme in Maschinensprache oder Assembler sind system-abhängig. Wiederverwendung eines Programms auf einem Rechner unterschiedlicher Bauart ist meist nicht möglich, da unterschiedliche Prozessoren unterschiedliche ISA bereitstellen. ISA = Instruction Set Architecture

53 Vorteile höherer Programmiersprachen
Ziel: Verfügbarkeit von Programmiersprachen, die folgende Eigenschaften aufweisen: - einfache Abbildung von Problemlösungen auf Programmcode => schnellere Programmerstellung. - gute Lesbarkeit (wichtig für Wartung) - sichere Programmierung (Vermeidung von Programmierfehlergehler) => schnellere Programmerstellung, weniger Ausfälle - Unabhängigkeit von spezieller Hardware-Plattform => Wiederverwendbarkeit auf vielen unterschiedlichen Rechnern.

54 Höherer Programmiersprachen
Für unterschiedliche Zielsetzungen, Problembereiche und Rechnersysteme sowie für unterschiedliche Basis-Software wurden zahlreiche verschiedene Programmiersprachen entworfen. unabhängig von der Hardware von Rechenmaschinen, d.h. keine umkehrbar eindeutige Zuordnung ihrer Konstrukte zu konkreten Maschinenbefehlen notwendig. D.h. man abstrahiert von der ISA-Ebne des Prozessors, mit dem das Programm letztlich ausgeführt wird. Die Sprachkonstrukte einer höheren Programmiersprache orientieren sich an einem Bedeutungsmodell (Semantik) und an einem bestimmten Problemfeld. Beschreibung der Programmiersprache durch – Syntax: beschreibt die Aufbauregeln für gültigen Programmtext – Semantik: beschreibt die Bedeutung der Sprachkonstrukte Eine in einer höheren Sprache formuliertes Programm muss in ein ausführbares Maschinenprogramm übersetzt werden.

55 Klassen höherer Programmiersprachen
Bei den problemorientierten Programmiersprachen unterscheidet man im Wesentlichen zwischen folgenden Sprachkategorien - imperative Programmiersprachen - funktionale (und applikative) Programmiersprachen - prädikative (deklarative) Programmiersprachen - objektorientierte Programmiersprachen Darüber hinaus lassen sich Hochsprachen nach weiteren Kriterien unterscheiden, z.B.: - Skriptsprachen vs. compilierbare Sprachen - Sprachen für bestimmte Problemklassen (z.B. Graphik-, Web- Programmierung, ...) - Hochsprachen für bestimmte abstrakte Rechnerarchitekturmodelle (z.B. Sprachen für Parallelrechner, Neurocomputer, ...) Sammlung zu Prog. Sprachen

56 Imperative oder prozedurale Programmiersprachen
Genaue Festlegung der Folge von Befehlen an den Computer (lat.: imperare = befehlen, auch: prozedurale oder algorithmische Programmiersprachen) Unterstützen das ablauforientierte Programmieren. Werte werden sog. Variablen (= adressierbare Speicherplätze) zugewiesen. Diese können ihren Zustand ändern, d.h. im Laufe der Zeit verschiedene Werte annehmen. Sprachkonstrukte zeigen z. Teil deutliche Nähe zu Assembler (Bit-orientierte Operationen, Sprünge etc.) typische Beispiele imperativer Sprachen: ADA, ALGOL 60, ALGOL 68, BASIC, C, COBOL, COMAL, ELAN, FORTRAN, Java, MODULA-2, PASCAL, PL/I, SIMULA, SNOBOL ... sowie viele Skriptsprachen

57 Funktionale Programmiersprachen
Programme werden als Funktionen aufgefasst, die eine Eingabe auf eine Ausgabe abbilden. Zu lösende Probleme werden funktional beschrieben, d.h. Beschreibung von Abhängigkeiten zwischen Dingen und Vorgängen der realen Welt Funktionale Programme legen nicht die zeitliche Reihenfolge auszuführender Operationen fest, sondern nur Reihenfolgen aufgrund logischer Abhängigkeiten. Vorteil: Bei der Formulierung funktionaler Programme kann man sich weitgehend an der logischen Struktur des zu lösenden Problems orientieren => „natürlichere“ (elegantere) Lösungsformulierungen Nachteil: Es ist schwierig, beim Entwurf funktionaler Programme auf effiziente Ausführbarkeit zu achten. typische Beispiele funktionaler Sprachen: LISP, HOPE, Miranda, ML, Haskell, ...

58 Prädikative Programmiersprachen
In prädikativen Sprachen bestehen Programme aus einer Mengen von Fakten (gültige Prädikate) und Regeln. Die Regeln geben an, wie man aus Fakten neue Fakten gewinnt. Man formuliert zunächst "eigenes Wissen" über das Problem in Form von Fakten und Regeln. Der Rechner versucht, durch Anwendung von Regeln auf Fakten die (eine) Lösung des Problems herzuleiten. Geeignet für Probleme, die sich einfach in einem logischen Kalkül formulieren lassen. typische Beispiele prädikativer Sprachen: Prolog, Mozart, CLISP, JESS, ... In deklarativen Sprachen entspricht ein Programm einer Menge von Datendefinitionen und darauf bezogenen Abfragen (Deklarationen). Als Basis für die Definitionen dient z.B. die Relationen-Theorie. Beispiel: SQL (für Datenbank-Anfragen)

59 Objektorientierte Programmiersprachen
Meist imperativ jedoch mit einem Objekt-Konzept als zentrales Strukturierungskonstrukt. Objekte haben zugeordnete Eigenschaften (Attribute) und Methoden (Prozeduren) und werden zu Klassen gleichartiger Objekte zusammengefasst. Wesentliche Konzepte sind: – Geheimnisprinzip: Zugriff auf Objekte nur über "Botschaften„ (Aufruf zugeordneter Methoden) – Vererbungsprinzip: Eigenschaften können von einer Klasse an Unterklassen vererbt werden. – dynamische Bindung: Zuordnung von Methoden zu Objekten erfolgt dynamisch zur Laufzeit. Unterstützen die systematische, modulare Programmentwicklung Beispiele: SIMULA-67, SMALLTALK-80, Eiffel, C++, C#, Oberon, Delphi, Java, PYTHON,...

60 Historische Entwicklung der Programmiersprachen
2000 Java Oberon 1990 Turbo Pascal Haskell Eiffel C++ CLOS Miranda Ada Small Talk 1980 Modula CLU ALPHARD ML CHILL C SQL Pascal PROLOG 1970 BCPL PL/ I ALGOL 68 B SIMULA PL 360 BASIC LISP 1960 ALGOL 60 COBOL FORTRAN 1950 Frühe maschinen-orientierte Sprachen

61 Übersicht über Programmiersprachen
Java (’95) objekt-orientiert Haskell (’90) logisch C++ (’84) Modula (’80) Smalltalk (’80) ML (’79) funktional Pascal (’71) C (’72) Prolog (’72) Fortran (’57) Lisp (’60) imperativ Assembler maschinen-nah Bedeutung verschiedener Programmierparadigmen für die Praxis: - Imperative Programmierung stark verbreitet - Objektorientierte Programmierung erlangt zunehmende Bedeutung - Funktionale Programmierung u.a. für Forschung und Künstliche Intelligenz - Logische Programmierung wird von funktionaler Programmierung abgelöst

62 Vergleich von Programmiersprachen nach Ausführungsgeschwindigkeit
Quelle:

63 Zusammenfassung: Ebenen der Programmierung
Mikroprogrammierung – Ausführung von Maschinenbefehlen durch Folge von Mikrobefehlen eines speziellen Prozessors. Meist „Firmware“, die dem Programmierer nicht (bzw. nur schwer) zugänglich ist. Maschinensprache – durch die CPU direkt ausführbare Befehle (Maschinenbefehle) – Darstellung der Befehle in numerischer Codierung (i.a. Binärcodierung) – semantisch niedrigste Ebene der Programmierung einer CPU Assemblersprache – maschinenorientierte Programmiersprache, zur Formulierung von Programmen, die sich an den Eigenarten einer bestimmten Rechnerarchitektur orientieren – ähnliche Strukturen wie Maschinensprache, jedoch mehr Komfort, z.B. durch symbolische Notation (statt numerisch) problemorientierte (höhere) Programmiersprachen (Java usw.) – zur Formulierung von Programmen aus einem bestimmten Anwendungsbereich, unabhängig vom Entwicklungsrechner


Herunterladen ppt "Teil III Vom Rechenwerk zum Computer"

Ähnliche Präsentationen


Google-Anzeigen