1.1. Procesy a vlákna

Operační systémy používají pro oddělení různých běžících aplikací procesy. Vlákna jsou základní jednotkou, které operační systém přiděluje čas procesoru, přičemž v rámci jednoho procesu může běžet i více vláken. Každému vláknu přísluší vlastní priorita a řada systémových struktur, v nichž je uložen kontext výpočtu v době, kdy vlákno neběží. Texto kontext obsahuje veškeré informace, které jsou nutné pro obnovení výpočtu, včetně uloženého obsahu registrů, zásobníku.

Operační systémy s preemptivním multitaskingem vytvářejí dojem souběžného provádění více vláken ve více procesech. To je zajištěno rozdělením času procesoru mezi jednotlivá vlákna po malých časových intervalech. Pokud časový interval vyprší, je běžící vlákno pozastaveno, uloží se jeho kontext a obnoví se kontext dalšího vlákna ve frontě, jemuž je pak předáno řízení. Délka přiděleného časového intervalu závisí na konkrétním algoritmu, jenž je v operačním systému implementován. Vzhledem k tomu, že tyto úseky jsou ale z pohledu uživatele velmi krátké, je výsledný dojem i na počítači s jediným procesorem takový, jako by pracovalo více vláken současně. V případě, že máme k dispozici více procesorů, jsou mezi ně vlákna přidělována ke zpracování a k současnému běhu pak skutečně dochází.


Úkol k zamyšleníÚkol k zamyšlení
Jaké důvody nás vedou k realizaci souběžného zpracování úloh? Které problémy by nastaly, kdybychom byli nuceni veškeré výpočty provádět pouze sekvenčně a před spuštěním každé akce čekat na ukončení předchozí rozpracované činnosti? Vystačili bychom pouze s tím, že by mohlo pracovat více různých aplikací současně? Kdy se nám hodí to, že i v rámci jedné spuštěné aplikace může probíhat více činností současně. Zamyslete se nad příklady konkrétních aplikací a činností, kde se souběžné zpracování nejčastěji používá.

Souběžné zpracování více aplikací je již delší dobu standardní možností, kterou nám operační systémy nabízejí. Například i v operačním systému MS-DOS bylo možné těchto postupů v omezené míře využít pro tisk na pozadí běhu dalších aplikací. Ve víceuživatelských systémech pak zcela logicky očekáváme, že se čas procesoru bude nějakým spravedlivým způsobem rozdělovat mezi aplikace spuštěné jednotlivými uživateli tak, aby každý z nich měl pocit, že pracuje s počítačem sám (i když se mu ten počítač pak může jevit pomalejší než kdyby na něm pracoval opravdu sám).

Pro další zjemnění souběžného zpracování na jednotlivá vlákna téže aplikace jsou však ještě další důvody. Některé aplikace mohou pracovat v roli serverů, které mohou současně obsluhovat více požadavků. Například WWW server dostává současně mnoho požadavků k zaslání prohlížených stránek a je rozumné, aby byl schopen během zpracování jednoho požadavku přijímat požadavky další, případně aby mohl zpracovávat i několik požadavků současně.

Dalším důvodem pro použití více vláken v jedné aplikaci je zajištění dostatečné interaktivity aplikací s grafickým uživatelským rozhraním, kdy po spuštění náročnější operace nemůžeme nechat aplikaci „zamrznout“ až do jejího ukončení. Je-li jedno vlákno zaměstnáno výpočtem, mohou další vlákna zajišťovat animaci dialogu ukazujícího, jak daleko výpočet pokročil, případně reagovat na další příkazy uživatele. Nebo v tabulkovém kalkulátoru se může během komunikace s uživatelem provádět současně přepočítávání obsahu buněk tak, aby vždy odrážely aktuální data vyplňovaná uživatelem.

Vlákno je samostatně plánovatelný tok řízení programu. Představuje tedy jistou posloupnost instrukcí, jejíž provádění může být přerušeno např. po vypršení určitého časového limitu nebo čekáním na nějakou událost. Po ukončení důvodu přerušení může vlákno dále pokračovat v činnosti.

Proces je tvořen paměťovým prostorem a jedním nebo více vlákny. Tento paměťový prostor jednotlivá vlákna sdílejí. V rámci operačního systému pak může běžet více procesů, ovšem každý proces již má svůj vlastní paměťový prostor.