Proces (informatika)
Proces (anglicky process) je v informatice název pro spuštěnou instanci počítačového programu.[1] Proces je umístěn v operační paměti počítače v podobě sledu strojových instrukcí vykonávaných procesorem. Obsahuje nejen kód vykonávaného programu, ale i dynamicky měnící se data, která proces zpracovává. Program může na jednom, ale i více počítačích běžet v podobě jednoho či více procesů s různými daty (například vícekrát spuštěný webový prohlížeč zobrazující různé stránky). Správu procesů vykonává operační systém, který zajišťuje jejich oddělený běh, přiděluje jim systémové prostředky počítače a umožňuje uživateli procesy spravovat (spouštět, ukončovat atp.).
Správa procesů
Moderní operační systémy umožňují spustit zároveň více procesů (textový editor, tabulkový procesor, e-mailový klient apod.), což nazýváme multitasking – multiprocessing. Pokud je v počítači méně procesorů, než je běžících procesů, musejí se procesy na procesorech střídat, což označujeme jako změnu kontextu.
Protože programátor nepředpokládá, že by byla změněna data v průběhu vykonávání programu, je při přepínání procesů důležité uchovat všechny informace potřebné pro opětovné obnovení procesu přesně v místě a ve stavu, kde bylo jeho vykonávání přerušeno tak, aby běžící proces tuto změnu nepoznal (až na časové zpoždění mezi dvěma strojovými instrukcemi, mezi kterými došlo ke změně kontextu). Tyto informace se pro každý proces ukládají do tabulky PCB (anglicky Process control block), která je spravována jádrem operačního systému.
Změna kontextu je poměrně náročná operace, a proto byla zavedena vlákna (anglicky thread), která mají režii na přepnutí nižší. Uspoří se zejména na tom, že thready sdílejí jeden paměťový prostor. To jim též umožňuje velmi rychlou a efektivní vzájemnou komunikaci.
Životní cyklus procesu
Životní cyklus procesu probíhá podle diagramu stavových přechodů. U několika soupeřících procesů je zařazení k běhu řízeno pravidly: časová kvanta, priorita, či bez možnosti přerušení. Přepínání procesů je značně časově náročné a může vyhovovat jen pro toleranci událostí s dlouhou latencí (například přístup na disk).
- 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)
- „vytvořený“ proces je ve stavu „připravený“ – připravený k vykonání a čeká pouze na přidělení procesoru
- spuštěním procesu, na základě plánovacího algoritmu přechází proces do stavu „běžící“
- „běžící“ proces může být ukončen normálně, tj. byl celý proveden, nebo násilně ukončen uživatelem, provedením chybné strojové instrukce, chybou vstupně–výstupní zařízení, porušením ochrany paměti, nebo na žádost rodiče apod.
- „běžící“ proces může být po vypršení časového limitu pro jeho běh (uplynutí časového kvanta) převeden do stavu „připravený“
- „běžící“ proces může být jen jeden, máme-li jen jeden procesor, kdežto ve stavu „připravený“ může být více procesů zařazených do fronty nebo jiné datové struktury, kterou využívá plánovací algoritmus
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
Rozšířené stavy procesů
Dva přidané stavy jsou dostupné pro procesy v systémech, které podporují střednědobé plánování procesů (anglicky mid-term scheduling) s podporou virtuální paměti. V obou stavech je celý proces odsunut z vnitřní paměti na pevný disk, je-li vnitřní paměti nedostatek (anglicky swapping out a swapping in). Je chybou považovat stránkování paměti za střednědobé plánování, protože v tomto případě se odkládá celý proces. Běžné současné operační systémy rozšířené stavy procesů nepoužívají (například řada Windows NT, Mac OS X nebo Linux).
- odložený a blokovaný (suspend blocked) – procesy, které jsou blokovány, mohou být také odloženy. V tom případě je proces jak odsunut, tak i blokován; v případě, že se fronta připravených vyprázdnila (nebo alespoň téměř vyprázdnila), pak přechází proces ze stavu „odložený připravený“ do stavu „připravený“
- odložený a čekající (suspend waiting) – v systémech, které podporují virtuální paměť, mohou být procesy odsunuty z hlavní paměti a umístěny do virtuální; odtud pak může být proces přesunut zpátky do stavu čekající
Komunikace mezi procesy
Komunikace mezi procesy (IPC, Inter-Process Communication, též meziprocesová komunikace) označuje mechanismy, pomocí kterých mezi sebou procesy komunikují a sdílí data. Komunikace může být u procesů velice frekventovaná. Některé procesy vytvářejí výstupy, které jiným procesům mohou předávat jako vstupy. Proces nebo aplikaci můžeme podle úlohy v IPC označit jako klienta nebo jako server. Proces zastupující roli klienta si vyžádá službu od jiné aplikace nebo procesu. Na požadavky klienta nebo více klientů odpovídá server. Mnohdy aplikace zastupují obě tyto role.
Je možné aby oba spolu komunikující procesy běžely na jiných zařízeních s jiným operačním systémem. Komunikace pak musí probíhat prostřednictvím určitých protokolů pomocí počítačové sítě, sběrnice, bezdrátově i jinak.
Historie
Na začátku 60. let 20. století se řídící počítačový software vyvinul z monitorovacího (např. IBM IBSYS) na výkonný (exekutivní) řídící software. Počítače se stávaly rychlejšími a výkonnějšími, avšak tehdejší výpočetní čas počítačů nebyl úsporný ani plně využívaný. To byl důvod, proč se stala technika multiprogramování potřebnou a nezbytnou. Multiprogramování umožnilo souběžnost několika programů. Nejdříve běželo více programů na jediném procesoru, jako výsledek základní jednoprocesorové počítačové architektury, kdy sdílely vzácné a limitované hardwarové zdroje a souběžnost sériové povahy (střídání). Na pozdějších systémech s více procesory mohlo běžet více programů již paralelně.
Programy se skládají ze sekvencí instrukcí pro procesory. Jeden procesor může spustit v jeden čas pouze jednu instrukci, a tak je nemožné spustit více programů ve stejný čas. Program může vyžadovat nějaký systémový zdroj, jako například vstupní zařízení, nebo může zahrnovat nějakou pomalou operaci jako je posílání výstupu (příkazu) na tiskárnu, což by vedlo k nečinnosti procesoru (čekání, až tiskárna bude potřebovat další data). Aby mohl být procesor stále využíván, je provádění takovéhoto procesu pozastaveno a operační systém po tuto dobu využije procesor k běhu jiného programu. Uživateli pak může připadat, že programy běžely ve stejný okamžik (odtud termín „paralelní“).
Krátce poté byla představa „programu“ rozšířena na význam „vykonávání programu a jeho kontextu“. Tím byl zrozen samotný koncept procesu, který se také stal nezbytným pro vznik reentrantního programování. O něco později přišly ještě vlákna. S příchodem konceptů jako je sdílení času, počítačová síť a vícejádrové procesory se sdílenou pamětí, ustoupilo staré multiprogramování před opravdovým multitaskingem (víceúlohový systém), multiprocesingem (víceprocesorový systém), a později také před vícevláknovými aplikacemi (anglicky multithreading).
Související články
Reference
- VAHALIA, Uresh. Unix Internals The New Frontiers [online]. Prentice Hall Press Upper Saddle River, 1996 [cit. 2017-02-14]. S. 24. Dostupné v archivu pořízeném dne 2017-02-15. ISBN 0131019082. (anglicky)