Wie können erweitertes (4 MB) und normales (4 KB) Paging koexistieren?

Wie können erweitertes (4 MB) und normales (4 KB) Paging koexistieren?

Auf der x86-Architektur ermöglicht „Extended Paging“ Seitenrahmen (physischer Speicher) von 4 MB statt 4 KB.

Im Buch „Understanding the Linux Kernel, 3rd“ wird im Kapitel 2 „Memory Addressing“, Unterkapitel „Paging in Linux“, Abschnitt „Kernel Page Tables“ Folgendes für die endgültige Kernel-Seitentabelle erklärt, wenn die RAM-Größe weniger als 896 MB beträgt:

[...] der Kernel den RAM durch die Verwendung großer Seiten adressieren kann (siehe den Abschnitt „Erweitertes Paging“ weiter oben in diesem Kapitel).

Allerdings steht im Abschnitt „Erweitertes Paging“ (Unterkapitel „Paging in Hardware“):

Erweitertes Paging besteht parallel zum regulären Paging.

Ich verstehe eigentlich nicht, wie erweitertes und normales Paging koexistieren können. Kann mir bitte jemand diese Fragen erklären:

  • In welchen Fällen verwendet der Kernel 4-MB-Seiten? Oder 4-KB-Seiten?
  • Welche Seitenrahmengröße wird für kmalloc-Operationen verwendet? Für vmalloc?
  • Wenn wir davon ausgehen, dass der anfängliche Code und die anfänglichen Daten (Kernel-Segmente, vorläufige Seitentabellen und 128 KB für dynamische Daten) in die ersten 8 MB RAM passen (wie im Beispiel im Buch), was ist, wenn die tatsächliche Menge an Code und Daten nur 5 MB beträgt: Wird der Kernel 8 - 5 = 3 MB verschwenden?

Antwort1

1. In welchen Fällen verwendet der Kernel 4-MB-Seiten? Oder 4-KB-Seiten?

Die Anwendung kann große Seiten beantragen. Der Kernel bestimmt die Seitengröße nicht, es sei denn, PAGE_SIZE wird in den Kernel-Quellcode kompiliert. Die Verwendung von mmap-Flags kann die Seitengröße im Quellcode der Anwendung bestimmen.

2. Welche Seitenrahmengröße wird für kmalloc-Operationen verwendet? Für vmalloc?

kmalloc verwendet die Standardseitengröße im Linux-Kernel, d. h. PAGE_SIZE im Kernel, die kompiliert oder zur Laufzeit bestimmt wird. Gleiches gilt für vmalloc.

3. Wenn wir davon ausgehen, dass der anfängliche Code und die anfänglichen Daten (Kernel-Segmente, vorläufige Seitentabellen und 128 KB für dynamische Daten) in die ersten 8 MB RAM passen (wie im Beispiel im Buch), was ist, wenn die tatsächliche Menge an Code und Daten nur 5 MB beträgt: Wird der Kernel 8 - 5 = 3 MB verschwenden?

Die Größe des ungenutzten Speichers wird durch PAGE_SIZE und die Daten bestimmt. Wenn die Seitengröße 4 MB und die Daten 5 MB betragen, beträgt die Größe des ungenutzten Speichers (PAGE_SIZE*N) - 5 MB = 3 MB.

verwandte Informationen