GNU/Linux >> Znalost Linux >  >> Linux

Proč je jádro mapováno do stejného adresního prostoru jako procesy?

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.


Linux
  1. Proč není Pgid procesů dítěte PGID rodiče?

  2. Proč `md5sum` nedává stejný hash jako internet?

  3. Linux – Proč v systému není přítomen žádný souborový systém Rootfs?

  1. Proč má více instancí Mate-terminálu stejné PID?

  2. Proč by jádro zahazovalo pakety?

  3. Linux – Proč existuje zásada jádra Linuxu, která nikdy nenaruší uživatelský prostor?

  1. Proč Apt již neaktualizuje jádro?

  2. Spuštění funkce uživatelského prostoru z prostoru jádra

  3. Adresový prostor 32bitového procesu v 64bitovém linuxu