Porozumění uživatelskému režimu a režimu jádra

Většina operačních systémů má nějaký způsob zobrazení vytížení procesoru. V systému Windows je to Správce úloh.

Správce úloh zobrazující využití procesoru a čas jádra

Využití procesoru je obecně znázorněno jako prosté procento času procesoru stráveného nečinnými úlohami. To je však poněkud zjednodušené. V každém moderním operačním systému tráví procesor ve skutečnosti čas ve dvou velmi odlišných režimech:

  1. Režim jádra

    V režimu jádra má prováděný kód úplný a neomezený přístup k základnímu hardwaru. Může provádět libovolné instrukce procesoru a odkazovat na libovolnou adresu paměti. Režim jádra je obecně vyhrazen pro nejnižší, nejdůvěryhodnější funkce operačního systému. Havárie v režimu jádra jsou katastrofální; zastaví celý počítač.

  2. Uživatelský režim

    V uživatelském režimu nemá prováděný kód možnost přímého přístupu k hardwaru ani odkazu do paměti. Kód spuštěný v uživatelském režimu musí pro přístup k hardwaru nebo paměti delegovat na systémová rozhraní API. Díky ochraně poskytované tímto druhem izolace jsou pády v uživatelském režimu vždy obnovitelné. Většina kódu spuštěného v počítači se vykonává v uživatelském režimu.

Ve Správci úloh je možné povolit zobrazování času jádra, jak to mám na výše uvedeném obrázku. Zelená čára je celkový čas procesoru; červená čára je čas jádra. Mezera mezi nimi je čas uživatele.

Tyto dva režimy nejsou pouhá označení; jsou vynuceny hardwarem procesoru. Pokud se kód vykonávaný v uživatelském režimu pokusí udělat něco, co není v jeho kompetenci – například přistoupit k privilegované instrukci procesoru nebo modifikovat paměť, ke které nemá přístup – je vyhozena zachytitelná výjimka. Místo pádu celého systému dojde k pádu pouze této konkrétní aplikace. To je hodnota uživatelského režimu.

Hardware procesoru x86 ve skutečnosti poskytuje čtyři ochranné kruhy: 0, 1, 2 a 3. Obvykle se používají pouze kruhy 0 (jádro) a 3 (uživatel).

Model kruhu CPU

Pokud používáme pouze dva izolační kruhy, je trochu nejasné, kam by měly jít ovladače zařízení – kód, který nám umožňuje používat naše grafické karty, klávesnice, myši, tiskárny atd. Běží tyto ovladače v režimu jádra, aby měly maximální výkon, nebo v uživatelském režimu, aby byly maximálně stabilní? Přinejmenším v systému Windows je odpověď následující: Záleží na tom. Ovladače zařízení mohou běžet v uživatelském režimu nebo v režimu jádra. Většina ovladačů je dnes přesunuta na uživatelskou stranu plotu, s výjimkou ovladačů grafických karet, které potřebují výkon v režimu jádra. Ale i to se mění; ve Windows Vista jsou ovladače videa rozděleny na uživatelskou a jadernou část. Možná proto si hráči stěžují, že Vista podává ve hrách o 10 procent nižší výkon.

Přesná hranice mezi těmito režimy je stále poněkud nejasná. Jaký kód by měl běžet v režimu User? Jaký kód by měl běžet v režimu jádra? Nebo možná jen předefinujeme podlahu jako suterén – vzestup virtualizace vedl k vytvoření nového kruhu pod všemi ostatními, kruhu -1, který nyní známe jako hardwarovou virtualizaci x86.

Uživatelský režim je jednoznačně čistým veřejným statkem, ale má svou cenu. Přechod mezi uživatelským a jaderným režimem je nákladný. Opravdu drahý. Proto je například software, který hází výjimky, pomalý. Výjimky znamenají přechody do režimu jádra. Připouštím, že dnes máme tolik výkonu, že se o výkon přechodu musíme starat jen zřídka, ale když potřebujete maximální výkon, rozhodně se o tyto věci začnete zajímat.

Pravděpodobně nejveřejnějším příkladem překreslování hranice mezi uživatelem a jádrem jsou webové servery. Microsoft IIS 6 přesunul značnou část svých základních funkcí do režimu jádra, především poté, co konkrétní open-source webserver využil režim jádra k vytvoření obrovského vítězství v průmyslovém benchmarku. Podle mě to byla trochu zbytečná válka, protože optimalizace jádra (v obou táborech) se vztahují pouze na statický obsah HTML. Ale tak to chodí ve všech válkách, ať už benchmarkových nebo jiných.

Striktní oddělení kódu procesoru mezi uživatelským a jaderným režimem je pro většinu z nás zcela transparentní, ale je to doslova rozdíl mezi počítačem, který neustále padá, a počítačem, který neustále katastrofálně padá. To je to, čemu my, programátoři píšící kód navíc, rádi říkáme „pokrok“. Takže jménem všech programátorů na celém světě bych rád poděkoval Uživatelskému režimu. Jste skvělí!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.