2015-04-29 8 views
9

Ich habe den Begriff Adressraum oft in Mikroprozessoren und Mikrocontroller Paradigm gehört. Ich verstehe, dass eine Adresse verwendet wird, um auf einen bestimmten Speicherblock im physischen Speicher (Primary) zu verweisen.Unterschied zwischen Seitentabelle und Seitenverzeichnis

Wenn ich richtig bin und Adressraum ist der Super-Satz von allen solchen Adressen. Recht?

Durch Verwendung von virtuellem Speicher/Paging erweitern wir den Adressraum mit Sekundärspeicher.

In diesem Paradigma, was genau ist eine Seitentabelle, Seitentabelleneintrag und Seitenverzeichnis? Ich verstehe, dass der erste p.memory segmentiert und logisch ist und diese Segmente in Seiten unterteilt sind. Was genau ist eine Seitentabelle? Eine Tabelle mit Pages? Und was ist ein Seitenverzeichnis eine übergeordnete Tabelle von Seitentabellen?

+0

See [osdev.org] (http://wiki.osdev.org/Paging) oder der offiziellen Intel-Handbuch. – Jester

Antwort

18

In der x86-Architektur stellen Seitenverzeichnisse und Seitentabellen zusammen die Zuordnung zwischen virtuellen Adressen (von Anwendungen verwendeten Speicheradressen) und physischen Adressen (tatsächlichen Positionen in der physischen Speicherhardware) bereit.

Eine Seite ist einfach ein zusammenhängender Teil des Speichers. x86 (32-Bit) unterstützt 3 Seitengrößen: 4MB, 2MB und 4KB, wobei letzteres in gängigen Betriebssystemen am häufigsten verwendet wird. Eine Seitentabelle ist ein Array von 1024 * 32-Bit-Einträgen (passend zu einer einzelnen 4-KByte-Seite). Jeder Eintrag zeigt auf die physikalische Adresse einer Seite. Da eine einzelne Seitentabelle nicht in der Lage ist, den gesamten Adressraum allein darzustellen (1024 Einträge * 4 KB = nur 22 Bits Adressraum), benötigen wir eine Seitentabelle der zweiten Ebene: ein Seitenverzeichnis. Ein Seitenverzeichnis besteht ebenfalls aus 1024 * 32-Bit-Einträgen (die wiederum in eine einzelne Seite passen), die jeweils auf eine Seitentabelle zeigen. Wir können jetzt sehen, dass 1024 * 1024 * 4KB = 32-Bits und mit dieser 3-Level-Struktur sind wir in der Lage, den gesamten virtuellen 4GB-Adressraum abzubilden.

Wenn die CPU aufgefordert wird, auf eine virtuelle Adresse zuzugreifen, verwendet sie die 10 höchstwertigen Bits (31:22), um in die Seitenverzeichnistabelle zu indizieren (deren Basisadresse in einem speziellen Register gespeichert ist). Die nächsten 10 Bits höchster Ordnung (21:12) werden zum Indexieren in die Seitentabelle verwendet, auf die der Seitenverzeichniseintrag zeigt. Die niedrigsten 12-Bit-Ordnungen (11: 0) werden schließlich zum Indexieren eines Bytes in der Seite verwendet, auf die der Seitentabelleneintrag zeigt.

In anderen Systemen sind abhängig von der Größe des virtuellen Adressraums und den unterstützten Seitengrößen möglicherweise mehr oder weniger Ebenen der Seitentabelle erforderlich. Zum Beispiel benötigt x86 mit 4MB Seiten nur ein einziges Seitenverzeichnis. Im 64-Bit-Modus mit 4 KB-Seiten wird ein 4-Ebenen-System verwendet: Eine Seitenzuordnungsstufe 4 Tabelle enthält Einträge, die auf eines von vielen Seitenverzeichnissen zeigen.

Die Intel Architectures Developer's Manual hat viel mehr Informationen über das Thema, vor allem in den Kapiteln 3 und 4.

+1

Bedeutet das aber nicht, dass wenn zwei verschiedene Programme versuchen auf die virtuelle Adresse 0x0041FF10 zuzugreifen, sie die gleiche physikalische Adresse bekommen? Die CPU benötigt die gleiche Anzahl von Bits für die Indizierung aus derselben virtuellen Adresse, was in gleiche Indizes übersetzt wird. –

+1

Das Betriebssystem verwaltet normalerweise separate Seitenverzeichnisse und Tabellen für jeden Prozess und stellt unterschiedliche Zuordnungen von virtuellen zu physischen Adressen bereit. Erinnern Sie sich, dass die Basisadresse des aktuellen Seitenverzeichnisses in einem speziellen Register gespeichert ist. Der Wert in diesem Register wird vom OS bei einem Kontextwechsel in einen anderen Prozess geändert. Obwohl die Indizes für Prozess A und Prozess B identisch sind, indexieren sie daher in verschiedene Seitenverzeichnisse. – peterdn

+0

Auf dem Intel x86, das über das CR3-Register gesteuert wird. –