GNU/Linux >> Znalost Linux >  >> Linux

Linux – rozdíl mezi uživatelským prostorem a prostorem jádra?

Používá se prostor jádra, když se jádro spouští jménem uživatelského programu, tj. systémové volání? Nebo je to adresový prostor pro všechna vlákna jádra (například plánovač)?

Pokud je to první, znamená to, že běžný uživatelský program nemůže mít více než 3GB paměti (pokud je dělení 3GB + 1GB)? Také, jak v takovém případě může jádro používat vysokou paměť, protože na jakou adresu virtuální paměti budou mapovány stránky z velké paměti, protože bude logicky mapováno 1 GB prostoru jádra?

Přijatá odpověď:

Používá se prostor jádra, když se jádro spouští jménem uživatelského programu, tj. systémové volání? Nebo je to adresový prostor pro všechna vlákna jádra (například plánovač)?

Ano a ano.

Než půjdeme dále, měli bychom říci toto o paměti.

Získání paměti je rozděleno do dvou odlišných oblastí:

  • Uživatelský prostor , což je sada míst, kde běží běžné uživatelské procesy (tedy vše kromě jádra). Úlohou jádra je řídit aplikace běžící v tomto prostoru tak, aby si nepletly mezi sebou a se strojem.
  • Prostor jádra , což je umístění, kde je uložen kód jádra a spouští se pod.

Procesy běžící v uživatelském prostoru mají přístup pouze k omezené části paměti, zatímco jádro má přístup k celé paměti. Procesy běžící v uživatelském prostoru také nefungují mít přístup do prostoru jádra. Procesy v uživatelském prostoru mohou přistupovat pouze k malé části jádra přes rozhraní vystavené jádrem – systémová volání . Pokud proces provede systémové volání, softwarové přerušení je odesláno do jádra, které pak odešle příslušný obslužný program přerušení a pokračuje ve své práci, až obsluha skončí.

Kód prostoru jádra má vlastnost spouštět se v „režimu jádra“, což (ve vašem typickém stolním počítači -x86-) je to, co nazýváte kód, který se spouští pod kruhem 0 . V architektuře x86 jsou obvykle 4 ochranné kruhy . Ring 0 (režim jádra), Ring 1 (mohou být používány hypervizory virtuálních strojů nebo ovladače), Ring 2 (mohou být používány ovladači, i když si tím nejsem tak jistý). Ring 3 je to, pod čím běží typické aplikace. Je to nejméně privilegovaný kruh a aplikace na něm běžící mají přístup k podmnožině instrukcí procesoru. Ring 0 (prostor jádra) je nejprivilegovanější kruh a má přístup ke všem instrukcím stroje. Například „prostá“ aplikace (jako prohlížeč) nemůže používat x86 pokyny pro sestavení lgdt k načtení tabulky globálních deskriptorů nebo hlt k zastavení procesoru.

Pokud je to první, znamená to, že běžný uživatelský program nemůže mít více než 3GB paměti (pokud je dělení 3GB + 1GB)? Také, jak v takovém případě může jádro používat vysokou paměť, protože na jakou adresu virtuální paměti budou mapovány stránky z velké paměti, protože bude logicky mapováno 1 GB prostoru jádra?

Odpověď na to najdete ve skvělé odpovědi od wag zde

Související:Viditelnost stavového řádku Nautilus – Rychle zkontrolovat volné místo?
Linux
  1. Rozdíl mezi příkazy „su“ a „su -“ v Linuxu

  2. Rozdíl mezi uživatelem Sudo a uživatelem root?

  3. Linux – rozdíl mezi Pts a Tty?

  1. Jaký je rozdíl mezi module_init a init_module v modulu jádra Linuxu?

  2. Jak mmapovat vyrovnávací paměť linuxového jádra do uživatelského prostoru?

  3. linux rozdíl mezi sudo crontab -e a jen crontab -e

  1. Jaký je rozdíl mezi Suspend a Hibernate v Linuxu

  2. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  3. Rozdíl mezi příkazy 'ifconfig' a ​​'ip'