Set-top-boxy
Parfémy
Krása
Produkty pro zdraví
Hodinky
Elektro
Šperky
Nábytek
Nářadí a zahrada
Outdoor
Počítače a notebooky
Změna kontextu (anglicky context switch) je operace, při níž multitaskingový operační systém přepíná řízení mezi procesy. Při tom se ukládá a načítá aktuální stavu procesoru. Tento děj se u moderních procesorů opakuje mnohokrát za vteřinu. Změny kontextu jsou obvykle výpočetně intenzivní a hodně plánované a operační systémy jsou k tomu optimalizované. Změnou kontextu můžeme myslet změnu kontextu registrů, vláken, úloh a procesů. Ke které změně kontextu dojde, záleží na procesoru nebo operačním systému.
Obsah |
Pod tímto pojmem si můžeme představit stav procesoru (obsah registrů), stav případného koprocesoru, případně i stav dalších zařízení v momentě kdy dojde ke změně kontextu. Tento současný stav procesoru se ukládá buď na zásobník procesu, nebo do připravené oblasti dat v adresním prostoru procesu.
Do kontextu můžeme zahrnout i obsahy různých cache procesoru (např L1 cache nebo TLB): ty se sice při vlastní změně neukládají ani nenačítají, ale změna kontextu explicitně nebo implicitně zneplatní jejich obsah a nutnost jejich nového naplnění patří mezi příčiny, proč je přepnutí kontextu na moderních procesorech tak „drahé“ (časově náročné) - zvláště pokud se změní adresový prostor, jak se děje při přepnutí procesů na rozdíl od přepnutí vláken.
Ke změně kontextu dochází ve třech případech.
Nejčastěji ke kontext switchi dochází při plánování programu, kdy jeden proces potřebuje být vyhozen z procesoru a jiný naopak musí běžet. V preemptivních multitaskingových operačních systémech, poskytuje plánovač každé úloze procesor na nějakou určitou dobu, to se nazývá Time slice.
Jestliže proces neodevzdá CPU dobrovolně (např. voláním vstupně/výstupní operace), je přerušen přerušením časovače a operační systém místo toho spustí další proces. To zaručí, že procesor není stále obsazen jedním procesem pokud jiné procesy čekají. (Na víceprocesorovém systému se může stát, že na jednom procesoru běží neustále jeden výpočetně náročný proces, zatímco ostatní procesy používají ostatní procesory.)
Některé architektury (jako třeba architektura IBM PC založená na procesory architektury x86) jsou řízeny přerušením. To znamená, že pokud procesor vyžaduje z disku nějaká data, nemusí se zatěžovat čekáním než čtení skončí, stačí podat žádost a pokračovat s jinou operací; když čtení skončí, řadič disku vygeneruje přerušení, které v procesoru spustí část operačního systému zvanou obsluha přerušení (interrupt handler).
Je jasné, že je nutné přepnout kontext když je vydáno přerušeni: stav právě běžícího procesu musí být odložen, aby obsluha přerušení mohla být vykonána.
Když si operační systém vyžádá změnu mezi uživatelským režimem (user mode) a jaderným režimem (kernel mode), není změna kontextu potřebná. Tato změna není změnou kontextu, avšak operační systém může v tento okamžik změnu kontextu provést.
Přepínaní kontextu může být primárně prováděno softwarem nebo hardwarem. Některé procesory jako Intel 80286 a vyšší mají hardwarovou podporu pro přepínání kontextu, použitím speciálního datového segmentu TSS (task state segment). Při přepnutí úlohy nastane to, že CPU může automaticky načíst nový stav z TSS (implicitně následuje volání instrukcí odkazujících na bránu úloh (task gate), nebo explicitně následuje přerušení či výjimky). V porovnání s ostatními úlohami vykonávanými v hardwaru by tato měla být poměrně rychlá, nicméně tradiční operační systémy jako třeba Windows nebo Linux tuto vlastnost nepoužívají. To hlavně důsledkem těchto dvou důvodů: První je, že hardwarová změna kontextu neuloží všechny registry které je zapotřebí uložit, jako třeba registry s plovoucí řádovou čárkou (přestože je TS bit automaticky nastaven v kontrolním registru CR0, mající za následek chybu při provádění instrukci s plovoucí řádovou čárkou, která dává operačnímu systému možnost ukládání a načítání stavu plovoucí řádové čárky) a naopak ukládá registry které nemusí být nutné ukládat (segmentové registry). Druhým problémem je, že rychlost hardwarového přepnutí není ve skutečnosti o tolik větší než u přepnutí softwarového.
Některé architektury obsahují logiku aby dovolila existenci více hardwarových kontextů současně, eliminují potřebu ukládat a načítat kontext procesoru do paměti na změnu kontextu. Extrémní případ je sudová (barrel) procesorová architektura, která přepíná mezi vlákny při každém cyklu.
KOLÁŘ, Petr. Operační systémy [online]. Liberec : 2005-02-01, [cit. 2008-08-30]. Dostupné online.