Jeder Prozess hat zwei Speicherbereiche: Benutzerspeicher (hoher Speicher) und Kernelspeicher (niedriger Speicher). Werden im Kernelspeicher die ersten 896 MB für die Zuordnung von Kernelcode verwendet (nicht ganz 1 GB)? Das heißt, wenn eine Anwendung im Benutzerspeicher einen Systemaufruf oder irgendetwas im Zusammenhang mit dem Kernel ausführt, verweist der Kernel auf den Kernelspeicher, damit der Systemaufruf ausgeführt wird, oder?
Sind die reservierten 128 MB im Kernelspeicher (für den Zugriff auf den oberen Speicherbereich (Benutzerspeicher)) alles Verweise auf den Benutzerspeicherbereich? Ein Kernelprozess kann also auf jeden Benutzerspeicher zugreifen, indem er auf diesen Bereich verweist. Stimmt das?
Aus diesem Grund wird dieser Bereich im Kernelspace Highmem genannt, nicht wahr?
Antwort1
„Viel Speicher“ und „Niedriger Speicher“ beziehen sich nicht auf den virtuellen Adressraum von Prozessen, sondern auf den physischen Speicher.
Im virtuellen Adressraum des Prozesses nimmt der Benutzerbereich die ersten 3 GB und der Kernelbereich das vierte GB dieses linearen Adressraums ein.
Die ersten 896 MB des Kernelspeichers (nicht nur der Kernelcode, sondern auch seine Daten) werden „direkt“ den ersten 896 MB des physischen Speichers zugeordnet. Dies ist insofern „direkt“, als zwischen jeder linearen Adresse dieses 896 MB großen Teils des virtuellen Kernelspeichers und der entsprechenden Adresse im physischen Speicher immer ein Offset von 0xc0000000 besteht (beachten Sie jedoch, dass die MMU aktiviert ist und dass hierfür tatsächlich Seitentabelleneinträge verwendet werden).
In den letzten 128 MB des virtuellen Kernelspeichers werden einige Teile des physischen „High Memory“ (> 896 MB) abgebildet: Es können also jeweils nur maximal 128 MB „High Memory“ abgebildet werden.
Referenz: „Understanding the Linux Kernel“, dritte Ausgabe – Abschnitte „8.1.3. Memory Zones“ und „8.1.6. Kernel Mappings of High-Memory Page Frames“.
Antwort2
NB: -Die Speicheraufteilung erfolgt nur in älteren Linux-Systemen (32 Bit) Weitere Einzelheiten finden Sie im Kommentar unten.
Hoher und niedriger Speicher:
- Wenig Speicher :Speicher, für den im Kernelspeicher logische Adressen vorhanden sind. Auf fast jedem System, auf das Sie wahrscheinlich stoßen, ist der gesamte Speicher Low Memory.
- Großer Speicher:Speicher, für den keine logischen Adressen existieren, weil er außerhalb des für virtuelle Kerneladressen reservierten Adressbereichs liegt. Dies bedeutet, dass der Kernel temporäre Zuordnungen der Teile des physischen Speichers verwenden muss, auf die er zugreifen möchte.
Kernel teilt virtuelle Adresse in zwei TeileBenutzerAdressraum undKernelAdressraum. Der Code und die Datenstrukturen des Kernels müssen in diesen Raum passen, aber der größte Verbraucher des Kerneladressraums sind virtuelle Zuordnungen für physischen Speicher. Daher benötigt der Kernel seine eigene virtuelle Adresse für jeden Speicher, auf den er direkt zugreifen muss. Die maximale Menge an physischem Speicher, die vom Kernel verarbeitet werden kann, ist also die Menge, die in den Teil des virtuellen Adressraums des Kernels abgebildet werden kann, abzüglich des vom Kernelcode verwendeten Speicherplatzes.