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

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 38: Riadok 38:
  
 
[[Súbor:Životný cyklus procesu.jpg]]
 
[[Súbor:Životný cyklus procesu.jpg]]
 +
 
Obr. 3  Životný cyklus procesu [3]
 
Obr. 3  Životný cyklus procesu [3]
  

Verzia zo dňa a času 23:44, 6. apríl 2010

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 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. 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é.
  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ý.

Životný cyklus procesu.jpg

Obr. 3 Životný cyklus 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ý.