PCI-BAR-Speicheradressen

Schnelle Frage, ich habe die OSDev-Wiki-Seite zu PCI gelesen und es heißt folgendes -

Basisadressenregister (oder Balken) können verwendet werden, um vom Gerät verwendete Speicheradressen oder Offsets für Portadressen zu speichern. In der Regel müssen sich Speicheradressleisten im physischen RAM befinden, während E / A-Speicherleisten an jeder Speicheradresse (auch außerhalb des physischen Speichers) vorhanden sein können.`

Ich verstehe nicht, wo es memory address BARs need to be located in physical ram sagt. Der springende Punkt von MMIO ist, dass es bekommt eine Speicheradresse zugewiesen, so dass es an das Gerät und nicht in physischen RAM geroutet werden. Was bedeutet es, wenn es sich im physischen RAM befinden muss?

Wäre es nicht nur eine Adresse zwischen dem 3GB-4GB-Adressraum, unabhängig davon, wie viel physischer RAM installiert ist?

Ist dies ein Fehler auf der OSDev-Site oder habe ich ihn falsch verstanden?

Link - Etwa auf halber Strecke, unter der Überschrift Basisadressregister

Author: Cfinley, 2014-04-26

1 answers

Ich glaube, hier gibt es einige Verwirrung, da es einen Unterschied zwischen E/A-und Nicht-E / A-Geräten gibt.
Aus wikipedia " Memory-mapped I/O (MMIO) :

Speicher-zugeordnete E / A verwendet den gleichen Adressbus, um sowohl Speicher-als auch E/A-Geräte anzusprechen-die speicher und Register der E / A-Geräte werden zugeordnet (zugeordnet mit) - Adresswerte. Wenn also auf eine Adresse von der CPU zugegriffen wird, ist es kann sich auf einen Teil des physischen Arbeitsspeichers beziehen, kann sich aber auch auf erinnerung an die E / A ger. Somit werden die CPU-Anweisungen verwendet, um auf der Speicher kann auch für den Zugriff auf Geräte verwendet werden. Jedes E / A-Gerät überwacht den Adressbus der CPU und reagiert auf jeden CPU-Zugriff eines diesem Gerät zugewiesene Adresse, die den Datenbus mit dem hardware-Register des gewünschten Geräts. Zur Aufnahme der E/A-Geräte, bereiche der von der CPU verwendeten Adressen müssen für E/A reserviert werden und muss für normalen physischen Speicher nicht verfügbar sein.

Aus Ihrem Artikel :

Basisadressenregister (oder Balken) können zum Speichern von Speicheradressen verwendet werden wird vom Gerät oder Offsets für Portadressen verwendet. Typischerweise Speicher adressleisten müssen sich im physischen RAM befinden, während E / A-Speicherplatz vorhanden ist Balken können sich an jeder Speicheradresse befinden (auch außerhalb des physischen Speichers).

Bild

Das Feld Typ des Speicherraumleistenlayouts gibt die Größe von das Basisregister und wo im Speicher kann es abgebildet werden. Wenn es ein wert von 0x00 dann ist das Basisregister 32 Bit breit und kann zugeordnet werden irgendwo im 32-Bit - Speicherplatz. Ein Wert von 0x02 bedeutet die Basis das Register ist 64 Bit breit und kann an einer beliebigen Stelle im 64-Bit abgebildet werden Speicherplatz (Ein 64-Bit-Basisadressregister verbraucht 2 der Basis adressregister verfügbar).

Daher gibt es keinen Konflikt zwischen den beiden, da alles vom Gerät abhängt. Wenn das Gerät die Speicherreferenz auf dem Bus abfängt, ist die Adresse virtuell. Wenn nicht, dann ist es echte physische Adresse, die verwendet wird, um mit dem Gerät zu kommunizieren (zum Beispiel NVRAM).

In allen Fällen wird jedoch eine echte physische Adresse für E/A-Geräte verwendet, da Computeranweisungen, die darauf verweisen, nur echte Adressen verwenden können. Dieser Speicher kann verschwendet werden, wenn das Gerät Verweise darauf abfängt. Um solche Verschwendung zu vermeiden, wird das Betriebssystem es normalerweise über die echter physischer Speicher (dies verursacht keine Fehler beim schlechten Speicherzugriff, da das Gerät fängt alle Referenzen ab).

Dies ist der Grund für das bekannte Problem von 32-Bit-Windows-Computern scheinbar nicht in der Lage, den gesamten 4 GB Speicher zu verwenden. Der Grund war, dass Windows als 32-Bit-Gerätespeicher mithilfe realer Adressen zugewiesen wurde, was dann für beide Fälle nicht mehr verfügbar war: ob der adressierte Speicher wirklich verwendet wurde, oder unbenutzt, weil vom Gerät abgefangen.

Ein weiterer nützlicher Wikipedia-Artikel ist: PCI-Konfiguration Raum.

 3
Author: harrymc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-04-29 10:54:48