Plánovanie procesov v OS Windows

Z Kiwiki
Verzia z 12:40, 3. august 2010, ktorú vytvoril Juraj (diskusia | príspevky)
Skočit na navigaci Skočit na vyhledávání

Plánovanie procesov v operačnom systéme Windows

Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows. Windowsové aplikácie bežia ako oddelené procesy, kde každý proces môže obsahovať jedeno alebo viac vlákien. Takýto operačný systém nazývame multivláknový (Roubíček, 2000). Vlákna môžeme považovať za podprocesy procesov.

Charakteristika vlákna

Vlákno je systémový objekt, ktorý môže vznikať iba v rámci procesu, preto je viditeľný len vo vnútri procesu (Roubíček, 2000). Základné komponenty, ktoré vlákno obsahuje:

  • Počítadlo inštrukcií,
  • Sadu registrov,
  • Zásobník (Martincová, 1997).

Vlákna vytvorené procesom medzi sebou zdieľajú dáta a prostriedky svojho procesu. Vlákna pracujú obdobne ako procesy, môžu taktiež vytvárať potomkov. Pri čakaní na systémové volanie sa vlákno môže zablokovať, kým je zablokované vykonáva sa iné vlákno procesu. Vlákna sú na sebe závisle na rozdiel od procesov. Vlákna môžu iným vláknam čítať alebo zapisovať do zásobníka (Kvasnica, 2009). Využívanie vlákien nám prináša veľa výhod napr.:

  • Zrýchlenie vykonávania programov,
  • Paralelizácia algoritmov v programe,
  • Využitie multiprocesorových architektúr (Roubíček, 2000).

Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :

  • 0 – inicializované,
  • 1 – pripravené – vlákno je pripravené pre spustenie na procesore,
  • 2 – spustené,
  • 3 – úsporný režim – vlákno je pripravené použiť procesor,
  • 4 – ukončené,
  • 5 – systém čaká - vlákno nie je pripravené pre spustenie, pretože čaká na I/O operáciu, ktorá musí skončiť, pred pokračovaním vlákna,
  • 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,
  • 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).

Vlákna na používateľskej úrovni

  • Existujú na úrovni programu, jadro operačného programu o nich nevie.
  • Prepínanie kontextu vlákien nevyžaduje služby operačného systému.
  • Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.
  • Stavy vlákien sú nezávislé od stavov procesov. Ak vlákno uskutočňuje volanie služby jadra operačného systému zablokuje sa celý proces (Martincová, 1997).

Vlákna na úrovni jadra operačného systému

  • Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro.
  • Informácie o kontexte vlákien uchováva jadro (Martincová, 1997).

Modelové situácie vlákien v operačnom systéme Windows

Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:

  • Many to many – Viacero vlákien na používateľskej úrovni sa môže zobrazovať do viacerých vlákien na úrovni jadra operačného systému.
  • One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).

Plánovanie procesov

Plánovane prebieha nad vláknami a nie nad procesmi. Plánovač vlákien v operačnom systéme Windows používa priority, preemptívny plánovací algoritmus (Roubíček, 2000). Plánovač zabezpečuje vláknam s vysokou prioritou neustáli beh. Časť jadra operačného systému, ktorá vybavuje plánovanie sa nazýva dispečer. Vlákno vybrané pre beh dispečerom, bude bežať pokiaľ tomu nezabraní vlákno s vyššou prioritou, pokiaľ neskončí, kým mu neskončí pridelené časové kvantum alebo pokiaľ nečaká na nejakú I/O operáciu. Ak bude vlákno s vyššou prioritou pripravené pre spracovanie a na procesore a beží vlákno s nižšou prioritou, toto vlákno bude prerušené a procesor sa pridelí vláknu s vyššou prioritou ktoré je zatiaľ v stave čakajúci. Windows nie je operačný systém s tvrdým prideľovaním času, pretože nie je schopný garantovať, že vlákno reálneho času sa začne vykonávať v rámci nejakého špecifického časového limitu (Roubíček, 2000). Dispečer využíva tridsaťdva stupňovú schému priorít rozhodovania poradia vykonávania vlákien. Šestnásť priorít je určených pre vlákna s premenlivou prioritou, tých je v systéme väčšina. Ostávajúcich šestnásť je vyčlenených pre vlákna reálneho času, to sú procesy ktoré vyžadujú okamžitú reakciu procesora. Patria sem procesy, ktoré obsluhujú myš, klávesnicu alebo iné zariadenia (Roubíček, 2000). Priority sú rozdelené do dvoch tried:

  • Premenná trieda obsahuje vlákna s prioritou od 1 do 15.
  • Trieda reálneho času obsahuje vlákna s prioritou od 16 do 31. Nachádzajú sa tam aj vlákna bežiace v priorite 0, ktoré majú na starosti správu pamäte (Roubíček, 2000).

Dispečer používa front pre každé prioritné plánovanie, prechádza nastavenia priorít vlákien vo fronte od najvyššej až po najnižšiu pokiaľ nenájde vlákno, ktoré je pripravené pre beh. Ak žiadne takéto vlákno nenájde, dispečer vykoná špeciálne vlákno nazývané nečinné, ktoré obsluhuje operačnú pamäť (Kvasnica, 2009). Každá prioritná trieda má samostatnú frontu procesov, ktoré čakajú na pridelenie procesora. Tieto fronty sa uchovávajú v tzv. dispečerskej databáze (Roubíček, 2000). V dispečerskej databáze sa nachádzajú aj informácie o stave procesu a informácie, na ktorom procesore sa proces vykonáva. Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:

  • Trieda priority reálneho času,
  • Trieda vysokej priority,
  • Trieda vyššej normálnej priority,
  • Trieda normálnej priority,
  • Trieda nižšej normálnej priority,
  • Trieda nečinnej priority (Roubíček, 2000).

Všetky triedy priorít okrem triedy priority reálneho času sú premenné triedy, zanemená to, že priority vlákien sa môžu meniť (Martincová, 1997). Priorita vlákien sa mení na závislosti posledného využitia procesora. Ak vlákno využilo celé svoje pridelené časové kvantum jeho priorita sa zníži o jednu úroveň. Ako náhle proces čaká na I/O operáciu, potom sa jeho priorita zvýši. Priorita sa zvyšuje vo väčšej miere pre interaktívne procesy, t.j. ak proces čaká na vstup z klávesnice jeho priorita nadobudne väčšiu hodnotu ako čakajúci proces na I/O operáciu na diskovom zariadení. V rámci každej prioritnej triedy sa nachádzajú aj tzv. relatívne priority. Táto metóda je využívaná vo viacerých systémoch so zdieľaním času (Martincová, 1997). Tieto priority sú prioritami vlákien vytvorených procesom. Relatívne priority sú:

  • Priorita kritického času,
  • Najvyššia priorita,
  • Vyššia normálna priorita,
  • Normálna priorita,
  • Nižšia normálna priorita,
  • Najnižšia priorita,
  • Nečinná priorita (Roubíček, 2000).

Prioritu tvorí prioritná trieda procesu a relatívna priorita t.j. priorita vlákna, je numericky vyjadrená. Vlákno je zaradené do prioritnej triedy procesu podľa procesu, ktorý ho vytvára, t.j. nachádzajú sa v tej istej prioritnej triede. Priorita vlákna sa môže nepatrne znižovať alebo zvyšovať v rozmedzí relatívnej priority. Vzťah priorít je znázornený v tabuľke č. 1. Triedy priorít procesov reprezentujú rozsah pre relatívne priority vlákien. Hodnota relatívnej priority je nastavená na normálovú hodnotu pre každú špecifickú triedu priorít. Číselne vyjadrenú hodnotu relatívnej priority nazývame základnou prioritou (Roubíček, 2000). Hodnoty základných priorít pre prioritné triedy nastavených na normálovú prioritu vyjadrené numericky sú :

  • Trieda priorít reálneho času – 24,
  • Trieda vysokej priority – 12,
  • Trieda vyššej normálnej priority – 10,
  • Trieda normálnej priority – 8,
  • Trieda nižšej normálnej priority – 6,
  • Trieda voľnej priority – 4.

Pri spustení interaktívneho programu v systéme užívateľom, systém potrebuje obzvlášť dobrý výkon na udržanie jeho interaktivity s užívateľom, preto Windows má špeciálne plánovacie pravidlo pre procesy v triede normálnej priority (Roubíček, 2000). Windows rozlišuje dva typy procesov a to nasledovné:

  • Procesy na pozadí,
  • Procesy v popredí (Kvasnica, 2009).

Procesy v popredí sú väčšinou zobrazované na obrazovke. Ak sa proces presunie medzi procesy v popredí plánovač mu zvýši prioritu, t.j. zvýšenie prideleného času na procesore podľa nejakého faktoru, zvyčajne býva tri (Roubíček, 2000). Toto zvýšenie časového kvanta procesu o faktor tri má za následok zvýšenie doby behu na procesore na trojnásobok, t.j. trojnásobné časové kvantum.


Prioritné triedy procesov a priority vlákien [1]
Trieda priority procesu Priorita vlákna Základná priorita
Trieda priority reálneho času
Priorita kritického času
Najvyššia priorita
Vyššia normálna priorita
Normálna priorita
Nižšia normálna priorita
Nižšia priorita
Voľná priorita
31
26
25
24
23
22
16
Trieda vysokej priority
Priorita kritického času
Najvyššia priorita
Vyššia normálna priorita
Normálna priorita
Nižšia normálna priorita
Nižšia priorita
Voľná priorita
15
15
14
13
12
11
1
Trieda vyššej normálnej priority
Priorita kritického času
Najvyššia priorita
Vyššia normálna priorita
Normálna priorita
Nižšia normálna priorita
Nižšia priorita
Voľná priorita
15
12
11
10
9
8
1
Trieda normálnej priority
Priorita kritického času
Najvyššia priorita
Vyššia normálna priorita
Normálna priorita
Nižšia normálna priorita
Nižšia priorita
Voľná priorita
15
10
9
8
7
6
1
Trieda nižšej normálnej priority
Priorita kritického času
Najvyššia priorita
Vyššia normálna priorita
Normálna priorita
Nižšia normálna priorita
Nižšia priorita
Voľná priorita
15
8
7
6
5
4
1
Trieda voľnej priority
Priorita kritického času
Najvyššia priorita
Vyššia normálna priorita
Normálna priorita
Nižšia normálna priorita
Nižšia priorita
Voľná priorita
15
6
5
4
3
2
1