Computerarchitektur Die Computerarchitektur ist ein Teilgebiet der Informatik, welche sich mit dem internen sowie externen Aufbau eines Computersystems beschäftigt 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. KollisionSollten 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 KollisionsvermeidungDamit 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 werden void 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 001 010 011 100 101 110 111 NOOP LOAD STOREADD SUB EQUAL JUMPHALT No Operation Was laden Speicher Addieren Minimieren Vergleichen Überspringe Beenden Befehlsformat Das Befehlsformat definiert für jeden einzelnen Befehl, wie dieser codiert ist: 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. 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 Voraussetzungen1. der PC muss auf 0 stehen2. 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 aus2. 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? → Wir brauchen ein Betriebssystem! 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 über2.  Befehl mit PC Wert wird ausgeführt und läuft über den Data Bus zum IR3. 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