Aus welchen Teilen besteht der CPU in einem modernen Computer?
die ALU und die Steuereinheit
Computer
Computer

=== Hardwarearchitektur ===
Das heute allgemein angewandte Prinzip, das nach seiner Beschreibung durch John von Neumann von 1946 als ''Von-Neumann-Architektur'' bezeichnet wird, definiert für einen Computer fünf Hauptkomponenten:
* das Rechenwerk (im Wesentlichen die arithmetisch-logische Einheit (ALU)),
In den heutigen Computern sind die ALU und die Steuereinheit meistens zu einem Baustein verschmolzen, der so genannten CPU (Central Processing Unit, zentraler Prozessor).
Der Speicher ist eine Anzahl von durchnummerierten, adressierbaren „Zellen“; jede von ihnen kann ein einzelnes Stück Information aufnehmen. Diese Information wird als Binärzahl, also eine Abfolge von ja/nein-Informationen im Sinne von Einsen und Nullen, in der Speicherzelle abgelegt.
Bezüglich des Speicherwerks ist eine wesentliche Designentscheidung der Von-Neumann-Architektur, dass sich Programm und Daten einen Speicherbereich teilen (dabei belegen die Daten in aller Regel den unteren und die Programme den oberen Speicherbereich). Demgegenüber stehen in der Harvard-Architektur Daten und Programmen eigene (physikalisch getrennte) Speicherbereiche zur Verfügung. Der Zugriff auf die  Speicherbereiche kann parallel realisiert werden, was zu Geschwindigkeitsvorteilen führt. Aus diesem Grund werden digitale Signalprozessoren häufig in Harvard-Architektur ausgeführt. Weiterhin können Daten-Schreiboperationen in der Harvard-Architektur keine Programme überschreiben (Informationssicherheit).
In der Von-Neumann-Architektur ist das Steuerwerk für die Speicherverwaltung in Form von Lese- und Schreibzugriffen zuständig.
Die ALU hat die Aufgabe, Werte aus Speicherzellen zu kombinieren. Sie bekommt die Werte von der Steuereinheit geliefert, verrechnet sie (addiert beispielsweise zwei Zahlen) und gibt den Wert an die Steuereinheit zurück, die den Wert dann für einen Vergleich verwenden oder in eine andere Speicherzelle schreiben kann.
Die Ein-/Ausgabeeinheiten schließlich sind dafür zuständig, die initialen Programme in die Speicherzellen einzugeben und dem Benutzer die Ergebnisse der Berechnung anzuzeigen.
Bus__Datenverarbeitung_ Autopilot CDC_6600
Bus__Datenverarbeitung_

=== Erste Generation ===
Speicher und andere Geräte wurden am Bus an den gleichen Adressen und Datenstiften angebracht, die die CPU selbst benutzt, und zwar durch parallelen Anschluss. Die Kommunikation wurde durch die CPU gesteuert, die die Daten von den Geräten und die Blöcke aus dem Speicher liest. Alles wurde dabei durch einen zentralen Zeitgeber getaktet, der die Arbeitsgeschwindigkeit der CPU steuerte. Angeschlossene Geräte zeigten der CPU, dass sie Daten senden oder empfangen wollen, indem sie auf anderen CPU-Stiften ein Signal sendeten, was gewöhnlich durch eine Form von Interrupt geschah. Zum Beispiel hat ein Laufwerkscontroller (siehe Controller) der CPU signalisiert, dass neue Daten bereit waren gelesen zu werden, worauf die CPU die Daten verschob, indem sie den Speicher an dem Anschluss las, der dem Laufwerk entsprach. Fast alle frühen Computer wurden auf diese Weise zusammengesetzt, beginnend mit dem S-100-Bus im Altair und bis hin zum IBM-PC in den 1980ern.
Diese „erste Generation“ von Bussystemen litt jedoch unter dem gravierenden Nachteil, dass alles auf dem Bus mit der gleichen Geschwindigkeit arbeitet und alle Geräte sich einen einzelnen Taktgeber teilen mussten. Die Arbeitsgeschwindigkeit der CPU zu erhöhen war nicht einfach, weil man die Geschwindigkeit aller angeschlossenen Geräte ebenfalls steigern musste. Dies führte zu der seltsamen Situation, dass sehr schnelle CPUs gedrosselt werden mussten, um mit anderen Geräten im Computer kommunizieren zu können. Ein anderes Problem war, dass die CPU für alle Operationen benötigt wurde, und so, wenn sie mit anderen Aufgaben beschäftigt war, der reale Datendurchsatz des Busses drastisch darunter zu leiden hatte. Ein anderes praktisches Problem war, dass diese frühen Bussysteme schwierig zusammenzustellen waren, da sie viele Jumper erforderten, um die verschiedenen Betriebsparameter einzustellen. Autopilot

=== Computersystem ===
Die Hardware eines Autopiloten für ein typisches großes Flugzeug besteht aus fünf 80386-CPUs, dabei ist jede CPU auf einer eigenen Leiterplatte. Die 80386-CPU ist preisgünstig, hat ein ausgereiftes Design und ist durchgetestet. Auf dem 80386 kann ein echter virtueller Computer implementiert werden. Neuere Versionen sind sogar strahlenresistent und für die Verwendung in der Luftfahrt zusätzlich verstärkt. Es wird bewusst auf das sehr alte Design der 80386 zurückgegriffen, da es zuverlässig ist und sein Softwareverhalten ausführlich getestet und beschrieben ist.
Das Betriebssystem des Kunden stellt eine virtuelle Maschine für jeden Prozess zur Verfügung. Die Software des Autopiloten kontrolliert die Elektronik des Computers also immer über den Umweg und nie direkt, stattdessen steuert sie die Softwaresimulation, die auf der 80386-CPU abläuft.
Die meisten schwerwiegenden fehlerhaften Softwareoperationen führen zu einem Systemabsturz der jeweiligen CPU.
Meist läuft auf jeder CPU ein Prozess mit niedriger Priorität, der kontinuierlich den Computer testet.
Prinzipiell läuft jeder Prozess im Autopiloten in identischer Form als Kopie an drei oder mehr Stellen in verschiedenen CPUs ab. Das System entscheidet dann, welche der Ergebnisse akzeptiert werden. Dabei wird der Mittelwert übernommen, wobei extrem abweichende Werte verworfen werden.
Bei einigen Autopiloten kommt als zusätzliches Sicherheitsmerkmal noch ein unterschiedliches Design (englisch design diversity) hinzu. Dabei werden kritische Softwareprozesse nicht nur auf verschiedenen Computern ausgeführt, sondern auf jedem Computer läuft Software, die von verschiedenen Entwicklungsteams erstellt wurde, da es nicht sehr wahrscheinlich ist, dass verschiedene Entwicklungsteams den gleichen Fehler machen.
Wegen der Zunahme der Komplexität der Software und der steigenden Kosten für die Software rücken aber viele Entwicklungsfirmen von dieser Sicherheitsvorkehrung durch Diversität ab. CDC_6600

== Peripherieprozessoren (Eigenschaften) ==
Die CPU hatte dabei nur einen eingeschränkten Befehlssatz aus einfachen Instruktionen: Während typische CPUs der Ära über einen komplexen Befehlssatz verfügten, der auch Anweisungen für alle normalen „Housekeeping“-Aufgaben wie Speicherzugriff und Ein-/Ausgabe umfasste, implementierte Cray diese Befehle bei der 6600 stattdessen in separaten, einfacheren „Peripherieprozessoren“ (PPs), die ausschließlich für solche Aufgaben vorgesehen waren. Dadurch kam die CPU mit einem viel kleineren Befehlssatz aus. Dies war die erste Implementation dessen, was später als Reduced Instruction Set Computer (RISC) bezeichnet wurde.
Durch den parallelen Betrieb von CPU, Peripherieprozessoren (PPs) und E/A wurde die Leistung der Maschine erheblich gesteigert. Normalerweise hätte eine Maschine mit mehreren Prozessoren auch viel mehr gekostet. Der Schlüssel zum Design der 6600 bestand darin, die PPs so einfach wie möglich zu gestalten. Sie basierten auf der einfachen 12-Bit-CDC 160-A, die viel langsamer als die CPU lief, Daten sammelte und über dedizierte Hardware mit hoher Geschwindigkeit als Bursts in den Hauptspeicher übertrug.
Die 10 PPs wurden virtuell implementiert; nur einen Prozessor gab es als Hardware. Dieser arbeitete mit 10 PP-Registersätzen zusammen, die die 10 PP-Instanzen repräsentierten (ähnlich modernen Multithreading-Prozessoren) und als ''barrel'' (Fass) bezeichnet wurden. Bildlich gesprochen, „drehte“ sich das ''barrel'' schrittweise, wobei umlaufend jeder PP-Registersatz über einen ''slot'' der PP-CPU zugeordnet wurde. Die CPU führte den Befehl des jeweiligen PP ganz oder teilweise aus, woraufhin sich das ''barrel'' wieder „drehte“ und der CPU den Registersatz (Zustand) des nächsten PP zuordnete. Es waren mehrere „Umdrehungen“ des ''barrel'' erforderlich, um eine Anweisung abzuarbeiten. Eine vollständige ''barrel''-„Drehung“ dauerte 1000 Nanosekunden (100 Nanosekunden pro PP), und eine Anweisung benötigte eine bis fünf „Umdrehungen“, oder noch mehr im Fall eines Datenübertragungsbefehls.