GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was nützt es, einen Kernel-Teil im virtuellen Speicherbereich von Linux-Prozessen zu haben?

  1. Das Kernel-Mapping existiert hauptsächlich für die Zwecke des Kernels, nicht für Benutzerprozesse. Aus Sicht der CPU könnte jede physische Speicheradresse, die nicht als lineare Adresse abgebildet wird, genauso gut nicht existieren. Aber die CPU muss in der Lage sein, den Kernel aufzurufen:um Interrupts zu bedienen, Ausnahmen zu behandeln ... Sie muss auch in der Lage sein, den Kernel aufzurufen, wenn ein Benutzerprozess einen Systemaufruf ausgibt (es gibt verschiedene Möglichkeiten, dies zu tun passieren, also werde ich nicht ins Detail gehen). Auf den meisten, wenn nicht allen Architekturen geschieht dies ohne die Möglichkeit, Seitentabellen zu wechseln – siehe zum Beispiel SYSENTER . Einstiegspunkte in den Kernel müssen also immer mindestens in den aktuellen Adressraum gemappt werden.

  2. Kernel-Zuweisungen sind dynamisch, der Adressraum jedoch nicht. Auf 32-Bit-x86 sind verschiedene Splits verfügbar, z. B. der in Ihrem Diagramm gezeigte 3/1-GiB-Split; Auf 64-Bit x86 ist die obere Hälfte des Adressraums für den Kernel reserviert (siehe Memory Map in der Kernel-Dokumentation). Diese Spaltung kann sich nicht bewegen. (Beachten Sie, dass Bibliotheken in den Userspace geladen werden. Kernelmodule werden in den Kernelspace geladen, aber das ändert wiederum nur die Zuordnungen, nicht die Aufteilung des Adressraums.)

  3. Im Benutzermodus gibt es eine einzige Zuordnung für den Kernel, die von allen Prozessen gemeinsam genutzt wird. Wenn sich eine Kernel-seitige Seitenzuordnung ändert, wird diese Änderung überall widergespiegelt.

    Wenn KPTI aktiviert ist, hat der Kernel seine eigenen privaten Zuordnungen, die beim Ausführen von User-Space-Code nicht offengelegt werden; Bei KPTI gibt es also zwei Zuordnungen, und Änderungen an der Kernel-Private-Zuordnung sind für den Benutzerbereich nicht sichtbar (was der springende Punkt von KPTI ist).

    Die Kernel-Speicherkarte bildet immer den gesamten Kernel ab (im Kernel-Modus, wenn KPTI ausgeführt wird), aber sie ist nicht unbedingt eins zu eins – auf 64-Bit-x86 enthält sie beispielsweise eine vollständige Karte des physischen Speichers, also sind alle physischen Adressen des Kernels vorhanden mindestens zweimal zugeordnet.


Linux
  1. Was ist Linux-Kernel und sollten Sie auf den neuesten Kernel aktualisieren?

  2. Linux – Was sind High Memory und Low Memory unter Linux?

  3. Linux – Was bedeutet das virtuelle Kernel-Speicherlayout in Dmesg?

  4. Was ist die aktuelle Linux-Kernelquelle?

  5. Wie viel RAM verwendet der Kernel?

So verwenden Sie den Linux-Befehl sed

Der Linux-Kernel:Top 5 Innovationen

Was ist der Unterschied zwischen macOS- und Linux-Kernels

Was ist die Shell unter Linux?

Was bewirken die Kernel-Parameter acpi_osi=linux und acpi_backlight=vendor?

Wird der gesamte Kernel beim Booten in den Speicher geladen?