| 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. | ||