Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Fachhochschule Rhein-Sieg Fachbereich Angewandte Informatik Grundlagen Rechnerstruktur und -organisation Vorlesungsunterlage 2-semestrige 2-stündige Vorlesung G. Wagner GMD, 1998 1 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Geschichte der Rechnerarchitektur .............................................................. Definitionen ........................................................................................................................................ 9 Architekturprinzipien ..................................................................................................................... 12 Die von Neumann Maschine oder der Princeton Computer ......................................................................... 18 Komponenten eines Rechners ................................................................................................................... 20 Schaltnetze ............................................................................................................................................ 22 Schaltalgebra ..................................................................................................................................... 22 Codes ................................................................................................................................................ 36 Coder, Decoder ................................................................................................................................. 38 Einfache Schaltnetze ......................................................................................................................... 41 Schaltwerke ........................................................................................................................................... 43 RS- Flipflop ....................................................................................................................................... 45 JK-Flipflop ........................................................................................................................................ 47 JK - Master – Slave Flipflop ............................................................................................................. 48 Register: ............................................................................................................................................ 49 Automaten ............................................................................................................................................. 51 Das Rechenwerk .................................................................................................................................... 55 Rechner – Arithmetik ........................................................................................................................ 55 Polyadische Zahlensysteme: .............................................................................................................. 56 Nichtpolyadische Zahlensysteme ..................................................................................................... 57 Arithmetisch logische Einheit (ALU) ................................................................................................ 61 Eine einfache ALU ............................................................................................................................ 62 Eine mögliche Zentraleinheit: ........................................................................................................... 65 Hardwarebeschreibungssprachen: ......................................................................................................... 67 Kompatibilität der Operanden ............................................................................................................... 70 Normierung und Runden: .................................................................................................................. 70 Abschneiden .................................................................................................................................. 71 Normales Runden .......................................................................................................................... 71 Jamming ........................................................................................................................................ 71 R* - Runden................................................................................................................................... 71 Struktur eines RSA: ........................................................................................................................... 71 Multiplikation:................................................................................................................................... 79 Division ......................................................................................................................................... 80 Beschleunigungen: ................................................................................................................................ 80 Das Steuerwerk ..................................................................................................................................... 82 Allgemeines ....................................................................................................................................... 82 Mikroprogramme .............................................................................................................................. 85 Semaphoren: ...................................................................................................................................... 90 Die Befehlsabarbeitung (Befehlszyklus) ................................................................................................... 92 Pipelining .............................................................................................................................................. 92 Hazards.............................................................................................................................................. 94 Struktur-Hazards ........................................................................................................................... 96 Daten - Hazards ............................................................................................................................. 98 Bypassing: ................................................................................................................................. 98 Steuer-Hazards ............................................................................................................................ 107 Verzweigeverhalten in Programmen........................................................................................ 109 Reduzierung der Pipeline-Verzweigungsverluste .................................................................... 109 Adressierungsmodi .............................................................................................................................. 114 Registeradressierung: ...................................................................................................................... 114 Speicheradressierung: ...................................................................................................................... 114 RISC Prozessoren (Reduced Instruction Set Computer) ..................................................................... 125 Das Speicherwerk ................................................................................................................................ 126 Speicherverwaltung ......................................................................................................................... 126 Lineare Speicherverwaltung ........................................................................................................ 127 Paging............................................................................................. Error! Bookmark not defined. 2 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Virtuelle Adressierung .................................................................................................................... 129 Speicherhierarchien ............................................................................................................................. 135 E/A-Werk und Kommunikation .......................................................................................................... 139 Direkte Kopplung ............................................................................................................................ 139 Kanalkopplung ................................................................................................................................ 139 Speicherkopplung ............................................................................................................................ 139 Bussysteme ...................................................................................................................................... 140 Zentrale Bussteuerung ..................................................................................................................... 141 Dezentrale Steuerung ...................................................................................................................... 144 Protokolle ........................................................................................................................................ 146 Leistungsbewertung ............................................................................................................................. 150 Beobachtende Leistungsbewertung (Monitoring) ................................................................................ 157 Parallele Rechnerstrukturen................................................................................................................. 159 SIMD Rechner ................................................................................................................................ 159 MIMD Rechner .............................................................................................................................. 159 Vektorrechner .............................................................................................................................. 161 SIMD Rechner ................................................................................................................................ 162 Verbindungsnetzwerke (VN): ...................................................................................................... 166 Verbindungsaufbau: .................................................................................................................... 168 Arbeitsweise: ............................................................................................................................... 168 Topologie: ................................................................................................................................... 168 Statische Verbindungsnetzwerke : ................................................................................................... 168 N2............................................................................................................................ 169 N-1 .......................................................................................................................... 170 Topologien statischer VN........................................................................................................... 170 Dynamische Verbindungsnetzwerke: .......................................................................................... 171 Abb. Schaltfunktionen des shuffle Netzwerkes ...................................................... 174 3 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Architektur und Organisation von Rechensystemen: (Vorlesungsvorlage) Geschichte der Rechnerarchitektur (aus: Weizenbaum, Haefner: Sind Computer die besseren Menschen? Ein Streitgespräch, Piper Verlag, 1992) Die Idee, daß alle Naturprozesse und so auch das menschliche Denken ein physikalischer Prozeß und demnach nachzubilden sein müßten, ist so alt wie die mit der Philosophie der Antike beginnende abendländische Kultur. Sie wurde mit dem Beginn der aufgeklärten Neuzeit konkret: die Natur - eine Maschine? Descartes schnitt sie etwa in seiner „Universalsprache der Logik“ an, und auch der deutsche Philosoph Gottfried Wilhelm Leibniz warf sie auf. Seine Überlegungen kreisten um das neue System einer binären, also zweiwertigen Logik, mit der sich sämtliche Operationen der am Dezimalsystem orientierten, allgemeinen Mathematik nachvollziehen lassen sollten. Die Gedankenspielerei von Leibniz brachte aber auch eine Rechenmaschine hervor, die neben Blaise Pascals Addiermaschine oder der „analytical engine“ des Briten Charles Babbage als ein mechanischer Vorläufer des elektronischen Rechners gelten kann. Babbage hatte seine Maschine in den 30er Jahren des vorigen Jahrhunderts zu dem Zweck konzipiert, die Versicherungsmathematik zur Berechnung des Risikos zu vereinfachen. Zusammen mit seiner Assistentin Lady Augusta Ada, der Tochter Lord Byrons, kam er auf die Idee, einer Maschine die Daten für die Berechnungen erstmals in der Geschichte der angewandten Mathematik - auf Lochkarten einzuspeisen. Diese Art der Programmierung hatte er bei den neuartigen mechanischen Webstühlen abgeschaut, die in England entscheidend zum Ausbruch der industriellen Revolution beigetragen hatten. Die Lochkartentechnik sollte in der Folgezeit für die Statistik, die Buchhaltung und Unternehmensplanung, aber auch zur Planung der Kriegswirtschaft und vor allem bei der Durchsetzung des nationalsozialistischen Überwachungsapparates eine wichtige Rolle spielen. Kaum 10 Jahre nach Babbage und Lady Ada, in der Mitte des 19. Jahrhunderts, entwickelte ein Landsmann der beiden, George Boole, mit der formalen Logikjenes System, nach dem heute alle Computer arbeiten. In seiner Arbeit „Die Gesetze des Denkens“ wollte Boole über ein reines Rechensystem hinaus eine „Mathematik des menschlichen Verstandes“ zeichnen, „die Grundgesetze jener Geistesvorgänge untersuchen, durch die Vernunftschlüsse gezogen werden: ihnen in der symbolischen Sprache eines Kalküls Ausdruck verleihen“ (Zit. nach: Hanson, 1984, S. 59). Boole erkannte, daß man mit einer einfachen Kombinationslogik nach Art der von Leibniz entworfenen binären Algebra nicht nur Zahlen addieren, sondern, bei entsprechender Komplexität einer Datenverarbeitungsmaschine, auch Logik ausdrücken kann. In der formalen Logik der Boolschen Algebra werden Aussagen und deren Verknüpfungen mit wahr oder unwahr bewertet, und diese Bewertung mit plus oder minus, Eins oder Null bezeichnet. Die Entscheidung für einen dieser beiden Werte 4 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ gilt als Information; in der Computersprache wird diese Information bit (binary digit) genannt; sie bezeichnet bis heute die Speicherkapazität der Computer. So kann jede der Aussagen “heute ist Samstag“ (a), „es ist Markt“ (b), „ich kaufe ein“ © jeweils nur wahr oder unwahr sein. Das gilt auch für das Ergebnis einer Verknüpfung zweier oder mehrerer solcher Aussagen. Die zusammengesetzte Aussage a und b ist nur in dem Fall wahr, wenn sowohl Samstag als auch Markt ist, wenn a und b also zutreffen. An diese neue „wahre“ Aussage läßt sich nun als dritte Aussage „ich kaufe ein“ hängen, und dann wieder entscheiden, ob dies wahr oder unwahr ist. Die Verknüpfung „oder“ macht die Gesamtaussage dann wahr, wenn mindestens eine der Teilaussagen stimmt, also wenn Samstag ist oder Markt - kaufe ich ein. Das „nicht“ schließlich kehrt den Wahrheitswert einer Aussage um, aus wahr wird unwahr, aus Plus Minus. Für die logische Verknüpfung jeder Aussage benutzte Boole die Operatoren „und“ / „oder“ /“nicht“ (ähnlich wie die in der Mathematik gängigen Operatoren +/-/*/:). Ausgangspunkt waren also bei Boole Aussagen, die nur zwei Möglichkeiten offenließen: wahr oder unwahr respektive Eins oder Null und Plus oder Minus. Mit dieser Zweiwertigkeit läßt sich alles mögliche kodieren und als Information darstellen, zum Beispiel die in Buchstaben-Sequenzen aufgelösten Wörter und Sätze. Nach Auffassung der gläubigen Sendboten der zweiwertigen Logik müßte sich gar das gesamte Universum in den binären Code zwingen lassen - auch bislang noch rätselhafte Facetten der menschlichen Geistesleistungen: Geist, Humor, Intuition etwa. Bei der Anwendung dieser Logik sind für die einzelnen Operationen ungeheuer lange Ketten von zweiwertigen Befehlen notwendig; die Computer haben sich trotz ihrer inzwischen ungeheuren Leistungsfähigkeit nicht von dieser Logik entfernt: Die zu ihrer Steuerung entwickelten Programme gehen auf die boolsche Mathematik zurück. Denn für die Computerentwicklung war diese zweiwertige „mathematische Logik“ deshalb bahnbrechend, weil die zwei Aussagewerte auch Plus oder Minus sein können wie in der Elektrizität, wo digitale Schaltungen gesteuert werden: Je nachdem, ob Strom fließt oder kein Strom fließt, sind sie geöffnet oder geschlossen. Der erste Konstrukteur, der die Eigenschaften der Elektronik zur Umsetzung der zweiwertigen Logik nutzte, war der Deutsche Konrad Zuse. Dem Tüftler war bei den stupiden Berechnungen während seines Bauingenieurstudiums Ende der 20er Jahre der Gedanke an eine Rechenmaschine gekommen. 1936 konnte der 26jährige an die Verwirklichung seines Traumes gehen und eine Maschine bauen - um, so eine Eintragung in sein Tagebuch im Jahre 1937, „sämtliche Denkaufgaben zu lösen, die von Mechanismen erfaßbar sind“ (Zuse 1970, S. 68). In der Berliner Wohnung seiner Eltern hatte er mit Hilfe von Studienkameraden bald seine - aus Kosten- und Platzgründen noch ganz mechanische - Z1 gebaut. In einer Weiterentwicklung, der 1940 fertiggestellten Z2, benutzte er bereits das Relais, mechanisch funktionierende Elektroschaltungen also, um die digitalen Rechenoperationen auf seiner Maschine zu beschleunigen. 1941 stellte er schließlich die nur noch mit elektrischen Relais arbeitende Z3 fertig. Auch soll er die Verwendung von Vakuumröhren erwogen haben, dem späteren Herzstück der ersten Generation von Computern, doch schienen sie ihm zu unzuverlässig. Die Nazis erkannten die Bedeutung des digitalen, programmgesteuerten Rechenautomaten nicht, obwohl das Militär, namentlich die Artillerie, die Berechnung 5 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ ballistischer Kurven für großkalibrige Geschosse mit sehr großer Reichweite nicht effizient zu lösen vermochte. Und der Staatsbürokratie genügte zur Verwaltung ihres Apparats die in den 20er Jahren weit verbreitete mechanische Lochkartentechnik. Der erste Röhrenrechner entstand, angestoßen durch die Erfordernisse des Krieges, nach 1940 auf dem Herrensitz Blechley bei London. Dort fand sich eine bunte Truppe von Wissenschaftlern zu dem Projekt Ultra zusammen: Kryptographen, Literaturprofessoren, Mathematiker und Fachleute aus allen möglichen Disziplinen versuchten hier, die über die deutsche Chiffriermaschine Enigma laufenden Nachrichten zu entschlüsseln. Die Maschine, von der ein Exemplar aus Polen geschmuggelt worden war, galt als absolut sicher. Um alle Verschlüsselungsoptionen von Enigma durchzurechnen, schätzte der Mitkonstrukteur Arthus Scherlius, hätte ein einzelner Mensch 42.000 Jahre rund um die Uhr rechnen müssen. Unter dem Team in Blechley befand sich auch der junge Mathematiker Alan Turing. Er hatte 1936 in seiner Abhandlung „On Computable Numbers with an Application to the Entscheidungsproblem“ eine imaginäre Maschine entworfen, die mit Symbolen arbeiten sollte, die auf Papierstreifen gestanzt waren. Das Projekt Ultra wurde zu einer erfolgreichen, wenn auch auf das Dechiffieren eingeschränkten Spielwiese für seine neuartige Idee. Mit Hilfe eines noch primitiven Relaissystems mit dem Codenamen Bombe ließen sich Funksprüche analysieren und teilweise auch entschlüsseln. 1943 stellte das Team dann den Rechner Colossus fertig. Nach Turings Konzept gebaut, wurde das Ungetüm mit seinen 1500 Röhren der erste funktionsfähige Röhrencomputer der Welt. In den letzten beiden Kriegsjahren knackten die Engländer mit Hilfe dieses Spezialcomputers deutsche Enigma-Codes. Der erste amerikanische Computer war ein gewaltiges, mit 17.000 Elektronenröhren bestücktes und 30 Tonnen schweres Monstrum namens Eniac (Electronic Numerical Integrator and Computer) des Mathematikers John Mauchley und des Elektronikers J.P. Eckert. Sie konnten 1943 das Pentagon davon überzeugen, einen Röhrenrechner zu bauen, der die ballistischen Berechnungen weit schneller durchführen könnte als die schwerfälligen semimechanischen Relaisrechner, wie der 1944 fertiggestellte Mark I. Doch Eniac wurde quasi ein verspätetes Abfallprodukt des Zweiten Weltkriegs: Nach einigen Probeläufen ging er erst 1946 an der Universität von Pennsylvania in Betrieb. Jene Maschine konnte die bahnbrechende, 1945 von dem Mathematiker John von Neumann entwickelte Speicherprogrammierung noch nicht nutzen. Diese Methode bot erstmals die Möglichkeit, komplizierte Rechenprozesse nach logischen Regeln und Befehlen abwickeln zu lassen eine enorme Aufwertung für die nun Software genannten Prozeßabläufe in den kompliziert verkabelten Rechenanlagen, der Hardware. Bei Eniac hatte noch eine Truppe von Mathematikerinnen, die „EniacGirls“, wie Telephonistinnen durch Stöpseln die verschiedenen Verbindungen herstellen müssen. In den Von - Neumann - Maschinen - 1949 wurde mit Edsac in Großbritannien die erste von ihnen gebaut - war nun auch die Architektur der Rechner festgelegt und nicht mehr von verschiedenen Steckverbindungen abhängig. In den neuartigen Rechnern arbeitete ein Rechenwerk und ein Steuerwerk - die Grundstruktur des sogenannten Prozessors -, mit einem internen (heute: Arbeitsspeicher) und einem externen Speicher. Mit dieser Struktur waren die Rechner auf eine sogenannte 6 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ serielle Arbeitsweise festgelegt, bei der die Aufgaben nacheinander zu je einer anderen zeit erledigt werden (dieses Konzept wird erst derzeit mit „Parallelrechnern“ genannten Konstruktionen aufgebrochen). Durch die serielle Abwicklung wirken die Programme wie festgelegte, gleichbleibende Prozeduren, die der Rechner bei seiner Arbeit jedesmal abfragen und zu Hilfe nehmen kann. Sie verkürzen die Rechenzeit erheblich. Die Amerikaner nutzten Eniac und die folgenden Rechner bei der Fortentwicklung der Atombombe.; als dann der Krieg gewonnen war, hatte das Pentagon das große Interesse an der aufwendigen Computerei verloren. Die zivile Entwicklung ging nur schleppend weiter; immerhin, 1951 wurden beim neuen Rechner Univac I die Lochkarten von Magnetbändern abgelöst. Doch erst der Kalte Krieg, vor allem aber der Sputnik - Schock weckte das Staatsinteresse Mitte der 50er Jahre erneut. 1958 gründete Präsident Eisenhower, jener eiserne Staatsmann, der am Ende seiner Amtszeit unvermittelt vor der macht der Rüstungsindustrie warnte, die „Advanced Research Projects Agency“ (Arpa), die Anfang der 70er Jahre ihren Namen in „Defense Advanced Research Projects Agency“ (Darpa) wandelte. Sie sollte die militärische Grundlagenforschung koordinieren und die Mittel bereitstellen. Die Erforschung der Computer-Möglichkeiten machte nun wieder rasant Fortschritte; man entwickelte die Idee der Künstlichen Intelligenz und neue Möglichkeiten der militärisch reizvollen Miniaturisierung der Rechner. Als sich 1970 das politische Klima langsam wandelte, und drei liberale Abgeordnete im US-Senat sich mit dem Begehren durchsetzten, die militärische Forschung zu reglementieren, hatte sich die Computerwelt radikal verändert: 1968 war der junge Ingenieur Gilbert Hyatt - und offenbar nicht, wie sich nach 20jährigem Rechtsstreit herausstellte, der Stanford-Ingenieur Ted Hoff vom damals neu gegründeten Elektronik Konzern Intel - auf die Idee gekommen, hunderte von miniaturisierten Transistoren auf einer nur wenige Quadratmillimeter großen Silizium-Leiterplatte (Chip) zu vereinen. Ob nun Gilbert Hyatt oder Ted Hoff das Erstgeburtsrecht besitzt: die kommerzielle erfolgreiche Verwertung dieser Idee präsentierte Intel Ende 1970 mit seinem Mikroprozessor. Tatsächlich konnte dieser eine Chip über elektrische Impulse immer wieder andere Anweisungen entgegennehmen und darum wie ein eigenständiger Computer funktionieren. ....... Der Chip wurde nun in alle möglichen Geräte eingebaut, in Armbanduhren, Kaffemaschinen und auch Autos. Eine weitere, viel spezifischere Verwendung drängte sich auf. Bald nachdem die Intel-Chips auf dem Markt waren, kamen Informatik Studenten auf die Idee, einige der an sich für die Großrechner produzierten Siliziumplättchen zusammenzustecken und sie mit Befehlsketten zu füttern, die in einfachen Programmiersprachen gehalten waren. Hierfür eignete sich die 1965 entworfenen, relativ einfache Sprache Basic (Beginners All-Purpose Symbolic Instruction Code), die konzipiert worden war, um Lernwilligen den Zugang zum Computer zu erleichtern. ......... Durchschlagenden Erfolg hatte schließlich Ende der 70er Jahre der HarvardStudent Bill Gates als er zusammen mit seinem Freund Paul Allen in wochenlanger Arbeit die Basic-Sprache neu konzipierte. Das Produkt vermarkteten sie über ihre neu gegründete Firma Microsoft; fünf Jahre später war sie zur weltweit größten Software Firma aufgestiegen....... 7 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Mit der Entwicklung in der Mikroelektronik hat auch die Entwicklung von Rechensystemen einen stürmischen Verlauf genommen. Während die Leistungen der Chips und Bauelemente erheblich gestiegen sind, gaben die Preise nach. Dies führte zu einem unvergleichlich hohen Umsatz bei rasant steigendem Wettbewerb. 8 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Definitionen Was verstehen wir unter Rechnerarchitektur ? Wenn wir von Rechnerarchitektur sprechen, betrachten wir die Hardware eines Rechners und das Zusammenwirken ihrer Komponenten mit Hilfe von Firmware und Software. Dabei beziehen sich die Überlegungen zunehmend auf Systeme, in die auch mehrere leistungsfähige Prozessoren integriert sind. Wir definieren also moderne Rechnerarchitektur als die Synthese von Struktur, Organisation und den zugehörigen Algorithmen. Die Kommunikation zwischen den Moduln eines Rechnersystems ist sicherlich Bestandteil des Systems. Die Hauptaufgabe eines Rechensystems ist nicht das Rechnen, sondern das Sammeln, Speichern, Verarbeiten und die Präsentation von Daten. Datenbanksysteme sind ein passendes Beispiel: hier wird nicht in erster Linie gerechnet, sondern geeignet gesammelt, sortiert und die Ergebnisse für den Benutzer aufbereitet. Die oben angegebenen Algorithmen arbeiten dabei im Hintergrund: sie adressieren in geeigneter Weise die Daten in den Speichern, bestimmen die Sequenz der zu durchlaufenden Schritte während einer Abfrage und stellen die Ergebnisse für den Benutzer der Anlage in lesbarer Form dar. Diese erwähnten Algorithmen werden vom Programmierer über ein Programm formuliert. Es versteht sich, daß auch Sortiervorgänge und dergleichen Rechenoperationen auf den Datenstrukturen bedingen. Definitionen: (nach Giloi: Rechnerarchitektur) Eine Berechnung besteht in einer Folge von Transformationen, durch die eine Quelldarstellung über eine Folge von Zwischendarstellungen in eine Enddarstellung überführt wird. Daten sind Träger der Information, die von einer Rechenanlage gesammelt, gespeichert, verarbeitet und dargestellt wird. Die im Zusammenhang mit dem Berechnen auftretenden Datenmengen sind üblicherweise in irgendeiner Form strukturiert. Eine solche strukturierte Datenmenge wollen wir Datenstruktur nennen. Nach Giloi wird die Folge von Transformationen beim Berechnen notwendig durch die extreme Verschiedenartigkeit der Quelldarstellung, das ist die Darstellung, die der Programmierer oder die Programmiererin liefert und die Darstellung, die die Hardware versteht und bearbeiten kann. Die Daten des Programmierers sind strukturierte Mengen von Zahlen oder Zeichen, die transformierenden Algorithmen werden beschrieben als eine Folge von Anweisungen, die zum Teil Organisationsanweisungen sind, zum Teil Ausführungsanweisungen für numerische oder logische Operationen. Die Objekte der Hardware sind Bitketten, d.h. Vektoren mit zweiwertigen Elementen. Die von der Hardware ausgeführten Operationen sind elementare logische Verknüpfungen. Die Folge von Transformationen von Darstellungen führt zu einer Hierarchie von Interpretationssystemen, wobei wir unter einem Interpretationssystem folgendes verstehen wollen: 9 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Ein Interpretationssystem ist ein geordnetes Paar (L,P), wobei L eine Sprache und P ein (abstrakter) Prozessor ist, durch den Darstellungen in L transformiert werden können. Ein Rechensystem enthält mehrere Interpretationsebenen. Damit wird die notwendige Existenz auch von mehreren entsprechend geschichteten Intepretationssystemen begründet. Unter einem solchen geschichteten Interpretationssystem verstehen wir eine Folge (L0,P0) (L1,P1)(L2,P2)....(Ln-1, Pn-1) . Der Prozessor P kann dabei als Übersetzer oder auch Interpreter arbeiten. Erklärung: Wenn Pi ein Übersetzer ist, dann besteht die Bearbeitung einer Darstellung in Li durch Pi in der Erzeugung einer neuen, vollständigen Darstellung in Li+1. Falls Pi ein Interpreter ist, dann besteht die Bearbeitung einer Darstellung in L i durch Pi in der Erzeugung einer Zwischendarstellung in Li+1, die eine Bearbeitung der Darstellung in Li durch den Prozessor Pi+1 erlaubt. Der Unterschied zwischen der übersetzenden und der interpretierenden Arbeitsweise des Prozessors besteht also darin, daß im ersten Fall aus einer Darstellung in L i durch Pi eine vollständige Darstellung des gleichen Programms in Li+1 erzeugt wird, während im zweiten Fall z.B. nur die Kontrollanweisungen der Darstellungen in Li durch Pi interpretiert werden mögen. Mit dieser Vorgehensweise über die geschichtete Hierarchie von Interpretationssystemen gelangen wir nur dann zu einer einfachen Kette von hintereinandergeschalteten Blöcken, bei der die Ausgabegröße eines Blocks die Eingabegröße des nächsten Blocks in der Hierarchie ist, wenn alle Prozessoren als Übersetzer arbeiten. Irgendwo in dieser Hierarchie liegt die Grenzlinie zwischen Hard- und Software. Dabei werden die Elemente der Folge (Li+1,Pi+1) bis (Ln-1,Pn-1) immer in Hardware, die vorhergehenden in Software realisiert. Es ist direkt einleuchtend, geht man von realen Systemen aus, daß die Menge der durch Hardware realisierten Prozessoren nie leer sein kann. Wo die Grenze zwischen Hard- und Software in einem System zu ziehen ist, hängt von der Architektur des Rechnersystems ab. Die Organisation eines Rechnersystems legt fest, wieviele Ebenen von Interpretationssystemen innerhalb der Rechner-Hardware zu unterscheiden sind. Ein übliches Schichtenmodell ist das des von Neumann Computers: 1. 2. 3. 4. 5. Höhere Programmiersprache Assembler Betriebssystem Maschinensprache Hardware und Resultate Dabei verstehen wir unter einem Betriebssystem (OS-operating system) eines Computers einen abstrakten Prozessor, der als Interpreter arbeitet und den Betrieb der Rechenanlage überwacht und steuert. Unter einer Maschinensprache verstehen wir die Menge der Anweisungen an die Maschine, wie man sie im Prozessorhandbuch der Maschine erläutert findet. Die Programmdarstellung in dieser Sprache wird durch den Assembler erzeugt. Unter einer Mikroprogrammsprache verstehen wir die Menge der Mikroinstruktionen, mit denen die Mikroprogramme zur Ausführung der Operationen der konventionellen Maschinensprache formuliert werden. Ein Mikroprogramm besteht aus einem oder mehreren Mikrobefehlen. 10 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Unter einem Mikroprogramm wollen wir die Darstellung eines Hardware-Algorithmus eines Prozessors verstehen; d.h. eines Algorithmus, der direkt von Funktionseinheiten der Prozessor-Hardware ausgeführt wird und damit eine Maschinenoperation ausführt. Ein Mikroprogramm kann fest verdrahtet sein, aber auch in einem Mikroprogrammspeicher aufgehoben werden. Dieses Programm nennt man dann auch Firmware. Im folgenden werden grundlegende Definitionen eingeführt (siehe auch: Giloi, Rechnerarchitektur): Rechnerarchitektur: Eine Rechnerarchitektur ist bestimmt durch ein Operationsprinzip für die Hardware und die Struktur ihres Aufbaus aus den einzelnen Hardware-Betriebsmitteln. Operationsprinzip: Das Operationsprinzip definiert das funktionelle Verhalten der Architektur durch Festlegung einer Informationsstruktur und einer Kontrollstruktur (Hardware-) Struktur: Die Struktur einer Rechnerarchitektur ist gegeben durch Art und Anzahl der Hardware- Betriebsmittel sowie den Regeln für die Kommunikation und Kooperation zwischen ihnen. Informationsstruktur Die Informationsstruktur einer Rechnerarchitektur wird durch die (semantischen) Typen der Informationskomponenten in der Maschine bestimmt, der Repräsentation dieser Informationskomponenten und der Menge der auf sie anwendbaren Operationen. Die Informationsstruktur läßt sich als eine Menge von abstrakten Datentypen definieren. Kontrollstruktur: Die Kontrollstruktur einer Rechnerarchitektur wird durch Spezifikation der Algorithmen für die Interpretation und Transformation der Informationskomponenten der Maschine bestimmt. Hardware-Betriebsmittel: Hauptsächliche Hardware-Betriebsmittel einer Rechnerarchitektur sind Prozessoren, Speicher, Verbindungseinrichtungen (Busse, Kanäle, Verbindungsnetzwerke) und Peripheriegeräte. Kommunikations- und Kooperationsregeln: Die Kommunikationsregeln werden gegeben durch die Protokolle, die den Informationsaustausch zwischen den Hardware-Betriebsmitteln regeln. Die Kooperationsregeln legen fest, wie die Hardware-Betriebsmittel zur Erfüllung einer gemeinsamen Aufgabe zusammenwirken. (Beispiele: Master Slave Prinzip, kooperative Autonomie) 11 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Benutzerschnittstelle einer Rechnerarchitektur: Die Benutzerschnittstelle einer Rechnerarchitektur besteht aus der Sprache, in der der Benutzer dem Betriebssystem Anweisungen erteilen kann, den auf dem System verfügbaren Programmiersprachen und den Direktiven zur Benutzung der Anlage. Architekturprinzipien Nach Flynn gibt es vier Klassifikationen von Rechnern: 00: 01: 10: 11: Single Instruction Single Instruction Multiple Instruction Multiple Instruction Single Data (SISD) Multiple Data (SIMD) Single Data (MISD) Multiple Data (MIMD) Was ist ein Prozessor? Was ist ein Verarbeitungselement ? Nach Giloi ist ein Prozessor oder Verarbeitungssystem ein Hardware-Betriebsmittel, welches autonom sowohl den Programmfluß steuern als auch die datentransformierenden Operationen des Programms ausführt. Im Gegensatz dazu nennen wir ein Hardware-Betriebsmittel, welches die datentransformierenden Operationen zwar ausführt, jedoch nicht den Programmfluß steuert und damit auch nicht autonom ist, sondern von außen gesteuert werden muß, ein Verarbeitungselement. Wir unterscheiden vier Architekturprinzipien: Einprozessorsysteme (serielle Verarbeitung) Arrays von gleichartigen Verarbeitungselementen (Feldrechner) Pipelinerechner Multiprozessorsysteme (Parallelverarbeitung9 Anhand eines Beispiels wollen wir diese vier Prinzipien nun vorstellen. Dazu soll uns n die Berechnung eines Skalarproduktes a (i )b(i ) i 1 dienen und eine Abschätzung für den Zeitaufwand gemacht werden: Einprozessorsysteme stellen die klassischen Rechnersysteme dar. PCs sind z.B. solche Einprozessorsysteme. Alle von-Neumann Rechner sind von diesem Typ. Bei der seriellen Verarbeitung wird zu einem definierten Zeitpunkt ein Befehl ausgeführt. Bei der Berechnung des oben angegebenen Beispiels wird zunächst das Produkt a(i) *b(i) berechnet und dann zur Zwischensumme addiert. Der Startwert für 12 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ die Summe ist Null. Es werden hierbei n Multiplikationen und n Additionen, insgesamt also 2n Zeitschritte für die Berechnung benötigt. Man sagt dazu auch, die Komplexität der Berechnung beträgt O(n). Die untenstehende Abbildung verdeutlicht das Verfahren: 0 a(1) b(1) a(2) b(2) a(3) b(3) a(4) b(4) Zeit Operation * Operation + Resultat Serielle Verarbeitung Arrays von gleichartigen Prozessorelementen, Feldrechner: Bei diesen Rechnern sind die Verarbeitungselemente zu einem ein- oder mehrdimensionalen Array verbunden. Das bedeutet, daß jedes Element nur mit seinem nächsten Nachbarn verbunden ist. Die Steuerung, man spricht auch vom Leitwerk, ist nur einmal vorhanden und steuert damit als master alle Verarbeitungseinheiten im Gleichtakt. Bei der Verarbeitung eines Befehls können Teile der Verarbeitungselemente ausgeblendet werden, d.h. sie nehmen an der Befehlsausführung nicht teil. Das Beispiel Skalarprodukt führt hier zu einem Verarbeitungsbaum: 13 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ a(1) b(1) a(2) b(2) a(3) b(3) a(4) b(4)....... Zeit Resultat Feldrechner Verarbeitung Die Komplexität der bekannten Aufgabe läßt sich hier beim Feldrechner auf O (log n) reduzieren. Pipelines: Pipelines sind in der Regel eindimensionale Anordnungen aus Verarbeitungselementen, die meist stärker spezialisiert sind als die Verarbeitungselemente eines Arrays. Es gibt aber auch Pipelines, die aus universellen Prozessoren aufgebaut sind. Der Unterschied zwischen einem Array und einer Pipeline von Verarbeitungselementen ist, daß im ersten Falle alle Elemente in einem bestimmten Rechenschritt dieselbe Operation ausführen, während sie im zweiten Falle in der Regel verschiedene Operationen ausführen. Dabei ist die (Arithmetisch Logische Einheit, Verarbeitungselement) ALU in Funktionseinheiten aufgespalten, die unabhängig voneinander arbeiten können. Die CD6600 (Control Data) hatte z.B. 10 Verarbeitungselemente z.B. für die Addition, die Multiplikation, Komplementbildung, Shifts (Schiebeoperationen) etc. Allerdings werden die verschiedenen Verarbeitungseinheiten nur in wenigen Fällen immer zu 100% (parallel) ausgenutzt. Eine Aufgabe wird also in mehrere kleine Teilaufgaben zerlegt, die mögliche gleiche oder vergleichbare Verarbeitungszeiten aufweisen und dann hintereinander ausgeführt. Die Automontage ist ein gutes Beispiel für das Pipeline - Prinzip. Betrachten wir nun als weiteres Beispiel die Gleitpunktaddition. Sie läßt sich in vier Teiloperationen zerlegen: den Exponentenvergleich und Mantissenanpassung Mantissenaddition 14 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Normieren des Ergebnisses Runden Wir erhalten eine Pipeline mit vier Verarbeitungsschritten: Operand 1 Expon. vergleichen. Mantisse. anpassen Operand 2 Mantissenaddition *1 *2 Normieren Runden *3 *4 Gleitpunktaddition Ähnlich lassen auch die anderen Operationen zerlegen. Gehen wir von einer Multiplikation aus, so ergibt sich als Teiloperation der Multiplikation: Dabei ist zu beachten, daß die Verarbeitungszeit pro Sachritt wesentlich kleiner ist als in den beiden vorhergehenden Zeitdiagrammen. Das Pipeline - Konzept ist nur dann von Vorteil, wenn eine große Zahl gleichartiger Operationen hintereinander ausgeführt wird. 15 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ a(1) b(1) a(2) b(2) a(3) b(3) a(4) b(4) Zeit *1 *2 *3 *4 zur Additions Pipeline Pipelineprinzip Das Multiprozessor Prinzip: Multiprozessor Systeme bestehen aus mehr als einem Prozessor. Sie heißen homogen, wenn alle Prozessoren hardwaremäßig gleich aufgebaut sind, sonst inhomogen. Sind den einzelnen Prozessoren im System verschiedene Rollen zugeteilt, so nennt man das System asymmetrisch. Sind jedoch die Prozessoren bezüglich ihrer Rollen im System austauschbar, so nennt man das System symmetrisch. (Ein symmetrisches System muß übrigens auch homogen sein, aber nicht umgekehrt. Schlechthin sprechen wir von einem Multiprozessorsystem, wenn es eine zentrale Systemaufsicht gibt. Bei Multiprozessorsystemen ohne zentrale Systemaufsicht sprechen wir von einem verteilten System. Hierbei arbeiten die einzelnen Prozessoren autonom, kommunizieren aber miteinander. Die Prozessoren führen zu einem bestimmten Zeitpunkt im allgemeinen unterschiedliche Befehle aus, die ihnen vor der Ausführung durch einen Zentralprozessor, den Steuerungsprozessor zugeteilt werden. Nach ihrer Abarbeitung müssen sich die Prozessoren wieder synchronisieren. Für unser Beispiel des Skalarprodukts gehen 16 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ wir von vier Prozessoren aus. Die Berechnung zerlegen wir dann in vier Teile, die von den einzelnen Prozessoren bearbeitet werden. Es folgt: k Prozessor P1 berechnet S1 a (i )b(i ) , P2 berechnet S 2 Prozessor P3 berechnet S 3 i 1 m l a(i)b(i) und P4 berechnet S 4 i l 1 a ( i )b( i ) , i k 1 n a( i)b( i) . i m 1 Die Anzahl der Operanden pro Prozessor kann dabei durchaus beliebig sein. Zeitlich verhalten sich die einzelnen Prozessoren wie Einzelprozessoren. Nach der Berechnung der Teilsummen werden diese über das Kommunikationsnetz einem Prozessor übertragen, der dann die Endsumme aus den Teilergebnissen ermittelt. 17 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Die von Neumann Maschine oder der Princeton Computer Das obige Bild erläutert grob die Struktur des von Neumann Rechners. Seine Struktur wurde von Burks, Goldstine und v. Neumann definiert. Die Hardware besteht CPU BefehlsProzessor Daten Prozessor Ein /AusgabeProzessor BUS Speicher Struktur eines einfachen von Neumann Rechners hierbei aus folgenden Einheiten: 1. der central processing unit (CPU), in der die Befehle eines Programms bearbeitet (interpretiert und ausgeführt) werden, soweit es sich nicht um Ein / Ausgabebefehle handelt. 2. dem Speicher, in dem die Daten und das auszuführende Programm gespeichert sind 3. dem Ein / Ausgabe Prozessor, der zusammen mit den Ein/ Ausgabegeräten (Peripheriegeräten) die Kommunikation zwischen dem Rechner und der Außenwelt steuert. Peripheriegeräte sind z.B. Drucker, Monitoren (Displays), Bandgeräte wie Streamer etc. und 4. die Datenverbindungen, die den Datenaustausch zwischen den verschiedenen Einheiten des Rechners ermöglichen. Wie wir bereits wissen, wird ein Rechner nicht allein durch seine Hardware repräsentiert; sondern auch durch seine Software auf verschiedenen Ebenen. 18 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Hiermit wird im wesentlichen das Organisationsprinzip des Rechners festgelegt. Nach von Neumann wird eine Operation immer auf den Inhalt der in der Operationsanweisung (dem Maschinenbefehl) referierten Speicherzelle angewandt, ohne Rücksicht auf die etwaige Bedeutung des Inhalts der Speicherzelle. Die Speicherzelle wird hierbei einzig durch seine Adresse beschrieben. Man nennt das auch das Prinzip des minimalen Speicheraufwand. Mit der rasanten Weiterentwicklung von integrierten Speicherbausteinen sind die Kosten pro Bit drastisch gesunken. Damit werden neue Möglichkeiten gegeben, auch über andere Rechner-Architekturen nachzudenken. Zum andern beobachten wir, daß jeder Befehl und jede Ausgabe aus der CPU einen Speicherzugriff benötigt. Das führt dazu, daß die Verbindung zwischen CPU und dem Speicher zu einem Datenengpaß führt, der auch „von Neumannscher Flaschenhals“ genannt wird. Gleichzeitig führt dieser Flaschenhals zu Leistungseinbußen des Rechners. Jede Umgehung dieses Weges, sei es durch schnelle Pufferspeicher (Caches) oder andere Architekturen wie assoziative Strukturen oder die ein Form, die es ermöglicht, zu einem Zeitpunkt mehr als nur eine Operation eines Algorithmus auszuführen, trägt dazu bei die Leistungsfähigkeit des Rechners zu erhöhen. Zur Definition von Berechnung und Algorithmus gehen wir davon aus, daß zusätzlich zu den M Speicherzellen im Haupt-Speicher weitere r Registerzellen, die auch Speicherfunktion haben, zur Verfügung stehen. Damit kann der Speicherzustand eines Rechners durch die Abbildung : : 0: M 1 Ri i 0: r 1 B n , mit B = 0,1 und n = Speicherwortlänge Die Funktion ordnet also den verfügbare Adressen genau dasjenige Bitmuster bn1 ,.... b0 B n zu, das im betrachteten Augenblick den Inhalt der adressierten Speicherzelle bildet. Dabei müssen wir erwähnen, daß man im Normalfall nicht bitweise, sondern byte- oder wortweise adressiert. Berechnung: Eine Berechnung besteht in der Veränderung des Speicherzustands des Rechners derart, daß, von einem Anfangszustand 0 ausgehend, über eine Folge von möglichen Zwischenzuständen eine Endzustand t erreicht wird. Diese Änderung des Speicherzustands wird bewirkt durch ein Maschinenprogramm, welches, ausgehend von einem beliebigen Anfangszustand, zu einem definierten Endzustand führt. Ein solches Programm nennt man auch Algorithmus. Algorithmus: Ein Algorithmus ist eine Verarbeitungsvorschrift. Man bezeichnet ihn formal als ein Quadrupel (Z,E,A,f). Dabei bedeutet Z eine Menge von Zwischenergebnissen, E Z die Menge der Eingaben und A Z die Ausgabemenge. f : Z Z wird als Überführungsfunktion oder auch Transitionsfunktion bezeichnet. Ein Algorithmus beginnt mit einem Anfangszustand 0 und führt zum Endzustand t. Eine vollständige Betrachtung der möglichen Speicherzustände ist technisch unmöglich, bedenkt man die Anzahl der möglichen Zustände eines Speichers. Hat 19 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ ein Register z.B. die Größe von auch nur 16 bit mit nur 1 Ausgang, so ergeben sich 16 damit 22 mögliche Zustände, die im Testfall zu überprüfen wären. Dies entspricht allein bei diesem kleinen Speichervolumen 264000 zu beobachtenden Zuständen. Diese Überlegung wende man auf einen Speicher mit einem Volumen von 16 Mbit an! Wie aus diesen Überlegungen direkt sichtbar wird, ist eine Betrachtung aller möglichen Speicherzustände eines Rechners - wenigstens zur Zeit - nicht möglich. Sie wäre in den meisten Fällen auch nicht sinnvoll! Hingegen scheint eine Betrachtung von elementaren Transformationen, aus denen sich die Transformationen beliebiger Algorithmen aufbauen lassen, durchaus sinnvoll und wünschenswert. Solche Transformationen sind: die Speicherplatz – Zuweisung die Wert – Zuweisung die Speicherplatz Freigabe die Identitätstransformation und die total undefinierte Transformation. Der Benutzer des Rechners denkt bei seiner Programmierung natürlich nicht an „absolute“ Speicheradressen. Er benutzt symbolische Adressen, die eine Adressierung der Objekte vereinfachen. Man spricht hierbei auch von der Speicherplatz Zuweisung. Der Benutzer ist nicht an der wirklichen Adresse interessiert (siehe auch höhere Programmiersprachen: Variable : Namen , Wert . Komponenten eines Rechners In allen Rechnern finden sich folgende Elemente: 1. das Rechenwerk 2. das Steuerwerk 3. der Speicher 4. die Ein /Ausgabe, Kommunikation Das Rechenwerk hat die Aufgabe, arithmetische, logische und SchiebeOperationen durchzuführen und die notwendige „Infrastruktur“, die zur Ausführung notwendig ist, bereitzustellen. Dazu gehören z.B. die Operandenregister und ein Zielregister, in dem das Ergebnis einer Operation festgehalten (zwischengespeichert) werden kann. 20 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Dazu wollen wir kennenlernen, nach welchen Regeln diese Operationen durchgeführt werden. Im Binärsignal liegen nur zweiwertige Ergebnisse vor: entweder ein Signal hat den Wert „1“ oder ein Signal hat den Wert „0“. Diese Werte gilt es, durch Schaltelemente geeignet zu realisieren. Wir wir wissen, werden solche Systeme digitale Systeme genannt. Ihnen werden physikalische Größen (0 Volt; 3,3 Volt etc. ) zugeordnet; sie werden durch elektronische Schalter (Transistoren) nach den Gesetzen der Boolschen Logik realisiert. 21 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Schaltnetze Definition Schaltnetze sind Funktionsblöcke, die aus kombinatorischen Schaltungen bestehen. Sie verarbeiten Schaltvariablen, deren Werte am Ausgang nur von den Eingangswerten (oder -Wert) zum gleichen Zeitpunkt abhängen. (DIN 44300/93) Schaltalgebra Alle gängigen Rechner nutzen heute die Regeln der boolschen Algebra, d.h. sie verwenden „binäre“ d.h. zweiwertige Signale zur Verknüpfung. UND, ODER oder die NEGATION sind heute auch in nicht technischen Disziplinen häufig verwendete Operationen. Wir wollen diese Operationen wegen ihrer Bedeutung für unsere Rechenanlagen nun einführen: Wir sprechen bei den oben genannten Operationen von der Schaltalgebra. Sie geht auf Shannon zurück, der in den 30-er Jahren dieses Jahrhundert die Ergebnisse von George Boole ausarbeitete, die dieser in seinem Buch „ An Investigation of the Laws of Thought“ niedergelegt hatte. Man bezeichnet diese spezielle Schaltalgebra auch als die Boolsche Algebra. Definition einer Boolschen Algebra aus einem Axiomensystem (nach Klar): Eine Menge B von Elementen, über der zwei zweistellige Operationen (+) und (*) erklärt sind, ist genau dann eine Boolsche Algebra, wenn für beliebige Elemente a,b,c aus B folgende Axiome gelten: 1) a+b=b+a a*b=b*a Die Operationen + und * sind kommutativ 2) 0+a=a 1*a=a Für jede der Operationen + bzw. * existiert in B ein „Eins“-Element „0“ bzw. „1“ 3) (a + b) * c = (a * c) + (b * c) (a * b) + c = (a + c) * (b + c) Jeder Operation ist distributiv bezüglich der anderen 4) a + a = 1 a * a = 0 Zu jedem Element a B existiert ein komplementäres Element a B mit a + a = 1 und a * a = 0. a heißt auch „Komplement“ von a. Aus diesen Axiomen lassen sich folgende Aussagen ableiten: Satz 1: Dualitätsprinzip: Zu jeder Aussage, die sich aus diesen vier Axiomen ableiten läßt, existiert dazu eine duale Aussage. Sie entsteht dadurch daß man die 22 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Operationen + und * und gleichzeitig die Eins-Elemente 1 und 0 vertauscht. Beweis: Axiome sind symmetrisch bezüglich der 2 Operationen und der beiden EinsElemente. Jede abgeleitete Aussage muß damit auch wieder diese Symmetrie aufweisen. Für jedes Element einer Boolschen Algebra gilt: Satz 2: a+1=1 a* 0=0 Beweis der Aussage a + 1 = 1: Es gilt: 1 = a + a = (1 * a ) + a = ( 1 + a) * ( a + a) = ( 1 + a) * 1 = (a+1) nach Axiom 4 und 1 nach Axiom 2 nach Axiom 3 nach Axiom 1 und 4 nach Axiom 2 und 1 ; q.e.d. Nach dem Dualitätsprinzip ist mit dem Beweis von a + 1 = 1 auch a * 0 = 0 bewiesen. Weiterhin gilt Satz 3: a (a B) gilt: a + a = a a*a=a Satz 4: a, b (a B, b B) gilt: a + ( a * b) = a a * ( a + b) = a Satz 5: (Assoziativgesetz) a, b, c (a B, b B, c B) gilt: a+(b+c)=(a+b)+c a * (b * c) = (a * b) * c Satz 6: (Eindeutigkeit des Komplements) a (a B) existiert genau ein Komplement a (a B ) . 23 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Insbesondere gilt: a a Satz 7: Die beiden Eins-Elemente sind komplementär zueinander 1 0 und 0 1 Satz 8: (De Morgansches Theorem) a, b (a B, b B) gilt: a b a * b und a * b) a b das De Morgansche Theorem läßt sich auf Boolsche Funktionen erweitern: f ( x1 , x2 , x3 ,....., xn ; # ,*) f ( x1 , x2 , x3 ,....., xn ;*, # ) wobei f eine Boolsche Funktion und xi (i= 1,2,3,...,n) Boolsche Variablen sind 24 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Mit „Boolsche Algebra“ und „Schaltalgebra“ werden in der Praxis häufig dieselben Eigenschaften bezeichnet. Im folgenden wollen wir den Begriff der Schaltalgebra weiter verwenden. Die wichtigsten Verknüpfungen der Schaltalgebra sind: das logische Produkt, die Konjunktion (AND, UND); sie wird durch die Operatoren bzw. repräsentiert. die logische Summe, die Disjunktion (OR, ODER); sie wird durch die Operatoren oder + repräsentiert. . die Inversion (NOT); sie wird durch den Balken über den Variablen dargestellt. In der untenstehenden Tabelle sind die in der Schaltalgebra gängigen Operationen aufgeführt: Alle Variablen, mit denen wir arbeiten, können zwei Zustände annehmen: aktiv oder inaktiv. Damit ergibt sich die Anzahl der möglichen Verknüpfungen von n (2wertigen) Eingangsvariablen x0 bis xn-1 auf insgesamt 2n Kombinationen der Eingangsgrößen. Hat die Ausgangsgröße y auch zwei Zustände (und das ist ja üblich in unseren Schaltungen) so können allen möglichen 2n Eingangszuständen nochmals 2 Ausgangszustände zugeordnet werden. Aus diesem Grund gibt es zu n n Eingangsvariablen insgesamt 2 2 mögliche Belegungen. y(x0, x1, x2,.........xn-1) = f (x0, x1, x2, ........xn-1) Die obige Gleichung wird Schaltfunktion, Funktionsgleichung, aber auch Term genannt. Es ist auch üblich, diese Funktion direkt als Wahrheitstafel darzustellen. Zu einer (1) Eingangs-Variablen sind 4 Ausgangswerte zuordenbar. (Nullfunktion, Identität, Negation und die Einsfunktion) Lediglich die Negation ist hierbei von praktischer Bedeutung. Ihre Wahrheitstafel lautet: x y Betrachtet man alle die Zustände, die durch die Permutationen der Eingangsvariablen und Ausgangsvariablen möglich sind, so kommt man schnell zu 1 0 dem Schluß, daß aus der Vielzahl eigentlich nur wirklich wenige von größerem Interesse sind. Bei zwei 0 1 Eingangsvariablen erhalten wir - ich erinnere - bereits 16 Ausgangsgrößen! Hier stellen wir fest, daß nur 4 Verknüpfungen, nämlich AND, OR, sowie NAND, NOR von Bedeutung sind. Sheffer und Peirce haben sich mit diesen Problemen näher beschäftigt und herausgefunden, daß alle logische Verknüpfungen nur aus AND und Negation oder OR und Negation aufgebaut werden können. Das hilft uns zwar theoretisch, in der Praxis ist das Ziel jedoch nicht die Verwendung nur eines und zweier Gattertypen , sondern die optimale Kombination verschiedener 25 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Gatter bei gleichzeitig geringen Kosten. Dabei hat sich Verwendung vornehmlich von NAND, NOR und Inverter Gattern als vorteilhaft herausgestellt. Um die Übersichtlichkeit auch von Schaltungen höherer Komplexität zu gewährleisten, werden statt der Darstellung auf Bauelementen - Ebene die entsprechenden Logiksymbole verwendet; sie bilden den Logikplan. Es soll hier aber auch darauf hingewiesen werden, daß bei der Beschreibung von ganzen System Modulen wie z.B. Mikroprozessoren auch die Darstellung der Schaltung durch Logikgatter bei weitem nicht ausreicht. In diesen Fällen bedient man sich Beschreibungsmitteln, die oberhalb der Logikebene angesiedelt sind, z.B. Registertransfersprachen (HDL: MIMOLA, KARL, etc. , VHDL). Zurück zu den Logiksymbolen: Hier waren in der Vergangenheit mehrere Darstellungen für dieselbe Funktion gängig. Seit einigen Jahren setzen sich die Schaltsymbole nach DIN vermehrt durch. Einige Beispiele sind weiter unten angeführt. Nicht alle Schaltungen, die in der Praxis Verwendung finden, lassen sich durch die oben beschriebenen Grundgatter realisieren. In diesem Zusammenhang seien Schwellwertelemente genannt oder auch Dekoder, die m Elemente aus n Elementen herausfiltern. Aus der Vielfalt gleichwertiger Darstellungen einer Schaltfunktion ist man bemüht, die „einfachste“ Schaltungsrealisierung abzuleiten. „Normalformen“ bilden hierzu ein Werkzeug; sie enthalten nur Konjunktionen, Negationen und Disjunktionen. Es gibt zwei Arten von Normalformen: die disjunktive und die konjunktive Normalform. Die disjunktive Normalform definieren wir wie folgt: Unter der disjunktiven Normalform verstehen wir die logische Summe von logischen Produkten. Beispiel: y = (x0 x1 ) (x7 x6 x4) x3 Unter der konjunktiven Normalform verstehen wir das logische Produkt von logischen Summen. Beispiel: y = (x0 x1) x7 (x6 x4 x3) In den Termen dürfen auch negierte Größen aufgeführt werden. Eine kanonische Normalform (egal ob disjunktiv oder konjunktiv) enthält jeweils alle Variablen negiert oder nicht negiert. 26 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Definition: Unter einer Volldisjunktion wollen wir die ODER - Verknüpfung aller Eingangsvariablen verstehen, egal ob sie negiert oder nicht negiert auftreten. (Maxterme) Bei n Eingangsvariablen gibt es insgesamt 2n Maxterme, z.B. bei 2 Variablen 2n , d.h. vier Maxterme: (x0 + x1); (x0 + x1); (x0 + x1); ( x0 + x1) Definition: Unter einer Vollkonjunktion verstehen wir die UND - Verknüpfung aller Eingangsvariablen, gleichgültig, ob sie negiert oder nicht negiert auftreten. (Minterme) Bei n Eingangsvariablen gibt es insgesamt 2n Minterme. 27 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Schaltfunktionen ist Benennung, Operator Schaltzeichen nach DIN x0 UND -Gatter & y 1 y 1 y x1 ODER - Gatter x0 x1 Negation - Gatter x0 x0 NAND - Gatter & y x1 x0 NOR - Gatter 1 y x1 x0 Exclusiv - Oder Gatter (Antivalenz) =1 y x1 Der Wert der Minterme bzw. Maxterme ist nur für eine spezielle Variablenkombination gleich eins (null). 28 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Beispiel (zwei Variable): x0 x1 0 0 0 1 1 0 1 1 x0 x1 0 0 0 1 x0 x1 0 0 1 0 x0 x1 0 1 0 0 x0 x1 1 0 0 0 x0 x1 0 1 1 1 x0 x1 1 0 1 1 x0 x1 1 1 0 1 x0 x1 1 1 1 0 In obiger Tabelle ist das Zeichen äquivalent zu . Eine Kanonische Normalform enthält nur Terme, in denen jeweils alle Variablen (negiert oder nicht negiert) auftreten. Für die Kanonische disjunktive Normalform bedeutet das: y mi (mit mi = Mintermanzahl, für die y = Um i den Wert = 1 annimmt) i i Beispiel einer Kanonischen Disjunktiven Normalform (KDNF): y( x0 , x1 , x2 , x3 ) x0 x1 x2 , x3 x0 x1 x2 x3 x0 x1 x2 x3 und für die Kanonische konjunktive Normalform gilt dann: y Mi (mit Mi = Maxtermanzahl, für die y I Mi den Wert = 0 annimmt). i i Beispiel einer Kanonischen Konjunktiven Normalform (KKNF): y ( x0 x1 x2 )( x0 x1 x2 )( x0 x1 x2 ) 29 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Nach de Morgan kann man zeigen, daß die beiden Normalformen gleichwertig sind; sie lassen sich ineinander überführen. Beispiel: Sei y = m1 + m2 + m3 = m1 m2 m3 gegeben. Dann folgt nach de Morgan: y m1 m2 m3 M1 M2 M3 und nach einer weiteren Negation: y M1 M2 M3 M0 M4 M5 M6 Wir wir gesehen haben, bestehen beide Formen der Normalformen aus zwei Operationstypen: der Konjunktion und der Disjunktion. Realisiert man nach der DNF, z.B. dann, wenn die Ausgangsfunktion mehr Nullen als Einsen enthält, so bearbeitet man zuerst die Konjunktionen und danach faßt man die Ergebnisse aus den Konjunktionen über eine Disjunktion zusammen. Bei der KNF verfährt man komplementär. Zur Minimisierung von Schaltfunktionen: Es existieren zumindest drei Arten, den Schaltungsaufwand einer Schaltung zu optimieren: 1. über algebraische Verfahren (Schaltalgebra) 2. graphische Verfahren (Karnaugh - Veitch Diagramme) 3. tabellarische (algorithmische) Verfahren. (Quine - McCluskey) Grundlage des Verfahrens nach 1) sind die erwähnten Rechen-Regeln. Unter 2) ist ein graphisches Verfahren aufgeführt, welches jedoch nur bis zu einer Variablenanzahl von etwa 4 geeignet scheint. Das unter 3) erwähnte Verfahren beschreibt eine Methode für komplexe Systeme mit vielen Variablen. Es wird dem Entwickler deshalb vorzugsweise mit den Werkzeugen, die zur Synthese von großen Schaltungen dienen, zur Verfügung gestellt. Wir wollen uns hier näher mit den graphischen Methoden nach Karnaugh - Veitch (KV) beschäftigen: Bei der KV Methode ersetzen die KV Diagramme, auch KV - Tafeln genannt, die Wahrheitstabellen, wie wir sie oben vorgestellt haben. Die KV - Tafel wird in Felder unterteilt, die einer Kombination der Eingangsvariablen entsprechen. Bei n Variablen erhalten wir 2n Felder, von denen jedes einzelne Feld entweder einen Minterm oder einen Maxterm repräsentiert. Ihre Zuordnung ist so beschaffen, daß sich die Eingangskombinationen in den direkt benachbarten Feldern unterscheiden. Als benachbart gelten hier aber auch die am Tafelrand genau gegenüber angeordneten Felder. 30 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ In die Felder werden die zu den Eigangskombinationen gehörigen Funktionswerte eingetragen. An den Rand der Tafel (Zeilen und Spalten) werden die Werte der möglichen Kombination geschrieben. Da die Felder in der KV Tafel den Zeilen der zugehörigen Wertetabelle entsprechen und die Feldeinträge den Ausgangsvariablen, kann die Schaltfunktion direkt aus der Tabelle abgelesen werden. Hierauf basiert dieses Minimierungsverfahren. Die folgende Skizze zeigt Beispiele von KV - Tafeln: 31 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ x0 x1 x1 0 x1 x0 1 Zelle 10 oder: Zelle x0 x1 0 x0 1 x0 Zelle x0 x2 x1 oder: Zelle 101 x0 x2 x2 x1 x1 x1 x0 x0 x3 x2 x3 x2 x3 x1 x1 32 x1 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Das Verfahren geht davon aus, daß die zu realisierende Schaltfunktion in der KDNF zur Verfügung steht und in die KV-Tabelle eingetragen ist. Das bedeutet, daß diejenigen Felder, die Minterme darstellen, durch eine 1 gekennzeichnet sind. Die Minimisierung erfolgt nun durch Zusammenfassung aller benachbarter „Einsen“, auch über die Matrixgrenzen hinaus; so wie oben beschrieben wurde. Je mehr Felder mit Einsen man zu Blöcken zusammenfassen kann, desto einfacher wird letztendlich die resultierende Schaltung. Einzelne, mit „ Eins“ gekennzeichnete Felder werden einzelnen in die resultierende Schaltfunktion übernommen. Die Felder, die mit Null gekennzeichnet sind, fallen raus. Bei der Blockbildung von „Eins“ - Feldern entfällt: bei 2 zusammenhängenden „Eins“ Feldern eine Eingangsvariable und bei 4 bzw 8 zusammenhängenden „Eins“ Feldern 2 bzw. 3 Eingangsvariablen. An zwei einfachen Beispielen wollen wir das Verfahren näher untersuchen: Gegeben sei folgende Schaltfunktion: y = (x0 x1) (x0 x1) (x0 x1) In einem ersten Schritt tragen wir diese Gleichung in eine KV-Tafel für zwei Variable ein. Diejenigen Minterme, die zu einer „Eins“ führen, werden in der Tafel mit einer „Eins“ notiert. Es ergibt sich folgendes Bild: x0 x1 x1 x0 1 1 Es ergibt sich, wie aus der Skizze leicht zu ersehen ist, ein Block, der drei Felder umfaßt. Diesem Block sind die Variablen x0 und x1 zugeordnet, und zwar so, daß jeweils sämtliche Felder der Variablen überstrichen werden. Auf diese Weise ergibt sich sofort die minimisierte Schaltfunktion (disjunktive Minimalform). 1 Gegeben sei nun folgende Disjunktive Normalform mit 4 Variablen: y = (x0 x1 x2 x3) (x0 x1 x2 x3) (x0 x1 x2 x3) (x0 x1 x2 x3) (x0 x1 x2 x3) (x0 x1 x2 x3) (x0 x1 x2 x3) (x0 x1 x2 x3) (x0 x1 x2 x3) 33 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Für die KV Tafel ergibt sich damit: x0 x0 1 (8) 1 (1) 1 (5) x1 1 (3) 1 (4) 1 (6) 1 (2) x3 1 (9) 1 (7) x1 x2 x2 x2 Wir fassen nun die Felder mit Nachbarn zusammen und erhalten die folgende Minimal - Funktion: y = (x0 x1) (x0 x3) (x0 x1 x2 x3) Für die allgemeine Ermittlung der Minimalform können wir folgendes Verfahren angeben: 1. Schritt: Für n - Variablen generieren wir eine KV Tafel mit 2n Feldern. 2. Schritt: Die Minterme mit den „Eins“ - Werten tragen wir in die Tafel ein. 3. Schritt: Zusammenfassen von „Eins“ Feldern mit ihren Nachbarn zu Blöcken gemäß folgender Vorschrift: 34 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Jeder Block, der 2, 4, oder 8 benachbarte Felder enthält, muß ein möglichst großes Rechteck oder ein Quadrat sein. Jedes „Eins“ Feld muß berücksichtigt werden. Die Anzahl der Blöcke soll so klein wie möglich sein. „Eins“ Felder können Teil mehrerer Blöcke sein. Jeder Block ergibt einen Produktterm der minimalen Schaltfunktion Das Verfahren ist natürlich auch auf die konjunktive Normalform anwendbar; in diesem Fall sind die Felder mit „Nullen“ entsprechend zusammenzufassen. Für eine Variablenanzahl unter 6 ist das Minimieren mittels KV- Tafeln übersichtlich, bei einer größeren Anzahl wird das Verfahren schnell unüberschaubar. Einige Vereinbarungen: 1. Unter positiver Logik wollen wir die Logik verstehen, die im aktiven Zusatnd einen logischen Pegel = 1, eine „Eins“ oder auch HIGH (H) erzeugt. Der äquivalente elektrische Pegel ist eine positive Spannung, die in der Regel bei MOS Schaltkreisen 5 Volt beträgt, bei hochkomplexen schnellen Schaltkreisen aber auch z.B. 3,3 Volt betragen kann. 2. Negative Logik ist komplementär zur positven Logik. Die entsprechenden Spannungen, die den aktiven Zustand beschreiben, sind negativer als die entsprechenden Spannungen im inaktivenZustand. Der logische Pegel, der den aktiven Zustand beschreibt wird 0, „Null“ , „aktiv LOW“ oder auch nur „LOW“ (L) genannt. Die entsprechenden Spannungen liegen hier in der MOS Technik bei 0 Volt. Ein Schaltnetz generiert also in Abhängigkeit der Eingangsvariablen (des Eingabevektors x1, ...,xm ) und der Architektur des Schaltnetzes am Ausgang einen Ausgabevektor y1,...., yn. Y = F (X) mit den Komponenten: y1 = f1 (x0,...,xm-1) y2 = f2 (x0,...,xm-1) . . . yn = fn (x0,....,xm-1) Bemerkung: Durch F werden nur rückkopplungsfreie Verknüpfungen mit UND-, ODER- oder Negations-Gattern realisiert. Signallaufzeiten spielen bei Schaltnetzen eine untergeordnete Rolle. Daher ergibt sich hier häufig das Problem von „Hazards“. Die Entstehung eines Hazardtypen ist in der untenstehenden Abbildung skizziert. 35 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ a c clk b Beispiele von Schaltnetzen sind z.B. Multiplexer, bei denen aus n an einem Baustein anliegenden Signalen genau 1 Signal ausgewählt wird, aber auch sog. Arrays, in denen Grundverknüpfungsglieder feldartig angeordnet sind. Codes Codes finden in der Technik breite Verwendung. Mit ihrer Hilfe ist man in der Lage, Daten zu verschlüsseln, so daß sie von Dritten nicht gelesen werden können (wenigstens sollen) und man verwendet sie, um mit Hilfe weniger Signale große Mengen an Information zu übermitteln. Dabei muß natürlich sichergestellt werden, daß der Adressat der codierten Signale auch in der Lage ist, diese Signale wieder so aufzubereiten, daß er die Information, die in diesen Signalen „versteckt“ ist, interpretieren kann. In der Datenverarbeitung unterscheiden wir Codes, die zur Reduzierung der Datenmengen verwendet werden und Codes, die zur Datensicherung verwendet werden. Solche Codes zur Datensicherung, also der Sicherung vor dem Zugriff durch Dritte bestehen häufig aus komplexen Hardwarelösungen, verbunden mit implementierten spezifischen Algorithmen. Besondere Bedeutung erlangen diese Algorithmen (Verschlüsselungsverfahren) bei Datennetzen. Wir wollen uns hier aber auf die Verfahren der „Datenreduktion“ durch Codes beschränken. Eine sehr bekannte Anwendung von Codierern ist die Anzeige auf den Digitaluhren. Hierbei wird von einem internen Code aus (z.B. dem sogenannten BCD Code) die Steuerung der Displaysegmente durchgeführt. (Zur Erinnerung: BCD: Binary Coded Decimal bedeutet: Binärcode zur Ausgabe von Dezimalziffern). So, wie man von Binärcode nach Dezimal umwandelt, kann man natürlich auch vom Dezimalcode in 36 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ binären Code umwandeln. Es gibt eine Vielzahl verschiedener Codes, die hier aber nur auszugsweise erwähnt werden sollen: der 8 4 2 1 - Code. Hier dienen die ersten 10 Kombinationen der Dualzahlen zur Darstellung. Die übrigen Kombinationen werden nicht benutzt. Die Gewichtung der Stellen entspricht der im Dualsystem; aus diesem Grund gelten auch hier die Rechenregeln der Dualzahladdition. der 3-excess - Code. Er erlaubt eine einfache Generierung des Neunerkomplements. Der Code ist nicht gewichtet. Als hervorstechendes Merkmal wir in diesem Code in jeder benutzten Bitkombination mindestens ein Bit gesetzt und gleichzeitig ein anderes zurückgesetzt. Dadurch, daß die Kombinationen 1111 und 0000 nicht existieren, wird dieser Code in gewisser Weise auch störunfälliger. Auch der der AIKEN - Code erlaubt eine einfache Bildung des Neunerkomplements. Die einzelnen Stellen sind gewichtet. Durch einfache Inversion können hier die negativen Dezimalzahlen dargestellt werden. der 2 - aus - 5 - Code enthält pro Dezimalziffer immer genau 2 Binärstellen, die auf 1 gesetzt sind. Dadurch wird eine Fehlererkennung erleichtert. Der 1 - aus - 10 - Code findet Anwendung in der Fernsprechtechnik. Hier werden die 10 Binärstellen nacheinander mit genau einem 1 Signal belegt. Alphanumerische Codes (z.B. EBCDIC (8 Bit) , ASCII - Code (6+1)) erlauben neben der Kodierung von Zahlen auch die Verschlüsselung von Buchstaben, Trenn- und Sonderzeichen. Hier kommt man allerdings nicht mehr mit 4 Bit aus, sondern benötigt im allgemeinen 7 und 8- Bit Codes. 37 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Coder, Decoder In digitalen Systemen wird die Information je nach Anwendung in unterschiedlichen Codes dargestellt. Für eine Dezimalausgabe z.B. ist ein sogenannter 1-aus 10 Code günstig; man verwendet hier vorzugsweise eine 7-Segment Anzeige. Dagegen arbeiten Zähler meist im BCD-Code (Binary Code Decimal). Man spricht von einer Code-Wandlung oder einem Code-Umsetzer. Definition: Ein Code-Umsetzer ist ein Schaltnetz, welches die Information eines Eingangswortes (n-Bit) im Code A in die Information eines Ausgangswortes (m-bit) im Code B umformt. Zwei Formen werden besonders häufig verwendet: der Decoder und der Codierer, auch Encoder genannt. Decoder: Ein Decoder wandelt ein n-bit Eingangswort in ein 1-aus-m Code mit m= 2n Ausgangssignalen. Hierbei führt genau ein Ausgangssignal den Wert „1“, alle anderen haben den Wert „0“. Beispiel: Dieser Dekoder soll folgendes leisten: X0 0 0 1 1 X1 0 1 0 1 Y0 1 0 0 0 Y1 1 0 0 Y2 0 0 1 0 Y3 0 0 0 1 x0 x0 x1 x1 1 Wahrheitstafel 1 Y0 Y1 1 Y2 1 Y3 Schaltnetz 38 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Bei einem Dekoder, der bei Uhrenanzeigen angewendet wird, sieht die entsprechende Tabelle folgendermaßen aus: X 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 X0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 X1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 X2 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 X3 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Y0 1 0 0 0 1 1 1 0 1 1 # # # # # # Y1 1 0 1 1 0 1 1 1 1 1 # # # # # # Y2 1 1 1 1 1 0 0 1 1 1 # # # # # # Y3 1 1 0 1 1 1 1 1 1 1 # # # # # # Y4 1 0 1 1 0 1 1 0 1 1 # # # # # # Y5 1 0 1 0 0 0 1 0 1 0 # # # # # # Y6 0 0 1 1 1 1 1 0 1 1 # # # # # # Y1 Y0 Y2 Y6 Y5 Y3 Y2 Decoder finden breite Anwendung in der Datenverarbeitung, z.B. als Adreßdekoder in Speichern. Zur Adressierung eines Wortes in einem 1k-Speichers benötigt man also 10 bit. 39 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Kodierer realisieren die Umkehrfunktion der Encoder. Das eingangsseitig anliegende Wort im 1-aus-m-Code wird in ein (dual)-kodiertes Ausgangswort überführt. Er hat also m Eingänge (von denen jeweils nur eines aktiviert ist) und erzeugt einen n-Bit-Ausgangscode. Das untenstehende Beispiel stellt einen 4:2-Codierer dar. Immer dann, wenn einer der 4 Eingänge aktiviert ist, entsteht ein zugehöriges Ausgangswort. Wir wollen als Beispiel hierzu nun die Zahlen 0 bis 9 mit 10 Tasten in den Dualcode umformen und auf diese Weise für eine Weiterverarbeitung durch einen Rechner verfügbar machen. Von den 10 Eingängen führt jeweils genau einer einen „1“ Pegel, alle übrigen haben einen „0“Pegel. An den 4 Ausgängen tritt das zugehörige BCD-Wort auf. Taste 0 1 2 3 4 5 6 7 8 9 Dualzahl Y3 0 0 0 0 0 0 0 0 1 1 Y2 0 0 0 0 1 1 1 1 0 0 Y1 0 0 1 1 0 0 1 1 0 0 Y0 0 1 0 1 0 1 0 1 0 1 Eine Realisierung mit ODER-Gattern, analog zu obigen Beispiel, bleibe dem Leser zur Übung überlassen. 40 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Einfache Schaltnetze Multiplexer werden als „Weiche“ für logische Signale eingesetzt. Das folgende Prinzipschaltbild erläutert seine Funktion: Gatter a x1 y1 x2 Gatter b x3 Multiplexer Zur Funktion des oben dargestellten Multiplexers (Muxer): Die beiden Signale x1 und x2 sind die Datensignale; x3 dient als Steuersignal für den Multiplexer. Es wird gewährleistet, daß jeweils nur genau ein Signal von den Dateneingängen an den Ausgang weitergeschaltet wird. Demultiplexer haben die Aufgabe, ein Signal wahlweise auf verschiedene Leitungen zu übertragen. Zur Steuerung von n Ausgangssignalen benötigen wir log 2 (n) Kontrollsignale. Bei 8 Ausgängen benötigt man also 3 Steuersignale. Es wird im Regelfall immer nur genau ein Ausgang (1 aus n) aktiviert. Die folgende Skizze gibt die Struktur ohne die Steuersignale wieder: Y1 Y2 Y3 Y4 X 1 Y5 Y6 Demultiplexer Y7 Y8 41 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Arrays stellen einen weiteren Typ von Schaltnetzen dar. Zu diesen Arrays gehören die „Read -only- memories“ (ROMs) oder auch die „Programmable Logic Arrays“ (PLAs). Bei diesen Bausteinen werden Schalter (Transistoren) in einem Feld so plaziert, daß eine festdefinierte Funktion realisiert wird. Als Beispiel für ein PLA sei seine Struktur angegeben: AND x1 OR xn y1 ym evtl. Rückkopplung PLA Ein PLA teilt sich in zwei Bereiche auf, den AND - Bereich und den ODER - Bereich. Ausgehende von einer DNF werden im ersten Schritt UND - Verknüpfungen geschaltet und im anschließenden Schritt die einzelnen Terme der Disjunktion „geodert“. Ein PLA ist im Normalfall über seine Ein- und Ausgänge nicht rückgekoppelt. Daher kann es in diesem Falle als kombinatorische Schaltung oder als Schaltnetz bezeichnet werden. Achtung: Sobald man mindestens einen Ausgang auf den Eingang desselben PLA rückkoppelt, ist die Bedingung für Schaltnetze nicht mehr erfüllt. In diesem Fall wird dann häufig ein Taktpuls eingeführt: nun haben wir es mit einer sequentiellen Schaltung, einem Schaltwerk zu tun. 42 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Schaltwerke Fügt man einem Schaltnetz Rückkopplungen und/oder Speicherelemente hinzu, so erhält man ein Schaltwerk. Schaltwerke repräsentieren sogenannte sequentielle Schaltungen. In der Darstellung ihrer Funktion durch Graphen sind diese Rückkopplungen durch gerichtete Zykel gekennzeichnet. Wir unterscheiden synchrone und asynchrone Schaltwerke. Synchrone Schaltwerke werden durch einen zentralen Takt gesteuert; asynchrone Schaltwerke enthalten z.B. lediglich Rückkopplungen. Ein solches Schaltwerk erhalten wir, wenn wir ein NAND Gatter vom Ausgang zu einem der beiden Eingänge rückkoppeln. Im Gegensatz zu den kombinatorischen Schaltungen (Schaltnetzen) sehen wir hier sehr schnell, daß der Ausgang nicht unabhängig vom Ausgang der vorhergehenden Belegung ist. Wir müssen also bei sequentiellen Schaltungen das Zeitverhalten der Bauelemente in die Berechnung mit einbeziehen. Man kennzeichnet diese Tatsache durch den Index t oder durch Schreiben als Funktion, z.B. y = f(xt). xt & f(xt) Rückkopplung am Beispiel eines NAND Gatters Für die Wertetabelle des rückgekoppelten NAND Gatters gilt dann: x ft+t ft+t+t ft+t+t+t 0 ..1.. ..1.. ..1.. ..1.. .ft ft .ft Wie man leicht sieht, schwingt das Gatter in dem Takt, den die Signaldurchlaufszeit des Gatters bestimmt. Dabei ist, wie wir schon wissen, die Durchlaufszeit nicht konstant, sondern durch Parameter wie Alterung, Temperatur und Widerstand der Verbindungsleitungen unter den Komponenten bestimmt. Eine weitere einfache Schaltung bildet die „bistabile“ Kippstufe. Sie kann aus NAND aber auch aus ODER Gattern aufgebaut werden. 43 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Qt+t = xt P & xt Wie wir aus den Vorbemerkungen Pt+t = yt Qt yt & oben folgern können, schalten die beiden Gatter nicht gleich schnell. Bezeichnen wir mit Q und P die durchschnittlichen Verzögerungen der beiden Gatter. Dann definieren wir mit t = max(Q,P). Das Zeitverhalten dieser Schaltung hängt offensichtlich davon ab, welches Gatter schneller schaltet. Gilt Q P, dann schaltet das Gatter mit dem Ausgang P schneller. Nachdem zuerst P einen neuen Wert erhält und dann Q, wird nach der Zeit t das Gesamt-Gatter in den stabilen Zustand zurückgekehrt sein. Qt+t =xt Pt+t Pt+2t=ytQt+t Qt+2t=xtPt+2t xt yt ..0 0 1 1 1 1 ..0 1 Qt 1 0 1 1 0 1 0 1 0 1 1 Qt Qt Qt Qt Pt+t =yt Qt Wie man direkt aus der Tabelle ablesen kann, werden nach der Zeit t+2t für die Eingabewerte 00, 01 und 10 stabile Werte für Q erreicht. Analoge Ergebnisse erhalten wir, wenn wir die Tabelle für den Fall, daß P Q gilt, aufstellen. Wir erhalten also eine „Kippstufe“, die zwei stabile Zustände unterscheidet. xt yt Pt+2t Qt+2t 0 1 0 1 1 0 1 0 Zustände der bistabilen Kippstufe Für Eingaben mit xt yt folgt unabhängig von der Schaltreihenfolge der Gatter ein eindeutiges Ergebnis mit Pt+2t Qt+2t. Solange die Bedingung P Q gilt, ist die Eingabe der Werte xt = yt = 1 unproblematisch. Der gespeicherte Wert Qt+2t = Qt oder Pt als auch Pt+2t =Pt oder Qt bleiben erhalten. Damit kann diese Eingangsbelegung als Lesesignal genutzt werden. 44 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Wird die Eingangsbelegung x = y = 0 gewählt, so erhalten wir an den Ausgängen Pt+2t und Qt+2 eine 1. Damit ist die Belegung P Q jedoch nicht mehr erfüllt. In diesem Fall hängt der Zustand nach einer neuen Eingangsbelegung von der Verzögerung der beiden NAND Gatter ab. Dieses Verhalten ist unerwünscht; daher wird die Eingangsbelegung x = y = 0 verboten. Pt+2t Qt+2t (0) (1) (1) 0 1 0 1 1 0 1 0 1 1 Qt Qt xt yt (0) Zusammenfassung: Die bistabile Kippstufe kann für Pt Qt einen binären Wert Qt speichern. Legt man an die Eingänge den Wert xt = yt = 1 an, kann man nach der Zeit t+2t diesen Wert wieder auslesen. Die Werte P = 0 und Q = 1 können mit der Eingangsbelegung x t = 0 und yt = 1 in die Kippstufe eingeschrieben werden. Die Werte P = 1 und Q = 0 können mittels der Eingangsbelegung xt = 1 und yt = 0 in die Kippstufe eingeschrieben werden. Die Eingangsbelegung xt = yt = 0 ist unzulässig. In der Praxis kann man in der Regel nicht sicherstellen, daß die Eingangsbelegung an der Kippstufe nicht auftritt. (Gefahr von sogenannten Hazards). Um diesem Problem vorzubeugen, führen wir die Taktung ein. Sie garantiert, daß die Eingangswerte nur dann zu einer Zustandsänderung in der Kippstufe führen können, wenn die Signale stabil anliegen. Diese Forderung wird durch die Einführung eines Taktsignals erfüllt. Nur dann, wenn das Taktsignal aktiv an der Kippstufe anliegt, können die Eingangssignale zu Zustandsänderungen führen. RS- Flipflop Wir sind damit zu den synchronen, den synchronen, sequentiellen Schaltungen gelangt und nennen diesen Typ einer getakteten Kippstufe RS-Flip-Flop. RS-FlipFlops werden in der Digitaltechnik als digitale 1 Bit -Speicherelemente verwendet. Ein RS- Flip-Flop sieht in der Gatterdarstellung wie folgt aus: 45 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ xt= S T St & & Qt+2t & Pt+2t Takt & yt = R T Rt RS - Flip-Flop Nach obigem Plan gilt: Qt+2t = xt ytQt, Dann ergibt durch Einsetzen von: xt = T St yt = T Rt und Qt+2t = T (St RtQt) TQt Das RS-Flip-Flop schaltet also nur bei T = 1 (Eingabe eines Taktsignals). Während T aktiv ist, kann man das Schaltverhalten wie folgt beschreiben: Qt+2t = St RtQt Pt+2t = St (Rt Qt) = Qt+2t Damit kann die Wahrheitstabelle für das RS - Flip-Flop wie folgt aufgeschrieben werden: 46 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Mit der Einschränkung , die beiden Eingänge des FlipSt Rt Qt+2t = St RtQt Flop mit 1 zu belegen, ist ein wesentliches Defizit gegeben. Möchte man Qt 0 0 dennoch RS - Flip-Flops 0 einsetzen, so muß man 0 1 darauf achten, daß diese 1 1 0 „verbotene“ Belegung nicht auftreten kann. Das D..... 1 1 Flip-Flop garantiert eine Eingangsbelegung, die zu jedem Zeitpunkt während RS - Flip-Flop einer aktiven Taktphase R = S setzt. Dazu gibt das D-Flip-Flop das Eingangssignal jeweils um einen Takt verzögert weiter. Der Nachteil des D -Flip-Flops ist, daß es bei jedem Takt neu geladen wird. Die Informationsspeicherung über mehrere Taktphasen hinweg ist - wie beim RS - FlipFlop nicht möglich. Der Unterschied des D - Flip-Flop in der Schaltung besteht einfach darin , den R(eset) Eingang beim RS - Flip-Flop „aktiv Low“ auszulegen. JK-Flipflop Eine andere Erweiterung des RS- Flip-Flop besteht darin, die Schaltung so auszulegen, daß bei einer Eingangsbelegung von R = 1 und S = 1 kein undefinierter Ausgang zu erwarten ist, sondern der Zustand aus dem vorhergehenden Takt komplementiert wird. Diesen Typ nennt man JK - Flip-Flop. Seine Struktur sieht wie folgt aus: J & S Takt T K R & 47 Q Q datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Für die Wahrheitstabelle ergibt sich: J K Qt 0 0 0 0 0 0 Qt+t S R 0 0 - Zustand lesen 1 1 - 0 Zustand lesen 1 0 0 0 - Zustand löschen 0 1 1 0 0 1 Zustand löschen 1 0 0 1 1 0 Zustand setzen 1 0 1 1 - 0 Zustand setzen 1 1 0 1 1 0 Komplementieren 1 1 1 0 0 1 Komplementieren JK - Master – Slave Flipflop K J Qt+t 0 0 Qt 0 1 0 1 0 1 1 1 Qt Ein weiterer Flip-Flop Typ, der häufig Verwendung findet, ist das Master - Slave Flip-Flop. Hierbei wird die an den Eingängen in einem ersten Taktschritt in den „Master“ übernommen und in einem zweiten Schritt in den „Sklave“ übernommen. Dadurch ergibt sich jeweils eine Verzögerung von einer Takt- Halbperiode, ehe die übernommene Information an dem Ausgang erscheint. Durch das Taktsignal wird der „Steuerspeicher“ geladen (der Master), durch das invertierte Taktsignal wird die am Masterausgang liegende Information dann in den „Hauptspeicher“ (Slave) übernommen. Der Vorteil dieses Typ liegt darin, daß das Flip-Flop noch ausgelesen werden kann, während der Master bereits wieder geladen wird. Legt man beide Eingänge J und K auf 1, so ergibt sich ein Frequenzteiler (T/2). Diese Betriebsart wird Trigger - Flip-Flop genannt und findet in Zählern häufig Verwendung (z.B. 48 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Digitale Uhr). Zum Setzen eines definierten Grundzustandes werden häufig sogenannte „Clear“ oder „Reset“ Eingänge an den Flip-Flops bereitgestellt. J & T K S J T T & R Q T K Q JK - Master – Slave – Flipflop Register: Setzt man mehrere solche Flip-Flops in Reihe, so erhält man Mehrbit -„Register“; diese Funktionseinheiten kann man dann als kleinere Speicher verwenden oder bei entsprechender Beschaltung als sogenannte Schieberegister verwenden. Wir unterscheiden Serien Schieberegister und Parallele Schieberegister. Bei den seriellen Schieberegistern wird die Information an einem Eingang eingespeist und dann mit jedem folgenden Takt um eine Stelle in dem Register weiter durchgeschoben. Bei den parallelen Schieberegistern kann eine Anfangsbelegung parallel auf allen Stellen besetzt werden. Wir unterscheiden Links- und RechtsSchiebeoperationen (Shift - Operationen). Damit werden wir in Lage versetzt Multiplikationen oder Divisionen durch 2 auf sehr einfache Weise durchzuführen. 49 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ x0 x1 x2 x3 x4 x5 x6 x7 Ser/Par CLK 8 Bit Schieberegister Clear Din y0 y1 y2 y3 y4 y5 y6 y7 Wie in der obigen Skizze angedeutet, lassen sich mittels Kopplungen z.B. mehrerer D-Flip-Flops Register aufbauen, die z.B. 8 Bit speichern können. Eine wichtige Art von Registern sind die Schieberegister (Shift-register). Sie dienen dazu, Informationen bitweise einzulesen bzw. auszulesen und zu verschieben. Man unterscheidet den Links- bzw. den Rechtsshift. Damit wird eine sehr einfache Multiplizier bzw. Dividieroperation (mit 2) möglich. Der oben dargestellte Block enthält jeweils 8 Ein- und Ausgänge, einen Takteingang, einen seriellen Eingang Din, einen Rücksetzeingang (Clear) und einen Steuerungseingang für die Arbeitsmodi seriell bzw parallel. Schiebt man eine Information, die man an dem Eingang Din angelegt hatte, mit 8 Takten durch, so kann man diese Information dann am Ausgang y7 ablesen. Dieser Arbeitsmodus ist nicht mit einem Kellerspeicher zu verwechseln. Ein Kellerspeicherprinzip wäre gegeben, wenn sich das Register wie eine Röhre mit einem verschlossenen Ausgang verhalten würde. Diese Arbeitsweise kann man natürlich dann erreichen, wenn man die Möglichkeit der Links- und Rechtsshifts geeignet ausnutzt. Register dienen als Speicherelemente für „relativ“ kleine Datenmengen; Größen von etwa 64 kBit bilden hierbei schon die Ausnahme. Allerdings sind die Halbleiterspeicher in der Regel sehr schnell und lassen daher für Aufgaben wie schnelle Zwischenspeicherungen (Caches) sehr gut verwenden. Je nach Anforderung an die Schaltzeiten werden verschiedene Technologien eingesetzt. Zu nennen sind die Bipolar - Technologie, die ECL Technologie und die gewöhnlich verwendete MOS Technologie. Die MOS Technologie hat in den vergangenen Jahren hervorragende Verbesserungen erlebt und ist heute durchaus geeignet, auch schnelle Schaltvorgänge zu bewerkstelligen (Inverser etwa 1ns, auch schneller.) Zudem haben die MOS Schaltkreise den Vorteil des geringen Leistungsverbrauchs. Kühlung wird hier zum sekundären Problem. 50 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Automaten Endliche Automaten Rechner stellen einen Typ von Automat dar. Sie besitzen eine endliche Zahl von Zuständen, die vorherbestimmbar sind. Damit zeigen sie deterministisches Verhalten. Neben vielen anderen Beispielen von Automaten (Kaugummi, Zigaretten, Schokolade, etc.) stellen die Rechner ein besonders komplexes Beispiel dafür dar. Allen Automaten ist gemeinsam: man wirft was ein (Eingabe) aufgrund des Einwurfs reagiert der Automat mit dem gewünschten Verhalten (hoffentlich) der Automat gibt ein Ergebnis aus. Dieses Vorgehen kann man auf eine formale Ebene heben, um das Verhalten von Automaten allgemein darzustellen und sich nicht auf einen speziellen Typ einschränken zu müssen. Wir definieren also: Ein Automat ist beschreibbar durch ein Quintupel A = ( X,Y,Z,,) mit X: endliche Menge von Eingabesymbolen (Eingabealphabet) Y:endliche Menge von Ausgabesymbolen (Ausgabealphabet) Z: endliche Menge von Zuständen und Abbildungen : Z X Z (Zustandsüberführungsfunktion) und : Z X Y. (Ausgabefunktion) Die Arbeitsweise eines Automaten können wir - in Anlehnung an unser Verständnis über Rechner - wie folgt darstellen: 51 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Eingabe u X* x1 xi xn Automat A im Zustand z Z Automat A im Zustand zZ y1 yi yn Ausgabe v Y* Automat Der obige Automat verfügt über einen Lesekopf und einen Schreibkopf, deren Positionen sich jeweils wohl definiert relativ zum Eingabe und Ausgabeband befinden. Der Automat befindet sich jeweils in einem Zustand z Z, der die jeweilige Vergangenheit speichert. Eingegeben werden Wörter u X*. In einem Schritt liest der Automat entsprechend der Position des Eingabebandes ein x X und festgelegt durch die Transitionsfunktion ändert er seinen Zustand und schreibt gemäß der Position des Ausgabebandes ein y Y gemäß der Ausgabefunktion . Danach werden Ein - und Ausgabeband eine Position nach links bewegt. Der Automat reagiert auf jedes x X und z Z, d.h. er ist vollständig; für ein (z,x) Z X reagiert er immer gleich, . h. er ist determiniert. Als Beispiel wählen wir X = x1,x2,....,xp, Y = y1,y2,....ym, Z = z1,z2,...,zn, a . Wir definieren durch die Matrix D = (dij)n,k. mit dij = (zi,xj) und durch eine Matrix L = (lij)n,k. mit lij = (zi, xj). 2 0 . . Sei nun X = 1, Y = 0,1, Z = 1,...,a, D . und L . a 0 1 1 52 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Der so definierte Automat zählt in seinen Zuständen modulo a. Wird für den Anfangszustand z = 1 u X* mit l(u) = r eingegeben, so gibt der Automat 0...0 1 0....0 1 0....0 1 0... aus Die Matrizen D und L faßt man zu der sogenannten Automatentafel zusammen. Sei a = 4; dann folgt für die Automatentafel: XY 1 1 (2,0) 2 (3,0) 3 (a-1,0) a (a,1) Um das Verhalten eines Automaten vollständig beschreiben zu können, erweitern wir zu einer Abbildung Z X* Z und zu einer Abbildung Z X* Y*. Sei nun A = (X,Y,Z ,) wieder ein Automat. Dann werden * und * folgendermaßen definiert: * (z,) =def z für alle z Z * (z,u,x) =def ( * (z,u), x) für alle x X, u X*, z Z und * (z,) = def für alle z Z * (z,u,x) = def * (z,u) (* (z,u),x) für alle x X, u X*, z Z. Satz: Sei A = ( X,Y,Z,,). Für alle z Z und u,v X* gilt dann: * (z, uv) = * (*(z,u),v) und * (z,uv) = * (z,u) * (*(z,u), v) Der Beweis wird durch Induktion über l(v) geführt: Für l(v) = 0: * (z,u) = * (z,u) = * (* (z,u), ) * (z, u) = * (z,u) = * (z,u) = * (z,u) *(*(z,u),) für l(v) = 1: siehe Definitionen zu * für l(v) 1 : v = v´ x mit x X * (z,uv) = * (z,uv´x) = Def. zu * ( * ( z, uv´), x) = (*(* (z,u), v´) , x) = def zu * *(*(z,u), v´x) = * (*(z,u),v) 53 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Ein anderes Beschreibungsmittel bildet der Zustandsgraph des Automaten: Sei M eine endliche Menge und R eine zweistellige Relation in M. Dann heißt G = (M,R) ein gerichteter Graph mit der Knotenmenge M und der Menge der gerichteten Kanten R. Eine Folge k1, k2, k3, ...., kr von Elementen aus M mit r 1 heißt Weg in G von k1 nach kr Def ( i 1,...,r-1)((ki, ki+1) R) Ein Weg k1, ,kr in G mit k1,...,kr heißt Zyklus des Graphen G; r-1 heißt Länge des Weges k1,...kr. Ist G(M,R) ein gerichteter Graph, so bezeichnet man die Knoten als Punkte und die Kanten als (a,b) R als Pfeile von a nach b. Sei nun A = (X,Y,Z, , ) ein Automat. Dann wird der Zustandsgraph wie folgt definiert: M = def Z R =def (a,b) (a,b) Z Z ( x X)( (a,x) = b) Gilt nun (a,b) R für G A = (M,R), so notieren wir an a ---- b x i1 /y1i, ..., xis / yis, wenn für alle j 1,....,s gilt: (a, xij) = b und (a, xij) = yij 1/b Beispiel: Seien X = 0,1, Y = a,b, Z = 0,1,2 und D/L sei 2 / a 2/ a 54 2 /b 2/a 1/b datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Für diesen definierten Automaten GA gilt dann der folgende Graph: 0 1/b 0/b 0/a 1/b 2 2 0/a, 1/a 1 2 Zustandsgraph eines Automaten Das Rechenwerk Rechner – Arithmetik Das Rechenwerk hat die Aufgabe, arithmetische als auch logische Operationen durchzuführen und die notwendige „Infrastruktur“, die zur Ausführung notwendig ist, bereitzustellen. Dazu gehören z.B. die Operandenregister und ein Zielregister, in dem das Ergebnis einer Operation festgehalten (zwischengespeichert) werden kann. Heutige Mikroprozessoren bedienen sich arithmetischer Verfahren, die der ANSIIEEE 754 entsprechen und dadurch die Arithmetik untereinander kompatibel machen. Um Rechenoperationen durchführen zu können, müssen wir uns auf eine geeignete Zahlendarstellung einigen. Wir sind gewohnt, im Dezimalsystem zu denken und zu rechnen. Es zeigt sich aber, daß es wesentlich einfacher ist, Module basierend auf zwei verschiedenen Ziffern aufzubauen, als auf solchen, die zwischen zehn verschiedenen Ziffern zu unterscheiden haben. Eine Realisierung kann entweder durch einen mechanischen Schalter, einen Transistor, einen hydromechanischen Schaltkreis erfolgen. Zudem wird eine eventuelle Fehlersuche dadurch einfacher, da man auch hier nur unter zwei verschiedenen Symbolen zu unterscheiden hat. Zur Beschreibung zweiwertig dargestellter Information stehen logische und mathematische Hilfsmittel zur Verfügung: 55 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ die formale Logik, die sämtliche Aussagen in zweiwertiger Logik macht. (tertium non datur) die Boolsche Algebra über einer Menge von 2 Elementen, die z.B. die Konstruktion minimaler Funktionen unterstützt. die Automaten, welche in der Lage sind, auch analoge Werte zu verarbeiten, indem sie jeweils eine passende Konvertierung durchführen. Polyadische Zahlensysteme: Ist eine Zahl X nach Potenzen einer Basis B zerlegbar, so wird dieses Zahlensystem B-adisches Zahlensystem genannt. Es versteht sich bei der Beschränktheit von Stellen in einem Rechner von selbst, daß diese Zahlendarstellungen immer natürliche Zahlen beschreiben oder endliche Brüche darstellen. Eine natürliche Zahl läßt sich durch folgende Summe darstellen: N n bi Bi i0 wobei B Basis des Zahlensystems B N, B 2 und bi Ziffern (bi N 0 , 0 bi B) genannt werden. Bei B = 10 sprechen wir vom Dezimalsystem, bei B = 2 vom Dualsystem. In den Darstellungen wollen wir uns auf vier Stellen beschränken: Es gilt folgende Zuordnung: Dezimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Binär 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Neben dem Dualsystem sind das Oktalsystem (Basis 8) und das Hexadezimalsystem (Basis 16) von besonderer Bedeutung bei Rechenautomaten. 56 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Endliche Brüche werden entsprechend dargestellt. Hierbei gilt: N x bi B i M und x = ( bN bN-1 bN-2....b0, b-1.... b-M Nichtpolyadische Zahlensysteme Während die Zeitrechnung (Tag, Stunde, Sekunde, etc.) oder die Währungen gemischt polyadische Systeme darstellen, stellt das sogenannte Restklassensystem ein völlig anderes Prinzip dar. Ein Restklassensystem RKN der Ordnung N wird durch N natürliche Zahlen Pi (i=1,2,....,N), die zueinander paarweise prim sind, definiert. Eine natürliche Zahl n wird dementsprechend dargestellt durch N Ziffern zi (i=1,2,...,N), die durch folgende Kongruenzen definiert sind, dargestellt: n zi mod pi (i = 1,2,...,N) N Mit RKN ist in dem endlichen Zahlenbereich 0 n p i eine eindeutige i 1 Zahlendarstellung möglich. Beispiel: RK2 mit p1 = 5, p2 = 7 Die größte darstellbare Zahl ist hier ( 5 * 7) -1 = 34 Die Zahl (29)10 hat in diesem System die Darstellung (41) RK2 weil: 29 / 5 = 4 mod 5 29 / 7 = 1 mod 7 ist. Es gelten folgende Kongruenzen: n + m zi + zi´ mod pi n * m zi * zi´ mod pi mit i = 1,2,...,N Rechenoperationen im Restklassensystem lassen sich also so durchführen, daß man die jeweilige Operation an jeder Stelle durchführt. Es entstehen keine Überträge, die bei der Berechnung von nachfolgenden Stellen berücksichtigt werden müßten. Diese Vereinfachung macht sich besonders bei der Multiplikation positiv bemerkbar. Bei der Division jedoch ist eine eindeutige Operation nicht immer möglich; auch die Vorzeichenerkennung und die Konvertierung bereiten Schwierigkeiten. 57 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Beispiel: RK3 mit p1 = 3; p2 = 7 ; p3 = 11 Die Zahlen n = (12) 10 und m = (17)10 seien additiv bzw. multiplikativ zu verknüpfen: n+m: 0 + 2 mod 3 = 2 d.h. n+m = (217) RK3 5 + 3 mod 7 = 1 1 + 6 mod 11 = 7 Probe: (12)10 + (17)10 = (29)10 = (217) RK3 n * m: 0 * 2 mod 3 = 0 d.h. n * m = (016)RK3 5 * 3 mod 7 = 1 1 * 6 mod 11 = 6 Probe: (12)10 * (17)10 = (240)10 = (016)RK3 Die obige Tabelle (siehe Seite 55) läßt sich einfach auf einem Zahlenkreis auftragen: 58 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 0000 1110 0 14 1100 0010 2 12 4 0100 6 10 8 1010 0110 1000 Die Addition zweier vorzeichenlosen Zahlen kann entsprechend in den Kreis eingetragen werden. Es wird erkennbar, falls die Summe größer als 1510 wird, der entsprechende Zählpfeil „eine neue Runde“ im Zahlenkreis beginnt. Zahlenkreis (B Komplement) 0000 1110 0 -2 1100 0010 2 -4 4 0100 Zur Darstellung negativer Zahlen 6 im B-8 0110 1010 Komplement wird der 1000 Zahlenkreis so aufgeteilt, wie es in der Zahlenkreis mit Zuordnung von Binärzahlen untenstehenden zu positiven und negativen Dezimalzahlen Skizze erkennbar ist. Dabei werden die Binärzahlen, die an der höchstwertigen Stelle eine Eins aufweisen, als negative Zahlen interpretiert. -6 59 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Beispiele: (B-Komplement Darstellung) Addition zweier Zahlen: 0110 0111 (6) (7) 1101 (13) 1100 0111 (12) (7) 0011 (19) (kein Übertrag) (Übertrag!) Addition von Zahlen mit ungleichem Vorzeichen: 1010 0100 (-6) (+4) 1110 (-2) 1100 0111 (-4) (+7) 0011 (+3) (Überlauf: nein; Übertrag: nein) (Überlauf: nein; Übertrag: ja) Addition zweier positiver Zahlen: 0100 0010 (+4) (+2) 0110 (+6) 0110 0111 (+6) (+7) 1101 (13) (Überlauf: nein; Übertrag: nein) (Überlauf: ja; Übertrag: nein) 60 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Arithmetisch logische Einheit (ALU) Die Arithmetisch Logische Einheit führt arithmetische und logische Operationen durch. Typische arithmetische Operationen sind die Addition, die Subtraktion, die Multiplikation und die Division. Alle Operationen lassen sich auf die Addition zurückführen. Somit kommt der Addition eine besondere Bedeutung zu. Wir wollen uns deshalb hier auf die Addition zweier dualer Zahlen beschränken. Schaltungen, die diese Operationen ausführen, heißen Addierer. Bei der Addition von n Dualzahlen gibt es 2n Ergebnisse. Hinzu kommen die evtl. Überträge. Folgende Tabelle soll dies deutlich machen: ai plus bi 0 plus 0 0 plus 1 1 plus 0 1 plus 1 Summe si 0 1 1 0 Übertrag ci+1 0 0 0 1 Wie wir sehen, entsteht eine Summe und im letzten Fall auch ein Übertrag (Carry). Die Summe wird immer genau dann „1“, wenn an den Eingängen ungleiche Werte anliegen. Wir sprechen in diesem Fall von „Antivalenz“. Für die Funktionsgleichung in disjunktiver Normalform ergibt sich: si = ai bi = (ai bi aibi) = ( ai bi) (ai bi) (EXOR, Antivalenz) ci+1 = aibi = ai bi (AND) Definition: Ein Schaltnetz, welches zwei einstellige Dualzahlen (wie oben dargestellt) addiert, nennt man Halbaddierer. Im folgenden wird die Logik für einen Halbaddierer (HA) angegeben: 61 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ a b =1 S C & Definition: Ein Schaltnetz mit drei Eingängen (2 zu addierende Variablen, 1 Übertragsbit) und „ Ausgängen (1 Summenbit, 1 Übertragsbit) nennen wir Volladdierer. Mit Hilfe der Wahrheitstafel für den Volladdierer, in der zu 2 einstelligen Zahlen a i, bi noch der Übertrag ci (aus der vorhergehenden Stufe) addiert wird, läßt sich die zugehörige DNF ableiten: si = ai bi ci ai bi ci aibi ci ai bi ci bzw. ci+1 = ai bi ci ai bi ci ai bici ai bi ci Die Aufgaben eines Rechenwerkes können in drei Aufgabenklassen unterteilt werden: 1. Arithmetische Operationen 2. Logische Operationen 3. Schiebeoperationen 4. Vergleichsoperationen Eine einfache ALU Ergebnisse arithmetischer, logischer, von Verschiebe- oder Vergleichsoperationen werden in einem Statusregister angezeigt. Es erzeugt bei einer n-stelligen ALU aus dem Ergebnis s1,....sn und den Überträgen cn und cn+1 folgende Anzeigen: 62 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ xn xn-1 x1 yn yn-1 y1 cn a b c d =1 ALU cn+1 C N Z V 1 sn sn-1 s0 Beispiel einer Statusregister Konfiguration Übertragsbit C = cn+1 der n-ten ALU-Zelle (CARRY). Es zeigt an, ob eine arithmetische Operation ein Übertragsbit erzeugt hat. Vorzeichenbit N = sn. Es zeigt bei N=1 ein Minuszeichen an. Nullbit Z = s1 sn. .Es zeigt an, ob das Ergebnis aus lauter Nullen besteht. Überlaufbit V = cn cn+1 für Zweier-Komplemente B-Komplement-Darstellung). Es berechnet aus beiden Überlaufbits cn und cn+1 die Überlaufbedingung (Overflow). Das Statusregister erlaubt den Vergleich von Eingaben x und y. Der Vergleich wird als Subtraktion zweier Zahlen durchgeführt. Das Ergebnis wird nicht gespeichert. Das Vergleichsergebnis steht im Statusregister an den Stellen C, Z, N und V. Geht man von vorzeichenlosen Binärzahlen x und y aus und subtrahiert diese voneinander, d.h. x-y,, dann wird genau dann Z=1 gesetzt, wenn x-y = 0 wird, d.h. X=Y gilt. Wenn wir die Subtraktion mit den Ansteuersignalen ab und c durchführen, dann wird die Operation im Einerkomplement, d.h. x + 2 n-1-y durchgeführt. Daraus folgt dann sofort, daß C=1 wird, falls xy ist bzw. C=0, falls x y gilt. Bei der Subtraktion im Zweierkomplement, d.h. falls das Steuersignal c = 1 gilt, können wir aus Z=1 x = y folgern. Aus N = 0 ohne Überlauf V folgt x y wegen 63 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ des positiven Resultats. Das gleiche gilt bei V = 1 mit dem dadurch geänderten negativen Vorzeichen N = 1. Aus N = V kann man also x y folgern. Ein negatives Vorzeichen N = 1 ohne Überlauf, ebenso wie ein positives Vorzeichen mit Überlauf bedeutet hingegen x y. Die folgende Tabelle faßt diese Folgerungen nochmals zusammen: Relation Vorzeichenlose Zahl Zweierkomplement x=y Z=1 Z Z=1 Z xy Z=0 Z Z=0 Z xy C=1 C N=V NV xy C=0 C NV NV xy C = 1 und Z = 0 CZ N = V und Z = 0 CZ xy C = 0 oder Z = 1 C + Z N V oder Z = 1 (N V) + Z Wie wir gesehen haben, werden in einer Arithmetisch - Logischen Einheit mit Hilfe von Steuersignalen Operationen durchgeführt, die Auswirkungen auf die Daten haben, die im Rechner verarbeitet werden sollen, als auch auf die Daten, die für den Ablauf der gewünschten Operationen verantwortlich sind. Die Adreßrechnung ist hierbei besonders hervorzuheben. Die Steuersignale, die damit auf der untersten Ebene den Zustand der Hardware bestimmen, werden durch Taktsignale aktiviert. Diese Taktsignale werden parallel generiert; damit werden zeitgleich mehrere Operationen angestoßen. Jeder einzelne Steuerschritt wird durch ein Steuerwort beschrieben, welches die Steuersignale für genau diesen Steuerschritt enthält. Wie wir bereits wissen, werden zur Codierung verschiedene Ebenen benutzt: wir kennen Hochsprachen wie FORTRAN, C oder PASCAL, in denen der Benutzer sein Problem auf einer sehr abstrakten Weise definiert. ASSEMBLER als Maschinensprache liegt schon „viel näher“ an der Hardware, als z. B. eine Hochsprache, in der nicht einzelne Register explizit angesprochen werden. Die Steuersignale für eine ALU z.B. benötigen aber genaue Information darüber, welche Register als Quelle dienen, welche Steuersignale bei einer „ADD“ Operation aktiviert werden müssen und welche Zielregister bei einem bestimmten Befehl addressiert werden sollen. Diese Informationen sind im Steuerwort enthalten. Steuerworte sind Teil der sogenannten mikroprogrammierten Steuerung, die bei den meisten Rechnern fest über ROM o. ä. vorgegeben ist. Manche Rechner erlauben die Mikroprogrammierung. Hier kann also ein völlig neuer Befehlssatz für den Rechner kreiert werden. Im allgemeinen aber sind die Rechner, wie wir aus dem Bereich der Mikroprozessoren wissen, aus gutem Grund nicht mikroprogrammierbar. Die Steuerworte mikroprogrammierbarer Rechner sind meist lang; sie verfügen über eine Länge von bis zu 100 Bit. (VAX 11/780 hat 99 Bit) 64 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Eine mögliche Zentraleinheit: Außer der eigentlichen Recheneinheit benötigen wir für die sogenannte Zentraleinheit (Central Processing Unit, CPU) eine programmierbaren Hauptspeicherzugriff, eine Steuerung zur Verarbeitung der gespeicherten Programmbefehle und die Steuerung der Ein- und Ausgabe Der Hauptspeicher, der meist als dynamischer Speicher ausgelegt ist, ist gewöhnlich byteadressiert. Im Regelfall werden Speicherworte ausgelesen. Dazu muß eine Adresse bereitgestellt werden. Diese Adresse steht im Speicheradreßregister (SAR), welches im allgemeinen ein Speicherwort zwischenspeichern kann. Die Daten, die eingelesen oder ausgelesen werden, werden im Speicherdatenregister (SDR) zwischengespeichert. Die Länge des Speicheradreßregisters entspricht dem logisch adressierbaren Hauptspeicheradreßbereich. Demgegenüber steht der physikalisch adressierbare Bereich. Die Steuerung zur Speicherung der gespeicherten Programmbefehle wird durch Maschinenbefehle, die in ihrer Gesamtheit ein Maschinenprogramm darstellen, bewerkstelligt. Auf dieses und die darunter liegende Mikroprogrammierung wird später noch näher eingegangen. Zum Zugriff auf die Ein- und Ausgabegeräte wird jedem Gerät eine bestimmte Speicheradresse zugewiesen, auf der die Adresse und die Größe des Bereiches vermerkt ist, der z.B. ausgelesen werden soll. Für die Programmierung unterscheidet sich dieser Zugriff auf die I/O Einheiten nicht vom Speicherzugriff. (memory mapped I/O). Wie wir bereits wissen, unterscheiden wir Programmiersprachen, die auf verschiedenen Ebenen des Rechners wirken: 1. Hochsprachen, wie FORTRAN, ALGOL, COBOL, PASCAL, C, SMALLTALK etc. 2. Maschinensprachen, z.B. die ASSEMBLER 3. die Mikroprogrammierung (Nanoprogrammierung), die für die einzelnen Rechenanlagen sehr spezifisch sind und meist für den Benutzer nicht mehr zugänglich ist. Die oben angegebenen Hochsprachen werden durch Übersetzer (Compiler) in maschinenverständliche Form gebracht. Wie wir auch bereits wissen, ist die Programmierung mit Maschinensprachen wie ASSEMBLER , weil sie näher an der eigentlichen Struktur des Rechners liegt, meist wesentlich aufwendiger, dafür aber auch in der Ausführung merklich flinker. Aus diesen Gründen werden bestimmte Teile von Programmen, bei denen es auf die schnelle Ausführung ankommt, häufig in ASSEMBLER programmiert. 65 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Die noch hardwarenähere Form der Programmierung ist die Mikroprogrammierung. Mit ihr können neue Befehlsstrukturen wie ASSEMBLER Sprachen definiert werden. Diese Programmierung ist sehr aufwendig, fehleranfällig und wird deshalb dem Programmierer bei den gängigen Maschinen überhaupt nicht zur Verfügung gestellt. Noch darunter, d.h. noch näher an der Hardware liegt die Nanoprogrammierung. Ihr Anteil liegt in der Festlegung der Prozeßabläufe auf der Ebene von PROMS etc. Beschränken wir uns hier auf die Maschinensprachen. Ihre Programmierung erfolgt mit den Maschinenbefehlen (z.B. ADD, SHIFT, MOVE, JUMP etc.). Diese Befehle werden in ein ausführbares Programm umgesetzt. Das bedeutet: die Maschinenbefehle werden interpretiert (z.B. durch ein Mikroprogramm) und als Befehlsfolge ( Bitfolgen) im Hauptspeicher gespeichert. Die Adressen der auszuführenden Befehle werden dabei aus dem Befehlszähler (program counter) erhalten. Dessen Inhalt wird häufig nur inkrementiert, bei Sprüngen jedoch werden im Befehl explizit angegebene Adressen geladen. Die aus dem Hauptspeicher ausgelesenen Befehle (meist wortweise) werden im Befehlsregister gespeichert und mit Hilfe des Steuerwerks in die gewünschten Steuersignale umgesetzt. Nachdem ein Befehl ausgeführt ist, dient der neue Befehlszählerinhalt über das Speicheradreßregister zur Adressierung des nächsten Befehls aus dem Hauptspeicher. Über das Speicherdatenregister wird dann der neue Befehl in das Befehlsregister geladen. Merke: Im Befehlsregisters steht immer ein Zeiger (pointer), der auf die Stelle zeigt, wo der nächste auszuführende Befehl steht. Die beschriebenen Prozesse bestehen aus folgenden Schritten: Hole den nächsten Befehl Entschlüssele den Befehl Führe den geholten Befehl aus Speichere das Ergebnis 66 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ BR Steuerwerk Register Vom Hauptspeicher SDR Zum Hauptspeicher SAR ALU BZ Shifter Befehlshol und -ausführzyklus in einer CPU Hardwarebeschreibungssprachen: Zur formalen Beschreibung der einzelnen Arbeitsschritte in einem Rechner oder auch allgemein, in einem technischen System benötigt man wegen der rapide ansteigenden Komplexität zunehmend Werkzeuge und Hilfsmittel. Dies gilt im besonderen zur Synthese der Systeme. In den vergangenen Jahren seit 1975 wurden eine große Anzahl von Hardwarebeschreibungssprachen, bzw. Registertransfersprachen (HDL, RTL)) entwickelt, die jede für sich ihre Stärken, aber auch Schwächen aufweisen. Zu nennen sind da im besonderen z.B. MIMOLA der Universität Kiel , KARL der Universität Kaiserslautern, CAP der Universität Dortmund (Paderborn). RTL beschreiben die Hardwareeigenschaften eines Systems mit Hilfe geeigneter Modelle. Dabei beschränkt man sich z.Z. noch weitgehend auf das elektrische/elektronische Verhalten der Schaltung. Neuere Ansätze beziehen auch mechanische, 67 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ hydraulische oder Sensorsysteme in die Beschreibung mit ein. VHDL (VHSIC Hardware Description Language; VHSIC = Very High Speed Integrated Circuits) wurde in den Mitachtzigern von einem amerikanischen Firmenkonsortium entwickelt und stellt heute bereits einen „Quasistandard“ einer HDL dar. Eine weitere Methode der Synthese von Systemen besteht in der zeitgleichen Generierung von Hard- und Software. Man nennt diese Verfahren auch Hardware / Software - Codesign. Diese Methode biete die Möglichkeit, schon beim Entwurf eine Optimierung dahingehend durchzuführen, ob man ein Problem vorzugsweise mit Hardware und/oder Software lösen sollte. Es stellt sich bei vielen Problemen z.B. di Frage, ob man auf standardmäßige (preiswerte) Baugruppen zurückgreift, einzelne kleinere Schaltungen entwickelt; das Hauptproblem jedoch durch geeignete Software löst. Wir wollen uns auf die elektronische Beschreibung beschränken. RTL gehen i.a. nicht herunter bis auf die Transistorebene, sondern beschränken sich auf die logischen Ebenen der Register, Busse, Leitungen und Gatter. Die Darstellung des zeitlichen Verhaltens der Schaltung spielt eine hervorgehobene Rolle. Als kleines Beispiel von VHDL sei ein Halbaddierer beschrieben: Das tragende Element einer Hardware-Struktur ist das Modul (components), die Ein- und Ausgänge (ports) und natürlich die Information in Form der Signale. Unter components werden dabei Blöcke verschiedener Komplexität verstanden (Gatter, Chip oder eine komplettes PCB). Signale sind über die elektrischen Verbindungen wie Leitungen Bindeglieder zwischen zwei components. Components werden durch die „design entity“ charakterisiert. Sie besteht aus der „entity declaration“ und dem „architectural body“. Die „entity“ Beschreibung enthält die Charakterisierung der Schaltung „von außen“ gesehen mit den zuvor definierten „declarations“ und dem „body“. X Y Summe Halbaddierer (Half_adder) Übertrag Die folgende Deklaration enthält zwei Input - Ports und zwei Output - Ports. Dann kann man schreiben: 68 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ -- Entity Deklaration eines Halbaddierers entity Half_adder is port ( X : in Bit ; Y : in Bit ; Sum : out Bit ; Carry : out Bit) ; end Half_adder ; Die beiden „— „ markieren einen Kommentar in VHDL. In eienr entity declaration wird die entity selbst und jeder ihrer ports mit einem identifier bezeichnet. Ein VHDL identifier ist eine Folge von „characters“ ohne Leerzeichen und müssen , den folgenden Regeln genügen. Jeder character in der Folge ist entweder ein Buchstabe (a bis z, Groß- und/oder Kleinschreibung), eine Ziffer (0 bis 9) oder ein Unterstrich (_). Das erste Zeichen der Folge muß ein Buchstabe sein. Die Zeichenfolge enthält keine aufeinanderfolgende Unterstriche noch darf eine Folge mit einem Unterstrich enden. In VHDL gibt es reservierte Worte (wie in jeder Programmiersprache auch). Beispiele hierfür sind begin, end, entity und port ; sie werden in den Beschreibungen immer fettgedruckt. Der architecture body stellt den detaillierten Blick auf die beschriebene Schaltung zur Verfügung; hier wird das Verhalten beschrieben. Das folgende Beispiel gibt den architecture body eines „Halbaddierers“ wieder. Dies ist eine Addierschaltung, die aus zwei Summanden eine Summe mit Übertragsbit erzeugt: -- Der architectural body eines Halbaddierers architecture Verhaltensbeschreibung of Half_adder is begin process Summe <= X xor Y after 5 ns ; Übertrag <= X and Y after 5 ns ; wait on X, Y ; end process ; end Verhaltensbeschreibung ; Die obige Beschreibung enthält ein process-statement, welches zwei signal assignment statements und ein wait statement enthält. Das erste Signal, bezeichnet mit Summe, enthält das Ergebnis der Exclusiv-Oder Verknüpfung mit den den Eingängen X und Y nach 5 ns. Analog ist das zweite Ausgangssignal zu betrachten. 69 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Kompatibilität der Operanden Heutige Mikroprozessoren bedienen sich arithmetischer Verfahren, die der ANSIIEEE 754 Norm entsprechen und dadurch die Arithmetik untereinander kompatibel machen. Um Rechenoperationen durchführen zu können, müssen wir uns auf eine geeignete Zahlendarstellung einigen. Es werden - basierend auf der binären Darstellung von Zahlen - das sogenannte Zweier (B) Komplement und das Einer (B-1) Komplement verwendet. In den Darstellungen wollen wir uns auf vier Stellen beschränken: Sei 1 m 1 B Statt des Exponenten e wird häufig die sogenante Charakteristik verwendet. Stehen E-Stellen zur Darstellung des Exponenten e zur verfügung, so erhält man die Charakteristik, indem man zum Exponenten ½ BE addiert. Beispiel: Sei B = 10, E = 2. Dann würde der Exponent von –50 bis 49 laufen können, bei der Charakteristik aber von 0 bis 99. Dem Exponenten +7 erspräche die Charakteristik 57 ( da Exponent + ½ BE = 7 + 50 = 57) oder für –7 erhielte man die Charakteristik –7 + 50 = 43. In der binären Darstellung mit E-Stellen ist die Charakteristik c für den Exponenten e analog gegeben durch e:= e + ½ BE = e + 2E-1. Die Mantisse wird meist durch den Betrag ( M-Stellen) und Vorzeichen (1 Stelle) dargestellt, so daß eine typische Gleitpunktdartsellung folgende Struktur hat: V Charakteristik Betrag (Mantisse) Es gelten weiter die folgenden Vereinbarungen: Normierung und Runden: Abgesehen von der oben darstellten internen Darstellung der Zahlen z.B. als Operanden an eine arithmetisch logischen Einheit (ALU) wollen wir zur Übersichtlich auf eine höhere Darstellungsebene ausweichen. Wir wollen ganze Zahlen in der Form bn-1 bn-2..... b1 b0 verwenden. Gleitpunktzahlen wollen wir mit m Be bezeichnen. Dabei steht m für Mantisse, B für Basis und e für Exponent. Um z.B. führende Nullen einer Zahl (e.g. 0000234) nicht unnötig mit verarbeiten zu müssen und damit die Leistung des Rechners merklich zu reduzieren, werden die Mantissen „normiert“, d.h. führende Nullen werden vor der Weiterverarbeitung der Zahl gestrichen. Die Normierungsbedingungen sind dabei abhängig von der Basis der Mantisse. Bei einer Zahl mit der Basis 2 gilt eine Mantisse dann als normiert, 70 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ wenn die erste Stelle hinter dem B-Punkt (Komma) eine 1 ist. Bei einer Basis 16 gilt eine Mantisse als normiert , wenn der Wert der ersten vier Stellen 0000 ist. Man schiebt also die Mantisse soweit nach links, bis die Normierungsbedingung erfüllt ist. Entsprechend der Anzahl der Schiebeoperationen muß der Exponent erniedrigt werden. Bei der Rundung eines Ergebnisses unterscheidet man vier Verfahren: Abschneiden hierbei wird der Teil der Mantisse, der die Anzahl der zulässigen Mantissenstellen überschreitet, einfach abgeschnitten. Normales Runden Die erste Ziffer, die über der Anzahl der zulässigen Mantissenstellen liegt, bestimmt das weitere Vorgehen. Ist sie gleich 0, dann wird abgeschnitten, ist sie gleich 1, wird auch abgeschnitten und zusätzlich auf die letzte verbleibende Stelle eine 1 addiert. Jamming Dasselbe Vorgehen wie beim Abschneiden, jedoch wird die letzte verbleibende Stelle immer auf 1 gesetzt. R* - Runden Dasselbe Vorgehen wie beim „Normalen Runden“, jedoch mit der Ausnahme, daß 1.00.........0 zu 1.00.......01 wird. Als Beispiel für eine Operation sei ein Addierer vorgeführt. Die preiswerteste aber auch die langsamste Implementierung eines Addierers ist die des „ripple-carryAddierers“ (RCA). Hierbei werden bei der Addition von n Bitstellen n sogenannte Volladdierer in Serie geschaltet. Entsprechend der seriellen Abarbeitung der Addition ist der Zeitaufwand für eine Addition direkt von der Stellenzahl n abhängig. und deshalb 2n, wenn die Schaltzeit eines Gatters ist. Es sei hier erwähnt, daß ein Signal zum Durchlaufen eines Volladdierers zwei Gatterlaufzeiten benötigt. Struktur eines RCA: 71 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ an-1 bn-1 cn-2 a1 VA b1 c0 a0 VA b0 c -1 VA Ripple Carry Adder Denselben Zeitaufwand , aber mit weniger Hardware benötigt der Carry -Save Adder (CSA). Seine Struktur sieht wie folgt aus: an-1 a1 Summenbit a0 VA bn-1 b1 b0 Übertragsbit D-FF Carry - Save - Adder Es ist klar, daß bei wesentlich erhöhtem Hardwareaufwand, d.h. bei Bereitstellung von n Addierern, die aufsteigend von 1 Eingang (a0,b0) bis zu n Eingängen (an-1,bn1) parallel die Summen generieren, sich der erforderliche Zeitaufwand auf 2 72 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ reduziert. Dies ist jedoch das andere Extrem zur Berechnung mit dem Ripple Carry Adder. Im Zwischenraum beider Extreme findet sich der Carry look-ahead Adder. Seine Struktur sieht wie folgt aus: ai ai bi & ci 1 ci-1 bi & & 1 & 1 1 gi = ai bi pi = ai bi Dabei gilt für gi = aibi und für pi = ai bi ci = ai bi v ci-1 (ai bi) si = ai bi ci-1 =1: Ein Carry wird an dieser Stelle generiert =0: An dieser Stelle wird kein Carry erzeugt =1: Ein Carry aus einer niedrigeren Stelle wird weitergeleitet =0: Von einer niedrigeren Stelle liegt kein Carry zur Weiterleitung vor. Der Vorteil dieses Verfahrens liegt bei der Anwendung von Gruppen oder auch Bitslice-Operationen. Dabei werden meist je vier Bitstellen mit vier Volladdierern zu einem Bitslice Baustein zusammengefaßt. 73 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Ein neuer Gruppenübertrag ergibt sich, wenn entweder G = 1 ist oder wenn P = 1 a3 b3 a2 b2 a1 b1 a0 b0 C P C P VA3 VA2 VA1 VA0 G G s3 s2 s1 s0 Bitslice Addition ist und C-1 = 1 ist. Die Analyse der zugehörigen Schaltung ergibt einen Zeitaufwand von 6; die Erzeugung der pi bzw. der gi und die Überträge zwischen den einzelnen Addierern machen dabei jeweils einen Anteil von 2 aus. 74 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Carry Look Ahead Adder: Quelle: Lewin, Theory and Design of Digital Computers, Nelson, 1972 Die Idee dieser Methode besteht darin, die Eingänge der einzelnen Addierstufen zu prüfen und gleichzeitig die Überträge für jede dieser Stufen zu ermitteln. Die entstehenden Carries werden dann an die zugehörigen Addierstufen angelegt, die dann die Endsummen generieren. Anstatt jeweils auf die Carries zu warten, die in jeder Stufe als Folge der vorhergehenden Stufen generiert werden und dann erst den endgültigen Wert liefern, sind die korrekten Carries und Summen unmittelbar an den Ausgängen verfügbar. Theoretisch könnte die Methode für alle Addierstufen angewandt werden, in der Praxis reduziert man jedoch wegen der Kosten diese Methode jeweils auf Gruppen von Stufen (z.B. jeweils 4 bit Addierer). Das generelle Konzept sieht wie folgt aus: Gi Ai Bi (Carry Generate) und Pi Ai Bi Ai Bi (Carry Propagate). Das 1-Carry für die n-te Stufe , Cn bildet sich entsprechend den Bedingungen aus: C n Gn Pn C n 1 Diese Gleichung sieht nach Rekursion aus, denn: C n G n Pn G n 1 Pn 1C n 2 G n Pn G n 1 Pn Pn 1C n 2 Daraus folgt dann unmittelbar: C n Gn Pn Gn1 Pn Pn1Gn 2 ....... Pn Pn 1 Pn 2 ....P1C 0 Wenn wir C0 = G0 setzen, können wir folgendermaßen schreiben: n n n n C n G n Pi G n 1 Pi G n 2 Pi G n 3 ...... Pi G0 i n i n 1 i n2 i 1 Wie wir in der obigen Gleichung sehen, besteht jeder Term des Ausdrucks aus einem Generate-Term und dem Produkt einer Zahl von Propatgate-Terme. In der n-ten Stufe wird also ein Carry genau dann gebildet, wenn: a) Die Stufe n generiert selbst ein Carry; 75 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ b) die vorhergehende Stufe (n-1) generiert ein Carry und die n-te Stufe propagiert es, oder die (n-2)-te Stufe generiert ein Carry und es wird durch die Stufen n und (n-1) propagiert, etc. c) ein Carry wird an der ersten (niedrigstwertigen) Stelle generiert und alle Stufen propagieren es. Daher kann die Carry-Gleichung auch in der folgenden Form geschrieben werden: n n C n Pi G j j 0 i j 1 76 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Quelle: Lewin: Theory and Design of Digital Computers, Nelson , 1972 77 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 78 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Multiplikation: Die Multiplikation bzw. Division erfolgt durch sukzessives Addieren / Subtrahieren des Faktor / Divisors. Eine (unter vielen Variationen ) mögliche Struktur sieht folgendermaßen aus: Register A Register Q ADD & Register B Multiplizierer Die beiden Operanden stehen in Register Q und B. Register A wird zu Beginn der Operation auf Null gesetzt. Abhängig von der niedrigstwertigen Stelle in Q werden die Inhalte von B und A addiert oder nicht. Anschließend erfolgt eine Rechtsschiebeoperation um eine Stelle in A und Q. Register A und Q sind hintereinandergeschaltet, d.h. diejenige Stelle, die bei Register A rechts herausfällt, fließt bei Q links hinein. Folgende Operationen werden ausgeführt: 1) q0 = 1: q0 = 0: ausgeführt; A+BA A+0A (diese Operation wird natürlich nicht Register A bleibt unverändert) 2) in 2 AQ / 2 AQ d.h. Rechtschiebeoperation um eine Bitstelle AQ, gleichbedeutend mit einer Division durch 79 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 3) Wenn alle Stellen der Operanden (Faktoren) bearbeitet wurden , ist die Multiplikation abgeschlossen. Das Ergebnis ist dann in Register AQ abrufbar. Die Länge des Ergebnisses hat doppelte Länge. Division Bei der Division geht man analog vor, d.h. 1) 2 AQ AQ 2) (Linkschiebeoperation um eine Bitstelle in AQ) A-BA Fallunterscheidung: A 0: q0 = 1 A < 0: q0 = 0 und A + B A 3) (Restaurierung von A) Nach n Schritten steht das Ergebnis in Q. Beschleunigungen: Beschleunigungen werden heute durch den Einsatz spezieller Prozessoren erreicht, sogenannter Coprocessoren. Dabei werden Gleitkommaoperationen nicht vom Rechner (Mikroprozessor selbst, sondern dem dafür optimierten Coprozessor ausgeführt. Damit durch den Einsatz eines Coprozessors wirklich Vorteile erwartet werden können, muß der Coprozessor sehr eng an den Haupt-Prozessor gekoppelt sein; es dürfen keine zusätzlichen, unnötigen Operationen notwendig werden. Diese Forderungen werden z.B. beim Prozessor AM29000 und seinem Coprozessor AM29027 erfüllt. Das untenstehende Blockschaltbild gibt eine grobe Übersicht über die Kopplung. 80 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ AM29000 AM29027 A S D R I F CTL 0-7 CTL 0-7 CTL 0-2 CTL 0-2 Prozessor AM 29000 / Coprozessor AM29027 Alle Datenleitungen sind 32 Bit breit. Die Operanden werden in die Register S und R geladen. Die auszuführende Operation in das Register I (Instruction). Nach Abarbeitung der Instruction (des Befehls) wird das Ergebnis aus F in den Prozessor übertragen. Eine andere Möglichkeit der Kopplung der beiden Prozessoren besteht im gemeinsamen Zugriff auf den Systembus. In diesem Modus ist der Coprozessor direkt an den Systembus gekoppelt, an den auch der Hauptprozessor angeschlossen ist. Aus der Statusinformation des Hauptprozessors kann man erkennen, wann ein Speicherzugriff bevorsteht. In diesem Fall greift der Coprozessor synchron auf den Bus zu und prüft, ob der auszuführende Befehl eine arithmetische Operation enthält. Wenn ja, übernimmt der Coprozessor die Ausführung des Befehls. Er übernimmt die Operanden und führt das Ergebnis selbständig an den Speicher ab. Während dieser zeit kann der Hauptprozessor bereits weitere Befehle aus der Befehlswarteschlange abarbeiten, sofern er dazu keinen Zugriff auf den Bus durchführen muß. Nach Ausführung des Befehls durch den Coprozessor erhält der Hauptprozessor eine entsprechende Fertigmeldung. 81 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Haupt Prozessor Coprozessor Speicher Adreßbus Steuerung Datenbus Kommunikation über gemeinsamen Speicher Das Steuerwerk Allgemeines Das Steuerwerk ist für die Abarbeitung der Befehle zuständig. Befehle werden während der Befehlsholphase aus dem Speicher geladen, dekodiert und während der Ausführungsphase ausgeführt. Die verschiedenen Typen von Mikroprozessoren weisen hier verschiedene Anzahlen von Assemblerbefehlen auf; sie unterscheiden sich im Umfang der Befehle und der daraus resultierenden Realisierung des Steuerwerks. Die Größe der Befehle ist abhängig von der Anzahl der im Befehl enthaltenen Adressen. Es gibt: Stack - Maschinen (Keller Maschinen). Hier ist keine Adresse im Befehl enthalten. Ein Operator arbeitet auf den Operanden im Stack und schreibt das Ergebnis wieder in den Kellerspeicher. Einadreßmaschinen: Im Befehl ist maximal eine Adresse enthalten. Der Operator verknüpft den Inhalt des Akkumulators (das ist ein Register, welches als temporärer Speicher verwendet wird) mit dem Inhalt der adressierten Speicherzelle. (<A> := <A> op <Adr>) Zweiadreßmaschinen (z.B. INTEL 80486, Motorola 68020): Im Befehl sind maximal zwei Adressen enthalten. Der Operator verknüpft den Inhalt der adressierten Speicherzellen und schreibt das Ergebnis in den Akkumulator ( <A> := <Adr.1> op <Adr.2>) Dreiadreßmaschinen (RISC- Prozessoren): Hier sind maximal drei Adressen im Befehl enthalten. Der im Befehl angegebene Operator verknüpft die Inhalte von 82 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ zwei der drei adressierten Speicherzellen und schreibt das Ergebnis in die dritte adressierte Speicherzelle. (<Adr.3> := <Adr.1> op <Adr.2). Wegen der langen Adressen sowie der großen Anzahl der Befehle wird diese Form bis auf die RISC Prozessoren nicht mehr häufig angewendet. Bei RISC Prozessoren wird dieser Nachteil durch die z.T. erheblich vereinfachte Befehlssätze (Reduced Instruction Set Computer) ausgeglichen. Wie sieht nun ein Befehl in praxi aus? Am Beispiel des Motorola 68020 wollen wir ein Beispiel geben. Der minimale Befehl hat hier 16 Bit, der maximale Befehl ist 11 mal so lang. Man sagt auch, das Befehlswort hat eine Länge von 16 Bit. Diese Länge ist identisch mit der Wortbreite des Rechners. Wortbreiten können 4, 8, 16, 32 oder ein Vielfaches davon sein. Es hat sich herausgestellt, daß Wortbreiten von 32 bzw. 64 Bit für leistungsstarke Rechnersysteme sehr günstig sind. Im Motorola 68020 ist die Wortbreite 16 Bit, für einen Mikroprozessor eine übliche Länge. Unabhängig, wie lang der Befehl im 68020 auch ist, das erste Befehlswort mit 16 Bit ist immer vorhanden. Es kann jedoch erweitert werden, wie oben beschrieben wurde. Das erste Befehlswort hat folgende Form: Unter dem Mode verstehen wir die Adressierungsart; z.B. die Byte- oder Wortadressierung. Bei der Kurzform kommen zu diesem ersten Befehlswort zwei sogenannte Ergänzungswort à 16 Bit mit identischem Aufbau hinzu. Dabei bezieht sich das 15 6 Befehlscode 5 3 Mode 2 0 Register 1. Befehlswort beim Motorola 68020 erste Ergänzungswort auf den Quellbereich, d.h. wo Daten hergeholt werden; das zweite Ergänzungswort bezieht sich auf den Zielbereich, d.h. dort wird angegeben, wo ein Datum abgelegt werden soll. Ein solches Ergänzungswort hat folgendes Aussehen: 83 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 15 D 8 REG W SC 7 0 0 OFFSET Kennzeichnung Kurzform Skalierung 1,2,4 oder 8 Registerbreite 16/32 Bit Indexregister aus Daten- und Adreßregistersatz 68020 Ergänzungswort Kurzform Die Skalierung erleichtert die Byte- bzw. Wortadressierung. Dabei wird die Adresse (z.B. im Indexregister ) mit dem Skalierungsfaktor multipliziert. Bei der Langform haben wir folgende Situation: Hier wird das 1. Befehlswort durch bis zu 5 mal 16 Bit für den Quelloperanden ergänzt und bis zu 5 mal 16 Bit für den Zieloperanden. Die Registerbezeichnungen für das 1. Befehlswort behalten dabei ihre Bedeutungen. Das 8. Bit kennzeichnet dabei Lang- oder Kurzform. Die einzelnen Felder haben folgende Bedeutung: B: das Registerfeld im Operationswort dient der Adreßberechnung. I: das Registerfeld im 1. Ergänzungswort dient zur Adreßberechnung BDS: Länge des 1. Offsets (relative Adressierung) IS: Länge des 2. Offsets. Zur Berechnung wird hierbei auf das Feld MODE zurückgegriffen. Statt des 1. und 2. Offsets kann bei direkter Adressierung auch ein Datum angegeben werden. 84 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 15 D 0 REG W SC 1 B I BDS 0 IS 1. Offset zum Basisregister (0, 1 oder 2 Worte) 2. Offset zur indirekten Speicheradresse (0, 1 oder 2 Worte) Ergänzungwort der Langform Mikroprogramme Nachdem nun eine Befehlsstruktur vorliegt, stellt sich die Frage, wie ein solcher Befehl „umgesetzt“ wird. Uns ist klar, daß die vorliegende Befehlsstruktur auf einer Hardware- nahen Ebene wirkt. Man nennt die Sprache auch Assembler, weil sie eine direkte Zuordnung der Befehlsinhalte zu den auszuführenden Operationen (logisch oder arithmetisch) repräsentiert. Selbst der Assemblercode verwendet bereits Synonyme für durchzuführende Operationen (z.B. ADD für Addieren etc.). Solche Befehlscode müssen jedoch der Maschine verständlich gemacht werden, d.h. so dekodiert werden, daß die ausführende Einheit „versteht“, was sie zu tun hat. Für die Praxis bedeutet dies, daß jeder Assemblerbefehl in eine Folge von weiter heruntergebrochenen, hardwarenäheren Codes zerlegt wird. Eine solche Folge von Codes nennt man dann Mikroprogramm. 85 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Definition: Mikroprogramm Ein Mikroprogramm ist die Darstellung eines Algorithmus, der von den Funktionseinheiten der Prozessor-Hardware ausgeführt wird und damit eine Maschinenoperation ausführt. Ein Mikroprogramm kann fest verdrahtet sein oder es kann in einem speziellen Speicher („control store“ mit sehr kleiner Zugriffszeit implementiert sein (Firmware Realisierung). Ein Mikroprogramm besteht in der Regel aus einer Folge von Mikrooperationen. Mikrooperationen, die zur gleichen Taktzeit ablaufen können, werden zu Mikrobefehlen zusammengefaßt. Mikroprogramme dürfen bedingte Verzweigungen aufweisen. Die folgende Skizze gibt das Prinzip der Mikroprogrammierung an: 86 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Konnektionsmatrix s1 s2 s3 Steuermatrix s4 si sn-1 sn F MZ Entschlüsseler 1 aus n Prinzip der Mikroprogrammierung Die Bitleitungen des F-MZ Registers bilden die Eingangsleitungen des Entschlüsslers (Dekoder). Entsprechend dem anliegenden Bitmuster aktiviert er genau eine seiner n Ausgangsleitungen. Die gekennzeichneten Kreuzungspunkte stellen dann eine Verbindung zu den Steuerungs-Ausgängen s1 bis sn her und aktivieren damit die zugehörigen Funktionselemente. In der Konnektionsmatrix wird durch deren aktivierte Verbindungen der Inhalt des F-MZ neu gesetzt. Damit erhält der Dekoder wieder neue Eingangsinformation, die zu einer neuen Ansteuerung der angeschlossene Funktionselemente (z.B. arithmetisch logische Einheit) führt. Die 87 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Kapazität von Mikroprgrammspeichern ist relativ zu den Kapazitäten der Hauptspeicher oder gar zu den der Plattenspeicher geradezu winzig. Ihr Umfang ist abhängig vom Prozessortyp und liegt bei etwa 30.000 Bit. Wir wollen diesen Sachverhalt detaillierter erläutern, dazu gehen wir von folgender Struktur aus: Statusregister Befehlsregister Operation AF EF Adresse F V R Berechnung der nächsten Adresse Z N C Steuer adress register Steuerwort speicher S (PROM) U Ext. Signale Mikroprogrammierung Für jeden Takt ti werden Steuersignale sj generiert, die die Ausführung z.B. der Registertransferbefehle gewährleisten. Die n Steuersignale werden in dem Steuerwort s = s1.....sj....sn zusammengefaßt. Für jede Zeile Z z.B. eines Registertransfers wird ein Steuerwort s(Z) bereitgestellt, das genau dann ausgeführt wird, wenn die Transferbedingung (Z) erfüllt ist. Die Umsetzung eines Maschinenbefehls in eine Folge von Steuerworten des Prozessors ist selbst ein kleines Programmstück, welches wir als Mikroprogramm bezeichnen. Die Steuerworte s haben eine feste Länge, nämlich n Bit; sie sind in dem Mikroprogrammspeicher S abgelegt. Diese Mikroprogrammspeicher haben immer eine kleine Kapazität (etwa 30 k bit). Bei der Ausführung eines Steuerwortes muß die Adresse des nachfolgenden Steuerwortes abhängig vom aktuellen Steuerwort und aktueller Operation im Befehlsregister, von Flags (Ausgabeflag (AF) und Eingabeflag (EF) bzw. externen Unterbrechungen U bestimmt werden. Im einfachen Fall hat jede Mikroprogrammzeile ein eigenes Steuerwort. Der Verarbeitungszyklus wird durch die Sequentialisierungsflags F und R und die Taktfolge t 0,....,ti gesteuert. Das 88 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Statusregister enthält folgende Informationen: C (Carry), N (Vorzeichenbit), Z (Nullbit) V (Überlaufbit). Das nächste Adreßbit wird durch eine kombinatorische Schaltung, wie sie oben bereits angedeutet wurde, berechnet, das Steuerwort aus einem (kombinatorischen) ROM Speicher ausgelesen. Ist der Mikroprogrammspeicher als kombinatorische Schaltung ausgelegt, muß er über ein Steuerwortregister getaktet werden. Dieses Steuerwortregister kann durch die Statusregister unterbrochen werden. Man unterscheidet zwei Arten der Mikroprogrammierung: die horizontale und die vertikale. Bei der horizontalen Mikroprogrammierung enthalten die Steuerwortspeicher die Steuersignale uncodiert. Die Länge der Steuerworte beträgt hierbei 64, 124 oder auch mehr bit. Bei der vertikalen Mikroprogrammierung werden die Steuersignale durch die Zwischenschaltung eines Demultiplexers generiert.. Hierbei beträgt die Länge der Steuerworte bis zu 32 bit. In den sogenannten RISC-Architekturen oder auch den integrierten Mikroprozessoren ist die Mikroprogrammsteuerung fest verdrahtet. Bei manchen Rechnern mittlerer Größe aber auch Großrechnern wird dem (System)-Programmierer die Möglichkeit gegeben, eigene Maschinenbefehle durch Mikroprogramme zu definieren. Diesen Speicher, den der Programmierer dann zur Verfügung hat, liegt in einem Teil des RAM-Mikroprogrammspeichers, der dem äußeren Zugriff zugänglich ist. Bei der VAX 11/750 z.B. besteht der Mikroprogrammspeicher aus Steuerworten von 80 bit Länge, wobei 6k als ROMSpeicher für die festen Maschinenbefehle installiert sind und ein RAM-Speicher mit 1024 Worten vom Benutzer programmiert werden kann. Jedes dieser Speicherworte ist wie die vorgegebenen Maschinenbefehle während eines Verarbeitungszyklus des Rechners zugänglich. Im RAM-Teil kann der bestehende Maschinenbefehlssatz mit neuen benutzerspezifischen Befehlen erweitert werden. Für bestimmte Anwendungsklassen , z.B. für die graphische Datenverarbeitung kann so eine spezifische , für diese Problemklasse optimierte Maschinensprache definiert werden. Auch kann ein mikroprogrammierbarer Rechner durch seine Möglichkeit, auf verschiedenen Befehlssätzen zu arbeiten , einen anderen Rechner auf der Ebene der Maschinensprache simulieren. Man nennt das Verfahren auch Emulation. Um die Rechenkapazität des Rechners auszunutzen, ist es vorteilhaft, wenn möglichst viele Elemente des Rechners gleichzeitig arbeiten; damit erhöht sich die Leistung des Rechners. Eine solche Steuerung der Prozesse bedarf über die geeignete Hardware hinaus Programmen, die diese Auslastung des Rechners ermöglichen; auf der anderen Seite müssen sie in der Lage sein, Konflikte zu lösen, die z.B. durch gleichzeitigen Zugriff von Prozessen auf ein Betriebsmittel wie z.B. dem Speicher oder Drucker entstehen können. Erinnern wir uns an den Begriff des Algorithmus. Er beschreibt eine Verarbeitungsvorschrift, die, beginnend mit einem definierten Anfangswert über eine Folge von Zwischenzuständen (Zustandstransformationen) zu einem definierten Endzustand führt. Beschrieben wird ein solcher Algorithmus durch ein Programm; seine Ausführung nennen wir Programmausführung. Den Vorgang der Programmausführung mit einem Satz von Anfangswerten wollen wir Prozeß nennen. 89 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Dabei müssen wir beachten, daß durch den Prozeß die Datenobjekte manipuliert (transformiert) werden; der Algorithmus oder das Programm durch die Ausführung aber nicht verändert wird. Solche Programme nennen wir invariant. Ein Prozeß interagiert mit seiner Umwelt; damit wird die Programmausführung nicht nur abhängig von den inneren Zuständen, sondern von den äußeren Zuständen dieses Prozesses. Wir können also einen Prozeß folgendermaßen präzisieren (nach Giloi): Ein Prozeß ist eine funktionelle Einheit, bestehend aus: einem zeitlich invarianten Programm einem Satz von Daten zur Initialisierung des Prozesses, einem zeitlich varianten Zustand. Mit diesen Voraussetzungen können wir eine höhere Ebene der Parallelarbeit einführen: Enthält das System mehrere Prozessoren (z.B. Haupt- und Coprozessor), so können nebenläufige (konkurrente) Prozesse parallel abgearbeitet werden. Dabei nennen wir zwei Prozesse konkurrent, wenn es mindestens ein Zeitintervall gibt, in dem sie beide zwar begonnen, aber den Prozeß nicht abgeschlossen haben. In einem echten Einprozessorsystem können daher „konkurrente Prozesse“ nur abschnittsweise sequentiell bearbeitet werden. Semaphoren: Konkurrente Prozesse sind häufig kooperierend, d.h. sie greifen auf gemeinsam benutzte Daten zu (data sharing). Dabei kann es zu Konflikten kommen, wenn beide Prozesse wirklich gleichzeitig auf dieses Datum zugreifen wollen. Als Folge können undefinierte oder unkorrekte Zustände auftreten. Ein einfacher Mechanismus, der solche Zugriffskonflikte vermeiden hilft, ist der Semaphor-Mechanismus: Ein Semaphor sei eine boolsche Variable, deren beiden Wahrheitswerte den Zustand „frei“ oder „belegt“ anzeigen mögen. (0,1). Gegeben seien ferner zwei Prozeduren (das sind Werkzeuge zur Programm- und Datenkontrolle) P(S) und V(S), durch die der Wert eines Semaphors S verändert werden kann. Sei nun folgende Kontrollstruktur gegeben: P(S): begin if end; V(S): begin S = 1 then <wait until S = 0>; S: = 1; S:= 0 end; Sollen sich nun zwei Prozesse gegenseitig aus einem kritischen Zustand (gleichzeitiger Zugriff auf dasselbe Betriebsmittel) ausschließen, so kann das nach obiger Vorschrift folgendermaßen geschehen: P1 . . P2 . . 90 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ . . . . P(S) <Anweisungen des kritischen Abschnitts (Datenzugriff)> V(S) . . . P(S) <Anweisungen des kritischen Abschnitts (Datenzugriffs)> V(S) . . . Derjenige Prozeß, der den kritischen Abschnitt zuerst erreicht, führt die Operation P(S) ohne Verzögerung aus. (S ist mit dem Wert 0 initialisiert) Der zweite, später kommende Prozeß findet den Wert 1 vor und muß solange warten, bis der erste Prozeß seine Fertigmeldung mit dem Rücksetzen auf S = 0 dokumentiert. Neben den oben erwähnten Problemen bei der Zuteilung von Betriebsmitteln wie Speichern können weitere interne Ursachen für einen Konflikt auftreten wie Division durch Null, ungültiger Befehlscode, Stack-Überlauf o.ä. Während dieser Typ von Unterbrechung (interrupt) immer behandelt wird, wird z.B. bei RESET, einem BUSFehler oder Anforderungen von externen Geräten erst überprüft, ob das InterruptEnable Bit überhaupt gesetzt ist. Nur , wenn diese Bit gesetzt ist, kann der gewünschte Interrupt Vorgang aktiviert werden. Wir unterscheiden verschiedene Arten von Interrupts: diejenigen mit niedriger Priorität und diejenigen mit hoher Priorität. Dazu wird der anstehende InterruptWunsch mit einer Interrupt-Maske verglichen und die Behandlung nur dann eingeleitet, wenn die Priorität größer oder zumindest gleich der Maske ist. Nachdem die Überprüfung auf das gesetzte Interrupt Bit geschehen ist und die Priorität bestimmt ist, wird die „Interrupt Routine“ wie folgt fortgesetzt, vorausgesetzt, die Priorität ist genügend hoch: der aktuelle Befehl wird zu Ende geführt, soweit dies sinnvoll erscheint die für die spätere Programmfortsetzung erforderlichen Daten in den Registern werden in den Kellerspeicher (stack) gerettet die Ursache (Quelle) für den interrupt wird festgestellt bei externen Geräten wird der interrupt quittiert die Startadresse für die Interrupt - Routine wird ermittelt. Bei externen Geräten legt das unterbrechende Gerät nach der Quittung die ihm zugeordnete InterruptVektornummer auf den Datenbus; der Prozessor ermittelt damit die Startadresse aus der Vektortabelle. Das Interrupt- Enable Signal wird deaktiviert, um sicherzustellen, daß die Interrupt-Behandlung nicht unterbrochen wird. die Interrupt - Routine wird ausgeführt das Interrupt - Enable - Bit (Flag) wird wieder gesetzt die Register aus dem Stack werden restauriert und das unterbrochene Programm mit dem nächsten Befehl weitergeführt. 91 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Falls mehrere Geräte dieselbe Priorität besitzen, muß das Gerät selbst indentifiziert werden. Eine einfache Art ist das „daisy chaining“. Man führt hierbei eine Ordnung der Geräte mit gleicher Priorität ein und arbeitet sequentiell ab. Die Befehlsabarbeitung (Befehlszyklus) Das zu Beginn der Vorlesung besprochen Prinzip des Pipelining ist in vielen Rechnern implementiert. Durch die Aufteilung von Befehlen in Teilaufgaben erreicht man eine Beschleunigung bei der Abarbeitung, weil die einzelnen Teilaufgaben bestimmte Betriebsmittel besser nutzen können. Pipelining Den Teilaufgaben sind dabei hardwaremäßig bestimmte Verarbeitungseinheiten zugeordnet. Die Teilaufgaben (unterschiedlicher) Gesamtaufgaben werden dabei den einzelnen Verarbeitungsstationen überlappend zugeteilt. Beziehen wir dieses Vorgehen auf die Befehlsverarbeitung, so können wir folgende Teilaufgaben erkennen: Befehl holen (instruction fetch, IF) Befehl dekodieren und Registerinhalte holen (instruction decoding, ID) Befehlsausführung (instruction execution) Speicherzugriff auf Operanden (operand fetch) Ergebnis ins Zielregister Man bezeichnet das folgende Vorgehen als Befehls- oder Phasenpipelining. Um den Ausführungs-Takt der Befehle möglichst groß zu erhalten, ist man bestrebt, die Taktzeiten für die einzelnen Teilaufgaben möglichst kurz und vor allem gleich groß zu halten, da die langsamste Teilaufgabe den Gesamttakt bestimmt. Nehmen wir an, daß jede Verarbeitungsstation ein Fünftel der Ausführungszeit einer Befehlsausführung ohne Pipeline benötigt. In diesem Fall ist die Bearbeitungszeit für einen Befehl ist dann ohne oder mit Pipelining identisch. Da in einem Pipeliningssystem die Teilaufgaben jedoch zeitüberlappend ausgeführt werden, d.h. die Pipeline überlappend arbeitet, die Pipeline dauernd nachgefüllt wird, verläßt pro Takt ein abgearbeiteter Befehl die Pipeline. Damit wird die Befehlsabarbeitung bei dem Pipieline - Konzept in unserem Beispiel fünfmal so schnell wie ohne dieses Prinzip. 92 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ instruction fetch instruction decoding operand fetch instruction execution result to destination register Befehls - Pipeline Teilaufgabe = Takt t=1 2 3 4 5 IF ID OF IE RD i i+1 i+2 i+3 i+4 i i+1 i+2 i+3 i i+1 i+2 i i+1 i Überlappende Verarbeitung in einer Pipeline Nicht alle Befehle müssen diese Stationen durchlaufen., z.B. Befehle, deren Operanden bereits im Befehl enthalten sind. Überspring“-Befehle gibt es nicht und so müssen die Befehle warten, bis die nächste Teilaufgaben-Verarbeitungseinheit dran ist. 93 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Hazards Wie in der Hardware bei Schaltnetzen gibt es auch hier Hazards. Wir wollen drei Hazardklassen unterscheiden: die Structural Hazards die Data Hazards und die Control Hazards. Bei den Structural Hazards kommt es zu Hardware- Zuteilungskonflikten, da sich nicht alle möglichen Befehlskombinationen gleichzeitig ausführen lassen. Bei den Data Hazards greift ein Befehl auf Daten zu, die im vorhergehenden Befehl berechnet werden. Control Hazards treten bei Veränderungen des Programmzählers auf, die u.a. durch Verzweigungsbefehle hervorgerufen werden können. Um diese Hazards zu vermeiden, wendet man Wartezyklen an, in denen diejenigen Befehle der Pipeline warten müssen, die hinten in der Schlange stehen; die vorne in der Schlange jedoch weiter abgearbeitet werden. Wie wir bereits gesehen haben, führt das Pipelining im allgemeinen zu erheblichen Leistungssteigerungen eines Rechnersystems. Dies dadurch, daß die Befehle zeitüberlappt abgearbeitet werden können. Allerdings gibt es hierbei auch Situationen, die wir Hazard nennen, die die Ausführung des nächsten Befehls aus dem Befehlsstrom im eigentlich zugeordneten Taktzyklus verhindern. Damit vermindern Hazards in bestimmten Fällen die Leistung des Rechners. Wir unterscheiden 3 Hazard - Klassen: Struktur - Hazards (structural hazards), die aus Ressourcenkonflikten resultieren, wenn die Hardware nicht alle mögliche Befehlskombinationen simultan ausführen kann. Daten - Hazards (data hazards), die durch einen Befehl verursacht werden, der vom Ergebnis des vorangegangenen Befehls in einer Weise abhängt, die sich durch die überlappte Abarbeitung ergibt. Steuer - Hazards (control hazards); sie ergeben sich aus dem Pipelining von Verzweigungen und anderen Befehlen, die den program counter (PC) ändern. Treten Hazards auf, so machen diese i. a. Wartezyklen (stalls) erforderlich. Bei Pipelining Maschinen befinden sich dabei bei einem Wartezyklus gleichzeitig mehrere Befehle in der pipe, die auf ihre Abarbeitung warten. Diese Befehle sind in diesen Fällen genau zu markieren und bei einem folgenden Takt wieder zu aktivieren. Es ist offensichtlich, daß deshalb bei Pipelining Maschinen gegenüber Maschinen ohne Pipelining ein größerer Verwaltungaufwand getrieben werden muß. Bei Pipelining Maschinen erfordert ein Wartezyklus häufig, daß einige Befehle weiter abgearbeitet werden können und manche Befehle verzögert werden. Wenn ein Befehl angehalten wird, dann ist es anderseits auch typisch, daß die nachfolgenden Befehle auch angehalten werden: sie stauen sich sozusagen in der 94 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ pipe. Dagegen werden die Befehle vor dem angehaltenen Befehl weiter abgearbeitet; ein neuer Befehl wir jedoch nicht geholt. Die Ausführung machen bereits deutlich, daß sich bei Auftreten von Wartezyklen die Pipeline - Leistung reduziert. Wir wollen dieses Verhalten durch eine Gleichung beschreiben: Pipeline Beschleunigung Durchschnittliche Befehlszeit ohne Pipelining Durchschnittliche Befehlszeit mit Pipelining Taktzyklus ohne Pipelining Taktzyklus mit Pipelining CPI ohne Pipelining CPI mit Pipelining Interpretieren kann man die Folge von Pipelining auch so, daß die CPI (cycles per instruction) oder auch der Taktzyklus reduziert wird. Stellen wir die Abhängigkeit bezüglich CPI dar, so ergibt sich: Ideal CPI CPI ohne Pipelining Pipeline Tiefe Setzen wir die obige Beziehung in die Gleichung zur Pipeline - Bechleunigung ein, so erhalten wir: Beschleunigung Taktzyklus ohne Pipelining Ideal CPI Pipeline Tiefe Taktzyklus mit Pipelining CPI mit Pipelining Beschränken wir uns auf die Pipeline-Wartezyklen, ergibt sich: CPI mit Pipelining Ideal CPI Pipeline Wartezyklen pro Befehl Damit ergibt sich weiter: Beschleunigung Taktzyklus ohne Pipelining Ideal CPI Pipeline Tiefe Taktzyklus mit Pipelining Ideal CPI Pipeline Wartezyklen Vernachlässigt man die Erhöhung der Taktzykluszeit bei sich ergebendem Pipelineoverhead, so wird der erste Bruch in obiger Gleichung zu 1 und damit ergibt sich: Pipeline Beschleunigung Ideal CPI PipelineTiefe Ideal CPI Pipeline Wartezyklen 95 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Im allgemeinen darf man den möglichen Einfluß auf die Taktfrequenz bei der Bewertung von Pipeline Strategien natürlich nicht vernachlässigen. Struktur-Hazards Pipelining erfordert Mehraufwand an Ressourcen, um allen Anforderungen, die durch die Befehle entstehen, genügen zu können. Können jedoch einige Befehlskombinationen wegen Resourcenkonflikten nicht ausgeführt werden, dann spricht man von strukturellen Hazards oder Struktur-Hazards. Das bedeutet andererseits, daß bestimmte Funktionseinheiten zur Abarbeitung der Befehle nicht pipeline-gemäß implementiert sind. Meist werden zur Vermeidung solcher Zugriffskonflikten Funktionseinheiten dupliziert. Steht jedoch zur Abarbeitung nur eine Funktionseinheit, z.B. ein Registerfile-Schreibport zur Verfügung, so wird hier ein Struktur-Hazard generiert. Als Folge läßt man die Pipeline einen Befehl warten, bis die gewünschte Ressource frei ist. Als Beispiel sei eine Pipeline Maschine gewählt, die für Daten und Befehle nur über eine (1) Speicher-Pipeline verfügt. Die folgende Grafik verdeutlicht diesen Fall: Befehl Ladebefehl Befehl i+1 Befehl i+2 Befehl i+3 Befehl i+4 Taktzyklennummer 1 2 IF ID IF 3 4 5 EX ID IF MEM EX ID stall WB MEM EX IF 6 7 8 9 10 WB MEM ID IF WB EX ID MEM EX WB MEM WB Grafik: Beispiel eines Struktur-Hazards: ein Ladebefehl mit einem Speicherport Mit nur einem Speicherport kann die Pipeline nicht in einem Zyklus zugleich Befehlsund Datenholen einleiten. Ein Ladebefehl stiehlt in der Wirkung einen Befehlsholzyklus, indem die Pipeline zu einem Wartezyklus veranlaßt wird. Im Taktzyklus 4 wird als Folge kein Befehl geholt. Es wird angenommen, daß die Befehle i+1 bis i+4 keine Hazards der beschriebenen Art generieren. Eine Tabelle, die die möglichen Operationen während der einzelnen Zyklen darstellt, wird im folgenden angegeben. Sie stellt eine unter mehreren Möglichkeiten dar. Stufe ALU Befehle Lade- und Speicher Befehle Verzweige - Befehle IF IR<---Mem[PC] PC<---PC+4 IR<--Mem[PC] PC<---PC+4 IR<---Mem[PC] PC<---PC+4 ID A<---Rs1; B<---Rs2; PC1<---PC; IR1<---IR A<---Rs1; B<---Rs2; A<---Rs1; B<---Rs2; PC1<---PC; IR1<---IR PC1<---PC; IR1<---IR; EX DMAR A+; ALUoutput<---A op B; oder ALUoutput<---A op ((IR16)16## IR116...31); ((IR116)16##IR1 16...31); SMDR B; 96 ALUoutput - PC1 + ((IR116)16##IR1 16...31); cond (A op 0); datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ MEM ALUoutput1 - ALUoutput; LMDR<---Mem[DMAR]; if (Bedingung) PC<--ALUoutput oder Mem[DMAR]<--SMDR WB Rd ALUoutput1; Rd LDMR; Während der zu holende Befehl wartet, werden alle anderen Befehle normal abgearbeitet. Nach dem Wartezyklus wird die normale Pipeline fortgesetzt. Beispiel: Angenommen, Datenzugriffe machen 30% im einem Testmix aus. Der Wert von Ideal-CPI der Pipeline-Maschine bei Vernachlässigung von Struktur-Hazards betrage 1,2. Wieviel mal schneller ist, unter Vernachlässigung aller anderen Leistungsverluste, die ideale Maschine ohne Struktur-Hazards des Speichers? Antwort: Die ideale Maschine wird um das Verhältnis der idealen zur realen Maschine schneller gegenüber der realen Maschine sein. Weil der Taktzyklus unverändert ist, kann die folgende Formel für die Pipeline-Beschleunigung genutzt werden: Pipeline Beschleunigung Ideal CPI PipelineTiefe Ideal CPI PipelineWartezyklen Weil die Idealmaschine keine Wartezyklen hat, ist ihre Beschleunigung einfach: 1,2 Pipeline Tiefe 1,2 Die Beschleunigung der Realmaschine ist 1,2 Pipeline Tiefe 1,2 Pipeline Tiefe 1,2 0,3 1 1,5 1,2 Pipeline Tiefe 1,5 1,2 Beschleunigung( ideal ) 1,25 Beschleunigung( real ) 1,2 Pipeline Tiefe 1,2 1,5 Damit ist die Maschine ohne Struktur Hazards um 25% schneller. 97 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Es braucht an dieser Stelle nicht eigens erklärt werden, daß Struktur - Hazards nicht in jedem Fall vermieden werden können, wenn man das pipelining ohne Einschränkungen weiterführen will. Will man jedoch ein pipelining ohne die Gefahr von Hazards , so muß man unter Umständen eine Menge Hardware spendieren, die diese Gefahr ausschließt. Meist ist jedoch die Leistungsreduzierung durchaus tragbar, wenn der Zustand, der einen Hazard generiert, nur selten auftritt. Daten - Hazards Daten Hazards ergeben sich genau dann, wenn aufeinanderfolgende Befehle teilweise auf dieselben Daten zugreifen. Betrachten wir dazu als Beispiel zwei aufeinander folgende Additionen: Ri bedeutet hierbei Register i. R1 = R2 + R3 R4 = R1 + R5 Bei der ersten Addition werden die Inhalte der Register R1 und R2 addiert und im Zielregister R3 abgespeichert. Der zweite Befehl enthält als Operanden das Register R5 und das Register R1, wobei wohlgemerkt das Register R1 das Ergebnis der Addition aus dem Befehl bereits enthalten soll. Wenn wir und nun das uns bereits bekannte Schema der Abarbeitung von Befehlen verdeutlichen, so ergibt sich: Befehl Taktzyklennummer 1 2 ADD1 ADD2 IF ID IF 3 4 5 6 EX ID MEM EX WB MEM WB 7 Bypassing: Wie man aus der obigen Abarbeitungstabelle sofort ersehen kann, wird durch den zweiten Befehl bereits der Operand geholt, der durch den ersten Befehl eigentlich noch gar nicht zur Verfügung steht. Der vom zweiten Befehl geholte Wert für R1 ist eigentlich völlig unbestimmt. Der zweite Befehl übernimmt den Wert von R1, dessen aktueller Inhalt nicht determiniert ist. Damit wird dieses Verhalten des Rechners nicht annehmbar. Dieses aufgetretene Problem kann durch eine relativ einfachen Hardware-Trick umgangen werden. Es ist unter dem Namen Forwarding, und auch Short-circuiting bekannt: Hierbei wird das Ergebnis an der ALU immer zum ALU Eingangsregister, genauer gesagt, Latch weitergeleitet und damit im 98 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Voraus bereitgestellt. Erkennt nun diese spezielle Hardware, daß die vorausgegangene ALU Operation ein Register zu beschreiben hat, welches im nachfolgenden Befehl bereits wieder als Source- (Quell)Register benutzt werden soll, wählt dieses Spezial-Hardware das in dem temporären Register vorliegende Ergebnis als ALU - Eingangswert für den nächsten Befehl aus, anstelle des Wertes im Registerfile. Besteht jedoch zwischen den zwei Befehlen eine Unterbrechung der Befehls-Abarbeitung (Interrupt), der die ordnungsgemäße Beendigung des ersten Befehls zuläßt, wird der Forwarding- Algorithmus nicht aktiviert. In diesem Fall dient das Register 1 ganz normal als Daten-Quellregister zur Ausführung des zweiten Addier-Befehls. Im folgenden soll ein Beispiel angegeben werden, das Forwarding erfordert. ADD ADD R1, R1, R2, R2, R3 R3 SUB R4, R1, R5 AND R6, R1, R5 OR R7, R1, R4 IF ID EX IF ID IF MEM WB EX MEM WB ID EX MEM IF ID XOR R8, R7, R1 IF EX ID W B MEM EX WB MEM W B Wie oben dargestellt wurde, berechnet der erste Befehl einen Wert, der in R1 gespeichert wird. Die nachfolgenden Befehle nutzen alle diese Quelle R1. Das Problem besteht nun darin, daß das Ergebnis aus dem ersten Befehl noch nicht die Abspeicherphase WB durchlaufen hat, das Ergebnis also „offiziell“ noch nicht zur Verfügung steht. In diesen Fällen wird also der Wert, der in Register R1 steht als Quellregister an die nachfolgenden Befehle weitergeleitet, bis die Write Back Phase des ersten Befehls abgeschlossen ist. Erst, wenn der Befehl XOR durchgeführt wird, steht das Ergebnis aus dem ersten Befehl „offiziell“ zur Verfügung und kann als „normale“ Quelle genutzt werden. Die Nutzung des Bypass ist immer aufwendig, weil jeder Befehl, der einen Bypass nutzt, eine spezielle Hardware benötigt. Dadurch wächst die erforderliche Hardware möglicherweise stark an. Eine Möglichkeit, den „richtigen“ Wert von R1 schneller zu erhalten und verarbeiten zu können und auf einen Bypass zu verzichten, wird im 99 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ folgenden aufgezeigt. In einem Taktzyklus wird nun nämlich auf die Register zweimal zugegriffen; damit kann man in der ersten Takthälfte von WB schreiben und in der zweiten Hälfte von ID lesen. In der folgenden Skizze ist dieses Verhalten dargestellt. ADD R1, R2, R3 IF ID EX MEM WB w SUB R4, R1, R5 AND R6, R1, R5 OR R7, R1, R4 IF ID r EX MEM IF ID r EX MEM IF ID r EX XOR R8, R7, R1 IF W B w ID r WB w MEM WB w EX MEM WB w Jede Bypass Ebene benötigt ein Komparatorpaar und ein Latch, um zu testen, ob die nächsten Befehle dieselben Register als Ziel und Quelle haben. Im folgenden Bild ist eine Struktur angegeben, die solche Bypass-Einheiten enthält: Hierbei werden 2 Ergebnis-Register am ALU Ausgang eingefügt, um die Ergebnisse in den nächsten beiden WB-Stufen in die Zielregister zu speichern. Bei ALU-Operationen wird Forwarding immer dann ausgeführt, wenn Befehle, die ein Resultat als Quelle benötigen, in die Execute-Phase eintreten. Die Ergebnisse in den Latches können entweder als Eingang zu den der ALU vorgeschalteten Multiplexern sein oder aber auch als Eingang zu den Registern dienen. Die Steuerung der Multiplexer ist Aufgabe der Steuereinheit des Rechners, sie muß alle Ziele und Quellen in der Pipeline überwachen. Eine andere Möglichkeit besteht in der direkten Steuerung durch die Steuerlogik der Bypass-Einheit. In diesem Fall muß der Bypass-Puffer 100 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ tags mit der Registernummer des Wertes enthalten, für die er bestimmt ist. Bei jedem Ereignis muß die Logik also überprüfen, ob ein Quellregister eines nächsten Befehls mit dem Zielregister des aktuellen Befehls identisch ist. Wenn das zutrifft, wird der Multiplexer angesteuert, um das entsprechende Resultatsregister anstelle des Busses auszuwählen. Da die ALU in einer einzigen Pipeline Stufe arbeitet, benötigt man, falls der Bypass implementiert gewesen ist, keinen Pipeline Wartezyklus mit irgendeiner Kombination von ALU-Befehlen. Die Inhalte der Latches in der folgenden Skizze sind für den Augenblick aufgezeigt, in dem der AND-Befehl der Beispiels-Befehlsfolge dabei ist, die Execute Stufe zu starten. Der ADD-Befehl, der R1 (2. Latch) berechnet, ist in seiner WB-Stufe, der linke Eingangsmuxer ist gesetzt, um den gerade berechneten Wert von R1 als den ersten Operanden des AND-Befehl (nicht den von Register-File gelesenen) durchzustellen. Das Ergebnis der Subtraktion, R4, ist im 1. Latch vorhanden. 101 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Bisher haben wir nur Operationen mit Quell- und Zielregistern betrachtet. Jedoch ErgebnisSchreibbus Register-File MUX MUX Bypass Pfad ALU R4 R1 Ergebnis Latches Ergebnis Schreibbus ALU Bypass Einheit wird im Regelfall nicht ein Register das Ziel einer Operation sein, sondern das Resultat wird an einer bestimmten Stelle im Haupt-Speicher abgelegt. 102 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Cachezugriffe, d. h. Zugriffe auf schnelle Zwischenspeicher zwischen Prozessor und Hauptspeicher können auch dazu führen, daß Speicherzugriffe in der gewünschten Reihenfolge nicht korrekt behandelt werden. Das kann dann passieren, wenn wir dem Prozessor erlauben, spätere Befehle abzuarbeiten, während ein vorhergehender Befehl , der den Cache verfehlte, zum Speicher zugriff. In unserem Fall stoppen wir einfach die gesamte Pipeline und erreichen damit, daß derjenige Befehl, der den Fehlzugriff enthielt, mehrere Taktzyklen zur Abarbeitung läuft. Bei der Erklärung der Daten-Hazards haben wir immer nur die CPU Register betrachtet. In einem Rechner gibt es jedoch als mögliche Quellen und Ziele von Datentransporten auch andere Speichertypen. Speicher-Speicherbefehle sind Beispiele dafür. Das Forwarding können wir so verstehen, daß das Ergebnis direkt zu dem Eingang der anderen funktionellen Einheit weitergeleitet wird, die es anfordert anstatt es vom Ausgang dem Eingang derselben funktionellen Einheit zur Verfügung zu stellen. Beispiel: ADD R1, R2, R3 SW 25 (R1), R1 Bei dieser Befehlsfolge müßten wir den Wert von R1 von der ALU zur ALU bereitstellen, so daß er zur Berechnung der effektiven Adresse genutzt werden kann und auch zum Memory Data Register (MDR) weiterleiten, damit er ohne einen Wartezyklus gespeichert werden kann. Daten - Hazards können durch einen der drei Typen, abhängig von der Reihenfolge der Lese- und Schreibzugriffe in den Befehlen gekennzeichnet werden. Der Name der Hazards richtet sich nach der Reihenfolge im Programm. Betrachten wir zwei Befehle i und j, wobei i Vorgänger von j ist: RAW (read after write): j versucht, eine Quelle zu lesen, bevor sie i schreibt, d.h. zur Verfügung stellt. Auf diese Weise erhält j den alten Wert von i und damit einen unkorrekten Wert. WAR (write after read) j versucht, ein Ziel zu schreiben, bevor es durch i gelesen wurde. So erhält i unkorrekt den neuen Wert. In unserer Beispielpipeline kann dieser Effekt nicht auftreten, da alle Leseoperationen früh (während ID) und alle Schreiboperationen spät (nämlich in WB) liegen. Dieser Hazards tritt dann auf, wenn es Befehle gibt, die früh in der Befehlspipeline Ergebnisse schreiben und andere Befehle in der Pipeline , die eine Quelle nach dem Schreiben im Befehl lesen. Zum Beispiel kann eine Autoinkrement-Adressierung einen WAR-Hazard verursachen. WAW (write after write) j versucht, einen Operanden zu schreiben, bevor er durch i geschrieben wurde. Die abgeschlossenen Schreiboperationen werden in der falschen Reihenfolge ausgeführt und hinterlassen so den Wert von i anstelle des von j geschriebenen Wertes im Ziel. Allerdings ist dieser Hazard-Typ nur in pipelines möglich, die in mehr als einer Stufe schreiben oder die einem Befehl auch dann die Fortsetzung erlauben, wenn ein vorangegangener Befehl 103 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ angehalten wurde. Unser eingeführter Pipelinetyp jedenfalls vermeidet diesen Hazardtyp: er beschreibt ein Register nur im WB - Zyklus. Die vierte Möglichkeit, der RAR (read after read) ist gar kein Hazard - Typ. Da der Inhalt der Register beim Lesen nicht verändert wird, können hierbei keine Hazards entstehen. Wie wir gesehen haben, können Daten- Hazards im allgemeinen ohne Leistungsverlust behandelt werden. Das Bypassing bzw. Forwarding stellt hierzu ein wichtiges Werkzeug dar. Allerdings gilt dies nicht für alle auftretenden Hazards. Folgendes Beispiel sei dazu gegeben: LW R1, 32 (R6) ADD R4, R1, R7 SUB R5, R1, R8 AND R6, R1, R7 Der LW-Befehl enthält erst dann die richtigen Daten, wenn der MEM-Zyklus beendet ist. Das bedeutet, daß der ADD-Befehl den korrekten Wert aus R1 nicht rechtzeitig zu Beginn des nächsten Taktzyklus erhält. Mit unseren eingeführten Hilfsmitteln wie forwarding kann der Daten-Hazard in diesem Fall nicht vermieden werden. Jedoch können wir das Ergebnis des LW-Befehls unmittelbar an den SUB-Befehl übergeben, der zwei Taktzyklen nach dem Laden startet und damit das korrekte Ergebnis aus LW übernehmen kann. Für den ADD-Befehl jedoch kommt das durch Forwarding bereitgestellte Ergebnis zu spät. Statt am Ende eines Taktzyklus müßte es bereits zu Beginn verfügbar sein. LW R1, 32 (R6) ADD R4, R1, R7 SUB R5, R1, R8 AND R6, R1, R7 IF ID IF EX ID IF MEM EX ID IF WB MEM EX ID Das Besondere an dem Ladebefehl (Speicherzugriff!) ist, daß er eine Verzögerungszeit (Latenzzeit) hat, die i.a. nicht durch Forwarding allein eliminiert werden kann. Ein Weg zur Lösung dieses Problems liegt in der Einführung einer Pipeline-Blockierung (pipeline-interlock). Wird ein Hazard durch eine PipelineBlockierung erkannt, so hält sie die Pipeline an (stall) und wartet, bis die erforderlichen Daten korrekt zur Verfügung gestellt sind. Dieser Verzögerungszyklus wird auch Wartezyklus (pipeline-stall oder bubble) genannt. Danach können die Daten aus dem Ladebefehl durch Forwarding weitergeleitet werden. 104 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Das folgende Beispiel zeigt die beschriebene Situation: beliebiger IF Befehl LW R1, 32 (R6) ADD R4, R1, R7 SUB R5, R1, R8 AND R6, R1, R7 ID EX MEM WB IF ID IF EX ID IF MEM stall stall stall WB EX ID IF MEM WB EX MEM WB ID EX MEM WB Der Prozeß der Befehlsübergabe von der Befehlsdekodierungsstufe (ID) in die Ausführungsstufe (EX) dieser Pipeline wird i.a. Befehlsübergabe (instruction issue) genannt und der übergebene Befehl als issued bezeichnet. In unserer Struktur werden alle diese Daten-Hazards während der ID-Stufe der Pipeline getestet und bei Vorliegen eines Hazards der Befehl zurückgehalten, bevor er übergeben wird. Es gibt jedoch auch Situationen, die im Vergleich zu den hier besprochenen wesentlich komplexer sind. Je früher aber ein Hazard (eine Blockierung) in einer Pipeline erkannt wird, desto „einfacher“ ist der dazu notwendige zusätzliche Hardwareaufwand. Wartezyklen werden in Abhängigkeit von der Umgebung, in der sie auftreten, charakterisiert. Viele Wartezyklustypen treten recht häufig auf. Dazu gehören z.B. die Zyklen, die im Zusammenhang mit den Ladebefehlen auftraten. Soll z.B. eine Addition A = B + C durchgeführt werden, so muß der „Codegenerator“ einen Steuercode generieren, der diese Addition korrekt auszuführen gestattet. In unserem Beispiel müssen wir einen Wartezyklus zum Laden des zweiten Operanden einfügen. Die folgende Tabelle zeigt, daß das Speichern nicht zu einem weiteren Wartezyklus führen muß, weil das Ergebnis der Addition durch Forwarding zum MDR weitergeleitet werden kann. Maschinen, bei denen die Operanden für arithmetische Operationen vom Speicher kommen können, erfordern einen Pipeline-Wartezyklus in der Mitte des Befehls, um auf die Beendigung seines Speicherzugriffs zu warten. LW R1, B LW R2, C ADD R3, R1, R2 SW A, R3 IF ID IF EX ID IF MEM WB EX MEM ID stall IF stall WB EX ID MEM WB EX MEM WB Anstatt einen Pipeline-Wartezyklus zu erlauben, könnte der Compiler versuchen, durch Umordnung der Codefolge das Auftreten von Hazards zu vermeiden (Scheduling der Pipeline). Zum Beispiel würde der Compiler vermeiden, Code mit einem Ladebefehl zu generieren, dem die unmittelbare Nutzung des Ladezielregisters folgt. Diese Methode bezeichnen wir mit pipeline scheduling oder instruction scheduling. Es gibt Maschinen, die entsprechende Software voraussetzen, um solche DatenHazards zu vermeiden. Ein Ladebefehl, der verbietet, daß der folgende Befehl bereits sein Ergebnis benutzt, wird als verzögerter Ladebefehl (delayed load) bezeichnet. Der Platz nach einem Ladebefehl wird bei Pipelining oft Lade- 105 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Verzögerungsplatz (load delay slot) genannt. Kann der Compiler eine Blockierung beim Scheduling nicht vermeiden, so wird ein Leerbefehl eingefügt (noop operation) Das beeinflußt nicht die Laufzeit, vergrößert aber den benötigten Codespeicherplatz gegenüber einer Maschine mit Blockierung. Ob nun eine Hardware diese Blockierung erkennt und diese Pipeline anhält oder auch nicht; in beiden Fällen wird die Leistung durch Schedulierung der Befehle im Compiler verbessert. Wenn ein Wartezyklus auftritt, wird der Leistungseinfluß derselbe sein, unabhängig davon , ob die Maschine einen Leerzyklus oder eine noop- Operation durchführt. Wie wir bereits früher erwähnt haben, betrachten wir in unseren einfachen Beispielen meist die unmittelbare Nutzung der Ergebnisse nach dem Ladebefehl. Das kann durch eine einfachen Vergleicher erfolgen, der auf die Registeradressen des Ladeziels und der Quelle achtet. Eine Hardware dafür erfordert, den Ladebefehl Daten-Hazard zu erkennen, zu steuern und das Ladeergebnis durch Forwarding wie folgt, bereitzustellen: zusätzliche Multiplexer an den Eingängen der ALU (dieselben, wie für die Bypass-Hardware der Register-Register-Befehle notwendig sind) Einen zusätzliche Pfad vom MDR zu beiden Multiplexereingängen der ALU Einen Puffer, um die Zielregisteradressen der vorangegangenen zwei Befehle zu speichern (dasselbe wie beim Register-Register-Forwarding) Vier Vergleicher, um die zwei möglichen Quellregisterfelder mit den Zielregisterfeldern der vorangegangenen Befehle zu vergleichen , bzw. auf Übereinstimmung zu achten. 106 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Die Vergleicher prüfen auf Ladebefehls-Blockierungen zu Beginn eines EX-Zyklus. Die vier Möglichkeiten und die dann erforderlichen Maßnahmen sind in der folgenden Tabelle ersichtlich. Situation Keine Abhängigkeit Beispiels - Befehlsfolge LW R1, 45 (R2) ADD R5, R6, R7 SUB R8, R6, R7 OR R9, R6, R7 Abhängigkeit erfordert einen LW R1, 45 (R2) Wartezyklus ADD R5, R1, R7 SUB R8, R6, R7 OR R9, R6, R7 Abhängigkeit durch Forwarding vermieden LW R1, 45 (R2) ADD R5, R6, R7 SUB R8, R1, R7 OR R9, R6, R7 Abhängigkeit von Zugriffen LW R1, 45 (R2) in zeitgerechter Reihenfolge ADD R5, R6, R7 SUB R8, R6, R7 OR R9, R1, R7 Aktion Kein Hazard möglich, weil keine Abhängigkeit zu R1 in den drei unmittelbar folgenden Befehlen gegeben ist Vergleicher erkennen die Nutzung von R1 in ADD und halten den ADD-Befehl (und SUB und OR) an, bevor ADD mit EX beginnt. Vergleicher erkennen die Nutzung von R1 in SUB und stellen das Ladebefehlsergebnis der ALU rechtzeitig für SUB zu Beginn von EX bereit Keine Aktion erforderlich, weil das lesen von R1 durch OR in der zweiten Hälfte der IDPhase und das Schreiben de zu ladenden Daten in der ersten Hälfte erfolgt Im Normalfall, bei der die Pipelines (häufig auch kurz pipes genannt) eine wesentlich größere Tiefe als in unseren Beispielen haben, werden die entsprechenden Überlegungen zur Vermeidung von Hazards wesentlich komplexer. Steuer-Hazards Steuer Hazards verursachen in der Pipe - wenn sie auftreten - meist einen größeren Leistungsverlust als Daten - Hazards. Wenn ein Verzweigebefehl ausgeführt wird, kann der PC um einen Wert ungleich 4 inkrementiert werden. (im Normalfall wird die Adresse im PC um 4 erhöht). Wenn der Befehl i eine auszuführende Verzweigung ist, dann wird normalerweise der PC bis zum Ende von MEM , d.h. der Beendigung der Adreßberechnung und des Vergleiches nicht geändert. Das bedeutet drei Wartezyklen , bis der neue PC bekannt ist und der korrekte Befehl geholt werden kann. Dieser Effekt wird Steuer- oder Verzweige-Hazard genannt. In der untenstehenden Tabelle ist die (ideale) Situation nach einem Steuer-Hazard aufgezeigt. Man erkennt sofort die Schwierigkeit, nämlich , daß der Verzweigebefehl nicht dekodiert ist, bis der Befehl i+1 geholt worden ist. Das bedeutet auch, daß die 107 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ folgende Pipeline in der Praxis gar nicht arbeiten könnte, weil wir nicht wissen, daß der Befehl ein Verzweigebefehl ist, bis wir den nächsten Befehl geholt haben. Verzweigebefehl Befehl i+1 Befehl i+2 Befehl i+3 Befehl i+4 Befehl i+5 Befehl i+6 IF ID stall EX stall stall MEM stall stall stall WB IF stall stall stall ID IF stall stall stall EX ID IF stall stall stall MEM WB EX MEM WB ID EX MEM IF ID EX stall IF ID stall stall IF ID IF stall stall stall EX ID IF stall stall stall MEM WB EX MEM WB ID EX MEM IF ID EX stall IF ID stall stall IF In der Praxis sieht das meist wie folgt aus: Verzweigebefehl Befehl i+1 Befehl i+2 Befehl i+3 Befehl i+4 Befehl i+5 Befehl i+6 IF ID IF EX stall stall MEM stall stall stall WB IF stall stall stall In der obigen Tabelle wird folgendes klar: Der Befehl i+1 ist geholt, aber der Befehl wird ignoriert und das Holen erneut gestartet, wenn das Ziel der Verzweigung bekannt ist. Es wird auch offensichtlich, daß im Falle einer nicht ausgeführten Verzweigung das zweite IF für Befehl i+1 redundant ist. Das Verschwenden von drei Taktzyklen bei jedem Verzweigebefehl führt zu einem signifikanten Leistungsverlust in der Pipeline. Mit einer Verzweigebefehlshäufigkeit von etwa 30% und einem CPI-Wert von 1 erreicht die Maschine mit drei Verzweigewartezyklen nur etwa die Hälfte der idealen Leistungssteigerung einer Pipeline. Damit werden die Verzweigungsverluste ein signifikantes Problem. Jedoch kann man diesem Leistungsverlust durch folgende Maßnahmen entgegenwirken: Frühes Herausfinden des ausgeführten oder nicht ausgeführten Verzweigebefehls in der Pipeline. Frühes Berechnen der Zieladresse für den PC bei auszuführender Verzweigung. Will man den Vorgang optimieren, dann wendet man vorteilsweise beide Verfahren an. Dabei erfordert die Berechnung der Verzweige-Zieladresse einen separaten Addierer, der während der ID-Phase addieren kann. Mit einem separaten Addierer und einer während ID zu treffenden Entscheidung gibt es nur einen Wartezyklus bei Verzweigungen. In einigen Maschinen sind die Verzweige-Hazards noch wesentlich aufwendiger als in dem folgenden Beispiel, weil die Zeit für die Bewertung der Verzweigebedingung und die Berechnung des Zieles sogar noch länger sein kann. 108 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Pipeline-Stufe IF Verzweigebefehl IR MEM[PC]; PC PC + 4; ARs1; BRs2; PC1PC; IR1IR; BTA PC +((IR16)16 ## IR 16...31) if (Rs1 op 0) PC BTA ID EX MEM WB Die Operationen, die neu oder verändert sind, sind fett gedruckt. Weil die Verzweigezieladreß- (branch target address (BTA)) - Addition sich während ID ereignet , wird sie bei allen Befehlen ausgeführt; für die Verzweigungsbedingungen (Rs1 op 0) ist dies auch zutreffend. Die letzte Operation in ID ist das Ersetzen des PC. Bevor wir den Befehl ausführen, müssen wir wissen, daß der Befehl eine Verzweigung ist. Das erfordert die Dekodierung des Befehls vor dem Ende von ID oder ganz zu Beginn von EX, wenn der Wert des PC weitergeleitet wird. Weil die Verzweigung am Ende von ID ausgeführt wird, sind die Stufen EX, MEM und WB für Verzweigungen ungenutzt. Eine weitere Schwierigkeit ergibt sich für Sprünge (jumps), deren Offset länger ist. Dieses Problem wird durch einen weiteren Addierer gelöst, der den Wert im PC und die niederen 26 Bit des IR addiert. Eine Alternative hierzu wäre ein Schema, das eine 16-Bit-Addition ausführt und bestimmt, ob 10 Bit von IR in der zweiten Zyklushälfte zu addieren sind, indem der SprungOperationscode früh dekodiert wird. Verzweigeverhalten in Programmen Verzweigungen können die Pipeline-Leistung erheblich beeinflussen. Aus unserer Programmierpraxis wissen wir bereits, daß Verzweigungen (Sprünge) im Programmablauf recht häufig vorkommen. In der folgenden Tabelle sind Gesamthäufigkeiten von Sprüngen aufgeführt. Die darin enthaltenen Daten repräsentieren den Durchschnitt über gemessene Programme. Befehle werden in zwei Klassen, die unbedingten und bedingten Sprünge unterteilt. Intel 8086 VAX unbedingt bedingt unbedingt bedingt 0,02 0,11 0,08 0,17 Zu der Unterscheidung, ob es sich um einen bedingten oder unbedingten Sprung handelt, ist die Beobachtung von Bedeutung, ob der vorhandene Sprung auch tatsächlich ausgeführt wird. Dadurch wird eine Strategie zur Reduzierung der Leistungsverluste durch die Sprünge (Verzweigungen) sicherlich beeinflußt. Reduzierung der Pipeline-Verzweigungsverluste 109 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Wir wollen in diesem Abschnitt statische, d.h. für die gesamte Zeit der Ausführung feste Verfahren besprechen. Die einfachste Möglichkeit ist natürlich, die gesamte Pipeline während der Verzweigung einzufrieren, in dem alle Befehle, die sich hinter dem aktuellen Befehl in der Pipe befinden, angehalten werden, bis das Verzweigungsziel bekannt ist. Diese Methode haben wir bereits besprochen. Ein leicht aufwendigeres Verfahren ist, die Ausführungen als nicht ausgeführt anzunehmen und so der Hardware einfach die Fortsetzung der Abarbeitung zu erlauben, als ob die Verzweigung nicht auszuführen wäre. Dazu wollen wir uns folgendes Schema näher ansehen: NAV Befehl i+1 Befehl i+2 Befehl i+3 Befehl i+4 IF AV Befehl i+1 Befehl i+2 Befehl i+3 Befehl i+4 IF ID IF ID IF EX ID IF EX IF stall MEM EX ID IF MEM ID IF stall WB MEM EX ID IF WB MEM EX ID WB MEM EX WB MEM WB WB EX ID IF stall MEM EX ID IF WB MEM EX ID WB MEM EX WB MEM Legende: NAV : Nicht ausgeführter Verzweigungsbefehl AV : Ausgeführter Verzweigungsbefehl Die Skizze ist wie folgt zu verstehen: Wenn die Verzweigung während ID nicht ausgeführt ist, haben wir den nächsten Befehl geholt und setzen die Bearbeitung fort. Das Problem tritt genau dann ein, wenn eine Abfrage im Programm enthalten ist, die auf „wahr“ oder „falsch“ eines Zustandes abprüft, z.B. if „Zustand“ „wahr“ dann mache mit dem nächsten Befehl weiter, sonst „springe nach Adresse xyz“ Wenn jedoch die Verzweigung während ID als ausgeführt erkannt wird, starten wir das Befehlsholen beim Verzweigeziel. Das aber verursacht bei allen der Verzweigung folgenden Befehlen einen Wartezyklus von einem Takt. Ein Problem des beschriebenen Algorithmus liegt darin, daß wir darauf achten müssen, uns die Zustände des Rechners zu merken, bis das Ergebnis der Abfrage zur Verzweigung, definitiv feststeht. Dazu müßte man bei Bedarf die Pipe leeren (pipeline flushing) und mit den aktuellen Daten überschreiben. Manche Maschinen nutzen eine andere verzögerte Verzweigung (delayed branch). Die verzögerte Verzweigung nutzt dabei eine Verzögerung der Länge n, wobei n die Anzahl der zwischengeschobenen sequentiellen Befehle (ohne Sprungbefehl) angibt: Verzweigebefehl 110 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ sequentieller Nachfolger 1 sequentieller Nachfolger 2 sequentieller Nachfolger i ...... sequentieller Nachfolger n-1 sequentieller Nachfolger n Verzweigebefehl, wenn ausgeführt Die oben angegebenen „sequentiellen Nachfolger j befinden sich in den Verzweigeverzögerungsplätzen (branch delay slots). Wie bei den Ladeverzögerungsplätzen ist es Aufgabe der Software, die Nachfolgebefehle geeignet anzuordnen. Die folgende Skizze zeigt drei mögliche Strategien: Scheduling Strategie Leistung? Voraussetzungen Wann erhöht sich Von vor der Verzweigung Verzweigungen dürfen nicht von den durch Scheduling umgeordneten Befehlen abhängen Immer Vom Ziel Bei ausgeführter Verzweigung. Kann Programm bei Kann Duplizierung von Befehlen erfordern. Umgeordnete Befehle müssen bei nicht ausgeführter bei der Verzweigung korrekt abgearbeitet werden Duplizierung von Befehlen vergrößern Von den der Verzweigung Die Befehle müssen bei auszufolgenden Befehle führender Verzweigung korrekt abgearbeitet werden. Wenn die Verzweigung nicht ausgeführt wird. Die Scheduling Strategie wird also durch den Ausgangspunkt des durch das Scheduling in den Verzögerungsplatz einzuordnenden Befehls bestimmt. Der Compiler muß dabei die Voraussetzungen beachten, wenn er nach Befehlen für das Scheduling des Verzögerungsplatzes sucht. Können die Plätze nicht zugeordnet werden, werden sie mit Leerbefehlen gefüllt. Bei der zweiten Strategie, bei der das Verzweigeziel auch von einem andern Punkt des Programms zugreifbar ist -wie es am Anfang einer Schleife sein würde - muß der Zielbefehl kopiert und kann nicht einfach verlagert werden. 111 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ a) Vor der Verzweigung b) Vom Ziel ADD R1, R2, R3 c) nach der Verzweigung SUB R4, R5, R6 if R2 = 0 then ADD R1, R2, R3 if R1 = 0 then ADD R1, R2, R3 Delay slot ergibt Delay slot if R1 = 0 then Delay slot SUB R4, R5, R6 ergibt ergibt ADD R1, R2, R3 if R1 = 0 then If R2 = 0 then ADD R1, R2, R3 ADD R1, R2, R3 SUB R4, R5, R6 if R1 = 0 then SUB R4, R5, R6 Scheduling des Verzweigungsplatzes Erläuterung: Die obere Blockzeile jeden Befehlspaares zeigt den Code vor dem Scheduling und die untere Blockzeile die Resultate des Schedulers. In a) weist der Scheduler dem Verzögerungsplatz (delay slot) einen von der Verzweigung unabhängigen Befehl vor der Verzweigung zu. Die Strategien b) und c) werden genutzt, wenn a) nicht möglich ist. In der Befehlsfolge b) und c) verhindert die Nutzung von R1 als Verzweigebedingung die Verschiebeoperation des ADD-Befehls (dessen Ziel R1 ist). In b) z.B belegt der Scheduler den delay slot mit dem Verzweigungsziel (genauer: der Zieladresse); dazu muß der Zielbefehl gewöhnlich kopiert werden, weil er von einem anderen Pfad erreicht werden kann. Die Strategie b) ist zu bevorzugen, wenn es mit hoher 112 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Wahrscheinlichkeit ein auszuführender Sprungbefehl ist wie z.B. eine Schleifenverzweigung. Der Scheduler kann aber auch, wie in c) angedeutet, den bei nicht ausgeführter Verzweigung folgenden Befehl (Geradeauszweig) nutzen. Um diese Optimierung (b) und c)) überhaupt anwendbar zu machen, muß der SUBBefehl korrekt ausführbar sein, falls die Verzweigung nicht in die erwartete Richtung geht. Dieser Fall tritt genau dann ein, wenn z.B. R4 ein temporäres Register wäre, das ungenutzt bleibt, wenn die Verzweigung in die nicht erwartete Richtung geht. Im allgemeinen werden die Strategien a) und b) vorzugsweise genutzt. Betrachtet man diese Schedulingstrategie anhand von häufig genutzten Anwendungsprogrammen wie TeX oder SPICE, stellt man fest, daß etwa die Hälfte der delay-slots sinnvoll ausgelastet und damit die Hälfte der möglichen Wartezyklen verhindert wird. Für verzögerte Verzweigung gibt es geringe zusätzliche Hardware-Kosten. Aufgrund der verzögernden Wirkung ist der PC (program counter) mehrfach erforderlich, um den Zustand bei einer Programmunterbrechung (interrupt) korrekt zurückspeichern zu können. Es sei nun angenommen, daß der Interrupt nach einem beendeten (ausgeführten) Verzweigebefehl auftritt, jedoch vor Beendigung aller Befehle in den delay-slots und dem Verzweigeziel. In diesem Fall sind der PC des delay-slots und der PC des Verzweigezieles zu retten, weil ihre Adressen nicht aufeinanderfolgen. Im folgenden wollen wir uns einige Gedanken über die Leistung dieser verfahren machen. Die effektive Pipeline-Beschleunigung mit Verzweigungsverlusten ist: Pipeline Beschleunigung Ideal CPI Pipeline Tiefe Ideal CPI Pipeline Wartezyklen Wenn wir die Leistung der Ideal-CPI mit 1 annehmen, können wir schreiben: Pipeline Beschleunigung Pipeline Tiefe 1 Pipeline Wartezyklen von Verzweigungen Da Pipeline-Wartezyklen von Verzweigungen = Verzweigungshäufigkeit * Verzweigeverluste ist, gilt: Pipeline Beschleunigung Pipeline Tiefe 1 Verzweigungshäufigkeit Verzweigungsverluste Neben Pipelining wird die Ausführungsgeschwindigkeit des Programms auch durch den Aufbau und die Verwendung von Befehlen beeinflußt. 113 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Adressierungsmodi Die Berechnung der effektiven Operandenadressen kann bis zu zwei Adreßrechnungen mit einer Vielzahl von Speicherzugriffen erforderlich machen. In Mikroprozessoren gibt für die Adressrechnung ein spezielles Adressierwerk. Logisch kann man es zwischen Steuer- und Speicherwerk einordnen. Folgende Adressierungsarten kann man unterscheiden: Registeradressierung: implizite Adressierung. Hierbei ist die Angabe des Registers im Befehlscode enthalten. Es wird immer nur ein bestimmtes Register z.B. der Akkumulator oder auch nur ein Flag - Bit in einem Statusregister angesprochen. explizite Registeradressierung. Hierbei wird explizit ein bestimmtes Register im Befehlscode angegeben, z.B. R1. Neben der Registeradressierung gibt es die Speicheradressierung: unmittelbare Adressierung. Charakteristisch für diese Adressierungsart ist die Angabe eines absoluten Wertes als Operand im Befehl, z.B. LDA ´10´. Dieser Befehl bewirkt, daß der Wert 10 in den Akkumulator geladen wird. Die Größe des Operanden wird durch die Wortbreite begrenzt. Befehlscode Datenwort Akkumulator Unmittelbare Adressierung (Operand: Datenwort) 114 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ direkte Adressierung. Hierbei enthält das dem Befehlswort folgende Speicherwort die Adresse des Operanden. Im Befehl können wir die Adresse auch absolut angeben, z.B. JMP $00FF (Sprung auf die Adresse FF). Die Adresse ist als hexadezimaler Wert angegeben; durch das $ - Zeichen wird der Wert als Adresse gekennzeichnet. Auch symbolische Adressen sind möglich. Hierbei setzt der Compiler bei der Ausführung als Adresse den aktuellen Wert für die symbolische Adresse ein, z.B. STA GEHALT. Adresse Befehlscode Speicher Direkte Adressierung (Operand: effektive Adresse) indirekte Adressierung indirekte Registeradressierung. Hierbei enthält das im Registerfeld angegebene Register die Adresse des Operanden (pointer), z.B. DEC (R1). Der Befehl bewirkt, daß der Inhalt des Speicherworts, dessen Adresse in Register R1 angegeben ist, um 1 dekrementiert wird. 115 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ indirekte Adressierung; hier enthält das adressierte Speicherwort einen Pointer auf den Operanden. Es besteht die Variante, daß auch der Pointer nochmals durch einen 2. Offset und ein 2. Register modifiziert wird. Befehlscode Adresse Speicher Indirekte Adressierung (Operand: Adresse der Speicherzelle, in der die effektive Adresse steht) indizierte Adressierung. Bei diesem Verfahren wird die effektive Speicheradresse durch Addition eines Offset, der auch negativ sein kann, zum Inhalt eines Registers berechnet, z.B. LDA $01AF (R1). Eine Variante hiervon ist die Angabe eines Basisregisters, eines Indexregisters und eines Offset im Befehl. Dort werden die Inhalte der beiden Register und der Offset addiert, was dann die effektive Adresse (aktuelle Adresse) ergibt. Beobachtet man die Ausführungszeiten der Befehle, so liegt der Schluß nahe, nach schnelleren Verfahren zu suchen. Hier lag der Grund zur Entwicklung der RISC 116 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Prozessoren. (reduced instruction set computer) Mit Hilfe des Monitoring wurde erkannt, daß die am häufigsten auftretende Befehlsgruppe die der Transportbefehle (etwa 45%) ist, gefolgt von Verzweigungsbefehlen (etwa 30%) und arithmetischen Befehlen mit etwa 10%. Wir stellen also fest, daß Rechner in erster Linie, wie auch zu Anfang der Vorlesung behauptet, keine arithmetischen Befehle, sondern vielmehr Transportbefehle wie Sortieren, Schieben, etc. ausführt. Basis - Register Befehlscode Basisadresse Indexadresse ADD Basis Index Basis + Index Indizierte Adressierung Als Beispiele und zur Vertiefung der Adressierungsarten sollen im folgenden anhand des Befehlssatzes des Motorola 68000 die Adressierungsmodi vorgeführt werden. Die MC 68000 Architektur verwendet als Datenformate Byte, 16bit-Worte, Doppelworte mit 32 bit und Quadworte mit 64 bit. Das jeweils MSB enthält das Vorzeichenbit. Bei vorzeichenlosen Daten ist das MSB mit dem Wert „0“ gesetzt. Intern stehen im MC68000 folgende programmierbare Register bereit: 117 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 8 Datenregister D0,...., D7 für 32 bit Worte. Die Datenregister können Langworte (32bit), Worte und Bytes speichern. 8 Adreßregister A0,..., A7 für 32 bit-Worte. Beim 68000 werden davon aber nur die unteren 24 bit verwendet; damit kann hier ein Adreßraum von 16 Megabyte adressiert werden. Beim 68020 werden alle 32 Bit genutzt; das entspricht einem Adreßraum von 4 Gigabyte. Das Register A7 hat eine Sonderfunktion; es speichert die Rücksprungadressen bei Unterprogrammen und wird als Stackpointer bezeichnet. In der Realisierung ist dieses Register doppelt vorhanden; einmal ist es von Benutzer her adressierbar und nennt sich USP (user stack pointer) zum andern steht es dem „supervisor“ zur Verfügung und wird mit SSP (supervisor stack pointer) genannt. Das Register PC wird als Befehlszähler (Program Counter) genutzt. Das Statusregister SR ist ein 16bit-Register, in welchem ein „Benutzerbyte“ und ein „Systembyte“ verfügbar ist. Das Benutzerbyte besteht aus den Statusbits (Flags) die den Charakter der ALU-Ergebnisse (Carry, Overflow,... etc) anzeigen. Zusätzlich gibt es ein X-Bit (X-Extension). Bei einfachen Instruktionen wird in X der C-Wert kopiert; bei Operationen mit Zahlen, die in mehreren Registern dargestellt werden (erweiterte Genauigkeit) zeigt das X Bit das für alle betroffenen Register gemeinsame Carry Bit. Das Systembit des Statusregisters ist befehlsunabhängig und für den normalen Benutzer nicht zugänglich. Es maskiert mit I2 I1 I0 die Klasse der vom Prozessor akzeptierten Unterbrechungssignale. S zeigt den Supervisor-Modus und T den sogenannten Trace-Modus des Prozessors an, in dem nach jeder Operation automatisch die Belegung des Statusregisters ausgegeben wird. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 T 0 S 0 0 I2 I1 I0 0 0 0 0 X N V C Systembyte Benutzerbyte Statusregister des MC 68000 Der Hauptspeicher wird vom MC68000-Prozessors byteweise fortlaufend adressiert. Wortadressen sind immer gradzahlig; Quadadressen immer durch 4 teilbar. Man unterscheidet zwische dem MSB (most significant byte oder auch Hi-Byte) und dem LSB (lowest significant byte oder auch Lo-Byte) Das Hi-Byte gibt dann entsprechend die „Wortadresse“ an. 118 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Die Adressen gibt man i.a. in Hexedezimalschreibweise an.. Byteadre ssen Hi Byte 000000 000002 000004 000006 000008 Wortadres sen Lo-Byte 000001 000003 000005 000007 000009 000000 000002 000004 000006 000008 FFFFF8 FFFFFA FFFFFC FFFFFE FFFFF9 FFFFFB FFFFFD FFFFFF FFFFF8 FFFFFA FFFFFC FFFFFE Langwortad ressen Hi-Word Lo-Word 000000 000004 000008 FFFFF8 FFFFFC Zur Unterscheidung von Speicheradresse und Speicherinhalt werden die Adressen i.a. durch eine 6-stelligen Hexadezimalzahl s5,....,s0 angegeben und der Inhalt des adressierten Speicherplatzes entsprechend geklammert (s5,....,s0). Wird also unter der Adresse 00FFFE16 z.B. der Wert 081516 gespeichert, so wird das mit (0FFFE16) = 081516 angegeben. In den Assemblern verschiedener Prozessoren gibt es verschiedene Vereinbarungen über Zahlendarstellungen. Meist jedoch finden wir die folgenden Konventionen realisiert: Häufig wird stillschweigend die Dezimaldarstellung vereinbart, wenn nicht ausdrücklich andere Darstellungen wie z.B. die Hexadezimal- oder auch die Binärdarstellung vereinbart wird. Eine Hexadezimaldarstellung zeigt sich durch ein vorangestelltes $ (Präfix) ($1101) und bei der Binärdarstellung durch ein % als Präfix (%1101). ASCII-Zeichen werden i.a. durch Hochkommata eingeschlossen. 119 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Im MC68000 ist eine Vielzahl von Adreßmodi wählbar. Hier gibt es drei Adreßmodusbits, die mit 3 Registerindexbits für 12 verschiedene Adreßmodi benutzt werden können. In den Modi 000 bis 110 werden die Registeradressen r2r1r0 = 000 bis r2r1r0= 110 angegeben. Mit dem Modus 111 können 5 weitere Adressierungsarten ohne eine spezielle Registerangabe ausgewählt werden. Aus Adreßmodus und den im Befehl spezifizierten Registern wird die effektive Adresse berechnet. Die folgende Tabelle zeigt die verschiedenen Adreßmodi des MC68000: 000r2r1r0 001r2r1r0 010r2r1r0 011r2r1r0 100r2r1r0 101r2r1r0 110r2r1r0 111000 111001 111010 111011 111100 Datenregisterdirekt Adreßregisterdirekt Adreßregisterindirekt Adreßregisterindirekt mit Postinkrement Aderßregisterindirekt mit Prädekrement Adreßregisterindirekt mit Verschiebung Adreßregisterindirekt mit Verschiebung und Index Kurze absolute direkte Adresse (Lange) absolute direkte Adresse Befehlszählerrelativ mit Verschiebung Befehlszählerrelativ mit Verschiebung und Index Unmittelbare Adresse Bei der datenregisterdirekten Adressierung steht der Operand im spezifischen Datenregister: ADD.W D7, D4 Bemerkung: Der Inhalt des Datenregisters D4 wird zum Inhalt von D7 addiert. Das Ergebnis steht in D4. Die adreßregisterdirekte Adressierung funktioniert mit Operanden im spezifische Adreßregister: MOVE.L A7,D5 Bemerkung: Der Inhalt des Adreßregisters A7 (Stackpointer) wird in das Datentegister D5 kopiert. Das Suffix .L gibt an, daß Langworte (32 bit) verarbeitet werden. Adreßregisterindirekt Adressierung verwendet eine Operandenadresse aus dem speuzifizierten Adreßregister. Verarbeitet wird der Inhalt (Ai) des Adreßregisters Ai: AND.W (A3), D6 120 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Bemerkung: Die indirekte Adressierung wird durch die Klammerung des Registers angegeben. Der Inhalt des Speicherwortes X, dessen Adresse in A3 steht, wird bitweise mit dem Inhalt des LoWords von D6 konjunktiv verknüpft. (UND-Funktion) Bei der unmittelbaren Adressierung (immediate address mode) von Wortbefehlen steht der Operand direkt im Speicherwort hinter dem Maschinenbefehlscode: ADDI.W #$123F, D3 Bemerkung: ADDI gibt an, daß der Addierbefehl einen unmittelbaren Operanden hat. Das Suffix .W gibt dabei an, daß es sich um einen Wortbefehl handelt, das Präfix # zeigt einen unmittelbaren Operanden, nämlich die Hexadezimalzahl $123F 16. Der Befehl addiert also $123F16 zum Inhalt des Datenregisters D3. Der Befehlszähler wird nach dem Lesen der Operation ADD mit Adreßmodus und Registerindex D3 um 2 erhöht, findet dann den unmittelbaren Operanden #123F und erhöht, nachdem er diesen gelesen hat, den Befehlszähler nochmals um 2. Bei der kurzen absoluten direkten Adressierung steht die Operandenadresse direkt im Speicherwort hinter dem Befehlscode. Die Adresse ist kurz, d.h. 16 Bit lang. Insgesamt können also nur 64 kB als absolut kurze Adresse angesprochen werden, d.h. die Hauptspeicheradressen 00000016 bis 007FFF16 oder zwischen FF800016 bis FFFFFF16 ansprechbar (exklusiv!!). Diese beiden je 32KB großen Hauptspeicherbereiche am Anfang und Ende des Adreßbereiches können als Zwischenspeicher verwendet werden. Durch die kurze absolute Adressierung sind sie mit einem einzigen Befehlswort adressierbar. SUB.W $0815, D5 Bemerkung: Auch hier wird der Befehlszähler um insgesamt 4 erhöht (erst zu der 16 bit langen Adresse im Programmtext, dann zum nächsten Befehl). Bei der absoluten direkten Adressierung (auch absolut lang) folgt die Operandenadresse in 2 Worten hinter dem Befehlscode. Die Adresse beginnt im LoByte des ersten Operandenwortes und umfaßt auch das nächste Speicherwort; sie kann dadurch 24 Bit nutzen, und es sind alle Hauptspeicheradressen des MC68000 von 00000016 bis FFFFFF16 ansprechbar. ADD.B $AFFE07, D6 Das Suffix .B zeigt Byteverarbeitung an. Das Byte, welches unter der Adresse AFFE07 steht, wird zum Inhalt von datenregister D6 addiert. Adreßregisterindirekte Adressierung bietet die Möglichkeit der Adreßfortschaltung. Es bieten sich hier 2 Möglichkeieten: nachträgliches Inkrementieren (Postinkrement) 1. Die Operandenadresse steht im spezifizierten Adreßregister. Nachdem die Adresse verarbeitet ist, wird sie um 1,2,oder 4 erhöht. Das Postinkrement 121 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ der indirekten Adresse (Ai) wird durch ein nachgestelltes + ausgedrückt: ADD.B (A3)+, D6 Da es sich um einen Bytebefehl handelt, wird A3 um 1 erhöht. 2. vorheriges Dekrementieren (Prädekrement) Die Operandenadresse steht im Adreßregister; bevor die Adresse verarbeitet wird, wird sie um 1,2oder 4 erniedrigt. Das Prädekrement wird durch ein der indirekten Adresse (Ai) vorangestelltes - bezeichnet. SUB.W -(A4), D5 Bemerkung: Da es sich hier um eine Wortbefehl handelt, wird A4 um 2 erhöht (Wortlänge). Eine andere Klasse von Adreßmodi bezieht sich bei der Adressierung auf eine Basisadresse, auf die sich dann die weiteren Adreßberechnungen beziehen. Es gibt hierbei eine doppelt indirekte Adressierung, bei der zusätzlich ein Indexregister benutzt wird: Bei der adreßregisterindirekten Adressierung mit Verschiebung wird die Operandenadresse als Summe aus Adreßregister und einem festen Verschiebungssummanden gebildet. Die Verschiebung ist eine Zweierkomplementzahl mit 16 Bit und wird im Befehl direkt oder als Variablenname angegeben. ADD.B $100(A3), D6 Der Inhalt des Speicherwortes X , dessen Adresse die Summe des Inhalts von A3 und der Basisadresse 10016 ist, wird zum Datenregister D6 addiert. Eine typische Anwendung liegt in der Bearbeitung komplexer Datenstrukturen, z.B. von ARRAYs von Speicherworten. Der ARRAY Z bestehe aus den Elementen Z 0,...Zn. Er beginne mit der Adresse $100 für Z0. Alle siene Elemente können nun einfach als $100 + i berechnet werden. Es genügt also, im Adreßregister den Wert i anzugeben. Noch einfacher wird die Adressierung, wenn für $100 ein Variablenname (symbolische Adresse) wie z.B. ANFANG angegeben wird, dann ist Zi als ANFANG + i adressierbar. Manchmal ist eine weitere Stufe der Indizierung nützlich. Dies geschieht mit der adreßregisterindirekten Adressierung mit Verschiebung und Indizierung. Die Operandenadresse wird als Summe aus Adreßregister, einem festen Verschiebungssummanden (Offset) und dem Wert eines Indexregisters (d.i. ein beliebiges Daten- oder Adreßregister) gebildet. Beim Indexregister muß angegeben werden, ob alle 32 oder nur 16 Bit addiert werden sollen. Dies geschieht durch Angabe eines Suffix .L oder .W. Die Verschiebung ist eine bytelange 122 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Zweierkomplementzahl. Sie liegt zwischen also -128 und +127 und wird im Befehl direkt oder als Variablenname angegeben. ADD.W $12(A3,A6.W),D4 Bemerkung: Die Verschiebung steht im LoByte im zweiten Speicherwort des Befehls. Im HiByte stehen die Informationen über das Indexregister. In A3 stehe die Adresse 0002100016; in A6 stehe die Adresse 000010016. Dann ergibt sich für die erste Operandenadresse X = $12 +(A3) + (A6.W) = 12 16 + 2100016 + 10016 = 02111216. Diese Adresse enthält den ersten Operanden; es sei der Wert 0ADE. Dieser Wert wird dann zum Inhalt des Datenregisters D4 addiert und das Ergebnis in D4 abgespeichert. Die beiden zuletzt vorgestellten Adressierungsverfahren nehmen eine „Basisadresse“ die sie als „Referenz“ für weitere Adreßrechnungen nutzen. Man nennt diese Adressierung auch relative Adressierung. Die Spezialfälle werden durch eine eigene Modebitkombination angegeben. Sei PC der Befehlszähler. Dann kann man mit Hilfe der befehlszählerrelativen Adressierung mit Verschiebung den Befehl: ADD.W $1000(PC), D6 verwenden. Auch die befehlszählerrelative Adressierung mit Verschiebung und Index ist möglich: ADD.W $1000(PC,A3), D6 Die unten stehende Tabelle zeigt einige Adressierungsarten, die im folgenden nochmals erklärt werden. Hierbei repräsentieren die Befehlstypen Unmittelbar (Immediate) die Speicheradressierungsarten. Wir haben auch Adressierungsarten erhalten, die vom Befehlszähler abhängen. Sie werden als PC-relative Adressierung bezeichnet. PC-relative Adressierung wird primär für die Spezifikation von Befehlsadressen in Steuerbefehlen genutzt. Die Anwendung von PC-relativer Adressierung in Steuerbefehlen soll hier nicht näher betrachtet werden. Die Tabelle zeigt die bekanntesten Bezeichnungen für Adressierungsarten, die in verschieden Architekturen abweichend sind. In diesem Beispiel wird eine Erweiterung der Programmiersprache C als eine Hardware-Beschreibungssprache verwendet. Jedoch werden zwei nicht C-compatible Schreibweisen verwendet: der Pfeil zeigt nach links und das Speicherfeld M wird als Speichername verwendet. 123 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Adressierung Beispiel sart Register ADD R4, R3 Wirkung Anwendung R4 R4 + R3 Wert ist im Register Unmittelbar ADD R4, #3 R4 R4 + 3 Displacement oder Based ADD R4, 100(R1) R4 R4 + M[100 + R1] Operand ist eine Konstante Zugriff zu lokalen Variablen Register indirekt ADD R4, (R1) R4 R4 + M[R1] Indiziert ADD R3, (R1 + R2) R3 R3 + M[R1+R2] Direkt oder absolut ADD R1, (1001) R1 R1 + M[1001] Speicherindirekt ADD R1, @(R3) R1 R1 + M[M[R3]] Autoinkrement ADD R1, (R2)+ R1 R1 + M[R2] R2 R2 + d Autoinkrement ADD R1, -(R2) R2 R2 -d R1 R1 + M[R2] Skaliert oder indexiert R1 R1 + M[100 + R2 + R3 *d] ADD R1, 100(R2)[R3] 124 Register dient als Pointer (Zeiger) Manchmal nützlich für Feld-Adressierung R1 = Basis des Feldes R2 = Index des Feldes Zugriff zu statischen Daten; notwendige Adreßkonstante kann groß sein Speicher dient als Pointer p; Wert = *p Für den Zugriff zu Feldern in Schleifen nützlich; R2 zeigt auf den Anfang eines Feldes; jeder Zugriff erhöht R2 um die Länge d eines Elements Dieselbe Anwendung wie Autoinkrement; beide können auch zur Implementierung der Stackoperation Push und Pop genutzt werden Indexierung von Feldern mit Datentypen der Länge d datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ RISC Prozessoren (Reduced Instruction Set Computer) Charakteristische Merkmale sind: Kleiner Befehlssatz in einheitlichem Format Einfache Adressierungsarten Load/Store Architektur, d.h. der Zugriff auf den Speicher erfolgt mit den Befehlen Load und Store; Speicher -Speicher Befehle gibt es nicht Bis auf die Load/Store Befehle arbeiten alle Befehle mit Daten, die in Registern zur Verfügung stehen oder direkt im Befehl angegeben werden. Dreiadreßmaschine (Ausnahme: Load/Store). Ausführungszeit für alle Befehle ist ein Taktzyklus (Befehlspipeline) Alle Datenpfade haben eine Breite von 32 Bit. Großer Registersatz Durch diese Merkmale läßt sich die Steuerung vereinfachen, es führt zu einem festverdrahteten Steuerwerk ohne Mikroprogrammierung. Die Folge sind hohe Taktfrequenzen. 125 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Das Speicherwerk Die Aufgabe des Speicherwerks besteht darin, mit Hilfe der nach obigen Adressierungsverfahren berechneten Adresse den Speicher hardwaremäßig anzusteuern und das Datum einzuschreiben oder auszulesen. In einem Rechner existieren zur Realisierung eines Arbeitsspeichers unterschiedliche Speichertypen wie statisches Random Access Memory (RAM) , Read Only Memory (ROM) und das dynamische RAM. Statische RAMs (auch CAMs) werden als sogenannte CACHE Speicher realisiert; sie werden dann eingesetzt, wenn es um schnellen Zugriff zu Information geht und der merklich langsamere Daten Zugriff z.B. über einen externen (Platten)Speicher nicht tolerierbar wird. Adressen F......F ROM E0.....0 DF.....F Dynamisches RAM Die nebenstehende Abbildung gibt eine Beispiel für eine mögliche Aufteilung des Speichers wider. Dabei enthält das ROM das sogenannte Boot- Programm und Konstanten und kann nicht verändert werden., das statische RAM enthält den sogenannten Cache und der dynamische Speicher die übrigen Daten. Aufgrund der Adressen werden die verschiedenen Bausteine angesteuert. 40.......0 3F.......F Statisches RAM 0.......0 Speicherverwaltung Mit der parallelen Verarbeitung mehrerer Prozesse auf einem Rechner besteht die Forderung einer Steuerung für die Rechnerkernzuteilung. Dabei wollen wir unter dem Rechnerkern die Verarbeitungseinheit ALU mit ihren assoziierten Registern verstehen. Zugleich müssen wir eine Speicherverwaltung durchführen, die die vom 126 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Befehl vorgegebenen Operationen korrekt durchführt. Zu dieser korrekten Arbeitsweise gehört die korrekte Bereitstellung der Operanden, die häufig aus dem Arbeitsspeicher geholt werden müssen. Verschiedene Speicherorganisationsprinzipen sind denkbar; wir wollen drei davon näher betrachten: Lineare Speicherverwaltung Bei diesem Prinzip wird ein real vorhandener Speicher vorausgesetzt. Konkurrieren nun n verschiedene Prozesse um den Rechnerkern, so müssen (n-1)-Prozesse zwischengelagert werden. Diese Prozesse belegen einen Adreßraum im Speicher. Im einfachen Fall ist dies ein linear zusammenhängender Bereich. Häufig jedoch werden im Speicher nur Teilmengen des benötigten Platz verfügbar sein. Dieses geschieht z.B. durch häufiges Zwischenlagern von Prozessen, die einen Speicherraum zurücklassen, der zersplittert ist und keinen, für eine erneute Zwischenlagerung benötigten, genügend großen und linear zusammenhängenden Speicherraum aufweist (Speicherverschnitt). Der Speicherbereich, der einem Prozeß zugeordnet ist, wird durch seine Anfangsund Endadresse im Speicher beschrieben. Damit ist die Korrektheit eines Prozesses schon über seine gültige Speicherraumadresse nachprüfbar. Um das Problem genügend großer Speicherbereiche zu lösen, schiebt man die belegten Speicherbereiche so zusammen, daß endlich wieder ein größerer linear zusammenhängender Bereich entsteht (garbage collection). Dieser Vorgang ist mit einer intensiven Adreßrechnung verbunden, was evtl. sehr zeitintensiv ist. 127 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Paging Aus diesen Gründen wurde ein anderes Verfahren zur effizienten Speicherverwaltung entwickelt, das Paging Beim Paging wird der real vorhandene Speicher in physikalische Seiten (Kacheln) aufgeteilt, z.B. 1k Worte. Entsprechend wird der Adreßbereich der Prozesse auch in Teile (Seiten) gleicher Größe aufgeteilt. 15 10 Seiten - Nummer 9 0 Adreßteil relativ zum Seitenanfang Seiten - Kachel - Tabelle 15 10 Kachel - Nummer 9 0 Adreßteil relativ zum Seitananfang Adreßumrechnung Das Größenverhältnis Seite zu Kachel ist 1 : 1. Seite Kachel 1 2 3 4 4 7 19 31 128 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Wird nun ein Prozeß in den Arbeitsspeicher geladen, so wird eine Seite des Prozesses auf eine entsprechende freie Kachel im Speicher abgebildet. Diese Zuordnung merkt man sich in einer Tabelle. In der oben angegebenen Tabelle besteht ein Programm aus 4 Seiten, im Speicher sind die Kacheln 4,7,19 und 31 frei. Die Adresse wird dabei in einen Seitenteil und einen Teil, der relativ zum Anfang der Seite adressiert, geteilt. Wie aus der Skizze zu erkennen ist, ändert sich der Teil mit den Bits 0 bis 10 nicht. Die Bits 10 bis 15 jedoch werden gemäß der obigen Tabelle aufeinander abgebildet (Seite auf die zugehörige Kachel). Die endgültige Speicheradresse ergibt sich aus der Konkatenation von Kachelnummer und des seitenrelativen Teils. Bei der Befehlsausführung muß also zunächst geprüft werden, ob sich die referierte Seite in einer Kachel befindet. Ist dies der Fall, dann wird die logische Seitenadresse durch die physikalische Seitenadresse ersetzt, andernfalls muß wie oben beschrieben, die referierte Seite erst in eine Kachel des (Haupt)-Speichers geladen werden, bevor die Adreßumsetzung durchgeführt werden kann. Da die real zur Verfügung stehende Arbeits-Speicherkapazität meist sehr viel kleiner als die logisch adressierbare Kapazität (Platte!) ist, kann ein Nachladen einer Seite in eine Kachel nur so erfolgen, daß eine bisher im Arbeits-Speicher befindliche Kachel überschrieben wird. Um hier zu verhindern, daß statt einer seit längerer Zeit nicht mehr benutzten Kachel eine soeben geladene Kachel überschrieben wird, versieht man die Kachel mit einem „Veränderungsbit“, was bei jedem schreibenden Zugriff auf diese Kachel neu gesetzt wird. Diese Strategie wird auch Least recently used (LRU) Strategie genannt. Soll eine Seite im Arbeitsspeicher überschrieben werden, so muß sie vorher in den Hintergrundspeicher, z.B. den Plattenspeicher zurückgeschrieben werden. Um schnell die zu verdrängende Seite zu finden, wird bei jedem Zugriff auf eine Seite diese zur jüngsten gemacht, alle Seiten, die jünger als diese waren, werden um eins gealtert. Den (im Normalfall nicht gewünschten) Zugriff auf den Plattenspeicher nennt man „page fault“. Ziel des Verfahrens ist, den Eindruck zu erhalten, als ob die Daten, die dem Rechnerkern zur Verarbeitung zur Verfügung gestellt werden, alle im Arbeitsspeicher vorhanden wären. Durch die „page faults“ kann dieses Ziel jedoch nicht erreicht werden. Virtuelle Adressierung Zusätzlich zum paging wird bei vielen Rechnern das Prinzip der Segmentierung ( virtuelle Adressierung) eingesetzt. In einem Segment werden logisch zusammenhängende Adreßräume zusammengefaßt. Damit erhält man z.B. ein oder mehrere Befehlssegmente oder Datensegmente. Im folgenden wollen wir uns am Beispiel des INTEL 80386 die Berechnung der physikalischen Adresse mit Hilfe von Segment- und Seitentabellen verdeutlichen: Im 80386 gibt es neben 8 allgemeinen Registern einen Satz von 6 Segmentregistern der Größe 16 Bit zur Verwaltung des Arbeitsspeichers. Eine virtuelle Adresse des 129 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 80386 besteht aus einem 16Bit Selektorteil (Segmentregister) und einem 32 Bit Offset. 47 32 31 Selektor 0 Offset Basisadresse der LDT 63 LDT Größe der LDT 47 15 0 LDTR Berechnung der Adresse des Segmentdeskriptors Zu dem aktuell aktiven Prozeß gehört ein Register, das Local Descriptor Table Register (LDTR). In diesem Register ist die Basisadresse der LDT und deren Länge (64 kByte) enthalten. Die Konkatenation der Basisadresse mit dem Selektor führt zu einem 8 Byte umfassenden Eintrag in dieser Tabelle, dem Segmentdekriptor. Dabei muß der Selektor kleiner oder höchstens gleich der Größe der LDT sein (siehe obige Skizze). Der Segmentdeskriptor enthält eine Basisadresse, die Segmentgröße , Zgriffsrechte und andere Angaben. Bits 31 - 24 der Basisadresse G D O V Seg. Gr. Bits 19-16 P DPL Bits 15 - 0 der Basisadresse S Type Bits 23 - 16 der Basisadresse Bits 15 - 0 der Segmentgröße Segmentdeskriptor Es bedeutet: G P DPL Granularität byte/ 4 kbyte Present bit Descriptor Pivilege Level 130 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Type A S Hier wird z.B. vermerkt, ob lesend oder schreibend zugegriffen werden darf oder ob es sich um ein Daten- oder Befehlssegment handelt Access Bit Segment- oder Kontrolldeskriptor Die Segmentgröße wird in insgesamt 20 Bit dargestellt. Bei einer Granularität von einem (1) Byte bedeutet dies eine Segmentgröße von 220 Byte (1 MB), bei einer Granularität von 4 kByte eine Größe von 4 Gbyte. Das Present bit gibt an, ob das Segment im Hauptspeicher vorhanden ist oder erst nachgeladen werden muß. Das access bit wird bei jedem Zugriff auf das Segment gesetzt und kann vom Prozessor zurückgesetzt werden. Damit läßt sich eine gewisse Zugriffshäufigkeit in einem bestimmten Zeitintervall ermitteln. Die Basisadresse aus dem Segmentdeskriptor wird zum Offset der virtuellen Adresse addiert. Wir erhalten damit eine lineare Adresse. Mit dieser linearen Adresse und dem Seitentabellenverzeichnis können wir die physikalische Speicheradresse ermitteln. Die Konkatenation der höchstwertigen 20 Bit des Registers CR3 (Spezialregister) mit den 10 Bit des directory-Teils der linearen Adresse führen zu einem 4 Byte großen Eintrag im Seitentabellenverzeichnis (page directory). Das Seitentabellenverzeichnis wird für jeden Prozeß angelegt und ist 4kByte groß. Die Konkatenation der Seitentabellenbasisadresse mit dem page-table-Teil in der linearen Adresse führt zu einem Eintrag in der Seitentabelle (page table). Das sogenannte „dirty bit“ gibt an, ob eine Seite verändert wurde (Schreibzugriff). Die physikalische Adresse ergibt sich schließlich aus der Konkatenation der Seitenbasisadresse mit dem Offset in der linearen Adresse 131 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 31 21 Directory 11 Page Table 0 Offset 31 K K K 12 Basisadresse Seitentabellen verzeichnis Seitentabelle Register CR3 Physikalische Adresse Datum 4 kbyte Seite im Hauptspeicher Umrechnung lineare Adresse in die physikalische Adresse 132 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 31 12 Seitentabellenbasisadresse Access bit user/ supervisor read / write present bit Eintrag im Seitentabellenverzeichnis 31 12 Seitenbasisadresse (Kachel-Nr.) Dirty bit accessed bit user / supervisor read / write present bit Eintrag in der Seitentabelle Abschhließend sehen wir, daß sich bei der Segmentierung und dem paging ein nicht unerheblicher Aufwand ergibt, um aus der virtuellen Adresse die physikalische Adresse zu berechnen. Hinzu kommt dann noch das Laden der entsprechenden Daten in den Hauptspeicher, wenn diese dort nicht vorhanden sind. 133 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Andererseits kann man nun einen schnellen Speicher zwischen Rechnerkern und Arbeitsspeicher schalten und versuchen, diesem Speicherverbund die Geschwindigkeit des schnelleren Speichers zu verleihen. Man nennt einen solchen, zwischen Rechnerkern (CPU- Central Processing Unit) geschaltetem Speicher einen Cache. Dieser Cache ist viel leistungsfähiger als der Arbeitsspeicher, wesentlich teuer und in der Kapazität wesentlich kleiner. Üblich sind heute Caches von etwa 256 kBit.. Beim Schreiben und Lesen greift die CPU deshalb zunächst auf den Cache zu. Erst wenn festgestellt wird, daß die gewünschte Adresse sich nicht im Cache befindet, wird ein Zugriff auf den Arbeitsspeicher durchgeführt. In diesem Fall (miss) wird das Datum aus dem Arbeitsspeicher gleichzeitig in die CPU und den Cache übertragen. Für den Programmierer wird dabei nicht erkenntlich, ob die Daten für den Prozessor aus dem Cache oder dem Arbeitsspeicher stammen. Man nennt das Prinzip auch transparent. Beim Schreiben in den Speicher kann das Datum einmal parallel in Arbeitsspeicher und Cache geschrieben werden und anderseits nur in den Cache. Die erste Variante ist zeitaufwendig. Bei der zweiten Variante (dem Rückschreibverfahren) wird das Datum nur in den Cache geschrieben und vermerkt, daß eine Änderung stattgefunden hat. Für jedes geänderte Datum wird ein spezielles Bit (dirty bit) gesetzt. Erst, wenn dieses Datum im Cache durch ein anderes ersetzt werden soll, wird es in den Arbeitsspeicher geschrieben. Nach dem gleichen Prinzip kann man nun andererseits einen sehr schnellen Speicher zwischen Rechnerkern und Arbeitsspeicher schalten und versuchen, diesem Speicherverbund die Geschwindigkeit des schnelleren Speichers zu verleihen. Man nennt einen solchen, zwischen Rechnerkern (CPU- Central Processing Unit) geschaltetem Speicher einen Cache. Dieser Cache ist viel leistungsfähiger als der Arbeitsspeicher, wesentlich teuer und in der Kapazität wesentlich kleiner. Üblich sind heute Caches von etwa 256 kBit.. Beim Schreiben und Lesen greift die CPU deshalb zunächst auf den Cache zu. Erst wenn festgestellt wird, daß die gewünschte Adresse sich nicht im Cache befindet, wird ein Zugriff auf den Arbeitsspeicher durchgeführt. In diesem Fall (miss) wird das Datum aus dem Arbeitsspeicher gleichzeitig in die CPU und den Cache übertragen. Für den Programmierer wird dabei nicht erkenntlich, ob die Daten für den Prozessor aus dem Cache oder dem Arbeitsspeicher stammen. Man nennt das Prinzip auch transparent. Beim Schreiben in den Speicher kann das Datum einmal parallel in Arbeitsspeicher und Cache geschrieben werden und anderseits nur in den Cache. Die erste Variante ist zeitaufwendig. Bei der zweiten Variante (dem Rückschreibverfahren) wird das Datum nur in den Cache geschrieben und vermerkt, daß eine Änderung stattgefunden hat. Für jedes geänderte Datum wird ein spezielles Bit (dirty bit) gesetzt. Erst, wenn dieses Datum im Cache durch ein anderes ersetzt werden soll, wird es in den Arbeitsspeicher geschrieben. 134 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Speicherhierarchien Hintergrund speicher CPU Cache < 256 KB sehr schnell Arbeits speicher bis 4 GB (z.B. Platte) Hohe Kapazität langsam preiswert Speicherhierarchie Dadurch, daß im Arbeitsspeicher nicht immer die aktuellen Daten stehen, sondern sich noch teilweise im Cache befinden, führt zu einer zeitlichen Dateninkonsistenz, falls andere Einheiten auf den Speicher zugreifen wollen. Ein direkter Speicherzugriff (direct memory access, DMA) wird dadurch sicherlich erschwert. Diese Probleme treten dann nicht auf, wenn der Cache als reiner Befehlscache verwendet wird; in diesem Fall wird nur gelesen; ein Rückschreiben mit den möglichen Komplikationen findet nicht statt. Transparenz des Caches wird durch die Architektur als Assoziativspeicher erreicht. Ein Assoziativspeicher (content addressable memory, CAM) arbeitet inhaltsadressiert. Das bedeutet, daß der Speicher sehr günstig vergleichende Operationen auf der Suche nach bestimmten Mustern durchführen kann. In diesen Fällen wird gleichzeitig mit jedem Speicherwort auch seine Adresse im Cache abgespeichert. Die Arbeitsspeicheradressen stellen die Schlüsselinformation dar, die vom Cache verarbeitet werden. Wird ein Wort in einem Befehl referiert, so wird zunächst mit seiner Adresse als Schlüssel im Cache nachgesehen, ob sich das Wort dort befindet. Ist dies nicht der Fall, so muß, wie bereits oben beschrieben, im Arbeitsspeicher selbst nachgesehen werden. Der Cache enthält einen Vergleicher, eine Adressenliste und eine Datenliste. Jeder Adresse ist dabei nicht nur ein Datenwort zugeordnet, sondern ein ganzer Block. Damit trägt man der Vermutung Rechnung, daß mit großer Wahrscheinlichkeit beim Zugriff auf eine bestimmtes Datum auch die Daten seiner näheren Umgebung benötigt werden. Der Vergleich 135 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ nutzt das Prinzip einer assoziativen Struktur: er wird parallel durchgeführt. Bei einem Treffer (hit) wird das zugehörige Datum auf den Datenbus gelegt und bleibt solange verfügbar, bis der Prozessor dieses Datum abgeholt hat. Das Prinzip der Caches mit Assoziativspeicher wendet man wegen des Hardwareaufwands nur bei relativ kleinen Speichern an, ansonsten bedient man sich Kombinationsstrukturen von Orts- und Inhaltadressierung. Bei diesem Verfahren wird die Adresse in einen Indexteil (Ortsadressierung) und einen inhaltsbezogenen Teil, das sogenannte „tag“ oder Etikett, welches als Adreßteil im Cache abgelegt wird. n-1 i i-1 tag 0 Index Adreßaufteilun g Mit dem Indexteil der Adresse (Bits 0 bis (i-1)) wird im Cache eine Zeile der insgesamt 2i Einträge ausgewählt. Der Inhalt dieser Zeile, das tag, wird mit dem tagTeil der Adresse (bits i bis (n-1)) (parallel!!) verglichen. Bei Gleichheit kann das Datum direkt geschrieben oder gelesen werden. Die Größe des Caches mit 2i Elementen bestimmt die logische Einteilung des Arbeitsspeichers in 2n-i Seiten mit ebenfalls jeweils 2i Worten. Ein Wort mit der Adresse k ( 0 k 2 i ) innerhalb einer Seite des Arbeitsspeichers (Indexteil der Adresse) wird auf die Zeile k im Cache abgebildet. Die Wörter mit der Adresse k in den 2n-i Seiten unterscheiden sich durch das tag. (Faltung des Arbeitsspeichers auf den Cache). Man bezeichnet dies auch als „direct mapped cache“. Um den Prozessor zu entlasten, werden diese Cache-Arbeitsspeicher Operationen aus den Prozessor heraus verlagert und die Steuerung einem sogenannten Direct Memory Access Controller (DMA Controller) zugeordnet. Zu Beginn eines Datentransportes versorgt der Prozessor den DMA Controller mit der nötigen Information, die im folgenden aufgelistet wird. Dazu gehören die Startadresse des Datenbereiches im Speicher die Startadresse eines zweiten Datenbereichs im Speicher oder der Adresse einer I/O-Schnittstelle je nach Transferart die Anzahl der Daten die Richtung des Transfers (Lesen oder Schreiben) Steuerinformation Der Transfer der Informationen wird nun vom DMA-Controller selbstständig ausgeführt; der Prozessor kann derweil andere Aufgaben bearbeiten. Der DMAController hat dazu Zugriffsrechte auf den Datenbus und kommuniziert bei einem Zugriffswunsch auf den Bus mit dem Prozessor. Man unterscheidet zwei Arten für die Übertragung: 136 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Einzeltransfer oder cycle stealing. Bei diesem Modus wird genau ein Datum übertragen und der Bus anschließend wieder freigegeben. Dieser Vorgang benötigt einen Buszyklus und entzieht damit dem Prozessor während dieser Zeit den Zugang zum Bus. Blocktransfer oder burst mode. Hierbei werden alle Daten des aktuellen Transportauftrags übertragen. Erst danach wird die Buskontrolle dem Prozessor zurückgegeben. Nur bei einem notwendigen „Refresh“- Zyklus für einen dynamischen RAM-Speicher kann dieser Vorgang unterbrochen werden. Bei beiden Übertragungsmodi kann das Datum zunächst in einen Pufferspeicher im DMA-Controller zwischengelagert werden und zu einem späteren Zeitpunkt dann zum eigentlichen Ziel weitergeleitet werden (explicit addressing oder flow-through). Fall es sich um einen Daten-Transfer zwischen Speicher und I/O-Schnittestelle handelt, kann der Controller die Operandenadresse direkt dem Speicher mitteilen und die gewünschte Schnittstelle auswählen. In diesem Fall werden die Daten direkt aus dem Speicher zur Schnittstelle (oder umgekehrt) transferiert. Dieses Verfahren wird auch implicit addressing oder fly-by transfer genannt. (n - i) - Bit (Tag) i - Bit Seitenadresse (n-i ) Bit (Index) Speicherwort (i - Bit) Komparator Datenbus Cache fault Cache - Organisation 137 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 138 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ E/A-Werk und Kommunikation Rechner heutiger Generationen erlauben den Anschluß einer Vielzahl externer Geräte, z.B. Drucker, Monitore, Prozeßrechner, Rechner zur Kommunikation, Faxgeräte etc. In dieser Liste sind nur Ausgabegeräte aufgeführt. Als mögliche Eingabegeräte wären zu nennen: die Tastatur, ein Mobilfunkgerät, Prozeßeingabedaten über ein Modem oder z.B. einen Kommunikationsrechner. Als Element in einem Multiprozessorsystem, wie es heute für die Verarbeitung komplexer Datenmengen benötigt wird (Klima- und Wetteranalyse, Multimediasysteme, Techniken der virtuellen Realität , etc.) kommt den Verbindungen hin zur Außenwelt und her von der Außenwelt eine rasch steigende Bedeutung zu. Generell unterscheiden wir folgende Möglichkeiten der Kopplung: Direkte Kopplung Kanalkopplung Speicherkopplung Kopplung über Bussysteme Netzwerke Direkte Kopplung Bei der direkten Kopplung sind zwei Geräte über eine Leitung direkt miteinander verbunden (Prozessor - Prozessor oder z.B. Prozessor - Drucker). Die Kontrolle (Steuerung) wird dabei von einem der beteiligten Geräte durchgeführt. Zu dieser Kommunikation werden genormte Schnittstellen verwendet: eine serielle V24 Verbindung oder die parallele Centronics Standard Leitung oder aber die Verbindung ist direkt hardwaremäßig realisiert. Kanalkopplung Bei der Kanalkopplung übernimmt ein eigener Kanalprozessor die Steuerung der Kommunikation zwischen Prozessor und z.B. einem Plattenspeicher (Harddisk). Er verfügt über die Möglichkeit, direkt auf die Speicher des Rechners zuzugreifen (DMA). Die Kontrolle zur Kommunikation mit einem Netz (ETHERNET) ist ein weiteres Beispiel für die Kanalkopplung. Nach der Übermittlung von Steuerinformation werden die entsprechenden Daten (Anfangsadresse, Länge der zu übertragenden Information als auch Paritätbits bzw. CRC - Check Information) übertragen. Hierbei spricht man auch von der Übertragung von Paketen (paket switching). Speicherkopplung 139 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Speicherkopplung findet Verwendung bei Multiprozessorsystemen. Solche Systeme besitzen häufig als Kommunikationsglied zwischen einzelnen Prozessoren einen Speicher, der von beiden Prozessoren adressiert werden kann. Dabei muß natürlich sichergestellt werden, daß es zu keinen Zugriffskonflikten kommt. Multiportspeicher oder das bereits besprochene Prinzip der Semaphore verhindern solche Konflikte. Bussysteme Bussysteme gibt es in sehr unterschiedlichen Formen, z.B. prozessorinterne Datenund Control-Busse, Busse zum Anschluß externer Geräte wie SCSI oder Busse zur Kopplung mehrerer Prozessoren wir ETHERNET. Folgende Merkmale sind hier anzuführen: Anzahl, Art und Breite des Busses Kommunikationstechnik und das Trägermedium (2-Draht, Lichtleiter, Infrarot etc.) Sicherheit Busverwaltung und Kommunikationsprotokoll Anzahl, Art und Breite des Busses Häufig wird die Kommunikation in einem Rechnersystem nicht nur über einen einzigen Systembus ausgeführt, sondern man führt eine funktionelle Aufteilung in logisch und physikalisch unabhängige Busse durch. Dazu teilt man Daten- , Befehls- und Steuerinformation je einen getrennten Bus zu. Sicherheitsaspekte und Kapazitätsüberlegungen sind andere Gründe für eine Aufteilung. Mit der Busbreite wird die Anzahl der Bit angegeben, die parallel übertragbar sind. Hierbei sind Prüfbit (Parity, CRC) nicht enthalten. Kommunikationstechnik und das Trägermedium Die Kommunikationstechnik liefert uns die technische Möglichkeit, Informationen zu übertragen. Dabei unterscheidet man zwischen synchroner und asynchroner Technik und der Möglichkeit, den Takt selbst mit zu übertragen oder ihn aus der Nachricht zu gewinnen (Demodulation). Als Trägermedium zur Übertragung stehen dazu unterschiedliche Kabelarten wie 2-Draht Leitungen, Koaxialkabel, Lichtwellenleiter, Funktechnik oder z.B. Infrarottechnik zur Verfügung. Hierzu muß man festhalten, daß die Lichtwellenleiter das preiswerteste und gleichzeitig das leistungsstärkste Trägermedium ist. Zudem ist es einfach zu installieren. Sicherheit 140 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Unter Sicherheit verstehen wir einerseits die Ausfallsicherheit der an der Übertragung beteiligten Komponenten, zum andern die Robustheit, Fehler, die bei der Übertragung auftreten, zu erkennen und zu beheben. Fehler, die durch Störungen bei der Übertragung auftreten, können z.B. durch den bereits erwähnten Paritätstest hardwaremäßig erkannt werden und beseitigt werden. Sender und Empfänger tauschen dazu entsprechende Quittungssignale aus. Korrekte Busverwaltung und Kommunikationsprotokoll sind unabdingbare Voraussetzungen für einen funktionierenden Informationstransfer zwischen zwei Moduln. Um dieses sicherzustellen, wurde eine umfangreiche Bus-Organisation entwickelt. Die Geräte, die über einen Bus kommunizieren, teilen wir in drei Kategorien ein: Listener, Talker und Mastern. Listener stellen Geräte dar, die den Bus nur abhören. Sie empfangen Nachrichten und haben keine Möglichkeit, auf den Bus zu senden. Stellglieder (Ventile, Motoren, etc.) in einem technischen System sind Beipiele hierfür. Talker hingegen können Nachrichten empfangen als auch senden. Angeschlossene Rechner, externe Speicher, aber auch Ausgabegeräte (z.B. Drucker) mit Rückmeldemöglichkeit (kein Papier) gehören dazu. Master sind Geräte, die die Bussteuerung durchführen. Man unterscheidet hier zwischen zentraler und dezentraler Verwaltung. Bei der zentralen Verwaltung gibt es genau einen Master, der die Buszuteilung steuert. Fällt er aus, so bricht die gesamte Kommunikation zusammen. Demgegenüber sind bei dezentraler Kontrolle alle angeschlossenen Geräte gleichberechtigt. Bei diesem Konzept muß man sicherstellen, daß immer nur höchstens ein angeschlossenes Gerät auf den Bus schreiben darf, d.h. die Talker Funktion übernimmt. Bei beiden Steuerungsprinzipien unterscheiden wir drei Verfahren: Reihung oder daisy chaining Wählverfahren Verfahren unabhängiger Anforderungen oder random access Zentrale Bussteuerung Bei der Reihung oder dem daisy chaining teilen die angeschlossenen Geräte dem master die Busanforderung, d.h. den Wunsch, auf den Bus zu senden, mit. Die Zuteilung bekommt das Gerät, welches in einer Reihung dem master am nächsten ist. Es funktioniert wie folgt: 141 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 1. Ein oder mehrere Geräte melden durch Setzen der Bus request-Leitung einen Zuteilungswunsch an den master. 2. master prüft, ob der Bus frei ist. Dies ist genau dann der Fall, wenn die busyLeitung nicht gesetzt ist. 3. Ist der Bus frei, dann setzt der master die Bus available Leitung 4. Diese Bus available-Leitung wird von allen nicht sendewilligen Geräten durchgeschaltet bis zum ersten sendewilligen Gerät. Dieses Gerät schaltet das Bus available Signal inaktiv , löscht sein Bus request Signal und setzt das Bus busy-Signal auf der Bus busy Leitung. 5. Nach dem Absetzen der Nachricht wird das Bus busy Signal zurückgesetzt. Das obige Prinzip funktioniert sehr einfach und ist preiswert zu installieren. Allerdings sind diejenigen Geräte in der Zuteilung benachteiligt, die weit ab vom master liegen. Bus available Gerät 1 Master Gerät 2 Gerät 3 Bus request Bus busy BUS Zentrale Steuerung: Reihung Beim Wählverfahren mit zentraler Steuerung werden die ersten zwei Schritte wie im ersten Fall durchgeführt, also: 1. wie beim daisy chaining 2. wie beim daisy chaining 3. Ist der Bus frei, legt der master eine Geräteadresse auf den poll-count. Alle Geräte sind an diesen poll count angeschlossen und hören damit diese Leitung ab. Hat das adressierte Gerät das Signal bus-request aktiv geschaltet, so kann 142 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ es nun das bus-busy Signal auf die entsprechende Leitung geben. hat es keinen Zuteilungswunsch, bleibt es passiv. 4. Nach Ablauf eines Zeitintervalls prüft der master die bus-busy Leitung, ob das adressierte Gerät reagiert hat. Wenn das adressierte Gerät passiv geblieben ist, legt er den poll-count auf ein anderes Gerät. Die Auswahl der Geräte durch den master kann nach mehreren Verfahren erfolgen. (Prioritäten, zufallsgesteuert, Hochzählen der Adresse o.ä.). Poll Count master Gerät 1 Gerät 2 Gerät 3 Bus request Bus busy BUS Wählverfahren bei zentraler Steuerung Da der master nur einen Zuteilungswunsch erfährt, aber nicht weiß, von welchem Gerät, kann es unter Umständen bis zur Zuteilung eine längere Zeit dauern. Dieser Nachteil wird durch das „Verfahren unabhängiger Anforderungen“ vermieden. Hier erfährt der master, welches Gerät eine Zuteilungsanforderung stellt und kann gezielt reagieren. Allerdings ist bei diesem Verfahren der Hardwareaufwand wegen der Leitungsvielfalt recht hoch (Bus request Leitungen, Bus granted Leitungen, Bus assigned Leitungen und der eigentliche Daten Bus). Auch die Erweiterbarkeit ist dadurch beschränkt. Die Zuteilung erfolgt in folgenden Schritten: 1. Hat ein Gerät i einen Zuteilungswunsch, so meldet es diesen über die Leitung „Bus request“ i an den master. 2. Der master prüft, ob der Bus frei ist (Bus assigned ist nicht gesetzt) 3. Ist der Bus frei, so wählt der master aus allen Zuteilungswünschen ein Gerät aus und weist ihm über die Leitung „Bus granted“ i den Bus zu. 143 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 4. Das Gerät setzt seinen „Bus request“ i zurück und setzt die „Bus assigned“ Leitung 5. Nach Ende der Übertragung setzt das Gerät „Bus assigned“ wieder zurück. master Gerät 1 Gerät 2 Gerät 3 Bus request Bus granted Bus assigned BUS Unabhängige Anforderung mit zentraler Steuerung Dezentrale Steuerung Bei dezentraler Steuerung entfällt der master. In diesem Fall wird der Zuteilungsmechanismus besonders einfach: 1. Hat ein Gerät einen Zuteilungswunsch, dann prüft es, ob der Bus verfügbar (available) ist. 2. Ist der Bus frei, wird das Signal Bus request gesetzt und die Daten (Nachricht) auf den Bus gegeben. Bus available ist die Negation von Bus request. Damit wist dann automatisch der Bus als belegt gekennzeichnet. 144 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Dieses Verfahren erzeugt möglicherweise Zugriffskonflikte auf dem Bus. Wenn z.B. mehrere Geräte gleichzeitig das Signal Bus request aktivieren weil sie vorher alle das Signal bus available als aktiv erkannt hatten. Bus available Gerät 1 Gerät 3 Gerät 2 INV Bus request Bus Reihung mit dezentraler Steuerung Poll count Gerät 1 Gerät 2 Gerät 3 Bus available Bus accept BUS Wählverfahren bei dezentraler Steuerung Ähnlich wie bei der zentralen Steuerung legt beim Wählverfahren das Gerät, welches seine Nachricht abgesetzt hat, eine neue Adresse auf den poll-count. Auch muß sichergestellt werden (durch Timer), daß ein sendewilliges Gerät angesprochen wird. Dabei wird über die Bus available Leitung der Bus freigegeben und bei Zuteilung über Bus accept belegt. 145 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Das Verfahren bei unabhängigen Anforderungen mit dezentraler Steuerung ist von besonderer Bedeutung, weil das ETHERNET danach arbeitet. Bei diesem Verfahren aktiviert ein Gerät die Bus request Leitung, falls das Bus assigned Signal nicht gesetzt ist. Diese Anforderung kann von mehreren Geräten gleichzeitig kommen. Durch geeignete Methoden werden hierbei die Zugriffskonflikte aufgelöst. Beim Ethernet wird dazu das CSMA/CD Verfahren (Carrier sense multiple access collision detection) verwendet. Her wir auch auf die beiden in der untenstehenden Skizze aufgeführten Steuerleitungen verzichtet. Jedes sendewilliges gerät hört den Bus ab und sendet, sobald der Bus als frei erkannt wird. Gerät 1 Gerät 2 Gerät 3 Bus request Bus assigned BUS Verfahren unabhängiger Anforderungen mit dezentraler Steuerung Busse sind Elemente zum Aufbau von Rechnern. Dabei können mehrere Prozessoren und deren Speicher zu einem System zusammengefaßt werden. Innerhalb dieses Systems werden Kommunikationsleitungen unterhalten, die einen fehlerfreien Betrieb der Elemente untereinander gewährleisten sollen. Mit dieser Annahme kommen wir zu den Netzwerken. Ein Beispiel hierfür ist das Internet oder das öffentliche Datennetz der Telekom. Zum korrekten Betrieb solcher Netze sind Protokolle zur Regelung der Kommunikation notwendig. In der Praxis werden 2 Protokolle genutzt: das OSI (Open System Inteconnection) und das TCP/IP (Transmission Control Protocol/ Internet Protocol). Protokolle 146 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Auf der TCP/IP Anwendungsebene (application layer) befinden sich die Anwendungsprogramme, die INTERNET als Kommunikationswerkzeug verwenden. Ein Teil der Software für die TCP/IP Umgebung auf der Anwendungsebene unterstützt die standardisierten Protokolle der Anwendungsebene, die unmittelbar Benutzerunterstützung bereitstellen. Andere Software auf dieser Ebene unterstützt das generieren von application programming interfaces (APIs), die zur Erstellung von Anwendungsprogrammen für den Benutzer dienen und über das Internet miteinender kommunizieren. TCP/IP definiert einen weiten Bereich von Anwendungsebene-Protokollen, die den INTERNET Benutzer mit remote login, Kopieren von Dateien und sharing, electronic mail (e-mail), VerzeiochnisOrganisation al auch Netzwerk-Organisations-Hilfsmitteln ausstattet. Einige der Anwendungs-Protokolle werden häufig genutzt, andere nur für spezielle Aufgaben. Die folgende Skizze gibt einen Überblick über die einzelnen Architektur Ebenen: APPLICATION PRESENTATION APPLICATION SESSION TRANSPORT TRANSPORT NETWORK INTERNET DATA LINK NETWORK INTERFACE PHYSICAL HARDWARE OSI Model Functional Layers TCP / IP Functional Layers Vergleich: TCP/IP und OSI Architektur Ebene 147 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Die Anwendungs Ebene (application layer) Die oberste Ebene, auf der der Benutzer arbeitet, ist die Anwendungsebene. Auf ihr laufen die Anwendungs-Programme zum Informationsaustausch unter den Rechnern. Die darunter liegenden Ebenen mit ihrer Komplexität werden hier nicht sichtbar. Auf der Anwendungsebene werden lediglich die Sende- bzw. Empfangswünsche artikuliert; Details, wie dies z.B. technisch realisiert wird, ist Aufgabe der darunter liegenden Ebenen. Die Darstellungsebene (presentation layer ) Die Darstellungsebene ist die unterste Ebene, auf der die Bedeutung der übertragenen Bits eine Rolle spielt. Das OSI Modell definiert zwei Bedeutungen der Darstellungsebene: 1. Die Darstellungsebenen in den beiden miteinander kommunizierenden Systemen müssen sich über die Sprache einigen, mit Hilfe derer sie Daten übertragen sollen. 2. Die Darstellungsebene darf sich nicht darum kümmern müssen, wie die interne Datendarstellung im jeweils anderen Rechner aussieht. Wenn z.B. auf zwei kommunizierenden PCs BASIC Programme laufen, gibt es keine Schwierigkeiten, jedoch, wenn auf einer VAX ein FORTRAN läuft und auf einer mit der VAX kommunizierenden IBM ein COBOL Programm, werden die Darstellungsebenen wichtig. Das FORTRAN Programm z.B. stellt eine INTEGER Zahl durch ein 32 Bit Binärzahl dar; das COBOL Programm hingegen stellt eine INTEGER als gepackte Dezimalzahl dar. Die Darstellungsebene sorgt dafür, daß jedes Programm in dem für sich selbst günstigsten Datenformat arbeiten kann, ohne sich um das des Kommunikationspartners kümmern zu müssen. Die Sitzungsebene (session layer) Die Sitzungsebene ist für die Organisation des Dialogs zwischen den beiden kommunizierenden Programmen zuständig und den Datenaustatusch. Dafür werden drei Dialog-Typen von der Ebene angeboten: 1. Duplex - Typ, wobei beide Programme gleichzeitig senden und empfangen können 2. Simplex - Typ , wobei ein Programm sendet und das zweite Programm (die zweite Seite) empfängt 3. die Sitzungsebene legt „Synchronisationszeitpunkte“ fest, zu denen der Dialog unterbrochen und später wieder korrekt weitergeführt werden kann (interrupt). Die Transportebene (transport layer) Das OSI Modell klassifiziert jedes System im Netzwerk als eines der beiden folgenden Typen: 1. End- Systeme, die als Datenquelle oder Datensenke dienen und 2. die Systeme, die das Routing und Verschalten der im Netz interagierenden Rechner bewerkstelligen. Die Transportebene ist damit die unterste Ebene, die nur in den unter 1. erwähnten End-Systeme notwendig sind. Die Systeme, die das Routing etc. übernehmen und keine End-Systeme dartsellen, finden nur in den restlichen unteren drei Ebenen Verwendung. Die Transportebene verbirgt vor dem Benutzer all die Details, die zum 148 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Übertragen der Daten notwendig sind. Dazu gehören z.B. die Kontrollmechanismen bei Datenverlust. Der Nutzer sieht nur die komfortable Oberfläche. Die Netzwerkebene (network layer) Auf der Netzwerkebene findet der eigentliche Datenverkehr statt. Hier werden die Verbindungen zwischen der Datenquelle und dem Datenempfänger hergestellt. Es ist dabei unerheblich, wieviele Zwischenstationen geschaltet werden müssen. Der Nutzer sieht von diesen „internen“ Vorgängen nichts; er gibt nur seinen Wunsch ins Netzwerk, mit dem Rechner irgendwo kommunizieren zu wollen. Die Daten, die dabei von einem Rechner zum Ziel (Target) Rechner transportiert werden , nennt man Pakete (packets). Die Datenverbindungsebene (data link layer) Diese Ebene ist für die Daten - Verbindung von einem Rechner zum Ziel-Rechner zuständig. Mechanismen auf dieser Ebene steuern die Übertragung von Dateneinheiten, frames genannt, über eine Leitung. Sie ist auch für das Packen von Bits in frames zuständig; gleichzeitig werden hier ÜbertragungsfehlerErkennungsmechanismen eingesetzt. Bei manchen Verbindungen führt diese Ebene auch Prozeduren zur Datenflußkontrolle und Fehlerkorrektur durch. Die Physikalische Ebene (physical layer) Diese Ebene liegt zuunterst und ist damit verantwortlich aktuelle Signalübertragung von elektrischen optischen oder auch Radiosignalen zwischen den kommunizierenden Rechnern. Hier werden die Signal als Bits mit logischen Werten 0 und 1 mit ihren assoziierten elektrischen Werten z.B. 0 Volt und 3 Volt verarbeitet. Eine Interpretation der Bedeutung dieser Signale findet auf dieser Ebene nicht statt. 149 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Leistungsbewertung Ziel der Leistungsbewertung von Rechenanlagen ist es, eine objektive Aussage mit Hilfe meßbarer Größen zu treffen. Leistungsbeeinflussende Größen eines oder mehrerer Rechensysteme sind: Hardware: Prozessor, Arbeitsspeicher, Cachegröße, Speicherhierarchie, Busssystem , Befehlssatz, Mikroprammierung, Ein / Ausgabe Kommunikation: Art und Breite der Kommunikationspfade, Synchronisation Betriebssystem: Sprachen, Komponenten, Parallelisierung Algorithmen: Parallelisierung, Zuverlässigkeit Methoden der Leistungsbewertung sind: Ermittlung von Kenngrößen und Leistungskriterien Beobachtende und berechnende Leistungsbewertung Benchmarks Leistungsdatenbanken Parameter bei der Parallelverarbeitung Algebraische Leistungsbewertung Beabsichtigt man den Kauf eines Rechners (z.B. PC), so macht man sich ein Bild von der Leistung des gewünschten Rechners anhand von Prospekten und Handbüchern. In diesen Prospekten sind sogenannte Kenngrößen“ der angebotenen Rechner angegeben. Als Kenngrößen gelten bei Prozessoren: benötigte Zeiten für Addition und Multiplikation wie hoch ist der Befehlsdurchsatz (MIPS: millions of instructions per second) wie hoch ist der Befehlsdurchsatz an „floating point operations per second“ (Gleitkommaoperationen, FLOPS) Wortbreite Als Kenngrößen bei Speichern gelten: die Zugriffsart (wahlfrei, sequentiell) die Kapazität die Zugriffs- und Zykluszeit die Bandbreite Die angegebenen Kenngrößen werden von den verschiedenen Herstellern unterschiedlich interpretiert. Die Kenngrößen werden daher nur als Leistung verstanden, die mit Sicherheit überschritten werden kann (peak performance. Geht man realistisch vor, so kann der Benutzer im Regelfall etwa 30% dieser Spitzenleistung erreichen. Das gilt im besonderen für Mehrprozessorsysteme, bei 150 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ denen eine gleichmäßige Spitzenauslastung aller Prozessoren nicht möglich scheint. Die mittlere Befehlsausführungszeit ist eine weitere Kenngröße, die der Realität schon näher kommt. Diese Zeit basiert auf der Ausführung von Befehlsmixen. Hierbei wird die Ausführungszeit eines Befehls oder einer Befehlsklasse mit der relativen Häufigkeit gewichtet. Die mittlere Ausführungszeit ergibt sich zu: n T pi ti i 1 Der bekannteste Befehlsmix ist der Gibson-Mix. Die Befehle sind in 13 Klassen, z.B. Laden und Speichern, Integeraddition, Vergleiche, logische Befehle etc. unterteilt. Die relativen Häufigkeiten der Klassen wurden durch Messungen an Programmen aus dem technisch-wissenschaftlichen Bereich ermittelt. Für andere Anwendungsbereiche ergeben sich damit möglicherweise andere Kennzahlen für die einzelnen Häufigkeiten. Der GAMM Mix stellt einen anderen Mix dar. In ihm werden Aufgaben wie die Addition von n Zahlen, Tabellensuche etc. definiert. Dieser Mix wird auch als Funktionsmix bezeichnet. Die Ausführungszeiten folgender Funktionen werden im GAMM Mix gemessen: t0: t1: t2: t4: t5: Skalarprodukt zweier Vektoren mit je 30 Elementen Summe zweier Vektoren mit je 30 Elementen Horner Methode für ein Polynom 10. Grades Wurzelziehen mit dem Newton Verfahren Maximumbestimmung unter 100 Tabellenwerten. Für den GAMM Mix ergibt sich dann: T = 1/300 ( t0 + 2t1 + 3t2 + 4t3 + t4/5) Durch Mixe lassen sich zwar Prozessoren oder einzelne Verarbeitungselemente bewerten, die Systembewertung jedoch ist mit diesen Methoden allein unzureichend. Kernels sind Programme, die in bestimmten Anwenderprogrammen häufig verwendet werden. Hier spielen z.B. Matrixinversionen oder die Behandlung von großen Gleichungssystemen eine herausragende Rolle. Jedoch: Auch hierbei ist das Ergebnis nicht für jedes Benutzerprofil günstig, es werden nur bestimmte, meist wenige Hardwarekomponenten angesprochen und Nebenläufigkeiten werden hierbei auch nicht betrachtet. Wir stellen also fest: Ein allgemeingültige, umfassende Leistungsbewertung ist wenn überhaupt nur sehr schwer erreichbar. Diese Verfahren spielen deshalb bei der Leistungsbewertung heute nur noch eine untergeordnete Rolle. Wir wollen im folgenden nicht mehr mit der Bewertung selbst, sondern mit Kriterien zur Bewertung befassen. 151 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Um ein Maß oder einen Anhaltspunkt zu erhalten, wie die Leistung beim Einsatz ein oder mehrerer Rechner sich verändert, wollen wir die Komplexitätstheorie bemühen. Dort gibt es einen Satz: Es gibt Probleme , die keinen optimalen Algorithmus besitzen. Das bedeutet, daß es zu jedem Algorithmus A, der bereits ein bestimmtes Problem löst, einen anderen Algorithmus B gibt, der das Problem schneller als Algorithmus A löst. (Speed - up Theorem) Das hört sich ungut an. Wir können also nicht von vornherein verkünden, daß wir einen optimalen Algorithmus für ein Problem entwickeln werden. Die Eigenschaft reduziert damit unsere Möglichkeit, die Leistungsfähigkeit eines Rechners oder ganzen Rechnersystems vorauszusagen. Eine zweite Aussage, die hier auch nicht bewiesen werden soll, sagt aus, daß bei zwei Rechnern, von denen der eine schnell, der andere langsam arbeitet, es bestimmte Probleme und Zeitvorgaben (Zeitgrenzen) gibt, bei denen der langsamere Rechner den schnelleren Rechner einholt. (GAP - Theorem). Ein einfaches Kriterium für die Leistungsfähigkeit kann die benötigte Ausführungszeit für einen Algorithmus darstellen. Sei dabei p die Anzahl der beteiligten Prozessoren und n ein Maß für die Anzahl der Eingabegrößen: Tp (n) = cp (n) + op (n) Hierbei ist Tp(n) die Ausführungszeit für einen Algorithmus, cp die Rechenzeit und op ein Maß für den Overhead bei der Verwendung von p Prozessoren. Der Overhead beinhaltet z.B. die Zeit für die Kommunikation der Prozessoren untereinander, um den Algorithmus auszuführen. Im seriellen Fall ist er natürlich gleich Null! Für den Speed - up (Beschleunigung) ergibt sich damit: Speed - up Sp (n) T1 (n) Tp (n) Dieser Ansatz zur Ermittlung der Beschleunigung ist einer unter vielen möglichen, weil bereits bei den Größen T1(n) und Tp(n) mehrere Interpretationsmöglichkeiten bestehen. Erhard gibt drei unterschiedliche Definitionen an: 152 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ 1) Speed up Re chenzeit des A lg orithmus A für Re chner X mit 1 Pr ozessor Re chenzeit des A lg orithmus A für Re chner Y mit p Pr ozessoren 2) Speed up Re chenzeit des schnellste n ser . A lg . am Re chner X mit 1 Pr oz Re chenzeit des schnellste n par A lg am Re chner Y mit p Pr oz. 3) Speed up Hypothetische Re chenzeit am Re chner X mit 1 Pr ozessoren. Re chenzeit am Re chner Y mit p Pr ozessoren Wie man leicht sieht, ergeben sich hierbei für das Speed - up jeweils unterschiedliche Werte. Der Leistungsgewinn, der durch die Verbesserung einer Komponente (Hard- oder Software) eines Rechners erreicht werden kann, wird durch das Amdahlsche Gesetz bestimmt. Es sagt aus, daß die aus der Verwendung einer schnelleren Komponente resultierende Gesamtleistung auf den Zeitanteil begrenzt ist, in dem sie genutzt wird. Zur Erklärung diene ein Beispiel aus Hennessy / Patterson: Angenommen, Sie müssen von Nevada nach Kalifornien über die Sierra Nevada und durch die Wüste nach Los Angeles. Sie haben verschiedene Fahrzeuge zur Auswahl, aber leider geht die Route so durch das Gebirge, daß Sie dort laufen müssen. Ihr Fußweg dauert 20 Stunden. Die letzten 200 Meilen können Sie auch mit einem Fahrzeug zurücklegen. Sie haben fünf Möglichkeiten: 1. 2. 3. 4. 5. Laufen mit durchschnittlich 4 Meilen / Stunde Fahrradfahren mit durchschnittlich 100 Meilen / Stunde Fahren mit einem Hyundai mit 50 Meilen / Stunde Fahren mit einem Ferrari mit 120 Meilen / Stunde Fahren mit einem Raketenauto mit 600 Meilen / Stunde 153 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Wie lange dauert die gesamte Reise, und welche Beschleunigung erreicht man auf der ganzen Strecke? Fahrzeug für Stunden für Beschleunigung in Stunden für Beschleunigung den zweiten den zweiten der Wüste die für die ganze Teil der Reise Teil der Reise Ganze Reise Reise Fußmarsch 50,00 1,0 70,00 1,0 Fahrrad 20,00 2,5 40,00 1,8 Hyundai 4,00 12,5 24,00 2,9 Ferrari 1,67 30,0 21,67 3,2 Raketenauto 0,33 150,0 20,33 3,4 Wie wir aus der obigen Tabelle ersehen können, hängt die erreichte Beschleunigung stark davon ab, daß wir durch die Berge laufen müssen. Die Beschleunigung in der Wüste ergibt sich aus dem Quotienten der benötigten Zeit mit dem entsprechenden Fahrzeug und der zeit des Fußmarsches; die letzte Spalte gibt an, wievielmal schneller die ganze reise im Vergleich zum Fußmarsch ist. Wir erhalten die Antwort, wenn wir die Zeit für den zweiten Teil der Reise bestimmen und sie zu den 20 Stunden des Fußmarsches durch die Berge addieren. Mit dem Amdahlschen Gesetz ermitteln wir schnell die von zwei Faktoren abhängige Beschleunigung: 1. Der Anteil der Rechenzeit in der Originalmaschine, der durch Veränderung verbessert werden kann. Im Beispiel ist der Anteil 50 / 70. Dieser Wert, den wir Anteilverändert nennen wollen, ist immer kleiner oder gleich 1. 2. Die Verbesserung, die durch die veränderte Ausführung erreicht wird, d.h. wievielmal schneller eine Task ablaufen würde, wenn nur die Veränderung genutzt würde. Im Beispiel ergibt sich dieser Wert aus der Spalte „Beschleunigung in der Wüste“. Dieser Wert ist die Originalzeit bezogen auf die Zeit mit der Veränderung und istr immer größer als 1. Wir nennen den Wert Beschleunigungverändert. Die Ausführungszeit der Originalmaschine mit dem veränderten Modus ergibt sich aus der Summe der Zeiten der unveränderten Teils der Maschine und des Teils unter Nutzung der Veränderung: Ausführungszeitneu Anteilverändert Ausführungszeit alt * 1 Anteilverändert Beschleuni gung verändert Die Gesamtbeschleunigung ist das Verhältnis der Ausführungszeiten: 154 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Beschleuni gunggesamt Ausführungszeit alt Ausführungszeit neu 1 1 Anteilverändert Anteilverändert Beschleuni gung verändert Ein Overhead, der zur Kommunikation unter den Prozessen zusätzlich notwendig ist, ist hier nicht berücksichtigt. Noch ein Beispiel: Angenommen, wir nehmen eine Veränderung vor, die zu einer 10 mal schnelleren Laufzeit führt, aber nur i 40% der Zeit nutzbar ist. Welche Gesamtbeschleunigung ergibt sich? Lösung: Anteilverändert 0,4 Beschleuni gungverändert 10 Beschleuni gung gesamt 1 0,6 0,4 10 1 0,64 1,56 Weiteres Beispiel: Angenommen, wir können die Geschwindigkeit einer CPU um den Faktor fünf (ohne Beeinflussung der E / A Leistung) zu erhöhen. Die CPU soll 50% der Zeit aktiv sein, die restliche Zeit wartet sie auf E/ A. Wenn die CPU ein Drittel der Computerkosten ausmacht, ist dann die Erhöhung der Geschwindigkeit um den Faktor fünf eine gute Investition aus Sicht des Kosten / Leistungsverhältnisses? Lösung: Die Beschleunigung beträgt: Beschleuni gung 1 0,5 0,5 5 1 0,6 1,67 Die neue Maschine kostet das 2 1 *1 * 5 2,33 fache der Originalmaschine. 3 3 Da die Kosten offenbar stärker steigen als die Leistung, wird sich das Kosten / Leistungsverhältnis nicht verbessern. 155 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Eine wichtige Folgerung aus dem Amdahlsche Gesetz ist, daß, wenn eine Veränderung nur für einen Teil einer Task nutzbar ist, man die Task nicht mehr beschleunigen kann als 1 minus dem Teil und davon den reziproken Wert. Ein häufiger Fehler bei der Anwendung des Amdahlschen Gesetzes ist die Verwechslung folgender Vorstellungen: a) zu ändernder Zeitanteil, um die Verbesserung zu nutzen und b) Zeitanteil, nachdem die Verbesserung genutzt wird. Wenn wir anstatt der Zeit, die eine Verbesserung während einer Berechnung bereits nutzen könnte, die Zeit nach der Nutzung einer Verbesserung messen, wird das Resultat falsch sein. Merke: Über dem Amdahlschen Gesetz erhalten wir Hinweise darüber, wie eine Veränderung die Leistung verbessert und wie die Ressourcen zu verteilen sind, um das Kosten/Leistungs-Verhältnis zu verbessern. Ziel muß es sein, die Ressourcen proportional zum Zeitanteil aufzuteilen. Neben diesen erwähnten Kriterien gibt es eine Vielzahl anderer Kriterien, auf die aber nicht näher eingegangen werden soll. Dazu gehören: Antwortzeit: Bedienzeit: Durchsatz: Verweilzeit: Wartezeit: Wartezeit bis zum Eintreffen eines Resultats Gesamtzeit, die ein Auftrag im System bearbeitet wird Anzahl der Aufträge, die pro Zeitintervall bearbeitet werden Zeit, die ein Auftrag im System verweilt Zeit, die ein Auftrag auf Bearbeitung wartet 156 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Beobachtende Leistungsbewertung (Monitoring) Um Istzustände in einem Rechensystem feststellen zu können, bedient man sich des Monitoring. Es wird eingesetzt zum: 1. Vergleich verschiedener Rechensysteme vor einer Kaufentscheidung 2. zur Validierung theoretischer Voraussagen, z.B. werden die Prognosen nach dem Bau der Rechner überprüft 3. zur Überprüfung des Betriebs . Hier können Engpässe bei definierten und wechselnden Lastbedingungen festgestellt werden und als Folge Maßnahmen zum Tuning des Systems durchgeführt werden. 4. Einsicht in den inneren Ablauf von Prozessen im System. Beobachtung des dynamischen Systemverhaltens (siehe auch Punkt 3) Bei den Monitoring Methoden unterscheidet man: Hardware Monitoring und Software Monitoring Hybrides Monitoring als Mischform von Software- und Hardware Monitoring Bei dem Hardware Monitoring verwendet man Meßgeräte (den Hardware Monitor), welche direkt an die Schaltkreise des Rechensystems angeschlossen werden. Über die Meßergebnisse kann man direkt Rückschlüsse auf die Hardwaregrößen als auch auf das Verhalten der (Objekt) - Programme schließen. Bei den Hardwaregrößen werden Kanalauslastung oder Nutzung des Befehlsvorrates gemessen, bei den Objektprogrammen sind Rückschlüsse auf die Objekt-Software möglich. Die Messungen sind rückkopplungsfrei, es sei denn, eine Rückführung von Signalen hinein in das System wird bei dem Monitoring ausdrücklich vorgesehen. Durch die Miniaturisierung ergeben sich beim Hardware Monitoring zunehmend Probleme dadurch, daß ein Abgriff der gewünschten Signale durch die Kapselung komplexer Schaltungen in Chips nicht mehr möglich ist. Zum andern muß darauf geachtet werden, daß durch die Belastung durch den Meßfühler (vornehmlich kapazitiv) eine Messungsverfälschung auftreten kann. Probleme, wie sie oben geschildert wurden, treten beim Software Monitoring nicht auf. Hierbei läuft im Rechensystem selbst ein Meßprogramm, welches Zustände und Ereignisse aufzeichnet. Es ist klar, daß durch dieses zusätzliche Programm das Verhalten des Rechners verändert wird und dadurch auch das Resultat des Meßprogramms entsprechend gewertet werden muß. Wie auch beim Hardware Monitoring ist die Qualität der erzielten Ergebnisse abhängig vom Takt der Meßzyklen. Um verwertbare Ergebnisse zu erhalten, ist die 157 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Auflösung der Meßergebnisse von der Auflösung der Uhr des Objektrechners abhängig. Das Monitoring verteilter Systeme wirft besondere Fragestellungen auf: Hier muß nicht nur ein einzelner Rechner beobachtet werden, sondern eine Zusammenschaltung von Rechnern, die über ein Netz miteinander kommunizieren. Wir unterscheiden dabei: Knotenmonitore, d.h. die Rechner, die in dem Rechnernetz zusammengeschaltet sind und sich als Knoten des Netzes darstellen, werden gemessen und Verbindungsmonitore, d.h. die Verbindungen zwischen den Rechnern werden gemessen. dabei stellen die Monitore wieder eigene - wenn auch Knoten mit kleinerer Komplexität - dar. Das Hauptproblem bei diesen Messungen liegt in der Wechselwirkung der Komponenten eines verteilten Systems aufeinander. Die Interpretation der Messungen eines Monitorsystems, mit denen man es üblicherweise in Multiprozessorsystemen zu tun hat, ist nur dann erfolgversprechend, wenn man sich in dem Gesamtsystem auf eine globale Taktung verständigt. Wir merken uns: Im allgemeinen ist das Monitoring ein sehr gutes Werkzeug zur Beobachtung des dynamischen (auch statischen) Verhaltens eines Rechensystems. Mit den erhaltenen Ergebnissen lassen sich Rückschlüsse auf bisher verborgene Probleme wie Kanalengpässe aufdecken. Der Einsatz von Hardware Monitoren wird durch den Fortschritt in den Schaltungen laufend erschwert: Meßdaten bei virtuellen Speicherkonzepten lassen keine Rückschlüsse mehr auf einen bestimmten Prozeß zu. Sie können nicht mehr eindeutig zugeordnet werden. bei RISC Architekturen beeinflussen die Compiler die Reihenfolge der Abarbeitung; ein Rückschluß auf die Programmfolge ist dadurch kaum noch möglich die Komplexität der Prozessor- Chips erhöht sich laufend. Daten- und Befehlscaches werden zunehmend mit auf die CPU integriert. Damit besteht für den Monitor keine Zugriffsmöglichkeit mehr, auf diese Daten zuzugreifen. Die ständig steigenden hohen Taktraten bedingen Meßgeräte, die diese schnellen Vorgänge noch eindeutig identifizieren können. 158 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Parallele Rechnerstrukturen In der Klassifikation nach Flynn wurden 4 Klassen von Rechnern vorgestellt. Dabei sind , wie wir bereits gesehen haben, der SISD für den sequentielle Anwendungen, der SIMD und der MIMD Rechnertyp von herausragender Bedeutung für die parallele Rechentechnik. SIMD Rechner SIMD Rechner sind die einfachsten Rechner zum Einsatz als Parallelrechner. Sie sind einfach aufgebaut: sie wenden eine Instruktion (Befehl) auf einen ganzen Datensatz an. Das abarbeitende Programm ist dabei ein ganz konventionelles sequentielles Programm. Hat man viele „processing elements“ (z.B. Feldrechner), so führen alle Prozessoren die gleiche Operation durch, aber auf möglicherweise verschiedenen Daten. Ein bekannter Rechnertyp des SIMD Klasse ist der Vektorrechner. Hier gilt genau das vorher Gesagte. Das besondere Merkmal der Vektorrechner liegt in ihren speziellen Funktionseinheiten für Gleitkomma-Operationen, die nach dem Pipelining-Konzept arbeiten. Damit wird die Performance des Rechners auf ein Vielfaches gesteigert, je nachdem wie die Pipelinetiefe ist. Zum andern liegt es bei Vektorrechnern nahe, die Anzahl der parallel arbeitenden Prozessoren (processing elements) nach der Dimension der zu verarbeitenden Vektoren auszurichten. Programmiersprachen wie FORTRAN90 unterstützen die Programmierung von Vektor Systemen. HPF (High Performance FORTRAN) , eine auf FORTRAN90 basierende Version von FORTRAN wurde eigens für die Parallelverarbeitung entwickelt. Obwohl SIMD-Architekturen (Supercomputer wie CRAY Y, NEC SX2, CM-2, etc) große Erfolge verzeichnen konnten, stellt die Ausführung nur genau eines Befehlsstromes während einer Zeitscheibe eine zu große Einschränkung dar. Eigentliche Parallelität wird dadurch nicht erreicht. MIMD Rechner MIMD-Rechner sind die eigentlichen Rechnertypen zur Parallelverarbeitung. Bei ihnen können verschiedene Schritte eines Programms (threads) gleichzeitig ablaufen und dabei natürlich auch unterschiedliche Daten zugreifen. Den Spezialfall dieser Rechnertypen bildet der bereits besprochene SIMD-Rechner. Sind sehr viele Prozessoren in einem System enthalten, so wird der Modus SPMD (single program multiple data) verwendet, da der Programmierer sicherlich nicht sehr viele, für jeden Prozessor angepaßte Programme schreiben wird. Er schreibt 1 Programm, welches auf allen Prozessoren gleichzeitig abläuft, aber während des Ablaufes sich in den einzelnen Prozessoren durchaus in verschiedenen status befinden kann. Es können also von jedem Knoten verschiedene Programmteile bearbeitet werden. 159 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ MIMD-Architekturen verfügen im Gegensatz zu SIMD Architekturen über keine zentrale Steuereinheit. Die verschiedenen Verarbeitungseinheiten können verschiedene Programmsequenzen autonom bearbeiten; sie verfügen jeweils über einen eigenen Programmzähler. Man spricht hierbei auch von lokaler Autonomie. In diesen Fällen greift man gerne auf Standardprozessoren zurück (of-the-shelf processors) , die meist kostengünstig zu erhalten sind. Zudem erlauben sie meist den kostengünstigen Einsatz sequentieller Softwarepakete für die Entwicklung oder die Portierung von Anwendungen auf den SIMD-Parallelrechner. Der Transputer bildet jedoch hierzu bereits eine Ausnahme: er bietet auf demselben Chip den Prozessor und auch bereits eine Kommunikationseinheit. 160 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Vektorrechner Instruktions Puffer InstruktionsHol-Einheit Skalareinheit Instruktionsausgabe Skalarkontrolleinheit Skalar Registe r SkalarLade/speichereinheit Hauptspeicher Skalar verarbeitungs einheit Vektoreinheit Vektorkontrolleinheit VektorRegister Vektorlade/speicherEinheit Architektur eines Vektorrechners VektorVerarbeitungs- Pipeline Vektor- VerarbeitungsPipeline datei: arch.doc 161 Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ SIMD Rechner 162 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Instruktion SkalarKontroleinheit SkalarRegister Speicher Programmspeicher Maske Maskiereinheit SkalarVerarbeitun gseinheit VNKontrolleinheit InstruktionsHoleeinheit PE Instruktionsausgabe Instruktionsnetzwerk PE PE Verbindungsnetzwerk Maskiereinheit Architektur des Feldrechners PE Datenpfad Instruktionspfad datei: arch.doc 163 Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ SIMD Maschinen haben statische Netzwerke. Der Datenaustausch wird durch ein zentrales Steuerwerk gesteuert, das Verbindungsnetz arbeitet meist synchron. Beim MIMD Rechner gibt es zwei Verbindungsstrukturen, die von der Organisation des Adreßraums des Rechners abhängen: manche Systeme verwenden lokale Adreßräume (hier kann ein Knoten nur auf den Speicher eines benachbarten Knotens direkt zugreifen. Andere Systeme benutzen einen globalen Adreßraum, so daß jeder Knoten auf den gesamten Adreßraum zugreifen kann. Um diese verschiedenen Prinzipien zu realisieren, werden unterschiedliche Kommunikationsmechanismen angewandt. Im untenstehenden Bild ist ein MIMD-Rechner mit seinen wesentlichen Komponenten dargestellt. Die Rechnerknoten, bestehend aus dem Rechnerkern R, einem Speicher M und dem Kommunikationsinterface C sind über ein Verbindungsnetz V miteinander verbunden. Je nachdem, wie der einzelne Knoten aufgebaut ist, erhält man Systeme mit verschiedenen Programmiermodellen. Der erste Typ kann auf gemeinsame Informationen nur dann zugreifen, wenn die betreffenden Daten zuvor durch Nachrichten ausgetauscht worden sind. Man spricht hierbei auch von message passing systems. Ist das Kommunikationsinterface jedoch in der Lage, durch direkten Datenzugriff (direct memory access) Daten zu holen oder abzuspeichern, kann der Durchsatz (die Effizienz und damit auch die Leistung) erhöht werden. Der Datenfluß ergibt sich dann also zu M C V C M. Eine Alternative besteht darin, daß über eine Programmschleife Daten aus dem Speicher geholt werden, dem Kommunikationsinterface übergeben werden, die Empfängerseite ihrerseits Daten aus dem Kommunikationsinterface ab und legt sie im Speicher ab. Es gilt also in diesem Fall: M R C V C R M. Der Rechnerkern wird also bei diesem Prinzip einmal zum Aufsetzen der Nachricht auf der Sendeseite und zum andern zum Verarbeiten der Unterbrechungen auf der Empfängerseite benötigt. Die zweite Rechnerart kann auf jede Speicherzelle des Gesamtsystems wegen des globalen Adreßraums lesend oder schreibend zugreifen. Man nennt sie auch Systeme mit virtuellem gemeinsamem Speicher (VGS-Systeme). Hierbei geht jeder Speicherzugriff an den lokalen Speicher , der alle Anforderungen insofern bedient, als er wirklich lokale Zugriffe selbst behandelt und diejenigen Anforderungen auf daten in entfernteren Speichern entsprechend weiterleitet. Wir stellen also fest, daß die Zugriffe auf entferntere Speicher mehr Aufwand und damit auch mehr Zeitbedarf bedeutet, als ein lokaler Zugriff. Man nennt diese Zugriffsart denn auch „non uniform memory access“ (NUMA). Beispiele für diesen Rechnertyp sind die KSR-2, die CRAY T3D und der MANNA Rechner der GMD. Die andere Rechner-Kategorie die „uniform memory access“ (UMA) kann man sich die Rechnerkerne alle auf einer Seite des Verbindungsnetzwerkes denken und die Speicher auf der anderen. Das Verbindungsnetzwerk ist dabei als sogenannter „Kreuzschienenverteiler“ (crossbar) ausgebildet. 164 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ M Allgemeine MIMD - Struktur R C Verbindungsnetzwerk Verbindungsnetzwerk C C R R M M 165 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Verbindungsnetzwerke (VN): (siehe auch Waldschmidt: Parallelrechner, Teubner Verlag) In den vorangegangenen Kapiteln haben wir Verbindungsnetzwerke, soweit sie eine Rolle spielten, als „black box“ betrachtet. Wenn wir aber näher hinschauen, so stellen wir fest, daß gerade die verbindenden Elemente zwischen Prozessoren, die miteinander kommunizieren sollen, wesentlichen Einfluß auf die Gesamtleistung haben. Deshalb wollen wir diese Hardwareressourcen ein wenig näher betrachten. Verbindungsnetzwerke dienen zum Transport von Steuerbefehlen und Daten zwischen Prozessoren als auch innerhalb der Module einzelner Prozessoren. Innerhalb eines SIMD Rechners stellen solche Verbindungsnetzwerke die Kopplung zwischen Speicher und Prozessor oder z.B. die Konfiguration von Pipelines dar. Bei MIMD Rechnern dienen die Verbindungsnetzwerke zur Kommunikation unter den Prozessen zwischen den Prozessoren. Eine solche Kommunikation kann dabei über einen gemeinsamen Speicher (shared memory) geführt werden oder kann auch nur über ein Verbindungsnetzwerk (message passing) ablaufen. Verbindungsarten: Bei den Verbindungsarten unterscheiden wir zwischen Leitungsvermittlung und Paketvermittlung. Bei der Leitungsvermittlung wird eine physikalische Verbindung (Leitung) für die gesamte Dauer der Datenübertragung zwischen den Teilnehmern hergestellt. Sie eignet sich im besonderen zur schnellen Übertragung vieler Nachrichten zwischen denselben Teilnehmern. Der Nachteil liegt in der Blockierung der benutzten Verbindungen und Schaltstellen für die gesamte Zeit der bestehenden Verbindung. Bei der Paketvermittlung wird dagegen ein möglichst großer Datenblock (Paket) an das Verbindungswerk abgegeben und nicht erst eine physikalische Verbindung aufgebaut. Dieses Verbindungsnetzwerk transportiert das Paket über Zwischenstationen mit Hilfe der Adreßinformation (routing) zu dem Zielteilnehmer. Die Leitungen können damit von mehreren Datenpaketen mit unterschiedlichen Zielen benutzt werden. Bei der Paketvermittlung unterschiedliche man zwei wesentliche Übertragungsstrategien, die „store-and-forward“ Strategie und die „worm-hole“ Strategie. Bei der store-and-forward werden die Pakete in jeder Vermittlungsstation vollständig zwischengespeichert. Die Adreßinformation wird interpretiert und, wenn die erforderliche Leitung zur Verfügung steht, das anstehende Paket zur nächsten Vermittlungsstation weitergereicht. Diese Art der Vermittlung ist völlig dezentral organisiert. Bei der worm-hole Strategie wird das Paket vom Sender in das Vermittlungsnetzwerk gegeben, welches dann einen Weg – wie ein Wurm – durch die Vermittlungsstationen sucht. In den Vermittlungsstellen selbst ist nur ein kleiner Speicher vorhanden, der gerade mal den Kopf (head) der anstehenden Nachricht aufnehmen kann und interpretieren kann. Der Rest der Nachricht liegt dann in den zuvor benutzten Vermittlungsstellen und wird durch die automatische Flußkontrollle beim Weiterschalten des Kopfes „hinterhergezogen“. Am Ende des Pakets befindet sich eine „End“-information, die den Weg für andere Pakete freigibt. Die Vorteile dieser Strategie liegen also in der geringen Speicherkapazität in den 166 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Vermittlungsstellen und dem schnellen Weitertransport (Pipelining) durch das Netzwerk. 167 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Verbindungsaufbau: Die Steuerung des Verbindungsaufbaus ist nur bei „dynamischen“, also bei Verbindungsnetzwerken, die konfigurierbar sind , zu unterscheiden. Erfolgt die Einstellung des momentanen Verbindungsweges in jedem Schalterelement selbst, so spricht man von verteilter Steuerung. Gibt es hingegen eine konzentrierte Hardwareeinrichtung für die Einstellung, so handelt es sich um eine zentrale Steuerung. Arbeitsweise: Hinsichtlich der Arbeitsweise unterscheidet man die synchrone und die asynchrone Betriebsart. In gewisser Weise kann man dies mit den synchronen und asynchronen Schaltnetzen vergleichen, die zu Anfang dieses Kurses eingeführt wurden. Im synchronen Mode wird das Verbindungsnetzwerk zu bestimmten Zeiten von allen Teilnehmern gleichzeitig zum Datenaustausch benutzt, während im asynchronen Fall jeder Teilnehmer seinen individuellen Verbindungsaufbauwunsch an das Verbindungsnetzwerk absetzen kann. Topologie: Die Topologie, d.h. die räumliche Anordnung des Verbindungsnetzwerkes, spielt eine herausragende Rolle; sie bestimmt die Eigenschaften wie z.B. die Skalierbarkeit eines Parallelrechners, wesentlich mit. Bei der Topologie unterscheidet man reguläre und irreguläre Strukturen. Bei Parallelrechnern werden mit wenigen Ausnahmen immer reguläre Strukturen verwendet. Sie haben den Vorteil, daß die Prozessoren und Prozesse in regulären Strukturen so angeordnet sind, daß sie den Problemstellungen angepaßt sind. Je nach Anwendung unterscheidet man hier statische und dynamische Verbindungsnetzwerke. Statische Verbindungsnetzwerke sind feste Punkt-zuPunkt-Verbindungen zwischen den Prozessoren. Dynamische Verbindungsnetzwerke enthalten demgegenüber Schaltelemente, die durch Konfigurationsinformation in eine bestimmte Leitungsanordnung gebracht (geschaltet) werden können. Ein weiteres Unterscheidungsmerkmal bildet die Anzahl der Stufen, die die Daten durchlaufen müssen. Statische Verbindungsnetzwerke : Massive Parallelrechner benutzen meist statische Verbindungsnetzwerke. Ihre Verbindungsstruktur ist fest geschaltet und besteht aus Punkt-zu-PunktVerbindungen zwischen den einzelnen Verarbeitungsknoten. Stellt man die 168 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Prozessoren als Knoten und die Verbindungen als Kanten dar, so lassen sich die statischen Verbindungsnetzwerke auch als Graphen darstellen. Von diesen VN wird häufig das Gitter (grid, nearest neighbour mesh) zur Lösung von zweidimensionalen Problemen eingesetzt. Der Vorteil dieses VN liegt darin, daß jeder Prozessor 4 feste Verbindungskanäle bei beliebiger Größe des Netzes hat. (Transputer-Systeme) Um die Kommunikation an den „Rändern“ des Netzes nicht abbrechen zu lassen, kann das Gitter zu einem 2D-Torus ergänzt werden. (siehe auch Karnaugh-Veitch Tabellen, bei denen die Felder an den Rändern von entgegengesetzten Seiten miteinander verbunden werden können und so zur Effektivitätssteigerung des Verfahrens beitragen). Das hexagonale Gitter wird häufig bei sogenannten systolischen Algorithmen verwendet; ist als Raumdarstellung als Graph eines 3D-Torus darstellbar. Da neben den 2-dimensionalen auch viele 3-dimensionale Problemstellungen existieren (Multimedia, Virtual Reality), kann hierbei die Anordnung der Verbindungen zwischen den Verarbeiutungsknoten als 3D-Gitter erfolgen. Die Klasse der sogenannten Mehrgitter-Algorithmen (Strömungsmechaniken, Prozeßsimulation) läßt sich auf solche Architekturen besonders gut abbilden. Hypercube-Topologien finden nicht so häufige Verwendung wie die oben beschriebenen Gittertypen. Sei die Dimension n des Hypercubes gegeben, so enthält er 2n(n-1) Verbindungen und n Verbindungen pro Knoten. Eine wichtige Eigenschaft hierbei ist, daß die maximale Verbindungslänge zwischen 2 beliebigen Knoten nur n Stufen beträgt. Damit ist er dem Gitter überlegen, aber durch die von n abhängige Zahl der Verbindungskanäle schlecht skalierbar. Durch die geringe Anzahl der Verbindungsschritte (hops) fand er zu Beginn der MIMD-Parallelrechner große Verbreitung. Die Topologie der vollständigen Vernetzung (siehe auch Neuronale Netzwerke) verbindet alle Knoten mit je 1 Verbindungskanal (link) untereinander und stellt damit die aufwendigste Verbindungsstruktur dar. Der Aufwand von (N-1) Kommunikationskanälen pro Knoten und die hohe Anzahl von Verbindungen ist aber ist aber – auch schon bei kleinen Netzwerken – z.Z. kaum vertretbar. (Obwohl sie nur 1 Verbindungsschritt (hop) benötigen und keine Ressourcenkonflikte kennen) Die folgende Tabelle beschreibt die Verbindungseigenschaften statischer Verbindungsnetzwerke: Topologie Ring Baum 2D-Torus 3D-Torus Hexagon. Gitter Hypercube Anzahl der Verbindungskanäle pro Knoten 2 3 4 6 6 log2N 169 Maximale Entfernung (diameter) N 2*(log2N-1) N2 N3 N3 log2N Gesamtzahl der Verbindungskanäle N-1 N-1 2*N 3*N 3*N N log2 (N/2) datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Vollst. Vernetzung N-1 1 N* (N-1)/2 Skizze: Topologien statischer VN 170 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Dynamische Verbindungsnetzwerke: Wie bereits erwähnt, enthalten VN konfigurierbare Schaltelemente und unterscheiden sich in der Stufenanzahl in ein- oder mehrstufige. Zu den einstufigen zählen das „Shuffle“-Netzwerk, der Crossbar und der Bus. In untenstehender Abbildung sind diese drei Prinzipien dargestellt: Skizze!!!! Der Crossbar (auch Kreuzschienenverteiler genannt) ist das universellste VN, denn es gestattet, in einer Stufe jeweils beliebige Paare von Ein- und Ausgängen miteinander zu verbinden. Es besitzt auch die Möglichkeit, an alle Empfänger gleichzeitig eine Nachricht zu senden (broadcast). Wie beim Bus, den wir bereits früher besprochen haben, müssen auch hier die Regeln beim Senden eingehalten werden: Auf eine Leitung darf jeweils immer nur genau ein Sender seine Information leiten; ansonsten wird das Signal auf dem Bus verfälscht. Dieser mögliche Konfliktfall wird durch einen sogenannten „Arbiter“, der die Zuteilungsaufgabe zu erledigen hat, geleistet. Die Komplexität einer solchen Schaltung ist recht hoch, insbesondere dann, wenn gleichzeitig 8, 16, 32 oder gar 64 bit gleichzeitig geschaltet werden müssen. Mit der Verfügbarkeit hochkomplexer integrierter Schaltkreise stellt dies jedoch kein Problem mehr dar. Bei Parallelrechnern ergeben sich für das Crossbar-Prinzip zwei Anwendungsbereiche, die leicht unterschiedliche Implementierungen erfordern. Bei der Verwendung als VN zwischen Prozessoren und Speichern in einem System mit physikalisch gemeinsamem Speicher wird eine große Wortbreite der Verbindungen mit möglichst geringer Durchlaufzeit benötigt. Die Anzahl der Worte pro vermitteltem Paket ist klein und beträgt selten mehr als eine Cache-Zeile.( typischerweise 4 oder 8 Worte). Die Auswahl der Ausgangskanäle erfolgt über die Adreßbits der Speicheradresse (Selektion der Speichermoduln). Durch Hinzufügen von Eingangs- und Ausgangsregistern können die Schaltfunktionen des Crossbars in die Pipeline des Speicherzugriffs integriert werden, was hohen Durchsatz bedeutet. Durch die geringe Anzahl von Steuerleitungen ist auch eine Aufteilung der benötigten Wortbreite (slicing) auf mehrere parallel und synchron arbeitende integrierte Bausteine (VLSI) möglich. Solche Crossbar-Bausteine können auch zur Konfiguration von Verbindungen zwischen Verarbeitungseinheiten dienen. Bei der Anwendung des Crossbars als VN zur Kommunikation in einem Parallelrechner wird eine hohe Anzahl von Ein-/Ausgangskanälen mit genügend großer Bandbreite benötigt, um damit eine Verbindung zwischen möglichst vielen Knoten mit nur einem Verbindungsschritt (hop) zu ermöglichen. Bei kleinen zu überbrückenden Entfernungen innerhalb eines „Cabinet“ (das ist i.a. der Rahmen, das „Gerippe“ eines Rechners) kann die Wortbreite 8 bit oder breiter sein, da hier 171 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ die Verbindungskanäle in die Rückwandverdrahtung (backplane) integriert werden können. Bei längeren Verbindungen ist die bitserielle Übertragung und Vermittlung (z.B. 1 bit, 32x32 links) mit höheren Taktraten vorteilhafter, weil dadurch die Verbindungen durch Kabel einfacher sind. Wünschenswert sind für die größeren datenpakete des Botschaftenaustauschs pro Kanal Pufferregister (FIFO) und eine Flußkontrolle, um bei blockiertem Ausgangskanal einen Paketverlust zu vermeiden. Die vermittlung wird durch Interpretation des Nachrichtenkopfes vorgenommen, der den Nutzdaten der Nachricht vorangestellt ist. Zum Aufbau größerer VN sind verschiedene Anordnungen von mehreren Crossbars notwendig und möglich. Eines der einfachsten und sehr verbreiteten VN ist der BUS. Der Bus ist ein Crossbar in der Konfiguration m x 1, und stellt damit eine Spalte dieses VN dar. Er ist kostengünstig realisierbar und seine Schalterfunktionen sind physikalisch auf die Busmoduln verteilt. Seine wesentliche Begrenzung ist die Schaltgeschwindigkeit und die Anzahl der Busteilnehmer. Die Schaltgeschwindigkeit hängt dabei von der Länge der Busleitungen, der Ankoppelkapazität und den verwendeten Signalpegeln ab. Moderne Bussysteme, wie z.B. der VME-Bus, der PCI-Bus oder der Future-Bus+ erlauben Datenraten von 120 Mbyte / s bis zu 1,2, Gbyte/s bei Bitbreiten von 32 – 256 bit. Verwendung finden sie hauptsächlich bei kleineren Parallelrechensystemen, da ihre Bandbreite nicht mit der Anzahl der Busteilnehmer steigt. Für die Ein/Ausgabe und den Anschluß von Peripheriegeräten finden Bussysteme auch in größeren Parallelrechenanlagen Verwendung. Das „Shuffle“ Netzwerk läßt sich ebenfals aus der Crossbar-Struktur herleiten. Es ist ein 2 x 2 Crossbar mit eingeschränkter Steuerfunktion. Bei Q1 unwahr erfolgt die Verbindung von I1 nach O1 und von I2 nach O2. Ist Q1 wahr, so vertauscht sich die Zuordnung der Ausgänge. Einige Realisierungen erweitern diese einfache Ansteuerung durch eine Duplizierungsfunktion von je einem Eingang auf beide Ausgänge. Diese Schaltfunktionen werden von einem zusätzlichen Kontrolleingang gesteuert und als „broadcast“ bezeichnet. Das „shuffle“ VN ist durch seine eingeschränkte 2 x 2 Grundstruktur nicht skalierbar, wird aber als Element für den Aufbau von mehrstufigen VN benutzt. Mehrstufige sind aus mehreren Lagen der Grundschaltung des „shuffle“ Netzwerkes aufgebaut. Skizze : Schaltfunktionen des shuffle- Netzwerkes 172 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Folgende Topologien gehören zu der Klasse der mehrstufigen VN: Banyan, Baseline, Cube, Delta, Flip, Indirect cube und Omega. Die folgende Skizze zeigt ein mehrstufiges VN (Banyan): 173 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Abb. Schaltfunktionen des shuffle Netzwerkes Als Schaltelemente werden „shuffle“ V eingesetzt. Unterschiede gibt es nur in der Art der Leitungsführung zwischen den Schaltelementen. Sie benötigen bei N Ein- und Ausgängen zu ihrer Realisierung N/2(log2N)-1 „shuffle“ Elemente und bestehen aus (log2N) –1 Ebenen. Die aufgezählten VN sind nicht alle blockierungsfrei. Bereits ei einziger Verbindungsweg für eine Anforderung zwischen dem Eingang und einem Ausgang, wie in den obigen Abbildungen schattiert dargestellt, läßt viele andere Anforderungen nicht mehr zu. Um das Blockierungsverhalten zu verbessern, kann man diese Netzwerke mit zusätzliche Ebenen ausstatten, damit im Falle von Blockierungen die Verbindungswege umgeordnet werden können. Das Benes Netzwerk ist eine Beispiel für eine solche Anordnung. Abb. Benes Netzwerk Das Benes Netzwerk gestattet die Schaltung aller permutationen zwischen Ein- und Ausgängen. Wie in der Abb zu erkennen ist, besteht es aus der Hintereinanderschaltung von zwei Banyan-VN und besitzt 2(log2N)-1 Ebenen. Die Nachteile der Benes Netzwerke – die Möglichkeit von Blockierungen - werden durch die Verwendung von Crossbar anstelle der shuffle Elemente vermieden. Die als CLOS-Netzwerke bezeichneten VN kombinieren die Vorteile des Crossbars mit der annehmbaren Komplexität der mehrstufigen VN. Sie bestehen aus mehreren Stufen (meist drei), und die Crossbars jeder Stufe haben eine unterschiedliche Konfiguration. In der folgenden Abbildung ist ein Beispiel eines CLOS-VN mit den Parametern m, n und r dargestellt. Wählt man aus Gründen einer einfachen Realisierung m = n = r Und nimmt zudem ein 16 x 16 Crossbar als Grundelement an, so verbindet ein solches Netzwerk 256 Eingänge mit ebenso vielen Ausgängen. Abb. CLOS – Verbindungsnetzwerk 174 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Eine weitere Klasse von VN bilden die hierarchischen VN. Darunter wollen wir die einfache Verwendung des gleichen VN oder unterschiedlicher VN zum Aufbau von VN mit höherer Verbindungskomplexität verstehen. Da hierbei auch die Vermischung von statischen und dynamischen VN möglich ist, ergibt sich eine Vielzahl von unterschiedliche Strukturen. Einige Beispiele von hierarchischen VN sollen die Vielfältigkeit ihrer Realisierungen veranschaulichen. Ersetzt man die Verbindungsknoten in einem statischen VN wie dem binären Baum durch Schaltelemente und erhöht auf jeder Ebene die Anzahl der Verbindungen, so erhält man den sogenannten „Leisersonschen Baum“ und den „fat tree“ wie in der untenstehenden Abb. Gezeigt. Abb. „fat tree mit Crossbar Schaltern Diese Struktur mit dem fat tree vermeidet durch ein höhere Anzahl von leitungen zur Wurtzel hin den beim binären Baum auftretenden Engpaß der Kommunikationsbandbreite in der Wurzel. Als Schaltelemente in den Verbindungsknoten kommen Crossbars mit unterschiedlichen Konfigurationen zur Verwendung. Die rekursive Verwendung von gleichen Crossbarkonfigurationen ergibt Hierarchien von Crossbars, die zu den unterschiedlichsten sehr kompakten Realisierungen von VN führen. Bei der Crossbarhierarchie füht die Verbindung von zwei Knoten über maximal 2h+1 Vermittlungsstufen, wenn h die Höhe der Hierarchie ist. Da ein solches hierarchisches Crossbar-Netzwerk berteits bei einer geringen Höhe h viele Knotenrechner mit sehr wenigen Verbindungsschritten verbinden kann, wird es in Zukunft in vielen Parallelrechnern zu finden sein. 175 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ (Hardware-) Struktur .......................11 2D-Torus ........................................168 absoluten direkten Adressierung120 Ada .....................................................4 Additionen .......................................13 Adreßmodusbits ...........................119 Adreßregisterindirekte .................120 Algebra ..............................................4 Algorithmen ......................................9 ALU ..................................................14 Amdahlsche Gesetz .....................152 Anfangszustand ..............................53 Antwortzeit ....................................155 application layer ...........................146 Arbeitsspeicher ................................6 Architekturprinzipien......................12 Arpa ...................................................7 Assoziativspeicher .......................134 Ausgabealphabet ............................51 Ausgabefunktion ............................51 Ausgabesymbol ..............................51 Automaten .......................................51 Babbage ............................................4 Basic ..................................................7 Bedienzeit......................................155 Befehlsausführungszeit ...............150 befehlszählerrelativen Adressierung ....................................................122 Benutzerschnittstelle .....................12 Berechnung.......................................9 Beschleunigung............................153 Betriebssystem ...............................10 binär ...................................................4 bistabile ...........................................43 bit .......................................................5 Bitketten ............................................9 black box .......................................165 Boole .................................................4 Boolschen Algebra ...........................4 bubble ............................................103 burst mode ....................................136 Bus-Organisation .........................140 Byron .................................................4 CACHE ...........................................125 Cachezugriffe ............................... 101 Chip ................................................... 7 CM-2 .............................................. 158 Colossus .......................................... 6 CRAY............................................. 158 CRC ............................................... 139 CSMA/CD ...................................... 145 cycle stealing ............................... 135 daisy chaining .............................. 140 Darpa ................................................ 7 data link layer ............................... 148 Daten ................................................. 9 Datenblock ................................... 165 datenregisterdirekten .................. 119 Datenstruktur ................................... 9 Datenverarbeitungsmaschine ........ 4 Dekrementieren ........................... 121 Demodulation ............................... 139 Descartes ......................................... 4 deterministisches Verhalten ......... 51 Dezimalsystem ................................. 4 D-Flip-Flop ...................................... 47 digitale .............................................. 5 direct mapped cache ................... 135 Direct Memory Access ................ 135 Direkte Kopplung ......................... 138 dirty bit ......................................... 133 DMA .............................................. 134 Duplex ........................................... 147 Durchsatz ..................................... 155 Dynamische Verbindungsnetzwerke .................................................... 170 Eckert................................................ 6 Edsac ................................................ 6 Eingabealphabet ............................ 51 Eingabeband .................................. 52 Eingabesymbol .............................. 51 Einprozessorsysteme .................... 12 Eniac ................................................. 6 Enigma .............................................. 6 explicit addressing ...................... 136 Feldrechner ............................ 12, 158 Firmware ......................................... 11 Flipflop ............................................ 45 176 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ FLOPS ...........................................149 flow-through..................................136 fly-by transfer................................136 Flynn ................................................12 formalen Logik ..................................4 Forwarding ..............................97, 102 Frequenzteiler .................................48 garbage collection ........................126 Gates .................................................7 gerichteter Graph ...........................54 Gesamtbeschleunigung ...............154 Gibson-Mix ....................................150 grid .................................................168 Hardware ...........................................6 Hardware-Betriebsmittel ................11 Hauptspeicheradressen ...............120 Hazards ...........................................45 Hennessy / Patterson ...................152 hops ...............................................168 Horner ............................................150 Hypercube .....................................168 implicit addressing .......................136 indirekte Adressierung.................114 indizierte Adressierung ................115 industriellen Revolution ...................4 Informationsstruktur ......................11 Infrarottechnik ..............................139 Inkrementieren ..............................120 instruction scheduling. ................104 Intel ....................................................7 INTERNET......................................146 Interpretationssystem ....................10 Interrupt ...........................................98 Istzustände ....................................156 JK - Master – Slave Flipflop ...........48 Kacheln .........................................127 Kanalkopplung..............................138 kapazitiv ........................................156 Kapselung .....................................156 Kippstufe .........................................44 Kombinationslogik ...........................4 Kommunikation ................................9 Kommunikations- und Kooperationsregeln .....................11 Kommunikationstechnik ..............139 Komplementbildung .......................14 Komplexität .....................................14 Komplexitätstheorie .................... 151 Konkatenation .............................. 128 Kontrollanweisungen .................... 10 Kontrollstruktur ............................. 11 Kopplung über Bussysteme ....... 138 Kreuzschienenverteiler ............... 163 Künstlichen Intelligenz.................... 7 Latenzzeit ..................................... 103 Leibniz .............................................. 4 Leitungsvermittlung .................... 165 Leitwerk .......................................... 13 Lichtwellenleiter .......................... 139 link ................................................ 168 Listener ......................................... 140 load delay slot)............................. 105 Lochkarten ....................................... 4 Logik ................................................. 4 logische Verknüpfung ..................... 5 LRU ............................................... 128 MANNA.......................................... 163 Mark I ................................................ 6 Maschinensprache ........................ 10 Master ........................................... 140 Master - Slave Flip-Flop ................ 48 Matrixinversionen ........................ 150 Mauchley .......................................... 6 Maximumbestimmung ................. 150 Mehrgitter-Algorithmen ............... 168 Mehrprozessorsysteme ............... 149 message passing systems. ........ 163 Mikroprogramm ............................. 11 Mikroprogrammsprache ................ 10 Mikroprozessor ................................ 7 MIMD ............................................... 12 MIPS .............................................. 149 MISD................................................ 12 miss .............................................. 133 Moduln .............................................. 9 Monitoring .................................... 156 Multimedia .................................... 168 Multiplikationen ............................. 13 Multiprozessorsysteme ................. 12 nearest neighbour mesh ............. 168 Nebenläufigkeiten ........................ 150 NEC ............................................... 158 network layer ............................... 148 Netzwerke ..................................... 138 177 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Neuronale Netzwerke ...................168 NUMA .............................................163 of-the-shelf processors ................159 Operandenadresse .......................120 operating system ............................10 Operationsprinzip ...........................11 Operatoren ........................................5 Organisation .....................................9 Overhead .......................................154 page fault.......................................128 Paging ...........................................127 Paketvermittlung ..........................165 Parallelität .....................................158 Parity..............................................139 Pascal ................................................4 peak performance.........................149 physical layer ................................148 pipeline flushing ...........................109 pipeline scheduling ......................104 Pipelinerechner...............................12 pipeline-stall..................................103 poll-count ......................................141 Polynom ........................................150 Portierung .....................................159 presentation layer .........................147 processing elements ....................158 Program Counter ..........................117 Programme........................................5 Programmierung...............................4 Prozessor ........................................10 Punkt-zu-Punkt-Verbindungen ....167 random access .............................140 Random Access Memory .............125 RAR ................................................103 RAW ...............................................102 Rechenautomaten ............................5 Rechenmaschine ..............................4 Rechensystem ............................4, 10 Rechnerarchitektur.....................9, 11 Rechnerkernzuteilung ..................125 Refresh ..........................................136 Registerindexbits .........................119 Relais .................................................5 Relation ...........................................54 Röhrenrechner ..................................6 Routing ..........................................147 RS-Flip-Flop ....................................46 Rücksprungadressen .................. 117 Schichtenmodell ............................ 10 Schiebeoperationen ................ 14, 49 Schieberegister .............................. 50 serielle .............................................. 7 session layer ................................ 147 Short-circuiting .............................. 97 Sicherheit ..................................... 140 Signaldurchlaufszeit...................... 43 SIMD................................................ 12 SIMD-Architekturen ..................... 158 Simplex ......................................... 147 SISD ................................................ 12 Skalierbarkeit ............................... 167 Software ........................................... 6 Speicherelemente .......................... 45 Speicherkopplung ....................... 138 Speicherprogrammierung ............... 6 SPMD ............................................ 158 Stackpointer ................................. 117 Statusregister .............................. 117 Steuer Hazards ............................ 106 Steuerwerk ....................................... 6 store-and-forward ........................ 165 Struktur ............................................. 9 supervisor .................................... 117 Synthese ........................................... 9 systolische Algorithmen ............. 168 tag ................................................. 135 Taktung ........................................... 45 Talker ............................................ 140 TCP/IP ........................................... 145 threads .......................................... 158 Topologie ..................................... 167 Trace-Modus ................................ 117 Transformationen ............................ 9 Transitionsfunktion ....................... 52 transport layer.............................. 147 Transputer .................................... 159 Transputer-Systeme .................... 168 Tuning ........................................... 156 Turing ............................................... 6 Übersetzer ...................................... 10 Ultra .................................................. 6 UMA............................................... 163 Univac ............................................... 7 unmittelbaren Adressierung ....... 120 178 datei: arch.doc Rechnerarchitektur und -organisation Allgemeines nach COY, ERHARD, GILOI, HENNESSY/PATTERSON, KLAR, PAUL _________________________________________________________________________________________ _ Vakuumröhren ..................................5 Validierung ....................................156 Vektorrechner ...............................158 Verbindungsarten .........................165 Verbindungsaufbau ......................167 Verbindungsnetzwerke ................165 Verbindungsnetzwerkes ..............163 Vergleicher ....................................106 verteilter Steuerung ......................167 Verweilzeit .....................................155 Verzweige-Hazard .........................106 Virtual Reality................................168 vollständige Vernetzung ..............168 Von - Neumann .................................6 Wählverfahren .............................. 140 WAR .............................................. 102 Wartezeit ....................................... 155 Wartezyklen .................................. 104 WAW ............................................. 102 worm-hole .................................... 165 Wurzelziehen ................................ 150 zentrale Steuerung. ..................... 167 Zuse .................................................. 5 Zustände ......................................... 51 Zuständen ...................................... 51 Zustandsgraph ............................... 54 Zustandsüberführungsfunktion ... 51 zweiwertig ........................................ 4 179 datei: arch.doc