Abych odpověděl na další část otázky - jádro je namapováno do adresního prostoru každého procesu částečně z důvodů efektivity/výkonu (jsou tu i další, jsem si jistý).
Na většině moderního hardwaru je rychlejší změnit úroveň zabezpečení (a umožnit tak přístup ke stránkám, které jsou jinak chráněny, jak je uvedeno v Alexeyově odpovědi), aby bylo možné provádět systémová volání a další funkce poskytované jádrem, než změnit úroveň zabezpečení. a celou mapu virtuální paměti spolu se všemi souvisejícími vyprázdněními mezipaměti TLB a vším ostatním, co se týká úplného přepnutí kontextu.
Protože systémová volání mohou být poměrně častými událostmi, návrh, který se vyvinul v Linuxu a na mnoha dalších místech, aby se pokusil minimalizovat režii využívání služeb jádra, a mapování kódu jádra a (alespoň některých) dat do každého procesu je součástí. toho.
Proces zde „vlastní“ celý virtuální adresní prostor, jádro a jeho uživatelské části.
Jeho neschopnost nahlédnout do kódu jádra a dat není kvůli různým adresním prostorům, ale kvůli různým přístupovým právům/oprávněním nastaveným v tabulkách stránek. Stránky jádra jsou nastaveny tak, že k nim běžné aplikace nemají přístup.
Je však obvyklé označovat dvě části jedné věci jako prostor jádra a uživatelský prostor, což může být matoucí.
Představte si, co by se stalo, kdyby jádro nebylo namapováno v každém adresovém prostoru procesu. Došlo by k trojnásobné chybě, protože řekněme, že dojde k přerušení časovače, pak procesor zavolá rutinu ISR pomocí IDT (tabulka deskriptorů přerušení). Pokud jádro není namapováno, pak adresa IDT stane neplatným a výsledkem bude trojitá chyba.
Dalším důležitým důvodem, proč říkáme, že jádro je v adresovém prostoru procesu, je to, že jádro má přístup k uživatelskému kódu/datům AKTUÁLNÍHO procesu, tj. virtuálnímu adresnímu prostoru 0~3G.
Omlouvám se za mou špatnou angličtinu. Nejsem rodilý mluvčí angličtiny.