Paralelní procesy, prostředky pro popis paralelních procesů, vlákna
- 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.
Obsah |
[editovat] 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
Lepší obrázek z přednášek:
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)
[editovat] PCB
= process control block
OS (konkrétně správce procesů) udržuje tabulku nazývanou tabulka procesů
- PCB obsahuje všechny info potřebné pro opětovné spuštění procesu
- Konkrétní obsah PCB – různý
- Pole správy procesů, správy paměti, správy souborů
Položky PCB
- Identifikátor procesu, uživatele
- Stavová informace procesoru (registry, PC, SP, styv CPU)
- Plánovací parametry procesu
- Odkazy na rodiče a potomky
- Čas spuštení, čas spotřebovaný na CPU
- Nastavení meziprocesorové komunikace
- Popis paměti, data, zásobník
- Otevřené soubory, aktuální pracovní adresář...
PCB
[editovat] Vlákna
Jeden proces se může skládat z jednoho nebo více vláken.
Vlákna v procesu sdílejí adresní prostor, ale mají vlastní čítač instrukcí, obsah registrů, zásobník. Taky mohou mít soukromé lokální proměnné.
- interaktivní procesy (něco beží na pozadí a zároveň probíhá komunikace s uživatelem)
- www server (každý klient jedno vlákno)
- textový procesor (vstup dat, formátoování textu)
Multithreading - více vláken. Proces začíná s jedním vláknem, další si vytváří za běhu.
Režije na vytvoření vlákna a přepnutí kontextu je menší než u procesů.
Vlákna popisujeme pomocí Precedenčních grafů
[editovat] Precedenční graf
Acyklický orientovaný graf, popisuje vztahy mezi procesy.
Lze také zapsat pomocí funkcí:
- P(a,b) - paralelní běh 2 vláken (a,b)
- S(a,b) - sériový běh 2 vláken (a,b)
např: S (p1, S(P(p2, P(S(p3, P(p4,p5)), p6)), P(p7,p8))