157 lines
7.8 KiB
Markdown
157 lines
7.8 KiB
Markdown
# Grundprinzipien
|
||
- Ein- und Ausgabe
|
||
- Programmspeicher
|
||
- Datenspeicher
|
||
|
||
Unterschieden in:
|
||
- Harvard Architektur: direkt mit Prozessor verbunden
|
||
- Princeton-Architektur (von-Neumann-Architektur): über Systembus verbunden
|
||
|
||
## Eigenschaften
|
||
Fast alle der heute üblichen Rechner gehen auf folgende Eigenschaften zurück:
|
||
1. Die Rechenanlage besteht aus den Funktionseinheiten Speicher, Steuerwerk (engl. controller), dem Rechenwerk (engl. data path) und Ein-/Ausgabe-Einheiten.
|
||
2. Die Struktur der Anlage ist unabhängig vom bearbeiteten Problem. Die Anlage ist speicherprogrammierbar.
|
||
3. Der Speicher wird in Zellen gleicher Größe geteilt. Die Zellnummern heißen Adressen.
|
||
4. Das Programm besteht aus einer Folge von elementaren Befehlen, die in der Reihenfolge der Speicherung bearbeitet werden.
|
||
5. Abweichungen von der Reihenfolge sind mit (bedingten oder unbedingten) Sprungbefehlen möglich.
|
||
6. Es werden Folgen von Binärzeichen (nachfolgend Bitvektoren genannt) verwendet, um alle Größen darzustellen.
|
||
7. Die Bitvektoren erlauben keine explizite Angabe des repräsentierten Typs. Aus dem Kontext heraus muss stets klar sein, wie die Bitvektoren zu interpretieren sind.
|
||
|
||
# Befehlssatz
|
||
Adressierung ohne Speicherzugriff
|
||
- Registeradressierung: ausschließlich Operanden aus & Ziele in Registern
|
||
- Unmittelbare Adressierung, Direktoperanden, immediate addressing: Operanden sind Teil des Befehlsworts
|
||
- Direkte Adressierung, absolute Adressierung: Adresse ist ausschließlich im Befehlswort enthalten
|
||
- Register-indirekte Adressierung: Adresse ist ausschließlich im Register enthalten
|
||
- Varianten: pre/post-increment/decrement zur Realisierung von Stapeloperationen
|
||
- Relative Adressierung, indizierte Adressierung, Basis-Adressierung: Adresse ergibt sich aus der Addition eines Registerinhalts und einer Konstanten im Befehl
|
||
|
||
## n-Adressmaschinen
|
||
Klassifikation von Befehlssätzen bzw. Befehlen nach der Anzahl der Adressen bei 2-stelligen Arithmetik-Befehlen
|
||
- 3-Adressmaschinen: Operanden und Ziel einer Operation werden explizit angegeben
|
||
- 2-Adressmaschinen: Überschreiben eines Operanden mit dem Ergebnis
|
||
- 1 1⁄2-Adressmaschinen: wie 2-Adressmaschinen, nur unter Verwendung von Registern
|
||
- 1-Adressmaschinen: Nutzung von nur 1 Register
|
||
- 0-Adressmaschinen: Kellermaschinen
|
||
|
||
## Programmiermodelle, Instruction Set Architectures (ISAs)
|
||
Klassifikation von Befehlssätzen nach der Gestaltung/Ausprägung der
|
||
vorhandenen Maschinenbefehle
|
||
- CISC – Complex Instruction Set Computers
|
||
- Relativ kompakte Codierung von Programmen
|
||
- Für jeden Befehl wurden mehrere Taktzyklen benötigt. Die Anzahl der Zyklen pro Befehl war groß
|
||
- (Mikro-) Programm zur Interpretation der Befehle nötig
|
||
- Compiler konnten viele Befehle gar nicht nutzen
|
||
- RISC – Reduced Instruction Set Computers
|
||
- Wenige, einfache Befehle
|
||
- Hohe Ausführungsgeschwindigkeit
|
||
- durch kleine Anzahl von Taktzyklen pro Befehl
|
||
- durch Fließbandverarbeitung (siehe später)
|
||
- Programmlaufzeit = Anzahl auszuführender Befehle * CPI-Wert * Dauer eines Taktzyklus
|
||
- Eigenschaften
|
||
- feste Befehlswortlänge
|
||
- LOAD/STORE-Architektur
|
||
- einfache Adressierungsarten
|
||
- „semantische Lücke“ zwischen Hochsprachen & Assemblerbefehlen durch Compiler überbrückt
|
||
- statt aufwändiger Hardware zur Beseitigung von Besonderheiten (z.B. 16-Bit Konstanten) wird diese Aufgabe der Software übertragen
|
||
- rein in Hardware realisierbar, keine Mikroprogrammierung
|
||
|
||
## Technologien zum Speichern von Daten
|
||
- Arten
|
||
- **Modifikation von Strukturen**: Lochkarte, Schallplatte
|
||
- **Rückkopplung**: Flip-Flops, SRAM
|
||
- **Elektrische Ladungen**: Kondensator, DRAM
|
||
- **Magnetismus**: Magnetkernspeicher, Magnetband, Diskette, Festplatte
|
||
- **Optik**: Bar-Codes, CD-ROM, DVD
|
||
- Vergleichskriterien
|
||
- Kapazität
|
||
- Energiebedarf
|
||
- Geschwindigkeit
|
||
- Robustheit
|
||
- Speicherdichte
|
||
- Kosten
|
||
- Zugriffsmethoden
|
||
- Sequentieller Zugriff
|
||
- Zugriffszeit ist abhängig vom Speicherort und vom vorherigen Zugriff
|
||
- Beispiele: Magnetbänder, Festplatten, CD-ROM, DVD, BluRay
|
||
- Bei Plattenspeicher schneller Zugriff durch Überspringen von Spuren
|
||
- Wahlfreier Zugriff
|
||
- Zugriffszeit ist unabhängig vom Speicherort und vom vorherigen Zugriff
|
||
- Eindeutige Adresse identifiziert den Speicherort
|
||
- RAM (Random Access Memory)
|
||
- Einteilung des Speichers in
|
||
- Flüchtigen Speicher
|
||
- Informationen gehen nach Ausschalten der Versorgungsspannung verloren!
|
||
- Register innerhalb des Prozessors
|
||
- Static RAM (SRAM) für Caches
|
||
- Dynamic RAM (DRAM) für den Arbeitsspeicher
|
||
- Nichtflüchtige Speicher:
|
||
- Informationen bleiben auch ohne Versorgungsspannung über längere Zeit (typischerweise einige Jahre) erhalten!
|
||
- Beispiele: Flash, Magnetspeicher (Festplatte, Disketten, Magnetbänder)
|
||
- Bei einem ROM (Read Only Memory) ist nur lesender Zugriff möglich
|
||
|
||
Zweierpotenzen
|
||
- 1 KibiByte = 1 KiB = 1024 Bytes = 2^10 Bytes
|
||
- 1 MebiByte = 1 MiB = 1024 KiB = 2^20 Bytes = 1.048.576 Bytes
|
||
- 1 GibiByte = 1 GiB = 1024 MiB = 2^30 Bytes = 1.073.741.824 Bytes
|
||
- 1 TebiByte = 1 TiB = 1024 GiB = 2^40 Bytes = 1.099.511.627.776 Bytes
|
||
|
||
|
||
## Blocktransfer (Burst)
|
||
Auslesen des kompletten Zeilenpuffers durch automatisches Inkrementieren der Spaltenadresse
|
||
|
||
## Cache
|
||
= schneller Speicher, der vor einen größeren, langsamen Speicher geschaltet wird
|
||
- Im weiteren Sinn: Puffer zur Aufnahme häufig benötigter Daten
|
||
- Für Daten die schon mal gelesen wurden oder in der Nähe von diesen liegen
|
||
- 90% der Zeit verbringt ein Programm in 10% des Codes
|
||
- Im engeren Sinn: Puffer zwischen Hauptspeicher und Prozessor
|
||
- Ursprung: cacher (frz.) – verstecken („versteckter Speicher“)
|
||
|
||
Organisation von Caches
|
||
- Prüfung anhand der Adresse, ob benötigte Daten im Cache vorhanden sind („Treffer“; cache hit)
|
||
- Falls nicht (cache miss): Zugriff auf den (Haupt-) Speicher, Eintrag in den Cache
|
||
|
||
|
||
# Ein- und Ausgabe
|
||
## Übertragungsprotokolle
|
||
- Synchrone Busse
|
||
- Keine Rückmeldung bei der Übertragung
|
||
- Unidirektionales Timing
|
||
- Asynchrone Busse
|
||
- Rückmeldung der Datenannahme
|
||
- Bidirektionales Timing
|
||
|
||
| | unidirektional | bidirektional |
|
||
| -- | -- | -- |
|
||
| Beschreibung | Kommunikationspartner verlassen sich darauf, dass Partner innerhalb festgelegter Zeit reagieren. | Kommunikationspartner bestätigen per Kontrollsignal (senden ein acknowledgment), dass sie in der erwarteten Weise reagiert haben. |
|
||
| Vorteile | einfach; bei konstanten Antwortzeiten schnell | passt sich unterschiedlichen Geschwindigkeiten an; hoher Grad an Flusskontrolle möglich |
|
||
| Nachteile | Kommunikationspartner muss in bestimmter Zeit | antworten komplexer; Zeitüberwachung notwendig; evtl. langsam |
|
||
| Einsatzgebiet | synchrone Busse, Speicherbusse | asynchrone Busse, E/A- und Peripheriebusse |
|
||
|
||
Programmierbarer Interrupt Controller (PIC)
|
||
|
||
# Prozessorergänzung
|
||
## Prozessor-Leistung
|
||
Leistung = (Durchschnitts-)Befehle pro Zeit\
|
||
Berechnung: $L=\frac{IPC}{t_{cycle}}$ mit $IPC = \frac{1}{CPI}$ und $CPI = \sum t_i *p_i$
|
||
- IPC: Instructions Per Cycle (Anzahl Durchschnittsbefehle pro Taktzyklus)
|
||
- CPI: Cycles Per Instruction (Mittlere Anzahl Taktzyklen pro Befehl)
|
||
- $t_i$ : Anzahl Taktzyklen des i-ten Befehls
|
||
- $p_i$ : Relative Häufigkeit des i-ten Befehls
|
||
- $t_cycle$ : Taktzykluszeit [$μs$]
|
||
|
||
## Befehlspalette
|
||
Pipelining: Fließbandverarbeitung (seriell vs parallel)
|
||
- IF / ID / EX: Befehl lesen / dekodieren / ausführen
|
||
- OF / WB: Operand lesen / schreiben (Register)
|
||
- Probleme: Unterschiedliche Phasenlänge, bedingte Sprünge, Datenabhängigkeiten
|
||
|
||
Superskalare Architektur: \
|
||
Befehl lesen -> Befehl dekodieren -> Operand lesen -> Befehl ausführen -> Operand schreiben
|
||
|
||
dRam: mit Kondensator\
|
||
sRam: mit FlipFlop\
|
||
RAM: Random Access Memory\
|
||
ROM: Read Only Memory\
|