Multitasking
Z Wikipedie, otevřené encyklopedie
Termínem multitasking (z angličtiny, multi = mnoho, task = úloha) se v informatice označuje schopnost počítače, resp. operačního systému provádět (přinejmenším zdánlivě) několik úloh současně. Dnešní operační systémy jsou typicky víceúlohové – sem patří např. Microsoft Windows či Linux. Naopak MS-DOS je příkladem jednoúlohového systému, na kterém vždy běží pouze jediný program a teprve po jeho ukončení je možno spustit jiný.
Multitasking může být realizován mnoha způsoby. Základní dělení je na skutečný multitasking, kdy je hardware počítače opravdu schopen v každém okamžiku zpracovávat více úloh současně, a na zdánlivý multitasking, kdy se dojmu současného běhu více programů dosahuje tím, že se tyto programy velice rychle v běhu střídají, ale v každý jednotlivý okamžik běží pouze jediná úloha. Opravdu 100% skutečný multitasking se v praxi přiliš neobjevuje, běžné operační systémy podporují druhou zmiňovanou techniku, ale pokud je počítač vybaven více procesory, jsou úlohy mezi tyto procesory rozděleny tak, aby alespoň některé úlohy mohly běžet současně.
Podle způsobu přidělování a odebírání časových kvant se rozlišují dva základní způsoby zdánlivého multitaskingu: kooperativní multitasking a preemptivní multitasking.

Obsah |
[editovat] Kooperativní multitasking
Kooperativní multitasking (též nepreemptivní) vyžaduje aktivní spoluúčast běžících úloh. Každá úloha je povinna dostatečně často voláním systémové funkce předat řízení zpět operačnímu systému, který díky tomu může spustit jinou úlohu, která se po chvíli opět dobrovolně vzdá procesoru atd.
Kooperativní multitasking používaly například verze Microsoft Windows do Windows 3.x1 nebo Mac OS před Mac OS X. Zatímco je v moderních systémech kooperatvní multitasking na ústupu, například RISC OS ho stále používá.
Výhodou řešení je jednodušší implementace operačního systému, podstatnou nevýhodou skutečnost, že chybně naprogramovaná úloha, která nevrátí řízení zpět operačnímu systému, způsobí úplné zastavení systému i ostatních úloh.
[editovat] Preemptivní multitasking
Při preemptivním multitaskingu o přidělování a odebírání procesoru jednotlivým úlohám plně rozhoduje operační systém. V pravidelných intervalech (typicky zhruba 10 ms) přeruší provádění běžícího programu, vyhodnotí aktuální situaci (které úlohy žádají o přidělení procesoru, jejich priority atd.) a nechá běžet buď opět úlohu, kterou přerušil, nebo jinou úlohu, která má zájem o přidělení procesoru. I v preemptivním multitaskingu však může úloha dobrovolně požádat o přepnutí kontextu, vzdát se zbytku svého kvanta, např. pokud chce na něco čekat (např. na pomalou vstupní/výstupní operaci, jako je čtení dat z pevného disku).
Preemptivní multitasking používají MS Windows od verze 95 (v řadě NT je od začátku), Mac OS od Mac OS X, jádro Unix nebo Linux od svého vzniku.
Výhodou tohoto řešení je, že nedochází k „zatuhnutí“ počítače, neboť i v případě, že úloha zhavaruje, odebere operační systém dané úloze řízení a přidělí časové kvantum ostatním úlohám. Nevýhodou je složitější implementace operačního systému a vyšší nároky na hardwarové vybavení počítače.
[editovat] Atomické operace
U některých operací musí být zaručeno, že proběhnou celé, že jejich provádění nebude v polovině přerušeno např. přepnutím na jinou úlohu. Takové operace se označují jako atomické. Každá atomická operace musí proběhnout buď celá, nebo vůbec. Příkladem atomické operace je např. semafor či jiné synchronizační primitivum. Mezi zjištěním jeho stavu a následným přepnutím nesmí být úloha přerušena, protože úloha, která by pak dostala řízení, mohla mezitím stav semaforu změnit a došlo by k chybnému chování.
Příklad:
- Proces kontroluje, zda je na semaforu signál volno,
- Proces zjistí, že ano, proto se chystá nastavit stůj a vpustit vlak na trať.
- V tu chvíli ovšem dojde k přepnutí na jinou úlohu.
- Druhá úloha zkontroluje, že na semaforu je signál volno, nastaví stůj a z druhé strany vpustí vlak na trať.
- Dojde k přepnutí zpět na první úlohu.
- Ta dokončí nastavení na stůj a vpustí vlak na trať, čímž dojde ke kolizi.
U kooperativního multitaskingu je atomicita takových operací zaručena prostě tím, že se v jejím průběhu nevolají systémové funkce, které by umožnily přepnutí kontextu. Jelikož nikdy jindy k přepnutí dojít nemůže, je tím zaručena správná funkce. U preemptivního multitaskingu je naopak potřeba takovému nevhodnému přepnutí explicitně bránit. U skutečného multitaskingu, tzn. při práci na více procesorech se atomicita operací zajišťuje s pomocí hardwarových prostředků a podpory procesoru; nejdůležitějším faktem v tomto případě je, že (přinejmenším některé) jednotlivé instrukce procesoru jsou samy o sobě atomické.
[editovat] Poznámky
Pozn. 1: Ve Windows/386 2.x, vydaných v roce 1988, a pozdějších verzích Windows bylo možné samostatně spouštět více DOS aplikací, které běžely v preemptivním multitaskingu, ale vlastní Windows aplikace běžely v kooperativním multitaskingu.

