Im Linux-Kernel ist mem_map
das Array, das alle Deskriptoren der "struct page" enthält. Diese Seiten enthalten den 128MiB Speicher in LowMem für die dynamische Zuordnung von HighMem.Warum brauchen wir zone_highmem auf x86?
Da die Lowmem-Größe 1GiB ist, hat das mem_map
Array nur 1GiB/4KiB = 256KiB Einträge. Wenn jede Eintragsgröße 32 Byte ist, dann ist die mem_map
Speichergröße = 8MiB. Aber wenn wir mem_map
verwenden könnten, um alle 4GiB physischen Speicher abzubilden (wenn wir so viel physischen Speicher auf x86-32 haben), dann würde das mem_map Array 32MiB belegen, das ist nicht viel Kernelspeicher (oder bin ich falsch?) .
Also meine Frage ist: Warum müssen wir diese 128MiB in niedrigen für indirekte highmem Mapping in erster Linie verwenden? Oder anders ausgedrückt, warum nicht alle diese max 4GiB physischen Speicher (wenn verfügbar) im Kernelraum direkt abbilden?
Hinweis: Wenn mein Verständnis der Kernelquelle oben falsch ist, korrigieren Sie bitte. Vielen Dank!