Articles

HTG erklärt: Wie funktioniert eigentlich eine CPU?

  • Anthony Heddings

    @anthonyheddings

  • Aktualisiert Februar 28, 2020, 4:58pm EDT
CPU
Rost/

Die meisten Dinge in einem Computer sind relativ einfach zu verstehen: Der Arbeitsspeicher, der Speicher, die Peripheriegeräte und die Software arbeiten alle zusammen, damit ein Computer funktioniert. Aber das Herz Ihres Systems, die CPU, scheint selbst für viele Techniker magisch zu sein. Hier, wir werden unser Bestes tun, um es zu brechen.

Der größte Teil der Forschung für diesen Artikel stammt von „Aber woher weiß es?“ von J. Clark Scott. Es ist eine fantastische Lektüre, geht viel tiefer als dieser Artikel und ist das paar Dollar bei Amazon wert.Eine Anmerkung, bevor wir beginnen: Moderne CPUs sind um Größenordnungen komplexer als das, was wir hier skizzieren. Es ist fast unmöglich für eine Person, jede Nuance eines Chips mit über einer Milliarde Transistoren zu verstehen. Die Grundprinzipien, wie alles zusammenpasst, bleiben jedoch gleich, und wenn Sie die Grundlagen verstehen, erhalten Sie ein besseres Verständnis moderner Systeme.

Klein anfangen

Computer arbeiten binär. Sie verstehen nur zwei Zustände: ein und aus. Um Berechnungen in Binärform durchzuführen, verwenden sie einen sogenannten Transistor. Der Transistor lässt den Quellstrom nur dann durch ihn zum Drain fließen, wenn Strom über das Gate fließt. Im Wesentlichen bildet dies einen Binärschalter, der in Abhängigkeit von einem zweiten Eingangssignal den Draht abschaltet.RELATED: Was ist binär und warum verwenden Computer es?Moderne Computer verwenden Milliarden von Transistoren, um Berechnungen durchzuführen, aber auf den niedrigsten Ebenen benötigen Sie nur eine Handvoll, um die grundlegendsten Komponenten, die sogenannten Gatter, zu bilden.

Logikgatter

Stapeln Sie ein paar Transistoren richtig, und Sie haben ein sogenanntes Logikgatter. Logikgatter nehmen zwei binäre Eingänge, führen eine Operation an ihnen durch und geben eine Ausgabe zurück. Das ODER-Gatter gibt beispielsweise true zurück, wenn einer der Eingänge true ist. Das UND-Gatter prüft, ob beide Eingänge wahr sind, XOR prüft, ob nur einer der Eingänge wahr ist, und die N-Varianten (NOR, NAND und XNOR) sind invertierte Versionen ihrer Basisgatter.

Mathe mit Gattern

Mit nur zwei Gattern können Sie grundlegende binäre Additionen durchführen. Dieses Diagramm oben zeigt einen halben Addierer, der mit Logicly, einem kostenlosen Online-Spielplatz für Logikgatter, erstellt wurde. Das XOR-Gatter schaltet sich hier ein, wenn nur einer der Eingänge eingeschaltet ist, aber nicht beide. Das UND-Gatter schaltet sich ein, wenn beide Eingänge eingeschaltet sind, bleibt jedoch ausgeschaltet, wenn kein Eingang vorhanden ist. Wenn also beide eingeschaltet sind, bleibt das XOR ausgeschaltet und das UND-Gatter schaltet sich ein und kommt zur richtigen Antwort von zwei:

Advertisement

Dies gibt uns ein einfaches Setup mit drei verschiedenen Ausgängen: Null, eins und zwei. Aber ein Bit kann nichts höher als 1 speichern, und diese Maschine ist nicht allzu nützlich, da sie nur eines der einfachsten mathematischen Probleme löst. Dies ist jedoch nur ein halber Addierer, und wenn Sie zwei davon mit einem anderen Eingang verbinden, erhalten Sie einen vollständigen Addierer:

Der Volladdierer hat drei Eingänge — die beiden zu addierenden Zahlen und einen „Carry“.“ Der Carry wird verwendet, wenn die endgültige Zahl das übersteigt, was in einem einzelnen Bit gespeichert werden kann. Volladdierer werden in einer Kette verknüpft, und der Carry wird von einem Addierer zum nächsten weitergegeben. Der Carry wird zum Ergebnis des XOR-Gatters im ersten halben Addierer addiert, und es gibt ein zusätzliches OR-Gatter, um beide Fälle zu behandeln, wenn das so eingeschaltet sein müsste.

Wenn beide Eingänge eingeschaltet sind, schaltet sich der Carry ein und sendet ihn an den nächsten Volladdierer in der Kette:

Und das ist ungefähr so komplex, wie es nur geht. Wenn Sie zu mehr Bits aufsteigen, bedeutet dies im Wesentlichen nur mehr vollständige Addierer in einer längeren Kette.Die meisten anderen mathematischen Operationen können mit Addition durchgeführt werden; Multiplikation ist nur wiederholte Addition, Subtraktion kann mit einer ausgefallenen Bitinversion durchgeführt werden, und Division ist nur wiederholte Subtraktion. Und während alle modernen Computer über hardwarebasierte Lösungen verfügen, um kompliziertere Vorgänge zu beschleunigen, können Sie technisch alles mit dem Full Adder erledigen.

Der Bus und der Speicher

Im Moment ist unser Computer nichts anderes als ein schlechter Taschenrechner. Dies liegt daran, dass es sich an nichts erinnern kann und nichts mit seinen Ausgaben macht. Oben gezeigt ist eine Speicherzelle, die all das kann. Unter der Haube verwendet es viele NAND-Gates, und im wirklichen Leben kann es je nach Speichertechnik sehr unterschiedlich sein, aber seine Funktion ist die gleiche. Sie geben ihm einige Eingaben, schalten das ‚Write‘-Bit ein und es speichert die Eingaben in der Zelle. Dies ist nicht nur eine Speicherzelle, sondern wir brauchen auch eine Möglichkeit, Informationen daraus zu lesen. Dies geschieht mit einem Enabler, bei dem es sich um eine Sammlung von UND-Gattern für jedes Bit im Speicher handelt, die alle an einen anderen Eingang, das „Lese“ -Bit, gebunden sind. Die Schreib- und Lesebits werden oft auch als „set“ und „enable“ bezeichnet.

Dieses ganze Paket ist in ein sogenanntes Register verpackt. Diese Register sind mit dem Bus verbunden, bei dem es sich um ein Kabelbündel handelt, das um das gesamte System verläuft und mit jeder Komponente verbunden ist. Sogar moderne Computer verfügen über einen Bus, obwohl sie möglicherweise mehrere Busse haben, um die Multitasking-Leistung zu verbessern.

Jedes Register hat immer noch ein Schreib- und Lesebit, aber in diesem Setup sind Eingang und Ausgang dasselbe. Das ist wirklich gut. Beispielsweise. Wenn Sie den Inhalt von R1 in R2 kopieren möchten, schalten Sie das Lesebit für R1 ein, wodurch der Inhalt von R1 auf den Bus übertragen wird. Während das Lesebit eingeschaltet ist, schalten Sie das Schreibbit für R2 ein, wodurch der Businhalt in R2 kopiert wird.

Werbung

Register werden auch verwendet, um RAM zu erstellen. RAM ist oft in einem Raster angeordnet, wobei die Drähte in zwei Richtungen verlaufen:

Die Decoder nehmen einen Binäreingang und schalten den entsprechenden nummerierten Draht ein. Zum Beispiel ist „11“ 3 in binär, die höchste 2-Bit-Zahl, so dass der Decoder den höchsten Draht einschalten würde. An jeder Kreuzung gibt es ein Register. Alle diese sind mit dem zentralen Bus und einem zentralen Schreib- und Leseeingang verbunden. Sowohl der Lese- als auch der Schreibeingang werden nur eingeschaltet, wenn die beiden Drähte, die sich über das Register kreuzen, ebenfalls eingeschaltet sind, sodass Sie effektiv das Register auswählen können, aus dem geschrieben und gelesen werden soll. Auch hier ist moderner RAM weitaus komplizierter, aber dieses Setup funktioniert immer noch.

Der Taktgeber, der Stepper und der Decoder

Register werden überall verwendet und sind das grundlegende Werkzeug, um Daten zu verschieben und Informationen in der CPU zu speichern. Also, was sagt ihnen, die Dinge zu bewegen?

Die Uhr ist die erste Komponente im Kern der CPU und schaltet sich in einem festgelegten Intervall, gemessen in Hertz oder Zyklen pro Sekunde, aus und ein. Dies ist die Geschwindigkeit, die Sie neben CPUs beworben sehen; Ein 5-GHz-Chip kann 5 Milliarden Zyklen pro Sekunde ausführen. Die Taktrate ist oft eine sehr gute Metrik dafür, wie schnell eine CPU ist.

Advertisement

Die Uhr hat drei verschiedene Zustände: die Basisuhr, die Freigabeuhr und die eingestellte Uhr. Der Basistakt ist für einen halben Zyklus eingeschaltet und für die andere Hälfte ausgeschaltet. Die enable Clock wird zum Einschalten von Registern verwendet und muss länger eingeschaltet sein, um sicherzustellen, dass die Daten aktiviert sind. Die Set Clock muss immer zur gleichen Zeit wie die enable Clock eingeschaltet sein, da sonst falsche Daten geschrieben werden können.

Die Uhr ist mit dem Stepper verbunden, der von einem bis zum maximalen Schritt zählt und sich selbst auf einen zurücksetzt, wenn er fertig ist. Die Uhr ist auch mit UND-Gattern für jedes Register verbunden, in das die CPU schreiben kann:

Diese UND-Gatter sind auch mit dem Ausgang einer anderen Komponente, dem Befehlsdecoder, verbunden. Der Befehlsdecoder nimmt einen Befehl wie „SET R2 TO R1“ und dekodiert ihn in etwas, das die CPU verstehen kann. Es verfügt über ein eigenes internes Register, das als „Befehlsregister“ bezeichnet wird und in dem die aktuelle Operation gespeichert wird. Wie genau dies geschieht, hängt von dem System ab, auf dem Sie ausgeführt werden, aber sobald es decodiert ist, schaltet es den richtigen Satz ein und aktiviert Bits für die richtigen Register, die entsprechend der Uhr ausgelöst werden.

Programmanweisungen werden im RAM (oder L1-Cache auf modernen Systemen, näher an der CPU) gespeichert. Da Programmdaten wie jede andere Variable in Registern gespeichert sind, können sie im laufenden Betrieb manipuliert werden, um durch das Programm zu springen. So erhalten Programme ihre Struktur mit Schleifen und if-Anweisungen. Ein Sprungbefehl setzt den aktuellen Speicherort, von dem der Befehlsdecoder liest, an einen anderen Speicherort.

Wie alles zusammenkommt

Nun ist unsere grobe Vereinfachung der Funktionsweise einer CPU abgeschlossen. Der Hauptbus überspannt das gesamte System und verbindet sich mit allen Registern. Die vollständigen Addierer sind zusammen mit einer Reihe anderer Operationen in die Recheneinheit oder die ALU gepackt. Diese ALU hat Verbindungen zum Bus und eigene Register zum Speichern der zweiten Nummer, mit der sie arbeitet.

Advertisement

Um eine Berechnung durchzuführen, werden Programmdaten aus dem System-RAM in den Steuerbereich geladen. Der Steuerabschnitt liest zwei Zahlen aus dem RAM, lädt die erste in das Befehlsregister der ALU und lädt dann die zweite auf den Bus. In der Zwischenzeit sendet es der ALU einen Anweisungscode, der ihr sagt, was zu tun ist. Die ALU führt dann alle Berechnungen durch und speichert das Ergebnis in einem anderen Register, aus dem die CPU lesen und den Prozess fortsetzen kann.

Bildnachweis: Rost9/

Anthony Heddings
Anthony Heddings ist Cloud Engineer bei LifeSavvy Media, technischer Redakteur, Programmierer und Experte für die AWS-Plattform von Amazon. Er hat Hunderte von Artikeln für How-To Geek und CloudSavvy IT geschrieben, die millionenfach gelesen wurden.Vollständige Biografie lesen “