Um einen anderen Teil der Frage zu beantworten:Der Kernel wird teilweise aus Effizienz- / Leistungsgründen in den Adressraum jedes Prozesses abgebildet (es gibt auch andere, da bin ich mir sicher).
Auf der meisten modernen Hardware ist es schneller, die Sicherheitsstufe zu ändern (wodurch der Zugriff auf die ansonsten geschützten Seiten ermöglicht wird, wie in Alexeys Antwort erwähnt), um Systemaufrufe und andere vom Kernel bereitgestellte Funktionen auszuführen, als die Sicherheitsstufe zu ändern und die gesamte virtuelle Speicherabbildung zusammen mit allen zugeordneten TLB-Cache-Flushes und allem anderen, was an einem vollständigen Kontextwechsel beteiligt ist.
Da Systemaufrufe ziemlich häufige Ereignisse sein können, ist das Design, das sich in Linux und vielen anderen Orten entwickelt hat, um zu versuchen, den Overhead der Nutzung von Kerneldiensten zu minimieren, und das Mapping des Kernelcodes und (zumindest einiger der) Daten in jeden Prozess, ein Teil davon davon.
Ein Prozess "besitzt" hier den gesamten virtuellen Adressraum, den Kernel und die Benutzeranteile davon.
Seine Unfähigkeit, den Kernelcode und die Kerneldaten einzusehen und zu stoßen, liegt nicht an unterschiedlichen Adressräumen, sondern an unterschiedlichen Zugriffsrechten/Berechtigungen, die in den Seitentabellen festgelegt sind. Kernel-Seiten sind so eingerichtet, dass normale Anwendungen nicht darauf zugreifen können.
Es ist jedoch üblich, die beiden Teile eines Ganzen als Kernel-Space und User-Space zu bezeichnen, und das kann verwirrend sein.
Stellen Sie sich vor, was passieren würde, wenn der Kernel nicht in jedem Prozessadressraum abgebildet wird. Es würde einen dreifachen Fehler verursachen, weil beispielsweise der Timer-Interrupt auftritt, dann ruft der Prozessor die ISR-Routine mit IDT (Interrupt Descriptor Table) auf. Wenn der Kernel nicht abgebildet ist, dann die IDT-Adresse ungültig wird und somit ein dreifacher Fehler entsteht.
Ein weiterer wichtiger Grund, warum wir sagen, dass sich der Kernel im Adressraum des Prozesses befindet, ist, dass der Kernel auf den Benutzercode/die Daten des AKTUELLEN Prozesses zugreifen kann, d. h. auf den virtuellen Adressraum 0~3G.
Entschuldigung für mein schlechtes Englisch. Ich bin kein englischer Muttersprachler.