2012-09-23 10 views
5

Ich lese das Buch "Understanding Linux Kernel" von Bovet und Cesati. Im zweiten Kapitel, unter "Paging in Linux", erwähnt der Autor, wie mit 32 Architekturen, bei denen PAE nicht aktiviert ist, die mittleren und oberen Verzeichnisse eliminiert werden. Ich habe Schwierigkeiten, dem zu folgen, was der Autor meint.Linux Kernel Memory Management Paging Levels

Sie waren in ihrer Behandlung locker und macht nicht viel intuitiven Sinn.

Für 32-Bit-Architekturen ohne physische Adresserweiterung sind zwei Paging-Ebenen ausreichend. Linux beseitigt im Wesentlichen die Felder "Oberes Verzeichnis" und "Seitenmittelverzeichnis", indem es sagt, dass sie null Bits enthalten. Die Positionen des Page Directory und des Page Middle Directory in der Reihenfolge der Zeiger werden jedoch beibehalten, damit derselbe Code auf 32-Bit- und 64-Bit-Architekturen funktionieren kann. Der Kernel behält eine Position für das Page Directory und das Page Middle Directory bei, indem er die Anzahl der Einträge in 1 setzt und diese beiden Einträge in den richtigen Eintrag des Page Global Directory einbindet.

Kann jemand das auf eine schmackhaftere Art erklären?

+0

Okay, also habe ich ein wenig mehr nachgedacht und bitte sehen, ob das Sinn macht. Also, im Grunde haben Sie diese MMU-Hardware, die durch die Seitenhierarchie auf TLB-Miss geht, für die im Wesentlichen der einzelne Eintrag PMD und PUD nicht beachten. Für den Rest des Kernel-Codes müssen wir jedoch eine einheitliche Schnittstelle des 4-Level-Paging bereitstellen.Wir haben also eine PUD für einen einzelnen Eintrag und eine für einen einzelnen Eintrag, von denen jeder emuliert wird, um den exakt gleichen Wert des entsprechenden PGD-Eintrags für diese Adresse zu enthalten. – subramanian

+0

Ja. Auf Prozessoren ohne PAE erwartet die MMU nur die unteren zwei Tabellen, aber der Kernel erwartet alle vier, so dass die oberen zwei mit nur einem Eintrag erstellt werden müssen. Stellen Sie sicher, dass Sie Ihren Kommentar als Antwort hinzufügen, wenn Sie können. – ughoavgfhw

+0

Ich denke meine Erklärung hatte Löcher Linuxios erklärt es mir klar. Also werde ich seine Antwort als richtig markieren. – subramanian

Antwort

2

Nun, ich denke, was bedeutet, dass der Kernel immer 4 Ebenen von Seitentabellen verwendet, die sowohl normale 32 Bit, PAE und Long-Modus aufnehmen können. Ich denke, was sie im Zitat meinen, ist, dass der PM4L und der PDT nur auf eine Länge von einem Eintrag eingestellt sind, der nur auf den nächsten nach unten zeigt. So bedeutet das, dass in normalen 32-Bit, Sie diese:

       /-> Page table 
PM4L -> PDT -> Page Directory --> Page table 
           \-> Page table 

Aber in PAE, erhalten Sie diese:

PM4L -> PDT -> 512 Page Directories -> 1024 Page tables 

Und in Long-Modus, erhalten Sie diese:

PM4L -> 512 PDTs -> 512 Page Directories -> 1024 Page tables 

Aber wegen der 4 Ebenen immer, der Rest des Kernels hat eine einheitliche Schnittstelle über 32 Bits, PAE und Long-Modus.

+0

ah! Jetzt sehe ich wo ich verwirrt war. Das Buch schien so zu erklären, dass die mittleren 2 Tische inaktiv waren. Es schien überhaupt keinen Sinn zu ergeben. Ihre Antwort verdeutlicht, danke! – subramanian

0

Im Moment lese ich das gleiche Buch und ich möchte keine neue Frage stellen, weil diese genau mein Problem anspricht.
Die übliche Abfolge von Tabellen ist die folgende:

PML4 (Linux: PGD) -> PDPT (Linux: PUD) -> PD (Linux: PMD) -> PT 

Im Text wird gesagt, dass zwei Ebenen ausreichend sind, und deshalb ist die PUD und die PMD „eliminiert“ werden, aber jede dieser beiden Tabellen hat eine Länge von eins und wird in der richtigen Reihenfolge der Reihenfolge gehalten.
In meinem Verständnis bedeutet dies, dass der PML4 (PGD) dem PD (PMD) entspricht und aus direkten Zeigern auf den PT besteht. Also werden die PUD und die PMD "übersprungen". Aber mein Verständnis entspricht nicht der richtigen Antwort auf die ursprüngliche Frage.
Und wie wird eine solche Adresse aufgelöst, wenn eine 32-Bit-Anwendung einen Syscall ausführt und in den 64-Bit-Kernelmodus wechselt? In diesem Fall erwartet die MMU vier Ebenen und nicht zwei.
Es ist offensichtlich, dass etwas mit meinem Verständnis nicht stimmt, weil die Dinge nicht so funktionieren können. Hoffentlich konnte jemand etwas klären.