Was ist der Unterschied zwischen einem Hardwareregister und einem Speicherregister?

9055

Das war rätselhaft, also werde ich alles hier auslegen. Anscheinend können Sie über MMIO über eine bestimmte speicherzugeordnete Adresse auf externe Geräte zugreifen, die dann zu diesem Gerät selbst (durch ein Schreib-, Befehlspaket usw.) umgeleitet wird. Ich habe jedoch gemischte Beschreibungen von beiden Hardwareregistern (z. B. einem CPU- / GPU-Register oder sogar Soundchips) und von Speicherzuordnungsregistern, die austauschbar verwendet werden, gehört. Sind sie dasselbe?

Wenn Sie ein "memory-mapped register" sagen, beziehen Sie sich nicht auf die Adresse, von der aus ein Datenbyte zu einer bestimmten Adresse innerhalb dieses Geräts umgeleitet wird (z. B. theoretisch: Die 0x500-Adresse der GPU ist für das Register TEXTURE_BUFFER). Ein Speichergerät kann jedoch kein physisches Register im RAM zuordnen.

Was ist also im Grunde der Unterschied zwischen einem Speicherregister und nur einem Hardwareregister?

7
Wenn diese Frage nicht geeignet ist, schlage ich vor, diese zu http://cs.stackexchange.com/ zu migrieren oder das Poster dort zu veröffentlichen. barlop vor 10 Jahren 0

3 Antworten auf die Frage

2
Daniel R Hicks

Memory-Mapped-I / O- und Memory-Mapped-Register sind nicht dasselbe und nicht so eng miteinander verbunden.

Memory-Mapped I / O wurde beispielsweise in frühen PCs verwendet, bei denen ein Teil des RAM-Adressraums dem Anzeigepuffer zugeordnet wurde. (In einigen Produkten wurde tatsächlich normaler RAM-Speicher für den Anzeigepuffer verwendet, statt den Puffer auf der Anzeigeadapterkarte zu haben.) In anderen Fällen würde ein Hardwaregerät wie ein Plattenlaufwerk-Controller eine speicherzugeordnete Adressierung zum Einstellen / Lesen seiner Steuerung verwenden registriert. (Und ich würde vermuten, dass moderne Grafikkarten immer noch den Anzeigespeicher in den Adressraum des Grafikprozessors abbilden, obwohl ich nicht weiß, dass dies eine Tatsache ist.)

"Memory-mapped register" können mehrere Dinge bedeuten. Ein Beispiel wäre das obige Beispiel des Plattenlaufwerk-Controllers mit speicherzugeordneten Steuerregistern. Ein anderer, ganz anderer Fall wäre ein Prozessor, dessen Register sich tatsächlich im RAM befinden. Dies war bei Prozessoren der frühen 50er bis frühen 70er Jahre ziemlich üblich, da sie die Anzahl der Teile erheblich reduzierten und einige "clevere" Programmierpraktiken zuließen. In einigen Fällen war der Prozessor in zwei Modellen verfügbar, eines mit Registern mit Speicherzuordnung und das andere mit (schnelleren) "Hardware" -Registern.

Und in einigen Fällen war es unklar, was ein Register war und was nicht, wie bei den "Stack" -Maschinen von Burroughs, bei denen ein "Stack" anstelle von Standardregistern verwendet wurde (mit, IIRC, verschiedenen Schemata für " "Shadowing" der Register im RAM).

2
LawrenceC

Auf Speicherregister zugeordnete Hardwareregister wird wie ein RAM zugegriffen. Alle CPUs verfügen über spezifische Anweisungen zum Lesen / Schreiben von RAM, und diese gleichen Anweisungen werden für den Zugriff auf Speicherregister verwendet.

Hardware-Register müssen im Allgemeinen nicht speicherzugeordnet sein, dies ist einfach eine gängige Konvention.

x86 stellt zwei Adressräume bereit, in denen zwei getrennte Befehlsgruppen zum Lesen und Schreiben verwendet werden - der erste ist RAM oder Speicherplatz (alle MOVBefehle), der zweite ist der E / A-Bereich (mit den Anweisungen INund OUT). Auf x86 können Hardwareregister in beiden Bereichen angezeigt werden.

Möglicherweise müssen Sie auch eine Indirektionsebene durchlaufen, um ein Hardware-Register zu erreichen. Ein Gerät kann nur einen "Port" im Speicher oder E / A-Bereich freigeben. Sie müssen dann eine Registernummer an die Adresse schreiben und dann die Daten, die Sie tatsächlich an eine andere Adresse schreiben möchten. Das Schreiben erfolgt dann. Der alte 8563 VDC im Commodore 128 hat auf diese Weise funktioniert. Das CMOS-RAM und einige PCI-Register funktionieren auch so.

CPU-Hardwareregister sind natürlich nicht speicherbelegt (nicht auf x86 oder einer anderen üblichen CPU), das ist ein anderes Beispiel für ein Hardwareregister.

Moderne CPUs haben "modellspezifische Register" (MSRs), und diese werden mit ihren eigenen Anweisungen ( RDMSR, WRMSR) gelesen / geschrieben . Andere CPU - Register haben ihren eigenen Befehl ( LGDT, MOV xx, CR2der Grund EAX / RAX, etc.)

-1
barlop

Meine fundierte Vermutung basiert auf etwas, das der Dozent für Informatik aus einem grundlegenden Buch erzählt hat, aber es stimmt mit dem überein, was diese Wikipedia-Seite auf MMIO sagt. Die CPU weiß nicht, in welches Gerät sie schreibt. Soweit es sich um RAM handelt, kann es sich auch um RAM-Speicher handeln. Einige Geräte verwenden einen bestimmten RAM-Speicherplatz. Ich vermute, das ist, was Hardware bedeutet. Es kann aber einen Speicherplatz im Hardwaregerät selbst geben, da muss wohl tatsächlich .. die Daten übertragen werden. Die CPU muss nicht warten, dass sie an die Stelle im RAM schreibt, die einem Register des Devies zugeordnet ist. Ein Register ist ein Speicherplatz in der CPU oder in einem Hardwaregerät. nicht im Widder

Um genauer auf Ihre Frage einzugehen. Ein Register befindet sich in der CPU oder in einem Hardware-Peripheriegerät. Nicht im RAM / Hauptspeicher. Der Speicherplatz im RAM / Hauptspeicher wird nur als Speicherort und nicht als Register bezeichnet. Ein Speicherort in einer CPU oder einem Peripheriegerät wird im Allgemeinen nicht als Speicherort oder Speicherort bezeichnet. Er wird immer als Register bezeichnet. Dies ist sein spezieller und richtiger Name. Wenn ein Register auf einen Speicher abgebildet wird, da zweifellos viele Register für Hardwareperipheriegeräte vorhanden sind, wäre ich mir ziemlich sicher, dass dies mit einem Speicherregister gemeint ist.

Wenn also ein Hardware-Register nicht speicherbelegt ist. Wenn beispielsweise die CPU direkt in das Register schreibt, wird es nicht speicherbelegt. Aus diesem Wikipedia-Artikel scheint es, dass, wenn sich diese Adressen in einem speziellen Bereich befinden und sie spezielle Pins oder einen speziellen Bus benötigen, die Speicherorte möglicherweise im Speicher sind, nicht jedoch MMIO, nicht im Speicher zugeordnet.

Betrachten Sie diese Wikipedia-Seite. PMIO, dh es wird davon ausgegangen, dass es sich nicht um Speicher handelt. Ist, wenn CPU-Register nicht regulären Speicherplätzen zugeordnet werden, sondern einem speziellen Adressraum. Anstelle eines Allzweck-CPU-Registers, das in ein Gerät oder einen Speicher schreiben kann, hängt davon ab, welche Adresse auf den Adressbus gesetzt wird. Mit PMIO (dh nicht einem Speicherregister) wird das Register einem gerätespezifischen Speicherplatz zugeordnet, an dem sie einen Port anrufen.