Paging — Änderungen 7728 → 7783

Zeile 28: Zeile 28:
 
Die Page Table ist anschließend dafür zuständig, innerhalb „ihrer“ 4 MB die Zuordnung der einzelnen 4K-Pages vorzunehmen. Beim Zugriff auf die Adresse 0x456789 wird also zunächst festgestellt, dass die Pagetable für den Bereich 4 bis 8 MB zuständig ist (0x400000 sind 4 MB), und ihre Adresse im Page Directory nachgeschlagen. Anschließend wird innerhalb der Page Table nachgeschlagen, was die physische Adresse für die Bytes 0x56000 bis 0x56fff dieses 4-MB-Blocks ist. Angenommen, die Page Table ordnet diesen die physische Adresse 0xabcde000 zu, dann liegt der gesuchte Speicher an 0xabcde789.
 
Die Page Table ist anschließend dafür zuständig, innerhalb „ihrer“ 4 MB die Zuordnung der einzelnen 4K-Pages vorzunehmen. Beim Zugriff auf die Adresse 0x456789 wird also zunächst festgestellt, dass die Pagetable für den Bereich 4 bis 8 MB zuständig ist (0x400000 sind 4 MB), und ihre Adresse im Page Directory nachgeschlagen. Anschließend wird innerhalb der Page Table nachgeschlagen, was die physische Adresse für die Bytes 0x56000 bis 0x56fff dieses 4-MB-Blocks ist. Angenommen, die Page Table ordnet diesen die physische Adresse 0xabcde000 zu, dann liegt der gesuchte Speicher an 0xabcde789.
  
 +
Wie die CPU aus einer virtuellen die zugeordnete physikalische Adresse brechnet, soll folgende Grafik zeigen:
 +
[[Datei:Paging_funktionsweise.jpg|700px]]
 +
 +
Das Berechnen erfolgt folgendermaßen:
 +
# Page Directory suchen, anhand der Adresse in CR3
 +
# im Page Directory den Eintrag suchen, dessen Index in Bit 22-31 der virtuellen Adresse steht
 +
# dieser Eintrag zeigt auf eine Page Table
 +
# in dieser Page Table den Eintrag suchen, dessen Index in Bit 12-21 der virtuellen Adresse steht
 +
# dieser Eintrag wiederum zeigt auf eine Page
 +
# in dieser Page die gesuchten Daten suchen, deren Offset innerhalb dieser Page in den Bits 0-11 in der virtuellen Adresse steht
 +
(''Hinweis:'' Bei Schritt 3 kann der Eintrag auch direkt auf einen 4MB Bereich ("Large Page") zeigen, siehe hierzu [[Page Size Extension]])
 
== Einschalten des Paging-Mechanismus ==
 
== Einschalten des Paging-Mechanismus ==
 
Zum Einschalten des Paging-Mechanismus auf der x86-Architektur muss man Bit-31 im CR0-Register setzen. Davor muss aber ein gültiges Page-Directory angelegt und dessen physische Adresse im CR3-Register abgelegt worden sein.
 
Zum Einschalten des Paging-Mechanismus auf der x86-Architektur muss man Bit-31 im CR0-Register setzen. Davor muss aber ein gültiges Page-Directory angelegt und dessen physische Adresse im CR3-Register abgelegt worden sein.