"Prozessorregister" und "IO-Register"

2338
Tim

Ich habe mich gefragt, ob Prozessorregister und IO-Register dasselbe Konzept sind.

Sind sie in der CPU oder in einigen IO-Geräten registriert?

Ich habe IO-Register von dieser Super User-Frage erhalten .

3
Ich würde der Frage ein wenig hinzufügen .. wo sind sie? Prozessor? Gerät? oder einfach nur RAM-Positionen zugeordnet? barlop vor 12 Jahren 0
Ich habe jetzt keine Zeit, eine echte Antwort zu schreiben, aber Register sind Speicherbereiche in der CPU, in denen Daten gespeichert sind, die gerade verarbeitet werden. Ein Typ von Registern sind E / A-Register. AndrejaKo vor 12 Jahren 0
@AndrejaKo Viele sprechen von IO-Registern im Gerät und nicht vom Prozessor. Vielleicht sind sie - im Gerät - (müssen wahrscheinlich sein), aber sind sie manchmal oder immer im Prozessor? würde der Prozessor nur dasselbe Register verwenden, wenn er etwas für ein Gerät hat, das er verwenden würde, wenn er etwas für den RAM hat. Das könnte ich vermuten, und dann gibt es kein IO-Register in der CPU. Es ist nur das Datenregister MBR / MDR (Speicherpuffer / Datenregister). Der, von dem der Datenbus liest. barlop vor 12 Jahren 0
@ barlop Sie haben Recht, die CPU verwendet die gleichen Register, wenn sie etwas für ein Gerät hat, als wenn sie etwas für den Arbeitsspeicher hat. Warum ist das? Weil es auf dieselbe Weise auf sie zugreift! Manchmal ordnen sie Hardware der tatsächlichen Speicherzuordnung zu oder verwenden eine andere "Hardwarezuordnung" mit anderen Anweisungen. ABER, wie Sie sagten, sie verwenden dieselben Register in der CPU, so dass es keine "spezifischen" E / A-Register gibt. Breakthrough vor 12 Jahren 2

3 Antworten auf die Frage

4
Breakthrough

Sie können das Konzept eines E / A-Registers mit einem generischen Hardwareregister vergleichen, da ein Register ein beliebiger Begriff ist, der für einen digitalen Speicherbereich verwendet wird. Ein Register kann als Akkumulator fungieren, Ausführungsinformationen enthalten, einen Eingabe- / Ausgabepuffer zwischen Geräten bereitstellen usw. Dies bedeutet auch, dass ein Prozessorregister nur eine Art Hardwareregister ist.

Ein E / A-Register ist also auch eine Abstraktion eines Registers - es enthält Zwischendaten, die sich zwischen Komponenten bewegen. Prozessoren nicht haben spezifisches I / O - Register, sondern vielmehr verschiedene generische Register, die die gleiche Aufgabe erfüllen können (die dazu verwendet werden, beispielsweise wenn das System verwendet Memory Mapped I / O ). Diese werden verwendet, um einen gemeinsamen Schnittstellenbus zwischen der CPU und dem Speicher des Systems bereitzustellen, im Fall von MMIO jedoch den Zugriff auf den Speicher externer Geräte außerhalb des eigentlichen Adressbusses zulassen.

Wie würde ein Programmierer dies tatsächlich tun? Sie müssten bestimmen, wie das externe Gerät auf den Adressbus des Systems abgebildet wird, und dann eines der verschiedenen x86-Register verwenden, um die Adresse (in einem Index- / Zeigerregister) zu speichern. Dieses Register könnte dann (mit Maschinenbefehlen ) verwendet werden, um Daten von einem anderen Register im Prozessor zu einem Register im Gerät zu übertragen.

Wenn die CPU MMIO nicht unterstützt (oder der Programmierer entscheidet, sie nicht zu verwenden), können im Fall von x86 auch spezielle Anweisungen für die E / A von einem Port (der im Wesentlichen ein anderer Bus ist) vorhanden sein. Diese Anweisungen ( INund OUT) funktionieren ähnlich wie die MOVAnweisungen - sie verwenden sogar dieselben Prozessorregister. Der einzige Unterschied besteht darin, was die Adresse in den Index- / Zeigerregistern bedeutet (da diese Register eine andere E / A-Adresszuordnung verwenden ).


Deshalb sage ich, dass E / A-Register eine Abstraktion von anderen CPU-Registern sind - sie sind eins in derselben Sache. Die Daten bewegen sich immer noch in den Prozessor hinein und aus ihm heraus in dieselben Register, unabhängig davon, ob sie für Zwischenergebnisse, für die Datenübertragung zum / vom RAM oder für den Zugriff auf externe Hardware verwendet werden.

Abhängig vom Motherboard-Layout kann eine CPU über den eigentlichen Adressbus selbst oder einen anderen Bus, der mit einem Port der CPU verbunden ist, auf den Speicher externer Geräte zugreifen. All dies wird jedoch normalerweise von der Northbridge des Motherboards für den Speicherzugriff und von der Southbridge für den Peripheriezugriff (z. B. Videokarten, Maus / Tastatur) geregelt .

Wenn Sie mit dem DMA- Konzept vertraut sind, können externe Peripheriegeräte Register für den E / A-Zweck des Computers besitzen, die speziell für E / A-Zwecke bestimmt sind. Beachten Sie, dass DMA grundsätzlich jeden CPU-Eingriff umgeht, sodass das Konzept eines Prozessorregisters hier nicht anwendbar ist.


Schlusswort: Jedes Gerät in Ihrem Computer verfügt über ein Register, da kein Gerät direkt an die CPU angeschlossen ist. Wenn dies der Fall wäre, würden Sie CPU-Taktzyklen vergeuden, die die Daten auf dem Bus halten, bis das Gerät genügend Zeit hat um es zu benutzen (die CPU hat normalerweise die schnellste Uhr in jedem System). Dies ist nur ein Grund, warum Geräte einen Ort zum Speichern von Daten benötigen, bevor sie damit arbeiten können - und das ist im Wesentlichen alles, was ein Register ist.

2
LawrenceC

Prozessorregister - In der Regel muss sich die CPU in einem ihrer Register befinden.

Zum Beispiel, schauen Sie sich diese . Es sind die verschiedenen Formen der Intel x86- ADDAnweisung. Sie werden feststellen, dass Sie zwei Register zusammen hinzufügen können, oder ein Register zusammen mit dem Inhalt eines Speicherplatzes hinzufügen ("akkumulator" ist nur ein anderes Register. "Sofort" bedeutet nur, dass sich die Daten direkt am Speicherplatz befinden, oder "sofort" "nach dem eigentlichen ADD - Opcode). Es gibt keine ADD mem,mem.

RISC-CPUs wie ARM sind noch weniger flexibel. Daten aus dem Speicher muss immer in ein Register als separaten Vorgang vor der CPU kopiert werden kann, wie alles tun ADD, SUBusw. zu. Sie haben viel mehr Register, um das wieder gut zu machen.

E / A-Register - Im Allgemeinen muss etwas mit einer Operation, die ein E / A-Chipsatz oder ein Gerät ausführt, in einem seiner Register stehen.

Zum Beispiel, schauen Sie sich diese . Es ist Detail über die Standard-VGA- "CRTC-Register". Von besonderem Interesse sind die Register "Start Address High" und "Start Address Low". Die Werte in diesen Registern geben dem VGA an, wo er mit dem Lesen des Speichers beginnen muss, um eine Anzeige zu rendern.

Es gibt viele Möglichkeiten, E / A-Register von einer CPU aus zugänglich zu machen. Normalerweise ist es nicht wie oben bei den Prozessorregistern. Verschiedene Methoden umfassen:

  • Eine Möglichkeit besteht darin, das E / A-Gerät so zu erstellen, dass es auf Hardwareebene genauso wie RAM reagiert, jedoch nur an bestimmten Adressen. Lese- / Schreibvorgänge an diese Adressen gehen nicht in den RAM-Speicher, sondern das E / A-Gerät. E / A-Geräte können dann ihre Register an bestimmten Adressen zugänglich machen. Die CPU liest oder schreibt dann die Register mit den gleichen, die sie für den RAM-Speicher verwendet. Sehr häufig bei 8-Bit- und ARM-Architekturen.
  • x86 hat spezielle Anweisungen INund OUTAnweisungen für E / A. Diese geben Adressen an, aber keine, mit denen ein RAM verbunden werden kann. E / A-Geräte können eine Verbindung zu diesen Adressen herstellen (normalerweise als "Ports" bezeichnet, die nicht mit TCP-Ports zu verwechseln sind) und ihre Register auf diese Weise zugänglich machen.

Wenn Sie mit dem Beispiel der VGA-CRTC-Register weiterfahren, wie oben unter "I / O-Ports" erläutert, sind Sie nun mit dem Wissen ausgestattet, dies zu verstehen, und verstehen, dass OUTdie CPU durch das Ausgeben bestimmter Anweisungen den Wert in der I / VGA des VGA ändert. O-Register, das vom VGA-Chipsatz beibehalten und verwendet wird.

Nicht alle E / A-Geräte verfügen über Register. Einige sind wirklich einfach und benötigen nur ein Signal, um ihr Ding auszuführen, und auch das "Lesen" des Geräts meldet nur den aktuellen Status. Der alte PC "Game Port" ist ein Beispiel. Es gibt wirklich keine Speicherung von Daten, daher ist es technisch möglicherweise nicht korrekt, sie als Register zu bezeichnen. Die meisten technischen Dokumentationen machen diese Unterscheidung jedoch nicht.

2
A Dwarf

Konzeptionelle E / A-Register und Prozessorregister sind dasselbe. Sie sind beide Datenhalteeinheiten für Verarbeitungsvorgänge.

Der Unterschied ist der Ort. E / A-Register und CPU-Register gehören alle zur selben Familie. Hardware-Register. CPU registriert sich live in der CPU, E / A-Register außerhalb der CPU auf den digitalen Prozessoren Ihrer E / A-Geräte.

Für detaillierte Informationen: Hardware-Register, werden Hardware-Register im Allgemeinen unter Angabe ihrer verschiedenen Arten erläutert.

Ich würde hinzufügen, Speicherplätze (Hauptspeicher / RAM-Speicherplätze) sind auch Datenspeichereinheiten für Verarbeitungsvorgänge, werden aber nicht als Register bezeichnet, oder? barlop vor 12 Jahren 0
Nun, wenn Sie sich strikt darauf konzentrieren wollen, sind Speicherzellen Register. A Dwarf vor 12 Jahren 0
@ Ein Zwerg vielleicht in einem beschreibenden Sinn, aber was die Terminologie angeht, glaube ich nicht, dass sie Register genannt werden. barlop vor 12 Jahren 0
Genau. Sie sind nicht :) A Dwarf vor 12 Jahren 1