Computerarchitektur
Die Computerarchitektur ist ein Teilgebiet der Informatik, welche sich mit dem internen sowie externen Aufbau eines Computersystems beschäftigt
- Von-Neumann-Architektur
- Komponenten eines VNR
- CPU
- Speicherwerk
- Ein- / Ausgabewerk
- Vom Quellcode zum Prozessor
- Ablauf der Steuerung
- Register auf der CPU - Stackregister
- Basisregister und Limitregister
- Interrupt-Controller
- DMA - Controller
- MMU - Memory Management Unit
- Count Programm (Assembler)
Von-Neumann-Architektur
Über Hauptplatine sind alle Komponenten miteinander verbunden. Das ist in Systemen ein kompliziertes Verbindungsgeflecht, weshalb man sich dieser Materie zunächst mit Hilfe einer sehr vereinfachten Darstellung nähert, der Von-Neumann-Architektur.
Computer, der nach Prinzipien der Von-Neumann-Architektur aufgebaut ist, nennt man Von-Neumann-Rechner
Dies ist Referenzsystem für Computer und bestehtaus einer CPU mit Steuerwerk und Rechenwerk, einem Ein- / Ausgabewerk, einem Speicherwerk und Bus-System. Das Bus-System verbindet die Komponenten miteinander.
- Grundlage nahezu jedes Betriebssystem
- Ein-/Ausgabewerk = HDD; Speicherwerk = RAM
- je dicker der Pfeil, desto mehr Informationen pro Sekunde
Von-Neumann-Flaschenhals
Nur eine angeschlossene Komponente kann zur selben Zeit schreibend auf das Bussystem zugreifen, da es sonst zu einer Kollision kommen würde. Das macht das Gerät insgesamt langsam.
Kollision
Sollten einmal zwei (oder mehr) angeschlossene Komponenten zur selben Zeit auf den Bus schreiben, so kommt es zu einer Überlagerung der Signale, wodurch diese unbrauchbar werden. Man nennt dies eine Kollision auf dem Bus.
Strategien zur Kollisionsvermeidung
Damit Rechner trotz Von-Neumann-Flaschenhals funktionieren kann, sind Strategien zur Vermeidung von Kollisionen auf Bus nötig. Sind negativ für Geschwindigkeit, mit der Datenübertragung über den Bus möglich ist und des gesamten Rechners.
Komponenten eines VNR
CPU
Die CPU ist ein zentraler Bestandteil eines Computers. Sie besteht in erster aus Steuerwerk, Rechenwerk sowie Registern.
Register ist digitaler Speicherbereich, der auf CPU angesiedelt ist, und Gruppe von binären Werten (Bits) speichern kann.
→ Anzahl der gleichzeitig in einem Register speicherbaren Bits nennt man die Breite des Registers oder Registerbreite
→ Bei einer Breite von n Bit spricht man auch von einem n-Bit-Register. (4, 8, 16, 32 oder 64 Bit.)
Steuerwerk
Bestandteil der CPU und für die sequentielle Abarbeitung des im Speicherwerk befindlichen Programms zuständig.
→ sendet die Adresse des aktuellen Befehls an das Speicherwerk
→ erhält als Antwort genau jenen Befehl, der an der übermittelten Adresse innerhalb des Speicherwerks steht.
→ Sobald das Steuerwerk den Befehl erhalten hat, wird dieser ausgeführt.
- Damit die Adresse des aktuellen Befehls vom Steuerwerk verwaltet werden kann, muss es einen Speicherbereich dafür geben. → Verwendet wird dazu ein Register: Program Counter, kurz: PC.
- Damit der vom Speicherwerk empfangene Befehl verwaltet werden kann, muss es einen Speicherbereich dafür geben.
→ Verwendet wird dazu ein Register: Befehlsregister, kurz: IR. - Die Adresse des aktuellen Befehls kann über das vorhandene Bus-System an das Speicherwerk gesendet werden.
→ Verbindung der Register PC sowie IR mit dem Bus-System muss daher gegeben sein.
Ein Bus (Binary Unit System) dient zur parallelen Übertragung einer Gruppe von Bits.
→ Die Anzahl der parallel übertragbaren Bits auf einem Bus nennt man die Breite des Busses oder Busbreite. (4, 8, 16, 32 oder 64)
schreibender Zugriff: wenn eine an diesem Bus angeschlossene Komponente eine Gruppe von Bits auf Bus gibt. (Senden)
lesender Zugriff: wenn eine an Bus angeschlossene Komponente Gruppe von Bits vom Bus entgegennimmt. (Empfangen)
→ Es können beliebig viele Komponenten zur gleichen Zeit Informationen über den Bus empfangen, jedoch nur eine Senden
Ein Adressbus ist ein Bus, bei dem die parallel übertragene Gruppe von Bits als Adresse zu interpretieren ist.
Ein Datenbus ist ein Bus, bei dem die parallel übertragene Gruppe von Bits als Daten zu interpretieren ist.#
Rechenwerk
Führt vom Steuerwerk in Auftrag gegebene Berechnungen durch. Hauptbestandteil ist ALU
Vom Rechenwerk bereitgestellte Funktionen
- Addition der Operanden (A + B)
- Subtraktion (A - B)
- Multiplikation (A * B)
- Konjunktion (logisches UND, bitweise)
- Disjunktion (logisches ODER, bitweise)
- Vergleich von A und B (bitweise)
- etc.
Speicherwerk
Das Speicherwerk ist in eine endliche Anzahl gleichgroßer (aber verhältnismäßig kleiner) Speicherzellen unterteilt (RAM)
→ Jede Zelle verfügt dabei über eine eindeutige Adresse.
→ Es kann nur Informationen speichern bei eingeschaltetem Rechner.
→ Speicherwerk kann den Wert einer adressierten Speicherstelle auslesen und zur Verfügung stellen oder andersherum
Ein Steuerbus ist ein Bus, bei dem die parallel übertragene Gruppe von Bits als Steuerinformation zu interpretieren ist.
Ein- / Ausgabewerk
Das Ein-/Ausgabewerk ist in der Von-Neumann-Architektur nicht näher spezifiziert. Man kann es sich vorstellen als eine Art von "Stellvertreter" für alle weiteren Komponenten eines modernen Rechners. Z.B. also für Komponenten wie:
- Monitor mit Grafikkarte
- Festplatte mit Controller
- Netzwerkkarte mit Controller
- Maus mit Controller
- Tastatur mit Controller
- etc.
Für jede Komponente ist ein eigener Controller vorgesehen, der das Bus-System mit dem eigentlichen Gerät verbindet.
Vom Quellcode zum Prozessor
- Compiler übersetzt Quellcode in Maschinensprache
-> Compiler muss wissen welche CPU weil unterschiedlich Sprache
-> z.B: 16 Bit CPU = Befehle von 16 Bit können überführt werdenvoid main (void){
int x = 2;
int y = 5;
int z = x + y;
}zu
00000000110000100000000100001101000000001100010100000001000011100000000010001101000000011000111000000001000011110000001110000000
- Maschinensprache in Einzelteile zerlegen
-> Wenn Nummer = 1, dann geht es um die Zahl, sonst um die Speicherzelle
-> die Befehle werden auf dem ACC durchgeführt
Reserve Befehl Nr. Operant Bedeutung Nr. Befehl Bedeutung 000000
000000
000000
000000
000000
000000
000000
000000
001
010
001
010
001
011
010
111
1
0
1
0
0
0
0
0
000010
001101
000101
001110
001101
001110
001111
000000
Lade den Wert 2 in ACC
Speichere ACC in Speicherzelle 13
Lade den Wert 5 in ACC
Speichere ACC in Speicherzelle 14
Lade Speicherzelle 13 in ACC
Addiere Speicherzelle in 14 zu ACC
Speichere ACC in Speicherzelle 15
Programm beenden
000
001010
011
100
101
110
111
NOOP
LOAD
STORE
ADDSUB
EQUAL
JUMP
HALTNo Operation
Was laden
Speicher
Addieren
Minimieren
Vergleichen
Überspringe
Beenden
Befehlsformat
Das Befehlsformat definiert für jeden einzelnen Befehl, wie dieser codiert ist: <Befehl><Num><Operand>
Opcode - Binäre Codierung, aus der sowohl der Befehl, als auch zusätzlich benötigte Steuerinformationen hervorgehen.
Klassifizierungen - Bei den Befehlsformaten werden verschiedene Klassifizierungen unterschieden:
- Einadressformat | Zweiadressformat | Dreiadressformat
Das Einadressformat entspricht dem Format Vom Quellcode zum Prozessor. Hier wird für die einzelnen Befehle nur der Opcode und die Adresse eines Operanden (deshalb Einadressformat) angegeben.
<Opcode><Operand1>
Bedeutung des Akkumulators
Wird ein zweiter Operand benötigt, so wird vorausgesetzt, dass dieser sich im Register Akkumulator befindet. Das bei der Abarbeitung des Befehls berechnete Ergebnis wird per Definition wieder im Akkumulator gespeichert.
Ablauf der Steuerung
CPU - Steuerwerk
- PC und IR sind im Steuerwerk
- Für den Ablauf gibt es 2 Voraussetzungen
1. der PC muss auf 0 stehen
2. Das Programm muss im RAM sein - Es wird folgender Zyklus durchlaufen:
- Fetch:
- Über Adressbus wird Befehl der aktuelle Nummer vom PC an RAM und Befehl des Steuerwerks übergeben
- über den Databus werden die Information der Speicherzelle in das Steuerwerk übermittelt
- über den Steuerungsbus wird die Art des Befehl mit übergeben, z.B: lesen
- wenn mehrere Programme im Ram gespeichert sind wird zuerst die Basis zu Programm Counter (PC) addiert
- Decode: stellt die Weichen für CPU, erhöht den PC um 1
- Execute: Führt den Befehl aus
- nach Durchlauf des Zyklus, wird PC um einen Wert erhöht und Zyklus beginnt neu
-
Wenn ein Programm starten soll wird der Programmcounter auf 0 gesetzt
-
Wenn B anfangen soll wird der Basis Register auf 512 gesetzt das Instruktionregister (IR) speichert den letzten Inhalt der auf dem PC zeigt interlegt
CPU - Rechenwerk
Das Rechenwerk führt vom Steuerwerk in Auftrag gegebene Berechnungen durch.
In der ALU werden Funktionen durchgeführt. Die Werte werden schließlich im Akkumulator zwischengespeichert, wo sie ausgelesen werden können.
Speicherwerk (RAM)
- in endliche Anzahl gleichgroßer Speicherzellen unterteilt
- jede Zelle verfügt über eine eindeutige Adresse
- kann Wert einer adressierten Speicherstelle auslesen oder Wert in eine Speicherzelle schreiben.
Ein- / Ausgabewerk
Transaktion von Informationen über verschiedene Peripheriegeräte (Maus, Tastatur, Monitor, ...). Für jedes Gerät gibt es einen Controller.
Register auf der CPU - Stackregister
Stackregister
- ist eine Datenstruktur, die in der CPU abgespeichert wird
- Im Stackregister wird der Stackpointer, der oberste Punkt des Stacks, gespeichert.
- Daten aufnehmen und wieder abgeben
- Zugriff über die Befehle PUSH sowie POP möglich
- Int x = 5; wird im Data Bereich gespeichert
- Int i = new Integer (5); ist eine neue Instanz und wird daher im Heep abgespeichert
- Stack/Heep flexible in der Kapazität nutzbar
- Speicher ist voll, wenn Stack und Heep sich berühren
- Jedes Programm hat eigenen Speicherbereich
Basisregister und Limitregister
- Basisregister enthält als Wert die Adresse der Speicherstelle mit ersten Befehl des aktiven Prozesses
- Im Limitregister wird die Größe des Speicherbereiches gespeichert und schützt überbelastung
-
-
-
- wichtig, um mehrere Programme im RAM zu halten
-
-
-
- Ein Programm, dass ausgeführt wird, wird Prozess genannt
- ein Prozess darf nur in seinem RAM-Bereich ablaufen
- z.B: A: Basis: 0, Limit 512; B: Basis 512:, Limit 256
- in Fetch Phase muss PC Wert kleiner sein als im Limitregister:
- PC < Limit -> dann darf Prozess ausgeführt werden
- am Anfang von Fetch wird Basis und PC addiert, die Nummer wird über Adressebus zum RAM übergeben
Mehrere Prozesse gleichzeitig im Speicher
- Starte den Rechner.
- Lade nacheinander mehrere Programme in den Hauptspeicher. Die Befehle des ersten Programms werden zusammenhängend ab Speicherzelle 0 abgelegt, die Befehle der weiteren Programme jeweils zusammenhängend in freien Speicherbereichen danach.
- Treffe für jedes Programm die nötigen Vorarbeiten für seine spätere Ausführung.
- Starte in Speicherzelle 0 mit der Ausführung des ersten Befehls des ersten Prozesses.
- Führe entsprechend des Ablaufs alle weiteren Befehle dieses ersten Prozesses aus.
- Wenn Ausführung des ersten Prozesses beendet (HALT-Befehl), wird CPU auf zweiten Prozess vorbereitet.
- Starte mit dem ersten Befehl des zweiten Prozesses...
Swapping: Aus- und Einlagern von kompletten Prozessen
→ Wenn mehr Programme gleichzeitig in den Hauptspeicher aufgenommen werden sollen, als verfügbare Hauptspeicher
WER oder WAS lagert Prozesse aus oder ein? - BETRIEBSSYSTEM
Unter Swapping versteht man das Aus- bzw. Einlagern eines kompletten Prozesses.
→ Entscheidend ist hier der Begriff kompletter Prozess, also sowohl der Programmtext, als auch alle zugehörigen Daten.
→ Daten aus Datensegment im Hauptspeicher und alle zu diesem Prozess gehörigen Daten aus Registern der CPU berücksichtigen
Limitregister zum Speicherschutz
→ mehrere Prozesse gleichzeitig im Hauptspeicher erfordert eine Berücksichtigung von Sicherheitsbelangen.
→ sichergestellt werden, dass Prozess nicht auf Speicherzellen im Hauptspeicher zugreift, die anderen Prozess zugeordnet sind.
Interrupt-Controller
Interrupt-Controller: Interrupt-Signale von Komponenten des Rechners entgegen zu nehmen, und die CPU über das Vorliegen von einem (oder mehreren) Interrupts zu informieren.
→ Die CPU ist dann für die Abarbeitung des Interrupts zuständig.
→ Dies geschieht, indem eine sogenannte Interruptbehandlungsroutine aufgerufen wird.
Interruptbehandlungsroutine (ISR): eine Reihe von Anweisungen, die einem bestimmten Interrupt zugeordnet ist und deren Anweisungen auf einer CPU ausgeführt werden können.
Keine negative Beeinträchtigung
→ Interrupt unterbrochene Prozess muss später ohne negative Beeinträchtigung weiter ausgeführt werden können
→ Das vom Prozess erarbeitete Ergebnis darf sich nicht unterscheiden
Einen Interrupt nennt man eine präzise Unterbrechung, falls alle der folgenden Bedingungen erfüllt sind:
- Der Programmzähler des unterbrochenen Prozesses wird an einer bekannten Stelle gesichert.
- Alle Befehle des unterbrochenen Prozesses, die vor dem Befehl ausgeführt werden müssen, auf den der Programmzähler zeigt, sind vollständig abgearbeitet.
- Kein Befehl des unterbrochenen Prozesses, der nach dem Befehl ausgeführt werden muss, auf den der Programmzähler zeigt, ist bereits abgearbeitet.
- Der Ausführungszustand des Befehls des unterbrochenen Prozesses, auf den der Programmzähler zeigt, ist bekannt.
Einen Interrupt nennt man eine unpräzise Unterbrechung, falls mindestens eine der für einen präzisen Interrupt genannten Bedingungen nicht erfüllt ist.
Gründe für eine Interrupt-Auslösung:
- Auslösung aufgrund einer Speicherschutzverletzung.
- Auslösung durch einen Hardware-Taktgeber zur quasi-gleichzeitigen Ausführung mehrerer Prozesse.
- Auslösung durch ein E/A-Gerät während der Kommunikation zwischen CPU und E/A-Gerät
Speicherschutzverletzung
→ Stellt das Steuerwerk während der Abarbeitung eines Prozesses fest, dass der aktive Prozess auf einen Speicherbereich im Hauptspeicher zugreifen möchte, der ihm selbst nicht zugeordnet ist, so handelt es sich um eine Speicherschutzverletzung, die durch einen Interrupt angezeigt wird.
→Reaktion: Speicherschutzverletzung verursachende Prozess wird ohne zu speichern beendet
Interruptablauf - Beispiel: Eine Datei soll in den RAM-Speicher innerhalb eines Prozesses abgespeichert werden.
1. CPU schickt Anforderung eines Datenworts an die Festplatte und führt danach einen Kontextwechsel aus
2. HD löst Interrupt aus. Interrupt wird an Interrupt-Controller gesendet und in Queue gespeichert.
3. Der Interrupt-Controller meldet den Interrupt dem Steuerwerk.
4. Nach letzten Execute-Phase des aktuellen Prozesses werden Registerinhalte gesichert. Die Interruptbehandlungsroutine wird ausgeführt. Datenwort wird mit Speicherzelle und Befehl (wirte) wird an Hauptspeicher geschickt (Adressbus, Databus, Steuerbus)
Kontextwechsel
- Festplatte braucht mehr Zeit als die CPU
- CPU macht beim Warten einen Kontextwechsel -> ein anderer Prozess wird abgearbeitet
-
Während Kontextwechsels werden Registerinhalte des vorherigen Prozesses gesichert und des neuen Prozesses geladen.
Kontextwechsel versus Interrupt
Der Unterschied zwischen Kontextwechsel und Interrupt, ist die Dauer der Unterbrechung
Kontextwechsel: sehr aufwendig, da viele Informationen auf unterschiedliche Register abgespeichert werden
Interrupt: arbeitet mit dem ISR und somit handelt es sich nur um ein Programm, dass für sich selbst sichert
Gründe für eine Interrupt-Auslösung
- Auslösung aufgrund einer Speicherschutzverletzung
- Auslösung durch einen Hardware-Taktgeber zur quasi-gleichzeitigen Ausführung mehrerer Prozesse.
- Auslösung durch ein E/A-Gerät während der Kommunikation zwischen CPU und E/A-Gerät.
Quasi-gleichzeitige Ausführung mehrerer Prozesse
→ indem sich die betreffenden Prozesse in kleinen Zeiteinheiten auf der CPU abwechseln
WER oder WAS bestimmt, wann es Zeit ist, einen Prozess zu unterbrechen und die CPU einem anderen Prozess zuzusprechen?
WER oder WAS bestimmt, welcher Prozess als nächstes die CPU bekommt?
Hardware-Taktgeber löst in sehr kleinen zeitlichen Abständen einen Interrupt auslöst
→ Wird entschieden, dass es Zeit für einen Prozesswechsel auf CPU ist, so kann ein anderer Teil des Betriebssystems aufgerufen werden, der den nächsten Prozess auswählt und ihm die CPU übergibt.
Kommunikation mit E/A-Geräte (Festplatte/Monitor/Maus/Tastatur/...)
→ CPU kommuniziert nicht direkt mit diesen Komponenten, sondern mit einem Controller, speziell für die Komponente zuständig
- Steuerregister
- Datenregister: Datenwort hinterlegen
- Zustandsregister
Datentransfer und Interrupts
- Die CPU sendet die Adresse des gewünschten Datenwortes an den Festplatten-Controller.
- Der Festplatten-Controller besorgt das Datenwort von der Festplatte und stellt es in seinem Datenregister zur Verfügung.
- Der Festplatten-Controller sendet einen Interrupt zum Interrupt-Controller.
- Der Interrupt-Controller nimmt den Interrupt entgegen und verwaltet ihn.
- Der Interrupt-Controller informiert die CPU über den Interrupt des Festplatten-Controllers.
- Die CPU startet die zugehörige Interruptbehandlungsroutine.
- Die Behandlungsroutine kopiert das Datenwort in ein Register auf der CPU.
- Die Behandlungsroutine sendet das Datenwort von der CPU zum Hauptspeicher.
- Der Hauptspeicher legt das Datenwort in der gewünschten Speicherzelle ab.
- Die Interruptbehandlungsroutine informiert den Interrupt-Controller darüber, dass der Interrupt fertig behandelt ist.
DMA - Controller
Direct Memory Access-Controller ist eine Hardware-Komponente, die die Geschwindigkeit des Gesamtsystems erhöht.
→ Erreicht werden soll dies durch Reduzierung der Anzahl an Interrupts, die bei der Kommunikation zwischen der CPU und den E/A-Geräten ausgelöst werden und durch die Spezialisierung des DMA-Controllers.
→ Die Daten sollen zwischen dem Hauptspeicher und einem weiteren DMA-fähigen Peripheriegerät übertragen werden.
- Vorher: Bei einem Datentransfer ohne DMA-Controller ereignete sich ein Interrupt pro Datenwort.
- mit DMA-Controller: nur noch ein Interrupt für die gesamte Übertragung
- Lösung: Datenwörter direkt zwischen dem Hauptspeicher und einem DMA-fähigen Peripheriegerät auszutauschen
- CPU muss lediglich zu Beginn und am Ende der Übertragung eingreifen.
Allgemeiner Ablauf
1. Die CPU versorgt aus Steuerwerk DMA-Controller mit Informationen zu beteiligte Komponenten, Start- und Zieladresse, Anzahl zu übertragener Datenwörter und Übertragungsrichtung und erteilt DMA-Controller Erlaubnis, mit Datenübertragung zu beginnen.
2. Der DMA-Controller steuert die Übertragung aller Datenwörter
3. HD gibt die Datenwörter zurück
4. DMA lässt die Datenwörter auf den RAM schreiben
- Wenn alle Daten übertragen sind, informiert DMA-Controller mit einem Interrupt über den Abschluss des Datentransfers
- Der Interrupt-Controller empfängt den Interrupt und leitet ihn an die CPU weiter
- Auf CPU wird die zugehörige ISR ausgeführt und die Datenübertragung per DMA ist abgeschlossen.
MMU - Memory Management Unit
- Unterstützt das Betriebssystem bei der Verwaltung des Hauptspeichers
- trägt zu einer Flexibilität und besseren Ausnutzung des vorhandenen physischen Speichers (RAM) bei
-
durch die Einführung einer MMU wird das BS bei der Umrechnung von virtuellen in physische Speicheradressen unterstützt
Wie es bisher ohne MMU ist
- ohne MMU wird mit dem Basisregisters und Limitregister gearbeitet
- für jeden Prozess am zusammenhängenden Speicherteil
- nachteilig: wenig flexibel -> es muss bereits zu Beginn festgelegt werden, wie groß dieser Speicherbereich ist.
Um Flexibilisierung der Speicherverwaltung zu erreichen, wird in BS Konzepte einer virtuellen Speicherverwaltung integriert
Wir brauchen ein Betriebssystem!
Virtuelle Speicherverwaltung
Unter dem physischen Speicher eines Computers versteht man den tatsächlich in dieses Gerät verbauten Speicher, soweit er direkt von der CPU oder der MMU angesprochen werden kann. Eine Seite ist ein zusammenhängender Block von Speicherzellen des physikalischen Speichers (RAM). Die Größe einer Seite entspricht der Größe eines Seitenrahmens.
Unter dem virtuellen Speicher eines Prozesses versteht man den Speicherbereich, der einem Prozess durch das Betriebssystem zur Verfügung gestellt wird. Ein Seitenrahmen ist ein zusammenhängender Block von Speicherzellen des virtuellen Speichers (RAM).
Der physische Speicher bezieht sich auf den Computer, während der virtuelle Speicher auf einen Prozess bezogen wird!
- Unter einer physischen Speicheradresse versteht man eine Adresse innerhalb des physischen Speichers eines Rechners.
- Unter einer virtuellen Speicheradresse versteht man eine Adresse innerhalb des virtuellen Speichers eines Prozesses.
Count Programm (Assembler)
Dieses Programm stellt den Ablauf eine Zyklus dar
1. PC gibt den Wert zum RAM über
2. Befehl mit PC Wert wird ausgeführt und läuft über den Data Bus zum IR
3. Danach wird der Decoder angestoßen die Weiche im MUX zu stellen
4. Im ALU wird der Befehl geladen
5. Im AC wird dann die geladenen Zahl zwischengespeichert