Vyšlo v týdeníku Computerworld č. 10/93 v roce 1993
Vytištěno z adresy: http://www.earchiv.cz/a93/a310c120.php3

Multitasking

V dobách, kdy počítače byly velké, pomalé a drahé, bylo jistě velmi žádoucí, aby každý z nich mohl sloužit potřebám více uživatelů. S vývojem výpočetní techniky se však vyvíjel i způsob, jakým se toho dosahovalo.

O nejstarším používaném mechanismu jsme se na stránkách této rubriky již zmínili - šlo o tzv. dávkové zpracování (batch processing), kdy si každý uživatel připravil svou úlohu ve formě dávky, a ta se pak ve vhodnou dobu spustila. Celý počítač se přitom s veškerou svou kapacitou věnoval právě a pouze této úloze, dokud ji nedokončil. To ale nemuselo být vždy nejefektivnější - jediná úloha často nedokázala "zaměstnat" rovnoměrně všechny části počítače. Zatímco některé pracovaly, jiné zahálely.

Snaha odstranit nerovnoměrné vytížení jednotlivých částí počítače se zcela zákonitě ubírala jediným možným směrem - zaváděním co možná největší míry paralelismu (jakožto souběžného provádění více různých činností). Tak aby například jedna úloha v rámci své vstupně-výstupní operace pracovala s diskem, jiná mohla něco číst z magnetické pásky, a ještě jiná úloha mohla mezitím intenzivně "počítat" na procesoru.

Pokud ale procesor zůstal stále jen jeden, musely se na něm všechny úlohy vhodně střídat. Například tak, že po určitý časový interval (např. několik stovek milisekund) byl procesor vyhrazen jedné úloze a po uplynutí této doby se začal věnovat jiné úloze, která byla také připravena ke zpracování na procesoru, ale musela čekat, až na ni dojde řada. Této technice se říkalo time slicing (přidělování časových kvant). Místo skutečně paralelního běhu více úloh, ke kterému je zapotřebí více procesorů, dokázala tato technika zajistit pouze tzv. pseudoparalelismus. Tedy paralelismus pouze předstíraný, který však uživatelům dokázal vytvořit dostatečně věrnou iluzi toho, že počítač se jejich úloze věnuje soustavně.

Technika přidělování časových kvant ovšem nebyla jediným způsobem, jak dosáhnout pseudoparalelismu. Další možností bylo dobrovolné střídání úloh, kdy jedna úloha sama a z vlastní iniciativy předala procesor jiné úloze například v okamžiku, kdy se rozhodla zahájit určitou vstupně-výstupní operaci, která mohla probíhat bez účasti procesoru. Používaly se však i jiné techniky.

Ať však byl pseudoparalelismus realizován jakkoliv, vždy se v počítači nacházelo více úloh v různém stadiu rozpracovanosti - některé právě prováděly své vstupně-výstupní operace, zatímco jiné se střídaly na procesoru. Jednotlivé úlohy přitom mohly patřit různým uživatelům, ale každý z nich si mohl myslet, že celý počítač se jeho úloze věnuje soustavně a tato úloha "běží" trvale. Ve skutečnosti byly jednotlivé úlohy prováděny pouze pseudoparalelně a všichni uživatelé se ve skutečnosti dělili o strojový čas - proto se tomuto způsobu využití jednoho počítače více uživateli začalo říkat time-sharing neboli sdílení času.

Když se pak posléze počítače staly menšími, rychlejšími a hlavně lacinějšími, nemusely již sloužit více uživatelům současně. Mohly být naopak vyhrazeny jen jednomu jedinému uživateli. To však nemuselo nutně znamenat zánik všech dosud používaných technik a mechanismů umožňujících provozovat více úloh současně. I jednomu jedinému uživateli se může velmi hodit, když si na svém počítači může spustit více úloh současně. Představme si například situaci, kdy uživatel na svém osobním počítači právě píše dopis pomocí svého oblíbeného editoru, a náhle si potřebuje zjistit nějaký údaj ve své osobní databázi (např. něčí adresu). Pracuje-li takovýto uživatel v prostředí, které neumožňuje současný běh více úloh, musí rozepsaný dopis uložit, práci s editorem ukončit, spustit svou databázi, v ní najít vše potřebné, pak práci s ní ukončit, znovu zavolat editor a pokračovat v psaní rozepsaného dopisu. Pracuje-li však uživatel v takovém prostředí, které umožňuje současný běh více úloh, může si spustit editor i databáz i současně (jako dvě samostatné úlohy) a podle potřeby se mezi nimi přepínat. Tedy chvíli pracovat např. s editorem, pak se na chvíli přepnout do databáze (aniž by práci s editorem ukončil), a posléze se zase přepnout do editoru.

I právě naznačený příklad je paralelismem (přesněji: pseudoparalelismem) neboli souběžným prováděním více úloh - odlišná je jen technika střídání jednotlivých úloh na jediném procesoru. Zde dochází k přepínání mezi úlohami až na explicitní zásah uživatele (obvykle po mnohem větších časových intervalech než v případě techniky přidělování časových kvant) - této variantě se obvykle říká context-switching (přepínání kontextu). Je to ale stále jen další forma realizace téhož obecného mechanismu - současného běhu více úloh na témže počítači neboli tzv. multitaskingu.

V tomto konkrétním případě jde tedy o multitasking s přepínáním kontextu. Jinou variantou je multitasking s přidělováním časových kvant (time-slice multitasking) a další variantou pak tzv. kooperativní multitasking (cooperative multitasking), kdy si jednotlivé úlohy předávají procesor dobrovolně tehdy, kdy to ony samy uznají za vhodné.

Shrňme si nyní ještě jednou to, co jsme si dosud řekli: multitasking neboli současný běh více úloh je mechanismus. Může být realizován různými způsoby (přepínáním kontextů, přidělováním časových kvant, jako kooperativní multitasking) a může sloužit různým účelům - tomu, aby více uživatelů sdílelo jeden počítač (pak jde o tzv. sdílení času), nebo tomu, aby si jeden uživatel mohl na svém počítači provozovat více úloh současně, případně oběma účelům současně.

Multitasking jako takový je zajišťován operačním systémem - ovšem za podmínky, že hardware příslušného počítače (především však procesor) je k tomu vhodně uzpůsoben. Tolik rozšířený, oblíbený, a zároveň i zatracovaný operační systém MS DOS pro počítače PC je příkladem operačního systému, který s multitaskingem nepočítá (multitasking umožňuje až jeho nadstavba - MS Windows - a to ještě jen v tzv. enhanced režimu na mikroprocesorech 386 a vyšších). Opačným příkladem je operační systém Unix, který od začátku počítal se současným během více úloh - multitaskingem - a obsahuje vše, co je k tomu potřebné. Unix je navíc víceuživatelským operačním systémem, a umožňuje tedy i práci v režimu sdílení času, kdy je v rámci multitaskingu provozováno více úloh patřících různým uživatelům.