Grundlagen der Rechnerarchitektur
Ein‐ und Ausgabe
Übersicht
• Parallele und Serielle Busse
• Zugriff auf IO‐Geräte
• Parallelität und IO: Raid‐Systeme
Parallele und Serielle Busse
Interaktion zwischen Chips über deren Pins
Verbindung der zusammenpassenden Pins von CPU, Speicher und I/O über parallel laufende Leitungen: Bus
Adress‐Pins (übliche Werte 16, 20, 32) und Daten‐Pins (übliche Werte 8, 16, 32, 64) für Speicherzugriff
Des Weiteren Control‐Pins:
• Bus‐Control: Zur Steuerung von Speicher und IO durch die CPU
• Interrupts: Zur Unterbrechung der CPU durch I/O
• Bus‐Arbitration: zur Regelung des Bus‐Zugriffs durch mehrere
Teilnehmer (CPU ist gewöhnlicher Bus‐Teilnehmer)
• Coprocessor‐Signaling: Kommu‐
nikation zwischen CPU und
Coprozessor (Beispiel: Coprocessor0
und Coprocessor1 unserer MIPS‐Architektur)
• Status: ermöglicht Abfrage des der Status der CPU
• Miscellaneous: Reset, Kompatibilität mit älteren CPUs,…
Pins für Clock, Stromversorgung, Masse
Interaktion zwischen Chips über deren Pins
Typischerweise spezieller Bus zwischen CPU und Speicher und mindestens einen weiteren Bus für I/O.
Orchestrierung des Bus über Bus‐Controller; erfordert Bus‐Protokoll Des Weiteren, Elektrische und Mechanische Spezifikation
(Austauschbarkeit von Komponenten; Dritthersteller) Beispiele für Bus‐Standards:
• Omnibus (PDP‐8), Unibus (PDP‐11), Multibus (8086), VME, IBM PC (PC/XT)
• ISA (PC/AT), EISA (80386), Microchannel (PS/2), Nubus (Mac), PCI (PC), SCSI, USB, Firewire,…
Bemerkung: Kommunikation zwischen Register und ALUs über On‐Chip Bus
Master/Slave
Master: Gerät welches Aktion über den Bus imitiert Slave: Gerät welches auf Request wartet
Geräte können auch beides sein Beispiele:
Master Slave Beispiel‐Aktion
CPU Speicher Fetch von Instruktionen und Daten
CPU IO‐Gerät Datentransfer initiieren
CPU Coprocessor Instruktion an Coprozessor weiter geben
IO‐Gerät Speicher DMA (siehe später)
Coprocessor CPU Coprozessor liest Operanden aus der CPU
Bus Driver, Reciever, Transceiver, Decoder
Bus‐Driver: verstärkt Signale eines Masters für den Bus Bus‐Receiver: dasselbe für Slaves
Transceiver: Baustein für Chips die Master und Slave sind Abbindung mehrerer auf zwei Arten:
• Tri‐State – Gerät wird vom Bus getrennt
• Wired‐Or – In Leitung können mehrere mehrere Signale gleichzeitig sein
Adress‐, Daten‐ und Control‐Pins eines Gerätes müssen nicht 1‐zu1 mit dem Bus übereinstimmen; in diesem Fall benötigt man einen Decoder‐Chip
Beispiel: Drei CPU Pins zum encoden von Memory‐Read, Memory‐
Write, IO‐Read, IO‐Write auf einzelne Control‐Leitungen des Busses
für diese Funktionen abbilden
Generelle Bus‐Designmerkmale
• Breite (d.h. Anzahl Adress‐ und Datenleitungen)
• Clocking
• Arbitrierung
• Operation
Designmerkmal Breite
Tradeoff zwischen Systemkosten (Anzahl Leitungen und Platz auf dem Mother‐Board,
Konnektor‐Breite) und maximal adressierbare Speichergröße bzw. Bus‐Performance (durch mehr parallele Datenleitungen)
Manche Bussysteme sind über die Jahre „gewachsen“. Beispiel: IBM‐PC EISA
(Ebenso für Datenleitungen: 81632)
Solche Backward‐Kompatibilität zu älteren Systemen macht den Bus nicht gerade überschaubar…
Reduktion von Busleitungen auch mittels Multiplexed‐Bussen möglich (erst Adresse senden dann Daten über dieselben Adressleitungen schreiben/lesen)
Designmerkmal Clocking
Offensichtlich: Höhere Bustaktung = höhere Performance; aber höhere Taktung
irgendwann problematisch aufgrund von Bus‐Skew (Signalleitungen unterschiedlicher Länge führt zu unterschiedlichen Signalempfangszeiten)
Generelle Unterscheidung bzgl. Taktung
• Synchron – eine Clock; Busoperationen benötigen immer ein ganzzahliges Vielfaches der Bus‐Cycle‐Time (Typische Bus‐Taktfrequenzen zwischen 5 bis 100MHz)
• Asynchron – jedes Paar von Geräten kann mit „individuellem Takt“ über die Busleitungen kommunizieren
Asynchron erfordert Handshaking zwischen Master und Slave
Synchron ist einfacher. Aber: besonders Schnelle Komponenten werden durch den vorgegebenen Takt ausgebremst; Taktung muss langsamste Komponente beachten
Designmerkmal Arbitrierung
Zugriff mehrerer Master (CPU, Coprozessor, IO) auf den Bus erfordert Bus‐Arbitrierung Zwei Arten möglich:
Gezeigtes Beispiel (a): Daisy‐Chaining
Problem: Priorität implizit durch Position in der Kette; Lösung: mehrere Ketten mit Prioritäts‐Level (siehe (b) für 2 Level; häufig 4, 8 oder 16 Leitungen)
Dezentrale Arbitrierung: einfache aber unflezible nicht platzsparende Lösung: für jeden eine separate Request‐Leitung, die auch die übrigen beobachten
Skalierbare Lösung (siehe (c))
Zentral Dezentral
(a)
(b)
(c)
Designmerkmal Operations
Neben den Bus‐Zyklen zum Schreiben und Lesen gibt es Zyklen auf denen auch
weitere Bus‐Funktionen stattfinden Beispiel 1: Block‐Transfer
Beispiel 2: Read‐Modify‐Write‐Buszyklus Verhindert dass mehrere CPUS gleichzeitig auf eine Speicherstelle zugreifen können (Erinnerung: Synchronisierung)
Beispiel 3: Interrupt‐Handling
Beispiele (1)
Entwicklung paralleler PC‐Bussysteme
• IBM PC – Standard auf 8088‐basierten Systemen (Geschichte)
• PC/AT – Weiterentwicklung des PC‐Bus für 80286 (Weiterer Connector für mehr
Adress‐ und Datenleitungen)
• ISA – Im wesentlichen PC/AT mit 8.33MHz Bus‐Takt und 16‐Bit Breite, d.h. 16.7 MB/sec
• EISA – im Wesentlichen Erweiterung von ISA auf 32‐Bit, d.h. 33.3 MB/sec
Diese Busse wurden wachenden Bedarf an Video‐Performance nicht gerecht (z.B.
1024x768 3‐Byte‐Farbe benötigt 135 MB/sec)
• PCI (Peripheral Component Interconnect)
• Original 32‐Bit bei 33MHz, d.h.
133MB/sec. Erweitert auf 64‐Bit bei 66MHz, d.h. 528 MB/sec
• Aber: nicht schnell genug für Speicher und nicht kompatibel mit alten Karten
• Damit: PCI‐Bridge
Beispiele (2)
Mit wachsendem Bedarf an Video‐Performance (z.B. wachsende Auflösung) Bedarf für speziellen Grafik‐Bus
• AGP (Accelerated Graphics Port) – initial „nur“ 264 MB/sec aber dediziert für Grafikkarte. Neuere Versionen: z.B. AGP3.0 8x mit 2.1 GB/sec
Paralleler Bus für Sekundäre Speichermedien: ATAPI (IDE, ATA)
Beispiele (3)
Problem paralleler Busse: konkurrierende Master/Slaves beeinflussen die Performance Für mehr Performance Wechsel auf Switching mit Point2Point seriellen Verbindungen: PCIe (PCI Express)
• Analogon zu geswitchtem LAN
• Protocol‐Layering
• Physical – Lanes, Encoding
• Link – CRC, ACK, Flow‐Control
• Transaction – Virtual Circuits
• Software – Inteface zwischen PCIe‐
System und OS (Emulation von PCI über PCIe für OS welches noch auf PCI
basiert)
Analoge Entwicklungen
• ATA: SATA (Serial ATA)
• SCSI: Serial Attached SCSI (SAS), Fibre Channel und iSCSI.
Weitere übliche Serielle Bus‐Systeme (extern):
USB, FireWire
Bildquelle: Andrew S. Tanenbaum, „Structured Computer Organization“, Fifth Edition, 2006 Tabelle: https://de.wikipedia.org/wiki/PCI_Express
Wichtige IO‐Standards
x86‐Beipiel: Intel 5000P Chip‐Set
Zugriff auf IO‐Geräte
Mitteilen von Kommandos an IO‐Geräte
Memory‐Mapped‐IO
• In einen kleinen Teil des regulären Speichers werden Register des IO‐Gerätes „gemapped“.
• Schreiben und Lesen auf diese Speicherbereiche werden von
dem Speicher‐Controller direkt an bzw. von dem IO‐Gerät weiter gereicht.
• Betriebssystem kann den direkten Zugriff von gewöhnlichen
User‐Programmen auf den Speicher verhindern, indem virtuelle Adressen nicht auf den physikalischen Speicher mit dem
Memory‐Mapped‐IO gemapped werden.
• Simples Beispiel: Printer mit zwei IO‐Register
• Status‐Register: z.B. Done‐Bit, Error‐Bit
• Daten‐Register: z.B. das aktuell zu druckende Zeichen
• Prozessor muss das Done‐Bit testen, bevor das nächste Byte
geschrieben werden kann.
Mitteilen von Kommandos an IO‐Geräte
Separate IO‐Instruktionen:
• Maschinen‐Instruktion, welche die Geräte‐Adresse und das zu übermittelnde Kommando angibt
• Beispiele: Intel x86 und IBM 370
• Diese speziellen Instruktionen können nur im Supervisor‐Modus
ausgeführt werden. Betriebssystem kann damit den Zugriff auf
IO durch User‐Programm unterbinden.
Kommunikation mit dem Prozessor
Polling:
• Prozessor muss aktiv ein Statusregister solange abfragen, bis der Status die nächste Operation erlaubt
• Problem: CPU‐Zeit wird unnötig verbraucht Interrupts:
• IO‐Gerät meldet sich bei der CPU durch einen Interrupt, wenn eine Operation beendet wurde
• Alternativen, wie Interrupt‐Behandlung organisiert sein kann:
• Ein Interrupt‐Handler pro Interrupt‐Typ
• Ein einziger Interrupt‐Handler und ein Cause‐Register
Datentransfer zwischen Gerät und Speicher
Für besprochenes Polling und Interrupts: Prozessor ist dafür
zuständig die Daten in oder aus den gemappten Speicherstellen zu übertragen.
• Sinnvoll für IO mit geringen Datenraten
• Bei hohen Datenraten wäre (auch mit Interrupts) der Prozessor nur mit dem übertragen von Daten beschäftigt
• Hier ist der sogenannte Direct‐Memory‐Access (DMA) sinnvoller Ablauf des DMA
• Prozessor bestimmt (über Memory‐Mapped‐IO) das DMA‐Gerät, die Operation (schreiben oder lesen), die Start‐Speicherstelle und die Anzahl zu übertragen Bytes
• Gerät greift selbstständig schreibend/lesend auf den Speicher zu
• Bei Ende informiert das Gerät den Prozessor über einen
Interrupt
Datentransfer zwischen Gerät und Speicher
DMA ermöglicht der CPU während der Datenübertragung parallel weiter zu rechnen; allerdings nur solange die CPU nicht auf den Hauptspeicher zugreift.
Moderne zusätzliche IO‐Prozessoren können die CPU‐Last weiter reduzieren. IO‐Prozessoren führen ganze im Speicher befindliche IO‐Programme aus.
Mögliche Inkonsistenzen zwischen Cache der CPU und Speicher müssen bei DMA beachtet werden
• CPU liest aus Cache
• DMA schreibt direkt in den Speicher
Virtuelle Adressen erfordern ebenso Vorsicht
• DMA schreibt in den physischen Adressraum
• Virtueller Adressraum wird aber möglicherweise nicht auf
zusammenhängende Folge von Speicherblöcken gemappt
Parallelität und IO: Raid‐Systeme
Motivation
Nach Amdahls Gesetz: Beschleunigung durch Parallelität nur sinnvoll, wenn sowohl CPU als auch IO durch Parallelität beschleunigt werden.
In den späten 80ern war dies die Motivation, um von teuren großen High‐End‐
Festplatten auf parallel arbeitende gewöhnliche Festplatten umzusteigen.
Problem MTTF (mean time to failure) wird signifikant erhöht
•
Die Fehlerrate von gewöhnlichen Platten ist schon höher
•
Wird Beispielsweise eine einzelne Platte durch 50 parallel arbeitende Platten ausgetauscht, steigt die Fehlerrate um mindestens Faktor 50!
Es wurde notwendig Redundanz zur Fehlerkorrektur einzubauen. Damit wurde das Konzept Redundant‐Arrays‐of‐Inexpensive‐Disks (RAID) eingeführt.
Wie viel Redundanz man hinzufügt wird durch den sogenannten RAID‐Level
ausgedrückt.
RAID‐Level am Beispiel mit vier Platten
RAID 4
Naive Vorgehensweise Shortcut
RAID 5
Zwei Möglichkeiten Striping und Mirroring zu kombinieren Beispiel mit 8 Disks:
• Striped Mirrors (RAID 1+0 bzw. RAID 10)
• Mirrored Stripes (RAID 0+1 bzw. RAID 01)
RAID 1
RAID 10 und RAID 01
RAID 1 RAID 1 RAID 1
RAID 0 RAID 0
RAID 1 RAID 0