13 Teil 1 (Kapitel 1 Kapitel 4)

Rechnerstrukturen: VO, WS 2012/13 Teil 1 (Kapitel 1 – Kapitel 4) Diese Ausarbeitung habe ich mithilfe der Vorlesungsfolien sowie der deutschen Fass...
11 downloads 4 Views 2MB Size
Rechnerstrukturen: VO, WS 2012/13

Teil 1

(Kapitel 1 – Kapitel 4)

Diese Ausarbeitung habe ich mithilfe der Vorlesungsfolien sowie der deutschen Fassung des Buches „Computer Organization And Design“ von David A. Patterson und John L. Hennessy gemacht. Sie ist zwar sehr umfangreich, sollte aber meiner Meinung nach alle wichtigen Themen der Vorlesung behandeln. Trotzdem sind Fehler und Unvollständigkeiten möglich. Da ich die meisten Informationen aus dem Buch habe, bin ich aber zuversichtlich, dass das meiste stimmen sollte ;-) Allerdings habe ich nicht alles von den Folien ausgearbeitet. Vernachlässigt werden in dieser Ausarbeitung unter anderem •

Graphiken bzw. deren Erklärung (vgl. dazu besonders die Folien oder auch das Buch)



Rechenbeispiele (vgl. dazu besonders die Folien oder auch das Buch)



Kapitel 4 habe ich nicht vollständig ausgearbeitet (in diesem Kapitel befinden sich in den Folien auch einige Graphiken

dazu also auch Folien + Buch vergleichen)

Weitere Unvollständigkeiten sind möglich.

Ich habe mit dieser Ausarbeitung jedenfalls für die Prüfung bei Prof. Grünbacher gelernt und eine Zwei bekommen :-)

Autorin:

Michaela [email protected]

Quellen:

„Rechnerorganisation und Rechnerentwurf: Die Hardware/Software-Schnittstelle“ von David A. Patterson und John L. Hennessy Folien von Prof. Herbert Grünbacher

1

Chapter 1: Computer Abstractions and Technology Im Bereich der Computer-Technologie wurden bereits viele Fortschritte gemacht: •

Computer in Fahrzeugen o senken Schadstoffausstoß o sorgen mittel Motorsteuerung für einen kraftstoffarmen Betrieb o automatische Brems- und Stabilitätskontrollsysteme erhöhte Fahrsicherheit o automatisches Auslösen eines Airbags



Handys



Forschung am menschlichen Genom o die Kosten für eine solche Erforschung sind gesunken (Hunderte von Millionen Dollar), daher ist überhaupt möglich, es zu erforschen



World Wide Web



Suchmaschinen

Die Fortschritte in der Technologie haben großen Einfluss auf nahezu alle Bereiche unserer Gesellschaft.

Es werden drei verschiedene Klassen von Computer unterschieden: •

Desktop Computers (Arbeitsplatzrechner) o Wichtigster Vertreter dieser Klasse ist der Personal Computer (PC) o bietet Benutzern gute Leistungen zu akzeptablen Preisen (cost/performance tradeoff) o dient für gewöhnlich der Ausführung von Software von Drittanbietern



Server o müssen große Lasten bewältigen (entweder komplexe Anwendung oder Verarbeitung vieler kleiner Jobs) o basieren auf einem Netzwerk ( über ein Netzwerk wird zugegriffen) o häufig gleichzeitig von mehreren Benutzern verwendet o hohe Kapazität, Performance und Verlässlichkeit (reliability) o große Variationsbreite bezüglich Kosten und Funktionsfähigkeit (range from small servers to building sized) o Supercomputer: Computer der höchsten Leistungs- und Preisklasse; sind als Server konfiguriert und kosten in der Regel mehrere Millionen Euro; für anspruchsvolle Aufgaben aus dem technisch-wissenschaftlichen Bereich verwendet



Embedded Computers (processors, eingebettete Rechner) o finden sich in vielen Alltagsgeräten o sind normalerweise in ein System integriert, das als ein Gerät ausgeliefert wird o Benutzer merken oft nicht, dass sie einen Computer benutzen o strenge Leistungs-/Performance-/Kosten-Einschränkungen (power / performanc / cost = Kosten, Aufwand) Charakteristiken von Embedded Processors: -

größte Klasse von Rechnersystemen größte Bandbreite an Anwendungen und Leistungsfähigkeit 2

-

haben oft minimum performance requirements (Mindest-Leistungsanforderungen) haben oft strenge Limitierungen bei Kosten/Aufwand haben oft strenge Limitierungen bei Energieverbrauch haben oft eine geringe Fehlertoleranz

Um Performance zu verstehen, muss man die einzelnen Einflussfaktoren kennen, die dabei zusammenspielen: •

Der Algorithmus o dieser bestimmt die Anzahl der Operationen, die ausgeführt werden



Die Programmiersprache, der Compiler und die Architektur o diese bestimmen die Anzahl der Maschineninstruktionen, die pro Operation ausgeführt werden



Der Prozessor und das Speichersystem (memory system) o diese bestimmen, wie schnell Instruktionen ausgeführt werden



I/O System (inkludiert OS = Operation System) o dieses bestimmt, wie schnell I/O Operationen ausgeführt werden

Was verbirgt sich hinter einem Programm? •

Die Application Software o wird in high-level language geschrieben



Die System Software

Software, die allgemein nützliche Dienste bereit stellt o Compiler: übersetzt den high-level language Code in Maschinencode o Operation System: service code Das Betriebssystem ist die Schnittstelle zwischen einem Benutzerprogramm und der Hardware; es ist ein Programm mit Überwachungsfunktion verarbeitet Input und Output (handling) verwaltet Massen- und Hauptspeicher (Storage und Memory) plant tasks und sharing resources (scheduling) •

Die Hardware o dazu gehören Prozessor, Memory, I/O Controllers

3

Es gibt unterschiedliche Level von Programmcode: •

High-level language o nicht so abstrakt o für Programmierer/innen leichter zu erlernen (der natürlichen Sprache ähnlicher, erleichtert auch das Verstehen fremden Codes), daher mehr Produktivität! bessere Portabilität (Übertragbarkeit)



Assembly language o textuelle Repräsentation von Instruktionen



Hardware representation o in Binärzahlen (bits) o kodierte Instruktionen und Daten

Der Compiler übersetzt Anweisungen in einer höheren Programmiersprache in Anweisungen der Assemblersprache. Der Assembler wiederum ist ein Programm, das eine symbolische Form von Befehlen in eine binäre Form übersetzt. Die Assemblersprache ist dabei eine symbolische Darstellung von Maschinenbefehlen.

Die Komponenten eines Computers Alle Arten von Computern haben die gleichen Komponenten. Wichtige Komponenten für Input/Output sind dabei: • User Interface Devices o Display, Tastatur, Maus • Storage Devices o Hard disk, CD/DVD, flash • Network adapters o für die Kommunikation mit anderen Computern Die fünf klassischen Komponenten eines Computers umfassen die Ein- und Ausgabe, den Hauptspeicher, das Rechenwerk und das Steuer- oder Leitwerk, wobei die letzten zwei Werke zusammengefasst und als Prozessor bezeichnet werden.

4

Motherboard Eine Platine, auf der die wichtigsten Komponenten des Rechners miteinander verschaltet sind wie Prozessor, Speicher und Schnittstellen für zusätzliche Komponenten (z.B. Laufwerke oder Graphikkarten). Integrated Circuit (IC, Integrierte Schaltkreise) Auch als Chip bezeichnet. Eine Einheit mit bis zu vielen Millionen von Transistoren. Hauptspeicher (memory) Der Speicher, in dem sich Programme befinden, wenn sie ausgeführt werden. Daneben befinden sich im Hauptspeicher die Daten, die von diesen Programmen benötigt werden. Auch als Arbeitsspeicher bezeichnet. DRAM (Dynamic Random Access Memory) Hauptspeicher, der in Form eines Chips gebaut ist; er bietet wahlfreien Zugriff auf jeden Speicherplatz. CPU (Central Processing Unit) Auch als Prozessor bezeichnet. Der aktive Teil des Computers, der das Rechenwerk und das Leitwerk b zw. Steuerwerk enthält und Zahlen addiert, Zahlen vergleicht, Signale zum Aktivieren der Ein-/Ausgabegeräte sendet usw. 5

Datapath (Rechenwerk) Die Komponente des Prozessors, die arithmetische Operationen ausführt. Control (Leitwerk) Die Komponente des Prozessors, die den Datenpfad, den Hauptspeicher und die Ein/Ausgabegeräte entsprechend der Programmbefehle ansteuert.

Cache-Memory Kurz Cache genannt, ist ein kleiner, schneller Speicher, der als Puffer für einen langsamen, größeren Speicher dient. Auch: Small fast SRAM memory for immediate access to data. SRAM (Static Random Access Memory) Ebenfalls als Chip gebauter Hauptspeicher, aber schneller und weniger dicht als DRAM.

BIG PICTURE – Abstractions Sowohl die Hardware als auch die Software bestehen aus hierarchischen Ebenen, wobei die unteren Ebenen jeweils mehr Details enthalten als die oberen Ebenen. Dieses Prinzip der Abstraktion hilft Hardware- und Softwareentwicklern im Umgang mit komplexen Computersystemen. Eine wichtige Schnittstelle zwischen den Abstraktionsebenen stellt die Instruction Set Architecture (ISA = Befehlssatzarchitektur) dar. Hierbei handelt es sich um die Schnittstellte zwischen der Hardware und der Software auf Maschinenebene. Diese abstrakte Schnittstelle ermöglicht viele Implementierungen, die sich in den Kosten und der Leistung unterscheiden, aber die gleiche Software ausführen können.

6

Instruction Set Architecture (ISA) Auch als Architektur bezeichnet. Eine abstrakte Schnittstelle zwischen der Hardware und der untersten Softwareebene einer Maschine. (Instruction Set: Der Wortschatz mit den Befehlen, die eine bestimmte Architektur versteht.) Application Binary Interface (ABI) Der Benutzerteil des instruction sets (Befehlssatzes) und die Betriebssystemschnittstellen, die von Anwendungsprogrammierern verwendet werden. Definiert einen Standard für binäre Portierbarkeit zwischen Computern.

Wie werden Daten gespeichert? Es gibt flüchtige Speicher (volatile memories) und nichtflüchtige Speicher (non-volatile memories). Zu den flüchtigen Speichern zählt z.B. der Hauptspeicher (main memory): dort gehen alle Instruktionen und Daten verloren, wenn der Strom abgeschaltet wird. Bei nichtflüchtigen Speichern bleiben Daten jedoch auch nach abschalten des Stroms gespeichert. Zu den nichtflüchtigen Speichern zählen: - Magnetic disk ( ↑ 1 Terrabyte) - Flash memory ( ↑ 256 GB) - Optical disk (CDROM, DVD, Blue Ray) Primärspeicher Auch Hauptspeicher genannt. Flüchtiger Speicher von Programmen während der Ausführung. Sekundärspeicher Nichtflüchtiger Speicher, der zum Speichern von Programmen und Daten zwischen Ausführungsvorgängen verwendet wird. Festplatte (magnetic disk) Eine Form des nichtflüchtigen Sekundärspeichers, bestehend aus rotierenden Platten, die zum Speichern von Daten mit einem magnetisierbaren Material beschichtet sind. Flash Memory Ein nichtflüchtiger Halbleiterspeicher. Billiger und schneller als DRAM, aber teurer und schneller als Magnetplatten.

Netzwerke Über Netzwerke kann Kommunikation betrieben werden und Ressourcen geteilt werden. Dabei gibt es verschiedene Arten von Netzwerken. Local Area Network (LAN) Ein Netzwerk zum Übertragen von Daten innerhalb eines geographisch begrenzten Bereiches, in der Regel innerhalb eines Gebäudes; Stichwort: Ethernet.

7

Wide Area Network (WAN) Ein Netzwerk, das sich über Hunderte von Kilometern erstreckt oder einen ganzen Kontinent umspannen kann; Stichwort: Internet Wireless Networks WiFi, Bluetooth

Was besagt Moore’s Law? Die Anzahl an Transistoren, die auf einem einzigen Chip integriert werden können, wird sich ca. alle 2 Jahre verdoppeln.

Wie lässt sich Performance definieren?

Das Beispiel der Flugzeuge zeigt, dass man nicht eindeutig sagen kann, was gute Performance ist. Jedes dieser Flugzeuge hat seine Vorteile und seine Nachteile. Je nachdem, auf welche Aspekte man besonders Wert legt, hat dann das eine oder das andere eine bessere Performance. Es gilt also bei der Beurteilung von Performance, unterschiedliche Aspekte zu berückrichtigen. •

Response Time o Wie lange braucht die Ausführung eines Tasks?



Troughput o Totale Arbeit, die in einer bestimmten Zeiteinheit geleistet wird o Übersetzt: Durchsatz; wird auch als Bandbreite bezeichnet

8

Performance = 1 / Execution Time Wenn man Performance miteinander vergleichen möchte, kann man z.B. sagen: „X ist n-mal schneller als Y.“ Performancex / PerformanceY = Execution TimeY / Execution TimeX Elapsed Time (verstrichene Zeit) Totale Response Time, die alle Aspekte inkludiert: Processing, I/O, OS overhead, idle time CPU Time Die tatsächliche Zeit, die die CPU braucht, um einen bestimmte Aufgabe abzuwickeln. Die Zeit, die dabei für das Warten auf ein-/Ausgaben oder für die Ausführung anderer Programme benötigt wird, wird dabei nicht miteinbezogen. Somit ist die Antwortzeit, die der Benutzer wahrnimmt, nicht die CPU-Zeit! Die CPU-Time lässt sich unterteilen in User CPU Time und in System CPU Time. User CPU Time ist dabei die Zeit, die innerhalb des Programms aufgewendet wird und System CPU Time die Zeit, die im Betriebssystem verbracht wird, wobei Aufgaben für das Programm ausgeführt werden.

CPU Clocking Ereignisse innerhalb der Hardware werden von einem konstanten Taktzyklus (Clock) beherrscht. Diese Taktzyklen sind diskrete Zeitintervalle. Dabei wird mit clock period die Dauer eines Taktzykluses (clock cycles) bezeichnet und mit clock frequency (rate) die Zyklen pro Sekunde.

CPU Time

9

Die Performance kann verbessert werden durch: • Reduzieren der Anzahl der Clock Cycles (Taktzyklen) • Erhöhen der Clock Rate (d.h. mehr Zyklen pro Sekunde) Hardware Designer müssen oft Clock Rate und Cycle Count aufeinander abstimmen.

Instruction Count und CPI (Cylces per instruction)

Instruction Count ist die Anzahl der Instruktionen, die ausgeführt werden sollen (z.B. eines Programms). CPI (cycles per instruction) ist die durchschnittliche Anzahl der Taktzyklen, die pro Instruktion durchlaufen werden. Der Instruction Count wird vom Programm bestimmt sowie von ISA (Instruction Set Architecture) und Compiler. Die durchschnittlichen cycles per instruction werden durch die CPU Hardware bestimmt. Wenn unterschiedliche Befehle unterschiedliche CPIs haben, bestimmt der Mix an Befehlen die durchschnittlichen CPI.

Wenn unterschiedliche Instruction-Klassen eine unterschiedliche Anzahl an Zyklen brauchen:

Die CPI sind dann gewichtet:

10

Zusammenfassung: Performance

Die Performance hängt von folgenden Faktoren ab: • Algorithmus o beeinflusst den Instruction Count (IC), möglicherweise auch CPI • Programmiersprache o beeinflusst den IC sowie CPI • Compiler o beeinflusst IC und CPI • Instruction set architecture o beeinflusst IC, CPI, TC ( Taktgeschwindigkeit)

Was ist die Power Wall? • •

Wir können die elektrische Spannung (voltage) nicht weiter reduzieren. Wir können nicht mehr Hitze verschwinden lassen.

Wie kann man also noch Performance verbessern?

11

Multiprocessors Unter multicore microprocessors versteht man, dass sich mehr als ein Prozessor auf einem Chip befinden. Dabei ist explizit paralleles Programmieren erforderlich. Die Hardware muss mehrere Instructions gleichzeitig ausführen. Was und wie es geschieht, soll jedoch vor dem Benutzer verborgen bleiben.

12

Chapter 2: Instructions – Language of the Computer Instruction Set Unter einem Instruction Set versteht man den Wortschatz mit den Befehle, die eine bestimmte Architektur versteht. Unterschiedliche Computer können auch unterschiedliche Instruction Sets haben. Allerdings haben sie stets viele Aspekte gemeinsam. In frühen Computern waren die Instruction Sets sehr simple. Aber auch heute gibt es moderne Computer, deren Instruction Sets sehr simple sind. Eines der bekannten Instruction Sets ist das MIPS Instruction Set. MIPS-32 ISA ist in unterschiedliche Instruction-Kategorien aufgeteilt, die hier aufgelistet werden: Computational (rechenbetont) Load/Store (laden/speichern) Jump and Branch (Sprung und Verzweigung) Floating Point (Gleitkomma) wichtig dabei: Coprocessor (= Teil eines Rechnersystems, das einen peripheren Prozessor gegenüber dem zentralen Prozessor (CPU) darstellt, weil er unterstützende Funktionen, insbesondere bei mathematischen Aufgaben, erfüllt) Memory Management (Speicherverwaltung) Special

Arithmetische Operationen in der MIPS Architektur Die Addition, die Subtraktion, die Multiplikation und die Division sind die vier grundlegenden Rechenarten in der Arithmetik. Arithmetische Operationen sind in der MIPS Architektur stets gleich aufgebaut: •

drei Operanden o zwei Quellen o ein Ziel 13

Beispiel für die Addition: add a, b, c

# a gets b + c

Design Prinzip 1: Simplicity favours regularity (Einfachheit begünstigt Regelmäßigkeit) Regelmäßigkeit macht die Implementierung einfacher Einfachheit ermöglicht höhere Performance und niedrigere Kosten/Aufwand

Beispiel aus der Arithmetik: C code: f = (g + h) – (i + j) Compiled MIPS code: add t0, g, h

# temp t0 = g + h

add t1, i, j

# temp t1 = i + j

sub f, t0, t1

# f = t0 – t1

Für Operanden arithmetischer Befehle gelten bestimmte Einschränkungen. Sie müssen an speziellen Stellen im Rechner bereitstehe, die jedoch nur in einer beschränkten Anzahl zur Verfügung stehen: den Registern. Register sind elementare Komponenten beim Hardware-Entwurf und bilden die Grundbausteine für den Aufbau von Rechnern. Nach der Fertigstellung des Rechners sind sie auch für den Programmierer sichtbar. Die Größe eines Registers bei der MIPS Architektur beträgt 32 Bit. Die Zusammenfassung von 32 Bit zu einer Einheit geschieht sehr häufig und erhält deshalb bei der MIPS Architektur eine eigene Bezeichnung, nämlich Word. Die übliche Anzahl von Registern in einem Rechner ist 32. Der Unterschied zu Variablen ist, dass diese unbegrenzt sind, während Register nur in begrenzter Anzahl zur Verfügung stehen. Die Register in der MIPS Architektur sind von 0 bis 31 nummeriert. Wie spricht man Register an? Die Konvention bei MIPS für die Bezeichnung von Registern ist das Dollarzeichen gefolgt von zwei Zeichen. Zurzeit werden folgende Bezeichnungen verwendet: $t0, $t1, …, $t9

für temporärere Werte (zum Kompilieren des Programms in MIPS Befehle benötigt)

$s0, $s1, …, $s7

für gespeicherte Variablen (entsprechen einer Variablen in C und Java-Programmen)

14

Design Prinzip 2: Smaller is faster (Kleiner ist schneller) Bsp. MIPS: große Anzahl von Registern kann zu einer längeren Taktzykluszeit führen, da die elektronischen Signale für den weiteren Weg mehr Zeit benötigen.

Beispiel für Registeroperanden: C code: f = (g + h) – (i + j); f, …, j in $s0, …, $s4 Compiled MIPS code: add $t0, §s1, $s2

# temp t0 = g + h

add $t1, $s3, $s4

# temp t1 = i + j

sub $s0, $t0, $t1

# f = t0 – t1

Register sind: schneller als der Hauptspeicher o aber Registerfiles mit mehr Locations sind langsamer o Read/write port erhöht die impacts speed (Aufprallgeschwindigkeit) quadratisch einfacher für den Compiler zu verwenden o z.B. (A*B) – (C*D) – (E*F) kann in einer beliebigen Reihenfolge multiplizieren (vs. Stack) können Variablen so speichern, dass sich die Codedichte verbessert o Registernamen benötigen weniger Bits als eine Memory Location

15

Speicheroperanden (Memory Operands) Datenstrukturen wie Arrays, Strukturen und dynamische Daten werden im Hauptspeicher abgelegt. Register können nur eine kleine Menge von Daten halten, der Hauptspeicher kann hingegen Millionen von Datenelementen speichern. Da bei arithmetischen Operationen im MIPS-Befehlssatz nur Register verwendet werden, muss es auch eine Möglichkeit geben, Daten zwischen Hauptspeicher und Register zu transportieren. Diese Befehle werden data transfer instructions (Datentransfer-Befehle) genannt. Wichtig ist dabei: das Laden von Werten aus dem Hauptspeicher in die Register das Speichern von Ergebnissen aus den Registern im Hauptspeicher Um auf ein Wort im Hauptspeicher zugreifen zu können, benötigt man in dem entsprechenden Befehl die Speicheradresse (address). Jede Adresse identifiziert ein 8-bit Byte. Words sind im Hauptspeicher aneinander gereiht. Die Adresse muss also ein Vielfaches von 4 sein. Grund: ein Word hat 32-Bit, also 4 Byte. Die Adresse 0 beispielsweise adressiert den Beginn der ersten 32-Bit. Die nächsten 32-Bit liegen dann also nicht unter der Adresse 1, sondern unter der Adresse 4 (4 Bytes weiter). MIPS verwendet Big Endian. Im Gegensatz dazu gibt es noch Little Endian. Der Unterschied ist folgender: Bei Big Endian ist das Byte ganz links die Word-Adresse. Bei Little Endian ist das Byte ganz rechts die Word-Adresse.

Beispiel: Die Ganzzahl 439.041.101 (439 Millionen...) wird als 32-Bit-Integer-Wert gespeichert (Binär: 00011010 00101011 00111100 01001101, hexadezimal: 1A 2B 3C 4D). Die Speicherung erfolgt in vier Bytes ab der hypothetischen Speicheradresse 10000. Wenn die Speicherung in der Reihenfolge 1A 2B 3C 4D erfolgt, entspricht dies Big Endian. Die Speicherung in der umgekehrten Reihenfolge (4D 3C 2B 1A), also das am wenigsten signifikante Byte an der niedrigsten Speicheradresse, entspricht dagegen Little Endian. Einige ältere Systeme (z. B. PDP-11) speichern die Daten auch in der Reihenfolge 3C 4D 1A 2B oder auch 2B 1A 4D 3C. Dies wird als Middle Endian bezeichnet. (Quelle: Wikipedia)

16

Register vs. Memory • Auf Register kann schneller zugegriffen werden als auf den Hauptspeicher • Wenn man mit Daten aus dem Hauptspeicher arbeitet, sind loads und stores erforderlich o mehr Instruktionen müssen ausgeführt werden • Der Compiler muss so oft wie möglicher Register für Variablen verwenden o nur Variablen, die weniger oft verwendet werden, sollen an den Hauptspeicher gehen o die Optimierung bezüglich Register ist wichtig!

Beispiele für Speicheroperanden: C code: g = h + A[8] g in $s1, h in $s2, base address von A in $s3 Compiled MIPS code: Index 8 erfordert ein Offset von 32 (4 Byte pro Word) lw

$t0, 32($s3)

# load word

add $s1, $s2, $t0 32 ist das Offset, $s3 das base register

C code: A[12] = h + A[8] h in $s2, base address von A in $s3 Compiled MIPS code: Index 8 erfordert ein Offset von 32 lw

$t0, 32($s3)

# load word

add $t0, $s2, $t0 sw

$t0, 48($s3)

# store word

Konstanten oder Direktoperationen In Programmen werden in Operationen häufig Konstanten verwendet, z.B. beim Inkrementieren eines Index, damit dieser auf das nächste Element eines Felds zeigt. Wenn wir nur die bisher bekannten Befehle verwenden würden müssten wir eine Konstante aus dem Hauptspeicher laden, um sie zu verwenden (diese müsste beim Laden des Programms im Speicher abgelegt werden). 17

Eine Alternative, die keinen Ladebefehl erfordert, besteht darin, Versionen der arithmetischen Befehle bereitzustellen, bei denen ein Operand eine Konstante ist. Dieser schnelle Add-Befehl wird als add immediate („addiert direkt“) oder addi bezeichnet. Um beispielsweise die Konstante 4 zum Inhalt des Registers $s3 zu addieren, schreiben wir einfach: addi $s3, $s3, 4

# $s3 = $s3 + 4

anstelle von lw

$t0, AddrConstant4($s1)

# §t0 = 4

add $s3, $s3, $t0

Für die Subtraktion gibt es keine immediate instruction. Allerdings kann man einfach eine negative Konstante verwenden. addi $s2, $s1, -1

Design Prinzip 3: Make the common case fast (Optimiere den häufig vorkommenden Fall) Kleine Konstanten sind üblich der Immediat Operand vermeidet eine Load Instruction

Die Konstante Null Im MIPS Register 0 ist die Konstante 0 gespeichert ($zero). Diese kann nicht überschrieben werden! Sie ist bei häufig vorkommenden Operationen nützlich, z.B. beim Verschieben vom Inhalt eines Registers zu einem anderen Register. add $t2, $s2, $zero

Vorzeichenbehaftete und nicht-vorzeichenbehaftete Zahlen Da Computer sowohl positive als auch negative Zahlen berechnen, wird eine Darstellung benötigt, um diese zu unterscheiden. Eine Lösung wer, ein gesondertes Zeichen einzufügen, das sich in geeigneter Weise mit einem einzigen Bit darstellen lässt. Diese Darstellung wird als Vorzeichen-Betrag-Darstellung bezeichnet. Nachteile dabei sind allerdings, dass nicht genau klar ist, wo das Vorzeichen eingefügt werden soll (rechts oder links?). Außerdem muss 18

das Vorzeichen stets extra mitbeachtet werden (beim Berechnen einer Zahl muss es anschließend richtig gesetzt werden; es macht eine positive und eine negative 0 möglich, was zu Fehlern führen kann, etc.). Aufgrund der Nachteile wurde diese Idee nicht weiter verfolgt. Alternative: Subtrahiert man eine große Zahl von einer kleinen, wird wegen der führenden Nullen jeweils eine 1 weitergegeben, so dass das Ergebnis eine Folge aus führenden Einsen enthält. Deshalb kam man auf die Lösung, dass führende 0en für eine positive Zahl stehen und führende 1en für eine negative Zahl. Diese Darstellung wird als Zweier-KomplementDarstellung bezeichnet. Bei 32 Bit wäre also Bit 31 das sogenannte sign bit. Vorzeichenlose Zahlen haben dabei dieselbe vorzeichenlose und Zweier-KomplementDarstellung.

Ein einfacher Weg, um eine vorzeichenbehaftete Zahl zu negieren? Der einfachste Weg ist, das Komplement der Zahl zu bilden (d.h. alle 1 werden zu 0 und alle 0 werden zu 1) und anschließend 1 zu addieren. Beispiel: +2 –2

= = =

0000 0000 … 00102 1111 1111 … 11012 + 1 1111 1111 … 11102

Sign Extension (Vorzeichenerweiterung) Beispiel: 8-bit zu 16-bit +2: 0000 0010 –2: 1111 1110

0000 0000 0000 0010 1111 1111 1111 1110

________________ Können die beiden Summanden beliebige Werte annehmen, ist für eine korrekte Addition in Zweierkomplementdarstellung eine Vorzeichenerweiterung nötig. Dabei wird von beiden Summanden zunächst die oberste Stelle dupliziert und somit die Stellenanzahl um eins vergrößert. In diesen Beispielen die 8. Stelle, welche auf die 9. Stelle kopiert wird. Anschließend wird die Addition wie oben, aber mit 9 Stellen, durchgeführt. Das Addierwerk muss dazu immer eine Stelle mehr umfassen. Unterscheiden sich in der berechneten Summe dann die höchstwertige und die Stelle darunter voneinander, ist das Ergebnis nicht mehr im Wertebereich der Summanden darstellbar – es ist ein Überlauf aufgetreten. Je nach Anwendungsfall wird dann mit dem um ein Bit breiteren und korrekten Ergebnis weitergerechnet oder ein Fehlerabbruch ist die Folge. Beispiel: Die Addition der beiden positiven Zahlen 50 und 80 ergibt 130 und überschreitet damit den Wertebereich. Die Zahl passt zwar noch in eine 8-Bit-Variable, aber das 8. Bit ist jetzt gesetzt, so dass die Zahl fälschlicherweise negativ erscheint. Manche Mikroprozessoren wie der 6502 melden ein solches Ereignis mit einem eigenen Statusbit, hier dem Overflow-Bit O, das der Programmierer nach vorzeichenbehafteten Rechenoperationen abfragt und entsprechend reagieren kann. 19

Beispiel für Vorzeichenerweiterung, die 9. Stelle der Vorzeichenerweiterung ist zur Verdeutlichung in Klammern geschrieben: +4 + 127 = +131 führt zu (0)00000100 + (0)01111111 ----------Ü (0)11111000 ----------= (0)10000011

−4 − 127 = −131 führt zu (1)11111100 + (1)10000001 ----------Ü (1)00000000 ----------= (1)01111101

In beiden Fällen unterscheiden sich die 8. und 9. Stelle voneinander, eine Reduktion auf 8 Bit würde zu einem Fehler führen. Zur Verdeutlichung und Vergleich die obigen beiden Beispiele mit Vorzeichenerweiterung: +4 − 3 = +1 führt zu (0)00000100 + (1)11111101 ----------Ü (1)11111000 ----------= (0)00000001

−4 − 3 = −7 führt zu (1)11111100 + (1)11111101 ----------Ü (1)11111000 ----------= (1)11111001

in beiden Fällen unterscheiden sich die 8. und 9. Stelle der Summe nicht, die beiden Ergebnisse können somit korrekt wieder auf 8 Stellen reduziert werden. Generell kann die Stellenanzahl in der Zweierkomplementdarstellung, von oben beginnend, so lange und ohne Verfälschung des Wertes reduziert werden, bis sich die beiden obersten Stellen im Wert voneinander unterscheiden. Das verdeutlicht den Umstand, dass bei der Zweierkomplementdarstellung von Zahlen keine fixe Stelle für die Codierung des Vorzeichens existiert. Quelle: Wikipedia

Darstellung von Instructions (Befehlen im Rechner) Instructions sind binär codiert. Die Bezeichnung dafür lautet Maschinencode. Befehle werden im Rechner als Folge elektronischer Signale mit jeweils hohem und niedrigem Potenzial betrachtet und können somit als Zahlen interpretiert werden. Die einzelnen Zahlen aneinander gereiht ergeben den Befehl. In MIPS ist genau festgelegt, welche Register welchen Stellen zuordnet werden.

20

Damit es leichter ist, MIPS Felder anzusprechen, haben diese bestimmte Namen:

op

6-bits

opcode; spezifiziert die Operation

rs

5-bits

register file address des ersten Source-Operanden

rt

5-bits

register file address des zweiten Source-Operanden

rd

5-bits

register file address des Ziels für das Ergebnis

shamt

5-bits

shift amount (für shift instructions)

funct

6-bits

function code; erweitert den opcode

R-Typ (für Register) oder auch R-Format

Hexadezimal Hexadezimal-Darstellung ist eine kompakte Repräsentation von Bit Strings. Die Basis ist 16. Jede hex digit (hex Ziffer) besteht aus 4 bits. Da 16 eine Potenz von 2 ist, kann einfach jede Gruppe mit vier Binärziffern durch eine hexadezimale Ziffer ersetzt werden.

21

MIPS I-format Instructions

Immediat arithmetic instructions und load/store instructions sind so aufgebaut wie es die obere Graphik zeigt. rt ist dabei die Ziel- oder Quell-Register-Nummer Die Konstante bewegt sich im Bereich –215 bis +215 – 1 Die Adresse ist ein Offset, dass zur base address in rs addiert wird Diese Instructions müssen anders aufgebaut werden (als andere MIPS Befehle). Grund dafür ist, dass sie längere Felder brauchen als sie in der op-rs-rt-rd-shamt-funct-Darstellung bereitgestellt werden. Beispiel: Im Load-word-Befehl müssen zwei Register und eine Konstante angegeben werden. Würde man für die Adresse eines der 5-Bit-Felder verwenden, wäre die Konstante auf nur 25 (= 32) begrenzt. Das ist oftmals zu klein. Daher gibt es unterschiedliche Formate für unterschiedliche Befehlsarten. Das Format, das in diesem Abschnitt vorgestellt wurde, wird I-Typ (für immediate = direkt) oder auch I-Format genannt und für Immediate- und Datentransfer-Befehle verwendet. Die unterschiedlichen Formate unterscheiden sich durch die Werte im ersten Feld. Jedem Format ist eine Reihe von Werten im ersten Feld (op) zugewiesen, do dass die Hardware weiß, ob die zweite Hälfte des Befehls als drei Felder (R-Typ) oder als ein Feld (I-Typ) behandelt werden muss.

Design Prinzip 4: Good design demands good compromises (Ein guter Entwurf erfordert gute Kompromisse) Unterschiedliche Formate machen das Entschlüsseln komplizierter, aber erlauben im oben beschriebenen Fall ein größeres Feld z.B. für die Konstante die Formate sollen so ähnlich wie möglich gehalten werden

Überblick: MIPS (RISC) Design Principles 1. Simplicity favours regularity Instructions mit fixer Länge kleine Anzahl an unterschiedlichen Instruction Formaten die ersten 6 bits machen immer den opcode aus 2. Smaller is faster limitiertes instruction set limitierte Anzahl an Registern im Register File limitiere Anzahl an addressing modes (Adressverfahren/-art) 22

3. Make the common case fast arithmetische Operanden werden dem Register File entnommen (load-storemachine) es ist erlaubt, dass Instructions immediat operands enthalten 4. Good design demands good compromises drei Instruction Formate

Computer von heute beruhen auf zwei Grundprinzipien: 1. Befehle werden in Form von Zahlen dargestellt 2. Programme werden wie Zahlen im Hauptspeicher gespeichert, um gelesen oder geschrieben werden zu können Die Tatsache, dass Befehle in Form von Zahlen dargestellt werden können, hat zur folge, dass Programme häufig als Dateien mit Binärzahlen ausgeliefert werden. Die kommerzielle Folge hiervon ist, dass Rechner fertige Programme übernehmen können, vorausgesetzt sie sind zu einem vorhandenen Befehlssatz kompatibel. Diese „Binärkompatibilität“ führt dazu, dass sich die Industrie auf wenige Befehlssatzarchitekturen konzentriert.

Logische Operationen Logische Operationen dienen der bitweisen Manipulation. Oft ist es wichtig, auf Bitfelder in einem Wort oder auch auf einzelne Bits zugreifen zu können. Logische Operationen sind z.B. nützlich für das Extrahieren bzw. Einfügen von Gruppen an Bits aus einem bzw. in ein Word.

Eine Klasse dieser Operationen sind die Schiebeoperationen oder auch Shift Operations. Sie schieben alle Bits in einem Wort nach links oder nach rechts, wobei die frei werdenden Bits mit einer Null aufgefüllt werden.

23

Um auf die MIPS Architektur zurückzukommen: das 5-bits-Feld shamt bei einer Instruction kann speichern, um wie viele Positionen geshiftet werden soll. sll by i bits multipliziert dabei mit 2i

(shift logical left)

srl by i bits dividert durch 2i

(shift logical right)

Beispiel: sll $t2, $s0, 4

# Reg. $t2 = Reg. $s0