GNU/Linux >> Znalost Linux >  >> Linux

K čemu je mít část jádra ve virtuálním paměťovém prostoru linuxových procesů?

  1. Mapování jádra existuje primárně pro účely jádra, nikoli pro uživatelské procesy. Z pohledu CPU jakákoli adresa fyzické paměti, která není mapována jako lineární adresa, nemusí existovat. CPU však musí být schopen volat do jádra:obsluhovat přerušení, zpracovávat výjimky... Také musí být schopen volat do jádra, když uživatelský proces vydá systémové volání (existují různé způsoby, jak to stalo, takže nebudu zacházet do podrobností). Na většině, ne-li na všech architekturách, k tomu dochází bez možnosti přepínat tabulky stránek — viz například SYSENTER . Takže minimálně vstupní body do jádra musí být vždy mapovány do aktuálního adresního prostoru.

  2. přidělení jádra jsou dynamické, ale adresní prostor nikoli. Na 32bitovém x86 jsou k dispozici různá rozdělení, jako je rozdělení 3/1 GiB zobrazené ve vašem diagramu; na 64bitovém x86 je horní polovina adresního prostoru vyhrazena pro jádro (viz mapa paměti v dokumentaci jádra). Toto rozdělení se nemůže pohnout. (Všimněte si, že knihovny jsou načteny do uživatelského prostoru. Moduly jádra jsou načteny do prostoru jádra, ale opět se tím změní pouze alokace, nikoli rozdělení adresního prostoru.)

  3. V uživatelském režimu existuje jediné mapování jádra sdílené všemi procesy. Když se změní mapování stránky na straně jádra, tato změna se projeví všude.

    Když je povoleno KPTI, jádro má svá vlastní soukromá mapování, která nejsou odhalena při spouštění kódu v uživatelském prostoru; takže s KPTI existují dvě mapování a změny v kernel-private nebudou viditelné pro uživatelský prostor (což je celý smysl KPTI).

    Mapa paměti jádra vždy mapuje celé jádro (v režimu jádra při spuštění KPTI), ale nemusí to být nutně jedna ku jedné – například na 64bitovém x86 obsahuje úplnou mapu fyzické paměti, takže všechny fyzické adresy jádra jsou mapováno alespoň dvakrát.


Linux
  1. Co je to jádro Linuxu a měli byste upgradovat na nejnovější jádro?

  2. Linux – Co znamená rozložení paměti virtuálního jádra v Dmesg?

  3. Linux – jaké zdroje entropie používá jádro Linuxu?

  1. Ovladač zařízení linuxového jádra na DMA ze zařízení do paměti uživatelského prostoru

  2. Co znamená __init v kódu jádra Linuxu?

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

  1. Co je velká a nízká paměť v Linuxu?

  2. Jak mohu rezervovat blok paměti z jádra Linuxu?

  3. Co dělají parametry jádra acpi_osi=linux a acpi_backlight=vendor?