Mich interessiert der Unterschied zwischen Highmem und Lowmem:
- Warum gibt es eine solche Unterscheidung?
- Was gewinnen wir dadurch?
- Welche Funktionen haben die einzelnen?
Akzeptierte Antwort:
Auf einer 32-Bit-Architektur ist der Adressraumbereich zum Adressieren von RAM:
0x00000000 - 0xffffffff
oder 4'294'967'295
(4 GB).
Der Linux-Kernel teilt das 3/1 (könnte auch 2/2 oder 1/3 sein) in Userspace (hoher Arbeitsspeicher) bzw. Kernelspace (niedriger Arbeitsspeicher) auf.
Der Bereich des Benutzerbereichs:
0x00000000 - 0xbfffffff
Jeder neu gestartete Benutzerprozess erhält eine Adresse (Bereich) innerhalb dieses Bereichs. Benutzerprozesse sind im Allgemeinen nicht vertrauenswürdig und dürfen daher nicht auf den Kernelspace zugreifen. Außerdem werden sie als nicht dringend angesehen, in der Regel versucht der Kernel, die Zuweisung von Speicher an diese Prozesse hinauszuzögern.
Der Kernel-Space-Bereich:
0xc0000000 - 0xffffffff
Ein Kernel-Prozess erhält hier seine Adresse (Bereich). Der Kernel kann direkt auf diese 1 GB an Adressen zugreifen (na ja, nicht auf die vollen 1 GB, es sind 128 MB für hohen Speicherzugriff reserviert).
Im Kernelspace erzeugte Prozesse sind vertrauenswürdig, dringend und werden als fehlerfrei angenommen, die Speicheranforderung wird sofort verarbeitet.
Jeder Kernel-Prozess kann auch auf den User-Space-Bereich zugreifen, wenn er möchte. Und um das zu erreichen, bildet der Kernel eine Adresse aus dem User Space (dem High Memory) auf seinen Kernel Space (den Low Memory) ab, die oben erwähnten 128 MB sind extra dafür reserviert.
Ob die Teilung 3/1, 2/2 oder 1/3 ist, wird durch CONFIG_VMSPLIT_...
gesteuert Möglichkeit; Sie können wahrscheinlich unter /boot/config*
nachsehen um zu sehen, welche Option für Ihren Kernel ausgewählt wurde.