2017-11-15 4 views
1

Ich habe einige Handbücher über Seitenverzeichnisse und Seitentabellen gelesen und bin immer noch sehr verwirrt über diese Konzepte. Zum Beispiel here Ich fand, dass nur eine einzige Ebene Paging Speicherverschwendung ist. So verwenden wir in x86 Architektur 2-Level-Paging.Seitenverzeichnisse verstehen

cr3 --> PageDirectory --> PageTable --> Page 

Betrachten Sie die folgende lineare Adresse.

01001010101 1010101101 10101110101010 
page tbl  page  offset 

Mit page tbl Bits finden wir die physische Adresse des Seitenverzeichniseintrags. PD = cr3 + L * (page tbl) enthält die physikalische Adresse der Seitentabelle PT. Jetzt suchen wir nach unserer Seite P = PT + L * page. Also hatten wir in einer Ebene eine Seitentabelle 4MiB. Jetzt haben wir 1024 Seitentabellen 4KiB = 4MiB insgesamt. Sparmodus nicht sehen.

Was habe ich vermisst?

+0

4 MB zusammenhängender physischer Speicher pro Prozess ist eigentlich ziemlich viel. Auf meinem Linux-Desktop laufen derzeit 151 User-Space-Prozesse (multi-threaded-Prozesse zählen immer noch zu 1). (Ich habe Kernel-Prozesse ausgeschlossen, weil sie keine eigenen Seitentabellen haben). Das wären 604MiB allein auf Seitentabellen. –

+0

@PeterCordes Ja, irgendwie ... Aber trotzdem, wenn wir alle 1024 Seitentabellen zugeteilt haben, werden wir die gleichen 4MB Speicher für die Seitentabelle haben. Die Sache ist nicht all diese 1024 Seitentabellen sind zugeordnet, richtig? –

+0

Ja, genau. Mein Kommentar macht nur zusammen mit @ Fuzs Antwort Sinn: Die Speicherkarten der meisten Prozesse sind sehr spärlich, besonders in einem 64-Bit-System. –

Antwort

3

Normalerweise ist die Seitentabelle nicht voll. Wenn bei einer flachen Seitentabelle nur die ersten und die letzten Einträge benötigt werden, muss immer noch die gesamte Tabelle zugeordnet werden. Bei Seitenverzeichnissen können alle außer der ersten und letzten Seitentabelle weggelassen werden, wodurch viel Speicher gespart wird. Die Gewinne scheinen im heutigen Zeitalter des riesigen RAM klein zu sein, aber es war wirklich eine Menge zurück, wenn Computer insgesamt nur 4 MiB RAM haben.

+0

Klingt vernünftig. Darf ich Sie um etwas Klärung bitten? Wie hier [hier] angegeben (http://wiki.osdev.org/Paging) Wir verwenden nur 20 Bits im Seitenverzeichnis. Ich, dass der Grund ist 4KiB ausgerichtet? Um die gesamte Palette verfügbarer Adressen darzustellen? –

+0

@ St.Antario genau. Nur die oberen 20 Bits der Seitentabellenadresse werden verwendet, die niedrigen 12 Bits werden für die Buchhaltung verwendet. – fuz