Proces v operačnom systéme: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
d
 
(Jedna medziľahlá úprava od rovnakého používateľa nie je zobrazená.)
Riadok 1: Riadok 1:
[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]
+
[[Kategória:Študentské práce]][[Kategória:Operačné systémy]]
{{Praca_uvod|2|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}
+
{{Praca_uvod|2|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Operačné systémy Windows|Meranie doby výpočtu vybraných úloh v prostredí operačných systémov Windows}}
 
__TOC__
 
__TOC__
 
= =
 
= =
==Proces v operačnom systéme==
 
 
Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.
 
Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.
  
Riadok 20: Riadok 19:
 
Proces sa počas vykonávania nachádza v rôznych stavoch, ktoré určujú prípustné operácie s procesom a reakcie procesu na ne. Stavy môžeme popísať konečným automatom, pričom každý OS sa líši v presnej množine stavov procesov a povolených operáciách ( prechodoch ), takže nasledovné rozdelenie možných stavov je zovšeobecnené:
 
Proces sa počas vykonávania nachádza v rôznych stavoch, ktoré určujú prípustné operácie s procesom a reakcie procesu na ne. Stavy môžeme popísať konečným automatom, pričom každý OS sa líši v presnej množine stavov procesov a povolených operáciách ( prechodoch ), takže nasledovné rozdelenie možných stavov je zovšeobecnené:
  
# novovytvorený proces ( NEW ) - tento proces sa práve vytvoril, ale ešte nebol priradený k CPU – neprevzal riadenie . Procesy sú vytvárané inými procesmi: proces - rodič vytvorí proces - potomka. Táto činnosť sa vykonáva systémom vytvor proces ( presný mechanizmus sa líši systém od systému ). Procesy vytvárajú strom, ktorého koreň vzniká pri štarte OS. Keď sa vytvorí potomok môže rodič pokračovať v činnosti, alebo počká na ukončenie potomka. Medzi rodičom a potomkom OS umožňuje zdieľanie zdrojov, ak o to rodič požiada ( napr. potomok môže dostať prístup k otvoreným súborom rodiča ).
+
# '''novovytvorený proces (NEW)''' - tento proces sa práve vytvoril, ale ešte nebol priradený k CPU – neprevzal riadenie . Procesy sú vytvárané inými procesmi: proces - rodič vytvorí proces - potomka. Táto činnosť sa vykonáva systémom vytvor proces ( presný mechanizmus sa líši systém od systému ). Procesy vytvárajú strom, ktorého koreň vzniká pri štarte OS. Keď sa vytvorí potomok môže rodič pokračovať v činnosti, alebo počká na ukončenie potomka. Medzi rodičom a potomkom OS umožňuje zdieľanie zdrojov, ak o to rodič požiada ( napr. potomok môže dostať prístup k otvoreným súborom rodiča ).
# ležiaci proces ( RUNNING ) - proces, ktorý sa práve vykonáva na CPU. V modernom multiprocesovom OS býva proces po uplynutí určitého času ( časové kvantum ) násilne prevedený zo stavu bežiaci do stavu pripravený, aby aj iné procesy mohli byť vykonávané.
+
# '''bežiaci proces (RUNNING)''' - proces, ktorý sa práve vykonáva na CPU. V modernom multiprocesovom OS býva proces po uplynutí určitého času ( časové kvantum ) násilne prevedený zo stavu bežiaci do stavu pripravený, aby aj iné procesy mohli byť vykonávané.
# pripravený proces ( READY ) - proces, ktorý by sa mohol vykonávať, ale práve nie je priradený k CPU. OS by mal zabezpečiť naplánovanie takéhoto procesu, t.j. jeho priradenie k CPU v dohľadnom čase - toto je základná idea time sharingu.
+
# '''pripravený proces (READY)''' - proces, ktorý by sa mohol vykonávať, ale práve nie je priradený k CPU. OS by mal zabezpečiť naplánovanie takéhoto procesu, t.j. jeho priradenie k CPU v dohľadnom čase - toto je základná idea time sharingu.
# čakajúci proces ( WAITING ) - proces, ktorý sa ( dočasne ) nemôže vykonávať, lebo čaká na výskyt udalosti. Udalosť sa väčšinou ohlasuje formou prerušenia alebo iným vnútorným mechanizmom OS. Príčiny čakania sú rôznorodé:<br />
+
# '''čakajúci proces (WAITING)''' - proces, ktorý sa ( dočasne ) nemôže vykonávať, lebo čaká na výskyt udalosti. Udalosť sa väčšinou ohlasuje formou prerušenia alebo iným vnútorným mechanizmom OS. Príčiny čakania sú rôznorodé:<br />
 
#* čakanie na dokončenie V/V. Proces čaká vo fronte daného V/V  zariadenia, fronty sú organizované pomocou PCB. Po ukončení  V/V nastane prerušenie, počas jeho spracovania proces prejde do stavu pripravený.
 
#* čakanie na dokončenie V/V. Proces čaká vo fronte daného V/V  zariadenia, fronty sú organizované pomocou PCB. Po ukončení  V/V nastane prerušenie, počas jeho spracovania proces prejde do stavu pripravený.
 
#* čakanie na komunikáciu s iným procesom. Toto sa môže implementovať rôzne, ale komunikáciu ( napr. príjem dát ) od druhého procesu spracuje OS, odovzdá prijaté dáta čakajúcemu procesu a prevedie ho do stavu pripravený
 
#* čakanie na komunikáciu s iným procesom. Toto sa môže implementovať rôzne, ale komunikáciu ( napr. príjem dát ) od druhého procesu spracuje OS, odovzdá prijaté dáta čakajúcemu procesu a prevedie ho do stavu pripravený
 
#* čakanie na uplynutie zadaného času ( sleep )
 
#* čakanie na uplynutie zadaného času ( sleep )
 
#* čakanie na potomka. Proces môže vytvoriť potomka a čakať na jeho ukončenie.
 
#* čakanie na potomka. Proces môže vytvoriť potomka a čakať na jeho ukončenie.
# ukončený proces ( TERMINATED ) - proces, ktorý vykonal svoje inštrukcie, alebo bol inak ukončený ( systémovým volaním abort ). Po  čase sa takýto proces odstráni zo systému. Po skončenom procese však zostáva určitá množina údajov, kde sú uložené napríklad výstupné údaje, o ktorých sa predpokladá, že môžu byť neskôr vyžadované inými procesmi na prečítanie. Ak tieto údaje ešte existujú, proces sa nachádza v stave tzv. zombie.<br />
+
# '''ukončený proces (TERMINATED)''' - proces, ktorý vykonal svoje inštrukcie, alebo bol inak ukončený ( systémovým volaním abort ). Po  čase sa takýto proces odstráni zo systému. Po skončenom procese však zostáva určitá množina údajov, kde sú uložené napríklad výstupné údaje, o ktorých sa predpokladá, že môžu byť neskôr vyžadované inými procesmi na prečítanie. Ak tieto údaje ešte existujú, proces sa nachádza v stave tzv. zombie.<br />
  
 
Životný cyklus daného procesu spočíva v prechodoch medzi rôznymi stavmi, ktoré je vidieť na obr. 3. Medzi typické prechody patria:
 
Životný cyklus daného procesu spočíva v prechodoch medzi rôznymi stavmi, ktoré je vidieť na obr. 3. Medzi typické prechody patria:
Riadok 38: Riadok 37:
 
# ukončenie bežiaceho procesu systémovým volaním exit  a prechod do stavu ukončený.
 
# ukončenie bežiaceho procesu systémovým volaním exit  a prechod do stavu ukončený.
  
[[Súbor:Životný cyklus procesu.jpg]]
+
[[Súbor:Životný cyklus procesu.jpg|framed|center|Obr. 2.1 Niektoré stavy procesu [3]]]
  
Obr. 3  Životný cyklus procesu [3]
 
  
 
==Informácie OS o procese==
 
==Informácie OS o procese==
Riadok 68: Riadok 66:
 
# bežiaci proces dočasne odovzdá riadenie OS počas spracovania prerušenia,
 
# bežiaci proces dočasne odovzdá riadenie OS počas spracovania prerušenia,
 
# niektorý z čakajúcich procesov prejde do stavu pripravený.
 
# niektorý z čakajúcich procesov prejde do stavu pripravený.
 +
 +
Pridelenie CPU druhému procesu znamená, že operačný systém musí zabezpečiť uloženie stavu starého procesu a zaviesť stav nového procesu. Táto úloha sa nazýva prepínanie kontextu a je to pomocná úloha, počas ktorej systém nevykonáva žiadnu „užitočnú“ prácu. Rýchlosť tohto prepínania je hlavne závislá od hardvéru ( rýchlosť pamäte, počet registrov a pod.). Na obr. 2.2 je schéma prepnutia kontextu medzi dvomi procesmi.
 +
 +
[[Súbor:Prepínanie kontextu procesov.png|framed|center|Obr. 2.2 Prepínanie kontextu procesov [6]]]
 +
 +
==Synchronizácia procesov==
 +
 +
Ako sme už uviedli vyššie vykonávanie procesu sa označuje ako sekvenčne a pozostáva z postupnosti inštrukcii vykonávajúcich za sebou. Ak sa vykonáva množina procesov iba na jednoprocesorovom systéme a zdieľa čas procesora, vykonávanie procesu môžme rozdeliť na paralelné sekvenčné a pseudo-paralelné. V prípade, ak systém disponuje viacerými procesormi, môžme skutočne hovoriť o paralelnom vykonávaní.
 +
 +
[[Súbor:Graf znázorňujúci paralelné  a  pseudo-paralelné procesy .png|framed|center|Obr. 2.3 Graf znázorňujúci a) paralelné  a  b) pseudo-paralelné procesy  [6]]]
 +
 +
Ak v systéme existuje viacero procesov, môžu byt nezávislé alebo kooperujúce ( spolupracujúce ). Proces je nezávislí vtedy, keď nemôže ovplyvniť druhé procesy a ani sám nemôže byť ovplyvnený inými procesmi. Je charakteristicky tým, že výsledok vykonávania je závislý len na vstupnom stave a výsledok je vždy rovnaký pre rovnaký vstup. Naopak kooperujúci proces môže ovplyvniť druhé procesy a aj sám môže byť ovplyvnený inými procesmi. Preto, pri rovnakých vstupných hodnotách dosahujeme rôzne výsledky a tie závisia na relatívnej rýchlosti vykonávania procesov.
 +
 +
Každý proces ma vo svojom kóde sekciu, nazývaná kritická sekcia, v ktorej môže používať zdieľané prostriedky alebo modifikovať zdieľanú informáciu systému. Tu nastupuje synchronizácia, ktorej úlohou je zaistiť vzájomné vylúčenie paralelne bežiacich procesov, ktoré využívajú tie isté zdieľané prostriedky.
 +
 +
Teda rýchlosť vykonávania procesov sa musí upraviť tak, aby sa ich kritické sekcie neprekrývali. Takúto synchronizáciu označujeme ako synchronizácia aktívnym alebo pasívnym čakaním. Pri synchronizácii aktívnym čakaním sa odsun kritickej sekcie vykoná vložením pomocných ( prázdnych ) inštrukcii do kódu procesu. Pri pasívnom čakaní sa odsun vykoná dočasným pozastavením procesu, kým sa kritická sekcia neuvoľní.

Aktuálna revízia z 17:34, 28. august 2010

Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.

Proces pozostáva z:

  1. kódu ( textu ) programu - tzv. kódový segment
  2. hodnoty registrov ( napr. hodnota registra IP určuje, kde sa vykonávanie nachádza v texte programu )
  3. dát procesu:
    • a)globálne dáta - prístupné všetkým procedúram programu
    • b)zásobník(y) - implementuje postupnosť volaní jednotlivých procedúr ( call stack )
    • c)hromada ( heap ) - implementuje dynamicky prideľované a vracané dáta
  4. stavu procesu - aktivita vykonávaná procesom

Presný súhrn týchto charakteristík určuje proces v OS.

Stav procesu

Proces sa počas vykonávania nachádza v rôznych stavoch, ktoré určujú prípustné operácie s procesom a reakcie procesu na ne. Stavy môžeme popísať konečným automatom, pričom každý OS sa líši v presnej množine stavov procesov a povolených operáciách ( prechodoch ), takže nasledovné rozdelenie možných stavov je zovšeobecnené:

  1. novovytvorený proces (NEW) - tento proces sa práve vytvoril, ale ešte nebol priradený k CPU – neprevzal riadenie . Procesy sú vytvárané inými procesmi: proces - rodič vytvorí proces - potomka. Táto činnosť sa vykonáva systémom vytvor proces ( presný mechanizmus sa líši systém od systému ). Procesy vytvárajú strom, ktorého koreň vzniká pri štarte OS. Keď sa vytvorí potomok môže rodič pokračovať v činnosti, alebo počká na ukončenie potomka. Medzi rodičom a potomkom OS umožňuje zdieľanie zdrojov, ak o to rodič požiada ( napr. potomok môže dostať prístup k otvoreným súborom rodiča ).
  2. bežiaci proces (RUNNING) - proces, ktorý sa práve vykonáva na CPU. V modernom multiprocesovom OS býva proces po uplynutí určitého času ( časové kvantum ) násilne prevedený zo stavu bežiaci do stavu pripravený, aby aj iné procesy mohli byť vykonávané.
  3. pripravený proces (READY) - proces, ktorý by sa mohol vykonávať, ale práve nie je priradený k CPU. OS by mal zabezpečiť naplánovanie takéhoto procesu, t.j. jeho priradenie k CPU v dohľadnom čase - toto je základná idea time sharingu.
  4. čakajúci proces (WAITING) - proces, ktorý sa ( dočasne ) nemôže vykonávať, lebo čaká na výskyt udalosti. Udalosť sa väčšinou ohlasuje formou prerušenia alebo iným vnútorným mechanizmom OS. Príčiny čakania sú rôznorodé:
    • čakanie na dokončenie V/V. Proces čaká vo fronte daného V/V zariadenia, fronty sú organizované pomocou PCB. Po ukončení V/V nastane prerušenie, počas jeho spracovania proces prejde do stavu pripravený.
    • čakanie na komunikáciu s iným procesom. Toto sa môže implementovať rôzne, ale komunikáciu ( napr. príjem dát ) od druhého procesu spracuje OS, odovzdá prijaté dáta čakajúcemu procesu a prevedie ho do stavu pripravený
    • čakanie na uplynutie zadaného času ( sleep )
    • čakanie na potomka. Proces môže vytvoriť potomka a čakať na jeho ukončenie.
  5. ukončený proces (TERMINATED) - proces, ktorý vykonal svoje inštrukcie, alebo bol inak ukončený ( systémovým volaním abort ). Po čase sa takýto proces odstráni zo systému. Po skončenom procese však zostáva určitá množina údajov, kde sú uložené napríklad výstupné údaje, o ktorých sa predpokladá, že môžu byť neskôr vyžadované inými procesmi na prečítanie. Ak tieto údaje ešte existujú, proces sa nachádza v stave tzv. zombie.

Životný cyklus daného procesu spočíva v prechodoch medzi rôznymi stavmi, ktoré je vidieť na obr. 3. Medzi typické prechody patria:


  1. pripustenie ( admit ) novovytvoreného procesu do stavu pripravený,
  2. naplánovanie ( dispatch ) pripraveného procesu: stane sa bežiacim, doteraz bežiaci proces prešiel do stavu pripravený ( čakajúci ),
  3. prerušenie bežiaceho procesu po uplynutí časového kvanta a prechod do stavu pripravený,
  4. čakanie ( systémové volanie wait ) na výskyt udalosti a prechod zo stavu bežiaci do stavu čakajúci,
  5. po výskyte udalosti ( systémové volanie signal ) prechod zo stavu čakajúci do stavu pripravený,
  6. ukončenie bežiaceho procesu systémovým volaním exit a prechod do stavu ukončený.
Obr. 2.1 Niektoré stavy procesu [3]


Informácie OS o procese

OS drží všetky informácie o daných procesoch v špeciálnej dátovej štruktúre - tabuľke procesov ( PCB ). PCB pozostáva z položiek, kde každý proces má takýto záznam:

  • identifikátor procesu PID - celé číslo, jednoznačne určuje proces ( v danom časovom ( okamihu ),
  • stav procesu ( bežiaci, pripravený, .... ),
  • obsah registrov - tieto informácie sú aktuálne len pre nebežiace procesy,
  • informácie pre plánovač procesov ( priorita, fronty, ... ),
  • informácie o pridelenej pamäti,
  • účtovnícke informácie ( čas strávený na CPU a pod. ),
  • stav V/V ( napr. priradené zariadenia, otvorené súbory a pod.).

Tieto informácie sa niekedy súhrnne nazývajú kontextom procesu.

Plánovanie procesov

Pod pojmom plánovanie procesov rozumieme činnosť OS, ktorý vyberá medzi procesmi a určuje poradie ich vykonávania. Rozlišujeme tri druhy plánovania procesov [3]:

  1. dlhodobé - ak je v systéme viacero úloh ( nie procesov, ale používateľom zadaných úloh, napr. výpočtových ) očakávajúcich spustenie, OS musí určiť, ktorá z nich sa má spustiť ako nasledujúca. Jedná sa vlastne o naplánovanie prechodu zo stavu novovytvorený do stavu čakajúci. V multiprocesovom OS ( interaktivita, time-sharing ) väčšinou nie je prípustné, aby zadaná úloha čakala na spustenie neurčitý čas, lebo systém je príliš zaťažený a preto OS musí oznámiť okamžite, že úloha sa spustiť nedá,
  2. strednodobé - súvisí s odkladaním úloh do operačnej pamäte ( swapping ),
  3. krátkodobé - určenie procesu ( spomedzi pripravených ), ktorý sa má stať bežiacim.

Pri zmene bežiaceho procesu dochádza k multitaskingu. Multitasking trvá určitý čas ( mikrosekundu až milisekundu podľa architektúry a OS ) a preto sa pri návrhu OS musí dať pozor, aby CPU nestrávilo väčšinu svojej produktívnej činnosti pri prepínaní medzi procesmi ( ak dochádza k prepínaniu 100-krát za sekundu a jedno prepnutie trvá 1ms, tak 10% času CPU sa venuje len tejto činnosti ). Poznáme päť základných možností kedy nastáva preplánovanie bežiaceho procesu [3]:

  1. bežiaci proces prejde do stavu čakajúci, t.j. vzdá sa procesora, lebo chce počkať na udalosť,
  2. bežiaci proces sa iniciatívne vzdá procesora a prejde do stavu pripravený v niektorých OS ( MS Windows ) na to existuje volanie systému yield - vzdaj sa CPU ( daj šancu iným ),
  3. bežiaci proces sa ukončí,
  4. bežiaci proces dočasne odovzdá riadenie OS počas spracovania prerušenia,
  5. niektorý z čakajúcich procesov prejde do stavu pripravený.

Pridelenie CPU druhému procesu znamená, že operačný systém musí zabezpečiť uloženie stavu starého procesu a zaviesť stav nového procesu. Táto úloha sa nazýva prepínanie kontextu a je to pomocná úloha, počas ktorej systém nevykonáva žiadnu „užitočnú“ prácu. Rýchlosť tohto prepínania je hlavne závislá od hardvéru ( rýchlosť pamäte, počet registrov a pod.). Na obr. 2.2 je schéma prepnutia kontextu medzi dvomi procesmi.

Obr. 2.2 Prepínanie kontextu procesov [6]

Synchronizácia procesov

Ako sme už uviedli vyššie vykonávanie procesu sa označuje ako sekvenčne a pozostáva z postupnosti inštrukcii vykonávajúcich za sebou. Ak sa vykonáva množina procesov iba na jednoprocesorovom systéme a zdieľa čas procesora, vykonávanie procesu môžme rozdeliť na paralelné sekvenčné a pseudo-paralelné. V prípade, ak systém disponuje viacerými procesormi, môžme skutočne hovoriť o paralelnom vykonávaní.

Obr. 2.3 Graf znázorňujúci a) paralelné a b) pseudo-paralelné procesy [6]

Ak v systéme existuje viacero procesov, môžu byt nezávislé alebo kooperujúce ( spolupracujúce ). Proces je nezávislí vtedy, keď nemôže ovplyvniť druhé procesy a ani sám nemôže byť ovplyvnený inými procesmi. Je charakteristicky tým, že výsledok vykonávania je závislý len na vstupnom stave a výsledok je vždy rovnaký pre rovnaký vstup. Naopak kooperujúci proces môže ovplyvniť druhé procesy a aj sám môže byť ovplyvnený inými procesmi. Preto, pri rovnakých vstupných hodnotách dosahujeme rôzne výsledky a tie závisia na relatívnej rýchlosti vykonávania procesov.

Každý proces ma vo svojom kóde sekciu, nazývaná kritická sekcia, v ktorej môže používať zdieľané prostriedky alebo modifikovať zdieľanú informáciu systému. Tu nastupuje synchronizácia, ktorej úlohou je zaistiť vzájomné vylúčenie paralelne bežiacich procesov, ktoré využívajú tie isté zdieľané prostriedky.

Teda rýchlosť vykonávania procesov sa musí upraviť tak, aby sa ich kritické sekcie neprekrývali. Takúto synchronizáciu označujeme ako synchronizácia aktívnym alebo pasívnym čakaním. Pri synchronizácii aktívnym čakaním sa odsun kritickej sekcie vykoná vložením pomocných ( prázdnych ) inštrukcii do kódu procesu. Pri pasívnom čakaní sa odsun vykoná dočasným pozastavením procesu, kým sa kritická sekcia neuvoľní.