Hauptprozessor
Eine zentrale Verarbeitungseinheit (CPU) ist ein wichtiger Bestandteil jedes Computers. Die CPU sendet Signale zur Steuerung der anderen Teile des Computers, fast so, wie ein Gehirn einen Körper steuert.
Die CPU ist eine elektronische Maschine, die auf einer Liste von zu erledigenden Computeraufgaben, den sogenannten Instruktionen, arbeitet. Sie liest die Liste der Anweisungen und führt jede einzelne der Reihe nach aus (führt sie aus). Eine Liste von Anweisungen, die eine CPU ausführen kann, ist ein Computerprogramm.
Die Taktrate oder Geschwindigkeit der internen Teile einer CPU wird in Hertz (Hz) gemessen. Moderne Prozessoren laufen oft so schnell, dass stattdessen Gigahertz (GHz) verwendet wird. Ein GHz entspricht 1.000.000.000.000 Zyklen pro Sekunde.
Die meisten CPUs, die in Desktop-Computern (Heimcomputern) verwendet werden, sind Mikroprozessoren, die entweder von Intel oder Advanced Micro Devices (gewöhnlich abgekürzt mit AMD) hergestellt werden. Einige andere Unternehmen, die CPUs herstellen, sind ARM, IBM und AMD unter ATI Technologies, das derzeit führend ist. Die meisten ihrer CPUs werden in eingebetteten Systemen für speziellere Dinge verwendet, wie in Mobiltelefonen, Autos, Spielkonsolen oder im Militär.
Eine Pentium-CPU in einem Computer
Typen von CPUs
Im 20. Jahrhundert haben Ingenieure viele verschiedene Computerarchitekturen erfunden. Heutzutage verwenden die meisten Desktop-Computer entweder 32-Bit-CPUs oder 64-Bit-CPUs. Die Befehle in einer 32-Bit-CPU können gut mit Daten umgehen, die 32 Bit groß sind (die meisten Befehle "denken" in 32 Bit in einer 32-Bit-CPU). Ebenso ist eine 64-Bit-CPU gut im Umgang mit Daten, die 64 Bit groß sind (und oft auch gut im Umgang mit 32-Bit-Daten). Die Größe der Daten, die eine CPU am besten handhabt, wird oft als die Wortgröße der CPU bezeichnet. Viele alte CPUs aus den 70er, 80er und frühen 90er Jahren (und viele moderne eingebettete Systeme) haben eine 8-Bit- oder 16-Bit-Wortgröße. Als CPUs in der Mitte des 20. Jahrhunderts erfunden wurden, hatten sie viele verschiedene Wortgrößen. Einige hatten unterschiedliche Wortgrößen für Befehle und Daten. Die weniger populären Wortgrössen wurden später nicht mehr verwendet.
Die meisten CPUs sind Mikroprozessoren. Das bedeutet, dass die CPU nur ein einziger Chip ist. Einige Chips mit Mikroprozessoren enthalten auch andere Komponenten und sind komplette Ein-Chip-"Computer". Dies wird als Mikrocontroller bezeichnet.
Registriert
Wenn die CPU ein Computerprogramm ausführt, muss sie irgendwo die Daten speichern, mit denen die Befehle arbeiten (die Daten, die sie lesen und schreiben). Diese Speicherung wird als Register bezeichnet. Eine CPU hat normalerweise viele Register. Auf Register muss sehr schnell zugegriffen werden können (zum Lesen und Schreiben). Daher sind sie Teil des CPU-Chips selbst.
Erinnerung
Die Speicherung aller Daten in Registern würde die meisten CPUs zu kompliziert (und sehr teuer) machen. Daher speichern Register normalerweise nur die Daten, an denen die CPU "gerade jetzt" arbeitet. Der Rest der vom Programm verwendeten Daten wird im RAM (Speicher) gespeichert. Außer in Mikrocontrollern wird RAM normalerweise außerhalb der CPU in separaten Chips gespeichert.
Wenn die CPU Daten im RAM lesen oder schreiben will, gibt sie eine Adresse zu diesen Daten aus. Jedes Byte im RAM hat eine Speicheradresse. Die Größe der Adressen ist oft gleich der Wortgröße: Eine 32-Bit-CPU verwendet 32-Bit-Adressen usw. Kleinere CPUs, wie 8-Bit-CPUs, verwenden jedoch oft Adressen, die größer als die Wortgröße sind. Andernfalls wäre die maximale Programmlänge zu kurz.
Da die Größe der Adressen begrenzt ist, ist auch die maximale Speichermenge begrenzt. 32-Bit-Prozessoren können normalerweise nur bis zu 4 GB RAM verarbeiten. Dies ist die Anzahl der verschiedenen Bytes, die über eine 32-Bit-Adresse ausgewählt werden können (jedes Bit kann zwei Werte haben - 0 und 1 - und 232 Bytes entsprechen 4 GB). Ein 64-Bit-Prozessor kann möglicherweise bis zu 16 EB RAM verarbeiten (16 Exabyte, etwa 16 Milliarden GB oder 16 Milliarden Milliarden Bytes). Das Betriebssystem kann ihn auf die Verwendung kleinerer Mengen beschränken.
Die Informationen, die im RAM gespeichert sind, sind normalerweise flüchtig. Das bedeutet, dass sie verschwinden, wenn der Computer ausgeschaltet wird.
Cache
Auf modernen Computern ist RAM viel langsamer als Register, so dass der Zugriff auf RAM Programme verlangsamt. Um Speicherzugriffe zu beschleunigen, wird oft ein schnellerer Speichertyp, ein so genannter Cache, zwischen dem RAM und den Hauptteilen der CPU platziert. Der Cache ist in der Regel ein Teil des CPU-Chips selbst und ist pro Byte viel teurer als RAM. Der Cache speichert die gleichen Daten wie der RAM, ist aber normalerweise viel kleiner. Daher passen möglicherweise nicht alle vom Programm verwendeten Daten in den Cache. Der Cache versucht, Daten zu speichern, die wahrscheinlich viel verwendet werden. Beispiele hierfür sind kürzlich verwendete Daten und Daten, die im Speicher nahe an den kürzlich verwendeten Daten liegen.
Oft ist es sinnvoll, einen "Cache für den Cache" zu haben, genauso wie es sinnvoll ist, einen Cache für RAM zu haben. Beim Multi-Level-Caching gibt es viele Caches, die als L1-Cache, L2-Cache usw. bezeichnet werden. Der L1-Cache ist der schnellste (und pro Byte teuerste) Cache und befindet sich "am nächsten" bei der CPU. Der L2-Cache ist einen Schritt entfernt und ist langsamer als der L1-Cache usw. Der L1-Cache kann oft als ein Cache für den L2-Cache usw. angesehen werden.
Busse
Computerbusse sind die Leitungen, die von der CPU zur Kommunikation mit dem RAM und anderen Komponenten im Computer verwendet werden. Fast alle CPUs haben mindestens einen Datenbus - zum Lesen und Schreiben von Daten - und einen Adressbus - zur Ausgabe von Adressen. Andere Busse innerhalb der CPU führen Daten zu verschiedenen Teilen der CPU.
Befehlssätze
Ein Befehlssatz (auch ISA - Instruction Set Architecture genannt) ist eine Sprache, die direkt von einer bestimmten CPU verstanden wird. Diese Sprachen werden auch als Maschinencode oder binär bezeichnet. Sie sagen aus, wie Sie der CPU sagen, dass sie verschiedene Dinge tun soll, wie z.B. Daten aus dem Speicher in ein Register laden oder die Werte von zwei Registern addieren. Jeder Befehl in einem Befehlssatz hat eine Codierung, d.h. der Befehl wird als eine Folge von Bits geschrieben.
Programme, die in Programmiersprachen wie C und C++ geschrieben wurden, können nicht direkt von der CPU ausgeführt werden. Sie müssen in Maschinencode übersetzt werden, bevor die CPU sie ausführen kann. Ein Compiler ist ein Computerprogramm, das diese Übersetzung vornimmt.
Maschinencode ist nur eine Folge von 0 und 1, was es für Menschen schwierig macht, ihn zu lesen. Um ihn besser lesbar zu machen, werden Maschinencode-Programme normalerweise in Assembler geschrieben. Assemblersprache verwendet Text anstelle von 0 und 1: Sie könnten zum Beispiel "LD A,0" schreiben, um den Wert 0 in Register A zu laden. Ein Programm, das Assemblersprache in Maschinencode übersetzt, wird Assembler genannt.
Funktionalität
Hier sind einige der grundlegenden Dinge, die eine CPU tun kann:
- Lesen von Daten aus dem Speicher und Schreiben von Daten in den Speicher.
- Eine Nummer zu einer anderen Nummer hinzufügen.
- Testen Sie, ob eine Zahl größer als eine andere Zahl ist.
- Verschieben einer Zahl von einem Ort zu einem anderen (z.B. von einem Register zu einem anderen oder zwischen einem Register und dem Speicher).
- Zu einer anderen Stelle in der Anweisungsliste springen, aber nur, wenn ein Test wahr ist (z.B. nur, wenn eine Zahl größer als eine andere ist).
Selbst sehr komplizierte Programme können durch die Kombination vieler einfacher Anweisungen wie dieser erstellt werden. Dies ist möglich, weil jede Anweisung eine sehr kurze Zeit braucht, um zu geschehen. Viele CPUs können heute mehr als 1 Milliarde (1.000.000.000) Befehle in einer einzigen Sekunde ausführen. Im Allgemeinen gilt: Je mehr eine CPU in einer bestimmten Zeit tun kann, desto schneller ist sie. Eine Möglichkeit, die Geschwindigkeit eines Prozessors zu messen, ist MIPS (Million Instructions Per Second). Flops (Fließkomma-Operationen pro Sekunde) und die CPU-Taktgeschwindigkeit (gewöhnlich in Gigahertz gemessen) sind ebenfalls Möglichkeiten, um zu messen, wie viel Arbeit ein Prozessor in einer bestimmten Zeit erledigen kann.
Eine CPU besteht aus Logikgattern; sie hat keine beweglichen Teile. Die CPU eines Computers ist elektronisch mit anderen Teilen des Computers, wie der Grafikkarte oder dem BIOS, verbunden. Ein Computerprogramm kann diese Peripheriegeräte durch Lesen oder Schreiben von Zahlen an spezielle Stellen im Speicher des Computers steuern.
Befehls-Pipelines
Jede von einer CPU ausgeführte Anweisung wird normalerweise in vielen Schritten ausgeführt. Dies könnten zum Beispiel die Schritte zur Ausführung einer Anweisung "INC A" (den in Register A gespeicherten Wert um eins erhöhen) auf einer einfachen CPU sein:
- Lesen Sie die Anweisung aus dem Speicher,
- die Anweisung entschlüsseln (herausfinden, was die Anweisung bewirkt), und
- fügen Sie eine zum Register A hinzu.
Verschiedene Teile der CPU tun diese unterschiedlichen Dinge. Oft ist es möglich, einige Schritte aus verschiedenen Anweisungen gleichzeitig auszuführen, was die CPU schneller macht. Beispielsweise können wir eine Anweisung aus dem Speicher zur gleichen Zeit lesen, zu der wir eine andere Anweisung dekodieren, da diese Schritte verschiedene Module verwenden. Man kann sich das so vorstellen, dass viele Befehle "innerhalb der Pipeline" auf einmal ausgeführt werden. Im besten Fall arbeiten alle Module gleichzeitig an verschiedenen Befehlen, aber das ist nicht immer möglich.
Speicherverwaltungseinheiten (MMUs) und virtueller Speicher
Moderne CPUs verwenden häufig eine Speicherverwaltungseinheit (Memory Management Unit, MMU). Eine MMU ist eine Komponente, die Adressen von der CPU in (in der Regel) verschiedene RAM-Adressen übersetzt. Bei der Verwendung einer MMU sind die in einem Programm verwendeten Adressen (normalerweise) nicht die "echten" Adressen, an denen die Daten gespeichert sind. Dies wird als virtueller (das Gegenteil von "realem") Speicher bezeichnet. Einige der Gründe, warum es gut ist, eine MMU zu haben, sind unten aufgeführt:
- Eine MMU kann den Speicher anderer Programme vor einem Programm "verstecken". Dies wird dadurch erreicht, dass keine Adressen in die "versteckten" Adressen übersetzt werden, während das Programm läuft. Das ist gut, weil es bedeutet, dass Programme den Speicher anderer Programme nicht lesen und verändern können, was die Sicherheit und Stabilität verbessert. (Programme können einander nicht "ausspionieren" oder "sich gegenseitig auf die Füße treten").
- Viele MMUs können einige Teile des Speichers nicht beschreibbar, nicht lesbar oder nicht ausführbar machen (d.h. Code, der in diesem Teil des Speichers gespeichert ist, kann nicht ausgeführt werden). Dies kann aus Stabilitäts- und Sicherheitsgründen, aber auch aus anderen Gründen gut sein.
- MMUs ermöglichen es verschiedenen Programmen, unterschiedliche "Ansichten" des Gedächtnisses zu haben. Dies ist in vielen verschiedenen Situationen praktisch. Zum Beispiel wird es immer möglich sein, den "Haupt"-Code eines Programms an der gleichen (virtuellen) Adresse zu haben, ohne mit anderen Programmen zu kollidieren. Es ist auch praktisch, wenn es viele verschiedene Code-Stücke (aus Bibliotheken) gibt, die von Programmen gemeinsam benutzt werden.
- MMUs erlauben es, dass Code aus Bibliotheken bei jeder Programmausführung an verschiedenen Adressen erscheint. Das ist gut, denn wenn man nicht weiß, wo sich die Dinge im Speicher befinden, ist es für Hacker oft schwieriger, Programme dazu zu bringen, schlechte Dinge zu tun. Dies wird als Adressraum-Randomisierung bezeichnet.
- Fortgeschrittene Programme und Betriebssysteme können mit MMUs Tricks anwenden, um zu vermeiden, dass Daten zwischen verschiedenen Speicherorten kopiert werden müssen.
Mehrere Kerne
Mehrkernprozessoren wurden zu Beginn des 21. Jahrhunderts üblich. Das bedeutet, dass sie viele Prozessoren auf dem gleichen Chip eingebaut haben, so dass sie viele Befehle gleichzeitig ausführen können. Einige Prozessoren können bis zu zweiunddreißig Kerne haben, wie der AMD Epyc 7601.
Hersteller
Die folgenden Unternehmen stellen Computer-CPUs her:
- ARM
- Intel
- Fortgeschrittene Mikrogeräte
- MCST
- SRISA
- Sun Mikrosysteme
Weitere Informationen
- Mikroprozessor
- ALU
- Ausführungseinheit
- Fließkomma-Einheit
- Intel
- AMD
Fragen und Antworten
F: Was ist eine CPU?
A: Eine CPU (Central Processing Unit) ist ein wichtiger Teil jedes Computers. Sie sendet Signale, um die anderen Teile des Computers zu steuern, fast so, wie ein Gehirn einen Körper steuert. Die CPU ist eine elektronische Maschine, die mit einer Liste von Anweisungen arbeitet, um bestimmte Aufgaben zu erledigen.
F: Wie funktioniert die CPU?
A: Die CPU liest die Liste der Anweisungen und führt jede einzelne nacheinander aus. Eine Liste von Anweisungen, die eine CPU ausführen kann, ist ein Computerprogramm.
F: In welcher Einheit wird die Taktrate oder Geschwindigkeit einer CPU gemessen?
A: Die Taktrate oder Geschwindigkeit der internen Teile einer CPU wird in Hertz (Hz) gemessen. Moderne Prozessoren laufen oft so schnell, dass stattdessen Gigahertz (GHz) verwendet wird - ein GHz entspricht 1.000.000.000 Zyklen pro Sekunde.
F: Wer sind einige Unternehmen, die CPUs herstellen?
A: Einige Unternehmen, die CPUs herstellen, sind Intel, Advanced Micro Devices (AMD), ARM (kürzlich von Nvidia aufgekauft), IBM und AMD unter ATI Technologies, das derzeit den Markt anführt.
F: Wo werden die meisten CPUs eingesetzt?
A: Die meisten CPUs, die in Desktop-Computern verwendet werden, sind Mikroprozessoren von Intel oder AMD, während die meisten anderen in eingebetteten Systemen für speziellere Dinge wie Mobiltelefone, Autos, Videospielkonsolen oder militärische Anwendungen eingesetzt werden.