Proces (program)

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Diagram znázorňující možné stavy procesů.

Proces (anglicky process) je v informatice název pro spuštěný počítačový program. 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á. Jeden program může v počítači běžet jako 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ů[editovat | editovat zdroj]

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.

Související informace naleznete také v článku Změna 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 uložena uvnitř jádra operačního systému.

Související informace naleznete také v článku Process control block.

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.

Související informace naleznete také v článku Vlákno (program).

Životní cyklus procesu[editovat | editovat zdroj]

Ž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ů[editovat | editovat zdroj]

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ů[editovat | editovat zdroj]

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[editovat | editovat zdroj]

Hlavní článek: Meziprocesová komunikace

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[editovat | editovat zdroj]

Na začátku 60. let minulého století se řídící počítačový software vyvinul z monitorovacího (např. 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 se sdíleli vzácné a limitované hardwarové zdroje. Tudíž byla souběžnost sériové povahy. 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, spustit více programů v určitý čas je nemožné. 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. Aby byl procesor stále využívaný, provedení takovéhoto procesu je pozastaveno a operační systém využije procesor k spuštění jiného programu. Uživateli pak může připadat, že se programy spustili ve stejný okamžik (odtud termín "paralelní").

Krátce poté byla představa "programu" rozšířena na ponětí o "vykonávajícím se programu a jeho kontextu". Byl zrozen samotný koncept procesu, který se také stal nezbytným pro vznik reentrantního kódování. O něco později přišli ještě vlákna. Nicméně, s příchodem konceptů jako je sdílení času, počítačová síť a vícejádrové procesory se sdílenou pamětí, staré multiprogramování ustoupilo 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 (multithreading).

Související články[editovat | editovat zdroj]