Paralelní procesy, prostředky pro popis paralelních procesů, vlákna
Z FAV wiki
- Všechen SW běžící na počítači je organizován jako množina sekvenčních procesů
- Proces = běžící program včetně obsahu čítače instrukcí, registrů, proměnných, běží ve vlastní paměti
- Koncepčně má každý proces vlastní virtuální CPU
Při pseudoparalelním běhu je v jednu chvíli aktivní pouze jeden proces. Po nějakém čase se OS rozhodne pozastavit běh procesu a spustit běh dalšího. Po dostatečně dlouhém čase všechny procesy vykonají část své činnosti.
Základní stavy procesů
Následující stavy procesů se vyskytují ve všech víceúlohových systémech:
- vytvořený (created) - proces je vytvořen buď příkazem uživatele (u terminálu), nebo na žádost operačního systému o provedení služby, či na žádost jiného procesu (rodiče)
- připravený (ready) nebo čekající (waiting) - připravený pro vstup do stavu běžící, čeká pouze na přidělení procesoru
- běžící (running) - procesu je přidělen procesor a právě se provádí příslušné programy
- blokovaný (blocked) - proces je převeden do tohoto stavu v případě, kdy čeká na dokončení nějaké vstupně-výstupní operace, případně na skončení jiného procesu, uvolnění zdroje, synchronizační primitivum a podobně
- ukončený (terminated) - proces skončil
Precedenční grafy
- Acyklický orientovaný graf
- Běh procesu Pi je vyjádřen orientovanou hranou grafu
- Vztahy mezi procesy znázorněny spojením hran
Abstraktní primitiva fork, join a quit
- Conway 1963
- Jeden z prvních mechanismů, možnost obecného popisu paralelních aktivit
- Funkce primitiv:
- fork X - provedení primitiva „fork x“ způsobí spuštění nového vlákna od příkazu označeného návěštím x; nové vlákno bude běžet paralelně s původním vláknem.
- quit - ukončí vlákno
- join t, Y - atomicky provede: t:=t-1; if t = 0 then goto Y;
- Abstraktní primitiva cobegin a coend
- Explicitně specifikuje sekvenci programu, která má být spuštěna paralelně
- Cobegin má formát:
cobegin
C1 || C2 || … || Cn
coend
- Výsledkem je vytvoření samostatného vlákna pro všechna Ci
- Každé Ci běží nezávislé na ostatních vláknech v konstrukci cobegin / coend
- Program pokračuje za coend až po skončení posledního Ci
Vlákna
- Vlakna v procesu sdileji adresni prostor, otevrene soubory (atributy procesu)
- Vlakna maji soukromy citac instrukci, obsah registru, soukromy zasobnik
- Mohou mit soukrome lokalni promenne
- Puvodne vyuzivana zejmena pro VT vypocty na multiprocesorech (kazdé vlakno vlastni CPU, spolecna data)
