Teil III Vom Rechenwerk zum Computer

Slides:



Advertisements
Ähnliche Präsentationen
Vom HW-Automaten zum Prozessor
Advertisements

Programmierung: Einführung
Lösung 7.1 Syntax und Semantik
Zentraleinheit CPU, Motherbord, RAM
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Agenda Die Hardwearkomponenten und ihre Funktionen - Mikroprozessor
Zentraleinheit CPU, Motherbord, RAM
WS 2009/10 1 Systeme 1 Kapitel 1 Aufbau von Rechnern.
Entwicklung der Programmiersprachen
Neumannrechner.
Aufbau und Funktionsweise von Prozessoren
Haupt- und Arbeitsspeicher
Vorlesung 2 Rechnerarchitektur Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 3: Verschiedenes Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Rechnerarchitektur Vorlesung 2 Peter B. Ladkin
1 Vorlesung 3 Verschiedenes Peter B. Ladkin
So arbeitet ein PC.
Duo- und Quad Prozessor-Architektur
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Aufbau eines von-Neumann- Rechners Marcel Waldvogel.
Herzlich willkommen zum Aufbau der Hauptplatine
INTEL Pentium 4 Prozessor
Übersicht: Hardware Zentraleinheit EVA-Prinzip
Programmieren in Assembler
Datenverarbeitung im PC
Eine Übersicht von Margarete Streitwieser
Rechnerarchitekturen
Verarbeitung und Computerinneres
Johann Baron von Neumann
Central Processing Unit (Zentraleinheit)
Aufbau, Funktion und Grundzusammenhänge
Der Prozessor Von Stephan Blum.
Referat von Marcel Poppen & Oliver Lennartz

Von Marcel Poppen & Oliver Lennartz
Objektorientierte (OO) Programmierung
Prozessoren (CPU) Ahmet Aktas, HWI I.
Mario´s kleines Hardwarelexikon Vom Arbeitsspeicher bis zur Soundkarte.
Fragen.  Hardwarekomponenten sind die Bestandteile eines Computers, die Sie sehen und anfassen können.
Praktische Informatik 1
Aufbau und Funktionsweise einer CPU
Programmieren in C Einführung
Eine Präsentation von Sandro Schluep und Leon Wink.
Grundlagen der Informationsverarbeitung
Datentypen: integer, char, string, boolean
Die I/O-Register des Attiny
Motherboard Marko Drinic – 1ahwit.
oder Womit genau ein Prozessor seine Zeit verbringt
Datentypen: integer, char, string, boolean
Programmieren in C Module und Bibliotheken
CPU Furkan Dogan.
So gelingt der digitale Wandel in einem Landwirtschaftsbetrieb
Hardware Ordne die Begriffe den Bildern zu!
Hardware.
Vom Prozessor zum System
Vom HW-Automaten zum Prozessor
Sequential Function Chart
Medizinische Statistik und Informationsverarbeitung
Compiler für Eingebettete Systeme [CS7506]
Die Komponenten Von einem PC.
Arten von Kontrollstrukturen
Programmierung eines Computers (Funktionsweise)
GRUNDLAGEN WISSENSCHAFTLICHEN ARBEITENS MODULA-2 SONAY SUBAYAZ
«Delegierter» Methoden Schablone Funktionszeiger
Kapitel IX: Übertragungsprotokollimplementierungen
Objektorientierte Programmierung
Wissenschaftliches Projekt
Von Wietlisbach, Lenzin und Winter
Web-Mining Agents Planning
 Präsentation transkript:

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

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?

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 15 0 zwei Operanden-Register (A und B) 15 0 Befehls-Register A B 16 16 2 F0 N 2 F1 ALU Z 16 R Status-Register Ergebnis-Register 16

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) 0 0 erg 0 1 left-shift(erg) 0 right-shift(erg) 1 1 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

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.)

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

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)

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

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

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

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

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

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

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

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 0 0 0 0 SH <– A Identitiät (Transfer) 0 0 0 1 SH <– lsh(A) Bits um 1 Stelle nach links schieben 0 0 1 0 SH <– rsh(A) Bits um 1 Stelle nach rechts schieben 0 0 1 1 kein gültiger Befehl 0 1 0 0 SH <– A + B Addition 0 1 0 1 SH <– lsh(A+B) Summe um 1 Stelle nach links schieben 0 1 1 0 SH <– rsh(A+B) Summe um 1 Stelle nach rechts schieben 0 0 0 SH <– A  B Logisch UND ...... ..... ...... DMF's für y1, y2 und y3 ableiten

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 8-11 Adresse des Registers, dessen Inhalt Operand B ist Bit 12-15 Adresse des Registers, in dem das Ergebnis abgelegt wird.

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

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)

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.

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

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.

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.

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

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

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

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 8-11 Adresse des Registers, dessen Inhalt Operand B ist Bit 12-15 Adresse des Registers, in dem das Ergebnis abgelegt wird. Bit 16-21 Steuerung des Memory-Controllers Bit 22-24 Steuerung von Sprüngen Bit 25-31 Adresse, unter dem Befehl abgelegt ist

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

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

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

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

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

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.

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.

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

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

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

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

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

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

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 = 16348 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

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

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.

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

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

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, ...

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

Beispiel eines einfachen Maschinen-Programms (y=x!) Adr. Inhalt symbolisch Erläuterung 946 0001 0011 1011 1111 LOAD 959 Setze Acc auf 1 947 0010 0011 1011 1110 STORE 958 Setze y auf 1 948 0001 0011 1011 1101 LOAD 957 Lade x in Acc 949 1000 0011 1011 1100 JUMPZ 956 ENDE, falls x = 0 950 0101 0011 1011 1110 MUL 958 <Acc> * y -> Acc 951 0010 0011 1011 1110 STORE 958 <Acc> -> y 952 0001 0011 1011 1101 LOAD 957 x -> Acc 953 0100 0011 1011 1111 SUB 959 <Acc> - 1 -> <Acc> 954 0010 0011 1011 1101 STORE 957 <Acc> -> x 955 0111 0011 1011 0101 JUMP 949 956 1001 0000 0000 0000 Ende 957 x Zelle für x 958 undef. Zelle für y 959 1 Hilfsgröße

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

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.

Assembler Beispiele ARM Prozessor Pentium .loop ; Mark the loop start position CMP R0, R10 ; Compare R0 with R10 SWINE &40017 ; 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

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

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

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.

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.

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 http://cgibin.erols.com/ziring/cgi-bin/cep/cep.pl

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

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, ...

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)

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,...

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

Ü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

Vergleich von Programmiersprachen nach Ausführungsgeschwindigkeit Quelle: http://shootout.alioth.debian.org/gp4/benchmark.php

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