Die Hinterlassenschaften früherer Designs, wie Babbages Difference Engine und die Mainframe-Lochkartensysteme der 1970er Jahre, haben erhebliche Auswirkungen auf die heutigen Computersysteme. In meinem ersten Artikel in dieser historischen Serie, Computergeschichte und moderne Computer für Systemadministratoren, diskutierte ich mehrere Vorläufer des modernen Computers und listete Merkmale auf, die das definieren, was wir heute Computer nennen.,

In diesem Artikel diskutiere ich die zentrale Verarbeitungseinheit (CPU), einschließlich ihrer Komponenten und Funktionen. Viele der Themen beziehen sich auf den ersten Artikel zurück, so sicher sein, es zu lesen, wenn Sie noch nicht haben.

Die Zentraleinheit (CPU)

Die CPU in modernen Computern ist die Verkörperung der „Mühle“ in Babbages Difference Engine. Der Begriff zentrale Verarbeitungseinheit entstand weit zurück in den Nebeln der Computerzeit, als ein einzelner massiver Schrank die Schaltung enthielt, die erforderlich war, um Programmanweisungen auf Maschinenebene zu interpretieren und Operationen an den gelieferten Daten auszuführen., Die zentrale Verarbeitungseinheit hat auch die gesamte Verarbeitung für alle angeschlossenen Peripheriegeräte abgeschlossen. Zu den Peripheriegeräten gehörten Drucker, Kartenleser und frühe Speichergeräte wie Trommel-und Festplattenlaufwerke. Moderne Peripheriegeräte haben selbst eine erhebliche Menge an Rechenleistung und laden einige Verarbeitungsaufgaben von der CPU ab. Dadurch wird die CPU von Eingabe – /Ausgabeaufgaben befreit, sodass ihre Leistung auf die jeweilige primäre Aufgabe angewendet wird.

Frühe Computer hatten nur eine CPU und konnten jeweils nur eine Aufgabe ausführen.,

Wir behalten heute den Begriff CPU bei, aber jetzt bezieht er sich auf das Prozessorpaket auf einem typischen Motherboard. Abbildung 1 zeigt ein Standard-Intel-Prozessorpaket.

Bild

Abbildung 1: Ein Intel Core i5 Prozessor-Paket (Jud McCranie via Wikimedia Commons, CC BY-SA 4.0).

Außer dem Prozessorpaket selbst gibt es hier wirklich nichts zu sehen. Das Prozessorpaket ist ein Chip, der die Prozessoren enthält, die in einem Metallbehälter versiegelt und auf einer kleinen Leiterplatte (PC) montiert sind., Das Paket wird einfach in den CPU-Sockel auf einem Motherboard fallen gelassen und mit einer Verriegelungshebelanordnung gesichert. Ein CPU-Kühler wird an das Prozessorpaket angehängt. Es gibt verschiedene physische Steckdosen mit einer bestimmten Anzahl von Kontakten, Daher ist es wichtig, das richtige Paket für den Motherboard-Sockel zu finden, wenn Sie Ihre eigenen Computer bauen.

Wie die CPU funktioniert

Schauen wir uns die CPU genauer an. Abbildung 2 ist ein konzeptionelles Diagramm einer hypothetischen CPU, damit Sie die Komponenten leichter visualisieren können., Der RAM und die Systemuhr sind schattiert, da sie nicht Teil der CPU sind und nur zur Verdeutlichung angezeigt werden. Außerdem werden keine Verbindungen zwischen dem CPU-Takt und der Steuereinheit zu den CPU-Komponenten hergestellt. Es genügt zu sagen, dass Signale von der Uhr und der Steuereinheit ein integraler Bestandteil jeder anderen Komponente sind.

Image

Abbildung 2: Ein vereinfachtes konzeptionelles Diagramm einer typischen CPU.

Dieses Design sieht nicht besonders einfach aus, aber die Realität ist noch komplizierter., Diese Zahl reicht für unsere Zwecke aus, ohne übermäßig komplex zu sein.

Arithmetische Logikeinheit

Die arithmetische Logikeinheit (ALU) führt die arithmetischen und logischen Funktionen aus, die die Arbeit des Computers sind. Die A-und B-Register enthalten die Eingabedaten, und der Akkumulator empfängt das Ergebnis der Operation. Das Anweisungsregister enthält die Anweisung, die die ALU ausführen soll.

Wenn Sie beispielsweise zwei Nummern hinzufügen, wird eine Nummer in das A-Register und die andere in das B-Register eingefügt. Die ALU führt die Addition durch und legt das Ergebnis in den Akkumulator., Wenn es sich bei der Operation um eine logische Operation handelt, werden die zu vergleichenden Daten in die Eingaberegister eingefügt. Das Ergebnis des Vergleichs, eine 1 oder 0, wird in den Akkumulator gegeben. Unabhängig davon, ob es sich um eine logische oder arithmetische Operation handelt, wird der Akkumulatorinhalt an dem vom Programm für das Ergebnis reservierten Cache-Speicherort abgelegt.

Es gibt eine andere Art von Operation, die von der ALU ausgeführt wird. Das Ergebnis ist eine Adresse im Speicher und wird verwendet, um einen neuen Speicherort zu berechnen, um mit dem Laden von Anweisungen zu beginnen. Das Ergebnis wird in das Befehlszeigerregister eingetragen.,

Befehlsregister und Zeiger

Der Befehlszeiger gibt den Speicherort im Speicher an, der den nächsten Befehl enthält, der von der CPU ausgeführt werden soll. Wenn die CPU die Ausführung des aktuellen Befehls abschließt, wird der nächste Befehl von dem Speicherort, auf den der Befehlszeiger zeigt, in das Befehlsregister geladen.

Nachdem der Befehl in das Befehlsregister geladen wurde, wird der Befehlsregisterzeiger um eine Befehlsadresse erhöht. Inkrementieren ermöglicht es, bereit zu sein, den nächsten Befehl in das Befehlsregister zu verschieben.,

Cache

Die CPU greift nie direkt auf RAM zu. Moderne CPUs verfügen über eine oder mehrere Cache-Ebenen. Die Fähigkeit der CPU, Berechnungen durchzuführen, ist viel schneller als die Fähigkeit des Arbeitsspeichers, Daten an die CPU zuzuführen. Die Gründe dafür gehen über den Rahmen dieses Artikels hinaus, aber ich werde es im nächsten Artikel weiter untersuchen.

Der Cache-Speicher ist schneller als der System-RAM und liegt näher an der CPU, da er sich auf dem Prozessorchip befindet. Der Cache bietet Datenspeicher und Anweisungen, um zu verhindern, dass die CPU darauf wartet, dass Daten aus dem RAM abgerufen werden., Wenn die CPU Daten benötigt—und Programmanweisungen auch als Daten betrachtet werden-bestimmt der Cache, ob die Daten bereits vorhanden sind, und stellt sie der CPU zur Verfügung.

Wenn sich die angeforderten Daten nicht im Cache befinden, werden sie aus dem RAM abgerufen und mithilfe von Vorhersagealgorithmen mehr Daten aus dem RAM in den Cache verschoben. Der Cache-Controller analysiert die angeforderten Daten und versucht vorherzusagen, welche zusätzlichen Daten aus dem RAM benötigt werden. Es lädt die erwarteten Daten in den cache., Indem einige Daten näher an der CPU in einem Cache gespeichert werden, der schneller als RAM ist, kann die CPU ausgelastet bleiben und keine Zyklen verschwenden, die auf Daten warten.

Unsere einfache CPU verfügt über drei Cache-Ebenen. Die Stufen 2 und 3 wurden entwickelt, um vorherzusagen, welche Daten und Programmanweisungen als nächstes benötigt werden, diese Daten aus dem RAM zu verschieben und sie bei Bedarf immer näher an die CPU heranzuführen. Diese Cache-Größen reichen typischerweise von 1 MB bis 32 MB, abhängig von der Geschwindigkeit und der beabsichtigten Verwendung des Prozessors.

Der Level 1 Cache ist der CPU am nächsten. In unserer CPU gibt es zwei Arten von L1-Cache., L1i ist der Befehls-Cache und L1d ist der Daten-Cache. Cache-Größen der Stufe 1 reichen normalerweise von 64 KB bis 512 KB.

Speicherverwaltungseinheit

Die Speicherverwaltungseinheit (MMU) verwaltet den Datenfluss zwischen Hauptspeicher (RAM) und CPU. Es bietet auch Speicherschutz in Multitasking-Umgebungen und Konvertierung zwischen virtuellen Speicheradressen und physischen Adressen erforderlich.

CPU-Takt und Steuereinheit

Alle CPU-Komponenten müssen synchronisiert werden, um reibungslos zusammenzuarbeiten., Die Steuereinheit führt diese Funktion mit einer durch die Taktrate bestimmten Rate aus und ist verantwortlich für die Steuerung der Operationen der anderen Einheiten unter Verwendung von Zeitsignalen, die sich über die CPU erstrecken.

Random Access Memory (RAM)

Obwohl der RAM oder Hauptspeicher in diesem Diagramm und im nächsten Diagramm nicht wirklich Teil der CPU ist. Seine Funktion besteht darin, Programme und Daten so zu speichern, dass sie einsatzbereit sind, wenn die CPU sie benötigt.

Funktionsweise

CPUs arbeiten an einem Zyklus, der von der Steuereinheit verwaltet und vom CPU-Takt synchronisiert wird., Dieser Zyklus wird als CPU-Befehlszyklus bezeichnet und besteht aus einer Reihe von Fetch/Decode/Execute-Komponenten. Die Anweisung, die statische Daten oder Zeiger auf variable Daten enthalten kann, wird abgerufen und in das Befehlsregister eingefügt. Der Befehl wird decodiert und alle Daten werden in die A-und B-Datenregister eingefügt. Der Befehl wird mit den Registern A und B ausgeführt, wobei das Ergebnis in den Akkumulator eingegeben wird. Die CPU erhöht dann den Wert des Befehlszeigers um die Länge des vorherigen und beginnt erneut.

Der grundlegende CPU-Befehlszyklus sieht folgendermaßen aus.,

Bild

Abbildung 3: Der Basis-CPU-Anweisung Zyklus.

Das Bedürfnis nach Geschwindigkeit

Obwohl die grundlegende CPU gut funktioniert, können CPUs, die in diesem einfachen Zyklus ausgeführt werden, noch effizienter verwendet werden. Es gibt mehrere Strategien zur Steigerung der CPU-Leistung, und wir betrachten zwei von ihnen hier.

Aufladen des Befehlszyklus

Ein Problem, auf das frühe CPU-Designer stießen, war Zeitverschwendung in den verschiedenen CPU-Komponenten., Eine der ersten Strategien zur Verbesserung der CPU-Leistung bestand darin, die Teile des CPU-Befehlszyklus zu überlappen, um die verschiedenen Teile der CPU vollständiger zu nutzen.

Wenn beispielsweise der aktuelle Befehl decodiert wurde, wird der nächste abgerufen und in das Befehlsregister eingetragen. Sobald dies geschehen ist, wird der Befehlszeiger mit der Speicheradresse des nächsten Befehls aktualisiert. Die Verwendung überlappender Anweisungszyklen ist in Abbildung 4 dargestellt.,

Bild

Abbildung 4: Die CPU-Anweisung Zyklus mit überlappung.

Dieses Design sieht gut und glatt aus, aber Faktoren wie das Warten auf E/A können den Fluss stören. Wenn die MMU nicht über die richtigen Daten oder Anweisungen im Cache verfügt, muss sie die richtigen finden und auf die CPU verschieben, was einige Zeit dauern kann. Bestimmte Anweisungen erfordern auch mehr CPU-Zyklen als andere, was die reibungslose Überlappung beeinträchtigt.

Dennoch ist dies eine leistungsstarke Strategie zur Verbesserung der CPU-Leistung.,

Hyperthreading

eine Weitere Strategie zur Verbesserung der CPU-Leistung hyperthreading. Hyperthreading lässt einen einzelnen Prozessorkern wie zwei CPUs arbeiten, indem zwei Daten-und Anweisungsströme bereitgestellt werden. Das Hinzufügen eines zweiten Befehlszeigers und eines Befehlsregisters zu unserer hypothetischen CPU, wie in Abbildung 5 gezeigt, bewirkt, dass es wie zwei CPUs funktioniert und während jedes Befehlszyklus zwei separate Befehlsströme ausführt. Wenn ein Ausführungsstrom während des Wartens auf Daten zum Stillstand kommt—wiederum sind Anweisungen auch Daten -, setzt der zweite Ausführungsstrom die Verarbeitung fort., Jeder Kern, der Hyperthreading implementiert, entspricht zwei CPUs in seiner Fähigkeit, Anweisungen zu verarbeiten.

Image

Abbildung 5: Ein konzeptionelles Diagramm einer CPU mit Hyperthreading.

Denken Sie daran, dass dies ein sehr vereinfachtes Diagramm und eine Erklärung unserer hypothetischen CPU ist. Die Realität ist viel komplexer.

Mehr Terminologie

Ich bin auf viele verschiedene CPU-Terminologien gestoßen., Um die Terminologie etwas expliziter zu definieren, betrachten wir die CPU selbst mit dem Befehl lscpu.

Der oben gezeigte Intel-Prozessor ist ein Paket, das an einen einzigen Sockel auf dem Motherboard angeschlossen wird. Das Prozessorpaket enthält sechs Kerne. Jeder Kern ist zum Hyperthreading fähig, sodass jeder zwei gleichzeitige Threads für insgesamt 12 CPUs ausführen kann.

Meine Definitionen:

  • Core-Ein Kern ist die kleinste physische Hardwareeinheit, die die Aufgabe der Verarbeitung ausführen kann. Es enthält ein ALU und ein oder zwei Sätze von Stützregistern., Der zweite Satz von Registern und unterstützenden Schaltkreisen ermöglicht Hyperthreading. Ein oder mehrere Kerne können zu einem einzigen physischen Paket kombiniert werden.
  • CPU-Eine logische Hardwareeinheit, die einen einzelnen Ausführungsthread verarbeiten kann. Die moderne Verwendung des Begriffs zentrale Verarbeitungseinheit bezieht sich auf die Gesamtzahl der Threads, die ein Prozessorpaket gleichzeitig ausführen kann. Ein Single-Core-Prozessor, der kein Hyperthreading unterstützt, entspricht einer einzelnen CPU. In diesem Fall sind CPU und Core gleichbedeutend., Ein hyperthreading-Prozessor mit einem einzigen Kern ist das funktionale äquivalent von zwei CPUs. Ein Hyperthreading-Prozessor mit acht Kernen ist das funktionale Äquivalent von 16 CPUs.
  • Paket-Die physische Komponente, die einen oder mehrere Kerne enthält, wie in Abbildung 1 oben gezeigt.
  • Prozessor-1) Ein Gerät, das Programmanweisungen verarbeitet, um Daten zu manipulieren. 2) Häufig als synonym für Paket.,
  • Sockel-Manchmal als ein anderes Synonym für Paket verwendet, aber es bezieht sich genauer auf den physischen Sockel auf dem Motherboard, in den das Prozessorpaket eingefügt wird.

Die Begriffe socket, processor und package werden häufig synonym verwendet, was zu Verwirrung führen kann. Wie wir aus den obigen lscpu Befehlsergebnissen sehen, liefert Intel uns eine eigene Terminologie, und ich halte dies für die maßgebliche Quelle., In Wirklichkeit verwenden wir alle diese Begriffe auf verschiedene Arten, aber solange wir uns an einem bestimmten Punkt verstehen, ist es wirklich wichtig.

Beachten Sie, dass der obige Prozessor über zwei Level 1-Caches mit jeweils 512 KB verfügt, einen für Anweisungen (L1i) und einen für Daten (L1d). Der Level 1-Cache ist der CPU am nächsten und beschleunigt die Dinge, damit Anweisungen und Daten zu diesem Zeitpunkt getrennt sind. Level 2 und Level 3 Caches sind größer, aber Anweisungen und Daten koexistieren in jedem.

Was bedeutet das alles?

Gute Frage., In den frühen Tagen von Mainframes hatte jeder Computer nur eine einzige CPU und war nicht in der Lage, mehr als ein Programm gleichzeitig auszuführen. Der Mainframe kann die Gehaltsabrechnung, dann die Bestandsbuchhaltung, dann die Kundenabrechnung usw. ausführen, aber es kann jeweils nur eine Anwendung ausgeführt werden. Jedes Programm musste beendet werden, bevor der Systembetreiber das nächste starten konnte.

Einige frühe Versuche, mehrere Programme gleichzeitig auszuführen, verfolgten einen einfachen Ansatz und zielten auf eine bessere Auslastung einer einzelnen CPU ab., Zum Beispiel wurden program1 und program2 geladen, und program1 lief, bis es blockiert war und auf E/A wartete. Zu diesem Zeitpunkt lief program2, bis es blockiert wurde. Dieser Ansatz wurde als Multi-Processing bezeichnet und half, wertvolle Computerzeit vollständig zu nutzen.

Frühe Multitaskingversuche führten dazu, dass der Ausführungskontext einer einzelnen CPU sehr schnell zwischen den Ausführungsströmen mehrerer Tasks umgeschaltet wurde. Diese Praxis ist kein echtes Multitasking, wie wir es verstehen, da in Wirklichkeit nur ein einziger Ausführungsthread gleichzeitig verarbeitet wird. Es wird richtiger Time-Sharing genannt.,

Moderne Computer, von Smartwatches und Tablets bis hin zu Supercomputern, unterstützen echtes Multitasking mit mehreren CPUs. Mehrere CPUs ermöglichen es Computern, viele Aufgaben gleichzeitig auszuführen. Jede CPU führt ihre eigenen Funktionen gleichzeitig mit allen anderen CPUs aus. Ein Acht-Kern-Prozessor mit Hyperthreading (dh 16 CPUs) kann 16 Aufgaben gleichzeitig ausführen.

Letzte Gedanken

Wir haben uns eine konzeptualisierte und vereinfachte CPU angesehen, um ein wenig über Strukturen zu lernen. Ich habe in diesem Artikel kaum die Oberfläche der Prozessorfunktionalität überflogen., Sie können mehr erfahren, indem Sie die eingebetteten Links zu den von uns untersuchten Themen verwenden.

Denken Sie daran, dass die Diagramme und Beschreibungen in diesem Artikel rein konzeptionell sind und keine tatsächliche CPU darstellen.

Im nächsten Teil dieser Serie werde ich RAM und Festplatten als verschiedene Speichertypen betrachten und warum jeder für moderne Computer notwendig ist.