<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Matesx</id>
	<title>Kiwiki - Príspevky používateľa [sk]</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Matesx"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php/%C5%A0peci%C3%A1lne:Pr%C3%ADspevky/Matesx"/>
	<updated>2026-04-29T08:15:12Z</updated>
	<subtitle>Príspevky používateľa</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Bakal%C3%A1rske_pr%C3%A1ce&amp;diff=6489</id>
		<title>Bakalárske práce</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Bakal%C3%A1rske_pr%C3%A1ce&amp;diff=6489"/>
		<updated>2010-08-03T01:57:51Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ako_pisat_wikiPracu|Dusan|Ggaspar|Jakub Trska}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mainpage_topbox&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mainpage_pagetitle&amp;quot;&amp;gt;Bakalárske práce 2009/2010&amp;lt;/div&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;  border=1 cellpadding=5 cellspacing=0 style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
!Autor&lt;br /&gt;
!Názov práce&lt;br /&gt;
!style=&amp;quot;width:150px&amp;quot;|Stav práce&lt;br /&gt;
!style=&amp;quot;width:90px&amp;quot;|Zadanie&lt;br /&gt;
|-&lt;br /&gt;
|Milan Porubský&lt;br /&gt;
|[[Systém tvorby rozvrhu]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Systém tvorby rozvrhu (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Dušan Pagáč&lt;br /&gt;
|[[Off-line funkcionalita on-line web aplikácií]]&lt;br /&gt;
|{{stav_prace|50}}&lt;br /&gt;
|[[Off-line funkcionalita on-line web aplikácií (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Dávid Ďurika&lt;br /&gt;
|[[Štatistický modul v systéme rozvrhu FM]]&lt;br /&gt;
|{{stav_prace|45}}&lt;br /&gt;
|[[Štatistický modul v systéme rozvrhu FM (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Gabriel Gašpar, Bc.&lt;br /&gt;
|[[Autonómny systém pre zber teplotných dát z pôdneho profilu]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Autonómny systém pre zber teplotných dát z pôdneho profilu (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Lukáš Krajči&lt;br /&gt;
|[[Otvorené formáty súborov kancelárskych softvérov]]&lt;br /&gt;
|{{stav_prace|66.6}}&lt;br /&gt;
|[[Otvorené formáty súborov kancelárskych softvérov (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Martin Pilař&lt;br /&gt;
|[[Poloautomatický parkovací systém]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Poloautomatický parkovací systém (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ľubomír Milko&lt;br /&gt;
|[[Aplikácie teórie grafov a teórie hier v rozhodovacích problémoch]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Aplikácie teórie grafov a teórie hier v rozhodovacích problémoch (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Peter Magala&lt;br /&gt;
|[[Bezpečnosť webových aplikácií]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Bezpečnosť webových aplikácií (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ján Čižmárik&lt;br /&gt;
|[[Metódy riešenia optimalizačných problémov]]&lt;br /&gt;
|{{stav_prace|20}}&lt;br /&gt;
|[[Metódy riešenia optimalizačných problémov (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Martin Cibulka&lt;br /&gt;
|[[Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme]]&lt;br /&gt;
|{{stav_prace|98}}&lt;br /&gt;
|[[Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Lukáš Ronec&lt;br /&gt;
|[[Generátor náhľadov fotografií umiestnených na webe]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Generátor náhľadov fotografií umiestnených na webe (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Július Jančo&lt;br /&gt;
|[[Implementácia protokolu RC5 na platforme procesora Cypress]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Implementácia protokolu RC5 na platforme procesora Cypress (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Juraj Prívara&lt;br /&gt;
|[[Použitie mikrouchopovačov MEMS]]&lt;br /&gt;
|{{stav_prace|65}}&lt;br /&gt;
|[[Použitie mikrouchopovačov MEMS (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Emanuel Dubovan&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Dušan Vojsovič&lt;br /&gt;
|[[Porovnanie výkonnosti virtualizačných softvérových produktov]]&lt;br /&gt;
|{{stav_prace|20}}&lt;br /&gt;
||[[Porovnanie výkonnosti virtualizačných softvérových produktov (Zadanie)|Zadanie BP]]&lt;br /&gt;
|-&lt;br /&gt;
|Jozef Janega&lt;br /&gt;
|[[Fotoelektrický parkovací senzor]]&lt;br /&gt;
|{{stav_prace|10}}&lt;br /&gt;
||[[Fotoelektrický parkovací senzor (Zadanie)|Zadanie BP]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mainpage_topbox&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mainpage_pagetitle&amp;quot;&amp;gt;Bakalárske práce 2008/2009&amp;lt;/div&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;  border=1 cellpadding=5 cellspacing=0 style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow&amp;quot;&lt;br /&gt;
! Autor&lt;br /&gt;
!Názov&lt;br /&gt;
!style=&amp;quot;width:150px&amp;quot;|Stav práce&lt;br /&gt;
!style=&amp;quot;width:90px&amp;quot;|Zadanie&lt;br /&gt;
|-&lt;br /&gt;
|Milan Lokšík&lt;br /&gt;
|[[Simulácia a modelovanie technologických procesov pomocou stavebnice FESTO]]&lt;br /&gt;
|{{stav_prace|5}}&lt;br /&gt;
|- &lt;br /&gt;
|Ivana Zuzinová&lt;br /&gt;
|[[Pokročilé vlastnosti skiptovacích jazykov]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|-&lt;br /&gt;
|Martin Starosta&lt;br /&gt;
|[[Webové služby v Jave]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Staršie práce budú pridané.&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Študentské práce]]&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mates_volna_2003.jpg&amp;diff=6484</id>
		<title>Súbor:Mates volna 2003.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mates_volna_2003.jpg&amp;diff=6484"/>
		<updated>2010-08-03T01:34:26Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mates_norm%C3%A1lna_2003.jpg&amp;diff=6483</id>
		<title>Súbor:Mates normálna 2003.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mates_norm%C3%A1lna_2003.jpg&amp;diff=6483"/>
		<updated>2010-08-03T01:33:59Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mates_volna_2008.jpg&amp;diff=6482</id>
		<title>Súbor:Mates volna 2008.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mates_volna_2008.jpg&amp;diff=6482"/>
		<updated>2010-08-03T01:33:21Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mates_najvy%C5%A1%C5%A1ia_2008.jpg&amp;diff=6481</id>
		<title>Súbor:Mates najvyššia 2008.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mates_najvy%C5%A1%C5%A1ia_2008.jpg&amp;diff=6481"/>
		<updated>2010-08-03T01:31:46Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6480</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6480"/>
		<updated>2010-08-03T01:18:49Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6477</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6477"/>
		<updated>2010-08-03T00:47:20Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Martin Cibulka|Ing. Peter Kvasnica,PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Bakalárska práca|Mechatronika}} &lt;br /&gt;
{{Praca_uvod|1|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní||||||||}}&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|Cieľom záverečnej práce bolo priblížiť sa správanie operačných systémov opisom jeho prvkov, ako sú procesy, vlákna a algoritmy spracovania procesov v systéme a opísať správanie vybraného operačného systému pri nastaveniach rôznych priorít a prioritných tried procesu pomocou vlastnej aplikácie. Vytvorenej vo vyššom programovacom jazyku C++. Práca je rozdelená do 5 kapitol. Obsahuje 18 obrázkov, 5 tabuľky a 3 prílohy. &lt;br /&gt;
y&lt;br /&gt;
|The aim of final thesis was to clarify the behavior of operating systems by description of their components such as processes, threads and processes processing algorithms in the system and to describe the behavior of the selected operating system with settings for different priorities and the priority classes through the process of custom application. Created in a higher programming language C + +. The work is divided into 5 chapters. It contains 18 pictures, 5 tables and 3 appendices.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Táto práca pojednáva o prioritných triedach procesov a prioritách vlákien operačného systému Microsoft Windows a ich vplyve na správanie sa procesu a rýchlosť spracovania v operačnom systéme. Zámerom mojej práce je priblížiť spávanie sa operačných systémov, pomocou opisu jeho prvkov a algoritmov pri spracovávaní procesov v systéme. Vyžíva teoretické vedomosti z informačných predmetov odborového štúdia na fakulte mechatroniky a poznatky získané zo štúdia aktuálnej odbornej literatúry. &lt;br /&gt;
V prevej kapitole práce sa venujem problematike samostatných procesov a prvkov, ktoré proces obsahuje alebo ho definujú v prostredí operačného systému.&lt;br /&gt;
Druhá kapitola pojednáva o plánovaní procesov a plánovacích algoritmoch v operačných systémoch súvisiacich s riešenou problematikou v súlade s našim zadaním.&lt;br /&gt;
Tretia kapitola sa zaoberá implementáciou aplikácií pod operačným systémom Microsoft Windows a popisuje teóriou vlákien procesu.&lt;br /&gt;
V štvrtej kapitole sa nachádza rozbor programu, vytvoreného pre meranie časov spracovania procesu, ktorý popisuje matematickú operáciu pri nastavení rôznych prioritných tried procesu a priorít vlákien v operačnom systéme.&lt;br /&gt;
V piatej kapitole sa nachádzajú zhrnuté výsledky vykonaných meraní na operačných systémoch spoločnosti Microsoft a ich zhrnutie z hľadiska efektívnosti pre rýchlosť spracovania v systéme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Procesy=&lt;br /&gt;
Operačný systém musí byť schopný vykonávať niekoľko programov súčasne. Aj systémy, u ktorých je užívateľ schopný spustiť iba jeden program, taktiež musia využívať aj svoje vnútorné procesy. Užívateľské alebo systémové bežiace programy sú si veľmi podobné a nazývajú sa procesy (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Proces==&lt;br /&gt;
Neformálne je proces definovaný ako bežiaci program vrátane všetkých informácií potrebných pre jeho opätovné spustenie od inštrukcie, kde bol prerušený (Martincová, 1997). Proces sa vykonáva sekvenčne t.j. v určitom čase sa vykonáva iba jedna inštrukcia programu. V operačných systémoch s technológiou zdieľania času sa používateľské programy nazývajú úlohy. Vo väčšine operačných systémoch sa používa najčastejšie termín proces (Plášil, 1992).&lt;br /&gt;
Proces je viac ako len kód programu, ktorý sa vykonáva. Proces zahŕňa aj kontext, ktorý ho definuje. Do kontextu patria hodnoty čítača inštrukcií a stavového registra procesu, ktorý špecifikuje strojový stav počítača vo vzťahu k procesu (Madnick, 1983). V stavovom registri sa nachádza pole výsledkov, posledného výpočtu (nulový, kladný, záporný). Ďalšie dôležité pole, ktoré je typickou súčasťou stavového registra, indikuje aktuálnu prioritu procesu. Kontext zahŕňa aj tzv. zásobník, v ktorom sú uložené dočasné dáta procesu. Patria tam napr. parametre podprogramov, lokálne premenné. Proces obsahuje aj dátový segment, v ktorom sa nachádzajú globálne premenné. Nachádza sa v ňom ukazovateľ zásobníku, obsahujúci aktuálnu adresu nasledovnej položky v zásobníku. Obsahuje taktiež záznam procesu, ktorý definuje stav procesu a obsahuje riadiace informácie procesu (Kvasnica, 2009).&lt;br /&gt;
Program sám o sebe nie je považovaný ako proces. Je považovaný za pasívnu jednotka uložená napríklad na pevnom disku. Zatiaľ čo proces je aktívna jednotka, v ktorej rozhoduje čítač inštrukcií, ktorá inštrukcia sa vykoná (Martincová, 1997). K procesu zahŕňame aj systémové prostriedky, ktoré sú potrebné k jeho vykonaniu a následnému ukončeniu. Jeden program môže pozostávať aj z viacerých procesov, ktoré treba vykonať. Ale každý program má svoju sekvenciu vykonávania procesov . Proces taktiež môže vytvoriť viacej procesov počas svojho vykonávania. Proces vytvorený iným procesom sa nazýva potomok, vytvárajúci proces sa nazýva rodič. Každý potomok taktiež môže vykonávať nové procesy, a tak vzniká strom procesov (Kvasnica, 2009).&lt;br /&gt;
Novo vytvorený proces potrebuje pre svoju činnosť prostriedky systému. Tieto prostriedky môže získať priamo od operačného systému, alebo mu rodičovský proces pridelí podmnožinu svojich prostriedkov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V okamihu, keď proces vytvorí ďalší proces sú dve možnosti jeho ďalšej existencie:&lt;br /&gt;
*Rodičovský proces beží súbežne zo synovským.&lt;br /&gt;
*Rodičovský proces čaká, než sa dokončí niektorý alebo všetky „synovské“ procesy (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
Vzhľadom na obmedzený adresný priestor nastávajú dve varianty:&lt;br /&gt;
*Potomok je duplikátom rodičovského procesu.&lt;br /&gt;
*Potomok má vlastný program, ktorý sa zavedie do pamäte (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
K ukončeniu potomka procesu dochádza po vykonaní všetkých jeho inštrukcií. Potomok môže vrátiť dáta t.j. výsledok rodičovskému procesu. Všetky prostriedky využívané potomkom sa uvoľnia. Ukončenie procesu môže vyžiadať aj iný proces pomocou systémového volania. Väčšinou táto žiadosť je vyplnená iba rodičovskému procesu, inak by užívateľ mohol zrušiť hoci aký proces. Rodičovský proces musí uchovávať informácie, ktoré získa pri vytvorení potomka, aby rodičovský proces prípadne mohol zrušiť potomka. Rodič môže žiadať o zrušenie potomka z nasledovných dôvodov:&lt;br /&gt;
&lt;br /&gt;
*Potomok, prekročil možnosti systémových zdrojov, ktoré mu boli pridelené.&lt;br /&gt;
*Úloha ktorú vykonáva, naďalej nie je potrebná. &lt;br /&gt;
*Rodičovský proces bol ukončený a operačný systém ukončuje všetkých jeho potomkov (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Pri vykonávaní množiny procesov na jednom procesore pomocou techniky zdieľania času, môžeme hovoriť o paralelno sekvenčnom vykonávaní t.j. striedavé prepínanie medzi procesmi (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Stavy procesov===&lt;br /&gt;
&lt;br /&gt;
Stav procesu je premenlivý, mení sa podľa aktuálnej aktivity procesu v počítači. Môže sa nachádzať v jednom z uvedených stavov:&lt;br /&gt;
*Nový – proces, ktorý bol práve vytvorený.&lt;br /&gt;
*Prebiehajúci – inštrukcie programu začali byť vykonávané.&lt;br /&gt;
*Čakajúci – proces čaká na nejakú udalosť, napr. dokončenie výstupnej alebo vstupnej operácie, alebo na príchod udalosti potrebnej pre jeho pokračovanie.&lt;br /&gt;
*Pripravený – proces čaká na pridelenie procesora.&lt;br /&gt;
*Ukončený – proces dokončil svoju činnosť (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Názvy stavov sa môžu líšiť v závislosti od operačných systémov. Diagram stavov procesu je uvedený na obrázku č. 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR1.jpg|center|framed|Obrázok 1 Stavy procesov]]&lt;br /&gt;
&lt;br /&gt;
===Udalosť počas  vykonávania  procesu===&lt;br /&gt;
&lt;br /&gt;
Počas behu procesu môžu nastať určité situácie zapríčinené udalosťami vyžadujúce osobitú obsluhu (Plášil, 1992).&lt;br /&gt;
 &lt;br /&gt;
Jedná sa o chovanie procesu pri príjme synchronizačných signálov od operačného systému alebo iných procesov. Činnosť na tieto prijaté signály môže byť štandardná, definovaná vopred v operačnom systéme či užívateľsky definovaná (Martincová, 1997). V druhom prípade je na programátorovi, ako bude reagovať proces po príjme takéhoto riadiaceho signálu.&lt;br /&gt;
Tieto udalosti rozdeľujeme na :&lt;br /&gt;
&lt;br /&gt;
*interné – vznikajú v rámci procesu a zapríčiňujú zmenu stavu procesu:&lt;br /&gt;
**systémové volanie – skok do jadra,&lt;br /&gt;
**chyba – zlá inštrukcia, porušenie oprávnenia k prístupu do pamäte atď.,&lt;br /&gt;
**zlyhanie stránky – výpadok alebo poškodenie stránky pri stránkovaní.&lt;br /&gt;
*externé  - tieto udalosti neriadi proces, sú vonkajšie, väčšinou oznamujú prerušenia, ktoré obsluhuje operačný systém&lt;br /&gt;
**vstup z terminálu (znak),&lt;br /&gt;
**ukončenie diskovej operácie (Kvanica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Riadiaci blok procesu (PCB)===&lt;br /&gt;
&lt;br /&gt;
Každý proces v systéme je reprezentovaný záznamom, ktorý sa nazýva riadiaci blok procesu. Obsahuje veľké množstvo informácií o procese, napr. :&lt;br /&gt;
*identifikačné číslo procesu &lt;br /&gt;
*stav procesu – (nový, prebiehajúci, čakajúci, pripravený, ukončený )&lt;br /&gt;
*hodnota čítača inštrukcií – indikuje adresu nasledujúcej inštrukcie vo vykonávaní procesu&lt;br /&gt;
*CPU registre – podľa architektúry použitého procesora sa mení počet registrov. Obsahuje obsiahle akumulátory, indexové registre, ukazovatele do zásobníkov, univerzálne registre atď.. V prípade prerušenia vykonávania procesu sa aktuálny obsah registra tak ako ukazovatele programu musia uložiť do riadiaceho bloku procesov, aby sa proces mohol korektne spustiť  od inštrukcie, pred ktorou bol prerušený&lt;br /&gt;
*informácie pre plánovanie procesov – priorita procesu, ukazovatele do plánovacích front a pod.&lt;br /&gt;
*informácie pre správu pamäte – hodnoty limitných a bázových registrov, tabuľku stránok a iné&lt;br /&gt;
*účtovacie informácie – informácie o čase pridelenia procesora t.j. spotrebovaný čas procesora, číslo procesu, časové limity pre procesor atď.&lt;br /&gt;
*I/O informácie – zoznam I/O  zariadení alokovaných pre proces, zoznam otvorených súborov a pod (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
Pri plánovaní procesov bolo zavedené tzv. multiprogramovanie, ktorého cieľom bolo efektívnejšie využívanie procesora pri vykonávaní procesov. Podstata multiprogramovania je v tom, že v pamäti je viac procesov (Martincová, 1997). Zdanlivo to môže vyzerať tak že procesor vykonáva procesy súčasne, ale procesor prepína medzi nimi. Týmto spôsobom sa znižuje potrebný celkový čas na vykonanie jednej úlohy. Multiprogramovanie dovoľuje aj zdieľanie času. Tzv. zdieľanie času je veľmi rýchle prepínanie medzi procesmi vo fronte pripravených procesov, aby bola zabezpečená interaktívna komunikácia medzi programom a užívateľom. Systémy iba s jedným procesorom môžu vždy vykonávať iba jeden proces v určitom okamihu (Plášil, 1992). Zostávajúce programy vo fronte pripravených procesov musia čakať na pridelenia procesora. Úlohou plánovania procesov je rozhodnúť, ktorý z procesov pri prepnutí bude pridelený na procesor (Kvasnica, 2009).&lt;br /&gt;
Prepínanie kontextu medzi dvomi procesmi je schematicky  znázornené na obrázku 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR2.jpg|center|framed|Obrázok 2 Prepínanie kontextu procesov]]&lt;br /&gt;
&lt;br /&gt;
===Fronta===&lt;br /&gt;
&lt;br /&gt;
V okamihu vytvorenia procesu je tento proces zaradený do fronty procesov. Vo fronte sú zaradené všetky procesy systému. Procesy, ktoré sa nachádzajú v operačnej pamäti a čakajú na pridelenie procesora sa zaraďujú do fronty pripravených procesov. Je vytváraný zo zreťazených riadiacich blokov do zoznamu. Pozícia v zozname sa určuje podľa priority procesu, ktorá sa nachádza v riadiacom bloku procesu. Hlavička fronty pripravených procesov obsahuje ukazovatele na riadiace bloky procesov prvého a posledného procesu vo fronte (Kvasnica, 2009). Jednotlivé riadiace bloky procesov obsahujú položku ukazovateľa na riadiaci blok procesu nasledujúceho procesu vo fronte pripravených procesov. Ukážka fronty je znázornená na obrázku č. 3.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR3.jpg|center|framed|Obrázok 3 Ukážka frontu pripravených procesov]]&lt;br /&gt;
&lt;br /&gt;
V systéme sa vytvára viac front procesov. Pri vykonávaní procesu môže nastať prípad, že proces bude musieť čakať na nejakú udalosť potrebnú pre dokončenie procesu. Napr. ukončenie I/O operácie na niektorom zo zdieľaných zariadení napr. disk, optická mechanika. Môže nastať prípad, že určité systémové zariadenie môže byť obsadené, pretože iný proces môže mať také isté požiadavky. V tom prípade sa vytvára fronta čakajúcich procesov pred každým zariadením. Všetky systémové zdieľané zariadenia majú svoju vlastnú frontu (Cada, 1993). &lt;br /&gt;
Novo vzniknutý proces je umiestnený do fronty pripravených procesov a čaká na pridelenie procesora. Po pridelení procesora sa proces môže odoberať jedným z nasledovných spôsobov:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#proces požiada o I/O operáciu a bude umiestnený do fronty príslušného zariadenia.&lt;br /&gt;
#proces vytvorí nový proces a čaká na jeho ukončenie.&lt;br /&gt;
#procesu môže byť odobratý procesor, z dôvodu prerušenia spôsobeného napr. výskytom chyby a je umiestnený do fronty pripravených procesov.&lt;br /&gt;
#Bolo vyčerpané pridelené časové kvantum (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
V prvých spomínaných prípadoch sa proces môže prepnúť z kontextu čakajúci do kontextu pripravený, následne je umiestnený do fronty pripravených procesov. Proces pokračuje v tomto cykle kým sa nedokončí. Po ukončení sa odstráni zo všetkých front a jeho riadiaci blok procesu a prostriedky, ktoré využíval sa uvoľnia.&lt;br /&gt;
&lt;br /&gt;
===Prepínanie kontextu===&lt;br /&gt;
Pri pridelení procesora inému procesu sa musí uložiť stav vykonávaného procesu do riadiaceho bloku procesu a zaviesť stav nového procesu . Táto činnosť sa nazýva prepínanie kontextu, je to pomocná činnosť a počas jej vykonávania systém nemôže vykonávať nič iné (Martincová, 1997). Rýchlosť prepínania kontextu je závislá na vybavovacej rýchlosti pamäte a na počte registrov, ktoré musia byť prekopírované. Typická doba na prepínanie kontextu sa pohybuje okolo 1 až 10 µs. Pri pridelení procesora procesu sa mu musí prideliť časové kvantum (možný čas strávený na procesore) a taktiež systémové prostriedky (Kvasnica, 2009).&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6475</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6475"/>
		<updated>2010-08-03T00:17:29Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Martin Cibulka|Ing. Peter Kvasnica,PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Semetrálna práca|Mechatronika}} &lt;br /&gt;
{{Praca_uvod|1|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní||||||||}}&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|Cieľom záverečnej práce bolo priblížiť sa správanie operačných systémov opisom jeho prvkov, ako sú procesy, vlákna a algoritmy spracovania procesov v systéme a opísať správanie vybraného operačného systému pri nastaveniach rôznych priorít a prioritných tried procesu pomocou vlastnej aplikácie. Vytvorenej vo vyššom programovacom jazyku C++. Práca je rozdelená do 5 kapitol. Obsahuje 18 obrázkov, 5 tabuľky a 3 prílohy. &lt;br /&gt;
y&lt;br /&gt;
|The aim of final thesis was to clarify the behavior of operating systems by description of their components such as processes, threads and processes processing algorithms in the system and to describe the behavior of the selected operating system with settings for different priorities and the priority classes through the process of custom application. Created in a higher programming language C + +. The work is divided into 5 chapters. It contains 18 pictures, 5 tables and 3 appendices.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Táto práca pojednáva o prioritných triedach procesov a prioritách vlákien operačného systému Microsoft Windows a ich vplyve na správanie sa procesu a rýchlosť spracovania v operačnom systéme. Zámerom mojej práce je priblížiť spávanie sa operačných systémov, pomocou opisu jeho prvkov a algoritmov pri spracovávaní procesov v systéme. Vyžíva teoretické vedomosti z informačných predmetov odborového štúdia na fakulte mechatroniky a poznatky získané zo štúdia aktuálnej odbornej literatúry. &lt;br /&gt;
V prevej kapitole práce sa venujem problematike samostatných procesov a prvkov, ktoré proces obsahuje alebo ho definujú v prostredí operačného systému.&lt;br /&gt;
Druhá kapitola pojednáva o plánovaní procesov a plánovacích algoritmoch v operačných systémoch súvisiacich s riešenou problematikou v súlade s našim zadaním.&lt;br /&gt;
Tretia kapitola sa zaoberá implementáciou aplikácií pod operačným systémom Microsoft Windows a popisuje teóriou vlákien procesu.&lt;br /&gt;
V štvrtej kapitole sa nachádza rozbor programu, vytvoreného pre meranie časov spracovania procesu, ktorý popisuje matematickú operáciu pri nastavení rôznych prioritných tried procesu a priorít vlákien v operačnom systéme.&lt;br /&gt;
V piatej kapitole sa nachádzajú zhrnuté výsledky vykonaných meraní na operačných systémoch spoločnosti Microsoft a ich zhrnutie z hľadiska efektívnosti pre rýchlosť spracovania v systéme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Procesy=&lt;br /&gt;
Operačný systém musí byť schopný vykonávať niekoľko programov súčasne. Aj systémy, u ktorých je užívateľ schopný spustiť iba jeden program, taktiež musia využívať aj svoje vnútorné procesy. Užívateľské alebo systémové bežiace programy sú si veľmi podobné a nazývajú sa procesy (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Proces==&lt;br /&gt;
Neformálne je proces definovaný ako bežiaci program vrátane všetkých informácií potrebných pre jeho opätovné spustenie od inštrukcie, kde bol prerušený (Martincová, 1997). Proces sa vykonáva sekvenčne t.j. v určitom čase sa vykonáva iba jedna inštrukcia programu. V operačných systémoch s technológiou zdieľania času sa používateľské programy nazývajú úlohy. Vo väčšine operačných systémoch sa používa najčastejšie termín proces (Plášil, 1992).&lt;br /&gt;
Proces je viac ako len kód programu, ktorý sa vykonáva. Proces zahŕňa aj kontext, ktorý ho definuje. Do kontextu patria hodnoty čítača inštrukcií a stavového registra procesu, ktorý špecifikuje strojový stav počítača vo vzťahu k procesu (Madnick, 1983). V stavovom registri sa nachádza pole výsledkov, posledného výpočtu (nulový, kladný, záporný). Ďalšie dôležité pole, ktoré je typickou súčasťou stavového registra, indikuje aktuálnu prioritu procesu. Kontext zahŕňa aj tzv. zásobník, v ktorom sú uložené dočasné dáta procesu. Patria tam napr. parametre podprogramov, lokálne premenné. Proces obsahuje aj dátový segment, v ktorom sa nachádzajú globálne premenné. Nachádza sa v ňom ukazovateľ zásobníku, obsahujúci aktuálnu adresu nasledovnej položky v zásobníku. Obsahuje taktiež záznam procesu, ktorý definuje stav procesu a obsahuje riadiace informácie procesu (Kvasnica, 2009).&lt;br /&gt;
Program sám o sebe nie je považovaný ako proces. Je považovaný za pasívnu jednotka uložená napríklad na pevnom disku. Zatiaľ čo proces je aktívna jednotka, v ktorej rozhoduje čítač inštrukcií, ktorá inštrukcia sa vykoná (Martincová, 1997). K procesu zahŕňame aj systémové prostriedky, ktoré sú potrebné k jeho vykonaniu a následnému ukončeniu. Jeden program môže pozostávať aj z viacerých procesov, ktoré treba vykonať. Ale každý program má svoju sekvenciu vykonávania procesov . Proces taktiež môže vytvoriť viacej procesov počas svojho vykonávania. Proces vytvorený iným procesom sa nazýva potomok, vytvárajúci proces sa nazýva rodič. Každý potomok taktiež môže vykonávať nové procesy, a tak vzniká strom procesov (Kvasnica, 2009).&lt;br /&gt;
Novo vytvorený proces potrebuje pre svoju činnosť prostriedky systému. Tieto prostriedky môže získať priamo od operačného systému, alebo mu rodičovský proces pridelí podmnožinu svojich prostriedkov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V okamihu, keď proces vytvorí ďalší proces sú dve možnosti jeho ďalšej existencie:&lt;br /&gt;
*Rodičovský proces beží súbežne zo synovským.&lt;br /&gt;
*Rodičovský proces čaká, než sa dokončí niektorý alebo všetky „synovské“ procesy (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
Vzhľadom na obmedzený adresný priestor nastávajú dve varianty:&lt;br /&gt;
*Potomok je duplikátom rodičovského procesu.&lt;br /&gt;
*Potomok má vlastný program, ktorý sa zavedie do pamäte (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
K ukončeniu potomka procesu dochádza po vykonaní všetkých jeho inštrukcií. Potomok môže vrátiť dáta t.j. výsledok rodičovskému procesu. Všetky prostriedky využívané potomkom sa uvoľnia. Ukončenie procesu môže vyžiadať aj iný proces pomocou systémového volania. Väčšinou táto žiadosť je vyplnená iba rodičovskému procesu, inak by užívateľ mohol zrušiť hoci aký proces. Rodičovský proces musí uchovávať informácie, ktoré získa pri vytvorení potomka, aby rodičovský proces prípadne mohol zrušiť potomka. Rodič môže žiadať o zrušenie potomka z nasledovných dôvodov:&lt;br /&gt;
&lt;br /&gt;
*Potomok, prekročil možnosti systémových zdrojov, ktoré mu boli pridelené.&lt;br /&gt;
*Úloha ktorú vykonáva, naďalej nie je potrebná. &lt;br /&gt;
*Rodičovský proces bol ukončený a operačný systém ukončuje všetkých jeho potomkov (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Pri vykonávaní množiny procesov na jednom procesore pomocou techniky zdieľania času, môžeme hovoriť o paralelno sekvenčnom vykonávaní t.j. striedavé prepínanie medzi procesmi (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Stavy procesov===&lt;br /&gt;
&lt;br /&gt;
Stav procesu je premenlivý, mení sa podľa aktuálnej aktivity procesu v počítači. Môže sa nachádzať v jednom z uvedených stavov:&lt;br /&gt;
*Nový – proces, ktorý bol práve vytvorený.&lt;br /&gt;
*Prebiehajúci – inštrukcie programu začali byť vykonávané.&lt;br /&gt;
*Čakajúci – proces čaká na nejakú udalosť, napr. dokončenie výstupnej alebo vstupnej operácie, alebo na príchod udalosti potrebnej pre jeho pokračovanie.&lt;br /&gt;
*Pripravený – proces čaká na pridelenie procesora.&lt;br /&gt;
*Ukončený – proces dokončil svoju činnosť (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Názvy stavov sa môžu líšiť v závislosti od operačných systémov. Diagram stavov procesu je uvedený na obrázku č. 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR1.jpg|center|framed|Obrázok 1 Stavy procesov]]&lt;br /&gt;
&lt;br /&gt;
===Udalosť počas  vykonávania  procesu===&lt;br /&gt;
&lt;br /&gt;
Počas behu procesu môžu nastať určité situácie zapríčinené udalosťami vyžadujúce osobitú obsluhu (Plášil, 1992).&lt;br /&gt;
 &lt;br /&gt;
Jedná sa o chovanie procesu pri príjme synchronizačných signálov od operačného systému alebo iných procesov. Činnosť na tieto prijaté signály môže byť štandardná, definovaná vopred v operačnom systéme či užívateľsky definovaná (Martincová, 1997). V druhom prípade je na programátorovi, ako bude reagovať proces po príjme takéhoto riadiaceho signálu.&lt;br /&gt;
Tieto udalosti rozdeľujeme na :&lt;br /&gt;
&lt;br /&gt;
*interné – vznikajú v rámci procesu a zapríčiňujú zmenu stavu procesu:&lt;br /&gt;
**systémové volanie – skok do jadra,&lt;br /&gt;
**chyba – zlá inštrukcia, porušenie oprávnenia k prístupu do pamäte atď.,&lt;br /&gt;
**zlyhanie stránky – výpadok alebo poškodenie stránky pri stránkovaní.&lt;br /&gt;
*externé  - tieto udalosti neriadi proces, sú vonkajšie, väčšinou oznamujú prerušenia, ktoré obsluhuje operačný systém&lt;br /&gt;
**vstup z terminálu (znak),&lt;br /&gt;
**ukončenie diskovej operácie (Kvanica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Riadiaci blok procesu (PCB)===&lt;br /&gt;
&lt;br /&gt;
Každý proces v systéme je reprezentovaný záznamom, ktorý sa nazýva riadiaci blok procesu. Obsahuje veľké množstvo informácií o procese, napr. :&lt;br /&gt;
*identifikačné číslo procesu &lt;br /&gt;
*stav procesu – (nový, prebiehajúci, čakajúci, pripravený, ukončený )&lt;br /&gt;
*hodnota čítača inštrukcií – indikuje adresu nasledujúcej inštrukcie vo vykonávaní procesu&lt;br /&gt;
*CPU registre – podľa architektúry použitého procesora sa mení počet registrov. Obsahuje obsiahle akumulátory, indexové registre, ukazovatele do zásobníkov, univerzálne registre atď.. V prípade prerušenia vykonávania procesu sa aktuálny obsah registra tak ako ukazovatele programu musia uložiť do riadiaceho bloku procesov, aby sa proces mohol korektne spustiť  od inštrukcie, pred ktorou bol prerušený&lt;br /&gt;
*informácie pre plánovanie procesov – priorita procesu, ukazovatele do plánovacích front a pod.&lt;br /&gt;
*informácie pre správu pamäte – hodnoty limitných a bázových registrov, tabuľku stránok a iné&lt;br /&gt;
*účtovacie informácie – informácie o čase pridelenia procesora t.j. spotrebovaný čas procesora, číslo procesu, časové limity pre procesor atď.&lt;br /&gt;
*I/O informácie – zoznam I/O  zariadení alokovaných pre proces, zoznam otvorených súborov a pod (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
Pri plánovaní procesov bolo zavedené tzv. multiprogramovanie, ktorého cieľom bolo efektívnejšie využívanie procesora pri vykonávaní procesov. Podstata multiprogramovania je v tom, že v pamäti je viac procesov (Martincová, 1997). Zdanlivo to môže vyzerať tak že procesor vykonáva procesy súčasne, ale procesor prepína medzi nimi. Týmto spôsobom sa znižuje potrebný celkový čas na vykonanie jednej úlohy. Multiprogramovanie dovoľuje aj zdieľanie času. Tzv. zdieľanie času je veľmi rýchle prepínanie medzi procesmi vo fronte pripravených procesov, aby bola zabezpečená interaktívna komunikácia medzi programom a užívateľom. Systémy iba s jedným procesorom môžu vždy vykonávať iba jeden proces v určitom okamihu (Plášil, 1992). Zostávajúce programy vo fronte pripravených procesov musia čakať na pridelenia procesora. Úlohou plánovania procesov je rozhodnúť, ktorý z procesov pri prepnutí bude pridelený na procesor (Kvasnica, 2009).&lt;br /&gt;
Prepínanie kontextu medzi dvomi procesmi je schematicky  znázornené na obrázku 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR2.jpg|center|framed|Obrázok 2 Prepínanie kontextu procesov]]&lt;br /&gt;
&lt;br /&gt;
===Fronta===&lt;br /&gt;
&lt;br /&gt;
V okamihu vytvorenia procesu je tento proces zaradený do fronty procesov. Vo fronte sú zaradené všetky procesy systému. Procesy, ktoré sa nachádzajú v operačnej pamäti a čakajú na pridelenie procesora sa zaraďujú do fronty pripravených procesov. Je vytváraný zo zreťazených riadiacich blokov do zoznamu. Pozícia v zozname sa určuje podľa priority procesu, ktorá sa nachádza v riadiacom bloku procesu. Hlavička fronty pripravených procesov obsahuje ukazovatele na riadiace bloky procesov prvého a posledného procesu vo fronte (Kvasnica, 2009). Jednotlivé riadiace bloky procesov obsahujú položku ukazovateľa na riadiaci blok procesu nasledujúceho procesu vo fronte pripravených procesov. Ukážka fronty je znázornená na obrázku č. 3.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR3.jpg|center|framed|Obrázok 3 Ukážka frontu pripravených procesov]]&lt;br /&gt;
&lt;br /&gt;
V systéme sa vytvára viac front procesov. Pri vykonávaní procesu môže nastať prípad, že proces bude musieť čakať na nejakú udalosť potrebnú pre dokončenie procesu. Napr. ukončenie I/O operácie na niektorom zo zdieľaných zariadení napr. disk, optická mechanika. Môže nastať prípad, že určité systémové zariadenie môže byť obsadené, pretože iný proces môže mať také isté požiadavky. V tom prípade sa vytvára fronta čakajúcich procesov pred každým zariadením. Všetky systémové zdieľané zariadenia majú svoju vlastnú frontu (Cada, 1993). &lt;br /&gt;
Novo vzniknutý proces je umiestnený do fronty pripravených procesov a čaká na pridelenie procesora. Po pridelení procesora sa proces môže odoberať jedným z nasledovných spôsobov:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#proces požiada o I/O operáciu a bude umiestnený do fronty príslušného zariadenia.&lt;br /&gt;
#proces vytvorí nový proces a čaká na jeho ukončenie.&lt;br /&gt;
#procesu môže byť odobratý procesor, z dôvodu prerušenia spôsobeného napr. výskytom chyby a je umiestnený do fronty pripravených procesov.&lt;br /&gt;
#Bolo vyčerpané pridelené časové kvantum (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
V prvých spomínaných prípadoch sa proces môže prepnúť z kontextu čakajúci do kontextu pripravený, následne je umiestnený do fronty pripravených procesov. Proces pokračuje v tomto cykle kým sa nedokončí. Po ukončení sa odstráni zo všetkých front a jeho riadiaci blok procesu a prostriedky, ktoré využíval sa uvoľnia.&lt;br /&gt;
&lt;br /&gt;
===Prepínanie kontextu===&lt;br /&gt;
Pri pridelení procesora inému procesu sa musí uložiť stav vykonávaného procesu do riadiaceho bloku procesu a zaviesť stav nového procesu . Táto činnosť sa nazýva prepínanie kontextu, je to pomocná činnosť a počas jej vykonávania systém nemôže vykonávať nič iné (Martincová, 1997). Rýchlosť prepínania kontextu je závislá na vybavovacej rýchlosti pamäte a na počte registrov, ktoré musia byť prekopírované. Typická doba na prepínanie kontextu sa pohybuje okolo 1 až 10 µs. Pri pridelení procesora procesu sa mu musí prideliť časové kvantum (možný čas strávený na procesore) a taktiež systémové prostriedky (Kvasnica, 2009).&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6472</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6472"/>
		<updated>2010-08-03T00:14:12Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6471</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6471"/>
		<updated>2010-08-03T00:13:33Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať odlišné potreby pre plánovanie (Roubíček, 2000). Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko front, ako je znázornené na obrázku č. 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá fronta by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou cyklického plánovania (RR). V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j. žiadny proces z fronty interaktívnych procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte (Kvasnica, 2009). Ak by sme mali iba dve fronty, fronta procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúca procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR). Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojím prideleným frontom a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora (Martincová, 1997). Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu (Kvasnica, 2009).&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa fronta 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z fronty 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do fronty 0, preruší vykonávanie procesu v nižších frontách.&lt;br /&gt;
&lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum napr. 8 ms. Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum napr. 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&lt;br /&gt;
* Počet front.&lt;br /&gt;
* Pre každú frontu plánovací algoritmus.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor.&lt;br /&gt;
&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
# Systémy s tvrdým prideľovaním času.&lt;br /&gt;
# Systémy s variabilnými prideľovaním času (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný. Táto metóda sa nazýva ako metóda rezervovaných zdrojov (Martincová, 1997). Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu (Kvasnica, 2009). Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému (Kvasnica, 2009). Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali (Martincová, 1997).&lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase (Kvasnica, 2009). Veľa operačných systémov nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, sa využíva preemptívne plánovanie systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo (Martincová, 1997). Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus (Kvasnica, 2009). Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6470</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6470"/>
		<updated>2010-08-03T00:12:49Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Martin Cibulka|Ing. Peter Kvasnica,PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Semetrálna práca|Mechatronika}} &lt;br /&gt;
{{Praca_uvod|1|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza||||||||}}&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|Cieľom záverečnej práce bolo priblížiť sa správanie operačných systémov opisom jeho prvkov, ako sú procesy, vlákna a algoritmy spracovania procesov v systéme a opísať správanie vybraného operačného systému pri nastaveniach rôznych priorít a prioritných tried procesu pomocou vlastnej aplikácie. Vytvorenej vo vyššom programovacom jazyku C++. Práca je rozdelená do 5 kapitol. Obsahuje 18 obrázkov, 5 tabuľky a 3 prílohy. &lt;br /&gt;
y&lt;br /&gt;
|The aim of final thesis was to clarify the behavior of operating systems by description of their components such as processes, threads and processes processing algorithms in the system and to describe the behavior of the selected operating system with settings for different priorities and the priority classes through the process of custom application. Created in a higher programming language C + +. The work is divided into 5 chapters. It contains 18 pictures, 5 tables and 3 appendices.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Táto práca pojednáva o prioritných triedach procesov a prioritách vlákien operačného systému Microsoft Windows a ich vplyve na správanie sa procesu a rýchlosť spracovania v operačnom systéme. Zámerom mojej práce je priblížiť spávanie sa operačných systémov, pomocou opisu jeho prvkov a algoritmov pri spracovávaní procesov v systéme. Vyžíva teoretické vedomosti z informačných predmetov odborového štúdia na fakulte mechatroniky a poznatky získané zo štúdia aktuálnej odbornej literatúry. &lt;br /&gt;
V prevej kapitole práce sa venujem problematike samostatných procesov a prvkov, ktoré proces obsahuje alebo ho definujú v prostredí operačného systému.&lt;br /&gt;
Druhá kapitola pojednáva o plánovaní procesov a plánovacích algoritmoch v operačných systémoch súvisiacich s riešenou problematikou v súlade s našim zadaním.&lt;br /&gt;
Tretia kapitola sa zaoberá implementáciou aplikácií pod operačným systémom Microsoft Windows a popisuje teóriou vlákien procesu.&lt;br /&gt;
V štvrtej kapitole sa nachádza rozbor programu, vytvoreného pre meranie časov spracovania procesu, ktorý popisuje matematickú operáciu pri nastavení rôznych prioritných tried procesu a priorít vlákien v operačnom systéme.&lt;br /&gt;
V piatej kapitole sa nachádzajú zhrnuté výsledky vykonaných meraní na operačných systémoch spoločnosti Microsoft a ich zhrnutie z hľadiska efektívnosti pre rýchlosť spracovania v systéme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Procesy=&lt;br /&gt;
Operačný systém musí byť schopný vykonávať niekoľko programov súčasne. Aj systémy, u ktorých je užívateľ schopný spustiť iba jeden program, taktiež musia využívať aj svoje vnútorné procesy. Užívateľské alebo systémové bežiace programy sú si veľmi podobné a nazývajú sa procesy (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Proces==&lt;br /&gt;
Neformálne je proces definovaný ako bežiaci program vrátane všetkých informácií potrebných pre jeho opätovné spustenie od inštrukcie, kde bol prerušený (Martincová, 1997). Proces sa vykonáva sekvenčne t.j. v určitom čase sa vykonáva iba jedna inštrukcia programu. V operačných systémoch s technológiou zdieľania času sa používateľské programy nazývajú úlohy. Vo väčšine operačných systémoch sa používa najčastejšie termín proces (Plášil, 1992).&lt;br /&gt;
Proces je viac ako len kód programu, ktorý sa vykonáva. Proces zahŕňa aj kontext, ktorý ho definuje. Do kontextu patria hodnoty čítača inštrukcií a stavového registra procesu, ktorý špecifikuje strojový stav počítača vo vzťahu k procesu (Madnick, 1983). V stavovom registri sa nachádza pole výsledkov, posledného výpočtu (nulový, kladný, záporný). Ďalšie dôležité pole, ktoré je typickou súčasťou stavového registra, indikuje aktuálnu prioritu procesu. Kontext zahŕňa aj tzv. zásobník, v ktorom sú uložené dočasné dáta procesu. Patria tam napr. parametre podprogramov, lokálne premenné. Proces obsahuje aj dátový segment, v ktorom sa nachádzajú globálne premenné. Nachádza sa v ňom ukazovateľ zásobníku, obsahujúci aktuálnu adresu nasledovnej položky v zásobníku. Obsahuje taktiež záznam procesu, ktorý definuje stav procesu a obsahuje riadiace informácie procesu (Kvasnica, 2009).&lt;br /&gt;
Program sám o sebe nie je považovaný ako proces. Je považovaný za pasívnu jednotka uložená napríklad na pevnom disku. Zatiaľ čo proces je aktívna jednotka, v ktorej rozhoduje čítač inštrukcií, ktorá inštrukcia sa vykoná (Martincová, 1997). K procesu zahŕňame aj systémové prostriedky, ktoré sú potrebné k jeho vykonaniu a následnému ukončeniu. Jeden program môže pozostávať aj z viacerých procesov, ktoré treba vykonať. Ale každý program má svoju sekvenciu vykonávania procesov . Proces taktiež môže vytvoriť viacej procesov počas svojho vykonávania. Proces vytvorený iným procesom sa nazýva potomok, vytvárajúci proces sa nazýva rodič. Každý potomok taktiež môže vykonávať nové procesy, a tak vzniká strom procesov (Kvasnica, 2009).&lt;br /&gt;
Novo vytvorený proces potrebuje pre svoju činnosť prostriedky systému. Tieto prostriedky môže získať priamo od operačného systému, alebo mu rodičovský proces pridelí podmnožinu svojich prostriedkov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V okamihu, keď proces vytvorí ďalší proces sú dve možnosti jeho ďalšej existencie:&lt;br /&gt;
*Rodičovský proces beží súbežne zo synovským.&lt;br /&gt;
*Rodičovský proces čaká, než sa dokončí niektorý alebo všetky „synovské“ procesy (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
Vzhľadom na obmedzený adresný priestor nastávajú dve varianty:&lt;br /&gt;
*Potomok je duplikátom rodičovského procesu.&lt;br /&gt;
*Potomok má vlastný program, ktorý sa zavedie do pamäte (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
K ukončeniu potomka procesu dochádza po vykonaní všetkých jeho inštrukcií. Potomok môže vrátiť dáta t.j. výsledok rodičovskému procesu. Všetky prostriedky využívané potomkom sa uvoľnia. Ukončenie procesu môže vyžiadať aj iný proces pomocou systémového volania. Väčšinou táto žiadosť je vyplnená iba rodičovskému procesu, inak by užívateľ mohol zrušiť hoci aký proces. Rodičovský proces musí uchovávať informácie, ktoré získa pri vytvorení potomka, aby rodičovský proces prípadne mohol zrušiť potomka. Rodič môže žiadať o zrušenie potomka z nasledovných dôvodov:&lt;br /&gt;
&lt;br /&gt;
*Potomok, prekročil možnosti systémových zdrojov, ktoré mu boli pridelené.&lt;br /&gt;
*Úloha ktorú vykonáva, naďalej nie je potrebná. &lt;br /&gt;
*Rodičovský proces bol ukončený a operačný systém ukončuje všetkých jeho potomkov (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Pri vykonávaní množiny procesov na jednom procesore pomocou techniky zdieľania času, môžeme hovoriť o paralelno sekvenčnom vykonávaní t.j. striedavé prepínanie medzi procesmi (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Stavy procesov===&lt;br /&gt;
&lt;br /&gt;
Stav procesu je premenlivý, mení sa podľa aktuálnej aktivity procesu v počítači. Môže sa nachádzať v jednom z uvedených stavov:&lt;br /&gt;
*Nový – proces, ktorý bol práve vytvorený.&lt;br /&gt;
*Prebiehajúci – inštrukcie programu začali byť vykonávané.&lt;br /&gt;
*Čakajúci – proces čaká na nejakú udalosť, napr. dokončenie výstupnej alebo vstupnej operácie, alebo na príchod udalosti potrebnej pre jeho pokračovanie.&lt;br /&gt;
*Pripravený – proces čaká na pridelenie procesora.&lt;br /&gt;
*Ukončený – proces dokončil svoju činnosť (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Názvy stavov sa môžu líšiť v závislosti od operačných systémov. Diagram stavov procesu je uvedený na obrázku č. 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR1.jpg|center|framed|Obrázok 1 Stavy procesov]]&lt;br /&gt;
&lt;br /&gt;
===Udalosť počas  vykonávania  procesu===&lt;br /&gt;
&lt;br /&gt;
Počas behu procesu môžu nastať určité situácie zapríčinené udalosťami vyžadujúce osobitú obsluhu (Plášil, 1992).&lt;br /&gt;
 &lt;br /&gt;
Jedná sa o chovanie procesu pri príjme synchronizačných signálov od operačného systému alebo iných procesov. Činnosť na tieto prijaté signály môže byť štandardná, definovaná vopred v operačnom systéme či užívateľsky definovaná (Martincová, 1997). V druhom prípade je na programátorovi, ako bude reagovať proces po príjme takéhoto riadiaceho signálu.&lt;br /&gt;
Tieto udalosti rozdeľujeme na :&lt;br /&gt;
&lt;br /&gt;
*interné – vznikajú v rámci procesu a zapríčiňujú zmenu stavu procesu:&lt;br /&gt;
**systémové volanie – skok do jadra,&lt;br /&gt;
**chyba – zlá inštrukcia, porušenie oprávnenia k prístupu do pamäte atď.,&lt;br /&gt;
**zlyhanie stránky – výpadok alebo poškodenie stránky pri stránkovaní.&lt;br /&gt;
*externé  - tieto udalosti neriadi proces, sú vonkajšie, väčšinou oznamujú prerušenia, ktoré obsluhuje operačný systém&lt;br /&gt;
**vstup z terminálu (znak),&lt;br /&gt;
**ukončenie diskovej operácie (Kvanica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Riadiaci blok procesu (PCB)===&lt;br /&gt;
&lt;br /&gt;
Každý proces v systéme je reprezentovaný záznamom, ktorý sa nazýva riadiaci blok procesu. Obsahuje veľké množstvo informácií o procese, napr. :&lt;br /&gt;
*identifikačné číslo procesu &lt;br /&gt;
*stav procesu – (nový, prebiehajúci, čakajúci, pripravený, ukončený )&lt;br /&gt;
*hodnota čítača inštrukcií – indikuje adresu nasledujúcej inštrukcie vo vykonávaní procesu&lt;br /&gt;
*CPU registre – podľa architektúry použitého procesora sa mení počet registrov. Obsahuje obsiahle akumulátory, indexové registre, ukazovatele do zásobníkov, univerzálne registre atď.. V prípade prerušenia vykonávania procesu sa aktuálny obsah registra tak ako ukazovatele programu musia uložiť do riadiaceho bloku procesov, aby sa proces mohol korektne spustiť  od inštrukcie, pred ktorou bol prerušený&lt;br /&gt;
*informácie pre plánovanie procesov – priorita procesu, ukazovatele do plánovacích front a pod.&lt;br /&gt;
*informácie pre správu pamäte – hodnoty limitných a bázových registrov, tabuľku stránok a iné&lt;br /&gt;
*účtovacie informácie – informácie o čase pridelenia procesora t.j. spotrebovaný čas procesora, číslo procesu, časové limity pre procesor atď.&lt;br /&gt;
*I/O informácie – zoznam I/O  zariadení alokovaných pre proces, zoznam otvorených súborov a pod (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
Pri plánovaní procesov bolo zavedené tzv. multiprogramovanie, ktorého cieľom bolo efektívnejšie využívanie procesora pri vykonávaní procesov. Podstata multiprogramovania je v tom, že v pamäti je viac procesov (Martincová, 1997). Zdanlivo to môže vyzerať tak že procesor vykonáva procesy súčasne, ale procesor prepína medzi nimi. Týmto spôsobom sa znižuje potrebný celkový čas na vykonanie jednej úlohy. Multiprogramovanie dovoľuje aj zdieľanie času. Tzv. zdieľanie času je veľmi rýchle prepínanie medzi procesmi vo fronte pripravených procesov, aby bola zabezpečená interaktívna komunikácia medzi programom a užívateľom. Systémy iba s jedným procesorom môžu vždy vykonávať iba jeden proces v určitom okamihu (Plášil, 1992). Zostávajúce programy vo fronte pripravených procesov musia čakať na pridelenia procesora. Úlohou plánovania procesov je rozhodnúť, ktorý z procesov pri prepnutí bude pridelený na procesor (Kvasnica, 2009).&lt;br /&gt;
Prepínanie kontextu medzi dvomi procesmi je schematicky  znázornené na obrázku 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR2.jpg|center|framed|Obrázok 2 Prepínanie kontextu procesov]]&lt;br /&gt;
&lt;br /&gt;
===Fronta===&lt;br /&gt;
&lt;br /&gt;
V okamihu vytvorenia procesu je tento proces zaradený do fronty procesov. Vo fronte sú zaradené všetky procesy systému. Procesy, ktoré sa nachádzajú v operačnej pamäti a čakajú na pridelenie procesora sa zaraďujú do fronty pripravených procesov. Je vytváraný zo zreťazených riadiacich blokov do zoznamu. Pozícia v zozname sa určuje podľa priority procesu, ktorá sa nachádza v riadiacom bloku procesu. Hlavička fronty pripravených procesov obsahuje ukazovatele na riadiace bloky procesov prvého a posledného procesu vo fronte (Kvasnica, 2009). Jednotlivé riadiace bloky procesov obsahujú položku ukazovateľa na riadiaci blok procesu nasledujúceho procesu vo fronte pripravených procesov. Ukážka fronty je znázornená na obrázku č. 3.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR3.jpg|center|framed|Obrázok 3 Ukážka frontu pripravených procesov]]&lt;br /&gt;
&lt;br /&gt;
V systéme sa vytvára viac front procesov. Pri vykonávaní procesu môže nastať prípad, že proces bude musieť čakať na nejakú udalosť potrebnú pre dokončenie procesu. Napr. ukončenie I/O operácie na niektorom zo zdieľaných zariadení napr. disk, optická mechanika. Môže nastať prípad, že určité systémové zariadenie môže byť obsadené, pretože iný proces môže mať také isté požiadavky. V tom prípade sa vytvára fronta čakajúcich procesov pred každým zariadením. Všetky systémové zdieľané zariadenia majú svoju vlastnú frontu (Cada, 1993). &lt;br /&gt;
Novo vzniknutý proces je umiestnený do fronty pripravených procesov a čaká na pridelenie procesora. Po pridelení procesora sa proces môže odoberať jedným z nasledovných spôsobov:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#proces požiada o I/O operáciu a bude umiestnený do fronty príslušného zariadenia.&lt;br /&gt;
#proces vytvorí nový proces a čaká na jeho ukončenie.&lt;br /&gt;
#procesu môže byť odobratý procesor, z dôvodu prerušenia spôsobeného napr. výskytom chyby a je umiestnený do fronty pripravených procesov.&lt;br /&gt;
#Bolo vyčerpané pridelené časové kvantum (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
V prvých spomínaných prípadoch sa proces môže prepnúť z kontextu čakajúci do kontextu pripravený, následne je umiestnený do fronty pripravených procesov. Proces pokračuje v tomto cykle kým sa nedokončí. Po ukončení sa odstráni zo všetkých front a jeho riadiaci blok procesu a prostriedky, ktoré využíval sa uvoľnia.&lt;br /&gt;
&lt;br /&gt;
===Prepínanie kontextu===&lt;br /&gt;
Pri pridelení procesora inému procesu sa musí uložiť stav vykonávaného procesu do riadiaceho bloku procesu a zaviesť stav nového procesu . Táto činnosť sa nazýva prepínanie kontextu, je to pomocná činnosť a počas jej vykonávania systém nemôže vykonávať nič iné (Martincová, 1997). Rýchlosť prepínania kontextu je závislá na vybavovacej rýchlosti pamäte a na počte registrov, ktoré musia byť prekopírované. Typická doba na prepínanie kontextu sa pohybuje okolo 1 až 10 µs. Pri pridelení procesora procesu sa mu musí prideliť časové kvantum (možný čas strávený na procesore) a taktiež systémové prostriedky (Kvasnica, 2009).&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6463</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6463"/>
		<updated>2010-08-02T18:44:02Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní|Záver|Bibliografia||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6462</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6462"/>
		<updated>2010-08-02T18:43:01Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní|Záver|Bibliografia||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať odlišné potreby pre plánovanie (Roubíček, 2000). Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko front, ako je znázornené na obrázku č. 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá fronta by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou cyklického plánovania (RR). V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j. žiadny proces z fronty interaktívnych procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte (Kvasnica, 2009). Ak by sme mali iba dve fronty, fronta procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúca procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR). Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojím prideleným frontom a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora (Martincová, 1997). Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu (Kvasnica, 2009).&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa fronta 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z fronty 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do fronty 0, preruší vykonávanie procesu v nižších frontách.&lt;br /&gt;
&lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum napr. 8 ms. Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum napr. 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&lt;br /&gt;
* Počet front.&lt;br /&gt;
* Pre každú frontu plánovací algoritmus.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor.&lt;br /&gt;
&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
# Systémy s tvrdým prideľovaním času.&lt;br /&gt;
# Systémy s variabilnými prideľovaním času (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný. Táto metóda sa nazýva ako metóda rezervovaných zdrojov (Martincová, 1997). Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu (Kvasnica, 2009). Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému (Kvasnica, 2009). Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali (Martincová, 1997).&lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase (Kvasnica, 2009). Veľa operačných systémov nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, sa využíva preemptívne plánovanie systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo (Martincová, 1997). Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus (Kvasnica, 2009). Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6461</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6461"/>
		<updated>2010-08-02T18:41:35Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní|Záver|Bibliografia||||||||}}&lt;br /&gt;
_TOC_&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať odlišné potreby pre plánovanie (Roubíček, 2000). Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko front, ako je znázornené na obrázku č. 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá fronta by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou cyklického plánovania (RR). V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j. žiadny proces z fronty interaktívnych procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte (Kvasnica, 2009). Ak by sme mali iba dve fronty, fronta procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúca procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR). Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojím prideleným frontom a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora (Martincová, 1997). Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu (Kvasnica, 2009).&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa fronta 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z fronty 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do fronty 0, preruší vykonávanie procesu v nižších frontách.&lt;br /&gt;
&lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum napr. 8 ms. Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum napr. 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&lt;br /&gt;
* Počet front.&lt;br /&gt;
* Pre každú frontu plánovací algoritmus.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor.&lt;br /&gt;
&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
# Systémy s tvrdým prideľovaním času.&lt;br /&gt;
# Systémy s variabilnými prideľovaním času (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný. Táto metóda sa nazýva ako metóda rezervovaných zdrojov (Martincová, 1997). Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu (Kvasnica, 2009). Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému (Kvasnica, 2009). Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali (Martincová, 1997).&lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase (Kvasnica, 2009). Veľa operačných systémov nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, sa využíva preemptívne plánovanie systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo (Martincová, 1997). Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus (Kvasnica, 2009). Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6459</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6459"/>
		<updated>2010-08-02T18:39:54Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní|Záver|Bibliografia||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6458</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6458"/>
		<updated>2010-08-02T18:38:57Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza meraní|Záver|Bibliografia||||||||}}&lt;br /&gt;
&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať odlišné potreby pre plánovanie (Roubíček, 2000). Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko front, ako je znázornené na obrázku č. 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá fronta by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou cyklického plánovania (RR). V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j. žiadny proces z fronty interaktívnych procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte (Kvasnica, 2009). Ak by sme mali iba dve fronty, fronta procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúca procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR). Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojím prideleným frontom a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora (Martincová, 1997). Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu (Kvasnica, 2009).&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa fronta 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z fronty 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do fronty 0, preruší vykonávanie procesu v nižších frontách.&lt;br /&gt;
&lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum napr. 8 ms. Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum napr. 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&lt;br /&gt;
* Počet front.&lt;br /&gt;
* Pre každú frontu plánovací algoritmus.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor.&lt;br /&gt;
&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
# Systémy s tvrdým prideľovaním času.&lt;br /&gt;
# Systémy s variabilnými prideľovaním času (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný. Táto metóda sa nazýva ako metóda rezervovaných zdrojov (Martincová, 1997). Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu (Kvasnica, 2009). Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému (Kvasnica, 2009). Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali (Martincová, 1997).&lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase (Kvasnica, 2009). Veľa operačných systémov nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, sa využíva preemptívne plánovanie systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo (Martincová, 1997). Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus (Kvasnica, 2009). Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6457</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6457"/>
		<updated>2010-08-02T18:37:48Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Martin Cibulka|Ing. Peter Kvasnica,PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Semetrálna práca|Mechatronika}} &lt;br /&gt;
{{Praca_uvod|1|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu|Analýza|Záver|Bibliografia||||||||}}&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|Cieľom záverečnej práce bolo priblížiť sa správanie operačných systémov opisom jeho prvkov, ako sú procesy, vlákna a algoritmy spracovania procesov v systéme a opísať správanie vybraného operačného systému pri nastaveniach rôznych priorít a prioritných tried procesu pomocou vlastnej aplikácie. Vytvorenej vo vyššom programovacom jazyku C++. Práca je rozdelená do 5 kapitol. Obsahuje 18 obrázkov, 5 tabuľky a 3 prílohy. &lt;br /&gt;
y&lt;br /&gt;
|The aim of final thesis was to clarify the behavior of operating systems by description of their components such as processes, threads and processes processing algorithms in the system and to describe the behavior of the selected operating system with settings for different priorities and the priority classes through the process of custom application. Created in a higher programming language C + +. The work is divided into 5 chapters. It contains 18 pictures, 5 tables and 3 appendices.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Táto práca pojednáva o prioritných triedach procesov a prioritách vlákien operačného systému Microsoft Windows a ich vplyve na správanie sa procesu a rýchlosť spracovania v operačnom systéme. Zámerom mojej práce je priblížiť spávanie sa operačných systémov, pomocou opisu jeho prvkov a algoritmov pri spracovávaní procesov v systéme. Vyžíva teoretické vedomosti z informačných predmetov odborového štúdia na fakulte mechatroniky a poznatky získané zo štúdia aktuálnej odbornej literatúry. &lt;br /&gt;
V prevej kapitole práce sa venujem problematike samostatných procesov a prvkov, ktoré proces obsahuje alebo ho definujú v prostredí operačného systému.&lt;br /&gt;
Druhá kapitola pojednáva o plánovaní procesov a plánovacích algoritmoch v operačných systémoch súvisiacich s riešenou problematikou v súlade s našim zadaním.&lt;br /&gt;
Tretia kapitola sa zaoberá implementáciou aplikácií pod operačným systémom Microsoft Windows a popisuje teóriou vlákien procesu.&lt;br /&gt;
V štvrtej kapitole sa nachádza rozbor programu, vytvoreného pre meranie časov spracovania procesu, ktorý popisuje matematickú operáciu pri nastavení rôznych prioritných tried procesu a priorít vlákien v operačnom systéme.&lt;br /&gt;
V piatej kapitole sa nachádzajú zhrnuté výsledky vykonaných meraní na operačných systémoch spoločnosti Microsoft a ich zhrnutie z hľadiska efektívnosti pre rýchlosť spracovania v systéme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Procesy=&lt;br /&gt;
Operačný systém musí byť schopný vykonávať niekoľko programov súčasne. Aj systémy, u ktorých je užívateľ schopný spustiť iba jeden program, taktiež musia využívať aj svoje vnútorné procesy. Užívateľské alebo systémové bežiace programy sú si veľmi podobné a nazývajú sa procesy (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Proces==&lt;br /&gt;
Neformálne je proces definovaný ako bežiaci program vrátane všetkých informácií potrebných pre jeho opätovné spustenie od inštrukcie, kde bol prerušený (Martincová, 1997). Proces sa vykonáva sekvenčne t.j. v určitom čase sa vykonáva iba jedna inštrukcia programu. V operačných systémoch s technológiou zdieľania času sa používateľské programy nazývajú úlohy. Vo väčšine operačných systémoch sa používa najčastejšie termín proces (Plášil, 1992).&lt;br /&gt;
Proces je viac ako len kód programu, ktorý sa vykonáva. Proces zahŕňa aj kontext, ktorý ho definuje. Do kontextu patria hodnoty čítača inštrukcií a stavového registra procesu, ktorý špecifikuje strojový stav počítača vo vzťahu k procesu (Madnick, 1983). V stavovom registri sa nachádza pole výsledkov, posledného výpočtu (nulový, kladný, záporný). Ďalšie dôležité pole, ktoré je typickou súčasťou stavového registra, indikuje aktuálnu prioritu procesu. Kontext zahŕňa aj tzv. zásobník, v ktorom sú uložené dočasné dáta procesu. Patria tam napr. parametre podprogramov, lokálne premenné. Proces obsahuje aj dátový segment, v ktorom sa nachádzajú globálne premenné. Nachádza sa v ňom ukazovateľ zásobníku, obsahujúci aktuálnu adresu nasledovnej položky v zásobníku. Obsahuje taktiež záznam procesu, ktorý definuje stav procesu a obsahuje riadiace informácie procesu (Kvasnica, 2009).&lt;br /&gt;
Program sám o sebe nie je považovaný ako proces. Je považovaný za pasívnu jednotka uložená napríklad na pevnom disku. Zatiaľ čo proces je aktívna jednotka, v ktorej rozhoduje čítač inštrukcií, ktorá inštrukcia sa vykoná (Martincová, 1997). K procesu zahŕňame aj systémové prostriedky, ktoré sú potrebné k jeho vykonaniu a následnému ukončeniu. Jeden program môže pozostávať aj z viacerých procesov, ktoré treba vykonať. Ale každý program má svoju sekvenciu vykonávania procesov . Proces taktiež môže vytvoriť viacej procesov počas svojho vykonávania. Proces vytvorený iným procesom sa nazýva potomok, vytvárajúci proces sa nazýva rodič. Každý potomok taktiež môže vykonávať nové procesy, a tak vzniká strom procesov (Kvasnica, 2009).&lt;br /&gt;
Novo vytvorený proces potrebuje pre svoju činnosť prostriedky systému. Tieto prostriedky môže získať priamo od operačného systému, alebo mu rodičovský proces pridelí podmnožinu svojich prostriedkov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V okamihu, keď proces vytvorí ďalší proces sú dve možnosti jeho ďalšej existencie:&lt;br /&gt;
*Rodičovský proces beží súbežne zo synovským.&lt;br /&gt;
*Rodičovský proces čaká, než sa dokončí niektorý alebo všetky „synovské“ procesy (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
Vzhľadom na obmedzený adresný priestor nastávajú dve varianty:&lt;br /&gt;
*Potomok je duplikátom rodičovského procesu.&lt;br /&gt;
*Potomok má vlastný program, ktorý sa zavedie do pamäte (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
K ukončeniu potomka procesu dochádza po vykonaní všetkých jeho inštrukcií. Potomok môže vrátiť dáta t.j. výsledok rodičovskému procesu. Všetky prostriedky využívané potomkom sa uvoľnia. Ukončenie procesu môže vyžiadať aj iný proces pomocou systémového volania. Väčšinou táto žiadosť je vyplnená iba rodičovskému procesu, inak by užívateľ mohol zrušiť hoci aký proces. Rodičovský proces musí uchovávať informácie, ktoré získa pri vytvorení potomka, aby rodičovský proces prípadne mohol zrušiť potomka. Rodič môže žiadať o zrušenie potomka z nasledovných dôvodov:&lt;br /&gt;
&lt;br /&gt;
*Potomok, prekročil možnosti systémových zdrojov, ktoré mu boli pridelené.&lt;br /&gt;
*Úloha ktorú vykonáva, naďalej nie je potrebná. &lt;br /&gt;
*Rodičovský proces bol ukončený a operačný systém ukončuje všetkých jeho potomkov (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Pri vykonávaní množiny procesov na jednom procesore pomocou techniky zdieľania času, môžeme hovoriť o paralelno sekvenčnom vykonávaní t.j. striedavé prepínanie medzi procesmi (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Stavy procesov===&lt;br /&gt;
&lt;br /&gt;
Stav procesu je premenlivý, mení sa podľa aktuálnej aktivity procesu v počítači. Môže sa nachádzať v jednom z uvedených stavov:&lt;br /&gt;
*Nový – proces, ktorý bol práve vytvorený.&lt;br /&gt;
*Prebiehajúci – inštrukcie programu začali byť vykonávané.&lt;br /&gt;
*Čakajúci – proces čaká na nejakú udalosť, napr. dokončenie výstupnej alebo vstupnej operácie, alebo na príchod udalosti potrebnej pre jeho pokračovanie.&lt;br /&gt;
*Pripravený – proces čaká na pridelenie procesora.&lt;br /&gt;
*Ukončený – proces dokončil svoju činnosť (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Názvy stavov sa môžu líšiť v závislosti od operačných systémov. Diagram stavov procesu je uvedený na obrázku č. 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR1.jpg|center|framed|Obrázok 1 Stavy procesov]]&lt;br /&gt;
&lt;br /&gt;
===Udalosť počas  vykonávania  procesu===&lt;br /&gt;
&lt;br /&gt;
Počas behu procesu môžu nastať určité situácie zapríčinené udalosťami vyžadujúce osobitú obsluhu (Plášil, 1992).&lt;br /&gt;
 &lt;br /&gt;
Jedná sa o chovanie procesu pri príjme synchronizačných signálov od operačného systému alebo iných procesov. Činnosť na tieto prijaté signály môže byť štandardná, definovaná vopred v operačnom systéme či užívateľsky definovaná (Martincová, 1997). V druhom prípade je na programátorovi, ako bude reagovať proces po príjme takéhoto riadiaceho signálu.&lt;br /&gt;
Tieto udalosti rozdeľujeme na :&lt;br /&gt;
&lt;br /&gt;
*interné – vznikajú v rámci procesu a zapríčiňujú zmenu stavu procesu:&lt;br /&gt;
**systémové volanie – skok do jadra,&lt;br /&gt;
**chyba – zlá inštrukcia, porušenie oprávnenia k prístupu do pamäte atď.,&lt;br /&gt;
**zlyhanie stránky – výpadok alebo poškodenie stránky pri stránkovaní.&lt;br /&gt;
*externé  - tieto udalosti neriadi proces, sú vonkajšie, väčšinou oznamujú prerušenia, ktoré obsluhuje operačný systém&lt;br /&gt;
**vstup z terminálu (znak),&lt;br /&gt;
**ukončenie diskovej operácie (Kvanica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Riadiaci blok procesu (PCB)===&lt;br /&gt;
&lt;br /&gt;
Každý proces v systéme je reprezentovaný záznamom, ktorý sa nazýva riadiaci blok procesu. Obsahuje veľké množstvo informácií o procese, napr. :&lt;br /&gt;
*identifikačné číslo procesu &lt;br /&gt;
*stav procesu – (nový, prebiehajúci, čakajúci, pripravený, ukončený )&lt;br /&gt;
*hodnota čítača inštrukcií – indikuje adresu nasledujúcej inštrukcie vo vykonávaní procesu&lt;br /&gt;
*CPU registre – podľa architektúry použitého procesora sa mení počet registrov. Obsahuje obsiahle akumulátory, indexové registre, ukazovatele do zásobníkov, univerzálne registre atď.. V prípade prerušenia vykonávania procesu sa aktuálny obsah registra tak ako ukazovatele programu musia uložiť do riadiaceho bloku procesov, aby sa proces mohol korektne spustiť  od inštrukcie, pred ktorou bol prerušený&lt;br /&gt;
*informácie pre plánovanie procesov – priorita procesu, ukazovatele do plánovacích front a pod.&lt;br /&gt;
*informácie pre správu pamäte – hodnoty limitných a bázových registrov, tabuľku stránok a iné&lt;br /&gt;
*účtovacie informácie – informácie o čase pridelenia procesora t.j. spotrebovaný čas procesora, číslo procesu, časové limity pre procesor atď.&lt;br /&gt;
*I/O informácie – zoznam I/O  zariadení alokovaných pre proces, zoznam otvorených súborov a pod (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
Pri plánovaní procesov bolo zavedené tzv. multiprogramovanie, ktorého cieľom bolo efektívnejšie využívanie procesora pri vykonávaní procesov. Podstata multiprogramovania je v tom, že v pamäti je viac procesov (Martincová, 1997). Zdanlivo to môže vyzerať tak že procesor vykonáva procesy súčasne, ale procesor prepína medzi nimi. Týmto spôsobom sa znižuje potrebný celkový čas na vykonanie jednej úlohy. Multiprogramovanie dovoľuje aj zdieľanie času. Tzv. zdieľanie času je veľmi rýchle prepínanie medzi procesmi vo fronte pripravených procesov, aby bola zabezpečená interaktívna komunikácia medzi programom a užívateľom. Systémy iba s jedným procesorom môžu vždy vykonávať iba jeden proces v určitom okamihu (Plášil, 1992). Zostávajúce programy vo fronte pripravených procesov musia čakať na pridelenia procesora. Úlohou plánovania procesov je rozhodnúť, ktorý z procesov pri prepnutí bude pridelený na procesor (Kvasnica, 2009).&lt;br /&gt;
Prepínanie kontextu medzi dvomi procesmi je schematicky  znázornené na obrázku 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR2.jpg|center|framed|Obrázok 2 Prepínanie kontextu procesov]]&lt;br /&gt;
&lt;br /&gt;
===Fronta===&lt;br /&gt;
&lt;br /&gt;
V okamihu vytvorenia procesu je tento proces zaradený do fronty procesov. Vo fronte sú zaradené všetky procesy systému. Procesy, ktoré sa nachádzajú v operačnej pamäti a čakajú na pridelenie procesora sa zaraďujú do fronty pripravených procesov. Je vytváraný zo zreťazených riadiacich blokov do zoznamu. Pozícia v zozname sa určuje podľa priority procesu, ktorá sa nachádza v riadiacom bloku procesu. Hlavička fronty pripravených procesov obsahuje ukazovatele na riadiace bloky procesov prvého a posledného procesu vo fronte (Kvasnica, 2009). Jednotlivé riadiace bloky procesov obsahujú položku ukazovateľa na riadiaci blok procesu nasledujúceho procesu vo fronte pripravených procesov. Ukážka fronty je znázornená na obrázku č. 3.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR3.jpg|center|framed|Obrázok 3 Ukážka frontu pripravených procesov]]&lt;br /&gt;
&lt;br /&gt;
V systéme sa vytvára viac front procesov. Pri vykonávaní procesu môže nastať prípad, že proces bude musieť čakať na nejakú udalosť potrebnú pre dokončenie procesu. Napr. ukončenie I/O operácie na niektorom zo zdieľaných zariadení napr. disk, optická mechanika. Môže nastať prípad, že určité systémové zariadenie môže byť obsadené, pretože iný proces môže mať také isté požiadavky. V tom prípade sa vytvára fronta čakajúcich procesov pred každým zariadením. Všetky systémové zdieľané zariadenia majú svoju vlastnú frontu (Cada, 1993). &lt;br /&gt;
Novo vzniknutý proces je umiestnený do fronty pripravených procesov a čaká na pridelenie procesora. Po pridelení procesora sa proces môže odoberať jedným z nasledovných spôsobov:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#proces požiada o I/O operáciu a bude umiestnený do fronty príslušného zariadenia.&lt;br /&gt;
#proces vytvorí nový proces a čaká na jeho ukončenie.&lt;br /&gt;
#procesu môže byť odobratý procesor, z dôvodu prerušenia spôsobeného napr. výskytom chyby a je umiestnený do fronty pripravených procesov.&lt;br /&gt;
#Bolo vyčerpané pridelené časové kvantum (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
V prvých spomínaných prípadoch sa proces môže prepnúť z kontextu čakajúci do kontextu pripravený, následne je umiestnený do fronty pripravených procesov. Proces pokračuje v tomto cykle kým sa nedokončí. Po ukončení sa odstráni zo všetkých front a jeho riadiaci blok procesu a prostriedky, ktoré využíval sa uvoľnia.&lt;br /&gt;
&lt;br /&gt;
===Prepínanie kontextu===&lt;br /&gt;
Pri pridelení procesora inému procesu sa musí uložiť stav vykonávaného procesu do riadiaceho bloku procesu a zaviesť stav nového procesu . Táto činnosť sa nazýva prepínanie kontextu, je to pomocná činnosť a počas jej vykonávania systém nemôže vykonávať nič iné (Martincová, 1997). Rýchlosť prepínania kontextu je závislá na vybavovacej rýchlosti pamäte a na počte registrov, ktoré musia byť prekopírované. Typická doba na prepínanie kontextu sa pohybuje okolo 1 až 10 µs. Pri pridelení procesora procesu sa mu musí prideliť časové kvantum (možný čas strávený na procesore) a taktiež systémové prostriedky (Kvasnica, 2009).&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6455</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6455"/>
		<updated>2010-08-02T17:05:47Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6454</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6454"/>
		<updated>2010-08-02T17:04:05Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu||||||||}}&lt;br /&gt;
&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať odlišné potreby pre plánovanie (Roubíček, 2000). Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko front, ako je znázornené na obrázku č. 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá fronta by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou cyklického plánovania (RR). V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j. žiadny proces z fronty interaktívnych procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte (Kvasnica, 2009). Ak by sme mali iba dve fronty, fronta procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúca procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR). Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojím prideleným frontom a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora (Martincová, 1997). Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu (Kvasnica, 2009).&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa fronta 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z fronty 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do fronty 0, preruší vykonávanie procesu v nižších frontách.&lt;br /&gt;
&lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum napr. 8 ms. Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum napr. 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&lt;br /&gt;
* Počet front.&lt;br /&gt;
* Pre každú frontu plánovací algoritmus.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor.&lt;br /&gt;
&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
# Systémy s tvrdým prideľovaním času.&lt;br /&gt;
# Systémy s variabilnými prideľovaním času (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný. Táto metóda sa nazýva ako metóda rezervovaných zdrojov (Martincová, 1997). Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu (Kvasnica, 2009). Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému (Kvasnica, 2009). Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali (Martincová, 1997).&lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase (Kvasnica, 2009). Veľa operačných systémov nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, sa využíva preemptívne plánovanie systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo (Martincová, 1997). Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus (Kvasnica, 2009). Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6453</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6453"/>
		<updated>2010-08-02T17:03:06Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Martin Cibulka|Ing. Peter Kvasnica,PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Semetrálna práca|Mechatronika}} &lt;br /&gt;
{{Praca_uvod|1|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu||||||||}}&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|Cieľom záverečnej práce bolo priblížiť sa správanie operačných systémov opisom jeho prvkov, ako sú procesy, vlákna a algoritmy spracovania procesov v systéme a opísať správanie vybraného operačného systému pri nastaveniach rôznych priorít a prioritných tried procesu pomocou vlastnej aplikácie. Vytvorenej vo vyššom programovacom jazyku C++. Práca je rozdelená do 5 kapitol. Obsahuje 18 obrázkov, 5 tabuľky a 3 prílohy. &lt;br /&gt;
y&lt;br /&gt;
|The aim of final thesis was to clarify the behavior of operating systems by description of their components such as processes, threads and processes processing algorithms in the system and to describe the behavior of the selected operating system with settings for different priorities and the priority classes through the process of custom application. Created in a higher programming language C + +. The work is divided into 5 chapters. It contains 18 pictures, 5 tables and 3 appendices.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Táto práca pojednáva o prioritných triedach procesov a prioritách vlákien operačného systému Microsoft Windows a ich vplyve na správanie sa procesu a rýchlosť spracovania v operačnom systéme. Zámerom mojej práce je priblížiť spávanie sa operačných systémov, pomocou opisu jeho prvkov a algoritmov pri spracovávaní procesov v systéme. Vyžíva teoretické vedomosti z informačných predmetov odborového štúdia na fakulte mechatroniky a poznatky získané zo štúdia aktuálnej odbornej literatúry. &lt;br /&gt;
V prevej kapitole práce sa venujem problematike samostatných procesov a prvkov, ktoré proces obsahuje alebo ho definujú v prostredí operačného systému.&lt;br /&gt;
Druhá kapitola pojednáva o plánovaní procesov a plánovacích algoritmoch v operačných systémoch súvisiacich s riešenou problematikou v súlade s našim zadaním.&lt;br /&gt;
Tretia kapitola sa zaoberá implementáciou aplikácií pod operačným systémom Microsoft Windows a popisuje teóriou vlákien procesu.&lt;br /&gt;
V štvrtej kapitole sa nachádza rozbor programu, vytvoreného pre meranie časov spracovania procesu, ktorý popisuje matematickú operáciu pri nastavení rôznych prioritných tried procesu a priorít vlákien v operačnom systéme.&lt;br /&gt;
V piatej kapitole sa nachádzajú zhrnuté výsledky vykonaných meraní na operačných systémoch spoločnosti Microsoft a ich zhrnutie z hľadiska efektívnosti pre rýchlosť spracovania v systéme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Procesy=&lt;br /&gt;
Operačný systém musí byť schopný vykonávať niekoľko programov súčasne. Aj systémy, u ktorých je užívateľ schopný spustiť iba jeden program, taktiež musia využívať aj svoje vnútorné procesy. Užívateľské alebo systémové bežiace programy sú si veľmi podobné a nazývajú sa procesy (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Proces==&lt;br /&gt;
Neformálne je proces definovaný ako bežiaci program vrátane všetkých informácií potrebných pre jeho opätovné spustenie od inštrukcie, kde bol prerušený (Martincová, 1997). Proces sa vykonáva sekvenčne t.j. v určitom čase sa vykonáva iba jedna inštrukcia programu. V operačných systémoch s technológiou zdieľania času sa používateľské programy nazývajú úlohy. Vo väčšine operačných systémoch sa používa najčastejšie termín proces (Plášil, 1992).&lt;br /&gt;
Proces je viac ako len kód programu, ktorý sa vykonáva. Proces zahŕňa aj kontext, ktorý ho definuje. Do kontextu patria hodnoty čítača inštrukcií a stavového registra procesu, ktorý špecifikuje strojový stav počítača vo vzťahu k procesu (Madnick, 1983). V stavovom registri sa nachádza pole výsledkov, posledného výpočtu (nulový, kladný, záporný). Ďalšie dôležité pole, ktoré je typickou súčasťou stavového registra, indikuje aktuálnu prioritu procesu. Kontext zahŕňa aj tzv. zásobník, v ktorom sú uložené dočasné dáta procesu. Patria tam napr. parametre podprogramov, lokálne premenné. Proces obsahuje aj dátový segment, v ktorom sa nachádzajú globálne premenné. Nachádza sa v ňom ukazovateľ zásobníku, obsahujúci aktuálnu adresu nasledovnej položky v zásobníku. Obsahuje taktiež záznam procesu, ktorý definuje stav procesu a obsahuje riadiace informácie procesu (Kvasnica, 2009).&lt;br /&gt;
Program sám o sebe nie je považovaný ako proces. Je považovaný za pasívnu jednotka uložená napríklad na pevnom disku. Zatiaľ čo proces je aktívna jednotka, v ktorej rozhoduje čítač inštrukcií, ktorá inštrukcia sa vykoná (Martincová, 1997). K procesu zahŕňame aj systémové prostriedky, ktoré sú potrebné k jeho vykonaniu a následnému ukončeniu. Jeden program môže pozostávať aj z viacerých procesov, ktoré treba vykonať. Ale každý program má svoju sekvenciu vykonávania procesov . Proces taktiež môže vytvoriť viacej procesov počas svojho vykonávania. Proces vytvorený iným procesom sa nazýva potomok, vytvárajúci proces sa nazýva rodič. Každý potomok taktiež môže vykonávať nové procesy, a tak vzniká strom procesov (Kvasnica, 2009).&lt;br /&gt;
Novo vytvorený proces potrebuje pre svoju činnosť prostriedky systému. Tieto prostriedky môže získať priamo od operačného systému, alebo mu rodičovský proces pridelí podmnožinu svojich prostriedkov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V okamihu, keď proces vytvorí ďalší proces sú dve možnosti jeho ďalšej existencie:&lt;br /&gt;
*Rodičovský proces beží súbežne zo synovským.&lt;br /&gt;
*Rodičovský proces čaká, než sa dokončí niektorý alebo všetky „synovské“ procesy (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
Vzhľadom na obmedzený adresný priestor nastávajú dve varianty:&lt;br /&gt;
*Potomok je duplikátom rodičovského procesu.&lt;br /&gt;
*Potomok má vlastný program, ktorý sa zavedie do pamäte (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
K ukončeniu potomka procesu dochádza po vykonaní všetkých jeho inštrukcií. Potomok môže vrátiť dáta t.j. výsledok rodičovskému procesu. Všetky prostriedky využívané potomkom sa uvoľnia. Ukončenie procesu môže vyžiadať aj iný proces pomocou systémového volania. Väčšinou táto žiadosť je vyplnená iba rodičovskému procesu, inak by užívateľ mohol zrušiť hoci aký proces. Rodičovský proces musí uchovávať informácie, ktoré získa pri vytvorení potomka, aby rodičovský proces prípadne mohol zrušiť potomka. Rodič môže žiadať o zrušenie potomka z nasledovných dôvodov:&lt;br /&gt;
&lt;br /&gt;
*Potomok, prekročil možnosti systémových zdrojov, ktoré mu boli pridelené.&lt;br /&gt;
*Úloha ktorú vykonáva, naďalej nie je potrebná. &lt;br /&gt;
*Rodičovský proces bol ukončený a operačný systém ukončuje všetkých jeho potomkov (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Pri vykonávaní množiny procesov na jednom procesore pomocou techniky zdieľania času, môžeme hovoriť o paralelno sekvenčnom vykonávaní t.j. striedavé prepínanie medzi procesmi (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Stavy procesov===&lt;br /&gt;
&lt;br /&gt;
Stav procesu je premenlivý, mení sa podľa aktuálnej aktivity procesu v počítači. Môže sa nachádzať v jednom z uvedených stavov:&lt;br /&gt;
*Nový – proces, ktorý bol práve vytvorený.&lt;br /&gt;
*Prebiehajúci – inštrukcie programu začali byť vykonávané.&lt;br /&gt;
*Čakajúci – proces čaká na nejakú udalosť, napr. dokončenie výstupnej alebo vstupnej operácie, alebo na príchod udalosti potrebnej pre jeho pokračovanie.&lt;br /&gt;
*Pripravený – proces čaká na pridelenie procesora.&lt;br /&gt;
*Ukončený – proces dokončil svoju činnosť (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Názvy stavov sa môžu líšiť v závislosti od operačných systémov. Diagram stavov procesu je uvedený na obrázku č. 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR1.jpg|center|framed|Obrázok 1 Stavy procesov]]&lt;br /&gt;
&lt;br /&gt;
===Udalosť počas  vykonávania  procesu===&lt;br /&gt;
&lt;br /&gt;
Počas behu procesu môžu nastať určité situácie zapríčinené udalosťami vyžadujúce osobitú obsluhu (Plášil, 1992).&lt;br /&gt;
 &lt;br /&gt;
Jedná sa o chovanie procesu pri príjme synchronizačných signálov od operačného systému alebo iných procesov. Činnosť na tieto prijaté signály môže byť štandardná, definovaná vopred v operačnom systéme či užívateľsky definovaná (Martincová, 1997). V druhom prípade je na programátorovi, ako bude reagovať proces po príjme takéhoto riadiaceho signálu.&lt;br /&gt;
Tieto udalosti rozdeľujeme na :&lt;br /&gt;
&lt;br /&gt;
*interné – vznikajú v rámci procesu a zapríčiňujú zmenu stavu procesu:&lt;br /&gt;
**systémové volanie – skok do jadra,&lt;br /&gt;
**chyba – zlá inštrukcia, porušenie oprávnenia k prístupu do pamäte atď.,&lt;br /&gt;
**zlyhanie stránky – výpadok alebo poškodenie stránky pri stránkovaní.&lt;br /&gt;
*externé  - tieto udalosti neriadi proces, sú vonkajšie, väčšinou oznamujú prerušenia, ktoré obsluhuje operačný systém&lt;br /&gt;
**vstup z terminálu (znak),&lt;br /&gt;
**ukončenie diskovej operácie (Kvanica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Riadiaci blok procesu (PCB)===&lt;br /&gt;
&lt;br /&gt;
Každý proces v systéme je reprezentovaný záznamom, ktorý sa nazýva riadiaci blok procesu. Obsahuje veľké množstvo informácií o procese, napr. :&lt;br /&gt;
*identifikačné číslo procesu &lt;br /&gt;
*stav procesu – (nový, prebiehajúci, čakajúci, pripravený, ukončený )&lt;br /&gt;
*hodnota čítača inštrukcií – indikuje adresu nasledujúcej inštrukcie vo vykonávaní procesu&lt;br /&gt;
*CPU registre – podľa architektúry použitého procesora sa mení počet registrov. Obsahuje obsiahle akumulátory, indexové registre, ukazovatele do zásobníkov, univerzálne registre atď.. V prípade prerušenia vykonávania procesu sa aktuálny obsah registra tak ako ukazovatele programu musia uložiť do riadiaceho bloku procesov, aby sa proces mohol korektne spustiť  od inštrukcie, pred ktorou bol prerušený&lt;br /&gt;
*informácie pre plánovanie procesov – priorita procesu, ukazovatele do plánovacích front a pod.&lt;br /&gt;
*informácie pre správu pamäte – hodnoty limitných a bázových registrov, tabuľku stránok a iné&lt;br /&gt;
*účtovacie informácie – informácie o čase pridelenia procesora t.j. spotrebovaný čas procesora, číslo procesu, časové limity pre procesor atď.&lt;br /&gt;
*I/O informácie – zoznam I/O  zariadení alokovaných pre proces, zoznam otvorených súborov a pod (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
Pri plánovaní procesov bolo zavedené tzv. multiprogramovanie, ktorého cieľom bolo efektívnejšie využívanie procesora pri vykonávaní procesov. Podstata multiprogramovania je v tom, že v pamäti je viac procesov (Martincová, 1997). Zdanlivo to môže vyzerať tak že procesor vykonáva procesy súčasne, ale procesor prepína medzi nimi. Týmto spôsobom sa znižuje potrebný celkový čas na vykonanie jednej úlohy. Multiprogramovanie dovoľuje aj zdieľanie času. Tzv. zdieľanie času je veľmi rýchle prepínanie medzi procesmi vo fronte pripravených procesov, aby bola zabezpečená interaktívna komunikácia medzi programom a užívateľom. Systémy iba s jedným procesorom môžu vždy vykonávať iba jeden proces v určitom okamihu (Plášil, 1992). Zostávajúce programy vo fronte pripravených procesov musia čakať na pridelenia procesora. Úlohou plánovania procesov je rozhodnúť, ktorý z procesov pri prepnutí bude pridelený na procesor (Kvasnica, 2009).&lt;br /&gt;
Prepínanie kontextu medzi dvomi procesmi je schematicky  znázornené na obrázku 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR2.jpg|center|framed|Obrázok 2 Prepínanie kontextu procesov]]&lt;br /&gt;
&lt;br /&gt;
===Fronta===&lt;br /&gt;
&lt;br /&gt;
V okamihu vytvorenia procesu je tento proces zaradený do fronty procesov. Vo fronte sú zaradené všetky procesy systému. Procesy, ktoré sa nachádzajú v operačnej pamäti a čakajú na pridelenie procesora sa zaraďujú do fronty pripravených procesov. Je vytváraný zo zreťazených riadiacich blokov do zoznamu. Pozícia v zozname sa určuje podľa priority procesu, ktorá sa nachádza v riadiacom bloku procesu. Hlavička fronty pripravených procesov obsahuje ukazovatele na riadiace bloky procesov prvého a posledného procesu vo fronte (Kvasnica, 2009). Jednotlivé riadiace bloky procesov obsahujú položku ukazovateľa na riadiaci blok procesu nasledujúceho procesu vo fronte pripravených procesov. Ukážka fronty je znázornená na obrázku č. 3.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR3.jpg|center|framed|Obrázok 3 Ukážka frontu pripravených procesov]]&lt;br /&gt;
&lt;br /&gt;
V systéme sa vytvára viac front procesov. Pri vykonávaní procesu môže nastať prípad, že proces bude musieť čakať na nejakú udalosť potrebnú pre dokončenie procesu. Napr. ukončenie I/O operácie na niektorom zo zdieľaných zariadení napr. disk, optická mechanika. Môže nastať prípad, že určité systémové zariadenie môže byť obsadené, pretože iný proces môže mať také isté požiadavky. V tom prípade sa vytvára fronta čakajúcich procesov pred každým zariadením. Všetky systémové zdieľané zariadenia majú svoju vlastnú frontu (Cada, 1993). &lt;br /&gt;
Novo vzniknutý proces je umiestnený do fronty pripravených procesov a čaká na pridelenie procesora. Po pridelení procesora sa proces môže odoberať jedným z nasledovných spôsobov:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#proces požiada o I/O operáciu a bude umiestnený do fronty príslušného zariadenia.&lt;br /&gt;
#proces vytvorí nový proces a čaká na jeho ukončenie.&lt;br /&gt;
#procesu môže byť odobratý procesor, z dôvodu prerušenia spôsobeného napr. výskytom chyby a je umiestnený do fronty pripravených procesov.&lt;br /&gt;
#Bolo vyčerpané pridelené časové kvantum (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
V prvých spomínaných prípadoch sa proces môže prepnúť z kontextu čakajúci do kontextu pripravený, následne je umiestnený do fronty pripravených procesov. Proces pokračuje v tomto cykle kým sa nedokončí. Po ukončení sa odstráni zo všetkých front a jeho riadiaci blok procesu a prostriedky, ktoré využíval sa uvoľnia.&lt;br /&gt;
&lt;br /&gt;
===Prepínanie kontextu===&lt;br /&gt;
Pri pridelení procesora inému procesu sa musí uložiť stav vykonávaného procesu do riadiaceho bloku procesu a zaviesť stav nového procesu . Táto činnosť sa nazýva prepínanie kontextu, je to pomocná činnosť a počas jej vykonávania systém nemôže vykonávať nič iné (Martincová, 1997). Rýchlosť prepínania kontextu je závislá na vybavovacej rýchlosti pamäte a na počte registrov, ktoré musia byť prekopírované. Typická doba na prepínanie kontextu sa pohybuje okolo 1 až 10 µs. Pri pridelení procesora procesu sa mu musí prideliť časové kvantum (možný čas strávený na procesore) a taktiež systémové prostriedky (Kvasnica, 2009).&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6452</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6452"/>
		<updated>2010-08-02T17:01:53Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov||||||||}}&lt;br /&gt;
&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať odlišné potreby pre plánovanie (Roubíček, 2000). Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko front, ako je znázornené na obrázku č. 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá fronta by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou cyklického plánovania (RR). V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j. žiadny proces z fronty interaktívnych procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte (Kvasnica, 2009). Ak by sme mali iba dve fronty, fronta procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúca procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR). Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojím prideleným frontom a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora (Martincová, 1997). Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu (Kvasnica, 2009).&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa fronta 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z fronty 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do fronty 0, preruší vykonávanie procesu v nižších frontách.&lt;br /&gt;
&lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum napr. 8 ms. Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum napr. 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&lt;br /&gt;
* Počet front.&lt;br /&gt;
* Pre každú frontu plánovací algoritmus.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor.&lt;br /&gt;
&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
# Systémy s tvrdým prideľovaním času.&lt;br /&gt;
# Systémy s variabilnými prideľovaním času (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný. Táto metóda sa nazýva ako metóda rezervovaných zdrojov (Martincová, 1997). Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu (Kvasnica, 2009). Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému (Kvasnica, 2009). Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali (Martincová, 1997).&lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase (Kvasnica, 2009). Veľa operačných systémov nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, sa využíva preemptívne plánovanie systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo (Martincová, 1997). Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus (Kvasnica, 2009). Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6451</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6451"/>
		<updated>2010-08-02T17:01:10Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Rozbor_programu_pre_meranie_efekt%C3%ADvnosti_prioritn%C3%BDch_tried_vl%C3%A1kien_a_procesov&amp;diff=6450</id>
		<title>Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Rozbor_programu_pre_meranie_efekt%C3%ADvnosti_prioritn%C3%BDch_tried_vl%C3%A1kien_a_procesov&amp;diff=6450"/>
		<updated>2010-08-02T17:00:28Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov||||||||}}&lt;br /&gt;
&lt;br /&gt;
jsahdasd&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Rozbor_programu_pre_meranie_efekt%C3%ADvnosti_prioritn%C3%BDch_tried_vl%C3%A1kien_a_procesov&amp;diff=6449</id>
		<title>Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Rozbor_programu_pre_meranie_efekt%C3%ADvnosti_prioritn%C3%BDch_tried_vl%C3%A1kien_a_procesov&amp;diff=6449"/>
		<updated>2010-08-02T16:24:42Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;afdsafdsfsdaf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Rozbor_programu_pre_meranie_efekt%C3%ADvnosti_prioritn%C3%BDch_tried_vl%C3%A1kien_a_procesov&amp;diff=6448</id>
		<title>Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Rozbor_programu_pre_meranie_efekt%C3%ADvnosti_prioritn%C3%BDch_tried_vl%C3%A1kien_a_procesov&amp;diff=6448"/>
		<updated>2010-08-02T16:24:08Z</updated>

		<summary type="html">&lt;p&gt;Matesx: Vytvorená stránka „=Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov=“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov=&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6447</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6447"/>
		<updated>2010-08-02T16:23:32Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Martin Cibulka|Ing. Peter Kvasnica,PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Semetrálna práca|Mechatronika}} &lt;br /&gt;
{{Praca_uvod|1|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows|Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov||||||||}}&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|Cieľom záverečnej práce bolo priblížiť sa správanie operačných systémov opisom jeho prvkov, ako sú procesy, vlákna a algoritmy spracovania procesov v systéme a opísať správanie vybraného operačného systému pri nastaveniach rôznych priorít a prioritných tried procesu pomocou vlastnej aplikácie. Vytvorenej vo vyššom programovacom jazyku C++. Práca je rozdelená do 5 kapitol. Obsahuje 18 obrázkov, 5 tabuľky a 3 prílohy. &lt;br /&gt;
y&lt;br /&gt;
|The aim of final thesis was to clarify the behavior of operating systems by description of their components such as processes, threads and processes processing algorithms in the system and to describe the behavior of the selected operating system with settings for different priorities and the priority classes through the process of custom application. Created in a higher programming language C + +. The work is divided into 5 chapters. It contains 18 pictures, 5 tables and 3 appendices.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Táto práca pojednáva o prioritných triedach procesov a prioritách vlákien operačného systému Microsoft Windows a ich vplyve na správanie sa procesu a rýchlosť spracovania v operačnom systéme. Zámerom mojej práce je priblížiť spávanie sa operačných systémov, pomocou opisu jeho prvkov a algoritmov pri spracovávaní procesov v systéme. Vyžíva teoretické vedomosti z informačných predmetov odborového štúdia na fakulte mechatroniky a poznatky získané zo štúdia aktuálnej odbornej literatúry. &lt;br /&gt;
V prevej kapitole práce sa venujem problematike samostatných procesov a prvkov, ktoré proces obsahuje alebo ho definujú v prostredí operačného systému.&lt;br /&gt;
Druhá kapitola pojednáva o plánovaní procesov a plánovacích algoritmoch v operačných systémoch súvisiacich s riešenou problematikou v súlade s našim zadaním.&lt;br /&gt;
Tretia kapitola sa zaoberá implementáciou aplikácií pod operačným systémom Microsoft Windows a popisuje teóriou vlákien procesu.&lt;br /&gt;
V štvrtej kapitole sa nachádza rozbor programu, vytvoreného pre meranie časov spracovania procesu, ktorý popisuje matematickú operáciu pri nastavení rôznych prioritných tried procesu a priorít vlákien v operačnom systéme.&lt;br /&gt;
V piatej kapitole sa nachádzajú zhrnuté výsledky vykonaných meraní na operačných systémoch spoločnosti Microsoft a ich zhrnutie z hľadiska efektívnosti pre rýchlosť spracovania v systéme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Procesy=&lt;br /&gt;
Operačný systém musí byť schopný vykonávať niekoľko programov súčasne. Aj systémy, u ktorých je užívateľ schopný spustiť iba jeden program, taktiež musia využívať aj svoje vnútorné procesy. Užívateľské alebo systémové bežiace programy sú si veľmi podobné a nazývajú sa procesy (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Proces==&lt;br /&gt;
Neformálne je proces definovaný ako bežiaci program vrátane všetkých informácií potrebných pre jeho opätovné spustenie od inštrukcie, kde bol prerušený (Martincová, 1997). Proces sa vykonáva sekvenčne t.j. v určitom čase sa vykonáva iba jedna inštrukcia programu. V operačných systémoch s technológiou zdieľania času sa používateľské programy nazývajú úlohy. Vo väčšine operačných systémoch sa používa najčastejšie termín proces (Plášil, 1992).&lt;br /&gt;
Proces je viac ako len kód programu, ktorý sa vykonáva. Proces zahŕňa aj kontext, ktorý ho definuje. Do kontextu patria hodnoty čítača inštrukcií a stavového registra procesu, ktorý špecifikuje strojový stav počítača vo vzťahu k procesu (Madnick, 1983). V stavovom registri sa nachádza pole výsledkov, posledného výpočtu (nulový, kladný, záporný). Ďalšie dôležité pole, ktoré je typickou súčasťou stavového registra, indikuje aktuálnu prioritu procesu. Kontext zahŕňa aj tzv. zásobník, v ktorom sú uložené dočasné dáta procesu. Patria tam napr. parametre podprogramov, lokálne premenné. Proces obsahuje aj dátový segment, v ktorom sa nachádzajú globálne premenné. Nachádza sa v ňom ukazovateľ zásobníku, obsahujúci aktuálnu adresu nasledovnej položky v zásobníku. Obsahuje taktiež záznam procesu, ktorý definuje stav procesu a obsahuje riadiace informácie procesu (Kvasnica, 2009).&lt;br /&gt;
Program sám o sebe nie je považovaný ako proces. Je považovaný za pasívnu jednotka uložená napríklad na pevnom disku. Zatiaľ čo proces je aktívna jednotka, v ktorej rozhoduje čítač inštrukcií, ktorá inštrukcia sa vykoná (Martincová, 1997). K procesu zahŕňame aj systémové prostriedky, ktoré sú potrebné k jeho vykonaniu a následnému ukončeniu. Jeden program môže pozostávať aj z viacerých procesov, ktoré treba vykonať. Ale každý program má svoju sekvenciu vykonávania procesov . Proces taktiež môže vytvoriť viacej procesov počas svojho vykonávania. Proces vytvorený iným procesom sa nazýva potomok, vytvárajúci proces sa nazýva rodič. Každý potomok taktiež môže vykonávať nové procesy, a tak vzniká strom procesov (Kvasnica, 2009).&lt;br /&gt;
Novo vytvorený proces potrebuje pre svoju činnosť prostriedky systému. Tieto prostriedky môže získať priamo od operačného systému, alebo mu rodičovský proces pridelí podmnožinu svojich prostriedkov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V okamihu, keď proces vytvorí ďalší proces sú dve možnosti jeho ďalšej existencie:&lt;br /&gt;
*Rodičovský proces beží súbežne zo synovským.&lt;br /&gt;
*Rodičovský proces čaká, než sa dokončí niektorý alebo všetky „synovské“ procesy (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
Vzhľadom na obmedzený adresný priestor nastávajú dve varianty:&lt;br /&gt;
*Potomok je duplikátom rodičovského procesu.&lt;br /&gt;
*Potomok má vlastný program, ktorý sa zavedie do pamäte (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
K ukončeniu potomka procesu dochádza po vykonaní všetkých jeho inštrukcií. Potomok môže vrátiť dáta t.j. výsledok rodičovskému procesu. Všetky prostriedky využívané potomkom sa uvoľnia. Ukončenie procesu môže vyžiadať aj iný proces pomocou systémového volania. Väčšinou táto žiadosť je vyplnená iba rodičovskému procesu, inak by užívateľ mohol zrušiť hoci aký proces. Rodičovský proces musí uchovávať informácie, ktoré získa pri vytvorení potomka, aby rodičovský proces prípadne mohol zrušiť potomka. Rodič môže žiadať o zrušenie potomka z nasledovných dôvodov:&lt;br /&gt;
&lt;br /&gt;
*Potomok, prekročil možnosti systémových zdrojov, ktoré mu boli pridelené.&lt;br /&gt;
*Úloha ktorú vykonáva, naďalej nie je potrebná. &lt;br /&gt;
*Rodičovský proces bol ukončený a operačný systém ukončuje všetkých jeho potomkov (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Pri vykonávaní množiny procesov na jednom procesore pomocou techniky zdieľania času, môžeme hovoriť o paralelno sekvenčnom vykonávaní t.j. striedavé prepínanie medzi procesmi (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Stavy procesov===&lt;br /&gt;
&lt;br /&gt;
Stav procesu je premenlivý, mení sa podľa aktuálnej aktivity procesu v počítači. Môže sa nachádzať v jednom z uvedených stavov:&lt;br /&gt;
*Nový – proces, ktorý bol práve vytvorený.&lt;br /&gt;
*Prebiehajúci – inštrukcie programu začali byť vykonávané.&lt;br /&gt;
*Čakajúci – proces čaká na nejakú udalosť, napr. dokončenie výstupnej alebo vstupnej operácie, alebo na príchod udalosti potrebnej pre jeho pokračovanie.&lt;br /&gt;
*Pripravený – proces čaká na pridelenie procesora.&lt;br /&gt;
*Ukončený – proces dokončil svoju činnosť (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Názvy stavov sa môžu líšiť v závislosti od operačných systémov. Diagram stavov procesu je uvedený na obrázku č. 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR1.jpg|center|framed|Obrázok 1 Stavy procesov]]&lt;br /&gt;
&lt;br /&gt;
===Udalosť počas  vykonávania  procesu===&lt;br /&gt;
&lt;br /&gt;
Počas behu procesu môžu nastať určité situácie zapríčinené udalosťami vyžadujúce osobitú obsluhu (Plášil, 1992).&lt;br /&gt;
 &lt;br /&gt;
Jedná sa o chovanie procesu pri príjme synchronizačných signálov od operačného systému alebo iných procesov. Činnosť na tieto prijaté signály môže byť štandardná, definovaná vopred v operačnom systéme či užívateľsky definovaná (Martincová, 1997). V druhom prípade je na programátorovi, ako bude reagovať proces po príjme takéhoto riadiaceho signálu.&lt;br /&gt;
Tieto udalosti rozdeľujeme na :&lt;br /&gt;
&lt;br /&gt;
*interné – vznikajú v rámci procesu a zapríčiňujú zmenu stavu procesu:&lt;br /&gt;
**systémové volanie – skok do jadra,&lt;br /&gt;
**chyba – zlá inštrukcia, porušenie oprávnenia k prístupu do pamäte atď.,&lt;br /&gt;
**zlyhanie stránky – výpadok alebo poškodenie stránky pri stránkovaní.&lt;br /&gt;
*externé  - tieto udalosti neriadi proces, sú vonkajšie, väčšinou oznamujú prerušenia, ktoré obsluhuje operačný systém&lt;br /&gt;
**vstup z terminálu (znak),&lt;br /&gt;
**ukončenie diskovej operácie (Kvanica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Riadiaci blok procesu (PCB)===&lt;br /&gt;
&lt;br /&gt;
Každý proces v systéme je reprezentovaný záznamom, ktorý sa nazýva riadiaci blok procesu. Obsahuje veľké množstvo informácií o procese, napr. :&lt;br /&gt;
*identifikačné číslo procesu &lt;br /&gt;
*stav procesu – (nový, prebiehajúci, čakajúci, pripravený, ukončený )&lt;br /&gt;
*hodnota čítača inštrukcií – indikuje adresu nasledujúcej inštrukcie vo vykonávaní procesu&lt;br /&gt;
*CPU registre – podľa architektúry použitého procesora sa mení počet registrov. Obsahuje obsiahle akumulátory, indexové registre, ukazovatele do zásobníkov, univerzálne registre atď.. V prípade prerušenia vykonávania procesu sa aktuálny obsah registra tak ako ukazovatele programu musia uložiť do riadiaceho bloku procesov, aby sa proces mohol korektne spustiť  od inštrukcie, pred ktorou bol prerušený&lt;br /&gt;
*informácie pre plánovanie procesov – priorita procesu, ukazovatele do plánovacích front a pod.&lt;br /&gt;
*informácie pre správu pamäte – hodnoty limitných a bázových registrov, tabuľku stránok a iné&lt;br /&gt;
*účtovacie informácie – informácie o čase pridelenia procesora t.j. spotrebovaný čas procesora, číslo procesu, časové limity pre procesor atď.&lt;br /&gt;
*I/O informácie – zoznam I/O  zariadení alokovaných pre proces, zoznam otvorených súborov a pod (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
Pri plánovaní procesov bolo zavedené tzv. multiprogramovanie, ktorého cieľom bolo efektívnejšie využívanie procesora pri vykonávaní procesov. Podstata multiprogramovania je v tom, že v pamäti je viac procesov (Martincová, 1997). Zdanlivo to môže vyzerať tak že procesor vykonáva procesy súčasne, ale procesor prepína medzi nimi. Týmto spôsobom sa znižuje potrebný celkový čas na vykonanie jednej úlohy. Multiprogramovanie dovoľuje aj zdieľanie času. Tzv. zdieľanie času je veľmi rýchle prepínanie medzi procesmi vo fronte pripravených procesov, aby bola zabezpečená interaktívna komunikácia medzi programom a užívateľom. Systémy iba s jedným procesorom môžu vždy vykonávať iba jeden proces v určitom okamihu (Plášil, 1992). Zostávajúce programy vo fronte pripravených procesov musia čakať na pridelenia procesora. Úlohou plánovania procesov je rozhodnúť, ktorý z procesov pri prepnutí bude pridelený na procesor (Kvasnica, 2009).&lt;br /&gt;
Prepínanie kontextu medzi dvomi procesmi je schematicky  znázornené na obrázku 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR2.jpg|center|framed|Obrázok 2 Prepínanie kontextu procesov]]&lt;br /&gt;
&lt;br /&gt;
===Fronta===&lt;br /&gt;
&lt;br /&gt;
V okamihu vytvorenia procesu je tento proces zaradený do fronty procesov. Vo fronte sú zaradené všetky procesy systému. Procesy, ktoré sa nachádzajú v operačnej pamäti a čakajú na pridelenie procesora sa zaraďujú do fronty pripravených procesov. Je vytváraný zo zreťazených riadiacich blokov do zoznamu. Pozícia v zozname sa určuje podľa priority procesu, ktorá sa nachádza v riadiacom bloku procesu. Hlavička fronty pripravených procesov obsahuje ukazovatele na riadiace bloky procesov prvého a posledného procesu vo fronte (Kvasnica, 2009). Jednotlivé riadiace bloky procesov obsahujú položku ukazovateľa na riadiaci blok procesu nasledujúceho procesu vo fronte pripravených procesov. Ukážka fronty je znázornená na obrázku č. 3.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR3.jpg|center|framed|Obrázok 3 Ukážka frontu pripravených procesov]]&lt;br /&gt;
&lt;br /&gt;
V systéme sa vytvára viac front procesov. Pri vykonávaní procesu môže nastať prípad, že proces bude musieť čakať na nejakú udalosť potrebnú pre dokončenie procesu. Napr. ukončenie I/O operácie na niektorom zo zdieľaných zariadení napr. disk, optická mechanika. Môže nastať prípad, že určité systémové zariadenie môže byť obsadené, pretože iný proces môže mať také isté požiadavky. V tom prípade sa vytvára fronta čakajúcich procesov pred každým zariadením. Všetky systémové zdieľané zariadenia majú svoju vlastnú frontu (Cada, 1993). &lt;br /&gt;
Novo vzniknutý proces je umiestnený do fronty pripravených procesov a čaká na pridelenie procesora. Po pridelení procesora sa proces môže odoberať jedným z nasledovných spôsobov:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#proces požiada o I/O operáciu a bude umiestnený do fronty príslušného zariadenia.&lt;br /&gt;
#proces vytvorí nový proces a čaká na jeho ukončenie.&lt;br /&gt;
#procesu môže byť odobratý procesor, z dôvodu prerušenia spôsobeného napr. výskytom chyby a je umiestnený do fronty pripravených procesov.&lt;br /&gt;
#Bolo vyčerpané pridelené časové kvantum (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
V prvých spomínaných prípadoch sa proces môže prepnúť z kontextu čakajúci do kontextu pripravený, následne je umiestnený do fronty pripravených procesov. Proces pokračuje v tomto cykle kým sa nedokončí. Po ukončení sa odstráni zo všetkých front a jeho riadiaci blok procesu a prostriedky, ktoré využíval sa uvoľnia.&lt;br /&gt;
&lt;br /&gt;
===Prepínanie kontextu===&lt;br /&gt;
Pri pridelení procesora inému procesu sa musí uložiť stav vykonávaného procesu do riadiaceho bloku procesu a zaviesť stav nového procesu . Táto činnosť sa nazýva prepínanie kontextu, je to pomocná činnosť a počas jej vykonávania systém nemôže vykonávať nič iné (Martincová, 1997). Rýchlosť prepínania kontextu je závislá na vybavovacej rýchlosti pamäte a na počte registrov, ktoré musia byť prekopírované. Typická doba na prepínanie kontextu sa pohybuje okolo 1 až 10 µs. Pri pridelení procesora procesu sa mu musí prideliť časové kvantum (možný čas strávený na procesore) a taktiež systémové prostriedky (Kvasnica, 2009).&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6446</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6446"/>
		<updated>2010-08-02T16:22:06Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Plánovanie procesov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6445</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6445"/>
		<updated>2010-08-02T16:20:17Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Plánovanie procesov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6444</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6444"/>
		<updated>2010-08-02T16:19:11Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Plánovanie procesov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+ Prioritné triedy procesov a priority vlákien &amp;lt;ref&amp;gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&amp;lt;/ref&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! Trieda priority procesu&lt;br /&gt;
! Priorita vlákna&lt;br /&gt;
! Základná priorita&lt;br /&gt;
|-&lt;br /&gt;
| Trieda priority reálneho času&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vysokej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda vyššej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda normálnej priority &lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda nižšej normálnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| Trieda voľnej priority&lt;br /&gt;
| &lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| Priorita kritického času&lt;br /&gt;
|-&lt;br /&gt;
| Najvyššia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Vyššia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia normálna priorita&lt;br /&gt;
|-&lt;br /&gt;
| Nižšia priorita&lt;br /&gt;
|-&lt;br /&gt;
| Voľná priorita&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6443</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6443"/>
		<updated>2010-08-02T16:14:45Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Bibliografia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6442</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6442"/>
		<updated>2010-08-02T16:14:19Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=Bibliografia=&lt;br /&gt;
#Kvasnica, Operačné systémy I, TnUAD, Trenčín 2009&lt;br /&gt;
#Madnick, Donovan, Operační systémy, SNTL, Praha 1983&lt;br /&gt;
#Basch, Princípy operačního systému UNIX, SAS, preklad Felbáb, Praha 1993&lt;br /&gt;
#Microsoft Windows 2000 Server Správa systému, Computer Press, preklad Roubíček, Praha 2000&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6441</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6441"/>
		<updated>2010-08-02T16:09:07Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov=&lt;br /&gt;
&lt;br /&gt;
=Bibliografia=&lt;br /&gt;
#Kvasnica, Operačné systémy I, TnUAD, Trenčín 2009&lt;br /&gt;
#Madnick, Donovan, Operační systémy, SNTL, Praha 1983&lt;br /&gt;
#Basch, Princípy operačního systému UNIX, SAS, preklad Felbáb, Praha 1993&lt;br /&gt;
#Microsoft Windows 2000 Server Správa systému, Computer Press, preklad Roubíček, Praha 2000&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6440</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6440"/>
		<updated>2010-08-02T16:08:21Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Záver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Rozbor programu pre meranie efektívnosti prioritných tried vlákien a procesov===&lt;br /&gt;
&lt;br /&gt;
=Bibliografia=&lt;br /&gt;
#Kvasnica, Operačné systémy I, TnUAD, Trenčín 2009&lt;br /&gt;
#Madnick, Donovan, Operační systémy, SNTL, Praha 1983&lt;br /&gt;
#Basch, Princípy operačního systému UNIX, SAS, preklad Felbáb, Praha 1993&lt;br /&gt;
#Microsoft Windows 2000 Server Správa systému, Computer Press, preklad Roubíček, Praha 2000&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=6439</id>
		<title>Prehľad inštrukcií procesora M8C</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=6439"/>
		<updated>2010-08-02T15:56:38Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inštrukcia procesoru je základný prvok činnosti, ktorú vykonáva procesor v našom prípade procesor M8C. &lt;br /&gt;
V závislosti od výsledku inštrukcie môžu byť nastavované príznakové bity&lt;br /&gt;
registra F:&lt;br /&gt;
*'''CF''' - Carry Flag&lt;br /&gt;
*'''ZF''' - Zero Flag&lt;br /&gt;
&lt;br /&gt;
Inštrukcie procesora môžeme rozdeliť do niekoľkých základných skupín :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aritmetické inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*''' ADD''' &lt;br /&gt;
 Syntax: ADD  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inštrukcia sčíta argumenty a výsledok uloží do argumentu1, ak sú väčšie čísla ako 8 bitov inštrukcia sa reťazí.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''ADC'''&lt;br /&gt;
 Syntax: ADC  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia sčíta argumenty inštrukcie a pridá príznakový bit Carry (CF). Prevedie sa táto operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; + &amp;lt;argument2&amp;gt; + CF. &lt;br /&gt;
&lt;br /&gt;
* '''SUB'''&lt;br /&gt;
 Syntax: SUB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADD ale argumenty sa odčitujú.&lt;br /&gt;
&lt;br /&gt;
* '''SBB'''&lt;br /&gt;
 Syntax: SBB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADC, ale taktiež sa argumenty odčitujú, takže sa prevedie operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; - &amp;lt;argument2&amp;gt; - Borrow&lt;br /&gt;
&lt;br /&gt;
* '''INC'''&lt;br /&gt;
 Syntax: INC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia zvýši 8 bitové číslo o jednotku (+1). Táto funkcia sa využíva, pretože je rýchlejšia ako ADD &amp;lt;argument&amp;gt;, 1.&lt;br /&gt;
&lt;br /&gt;
* '''DEC'''&lt;br /&gt;
 Syntax: DEC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia je rovnaká ako INC, ale ide o zníženie čísla o jednotka (-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pre INC a DEC inštrukcie sa hodnoty príznakov CF, ZF sa nastavujú pri pretečení resp. pri&lt;br /&gt;
dosiahnutí nuly argumentu&lt;br /&gt;
Používajú sa hlavne pri inkrementovaní počítadiel cyklov.&lt;br /&gt;
&lt;br /&gt;
===Logické inštrukcie===&lt;br /&gt;
&lt;br /&gt;
* '''AND'''&lt;br /&gt;
 Syntax: AND  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické násobenie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; AND &amp;lt;argument2&amp;gt;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie AND&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa k nulovaniu vybraných bitov. Napr. ak chcem vynulovať tretí bit akumulátora A, tak potom&lt;br /&gt;
 AND A, CPL 8&lt;br /&gt;
&lt;br /&gt;
* '''OR'''&lt;br /&gt;
 Syntax: OR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické sčítanie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; OR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie OR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa na nastavenie požadovaných bitov, napr. chcem nastaviť tretí bit akumulátora A, potom &lt;br /&gt;
 OR A, 3&lt;br /&gt;
&lt;br /&gt;
* '''XOR'''&lt;br /&gt;
 Syntax: XOR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické funkciu, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; XOR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie XOR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Pokiaľ dáme Xoru rovnaké číslo tak vždy vyjde 0. Je vhodný pre nulovanie. Napr. ak potrebujem dať do akumulátora A nulu potom &lt;br /&gt;
 XOR A,A&lt;br /&gt;
&lt;br /&gt;
* '''TST'''&lt;br /&gt;
 Synatax: TST &amp;lt;argument1&amp;gt;, &amp;lt;argumen2&amp;gt;&lt;br /&gt;
Inštrukcia  vykoná logický súčin operandov, podľa výsledku operácie nastaví príznakový bit ZF, ale výsledok neuloží&lt;br /&gt;
 TST A,%01000000      ;ak bit 6 je 1 potom ZF =0&lt;br /&gt;
 TST A, %01111000     ;ak bity 6,5,4 alebo 3 sú 0 potom ZF=1&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
* '''CPL'''&lt;br /&gt;
 Syntax: CPL &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia neguje obsah argumentu, t.j. vymení všetky 0 za 1 a naopak. Pri Hodnote 0x00 nastavuje príznak ZF.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,%10010110 &lt;br /&gt;
 CPL A           ;A:=%01101001&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie presunu dát===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''MOV'''&lt;br /&gt;
 Syntax: MOV &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Táto inštrukcia jednoducho presunie argument2 do argument1&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,k&lt;br /&gt;
 MOV X,expr&lt;br /&gt;
&lt;br /&gt;
Inštrukcia nastavuje príznačný bit ZF, ak je hodnota cieľu nolová 0x00.&lt;br /&gt;
&lt;br /&gt;
 MOV A, 0x01    ;hodnota akumulátora je 0x01, potom ZF=0.  &lt;br /&gt;
 MOV A, 0x00    ;hodnota akumulátora je 0x00, teda nulová. Potom ZF=1.&lt;br /&gt;
&lt;br /&gt;
* '''SWAP'''&lt;br /&gt;
 Syntax: SWAP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vymieňa obsah zdroja s cieľa. Výhodné pri dočasnom odložení registrov A,X do pamäte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''MVI'''&lt;br /&gt;
 Syntax: MVI &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia načíta 8-bitovú konštantu do registra pomocou smerníka.Smerník je inkremenovaný po prevedení operácie.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV [table],1		&lt;br /&gt;
 MOV [table+1],2 	&lt;br /&gt;
 MOV [ptr], table 	&lt;br /&gt;
 MVI A,[ptr] 		&lt;br /&gt;
 MVI A,[ptr]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie skoku===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''JMP''' &lt;br /&gt;
 Syntax: JMP &amp;lt;návetie&amp;gt;&lt;br /&gt;
Inštrukcia nepodmieneného skoku. Dlžka inštrukcie je 2 byty. Používa 12 bitovú adresu, kód inštrukcie sa nachádza v prvých 4 bitoch.&lt;br /&gt;
Príklad:&lt;br /&gt;
  MOV A, 4&lt;br /&gt;
 JMP návestie	; skok na návestie &lt;br /&gt;
&lt;br /&gt;
* '''LJMP'''&lt;br /&gt;
 Syntax: LJMP &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia absolútneho skoku, používa sa 16 bitová adresa. Táto inštrukcia zabezpečí. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:LJMP.jpg|center|framed|Obr 1.Skok na adresu 20h]]&lt;br /&gt;
&lt;br /&gt;
Keďže inštrukcie sa vykonávajú postupne, po vykonaní inštrukcie na adrese 20h pokračuje vykonávaním inštrukcie na adrese 21h, potom 22h atď.&lt;br /&gt;
&lt;br /&gt;
Najpoužívanejšie je JMP, pri chybe kompilátora sa inštrukcia zmení na LJMP&lt;br /&gt;
&lt;br /&gt;
* '''Jx'''&lt;br /&gt;
 Syntax: Jx &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcie podmieneného skoku sa navzájom odlišujú rozhodovacou podmienkov, ktorá riadi prevedenie skoku. Po vyhodnotení podmienky skoku sa program bude vykonávať ďalej alebo sa vykonávanie programu presunie na iné miesto. Rozhodujúcou podmienkou sú stavy príznačných bitov.&lt;br /&gt;
# '''JC''' &amp;lt;návestie&amp;gt; 	; skok na návestie ak CF =1&lt;br /&gt;
# '''JNC''' &amp;lt;návestie&amp;gt;	; skok na návestie ak CF=0&lt;br /&gt;
# '''JZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=1&lt;br /&gt;
# '''JNZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''CMP'''&lt;br /&gt;
 Syntax: CMP &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Porovná argumenty, ale neuloží výsledok. Podľa zmeny príznačných bitov CF a ZF sa určuje, aký z argumentov&lt;br /&gt;
je &amp;gt;, &amp;lt;, =, &amp;gt;=, &amp;lt;=.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
ZF=1 ak A==B&lt;br /&gt;
ZF=0 ak A&amp;lt;&amp;gt;B&lt;br /&gt;
CF=1 ak A-B&amp;lt;0, A&amp;lt;B CF=0 ak A-B&amp;gt;=0, A&amp;gt;=B&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Príklady podmienených skokov:&lt;br /&gt;
&lt;br /&gt;
 CMP A,4       ;A==4&lt;br /&gt;
 JZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;&amp;gt;4 &lt;br /&gt;
 JNZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;4 &lt;br /&gt;
 JC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;gt;=4 &lt;br /&gt;
 JNC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;=4  &lt;br /&gt;
 JZ navestie&lt;br /&gt;
 JC navestie&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* '''CALL'''&lt;br /&gt;
 Syntax: CALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia zavolá pod pogram. Volanie podprogramu v rozsahu 2 byty, používa sa 12-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''LCALL'''&lt;br /&gt;
 Syntax: LCALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Je podobná inštrukcii CALL, používa sa 16-bitová adresa a rozsah je 3 byty.&lt;br /&gt;
&lt;br /&gt;
Inštrukcie CALL a LCALL odkladajú pri volaní do zásobníka návratovú adresu (byte adrH, adrL)&lt;br /&gt;
&lt;br /&gt;
* '''RET''' &lt;br /&gt;
 Syntax: RET &amp;lt;argument&amp;gt; (nemusí byť)&lt;br /&gt;
Inštrukcia zabezpečuje návrat z posledného skoku, za posledný CALL čím sa dostaneme na miesto v odkiaľ bol volaný podprogram, čím sa pokračuje v ďalšom vykonávaní programu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RET.jpg|center|framed|Obr 2. Skok s podprogramu]]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie rotácie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''RRC'''&lt;br /&gt;
 Syntax: RRC &amp;lt;argument&amp;gt;,&amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doprava o n miest. Pri každom posune uloží do&lt;br /&gt;
siedmeho bitu obsah nultého bitu a do príznačného bitu Carry sa uloží nultý bit.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RRC.jpg|center|framed|Obr 3. Rotácia do prava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 10100010 –-&amp;gt; 11010001&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''RLC'''&lt;br /&gt;
 Syntax: RLC &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doľava o n miest. Pri každom posune uloží do nultého bitu obsah siedmeho bitu. Siedmy bit sa pri každom posune ukladá do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RLC.jpg|center|framed|Obr 4. Rotácia do ľava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 10001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 00100010 –-&amp;gt; 01000101&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''&lt;br /&gt;
 Syntax:ASR &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doprava. Do siedmeho bitu uloží siedmi bit.  A posunie bity doprava .&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASR.jpg|center|framed|Obr 5. Aritmetické posunutie do prava]]&lt;br /&gt;
&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 10100011 –-&amp;gt; 11010001 &lt;br /&gt;
                      C=1&lt;br /&gt;
&lt;br /&gt;
* '''ASL'''&lt;br /&gt;
 Syntax:ASL &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doľava. Do spodného bitu uloží nulu. Ukladáa najvyšší bit t.j. siedmi, do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASL.jpg|center|framed|Obr 6. Aritmetické posunutie doľava]]&lt;br /&gt;
 00001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie práce so zásobníkom===&lt;br /&gt;
&lt;br /&gt;
* '''PUSH'''&lt;br /&gt;
 Syntax: PUSH &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vloží hodnoty registra na miesto dočasného odloženia hodnôt, ktoré nazývame zásobník.&lt;br /&gt;
Príklad:&lt;br /&gt;
 PUSH A ;do vrcholu zásobníka uložia dáta z akumulátora A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''POP'''&lt;br /&gt;
 Syntax: POP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vráti hodnoty zo zásobníka do registra.&lt;br /&gt;
Príklad:&lt;br /&gt;
 POP A – z vrcholu zásobníka sú dáta presunuté späť do akumulátora A&lt;br /&gt;
&lt;br /&gt;
===Ďalšie inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
* '''ROMX'''&lt;br /&gt;
Kopíruje dáta z pamäťe ROM do zásobníka.&lt;br /&gt;
* '''HALT'''&lt;br /&gt;
Uvedie procesor do stavu halt. Čo má za následok uvoľnenie zberníc a prerušenie behu program.&lt;br /&gt;
* '''INDEX'''&lt;br /&gt;
Načitanie hodnoty s tabuľky hodnôt v pamäti ROM pomocou indexu akumulátora.&lt;br /&gt;
* '''SSC'''&lt;br /&gt;
Volanie špeciálnych subrutín z pamäte ROM.&lt;br /&gt;
* '''NOT'''&lt;br /&gt;
Prázdne 4 hodinové cykly&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Odkazy a literatúra&lt;br /&gt;
# http://egr.spu.edu/bolding/EE3280/PSoC/05-M8C-Instructions.ppt&lt;br /&gt;
# http://www.kemt.fei.tuke.sk/Predmety/KEMT411_ESM/_web/wwwfiles/kapitola%2004.htm&lt;br /&gt;
# http://mikroprocesory.sk/8051_instrukcny_subor_sk&lt;br /&gt;
# http://www.spseke.sk/tutor/prednasky/I8051b.htm&lt;br /&gt;
# http://ap.urpi.fei.stuba.sk/ap/texty/assembler.pdf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6438</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6438"/>
		<updated>2010-08-02T15:20:21Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Vlákna na používateľskej úrovni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
* Existujú na úrovni programu, jadro operačného programu o nich nevie.  &lt;br /&gt;
* Prepínanie kontextu vlákien nevyžaduje služby operačného systému. &lt;br /&gt;
* Plánovanie vlákien je špecifické pre každú aplikáciu, sama si vyberá najvhodnejší algoritmus pre svoju činnosť.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na úrovni jadra operačného systému===&lt;br /&gt;
&lt;br /&gt;
* Na rozdiel od vlákien na používateľskej úrovni prepínanie medzi vláknami riadi priamo jadro. &lt;br /&gt;
* Informácie o kontexte vlákien uchováva jadro (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Modelové situácie vlákien v operačnom systéme Windows===&lt;br /&gt;
&lt;br /&gt;
Operačný systém podporuje vlákna na užívateľskej úrovni aj úrovni jadra. Windows podporuje dva druhy implementácie:&lt;br /&gt;
* 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.&lt;br /&gt;
* One to one – Každé vlákno na používateľskej úrovni sa zobrazuje do jedného vlákna na úrovni jadra (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
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:&lt;br /&gt;
* Premenná trieda obsahuje vlákna s prioritou od 1 do 15.&lt;br /&gt;
* 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). &lt;br /&gt;
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.&lt;br /&gt;
Win32 aplikácie určujú viac prioritných tried do ktorých proces môže patriť. Sú to triedy:&lt;br /&gt;
* Trieda priority reálneho času,&lt;br /&gt;
* Trieda vysokej priority,&lt;br /&gt;
* Trieda vyššej normálnej priority,&lt;br /&gt;
* Trieda normálnej priority,&lt;br /&gt;
* Trieda nižšej normálnej priority,&lt;br /&gt;
* Trieda nečinnej priority (Roubíček, 2000).&lt;br /&gt;
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ú:&lt;br /&gt;
* Priorita kritického času, &lt;br /&gt;
* Najvyššia priorita, &lt;br /&gt;
* Vyššia normálna priorita,&lt;br /&gt;
* Normálna priorita,&lt;br /&gt;
* Nižšia normálna priorita,&lt;br /&gt;
* Najnižšia priorita,&lt;br /&gt;
* Nečinná priorita (Roubíček, 2000).&lt;br /&gt;
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ú :&lt;br /&gt;
* Trieda priorít reálneho času – 24, &lt;br /&gt;
* Trieda vysokej priority – 12,&lt;br /&gt;
* Trieda vyššej normálnej priority – 10,&lt;br /&gt;
* Trieda normálnej priority – 8,&lt;br /&gt;
* Trieda nižšej normálnej priority – 6,&lt;br /&gt;
* Trieda voľnej priority – 4.&lt;br /&gt;
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é:&lt;br /&gt;
* Procesy na pozadí,&lt;br /&gt;
* Procesy v popredí (Kvasnica, 2009).&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
=Bibliografia=&lt;br /&gt;
#Kvasnica, Operačné systémy I, TnUAD, Trenčín 2009&lt;br /&gt;
#Madnick, Donovan, Operační systémy, SNTL, Praha 1983&lt;br /&gt;
#Basch, Princípy operačního systému UNIX, SAS, preklad Felbáb, Praha 1993&lt;br /&gt;
#Microsoft Windows 2000 Server Správa systému, Computer Press, preklad Roubíček, Praha 2000&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6437</id>
		<title>Plánovanie procesov v OS Windows</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov_v_OS_Windows&amp;diff=6437"/>
		<updated>2010-08-02T15:15:51Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /*  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
=Plánovanie procesov v operačnom systéme Windows=&lt;br /&gt;
&lt;br /&gt;
Operačný systém implementuje Win32-bitové aplikácie. Win32 aplikácia je primárna pre rodinu operačných systémov Microsoft Windows.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Charakteristika vlákna==&lt;br /&gt;
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). &lt;br /&gt;
Základné komponenty, ktoré vlákno obsahuje:&lt;br /&gt;
* Počítadlo inštrukcií, &lt;br /&gt;
* Sadu registrov,&lt;br /&gt;
* Zásobník (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
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.:&lt;br /&gt;
* Zrýchlenie vykonávania programov,&lt;br /&gt;
* Paralelizácia algoritmov v programe,&lt;br /&gt;
* Využitie multiprocesorových architektúr (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
Vlákna v operačnom systéme Windows môžu nadobúdať stavy, ktoré sú reprezentované numerickými hodnotami od 0 do 7 :&lt;br /&gt;
&lt;br /&gt;
* 0 – inicializované,&lt;br /&gt;
* 1 – pripravené – vlákno je pripravené pre spustenie na procesore,&lt;br /&gt;
* 2 – spustené,&lt;br /&gt;
* 3 – úsporný režim – vlákno je pripravené použiť procesor,&lt;br /&gt;
* 4 – ukončené, &lt;br /&gt;
* 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,&lt;br /&gt;
* 6 – prechod – vlákno nie je pripravené pre spustenie, pretože čaká na prostriedok napr. kód stránkovaný na disk,&lt;br /&gt;
* 7 – neznámy – vlákno sa nachádza v neznámom stave (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Vlákna na používateľskej úrovni===&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
=Bibliografia=&lt;br /&gt;
#Kvasnica, Operačné systémy I, TnUAD, Trenčín 2009&lt;br /&gt;
#Madnick, Donovan, Operační systémy, SNTL, Praha 1983&lt;br /&gt;
#Basch, Princípy operačního systému UNIX, SAS, preklad Felbáb, Praha 1993&lt;br /&gt;
#Microsoft Windows 2000 Server Správa systému, Computer Press, preklad Roubíček, Praha 2000&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6436</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6436"/>
		<updated>2010-08-02T15:11:39Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Plánovanie systémov reálneho času */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať odlišné potreby pre plánovanie (Roubíček, 2000). Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko front, ako je znázornené na obrázku č. 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá fronta by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou cyklického plánovania (RR). V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j. žiadny proces z fronty interaktívnych procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte (Kvasnica, 2009). Ak by sme mali iba dve fronty, fronta procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúca procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR). Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojím prideleným frontom a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora (Martincová, 1997). Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu (Kvasnica, 2009).&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa fronta 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z fronty 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do fronty 0, preruší vykonávanie procesu v nižších frontách.&lt;br /&gt;
&lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum napr. 8 ms. Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum napr. 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&lt;br /&gt;
* Počet front.&lt;br /&gt;
* Pre každú frontu plánovací algoritmus.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor.&lt;br /&gt;
&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
# Systémy s tvrdým prideľovaním času.&lt;br /&gt;
# Systémy s variabilnými prideľovaním času (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný. Táto metóda sa nazýva ako metóda rezervovaných zdrojov (Martincová, 1997). Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu (Kvasnica, 2009). Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému (Kvasnica, 2009). Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali (Martincová, 1997).&lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase (Kvasnica, 2009). Veľa operačných systémov nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, sa využíva preemptívne plánovanie systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo (Martincová, 1997). Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus (Kvasnica, 2009). Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6435</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6435"/>
		<updated>2010-08-02T15:10:21Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Plánovanie pomocou viacerých front */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať odlišné potreby pre plánovanie (Roubíček, 2000). Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko front, ako je znázornené na obrázku č. 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá fronta by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou cyklického plánovania (RR). V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j. žiadny proces z fronty interaktívnych procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte (Kvasnica, 2009). Ak by sme mali iba dve fronty, fronta procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúca procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR). Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojím prideleným frontom a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou (Roubíček, 2000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora (Martincová, 1997). Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu (Kvasnica, 2009).&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa fronta 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z fronty 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do fronty 0, preruší vykonávanie procesu v nižších frontách.&lt;br /&gt;
&lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum napr. 8 ms. Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum napr. 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&lt;br /&gt;
* Počet front.&lt;br /&gt;
* Pre každú frontu plánovací algoritmus.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&lt;br /&gt;
* Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor.&lt;br /&gt;
&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
&amp;lt;ul&amp;gt;1. Systémy s tvrdým prideľovaním času&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;2. Systémy s variabilnými prideľovaním času&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný.  Táto metóda sa nazýva ako metóda rezervovaných zdrojov. Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu. Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému. Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať  v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali. &lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať  ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase. Veľa operačných systémov  nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, udržíme preemptívnym plánovaním systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo. Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus. Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6434</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6434"/>
		<updated>2010-08-02T15:07:40Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Algoritmy plánovania */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do fronty pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out) (Martincová, 1997). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu (Kvasnica, 2009). Tento algoritmus môže veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému (Martincová, 1997). Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovania najkratšieho procesu môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First) (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr (SJF). Každý proces má pridelenú prioritu, podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu (FCFS) (Plášil, 1992). Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&lt;br /&gt;
* Interné,&lt;br /&gt;
* Externé (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie (Madnick, 1983).&lt;br /&gt;
Externé priority sa nastavujú kritériami vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu (Madnick, 1983).&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne (Kvasnica, 2009). Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému (Martincová, 1997). Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesov, ktoré čakajú, po uplynutí nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Round Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky (Kvasnica, 2009).  Plánovač procesov postupne pridelí jedno časové kvantum procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty, nastaví časovač na časové kvantum a pridelí procesu procesor (Martincová, 1997). Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je na prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu, ktorý je na prvom mieste vo fronte (Kvasnica, 2009). &lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom spracovania v poradí príchodu (FCFS) (Cada, 1993). &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante (Madnick, 1983). Najčastejšie používané časové kvantum je 5 ms (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať  odlišné potreby pre plánovanie. Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko frontov, ako je znázornené na obrázku 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá z front by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou  cyklického plánovania. V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j.  žiadny proces z fronty interaktívnych  procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte. Ak by sme mali iba dve fronty, front  procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúci procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým  algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR) . Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojou pridelenou frontou a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou.&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora. Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces  vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu.&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa front 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z frónt 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do frontu 0, preruší vykonávanie procesu v nižších frontoch. &lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum 8 ms.  Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0 prázdnej, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Počet frónt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pre každú frontu plánovací algoritmus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt;&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší  a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém. &lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
&amp;lt;ul&amp;gt;1. Systémy s tvrdým prideľovaním času&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;2. Systémy s variabilnými prideľovaním času&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný.  Táto metóda sa nazýva ako metóda rezervovaných zdrojov. Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu. Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému. Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať  v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali. &lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať  ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase. Veľa operačných systémov  nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, udržíme preemptívnym plánovaním systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo. Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus. Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6433</id>
		<title>Plánovanie procesov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Pl%C3%A1novanie_procesov&amp;diff=6433"/>
		<updated>2010-08-02T15:00:23Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Základné princípy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
&lt;br /&gt;
=Plánovanie procesov=&lt;br /&gt;
&lt;br /&gt;
Do základných funkcií systému patrí plánovanie času procesora. Pre zefektívnenie práce celého systému sa prideľuje procesor jednotlivým procesom.&lt;br /&gt;
&lt;br /&gt;
==Základné princípy==&lt;br /&gt;
&lt;br /&gt;
Základnou myšlienkou je, aby stále bežalo niekoľko procesov pre maximálne využitie procesora. V danom čase pri jednoprocesorových systémoch beží iba jeden proces. Ak sa v systéme nachádza viac ako jeden proces, ostatné procesy vo fronte pripravených musia čakať na uvoľnenie procesora. V jednoduchom operačnom systéme procesor nebude vykonávať žiadnu prácu (Plášil, 1992). V multiprogramovom systéme sa snažíme tento čas využiť efektnejšie. Ak vykonávaný proces z nejakého dôvodu čaká napr. na I/O operáciu, sa zaradí do fronty I/O zariadení, systém pridelí procesor inému procesu z fronty pripravených procesov. V systémoch pracujúcich zo zdieľaním času sa novo vytvoreným procesom prideľuje aj časový úsek, nazývaný ako časové kvantum. Po vypršaní časového kvanta sa proces preruší a vyberie sa ďalší proces z fronty pripravených procesov na spracovanie. Každý aktívny proces má taktiež svoju plánovaciu prioritu. Pri výbere ďalšieho procesu sa prihliada na túto prioritu, zvolí proces s najvyššou prioritou. Pôvodnému procesu bude pridelené nové časové kvantum pre jeho ďalšie spracovanie (DEITEL, 1990).&lt;br /&gt;
&lt;br /&gt;
===Cykly periférií a procesora===&lt;br /&gt;
Vykonávanie procesu pozostáva z cyklu využívania procesora a cyklu čakania na I/O. Proces prebieha medzi týmito dvomi cyklami (Kvasnica, 2009).&lt;br /&gt;
Vykonávanie procesu začína cyklom procesora a pokračuje striedaním cyklu procesora a cyklu I/O. Posledný cyklus pred ukončením procesu, aby mohol byť dokončený štandardnými operáciami je cyklus procesora (Kvasnica, 2009).&lt;br /&gt;
Procesy využívajúce prevažne I/O budú mať malé periódy využitia procesora, procesy využívajúce prevažne procesor budú mať tieto periódy dlhé. Pre výber plánovacieho algoritmu pre čas procesora sú tieto rozdiely veľmi podstatné (Martincová, 1997). &lt;br /&gt;
&lt;br /&gt;
===Plánovač času procesora===&lt;br /&gt;
Procesy počas svojej existencie putujú medzi rôznymi frontami. Nejakým spôsobom operačný systému musí rozhodnúť, ktorý proces vybrať z front. Tento proces zabezpečuje plánovač. Do systému postupuje viac úloh, ako sa môže naraz vykonávať. Tieto úlohy sa ukladajú najčastejšie na pevný disk.  Systém obsahuje dva nasledovné plánovače:&lt;br /&gt;
&lt;br /&gt;
* Plánovač úloh alebo tzv. dlhodobý plánovač, vyberie procesy z úloh uložených na pevnom disku a zavedie ich do pamäti k spusteniu.&lt;br /&gt;
* Plánovač procesov alebo tzv. krátkodobý plánovač, vyberá z procesov uložených v pamäti a prideľuje jednému z nich procesor (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Rozdiel medzi týmito plánovačmi je vo frekvencii ich spúšťania. Plánovač procesov sa musí spúšťať o veľa častejšie ako plánovač úloh. Spúšťa sa každých 1 ms (Cada, 1993). Pri prideľovaní procesora musí byť veľmi rýchly.&lt;br /&gt;
Plánovač úloh vpúšťa úlohy do systému. Dajú sa rozdeliť na dve skupiny, tie ktoré využívajú I/O zariadenia a tie, ktoré využívajú iba procesor. Plánovač úloh musí tieto dve skupiny procesov vhodne striedať aby bolo zachované efektívne využívanie celého systému (Martincová, 1997). Pretože ak by všetky procesy využívali I/O zariadenia, fronta pripravených procesov by bola prázdna a naopak, ak by všetky procesy využívali procesor fronta zariadení by bola prázdna, čo by viedlo k nevyváženosti systému. Plánovač úloh má tieto funkcie:&lt;br /&gt;
&lt;br /&gt;
* Sleduje stav všetkých procesov, registruje všetky procesy, ktoré vstupujú do systému a všetky procesy, ktoré sú vo fronte pripravených procesov, vykonávajú sa alebo sú blokované.&lt;br /&gt;
* Volí stratégiu, podľa ktorej procesy vstupujú do systému, zavádzajú sa do fontu pripravených procesov. Rozhoduje podľa viacerých kritérií,  ako napr. priorita, vyváženie systému, požadované prostriedky procesu.&lt;br /&gt;
* Procesu vo fronte pripravených procesov prideľuje potrebné prostriedky (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Plánovač procesov ako náhle plánovač úloh zatriedi proces do fronty pripravených procesov rozhoduje, ktorému a na ako dlhú dobu pridelení procesor. Po výbere procesu je potrebné obnoviť registre procesora. Túto úlohu zastáva v systéme dispečer (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
Systémy zo zdieľaním času majú interaktívnu úroveň prideľovania. Základná myšlienka spočíva v tom, že niekedy je výhodnejšie pre systém odstrániť vykonávajúci sa proces na čas z pamäti a presunúť ho na disk a znížiť tak počet procesov v pamäti (Kvasnica, 2009). Týmto spôsobom sa môže zabrániť preplneniu pamäte. Proces môže byť neskôr opätovne načítaný do pamäte a spustený. Tento spôsob sa nazýva stránkovanie (Plášil, 1992). &lt;br /&gt;
&lt;br /&gt;
===Preemptívne plánovanie===&lt;br /&gt;
Pri jednom z ďalej uvedených prechodov sa môže urobiť rozhodovanie o plánovaní času procesora.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu čakajúci.&lt;br /&gt;
#Prepínanie procesu zo stavu prebiehajúci do stavu pripravený.&lt;br /&gt;
#Prepínanie procesu zo stavu čakajúci do stavu pripravený.&lt;br /&gt;
#Pri ukončení procesu (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Ako náhle v plánovači dochádza iba, a len iba vo vykonávaní bodov 1 a 4 sa toto plánovanie nazýva nepreemptívne v opačnom prípade je plánovanie preemptívne. Ak je pri nepreemptívnom plánovaní  pridelený procesor procesu, tento proces sa vykonáva až do svojho ukončenia, alebo ak vznikne požiadavka na I/O operáciu a procesu sa zmení kontext na čakajúci.&lt;br /&gt;
Preemptívne plánovanie je náročnejšie. Pri preemptívnom plánovaní treba uvažovať s procesmi, ktoré zdieľajú dáta, tieto dáta treba udržovať v konzistentnom tvare pri prepnutí kontextu procesu. Na udržanie konzistentného stavu dát je treba dodatočných synchronizačných prostriedkov (Cada, 1993).&lt;br /&gt;
&lt;br /&gt;
===Dispečer===&lt;br /&gt;
Dispečer je modul operačného systému, ktorý má kontrolu nad procesorom a procesom vybraným pre vykonanie plánovačom procesov. Dispečer sa spúšťa pri každom prepínaní kontextu procesov, preto by mal byť čo najrýchlejší (Plášil, 1992).&lt;br /&gt;
Jeho hlavné úlohy sú nasledovné:&lt;br /&gt;
&lt;br /&gt;
* Prepínanie kontextu procesov.&lt;br /&gt;
* Prepínanie medzi užívateľskými módmi.&lt;br /&gt;
* Skok na adresu kde bol proces prerušený, pri opätovnom spustení (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Algoritmy plánovania==&lt;br /&gt;
Plánovacie algoritmy riešia problém, ktorému procesu z fronty pripravených procesov bude pridelený procesor.&lt;br /&gt;
&lt;br /&gt;
===Spracovanie v poradí príchodu (FCFS – First come, First served)===&lt;br /&gt;
&lt;br /&gt;
Tento algoritmus spracovania v poradí príchodu je najjednoduchší. Základnou ideou tohto algoritmu je, proces, ktorý požiadal o pridelenie procesora ako prvý ho dostane ako prvý. Pri zaradovaní procesu do frontu pripravených procesov sa riadiaci blok procesu zaradí na koniec fronty. Takúto frontu nazývame FIFO (First in, First Out). Po uvoľnení procesoru prvým procesom, sa procesor pridelí nasledujúcemu procesu, teda druhému v poradí vo fronte pripravených procesov. Bežiaci proces sa odstráni z fronty. Algoritmus  plánovania v poradí príchodu nie je preemptívny. Ak proces dostane procesor tak mu zostane pridelený až do ukončenia alebo, kým proces nevyžaduje nejakú I/O operáciu. Tento algoritmus môže  veľmi predĺžiť čakaciu dobu krátkych procesov. Algoritmus nie je vhodný a je veľmi ťažko použiteľný v systémoch zdieľania času.&lt;br /&gt;
&lt;br /&gt;
===Najkratší proces najskôr (SJF – Shortest Job First)===&lt;br /&gt;
&lt;br /&gt;
Podľa času, ktorý vyžaduje proces na procesore sa určuje poradie spracovania procesov. Po uvoľnení procesora sa procesor pridelí procesu, ktorý má najmenšie požiadavky na čas procesora pre svoje dokončenie v prípade ak bol medzitým spracovávaný. Ak nastane prípad zhody požadovaného času na procesore algoritmus prihliada na poradie pri vstupe do systému. Pri tomto algoritme je potrebné dopredu vedieť požadovaný čas na procesore pre každý proces. Toto môžeme považovať ako nedostatok. Používa sa pri dlhodobom plánovaní procesov. Nie je vhodný na krátkodobé plánovanie, pretože pri krátkodobom plánovaní nepoznáme požiadavky na čas nasledovného procesu. Algoritmus plánovanie najkratší proces najskôr môže byť preemptívny alebo nepreemptívny. Výber medzi týmito dvomi variantmi sa robí pri príchode nového procesu do fronty pripravených procesov a predchádzajúci proces sa ešte vykonáva. Tento výber dvoch variant sa robí, pretože nový proces môže mať menšie požiadavky na čas procesora ako zostávajúce požiadavky vykonávajúceho sa procesu. Preemptívny algoritmus prepne vykonávajúci sa proces, nepreemptívny algoritmus nechá vykonávajúci sa proces dokončiť. Niekedy sa tento preemptívny algoritmus nazýva plánovanie podľa najkratšej zostávajúcej doby na vykonanie (SRTF - Shortest Remaining Time First).&lt;br /&gt;
&lt;br /&gt;
=== Plánovanie podľa priorít ===&lt;br /&gt;
&lt;br /&gt;
Obecný prípad pre algoritmus plánovanie podľa priorít je algoritmus najkratší proces najskôr. Každý proces má pridelenú prioritu , podľa tejto priority sa prideľuje procesor procesu. Procesor sa prideľuje procesu s najvyššou prioritou. Ak nastane prípad rovnakej priority pri procesoch sa plánovanie uskutočňuje podľa algoritmu plánovania spracovanie podľa poradia príchodu. Priority patria do intervalu celých čísiel napr. od 0 do 7. Nie je žiadne ustanovenie, že nižšie číslo znamená menšiu prioritu. V niektorých systémoch menšie číslo znamená nižšiu prioritu a u niektorých je to naopak. &lt;br /&gt;
Priority  sa môžu definovať:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interné&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Externé&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Interné definovanie priority využíva niektoré merateľné hodnoty procesu napr. pamäťové časové limity, počet otvorených súborov, pomer priemerných požiadaviek na procesor a I/O operácie.&lt;br /&gt;
Externé priority sa nastavujú kritériami externej ma vzhľadom na operačný systém, napr. dôležitosť procesu, alebo faktory z povahy procesu.&lt;br /&gt;
Plánovanie podľa priorít taktiež môže byť preemptívne alebo nepreemptívne. Proces, ktorý príde do fronty pripravených procesov sa porovnáva s vykonávajúcim sa procesom vzhľadom na prioritu. Ak pri preemptívnom plánovaní podľa priorít bude priorita nového procesu vyššia ako priorita vykonávajúceho procesu tak bude prepnutý. Pri nepreemptívnom bude proces zaradený na začiatok fronty pripravených procesov.&lt;br /&gt;
Pri takomto plánovaní môže vzniknúť situácia že procesy s nižšou prioritou by dlho čakali na pridelenie procesora alebo by neboli vôbec nikdy dokončené, čo by mohlo spôsobiť nefunkčnosť systému. Pre odstránenie takéhoto nežiaduceho stavu bolo zavedené postupné zvyšovanie priorít procesom , ktoré čakajú, po uplynutí  nejakej doby nastavenej systémom.&lt;br /&gt;
&lt;br /&gt;
===Cyklické plánovanie (RR - Rond Robin)===&lt;br /&gt;
&lt;br /&gt;
Tento typ plánovacieho algoritmu bol špeciálne navrhnutý pre systémy so zdieľaním času. Je veľmi podobný algoritmu spracovania v poradí príchodu, ale je preemptívny. Pri tomto plánovaní sa definuje časové kvantum v rozmedzí  (1- 10 ms). Procesy vo fronte pripravených procesov sa spracovávajú cyklicky.  Plánovač procesov postupne pridelí jedno časové kvantum  procesu vo fronte pripravených procesov, ktoré môže byť napr. 4 ms. Cyklické plánovanie využíva frontu pripravených procesov FIFO. Nový proces sa zaradí na koniec fronty pripravených procesov. Plánovač procesov vyberie vždy prvý proces na začiatku fronty,  nastaví časovač na časové kvantum a pridelí procesu procesor. Ak proces potrebuje procesor na kratšie časové kvantum ako mu bolo pridelené a uvoľní procesor, plánovač vyberie nasledujúci proces, ktorý je prvej pozícii vo fronte a pridelí mu procesor. Ak by proces potreboval väčšie časové kvantum na svoje vykonanie, po uplynutí  prideleného časového kvanta ho preruší a uloží si kontext procesu, nasledovne je presunutý na poslednú pozíciu vo fronte pripravených procesov. Procesor bude pridelený ďalšiemu procesu ktorý je na prvom mieste vo fronte.&lt;br /&gt;
Výkonnosť algoritmu cyklického plánovanie bude závisieť zásadne od určenia veľkosti časového kvanta. Ak by sme uvažovali s nekonečne veľkým časovým kvantom, tento algoritmus bude rovnocenný s algoritmom Spracovania v poradí príchodu. &lt;br /&gt;
Optimálny prípad pre nastavenie časového kvanta je, ak 80% procesov dokončí svoju činnosť v jednom časovom kvante. Najčastejšie používané časové kvantum je 5 ms.&lt;br /&gt;
&lt;br /&gt;
==Plánovanie pomocou viacerých front==&lt;br /&gt;
&lt;br /&gt;
Procesy sa dajú rozdeliť na dve skupiny, pre túto situáciu bola navrhnutá trieda plánovacích algoritmov pomocou viacerých front. Procesy môžeme rozdeliť na interaktívne a dávkové. Každá z týchto dvoch skupín má odlišné požiadavky na čas potrebný pre dokončenie procesu alebo môžu mať  odlišné potreby pre plánovanie. Pri použití tohto plánovania sa front pripravených procesov delí na niekoľko frontov, ako je znázornené na obrázku 4.&lt;br /&gt;
Procesy sú zadeľované do front podľa nejakého kritéria procesu napr. priorita, veľkosť, typ procesu atď. Každá z front by mohla mať iný plánovací algoritmus napr. interaktívne procesy by sa mohli plánovať pomocou  cyklického plánovania. V tomto plánovaní prebieha aj plánovanie medzi frontami, ktoré je zvyčajne preemptívne s pevnými prioritami, t.j. procesy na popredí majú vyššiu externú prioritu, ako procesy na pozadí (dávkové procesy) kvôli interaktívnej komunikácii s užívateľom.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR4.jpg|center|framed|Obrázok 4 Plánovanie pomocou viacerými frontmi]]&lt;br /&gt;
&lt;br /&gt;
Každá fronta má vyššiu prioritu nad frontmi z nižšou prioritou, t.j.  žiadny proces z fronty interaktívnych  procesov nesmie byť vykonávaný, pokiaľ fronta zo systémovými procesmi nebude prázdna.&lt;br /&gt;
Ďalší spôsob plánovania je pridelenie určitého časového kvanta procesora medzi fronty. Každá fronta dostane pridelenú časť časového kvanta procesora a nasledovne ju delí medzi procesy vo svojej fronte. Ak by sme mali iba dve fronty, front  procesov na pozadí a fronta procesov v popredí, potom fronta obsahujúci procesy v popredí môže dostať až 80% celkového časového kvanta procesora. Toto pridelené časové kvantum si delí medzi svoje procesy nejakým  algoritmom plánovania napr. pomocou algoritmu cyklického plánovania (RR) . Fronta procesov na pozadí dostane pridelení zvyšok časového kvanta t.j. 20%. Toto pridelené časové kvantum si môže deliť medzi procesy napr. pomocou algoritmu spracovania v poradí príchodu (FCFS).&lt;br /&gt;
Všetky procesy v tomto plánovaní sú pevne spojené so svojou pridelenou frontou a nemenia ho, pretože procesy sú roztriedené na základe nemennej charakteristiky. Výhodou tohto algoritmu sú nižšie réžie pre plánovanie. Toto plánovanie nie je dostačujúco flexibilné, je to jeho nevýhodou.&lt;br /&gt;
&lt;br /&gt;
===Plánovanie s viacerými frontami so spätnou väzbou===&lt;br /&gt;
&lt;br /&gt;
U tohto plánovania sa môžu procesy pohybovať medzi frontami, t.j. ich zaradenie nie je pevne dané na rozdiel od plánovania pomocou viacerých front bez spätnej väzby. Týmto sa toto plánovanie stáva flexibilným. Hlavnou myšlienkou tohto plánovania je oddeliť procesy s rôznou charakteristiku cyklu procesora. Ako náhle nejaký proces príliš veľa využíva procesor, presunie sa do fronty s nižšou prioritou, aby toľko nezaťažoval systém a naopak. Proces  vo fronte s nižšou prioritou, dlho čaká na pridelenie procesora, môže byť presunutý do fronty s vyššou prioritou, aby nenastal prípad nekonečného čakania procesu.&lt;br /&gt;
Ak budeme uvažovať plánovanie iba s tromi frontami 0, 1, 2. Plánovač začne prideľovať procesy z fronty 0, ak sa front 0 vyprázdni začne prideľovať procesy z fronty 1 ak nebudú žiadne procesy zaradené vo fronte 1 potom začne prideľovať procesy z fronty 2 ale iba v prípade ak je prázdna aj fronta 0, pretože proces z fronty 1 môže prerušiť proces vo fronte 2 a proces z fronty 0 môže prerušiť procesy z frónt 1 aj 2. Ak do systému medzi tým vstúpi proces a bude zaradení do frontu 0, preruší vykonávanie procesu v nižších frontoch. &lt;br /&gt;
Novo vytvorený proces sa zaraduje do fronty 0, kde mu bude pridelene časové kvantum 8 ms.  Ak proces potrebuje väčšie časové kvantum na svoje dokončenie po vypršaní prideleného časového kvanta sa preruší a presunie sa do fronty z nižšou prioritou, v našom prípade do fronty 1. Ak fronta 0 nie je prázdna zvolí sa nasledujúci vo fronte 0 prázdnej, ak je prázdna vyberie sa prvý proces v poradí z fronty 1. V tejto fronte procesy dostávajú pridelené časové kvantum 16 ms. Ak by proces nedokončil svoju činnosť do tohto časového kvanta presunie sa do fronty 2, kde sa procesy vykonávajú pomocou algoritmu spracovania v poradí príchodu (FCFS). Tento algoritmus uprednostňuje procesy, ktoré potrebujú čas procesora pre svoje dokončenie 8 ms alebo menej. &lt;br /&gt;
Plánovač pomocou viacerých front so spätnou väzbou sa definuje podľa nasledovných parametrov :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Počet frónt&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pre každú frontu plánovací algoritmus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do vyššej fronty s vyššou prioritou.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Metódou, pre určenie charakteristiky, ktorý proces je treba presunúť do nižšieho frontu s nižšou prioritou.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Metódou, pre určenie charakteristiky, do ktorej fronty bude zaradený proces, keď bude potrebovať prideliť procesor&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt;&lt;br /&gt;
Je najuniverzálnejší, najvýznamnejší  a najzložitejší algoritmus plánovania. Môže byť nakonfigurovaný pre akýkoľvek systém. &lt;br /&gt;
==Plánovanie systémov reálneho času==&lt;br /&gt;
Systémy reálneho času môžeme rozdeliť  na dve skupiny:&lt;br /&gt;
&amp;lt;ul&amp;gt;1. Systémy s tvrdým prideľovaním času&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;2. Systémy s variabilnými prideľovaním času&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Systémy s pevným prideľovaním času sú systémy, ktoré požadujú dokončenie úlohy v dopredu stanovenom čase. Pri zavedení procesu do systému sa dodáva aj s časom potrebným na dokončenie úlohy alebo pre kompletizáciu I/O operácie. Plánovač rozhoduje o prijatí procesu a jeho nasledovnej garancie splnenia procesu do požadovaného času, alebo ho odmietne ako nesplniteľný.  Táto metóda sa nazýva ako metóda rezervovaných zdrojov. Tvrdé prideľovanie času sa vyznačuje, koľko času treba na vykonanie určitej operácie, každej operácii je garantovaná maximálna priepustná doba. Garancia procesov nie je možná u systémov s virtuálnou alebo sekundárnou pamäťou, pretože tieto vyvolávajú nepredvídateľné zmeny času potrebného k vykonaniu procesu. Systémy využívajúce plánovanie reálneho času sa skladajú zo špeciálnych programov, ktoré sa používajú iba na špeciálne navrhnutých platformách. Tieto systémy nie sú univerzálne.&lt;br /&gt;
Systémy s variabilným prideľovaním času sú menej obmedzujúce. Vyžadujú, aby tzv. kritické procesy získali vyššiu prioritu ako ostatné procesy v systéme. Pridaním tohto plánovania do systémov využívajúcich zdieľanie času môže viesť k nespravodlivému prideľovaniu prostriedkov a tým k spomaleniu systému. Existujú aj prípady, kde niektoré úlohy sa potrebujú spúšťať  v prostredí s plánovaním v reálnom čase ako napr. vysokorýchlostná interaktívna grafika alebo multimediálne aplikácie, aby správne pracovali. &lt;br /&gt;
Pre implementáciu funkcií reálneho času potrebujeme adekvátne vlastnosti operačného systému a dobre navrhnutý plánovač. Systém musí využívať plánovanie pomocou priorít, pretože procesy v reálnom čase musia mať vyššiu prioritu, ktorá nesmie klesať  ako iným procesom. Vybavovacia rýchlosť dispečera musí byť čo najmenšia, pretože čím je kratšia reakcia dispečera, tým môže byť rýchlejšie spustený proces v reálnom čase. Veľa operačných systémov  nemôže zabezpečiť krátku reakciu dispečera, pretože pred prepnutím kontextu sa musí čakať na dokončenie I/O operácie alebo systémového volania. Oneskorená reakcia dispečera v takýchto prípadoch býva veľká, pretože niektoré zo systémových volaní sú zložité a väčšina I/O zariadení sú pomalé.&lt;br /&gt;
Pre udržanie malej doby reakcie dispečera, udržíme preemptívnym plánovaním systémových volaní. Sú dve riešenia. Prvé riešenie je zavedenie bodu núteného prerušenia pre dlhé systémové volania. Tento vložený bod zisťuje či nemusí byť spustený proces s vyššou prioritou, ak áno preemptívne sa mu pridelí procesor, čo vedie k prerušeniu systémového volania. Po dokončení procesu s vyššou prioritou sa dokončí systémové volanie. Tento bod musí byť vložený na bezpečné miesto, kvôli nebezpečenstvu prepísania systémových dát. Toto riešenie nie je veľmi efektívne, pretože do systému ich môže byť vložených veľmi málo. Druhé riešenie je vytvoriť od základu celé preemptívne jadro, kde všetky systémové dáta musia byť chránené, čo zabezpečuje nejaký synchronizačný mechanizmus. Toto riešenie je využité v operačnom systéme Solaris 2.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6432</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6432"/>
		<updated>2010-08-02T14:54:16Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Procesy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Martin Cibulka|Ing. Peter Kvasnica,PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Semetrálna práca|Mechatronika}} &lt;br /&gt;
{{Praca_uvod|1|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|Cieľom záverečnej práce bolo priblížiť sa správanie operačných systémov opisom jeho prvkov, ako sú procesy, vlákna a algoritmy spracovania procesov v systéme a opísať správanie vybraného operačného systému pri nastaveniach rôznych priorít a prioritných tried procesu pomocou vlastnej aplikácie. Vytvorenej vo vyššom programovacom jazyku C++. Práca je rozdelená do 5 kapitol. Obsahuje 18 obrázkov, 5 tabuľky a 3 prílohy. &lt;br /&gt;
y&lt;br /&gt;
|The aim of final thesis was to clarify the behavior of operating systems by description of their components such as processes, threads and processes processing algorithms in the system and to describe the behavior of the selected operating system with settings for different priorities and the priority classes through the process of custom application. Created in a higher programming language C + +. The work is divided into 5 chapters. It contains 18 pictures, 5 tables and 3 appendices.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Táto práca pojednáva o prioritných triedach procesov a prioritách vlákien operačného systému Microsoft Windows a ich vplyve na správanie sa procesu a rýchlosť spracovania v operačnom systéme. Zámerom mojej práce je priblížiť spávanie sa operačných systémov, pomocou opisu jeho prvkov a algoritmov pri spracovávaní procesov v systéme. Vyžíva teoretické vedomosti z informačných predmetov odborového štúdia na fakulte mechatroniky a poznatky získané zo štúdia aktuálnej odbornej literatúry. &lt;br /&gt;
V prevej kapitole práce sa venujem problematike samostatných procesov a prvkov, ktoré proces obsahuje alebo ho definujú v prostredí operačného systému.&lt;br /&gt;
Druhá kapitola pojednáva o plánovaní procesov a plánovacích algoritmoch v operačných systémoch súvisiacich s riešenou problematikou v súlade s našim zadaním.&lt;br /&gt;
Tretia kapitola sa zaoberá implementáciou aplikácií pod operačným systémom Microsoft Windows a popisuje teóriou vlákien procesu.&lt;br /&gt;
V štvrtej kapitole sa nachádza rozbor programu, vytvoreného pre meranie časov spracovania procesu, ktorý popisuje matematickú operáciu pri nastavení rôznych prioritných tried procesu a priorít vlákien v operačnom systéme.&lt;br /&gt;
V piatej kapitole sa nachádzajú zhrnuté výsledky vykonaných meraní na operačných systémoch spoločnosti Microsoft a ich zhrnutie z hľadiska efektívnosti pre rýchlosť spracovania v systéme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Procesy=&lt;br /&gt;
Operačný systém musí byť schopný vykonávať niekoľko programov súčasne. Aj systémy, u ktorých je užívateľ schopný spustiť iba jeden program, taktiež musia využívať aj svoje vnútorné procesy. Užívateľské alebo systémové bežiace programy sú si veľmi podobné a nazývajú sa procesy (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
==Proces==&lt;br /&gt;
Neformálne je proces definovaný ako bežiaci program vrátane všetkých informácií potrebných pre jeho opätovné spustenie od inštrukcie, kde bol prerušený (Martincová, 1997). Proces sa vykonáva sekvenčne t.j. v určitom čase sa vykonáva iba jedna inštrukcia programu. V operačných systémoch s technológiou zdieľania času sa používateľské programy nazývajú úlohy. Vo väčšine operačných systémoch sa používa najčastejšie termín proces (Plášil, 1992).&lt;br /&gt;
Proces je viac ako len kód programu, ktorý sa vykonáva. Proces zahŕňa aj kontext, ktorý ho definuje. Do kontextu patria hodnoty čítača inštrukcií a stavového registra procesu, ktorý špecifikuje strojový stav počítača vo vzťahu k procesu (Madnick, 1983). V stavovom registri sa nachádza pole výsledkov, posledného výpočtu (nulový, kladný, záporný). Ďalšie dôležité pole, ktoré je typickou súčasťou stavového registra, indikuje aktuálnu prioritu procesu. Kontext zahŕňa aj tzv. zásobník, v ktorom sú uložené dočasné dáta procesu. Patria tam napr. parametre podprogramov, lokálne premenné. Proces obsahuje aj dátový segment, v ktorom sa nachádzajú globálne premenné. Nachádza sa v ňom ukazovateľ zásobníku, obsahujúci aktuálnu adresu nasledovnej položky v zásobníku. Obsahuje taktiež záznam procesu, ktorý definuje stav procesu a obsahuje riadiace informácie procesu (Kvasnica, 2009).&lt;br /&gt;
Program sám o sebe nie je považovaný ako proces. Je považovaný za pasívnu jednotka uložená napríklad na pevnom disku. Zatiaľ čo proces je aktívna jednotka, v ktorej rozhoduje čítač inštrukcií, ktorá inštrukcia sa vykoná (Martincová, 1997). K procesu zahŕňame aj systémové prostriedky, ktoré sú potrebné k jeho vykonaniu a následnému ukončeniu. Jeden program môže pozostávať aj z viacerých procesov, ktoré treba vykonať. Ale každý program má svoju sekvenciu vykonávania procesov . Proces taktiež môže vytvoriť viacej procesov počas svojho vykonávania. Proces vytvorený iným procesom sa nazýva potomok, vytvárajúci proces sa nazýva rodič. Každý potomok taktiež môže vykonávať nové procesy, a tak vzniká strom procesov (Kvasnica, 2009).&lt;br /&gt;
Novo vytvorený proces potrebuje pre svoju činnosť prostriedky systému. Tieto prostriedky môže získať priamo od operačného systému, alebo mu rodičovský proces pridelí podmnožinu svojich prostriedkov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V okamihu, keď proces vytvorí ďalší proces sú dve možnosti jeho ďalšej existencie:&lt;br /&gt;
*Rodičovský proces beží súbežne zo synovským.&lt;br /&gt;
*Rodičovský proces čaká, než sa dokončí niektorý alebo všetky „synovské“ procesy (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
Vzhľadom na obmedzený adresný priestor nastávajú dve varianty:&lt;br /&gt;
*Potomok je duplikátom rodičovského procesu.&lt;br /&gt;
*Potomok má vlastný program, ktorý sa zavedie do pamäte (Cada, 1993). &lt;br /&gt;
&lt;br /&gt;
K ukončeniu potomka procesu dochádza po vykonaní všetkých jeho inštrukcií. Potomok môže vrátiť dáta t.j. výsledok rodičovskému procesu. Všetky prostriedky využívané potomkom sa uvoľnia. Ukončenie procesu môže vyžiadať aj iný proces pomocou systémového volania. Väčšinou táto žiadosť je vyplnená iba rodičovskému procesu, inak by užívateľ mohol zrušiť hoci aký proces. Rodičovský proces musí uchovávať informácie, ktoré získa pri vytvorení potomka, aby rodičovský proces prípadne mohol zrušiť potomka. Rodič môže žiadať o zrušenie potomka z nasledovných dôvodov:&lt;br /&gt;
&lt;br /&gt;
*Potomok, prekročil možnosti systémových zdrojov, ktoré mu boli pridelené.&lt;br /&gt;
*Úloha ktorú vykonáva, naďalej nie je potrebná. &lt;br /&gt;
*Rodičovský proces bol ukončený a operačný systém ukončuje všetkých jeho potomkov (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Pri vykonávaní množiny procesov na jednom procesore pomocou techniky zdieľania času, môžeme hovoriť o paralelno sekvenčnom vykonávaní t.j. striedavé prepínanie medzi procesmi (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
===Stavy procesov===&lt;br /&gt;
&lt;br /&gt;
Stav procesu je premenlivý, mení sa podľa aktuálnej aktivity procesu v počítači. Môže sa nachádzať v jednom z uvedených stavov:&lt;br /&gt;
*Nový – proces, ktorý bol práve vytvorený.&lt;br /&gt;
*Prebiehajúci – inštrukcie programu začali byť vykonávané.&lt;br /&gt;
*Čakajúci – proces čaká na nejakú udalosť, napr. dokončenie výstupnej alebo vstupnej operácie, alebo na príchod udalosti potrebnej pre jeho pokračovanie.&lt;br /&gt;
*Pripravený – proces čaká na pridelenie procesora.&lt;br /&gt;
*Ukončený – proces dokončil svoju činnosť (Kvasnica, 2009).&lt;br /&gt;
&lt;br /&gt;
Názvy stavov sa môžu líšiť v závislosti od operačných systémov. Diagram stavov procesu je uvedený na obrázku č. 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR1.jpg|center|framed|Obrázok 1 Stavy procesov]]&lt;br /&gt;
&lt;br /&gt;
===Udalosť počas  vykonávania  procesu===&lt;br /&gt;
&lt;br /&gt;
Počas behu procesu môžu nastať určité situácie zapríčinené udalosťami vyžadujúce osobitú obsluhu (Plášil, 1992).&lt;br /&gt;
 &lt;br /&gt;
Jedná sa o chovanie procesu pri príjme synchronizačných signálov od operačného systému alebo iných procesov. Činnosť na tieto prijaté signály môže byť štandardná, definovaná vopred v operačnom systéme či užívateľsky definovaná (Martincová, 1997). V druhom prípade je na programátorovi, ako bude reagovať proces po príjme takéhoto riadiaceho signálu.&lt;br /&gt;
Tieto udalosti rozdeľujeme na :&lt;br /&gt;
&lt;br /&gt;
*interné – vznikajú v rámci procesu a zapríčiňujú zmenu stavu procesu:&lt;br /&gt;
**systémové volanie – skok do jadra,&lt;br /&gt;
**chyba – zlá inštrukcia, porušenie oprávnenia k prístupu do pamäte atď.,&lt;br /&gt;
**zlyhanie stránky – výpadok alebo poškodenie stránky pri stránkovaní.&lt;br /&gt;
*externé  - tieto udalosti neriadi proces, sú vonkajšie, väčšinou oznamujú prerušenia, ktoré obsluhuje operačný systém&lt;br /&gt;
**vstup z terminálu (znak),&lt;br /&gt;
**ukončenie diskovej operácie (Kvanica, 2009).&lt;br /&gt;
&lt;br /&gt;
===Riadiaci blok procesu (PCB)===&lt;br /&gt;
&lt;br /&gt;
Každý proces v systéme je reprezentovaný záznamom, ktorý sa nazýva riadiaci blok procesu. Obsahuje veľké množstvo informácií o procese, napr. :&lt;br /&gt;
*identifikačné číslo procesu &lt;br /&gt;
*stav procesu – (nový, prebiehajúci, čakajúci, pripravený, ukončený )&lt;br /&gt;
*hodnota čítača inštrukcií – indikuje adresu nasledujúcej inštrukcie vo vykonávaní procesu&lt;br /&gt;
*CPU registre – podľa architektúry použitého procesora sa mení počet registrov. Obsahuje obsiahle akumulátory, indexové registre, ukazovatele do zásobníkov, univerzálne registre atď.. V prípade prerušenia vykonávania procesu sa aktuálny obsah registra tak ako ukazovatele programu musia uložiť do riadiaceho bloku procesov, aby sa proces mohol korektne spustiť  od inštrukcie, pred ktorou bol prerušený&lt;br /&gt;
*informácie pre plánovanie procesov – priorita procesu, ukazovatele do plánovacích front a pod.&lt;br /&gt;
*informácie pre správu pamäte – hodnoty limitných a bázových registrov, tabuľku stránok a iné&lt;br /&gt;
*účtovacie informácie – informácie o čase pridelenia procesora t.j. spotrebovaný čas procesora, číslo procesu, časové limity pre procesor atď.&lt;br /&gt;
*I/O informácie – zoznam I/O  zariadení alokovaných pre proces, zoznam otvorených súborov a pod (Madnick, 1983).&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
Pri plánovaní procesov bolo zavedené tzv. multiprogramovanie, ktorého cieľom bolo efektívnejšie využívanie procesora pri vykonávaní procesov. Podstata multiprogramovania je v tom, že v pamäti je viac procesov (Martincová, 1997). Zdanlivo to môže vyzerať tak že procesor vykonáva procesy súčasne, ale procesor prepína medzi nimi. Týmto spôsobom sa znižuje potrebný celkový čas na vykonanie jednej úlohy. Multiprogramovanie dovoľuje aj zdieľanie času. Tzv. zdieľanie času je veľmi rýchle prepínanie medzi procesmi vo fronte pripravených procesov, aby bola zabezpečená interaktívna komunikácia medzi programom a užívateľom. Systémy iba s jedným procesorom môžu vždy vykonávať iba jeden proces v určitom okamihu (Plášil, 1992). Zostávajúce programy vo fronte pripravených procesov musia čakať na pridelenia procesora. Úlohou plánovania procesov je rozhodnúť, ktorý z procesov pri prepnutí bude pridelený na procesor (Kvasnica, 2009).&lt;br /&gt;
Prepínanie kontextu medzi dvomi procesmi je schematicky  znázornené na obrázku 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR2.jpg|center|framed|Obrázok 2 Prepínanie kontextu procesov]]&lt;br /&gt;
&lt;br /&gt;
===Fronta===&lt;br /&gt;
&lt;br /&gt;
V okamihu vytvorenia procesu je tento proces zaradený do fronty procesov. Vo fronte sú zaradené všetky procesy systému. Procesy, ktoré sa nachádzajú v operačnej pamäti a čakajú na pridelenie procesora sa zaraďujú do fronty pripravených procesov. Je vytváraný zo zreťazených riadiacich blokov do zoznamu. Pozícia v zozname sa určuje podľa priority procesu, ktorá sa nachádza v riadiacom bloku procesu. Hlavička fronty pripravených procesov obsahuje ukazovatele na riadiace bloky procesov prvého a posledného procesu vo fronte (Kvasnica, 2009). Jednotlivé riadiace bloky procesov obsahujú položku ukazovateľa na riadiaci blok procesu nasledujúceho procesu vo fronte pripravených procesov. Ukážka fronty je znázornená na obrázku č. 3.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR3.jpg|center|framed|Obrázok 3 Ukážka frontu pripravených procesov]]&lt;br /&gt;
&lt;br /&gt;
V systéme sa vytvára viac front procesov. Pri vykonávaní procesu môže nastať prípad, že proces bude musieť čakať na nejakú udalosť potrebnú pre dokončenie procesu. Napr. ukončenie I/O operácie na niektorom zo zdieľaných zariadení napr. disk, optická mechanika. Môže nastať prípad, že určité systémové zariadenie môže byť obsadené, pretože iný proces môže mať také isté požiadavky. V tom prípade sa vytvára fronta čakajúcich procesov pred každým zariadením. Všetky systémové zdieľané zariadenia majú svoju vlastnú frontu (Cada, 1993). &lt;br /&gt;
Novo vzniknutý proces je umiestnený do fronty pripravených procesov a čaká na pridelenie procesora. Po pridelení procesora sa proces môže odoberať jedným z nasledovných spôsobov:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#proces požiada o I/O operáciu a bude umiestnený do fronty príslušného zariadenia.&lt;br /&gt;
#proces vytvorí nový proces a čaká na jeho ukončenie.&lt;br /&gt;
#procesu môže byť odobratý procesor, z dôvodu prerušenia spôsobeného napr. výskytom chyby a je umiestnený do fronty pripravených procesov.&lt;br /&gt;
#Bolo vyčerpané pridelené časové kvantum (Martincová, 1997).&lt;br /&gt;
&lt;br /&gt;
V prvých spomínaných prípadoch sa proces môže prepnúť z kontextu čakajúci do kontextu pripravený, následne je umiestnený do fronty pripravených procesov. Proces pokračuje v tomto cykle kým sa nedokončí. Po ukončení sa odstráni zo všetkých front a jeho riadiaci blok procesu a prostriedky, ktoré využíval sa uvoľnia.&lt;br /&gt;
&lt;br /&gt;
===Prepínanie kontextu===&lt;br /&gt;
Pri pridelení procesora inému procesu sa musí uložiť stav vykonávaného procesu do riadiaceho bloku procesu a zaviesť stav nového procesu . Táto činnosť sa nazýva prepínanie kontextu, je to pomocná činnosť a počas jej vykonávania systém nemôže vykonávať nič iné (Martincová, 1997). Rýchlosť prepínania kontextu je závislá na vybavovacej rýchlosti pamäte a na počte registrov, ktoré musia byť prekopírované. Typická doba na prepínanie kontextu sa pohybuje okolo 1 až 10 µs. Pri pridelení procesora procesu sa mu musí prideliť časové kvantum (možný čas strávený na procesore) a taktiež systémové prostriedky (Kvasnica, 2009).&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6431</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=6431"/>
		<updated>2010-08-02T14:46:08Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]]&lt;br /&gt;
[[Kategória:Bakalárske práce]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Martin Cibulka|Ing. Peter Kvasnica,PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Semetrálna práca|Mechatronika}} &lt;br /&gt;
{{Praca_uvod|1|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme|Procesy|Plánovanie procesov|Plánovanie procesov v OS Windows||||||||}}&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|Cieľom záverečnej práce bolo priblížiť sa správanie operačných systémov opisom jeho prvkov, ako sú procesy, vlákna a algoritmy spracovania procesov v systéme a opísať správanie vybraného operačného systému pri nastaveniach rôznych priorít a prioritných tried procesu pomocou vlastnej aplikácie. Vytvorenej vo vyššom programovacom jazyku C++. Práca je rozdelená do 5 kapitol. Obsahuje 18 obrázkov, 5 tabuľky a 3 prílohy. &lt;br /&gt;
y&lt;br /&gt;
|The aim of final thesis was to clarify the behavior of operating systems by description of their components such as processes, threads and processes processing algorithms in the system and to describe the behavior of the selected operating system with settings for different priorities and the priority classes through the process of custom application. Created in a higher programming language C + +. The work is divided into 5 chapters. It contains 18 pictures, 5 tables and 3 appendices.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Táto práca pojednáva o prioritných triedach procesov a prioritách vlákien operačného systému Microsoft Windows a ich vplyve na správanie sa procesu a rýchlosť spracovania v operačnom systéme. Zámerom mojej práce je priblížiť spávanie sa operačných systémov, pomocou opisu jeho prvkov a algoritmov pri spracovávaní procesov v systéme. Vyžíva teoretické vedomosti z informačných predmetov odborového štúdia na fakulte mechatroniky a poznatky získané zo štúdia aktuálnej odbornej literatúry. &lt;br /&gt;
V prevej kapitole práce sa venujem problematike samostatných procesov a prvkov, ktoré proces obsahuje alebo ho definujú v prostredí operačného systému.&lt;br /&gt;
Druhá kapitola pojednáva o plánovaní procesov a plánovacích algoritmoch v operačných systémoch súvisiacich s riešenou problematikou v súlade s našim zadaním.&lt;br /&gt;
Tretia kapitola sa zaoberá implementáciou aplikácií pod operačným systémom Microsoft Windows a popisuje teóriou vlákien procesu.&lt;br /&gt;
V štvrtej kapitole sa nachádza rozbor programu, vytvoreného pre meranie časov spracovania procesu, ktorý popisuje matematickú operáciu pri nastavení rôznych prioritných tried procesu a priorít vlákien v operačnom systéme.&lt;br /&gt;
V piatej kapitole sa nachádzajú zhrnuté výsledky vykonaných meraní na operačných systémoch spoločnosti Microsoft a ich zhrnutie z hľadiska efektívnosti pre rýchlosť spracovania v systéme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Procesy=&lt;br /&gt;
Operačný systém musí byť schopný vykonávať niekoľko programov súčasne. Aj systémy, u ktorých je užívateľ schopný spustiť iba jeden program, taktiež musia využívať aj svoje vnútorné procesy. Užívateľské alebo systémové bežiace programy sú si veľmi podobné a nazývajú sa procesy.&lt;br /&gt;
&lt;br /&gt;
==Proces==&lt;br /&gt;
Neformálne je proces definovaný ako  bežiaci program vrátane všetkých informácií potrebných pre jeho opätovné spustenie od inštrukcie, kde bol prerušený.  Proces sa vykonáva sekvenčne t.j. v určitom čase sa vykonáva iba jedna inštrukcia programu. V operačných systémoch s technológiou zdieľania času sa používateľské programy nazývajú úlohy. Vo väčšine operačných systémoch sa používa najčastejšie termín proces.&lt;br /&gt;
Proces je viac ako len kód programu, ktorý sa vykonáva.  Proces zahŕňa aj kontext, ktorý ho definuje. Do kontextu patria  hodnoty čítača inštrukcií a stavového registra procesu, ktorý špecifikuje strojový stav počítača vo vzťahu k procesu. V stavovom registri sa nachádza pole výsledkov, posledného výpočtu (nulový, kladný, záporný). Ďalšie dôležité pole, ktoré je typickou súčasťou stavového registra, indikuje aktuálnu prioritu procesu. Kontext zahŕňa aj tzv. zásobník, v ktorom sú uložené dočasné dáta procesu. Patria tam napr. parametre podprogramov, lokálne premenné. Proces obsahuje aj dátový segment, v ktorom sa nachádzajú globálne premenné. Nachádza sa v ňom  ukazovateľ zásobníku, obsahujúci aktuálnu adresu nasledovnej položky v zásobníku Obsahuje  taktiež záznam procesu, ktorý definuje stav procesu a obsahuje riadiace informácie procesu.&lt;br /&gt;
Program sám o sebe nie je považovaný ako proces.  Je považovaný za pasívnu jednotka uložená napríklad na pevnom disku. Zatiaľ čo proces je aktívna jednotka, v ktorej rozhoduje čítač inštrukcií, ktorá inštrukcia sa vykoná.  K procesu zahŕňame aj systémové prostriedky ktoré sú potrebné k jeho vykonania a následnému ukončeniu. Jeden program môže pozostávať aj z viacerých procesov, ktoré treba vykonať.  Ale každý program má svoju sekvenciu vykonávania procesov. Proces taktiež môže vytvoriť viacej procesov počas svojho vykonávania. Proces vytvorený iným procesom sa nazýva potomok, vytvárajúci proces sa nazýva rodič. Každý potomok taktiež môže vykonávať nové procesy, a tak vzniká strom procesov.&lt;br /&gt;
Novo vytvorený proces potrebuje pre svoju činnosť prostriedky systému. Tieto prostriedky  môže získať priamo od operačného systému, alebo mu rodičovský proces pridelí podmnožinu svojich prostriedkov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V okamihu, keď proces vytvorí ďalší proces sú dve možnosti jeho ďalšej existencie:&lt;br /&gt;
*Rodičovský proces beží súbežne zo synovským.&lt;br /&gt;
*Rodičovský proces čaká, než sa dokončí niektorý alebo všetky „synovské“ procesy. &lt;br /&gt;
&lt;br /&gt;
Vzhľadom na obmedzený adresný priestor nastávajú dve varianty:&lt;br /&gt;
*Potomok je duplikátom rodičovského procesu.&lt;br /&gt;
*Potomok má vlastný program, ktorý sa zavedie do pamäte. &lt;br /&gt;
&lt;br /&gt;
K ukončeniu potomka procesu dochádza po vykonaní všetkých jeho inštrukcií. Potomok môže vrátiť dáta t.j. výsledok rodičovskému procesu. Všetky prostriedky využívané potomkom sa uvoľnia. Ukončenie procesu môže vyžiadať aj iný proces pomocou systémového volania. Väčšinou táto žiadosť vyplnená iba rodičovskému procesu, inak by užívateľ mohol zrušiť hoci aký proces. Rodičovský proces musí uchovávať  informácie, ktoré získa pri vytvorení potomka, aby rodičovský proces prípadne mohol  zrušiť potomka. Rodič môže žiadať o zrušenie potomka z nasledovných dôvodov:&lt;br /&gt;
&lt;br /&gt;
*Potomok, prekročil možnosti systémových zdrojov, ktoré mu boli pridelené.&lt;br /&gt;
*Úloha ktorú vykonáva, naďalej nie je potrebná. &lt;br /&gt;
*Rodičovský proces bol ukončený a operačný systém ukončuje všetkých jeho potomkov.&lt;br /&gt;
*Pri vykonávaní množiny procesov na jednom procesore pomocou techniky zdieľania času, môžeme hovoriť o paralelno sekvenčnom vykonávaní t.j. striedavé prepínanie medzi procesmi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Stavy procesov===&lt;br /&gt;
&lt;br /&gt;
Stav procesu je premenlivý, mení sa podľa aktuálnej aktivity procesu v počítači. Môže sa nachádzať v jednom z uvedených stavov:&lt;br /&gt;
*Nový – proces, ktorý bol práve vytvorený&lt;br /&gt;
*Prebiehajúci – inštrukcie programu začali byť vykonávané&lt;br /&gt;
*Čakajúci – proces čaká na nejakú udalosť, napr. dokončenie výstupnej alebo vstupnej operácie, alebo na príchod udalosti potrebnej pre jeho pokračovanie&lt;br /&gt;
*Pripravený – proces čaká na pridelenie procesora&lt;br /&gt;
*Ukončený – proces dokončil svoju činnosť&lt;br /&gt;
&lt;br /&gt;
Názvy stavov sa môžu líšiť v závislosti od operačných systémov. Diagram stavov procesu je uvedený na obrázku 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR1.jpg|center|framed|Obrázok 1 Stavy procesov]]&lt;br /&gt;
&lt;br /&gt;
===Udalosť počas  vykonávania  procesu===&lt;br /&gt;
&lt;br /&gt;
Počas behu procesu môžu nastať  určité situácie zapríčinené udalosťami vyžadujúce osobitú obsluhu. &lt;br /&gt;
Jedná sa o chovanie procesu pri príjme synchronizačných signálov od operačného systému alebo iných procesov. Činnosť na tieto prijaté signály môže byť štandardná, definovaná vopred v operačnom systéme či užívateľsky definovaná. V druhom prípade je na programátorovi, ako bude reagovať proces po príjme takéhoto riadiaceho signálu.&lt;br /&gt;
Tieto udalosti rozdeľujeme na :&lt;br /&gt;
&lt;br /&gt;
*interné – vznikajú v rámci procesu a zapríčiňujú zmenu stavu procesu:&lt;br /&gt;
**systémové volanie – skok do jadra,&lt;br /&gt;
**chyba – zlá inštrukcia, porušenie oprávnenia k prístupu do pamäte atď.,&lt;br /&gt;
**zlyhanie stránky – výpadok alebo poškodenie stránky pri stránkovaní.&lt;br /&gt;
*externé  - tieto udalosti neriadi proces, sú vonkajšie, väčšinou oznamujú prerušenia, ktoré obsluhuje operačný systém&lt;br /&gt;
**vstup z terminálu (znak),&lt;br /&gt;
**ukončenie diskovej operácie.&lt;br /&gt;
&lt;br /&gt;
===Riadiaci blok procesu (PCB)===&lt;br /&gt;
&lt;br /&gt;
Každý proces v systéme je reprezentovaný záznamom, ktorý sa nazýva riadiaci blok procesu. Obsahuje veľké množstvo informácií o procese, napr. :&lt;br /&gt;
*identifikačné číslo procesu &lt;br /&gt;
*stav procesu – (nový, prebiehajúci, čakajúci, pripravený, ukončený )&lt;br /&gt;
*hodnota čítača inštrukcií – indikuje adresu nasledujúcej inštrukcie vo vykonávaní procesu&lt;br /&gt;
*CPU registre – podľa architektúry použitého procesora sa mení počet registrov. Obsahuje obsiahle akumulátory, indexové registre, ukazovatele do zásobníkov, univerzálne registre atď.. V prípade prerušenia vykonávania procesu sa aktuálny obsah registra tak ako ukazovatele programu musia uložiť do riadiaceho bloku procesov, aby sa proces mohol korektne spustiť  od inštrukcie, pred ktorou bol prerušený&lt;br /&gt;
*informácie pre plánovanie procesov – priorita procesu, ukazovatele do plánovacích front a pod.&lt;br /&gt;
*informácie pre správu pamäte – hodnoty limitných a bázových registrov, tabuľku stránok a iné&lt;br /&gt;
*účtovacie informácie – informácie o čase pridelenia procesora t.j. spotrebovaný čas procesora, číslo procesu, časové limity pre procesor atď.&lt;br /&gt;
*I/O informácie – zoznam I/O  zariadení alokovaných pre proces, zoznam otvorených súborov a pod.&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
&lt;br /&gt;
Pri plánovaní procesov bolo zavedené tzv. multiprogramovanie, ktorého cieľom bolo efektívnejšie využívanie procesora pri vykonávaní procesov. Podstata multiprogramovania je v tom, že v pamäti je viac procesov. Zdanlivo to môže vyzerať tak že procesor vykonáva procesy súčasne, ale procesor prepína medzi nimi. Týmto spôsobom sa znižuje potrebný celkový čas na  vykonanie jednej úlohy. Multiprogramovanie dovoľuje aj zdieľanie času. Tzv. Zdieľanie času je veľmi rýchle prepínanie medzi procesmi vo fronte pripravených procesov, aby bola zabezpečená interaktívna komunikácia medzi programom a užívateľom. Systémy iba s jedným procesorom môžu vždy vykonávať iba jeden proces v určitom okamihu. Zostávajúce programy vo fronte pripravených procesov musia čakať na pridelenia procesora. Úlohou plánovania procesov je rozhodnúť,  ktorý z procesov pri prepnutí  bude pridelený na procesor.&lt;br /&gt;
Prepínanie kontextu medzi dvomi procesmi je schematicky  znázornené na obrázku 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR2.jpg|center|framed|Obrázok 2 Prepínanie kontextu procesov]]&lt;br /&gt;
&lt;br /&gt;
===Fronty===&lt;br /&gt;
&lt;br /&gt;
V okamihu vytvorenia procesu je tento proces zradený do fronty procesov. Vo fronte sú zaradené všetky procesy systému. Procesy, ktoré sa nachádzajú v operačnej pamäti a čakajú na pridelenie procesora sa zaraďujú do fronty pripravených procesov. Je vytváraný zo zreťazených riadiacich blokov do zoznamu. Pozícia v zozname sa určuje podľa priority procesu, ktorá sa nachádza v riadiacom bloku procesu. Hlavička fronty pripravených procesov obsahuje ukazovatele na riadiace bloky procesov prvého a posledného procesu vo fronte. Jednotlivé riadiace bloky procesov obsahujú položku ukazovateľa na riadiaci blok procesu nasledujúceho procesu vo fronte pripravených procesov. Ukážka frontu je znázornená na obrázku 3.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:MatesOBR3.jpg|center|framed|Obrázok 3 Ukážka frontu pripravených procesov]]&lt;br /&gt;
&lt;br /&gt;
V systéme sa vytvára viac front procesov. Pri vykonávaní procesu môže nastať prípad, že proces bude musieť čakať na nejakú udalosť potrebnú pre dokončenie procesu. Napr. ukončenie I/O operácie na niektorom zo zdieľaných zariadení napr. disk, optická mechanika. Môže nastať prípad, že určité systémové zariadenie môže byť obsadené, pretože iný proces môže mať také isté požiadavky. V tom prípade sa vytvára front čakajúcich procesov pred každým zariadením. Všetky systémové zdieľané zariadenia majú svoj vlastný front. &lt;br /&gt;
Novo vzniknutý proces je umiestnený do fronty pripravených procesov a čaká na pridelenie procesora. Po pridelení procesora sa proces môže odoberať jedným z nasledovných spôsobov:&lt;br /&gt;
&lt;br /&gt;
#proces požiada o I/O operáciu a bude umiestnený do fronty príslušného zariadenia&lt;br /&gt;
#proces vytvorí nový proces a čaká na jeho ukončenie&lt;br /&gt;
#procesu môže byť odobratý procesor, z dôvodu prerušenia spôsobeného napr. výskytom chyby a je umiestnený do fronty pripravených procesov&lt;br /&gt;
#Bolo vyčerpané pridelené časové kvantum&lt;br /&gt;
&lt;br /&gt;
V prvých spomínaných prípadoch sa proces môže prepnúť z kontextu čakajúci do kontextu pripravený, následne je umiestnený do fronty pripravených procesov. Proces pokračuje v tomto cykle kým sa nedokončí. Po ukončení sa odstráni zo všetkých front a jeho riadiaci blok procesu a prostriedky, ktoré využíval sa uvoľnia.&lt;br /&gt;
&lt;br /&gt;
===Prepínanie kontextu===&lt;br /&gt;
Pri pridelení procesora inému procesu sa musí uložiť stav vykonávaného procesu do riadiaceho bloku procesu a zaviesť stav nového procesu. Táto činnosť sa nazýva prepínanie kontextu, je to pomocná činnosť a počas jej vykonávania systém nemôže vykonávať nič iné. Rýchlosť prepínania kontextu je závislá na vybavovacej rýchlosti pamäte a na počte registrov, ktoré musia byť prekopírované. Typická doba na prepínanie kontextu sa pohybuje okolo 1 až 10 µs. Pri pridelení procesora procesu sa mu musí prideliť časové kvantum (čas na procesore) a taktiež systémové prostriedky.&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me_(Zadanie)&amp;diff=6430</id>
		<title>Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme (Zadanie)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Nastavenie_priority_procesu_a_vplyv_na_jeho_%C4%8Dinnos%C5%A5_v_opera%C4%8Dnom_syst%C3%A9me_(Zadanie)&amp;diff=6430"/>
		<updated>2010-08-02T14:37:55Z</updated>

		<summary type="html">&lt;p&gt;Matesx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Zadanie_BP|Martin Cibulka|Mechatronika|Nastavenie priority procesu a vplyv na jeho činnosť v operačnom systéme&lt;br /&gt;
|# Analýza a opis procesov v operačnom systéme&lt;br /&gt;
# Spôsob nastavenia priority procesu pomocou systémových funkcií&lt;br /&gt;
# Zmapovanie spôsobov nastavenia priority procesu pomocou softvérových nástrojov&lt;br /&gt;
# Tvorba programových aplikácií vo vývojovom prostredí vyššieho programovacieho jazyka&lt;br /&gt;
# Testovanie a overenie zisteného riešenia&lt;br /&gt;
|# Kvasnica, Operačné systémy I, TnUAD, Trenčín 2009.&lt;br /&gt;
# Madnick, Donovan, Operační systémy, SNTL, Praha 1983, kap. 1-6.&lt;br /&gt;
# Plášil, Staudek, Operační systémy, SNTL, Praha 1992, kap. 5.&lt;br /&gt;
# Basch, Princípy operačního systému UNIX, SAS, Praha 1993, kap. 1-3. Preklad Felbád.&lt;br /&gt;
# Hořejš, Brodský, Staudek, Struktúra počítačú a jejich programového vybavení, SNTL, ALFA, 1982. &lt;br /&gt;
# Programovaní ve Windows pomocí MFC, Computer Press, 2000, kap. 17. &lt;br /&gt;
# Microsoft Corporation, Microsoft Windows 2000 server Správa systému, Computer Press, 200, kap. 7,10. Preklad Roubíček.&lt;br /&gt;
|Katedra mechatronických systémov, Fakulta mechatroniky, TnUAD&lt;br /&gt;
|Ing. Peter Kvasnica, PhD.&lt;br /&gt;
|Ing. Peter Kvasnica, PhD.&lt;br /&gt;
|13. 1. 2010&lt;br /&gt;
|doc. Ing. Jozef Tkáč, PhD.|KMS FM TnUAD|prof. doc. Dušan Maga, PhD.&lt;br /&gt;
}}&lt;br /&gt;
[[Kategória:Zadanie BP]]&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5885</id>
		<title>Prehľad inštrukcií procesora M8C</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5885"/>
		<updated>2010-06-25T07:50:49Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Inštrukcie skoku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Inštrukcia procesoru je základný prvok činnosti, ktorú vykonáva procesor v našom prípade procesor M8C. &lt;br /&gt;
V závislosti od výsledku inštrukcie môžu byť nastavované príznakové bity&lt;br /&gt;
registra F:&lt;br /&gt;
*'''CF''' - Carry Flag&lt;br /&gt;
*'''ZF''' - Zero Flag&lt;br /&gt;
&lt;br /&gt;
Inštrukcie procesora môžeme rozdeliť do niekoľkých základných skupín :&lt;br /&gt;
* Aritmetické inštrukcie&lt;br /&gt;
* Logické inštrukcie&lt;br /&gt;
* Inštrukcie presunu dát&lt;br /&gt;
* Inštrukcie skoku&lt;br /&gt;
* Inštrukcie rotácie&lt;br /&gt;
* Inštrukcie práce so zásobníkom&lt;br /&gt;
* Ďalšie inštrukcie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aritmetické inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*''' ADD''' &lt;br /&gt;
 Syntax: ADD  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inštrukcia sčíta argumenty a výsledok uloží do argumentu1, ak sú väčšie čísla ako 8 bitov inštrukcia sa reťazí.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''ADC'''&lt;br /&gt;
 Syntax: ADC  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia sčíta argumenty inštrukcie a pridá príznakový bit Carry (CF). Prevedie sa táto operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; + &amp;lt;argument2&amp;gt; + CF. &lt;br /&gt;
&lt;br /&gt;
* '''SUB'''&lt;br /&gt;
 Syntax: SUB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADD ale argumenty sa odčitujú.&lt;br /&gt;
&lt;br /&gt;
* '''SBB'''&lt;br /&gt;
 Syntax: SBB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADC, ale taktiež sa argumenty odčitujú, takže sa prevedie operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; - &amp;lt;argument2&amp;gt; - Borrow&lt;br /&gt;
&lt;br /&gt;
* '''INC'''&lt;br /&gt;
 Syntax: INC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia zvýši 8 bitové číslo o jednotku (+1). Táto funkcia sa využíva, pretože je rýchlejšia ako ADD &amp;lt;argument&amp;gt;, 1.&lt;br /&gt;
&lt;br /&gt;
* '''DEC'''&lt;br /&gt;
 Syntax: DEC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia je rovnaká ako INC, ale ide o zníženie čísla o jednotka (-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pre INC a DEC inštrukcie sa hodnoty príznakov CF, ZF sa nastavujú pri pretečení resp. pri&lt;br /&gt;
dosiahnutí nuly argumentu&lt;br /&gt;
Používajú sa hlavne pri inkrementovaní počítadiel cyklov.&lt;br /&gt;
&lt;br /&gt;
===Logické inštrukcie===&lt;br /&gt;
&lt;br /&gt;
* '''AND'''&lt;br /&gt;
 Syntax: AND  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické násobenie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; AND &amp;lt;argument2&amp;gt;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie AND&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa k nulovaniu vybraných bitov. Napr. ak chcem vynulovať tretí bit akumulátora A, tak potom&lt;br /&gt;
 AND A, CPL 8&lt;br /&gt;
&lt;br /&gt;
* '''OR'''&lt;br /&gt;
 Syntax: OR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické sčítanie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; OR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie OR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa na nastavenie požadovaných bitov, napr. chcem nastaviť tretí bit akumulátora A, potom &lt;br /&gt;
 OR A, 3&lt;br /&gt;
&lt;br /&gt;
* '''XOR'''&lt;br /&gt;
 Syntax: XOR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické funkciu, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; XOR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie XOR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Pokiaľ dáme Xoru rovnaké číslo tak vždy vyjde 0. Je vhodný pre nulovanie. Napr. ak potrebujem dať do akumulátora A nulu potom &lt;br /&gt;
 XOR A,A&lt;br /&gt;
&lt;br /&gt;
* '''TST'''&lt;br /&gt;
 Synatax: TST &amp;lt;argument1&amp;gt;, &amp;lt;argumen2&amp;gt;&lt;br /&gt;
Inštrukcia  vykoná logický súčin operandov, podľa výsledku operácie nastaví príznakový bit ZF, ale výsledok neuloží&lt;br /&gt;
 TST A,%01000000      ;ak bit 6 je 1 potom ZF =0&lt;br /&gt;
 TST A, %01111000     ;ak bity 6,5,4 alebo 3 sú 0 potom ZF=1&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
* '''CPL'''&lt;br /&gt;
 Syntax: CPL &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia neguje obsah argumentu, t.j. vymení všetky 0 za 1 a naopak. Pri Hodnote 0x00 nastavuje príznak ZF.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,%10010110 &lt;br /&gt;
 CPL A           ;A:=%01101001&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie presunu dát===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''MOV'''&lt;br /&gt;
 Syntax: MOV &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Táto inštrukcia jednoducho presunie argument2 do argument1&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,k&lt;br /&gt;
 MOV X,expr&lt;br /&gt;
&lt;br /&gt;
Inštrukcia nastavuje príznačný bit ZF, ak je hodnota cieľu nolová 0x00.&lt;br /&gt;
&lt;br /&gt;
 MOV A, 0x01    ;hodnota akumulátora je 0x01, potom ZF=0.  &lt;br /&gt;
 MOV A, 0x00    ;hodnota akumulátora je 0x00, teda nulová. Potom ZF=1.&lt;br /&gt;
&lt;br /&gt;
* '''SWAP'''&lt;br /&gt;
 Syntax: SWAP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vymieňa obsah zdroja s cieľa. Výhodné pri dočasnom odložení registrov A,X do pamäte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''MVI'''&lt;br /&gt;
 Syntax: MVI &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia načíta 8-bitovú konštantu do registra pomocou smerníka.Smerník je inkremenovaný po prevedení operácie.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV [table],1		&lt;br /&gt;
 MOV [table+1],2 	&lt;br /&gt;
 MOV [ptr], table 	&lt;br /&gt;
 MVI A,[ptr] 		&lt;br /&gt;
 MVI A,[ptr]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie skoku===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''JMP''' &lt;br /&gt;
 Syntax: JMP &amp;lt;návetie&amp;gt;&lt;br /&gt;
Inštrukcia nepodmieneného skoku. Dlžka inštrukcie je 2 byty. Používa 12 bitovú adresu, kód inštrukcie sa nachádza v prvých 4 bitoch.&lt;br /&gt;
Príklad:&lt;br /&gt;
  MOV A, 4&lt;br /&gt;
 JMP návestie	; skok na návestie &lt;br /&gt;
&lt;br /&gt;
* '''LJMP'''&lt;br /&gt;
 Syntax: LJMP &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia absolútneho skoku, používa sa 16 bitová adresa. Táto inštrukcia zabezpečí. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:LJMP.jpg|center|framed|Obr 1.Skok na adresu 20h]]&lt;br /&gt;
&lt;br /&gt;
Keďže inštrukcie sa vykonávajú postupne, po vykonaní inštrukcie na adrese 20h pokračuje vykonávaním inštrukcie na adrese 21h, potom 22h atď.&lt;br /&gt;
&lt;br /&gt;
Najpoužívanejšie je JMP, pri chybe kompilátora sa inštrukcia zmení na LJMP&lt;br /&gt;
&lt;br /&gt;
* '''Jx'''&lt;br /&gt;
 Syntax: Jx &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcie podmieneného skoku sa navzájom odlišujú rozhodovacou podmienkov, ktorá riadi prevedenie skoku. Po vyhodnotení podmienky skoku sa program bude vykonávať ďalej alebo sa vykonávanie programu presunie na iné miesto. Rozhodujúcou podmienkou sú stavy príznačných bitov.&lt;br /&gt;
# '''JC''' &amp;lt;návestie&amp;gt; 	; skok na návestie ak CF =1&lt;br /&gt;
# '''JNC''' &amp;lt;návestie&amp;gt;	; skok na návestie ak CF=0&lt;br /&gt;
# '''JZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=1&lt;br /&gt;
# '''JNZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''CMP'''&lt;br /&gt;
 Syntax: CMP &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Porovná argumenty, ale neuloží výsledok. Podľa zmeny príznačných bitov CF a ZF sa určuje, aký z argumentov&lt;br /&gt;
je &amp;gt;, &amp;lt;, =, &amp;gt;=, &amp;lt;= .&lt;br /&gt;
&lt;br /&gt;
 ZF=1 ak A==B&lt;br /&gt;
 ZF=0 ak A&amp;lt;&amp;gt;B&lt;br /&gt;
 CF=1 ak A-B&amp;lt;0 ,A&amp;lt;B&lt;br /&gt;
 CF=0 ak A-B&amp;gt;=0 ,A&amp;gt;=B&lt;br /&gt;
&lt;br /&gt;
Príklady podmienených skokov:&lt;br /&gt;
&lt;br /&gt;
 CMP A,4       ;A==4&lt;br /&gt;
 JZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;&amp;gt;4 &lt;br /&gt;
 JNZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;4 &lt;br /&gt;
 JC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;gt;=4 &lt;br /&gt;
 JNC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;=4  &lt;br /&gt;
 JZ navestie&lt;br /&gt;
 JC navestie&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* '''CALL'''&lt;br /&gt;
 Syntax: CALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia zavolá pod pogram. Volanie podprogramu v rozsahu 2 byty, používa sa 12-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''LCALL'''&lt;br /&gt;
 Syntax: LCALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Je podobná inštrukcii CALL, používa sa 16-bitová adresa a rozsah je 3 byty.&lt;br /&gt;
&lt;br /&gt;
Inštrukcie CALL a LCALL odkladajú pri volaní do zásobníka návratovú adresu (byte adrH, adrL)&lt;br /&gt;
&lt;br /&gt;
* '''RET''' &lt;br /&gt;
 Syntax: RET &amp;lt;argument&amp;gt; (nemusí byť)&lt;br /&gt;
Inštrukcia zabezpečuje návrat z posledného skoku, za posledný CALL čím sa dostaneme na miesto v odkiaľ bol volaný podprogram, čím sa pokračuje v ďalšom vykonávaní programu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RET.jpg|center|framed|Obr 2. Skok s podprogramu]]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie rotácie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''RRC'''&lt;br /&gt;
 Syntax: RRC &amp;lt;argument&amp;gt;,&amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doprava o n miest. Pri každom posune uloží do&lt;br /&gt;
siedmeho bitu obsah nultého bitu a do príznačného bitu Carry sa uloží nultý bit.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RRC.jpg|center|framed|Obr 3. Rotácia do prava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 10100010 –-&amp;gt; 11010001&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''RLC'''&lt;br /&gt;
 Syntax: RLC &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doľava o n miest. Pri každom posune uloží do nultého bitu obsah siedmeho bitu. Siedmy bit sa pri každom posune ukladá do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RLC.jpg|center|framed|Obr 4. Rotácia do ľava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 10001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 00100010 –-&amp;gt; 01000101&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''&lt;br /&gt;
 Syntax:ASR &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doprava. Do siedmeho bitu uloží siedmi bit.  A posunie bity doprava .&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASR.jpg|center|framed|Obr 5. Aritmetické posunutie do prava]]&lt;br /&gt;
&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 10100011 –-&amp;gt; 11010001 &lt;br /&gt;
                      C=1&lt;br /&gt;
&lt;br /&gt;
* '''ASL'''&lt;br /&gt;
 Syntax:ASL &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doľava. Do spodného bitu uloží nulu. Ukladáa najvyšší bit t.j. siedmi, do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASL.jpg|center|framed|Obr 6. Aritmetické posunutie doľava]]&lt;br /&gt;
 00001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie práce so zásobníkom===&lt;br /&gt;
&lt;br /&gt;
* '''PUSH'''&lt;br /&gt;
 Syntax: PUSH &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vloží hodnoty registra na miesto dočasného odloženia hodnôt, ktoré nazývame zásobník.&lt;br /&gt;
Príklad:&lt;br /&gt;
 PUSH A ;do vrcholu zásobníka uložia dáta z akumulátora A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''POP'''&lt;br /&gt;
 Syntax: POP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vráti hodnoty zo zásobníka do registra.&lt;br /&gt;
Príklad:&lt;br /&gt;
 POP A – z vrcholu zásobníka sú dáta presunuté späť do akumulátora A&lt;br /&gt;
&lt;br /&gt;
===Ďalšie inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
* '''ROMX'''&lt;br /&gt;
Kopíruje dáta z pamäťe ROM do zásobníka.&lt;br /&gt;
* '''HALT'''&lt;br /&gt;
Uvedie procesor do stavu halt. Čo má za následok uvoľnenie zberníc a prerušenie behu program.&lt;br /&gt;
* '''INDEX'''&lt;br /&gt;
Načitanie hodnoty s tabuľky hodnôt v pamäti ROM pomocou indexu akumulátora.&lt;br /&gt;
* '''SSC'''&lt;br /&gt;
Volanie špeciálnych subrutín z pamäte ROM.&lt;br /&gt;
* '''NOT'''&lt;br /&gt;
Prázdne 4 hodinové cykly&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Odkazy a literatúra===&lt;br /&gt;
# http://egr.spu.edu/bolding/EE3280/PSoC/05-M8C-Instructions.ppt&lt;br /&gt;
# http://www.kemt.fei.tuke.sk/Predmety/KEMT411_ESM/_web/wwwfiles/kapitola%2004.htm&lt;br /&gt;
# http://mikroprocesory.sk/8051_instrukcny_subor_sk&lt;br /&gt;
# http://www.spseke.sk/tutor/prednasky/I8051b.htm&lt;br /&gt;
# http://ap.urpi.fei.stuba.sk/ap/texty/assembler.pdf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5876</id>
		<title>Prehľad inštrukcií procesora M8C</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5876"/>
		<updated>2010-06-25T07:26:29Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Logické inštrukcie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Inštrukcia procesoru je základný prvok činnosti, ktorú vykonáva procesor v našom prípade procesor M8C. &lt;br /&gt;
V závislosti od výsledku inštrukcie môžu byť nastavované príznakové bity&lt;br /&gt;
registra F:&lt;br /&gt;
*'''CF''' - Carry Flag&lt;br /&gt;
*'''ZF''' - Zero Flag&lt;br /&gt;
&lt;br /&gt;
Inštrukcie procesora môžeme rozdeliť do niekoľkých základných skupín :&lt;br /&gt;
* Aritmetické inštrukcie&lt;br /&gt;
* Logické inštrukcie&lt;br /&gt;
* Inštrukcie presunu dát&lt;br /&gt;
* Inštrukcie skoku&lt;br /&gt;
* Inštrukcie rotácie&lt;br /&gt;
* Inštrukcie práce so zásobníkom&lt;br /&gt;
* Ďalšie inštrukcie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aritmetické inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*''' ADD''' &lt;br /&gt;
 Syntax: ADD  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inštrukcia sčíta argumenty a výsledok uloží do argumentu1, ak sú väčšie čísla ako 8 bitov inštrukcia sa reťazí.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''ADC'''&lt;br /&gt;
 Syntax: ADC  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia sčíta argumenty inštrukcie a pridá príznakový bit Carry (CF). Prevedie sa táto operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; + &amp;lt;argument2&amp;gt; + CF. &lt;br /&gt;
&lt;br /&gt;
* '''SUB'''&lt;br /&gt;
 Syntax: SUB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADD ale argumenty sa odčitujú.&lt;br /&gt;
&lt;br /&gt;
* '''SBB'''&lt;br /&gt;
 Syntax: SBB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADC, ale taktiež sa argumenty odčitujú, takže sa prevedie operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; - &amp;lt;argument2&amp;gt; - Borrow&lt;br /&gt;
&lt;br /&gt;
* '''INC'''&lt;br /&gt;
 Syntax: INC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia zvýši 8 bitové číslo o jednotku (+1). Táto funkcia sa využíva, pretože je rýchlejšia ako ADD &amp;lt;argument&amp;gt;, 1.&lt;br /&gt;
&lt;br /&gt;
* '''DEC'''&lt;br /&gt;
 Syntax: DEC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia je rovnaká ako INC, ale ide o zníženie čísla o jednotka (-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pre INC a DEC inštrukcie sa hodnoty príznakov CF, ZF sa nastavujú pri pretečení resp. pri&lt;br /&gt;
dosiahnutí nuly argumentu&lt;br /&gt;
Používajú sa hlavne pri inkrementovaní počítadiel cyklov.&lt;br /&gt;
&lt;br /&gt;
===Logické inštrukcie===&lt;br /&gt;
&lt;br /&gt;
* '''AND'''&lt;br /&gt;
 Syntax: AND  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické násobenie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; AND &amp;lt;argument2&amp;gt;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie AND&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa k nulovaniu vybraných bitov. Napr. ak chcem vynulovať tretí bit akumulátora A, tak potom&lt;br /&gt;
 AND A, CPL 8&lt;br /&gt;
&lt;br /&gt;
* '''OR'''&lt;br /&gt;
 Syntax: OR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické sčítanie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; OR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie OR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa na nastavenie požadovaných bitov, napr. chcem nastaviť tretí bit akumulátora A, potom &lt;br /&gt;
 OR A, 3&lt;br /&gt;
&lt;br /&gt;
* '''XOR'''&lt;br /&gt;
 Syntax: XOR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické funkciu, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; XOR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie XOR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Pokiaľ dáme Xoru rovnaké číslo tak vždy vyjde 0. Je vhodný pre nulovanie. Napr. ak potrebujem dať do akumulátora A nulu potom &lt;br /&gt;
 XOR A,A&lt;br /&gt;
&lt;br /&gt;
* '''TST'''&lt;br /&gt;
 Synatax: TST &amp;lt;argument1&amp;gt;, &amp;lt;argumen2&amp;gt;&lt;br /&gt;
Inštrukcia  vykoná logický súčin operandov, podľa výsledku operácie nastaví príznakový bit ZF, ale výsledok neuloží&lt;br /&gt;
 TST A,%01000000      ;ak bit 6 je 1 potom ZF =0&lt;br /&gt;
 TST A, %01111000     ;ak bity 6,5,4 alebo 3 sú 0 potom ZF=1&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
* '''CPL'''&lt;br /&gt;
 Syntax: CPL &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia neguje obsah argumentu, t.j. vymení všetky 0 za 1 a naopak. Pri Hodnote 0x00 nastavuje príznak ZF.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,%10010110 &lt;br /&gt;
 CPL A           ;A:=%01101001&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie presunu dát===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''MOV'''&lt;br /&gt;
 Syntax: MOV &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Táto inštrukcia jednoducho presunie argument2 do argument1&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,k&lt;br /&gt;
 MOV X,expr&lt;br /&gt;
&lt;br /&gt;
Inštrukcia nastavuje príznačný bit ZF, ak je hodnota cieľu nolová 0x00.&lt;br /&gt;
&lt;br /&gt;
 MOV A, 0x01    ;hodnota akumulátora je 0x01, potom ZF=0.  &lt;br /&gt;
 MOV A, 0x00    ;hodnota akumulátora je 0x00, teda nulová. Potom ZF=1.&lt;br /&gt;
&lt;br /&gt;
* '''SWAP'''&lt;br /&gt;
 Syntax: SWAP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vymieňa obsah zdroja s cieľa. Výhodné pri dočasnom odložení registrov A,X do pamäte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''MVI'''&lt;br /&gt;
 Syntax: MVI &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia načíta 8-bitovú konštantu do registra pomocou smerníka.Smerník je inkremenovaný po prevedení operácie.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV [table],1		&lt;br /&gt;
 MOV [table+1],2 	&lt;br /&gt;
 MOV [ptr], table 	&lt;br /&gt;
 MVI A,[ptr] 		&lt;br /&gt;
 MVI A,[ptr]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie skoku===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''JMP''' &lt;br /&gt;
 Syntax: JMP &amp;lt;návetie&amp;gt;&lt;br /&gt;
Inštrukcia nepodmieneného skoku. Dlžka inštrukcie je 2 byty. Používa 12 bitovú adresu, kód inštrukcie sa nachádza v prvých 4 bitoch.&lt;br /&gt;
Príklad:&lt;br /&gt;
  MOV A, 4&lt;br /&gt;
 JMP návestie	; skok na návestie &lt;br /&gt;
&lt;br /&gt;
* '''LJMP'''&lt;br /&gt;
 Syntax: LJMP &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia absolútneho skoku, používa sa 16 bitová adresa. Táto inštrukcia zabezpečí. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:LJMP.jpg|center|framed|Obr 1.Skok na adresu 20h]]&lt;br /&gt;
&lt;br /&gt;
Keďže inštrukcie sa vykonávajú postupne, po vykonaní inštrukcie na adrese 20h pokračuje vykonávaním inštrukcie na adrese 21h, potom 22h atď.&lt;br /&gt;
&lt;br /&gt;
Najpoužívanejšie je JMP, pri chybe kompilátora sa inštrukcia zmení na LJMP&lt;br /&gt;
&lt;br /&gt;
* '''Jx'''&lt;br /&gt;
 Syntax: Jx &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcie podmieneného skoku sa navzájom odlišujú rozhodovacou podmienkov, ktorá riadi prevedenie skoku. Po vyhodnotení podmienky skoku sa program bude vykonávať ďalej alebo sa vykonávanie programu presunie na iné miesto. Rozhodujúcou podmienkou sú stavy príznačných bitov.&lt;br /&gt;
# '''JC''' &amp;lt;návestie&amp;gt; 	; skok na návestie ak CF =1&lt;br /&gt;
# '''JNC''' &amp;lt;návestie&amp;gt;	; skok na návestie ak CF=0&lt;br /&gt;
# '''JZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=1&lt;br /&gt;
# '''JNZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=0&lt;br /&gt;
&lt;br /&gt;
* CMP&lt;br /&gt;
 Syntax: CMP &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Porovná argumenty, ale neuloží výsledok. Podľa zmeny príznačných bitov CF a ZF sa určuje, aký z argumentov&lt;br /&gt;
je &amp;gt;, &amp;lt;, =, &amp;gt;=, &amp;lt;=.&lt;br /&gt;
&lt;br /&gt;
 ZF=1 ak A == B &lt;br /&gt;
 ZF=0 ak A&amp;lt;&amp;gt;B&lt;br /&gt;
 CF=1 ak A-B&amp;lt;0 (A&amp;lt;B)&lt;br /&gt;
 CF=0 ak A-B&amp;gt;=0 (A&amp;gt;=B) &lt;br /&gt;
&lt;br /&gt;
Príklady podmienených skokov:&lt;br /&gt;
 CMP A,4       ;A==4&lt;br /&gt;
 JZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;&amp;gt;4 &lt;br /&gt;
 JNZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;4 &lt;br /&gt;
 JC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;gt;=4 &lt;br /&gt;
 JNC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;=4  &lt;br /&gt;
 JZ navestie&lt;br /&gt;
 JC navestie&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* '''CALL'''&lt;br /&gt;
 Syntax: CALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia zavolá podpogram. Volanie podprogramu v rozsahu 2 byty, používa sa 12-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''LCALL'''&lt;br /&gt;
Je podobná inštrukcii CALL, používa sa 16-bitová adresa a rozsah je 3 byty.&lt;br /&gt;
&lt;br /&gt;
Inštrukcie CALL a LCALL odkladajú pri volaní do zásobníka návratovú adresu (byte adrH, adrL)&lt;br /&gt;
&lt;br /&gt;
* '''RET''' &lt;br /&gt;
 Syntax: RET &amp;lt;argument&amp;gt; (nemusí byť)&lt;br /&gt;
Inštrukcia zabezpečuje návrat z posledného skoku, za posledný CALL čím sa dostaneme na miesto v odkiaľ bol volaný podprogram, čím sa pokračuje v ďalšom vykonávaní programu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RET.jpg|center|framed|Obr 2. Skok s podprogramu]]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie rotácie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''RRC'''&lt;br /&gt;
 Syntax: RRC &amp;lt;argument&amp;gt;,&amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doprava o n miest. Pri každom posune uloží do&lt;br /&gt;
siedmeho bitu obsah nultého bitu a do príznačného bitu Carry sa uloží nultý bit.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RRC.jpg|center|framed|Obr 3. Rotácia do prava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 10100010 –-&amp;gt; 11010001&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''RLC'''&lt;br /&gt;
 Syntax: RLC &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doľava o n miest. Pri každom posune uloží do nultého bitu obsah siedmeho bitu. Siedmy bit sa pri každom posune ukladá do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RLC.jpg|center|framed|Obr 4. Rotácia do ľava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 10001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 00100010 –-&amp;gt; 01000101&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''&lt;br /&gt;
 Syntax:ASR &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doprava. Do siedmeho bitu uloží siedmi bit.  A posunie bity doprava .&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASR.jpg|center|framed|Obr 5. Aritmetické posunutie do prava]]&lt;br /&gt;
&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 10100011 –-&amp;gt; 11010001 &lt;br /&gt;
                      C=1&lt;br /&gt;
&lt;br /&gt;
* '''ASL'''&lt;br /&gt;
 Syntax:ASL &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doľava. Do spodného bitu uloží nulu. Ukladáa najvyšší bit t.j. siedmi, do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASL.jpg|center|framed|Obr 6. Aritmetické posunutie doľava]]&lt;br /&gt;
 00001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie práce so zásobníkom===&lt;br /&gt;
&lt;br /&gt;
* '''PUSH'''&lt;br /&gt;
 Syntax: PUSH &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vloží hodnoty registra na miesto dočasného odloženia hodnôt, ktoré nazývame zásobník.&lt;br /&gt;
Príklad:&lt;br /&gt;
 PUSH A ;do vrcholu zásobníka uložia dáta z akumulátora A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''POP'''&lt;br /&gt;
 Syntax: POP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vráti hodnoty zo zásobníka do registra.&lt;br /&gt;
Príklad:&lt;br /&gt;
 POP A – z vrcholu zásobníka sú dáta presunuté späť do akumulátora A&lt;br /&gt;
&lt;br /&gt;
===Ďalšie inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
* '''ROMX'''&lt;br /&gt;
Kopíruje dáta z pamäťe ROM do zásobníka.&lt;br /&gt;
* '''HALT'''&lt;br /&gt;
Uvedie procesor do stavu halt. Čo má za následok uvoľnenie zberníc a prerušenie behu program.&lt;br /&gt;
* '''INDEX'''&lt;br /&gt;
Načitanie hodnoty s tabuľky hodnôt v pamäti ROM pomocou indexu akumulátora.&lt;br /&gt;
* '''SSC'''&lt;br /&gt;
Volanie špeciálnych subrutín z pamäte ROM.&lt;br /&gt;
* '''NOT'''&lt;br /&gt;
Prázdne 4 hodinové cykly&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Odkazy a literatúra===&lt;br /&gt;
# http://egr.spu.edu/bolding/EE3280/PSoC/05-M8C-Instructions.ppt&lt;br /&gt;
# http://www.kemt.fei.tuke.sk/Predmety/KEMT411_ESM/_web/wwwfiles/kapitola%2004.htm&lt;br /&gt;
# http://mikroprocesory.sk/8051_instrukcny_subor_sk&lt;br /&gt;
# http://www.spseke.sk/tutor/prednasky/I8051b.htm&lt;br /&gt;
# http://ap.urpi.fei.stuba.sk/ap/texty/assembler.pdf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5875</id>
		<title>Prehľad inštrukcií procesora M8C</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5875"/>
		<updated>2010-06-25T07:25:12Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Aritmetické inštrukcie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Inštrukcia procesoru je základný prvok činnosti, ktorú vykonáva procesor v našom prípade procesor M8C. &lt;br /&gt;
V závislosti od výsledku inštrukcie môžu byť nastavované príznakové bity&lt;br /&gt;
registra F:&lt;br /&gt;
*'''CF''' - Carry Flag&lt;br /&gt;
*'''ZF''' - Zero Flag&lt;br /&gt;
&lt;br /&gt;
Inštrukcie procesora môžeme rozdeliť do niekoľkých základných skupín :&lt;br /&gt;
* Aritmetické inštrukcie&lt;br /&gt;
* Logické inštrukcie&lt;br /&gt;
* Inštrukcie presunu dát&lt;br /&gt;
* Inštrukcie skoku&lt;br /&gt;
* Inštrukcie rotácie&lt;br /&gt;
* Inštrukcie práce so zásobníkom&lt;br /&gt;
* Ďalšie inštrukcie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aritmetické inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*''' ADD''' &lt;br /&gt;
 Syntax: ADD  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inštrukcia sčíta argumenty a výsledok uloží do argumentu1, ak sú väčšie čísla ako 8 bitov inštrukcia sa reťazí.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''ADC'''&lt;br /&gt;
 Syntax: ADC  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia sčíta argumenty inštrukcie a pridá príznakový bit Carry (CF). Prevedie sa táto operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; + &amp;lt;argument2&amp;gt; + CF. &lt;br /&gt;
&lt;br /&gt;
* '''SUB'''&lt;br /&gt;
 Syntax: SUB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADD ale argumenty sa odčitujú.&lt;br /&gt;
&lt;br /&gt;
* '''SBB'''&lt;br /&gt;
 Syntax: SBB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADC, ale taktiež sa argumenty odčitujú, takže sa prevedie operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; - &amp;lt;argument2&amp;gt; - Borrow&lt;br /&gt;
&lt;br /&gt;
* '''INC'''&lt;br /&gt;
 Syntax: INC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia zvýši 8 bitové číslo o jednotku (+1). Táto funkcia sa využíva, pretože je rýchlejšia ako ADD &amp;lt;argument&amp;gt;, 1.&lt;br /&gt;
&lt;br /&gt;
* '''DEC'''&lt;br /&gt;
 Syntax: DEC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia je rovnaká ako INC, ale ide o zníženie čísla o jednotka (-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pre INC a DEC inštrukcie sa hodnoty príznakov CF, ZF sa nastavujú pri pretečení resp. pri&lt;br /&gt;
dosiahnutí nuly argumentu&lt;br /&gt;
Používajú sa hlavne pri inkrementovaní počítadiel cyklov.&lt;br /&gt;
&lt;br /&gt;
===Logické inštrukcie===&lt;br /&gt;
&lt;br /&gt;
* '''AND'''&lt;br /&gt;
 Syntax: AND  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické násobenie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; AND &amp;lt;argument2&amp;gt;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie AND&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa k nulovaniu vybraných bitov. Napr. ak chcem vynulovať tretí bit akumulátora A, tak potom&lt;br /&gt;
 AND A, CPL 8&lt;br /&gt;
&lt;br /&gt;
* '''OR'''&lt;br /&gt;
 Syntax: OR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické sšítanie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; OR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie OR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa na nastavenie požadovaných bitov, napr. chcem nastaviť tretí bit akumulátora A, potom &lt;br /&gt;
 OR A, 3&lt;br /&gt;
&lt;br /&gt;
* '''XOR'''&lt;br /&gt;
 Syntax: XOR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické funkciu, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; XOR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie XOR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Pokiaľ dáme Xoru rovnaké číslo tak vždy vyjde 0. Je vhodný pre nulovanie. Napr. ak potrebujem dať do akumulátora A nulu potom &lt;br /&gt;
 XOR A,A&lt;br /&gt;
&lt;br /&gt;
* '''TST'''&lt;br /&gt;
 Synatax: TST &amp;lt;argument1&amp;gt;, &amp;lt;argumen2&amp;gt;&lt;br /&gt;
Inštrukcia  vykoná logický súčin operandov, podľa výsledku operácie nastaví príznakový bit ZF, ale výsledok neuloží&lt;br /&gt;
 TST A,%01000000      ;ak bit 6 je 1 potom ZF =0&lt;br /&gt;
 TST A, %01111000     ;ak bity 6,5,4 alebo 3 sú 0 potom ZF=1&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
* '''CPL'''&lt;br /&gt;
 Syntax: CPL &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia neguje obsah argumentu, t.j. vymení všetky 0 za 1 a naopak. Pri Hodnote 0x00 nastavuje príznak ZF.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,%10010110 &lt;br /&gt;
 CPL A           ;A:=01101001b&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie presunu dát===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''MOV'''&lt;br /&gt;
 Syntax: MOV &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Táto inštrukcia jednoducho presunie argument2 do argument1&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,k&lt;br /&gt;
 MOV X,expr&lt;br /&gt;
&lt;br /&gt;
Inštrukcia nastavuje príznačný bit ZF, ak je hodnota cieľu nolová 0x00.&lt;br /&gt;
&lt;br /&gt;
 MOV A, 0x01    ;hodnota akumulátora je 0x01, potom ZF=0.  &lt;br /&gt;
 MOV A, 0x00    ;hodnota akumulátora je 0x00, teda nulová. Potom ZF=1.&lt;br /&gt;
&lt;br /&gt;
* '''SWAP'''&lt;br /&gt;
 Syntax: SWAP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vymieňa obsah zdroja s cieľa. Výhodné pri dočasnom odložení registrov A,X do pamäte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''MVI'''&lt;br /&gt;
 Syntax: MVI &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia načíta 8-bitovú konštantu do registra pomocou smerníka.Smerník je inkremenovaný po prevedení operácie.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV [table],1		&lt;br /&gt;
 MOV [table+1],2 	&lt;br /&gt;
 MOV [ptr], table 	&lt;br /&gt;
 MVI A,[ptr] 		&lt;br /&gt;
 MVI A,[ptr]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie skoku===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''JMP''' &lt;br /&gt;
 Syntax: JMP &amp;lt;návetie&amp;gt;&lt;br /&gt;
Inštrukcia nepodmieneného skoku. Dlžka inštrukcie je 2 byty. Používa 12 bitovú adresu, kód inštrukcie sa nachádza v prvých 4 bitoch.&lt;br /&gt;
Príklad:&lt;br /&gt;
  MOV A, 4&lt;br /&gt;
 JMP návestie	; skok na návestie &lt;br /&gt;
&lt;br /&gt;
* '''LJMP'''&lt;br /&gt;
 Syntax: LJMP &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia absolútneho skoku, používa sa 16 bitová adresa. Táto inštrukcia zabezpečí. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:LJMP.jpg|center|framed|Obr 1.Skok na adresu 20h]]&lt;br /&gt;
&lt;br /&gt;
Keďže inštrukcie sa vykonávajú postupne, po vykonaní inštrukcie na adrese 20h pokračuje vykonávaním inštrukcie na adrese 21h, potom 22h atď.&lt;br /&gt;
&lt;br /&gt;
Najpoužívanejšie je JMP, pri chybe kompilátora sa inštrukcia zmení na LJMP&lt;br /&gt;
&lt;br /&gt;
* '''Jx'''&lt;br /&gt;
 Syntax: Jx &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcie podmieneného skoku sa navzájom odlišujú rozhodovacou podmienkov, ktorá riadi prevedenie skoku. Po vyhodnotení podmienky skoku sa program bude vykonávať ďalej alebo sa vykonávanie programu presunie na iné miesto. Rozhodujúcou podmienkou sú stavy príznačných bitov.&lt;br /&gt;
# '''JC''' &amp;lt;návestie&amp;gt; 	; skok na návestie ak CF =1&lt;br /&gt;
# '''JNC''' &amp;lt;návestie&amp;gt;	; skok na návestie ak CF=0&lt;br /&gt;
# '''JZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=1&lt;br /&gt;
# '''JNZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=0&lt;br /&gt;
&lt;br /&gt;
* CMP&lt;br /&gt;
 Syntax: CMP &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Porovná argumenty, ale neuloží výsledok. Podľa zmeny príznačných bitov CF a ZF sa určuje, aký z argumentov&lt;br /&gt;
je &amp;gt;, &amp;lt;, =, &amp;gt;=, &amp;lt;=.&lt;br /&gt;
&lt;br /&gt;
 ZF=1 ak A == B &lt;br /&gt;
 ZF=0 ak A&amp;lt;&amp;gt;B&lt;br /&gt;
 CF=1 ak A-B&amp;lt;0 (A&amp;lt;B)&lt;br /&gt;
 CF=0 ak A-B&amp;gt;=0 (A&amp;gt;=B) &lt;br /&gt;
&lt;br /&gt;
Príklady podmienených skokov:&lt;br /&gt;
 CMP A,4       ;A==4&lt;br /&gt;
 JZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;&amp;gt;4 &lt;br /&gt;
 JNZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;4 &lt;br /&gt;
 JC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;gt;=4 &lt;br /&gt;
 JNC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;=4  &lt;br /&gt;
 JZ navestie&lt;br /&gt;
 JC navestie&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* '''CALL'''&lt;br /&gt;
 Syntax: CALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia zavolá podpogram. Volanie podprogramu v rozsahu 2 byty, používa sa 12-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''LCALL'''&lt;br /&gt;
Je podobná inštrukcii CALL, používa sa 16-bitová adresa a rozsah je 3 byty.&lt;br /&gt;
&lt;br /&gt;
Inštrukcie CALL a LCALL odkladajú pri volaní do zásobníka návratovú adresu (byte adrH, adrL)&lt;br /&gt;
&lt;br /&gt;
* '''RET''' &lt;br /&gt;
 Syntax: RET &amp;lt;argument&amp;gt; (nemusí byť)&lt;br /&gt;
Inštrukcia zabezpečuje návrat z posledného skoku, za posledný CALL čím sa dostaneme na miesto v odkiaľ bol volaný podprogram, čím sa pokračuje v ďalšom vykonávaní programu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RET.jpg|center|framed|Obr 2. Skok s podprogramu]]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie rotácie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''RRC'''&lt;br /&gt;
 Syntax: RRC &amp;lt;argument&amp;gt;,&amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doprava o n miest. Pri každom posune uloží do&lt;br /&gt;
siedmeho bitu obsah nultého bitu a do príznačného bitu Carry sa uloží nultý bit.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RRC.jpg|center|framed|Obr 3. Rotácia do prava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 10100010 –-&amp;gt; 11010001&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''RLC'''&lt;br /&gt;
 Syntax: RLC &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doľava o n miest. Pri každom posune uloží do nultého bitu obsah siedmeho bitu. Siedmy bit sa pri každom posune ukladá do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RLC.jpg|center|framed|Obr 4. Rotácia do ľava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 10001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 00100010 –-&amp;gt; 01000101&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''&lt;br /&gt;
 Syntax:ASR &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doprava. Do siedmeho bitu uloží siedmi bit.  A posunie bity doprava .&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASR.jpg|center|framed|Obr 5. Aritmetické posunutie do prava]]&lt;br /&gt;
&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 10100011 –-&amp;gt; 11010001 &lt;br /&gt;
                      C=1&lt;br /&gt;
&lt;br /&gt;
* '''ASL'''&lt;br /&gt;
 Syntax:ASL &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doľava. Do spodného bitu uloží nulu. Ukladáa najvyšší bit t.j. siedmi, do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASL.jpg|center|framed|Obr 6. Aritmetické posunutie doľava]]&lt;br /&gt;
 00001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie práce so zásobníkom===&lt;br /&gt;
&lt;br /&gt;
* '''PUSH'''&lt;br /&gt;
 Syntax: PUSH &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vloží hodnoty registra na miesto dočasného odloženia hodnôt, ktoré nazývame zásobník.&lt;br /&gt;
Príklad:&lt;br /&gt;
 PUSH A ;do vrcholu zásobníka uložia dáta z akumulátora A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''POP'''&lt;br /&gt;
 Syntax: POP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vráti hodnoty zo zásobníka do registra.&lt;br /&gt;
Príklad:&lt;br /&gt;
 POP A – z vrcholu zásobníka sú dáta presunuté späť do akumulátora A&lt;br /&gt;
&lt;br /&gt;
===Ďalšie inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
* '''ROMX'''&lt;br /&gt;
Kopíruje dáta z pamäťe ROM do zásobníka.&lt;br /&gt;
* '''HALT'''&lt;br /&gt;
Uvedie procesor do stavu halt. Čo má za následok uvoľnenie zberníc a prerušenie behu program.&lt;br /&gt;
* '''INDEX'''&lt;br /&gt;
Načitanie hodnoty s tabuľky hodnôt v pamäti ROM pomocou indexu akumulátora.&lt;br /&gt;
* '''SSC'''&lt;br /&gt;
Volanie špeciálnych subrutín z pamäte ROM.&lt;br /&gt;
* '''NOT'''&lt;br /&gt;
Prázdne 4 hodinové cykly&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Odkazy a literatúra===&lt;br /&gt;
# http://egr.spu.edu/bolding/EE3280/PSoC/05-M8C-Instructions.ppt&lt;br /&gt;
# http://www.kemt.fei.tuke.sk/Predmety/KEMT411_ESM/_web/wwwfiles/kapitola%2004.htm&lt;br /&gt;
# http://mikroprocesory.sk/8051_instrukcny_subor_sk&lt;br /&gt;
# http://www.spseke.sk/tutor/prednasky/I8051b.htm&lt;br /&gt;
# http://ap.urpi.fei.stuba.sk/ap/texty/assembler.pdf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5873</id>
		<title>Prehľad inštrukcií procesora M8C</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5873"/>
		<updated>2010-06-25T07:24:00Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Inštrukcie presunu dát */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Inštrukcia procesoru je základný prvok činnosti, ktorú vykonáva procesor v našom prípade procesor M8C. &lt;br /&gt;
V závislosti od výsledku inštrukcie môžu byť nastavované príznakové bity&lt;br /&gt;
registra F:&lt;br /&gt;
*'''CF''' - Carry Flag&lt;br /&gt;
*'''ZF''' - Zero Flag&lt;br /&gt;
&lt;br /&gt;
Inštrukcie procesora môžeme rozdeliť do niekoľkých základných skupín :&lt;br /&gt;
* Aritmetické inštrukcie&lt;br /&gt;
* Logické inštrukcie&lt;br /&gt;
* Inštrukcie presunu dát&lt;br /&gt;
* Inštrukcie skoku&lt;br /&gt;
* Inštrukcie rotácie&lt;br /&gt;
* Inštrukcie práce so zásobníkom&lt;br /&gt;
* Ďalšie inštrukcie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aritmetické inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*''' ADD''' &lt;br /&gt;
 Syntax: ADD  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inštrukcia sčíta argumenty a výsledok uloží do argumentu1, ak sú väčšie čísla ako 8 bitov inštrukcia sa reťazí.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''ADC'''&lt;br /&gt;
 Syntax: ADC  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia sčíta argumenty inštrukcie a pridá príznakový bit Carry (CF),taktiež pre 8 bitové sčítanie. Prevedie sa táto operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; + &amp;lt;argument2&amp;gt; + CF. &lt;br /&gt;
&lt;br /&gt;
* '''SUB'''&lt;br /&gt;
 Syntax: SUB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADD ale argumenty sa odčitujú.&lt;br /&gt;
&lt;br /&gt;
* '''SBB'''&lt;br /&gt;
 Syntax: SBB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADC, ale taktiež sa argumenty odčitujú, takže sa prevedie operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; - &amp;lt;argument2&amp;gt; - Borrow&lt;br /&gt;
&lt;br /&gt;
* '''INC'''&lt;br /&gt;
 Syntax: INC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia zvýši 8 bitové číslo o jednotku (+1). Táto funkcia sa využíva, pretože je rýchlejšia ako ADD &amp;lt;argument&amp;gt;, 1.&lt;br /&gt;
&lt;br /&gt;
* '''DEC'''&lt;br /&gt;
 Syntax: DEC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia je rovnaká ako INC, ale ide o zníženie čísla o jednotka (-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pre INC a DEC inštrukcie sa hodnoty príznakov CF, ZF sa nastavujú pri pretečení resp. pri&lt;br /&gt;
dosiahnutí nuly argumentu&lt;br /&gt;
Používajú sa hlavne pri inkrementovaní počítadiel cyklov.&lt;br /&gt;
&lt;br /&gt;
===Logické inštrukcie===&lt;br /&gt;
&lt;br /&gt;
* '''AND'''&lt;br /&gt;
 Syntax: AND  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické násobenie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; AND &amp;lt;argument2&amp;gt;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie AND&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa k nulovaniu vybraných bitov. Napr. ak chcem vynulovať tretí bit akumulátora A, tak potom&lt;br /&gt;
 AND A, CPL 8&lt;br /&gt;
&lt;br /&gt;
* '''OR'''&lt;br /&gt;
 Syntax: OR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické sšítanie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; OR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie OR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa na nastavenie požadovaných bitov, napr. chcem nastaviť tretí bit akumulátora A, potom &lt;br /&gt;
 OR A, 3&lt;br /&gt;
&lt;br /&gt;
* '''XOR'''&lt;br /&gt;
 Syntax: XOR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické funkciu, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; XOR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie XOR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Pokiaľ dáme Xoru rovnaké číslo tak vždy vyjde 0. Je vhodný pre nulovanie. Napr. ak potrebujem dať do akumulátora A nulu potom &lt;br /&gt;
 XOR A,A&lt;br /&gt;
&lt;br /&gt;
* '''TST'''&lt;br /&gt;
 Synatax: TST &amp;lt;argument1&amp;gt;, &amp;lt;argumen2&amp;gt;&lt;br /&gt;
Inštrukcia  vykoná logický súčin operandov, podľa výsledku operácie nastaví príznakový bit ZF, ale výsledok neuloží&lt;br /&gt;
 TST A,%01000000      ;ak bit 6 je 1 potom ZF =0&lt;br /&gt;
 TST A, %01111000     ;ak bity 6,5,4 alebo 3 sú 0 potom ZF=1&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
* '''CPL'''&lt;br /&gt;
 Syntax: CPL &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia neguje obsah argumentu, t.j. vymení všetky 0 za 1 a naopak. Pri Hodnote 0x00 nastavuje príznak ZF.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,%10010110 &lt;br /&gt;
 CPL A           ;A:=01101001b&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie presunu dát===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''MOV'''&lt;br /&gt;
 Syntax: MOV &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Táto inštrukcia jednoducho presunie argument2 do argument1&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,k&lt;br /&gt;
 MOV X,expr&lt;br /&gt;
&lt;br /&gt;
Inštrukcia nastavuje príznačný bit ZF, ak je hodnota cieľu nolová 0x00.&lt;br /&gt;
&lt;br /&gt;
 MOV A, 0x01    ;hodnota akumulátora je 0x01, potom ZF=0.  &lt;br /&gt;
 MOV A, 0x00    ;hodnota akumulátora je 0x00, teda nulová. Potom ZF=1.&lt;br /&gt;
&lt;br /&gt;
* '''SWAP'''&lt;br /&gt;
 Syntax: SWAP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vymieňa obsah zdroja s cieľa. Výhodné pri dočasnom odložení registrov A,X do pamäte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''MVI'''&lt;br /&gt;
 Syntax: MVI &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia načíta 8-bitovú konštantu do registra pomocou smerníka.Smerník je inkremenovaný po prevedení operácie.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV [table],1		&lt;br /&gt;
 MOV [table+1],2 	&lt;br /&gt;
 MOV [ptr], table 	&lt;br /&gt;
 MVI A,[ptr] 		&lt;br /&gt;
 MVI A,[ptr]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie skoku===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''JMP''' &lt;br /&gt;
 Syntax: JMP &amp;lt;návetie&amp;gt;&lt;br /&gt;
Inštrukcia nepodmieneného skoku. Dlžka inštrukcie je 2 byty. Používa 12 bitovú adresu, kód inštrukcie sa nachádza v prvých 4 bitoch.&lt;br /&gt;
Príklad:&lt;br /&gt;
  MOV A, 4&lt;br /&gt;
 JMP návestie	; skok na návestie &lt;br /&gt;
&lt;br /&gt;
* '''LJMP'''&lt;br /&gt;
 Syntax: LJMP &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia absolútneho skoku, používa sa 16 bitová adresa. Táto inštrukcia zabezpečí. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:LJMP.jpg|center|framed|Obr 1.Skok na adresu 20h]]&lt;br /&gt;
&lt;br /&gt;
Keďže inštrukcie sa vykonávajú postupne, po vykonaní inštrukcie na adrese 20h pokračuje vykonávaním inštrukcie na adrese 21h, potom 22h atď.&lt;br /&gt;
&lt;br /&gt;
Najpoužívanejšie je JMP, pri chybe kompilátora sa inštrukcia zmení na LJMP&lt;br /&gt;
&lt;br /&gt;
* '''Jx'''&lt;br /&gt;
 Syntax: Jx &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcie podmieneného skoku sa navzájom odlišujú rozhodovacou podmienkov, ktorá riadi prevedenie skoku. Po vyhodnotení podmienky skoku sa program bude vykonávať ďalej alebo sa vykonávanie programu presunie na iné miesto. Rozhodujúcou podmienkou sú stavy príznačných bitov.&lt;br /&gt;
# '''JC''' &amp;lt;návestie&amp;gt; 	; skok na návestie ak CF =1&lt;br /&gt;
# '''JNC''' &amp;lt;návestie&amp;gt;	; skok na návestie ak CF=0&lt;br /&gt;
# '''JZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=1&lt;br /&gt;
# '''JNZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=0&lt;br /&gt;
&lt;br /&gt;
* CMP&lt;br /&gt;
 Syntax: CMP &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Porovná argumenty, ale neuloží výsledok. Podľa zmeny príznačných bitov CF a ZF sa určuje, aký z argumentov&lt;br /&gt;
je &amp;gt;, &amp;lt;, =, &amp;gt;=, &amp;lt;=.&lt;br /&gt;
&lt;br /&gt;
 ZF=1 ak A == B &lt;br /&gt;
 ZF=0 ak A&amp;lt;&amp;gt;B&lt;br /&gt;
 CF=1 ak A-B&amp;lt;0 (A&amp;lt;B)&lt;br /&gt;
 CF=0 ak A-B&amp;gt;=0 (A&amp;gt;=B) &lt;br /&gt;
&lt;br /&gt;
Príklady podmienených skokov:&lt;br /&gt;
 CMP A,4       ;A==4&lt;br /&gt;
 JZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;&amp;gt;4 &lt;br /&gt;
 JNZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;4 &lt;br /&gt;
 JC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;gt;=4 &lt;br /&gt;
 JNC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;=4  &lt;br /&gt;
 JZ navestie&lt;br /&gt;
 JC navestie&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* '''CALL'''&lt;br /&gt;
 Syntax: CALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia zavolá podpogram. Volanie podprogramu v rozsahu 2 byty, používa sa 12-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''LCALL'''&lt;br /&gt;
Je podobná inštrukcii CALL, používa sa 16-bitová adresa a rozsah je 3 byty.&lt;br /&gt;
&lt;br /&gt;
Inštrukcie CALL a LCALL odkladajú pri volaní do zásobníka návratovú adresu (byte adrH, adrL)&lt;br /&gt;
&lt;br /&gt;
* '''RET''' &lt;br /&gt;
 Syntax: RET &amp;lt;argument&amp;gt; (nemusí byť)&lt;br /&gt;
Inštrukcia zabezpečuje návrat z posledného skoku, za posledný CALL čím sa dostaneme na miesto v odkiaľ bol volaný podprogram, čím sa pokračuje v ďalšom vykonávaní programu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RET.jpg|center|framed|Obr 2. Skok s podprogramu]]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie rotácie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''RRC'''&lt;br /&gt;
 Syntax: RRC &amp;lt;argument&amp;gt;,&amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doprava o n miest. Pri každom posune uloží do&lt;br /&gt;
siedmeho bitu obsah nultého bitu a do príznačného bitu Carry sa uloží nultý bit.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RRC.jpg|center|framed|Obr 3. Rotácia do prava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 10100010 –-&amp;gt; 11010001&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''RLC'''&lt;br /&gt;
 Syntax: RLC &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doľava o n miest. Pri každom posune uloží do nultého bitu obsah siedmeho bitu. Siedmy bit sa pri každom posune ukladá do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RLC.jpg|center|framed|Obr 4. Rotácia do ľava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 10001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 00100010 –-&amp;gt; 01000101&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''&lt;br /&gt;
 Syntax:ASR &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doprava. Do siedmeho bitu uloží siedmi bit.  A posunie bity doprava .&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASR.jpg|center|framed|Obr 5. Aritmetické posunutie do prava]]&lt;br /&gt;
&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 10100011 –-&amp;gt; 11010001 &lt;br /&gt;
                      C=1&lt;br /&gt;
&lt;br /&gt;
* '''ASL'''&lt;br /&gt;
 Syntax:ASL &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doľava. Do spodného bitu uloží nulu. Ukladáa najvyšší bit t.j. siedmi, do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASL.jpg|center|framed|Obr 6. Aritmetické posunutie doľava]]&lt;br /&gt;
 00001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie práce so zásobníkom===&lt;br /&gt;
&lt;br /&gt;
* '''PUSH'''&lt;br /&gt;
 Syntax: PUSH &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vloží hodnoty registra na miesto dočasného odloženia hodnôt, ktoré nazývame zásobník.&lt;br /&gt;
Príklad:&lt;br /&gt;
 PUSH A ;do vrcholu zásobníka uložia dáta z akumulátora A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''POP'''&lt;br /&gt;
 Syntax: POP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vráti hodnoty zo zásobníka do registra.&lt;br /&gt;
Príklad:&lt;br /&gt;
 POP A – z vrcholu zásobníka sú dáta presunuté späť do akumulátora A&lt;br /&gt;
&lt;br /&gt;
===Ďalšie inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
* '''ROMX'''&lt;br /&gt;
Kopíruje dáta z pamäťe ROM do zásobníka.&lt;br /&gt;
* '''HALT'''&lt;br /&gt;
Uvedie procesor do stavu halt. Čo má za následok uvoľnenie zberníc a prerušenie behu program.&lt;br /&gt;
* '''INDEX'''&lt;br /&gt;
Načitanie hodnoty s tabuľky hodnôt v pamäti ROM pomocou indexu akumulátora.&lt;br /&gt;
* '''SSC'''&lt;br /&gt;
Volanie špeciálnych subrutín z pamäte ROM.&lt;br /&gt;
* '''NOT'''&lt;br /&gt;
Prázdne 4 hodinové cykly&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Odkazy a literatúra===&lt;br /&gt;
# http://egr.spu.edu/bolding/EE3280/PSoC/05-M8C-Instructions.ppt&lt;br /&gt;
# http://www.kemt.fei.tuke.sk/Predmety/KEMT411_ESM/_web/wwwfiles/kapitola%2004.htm&lt;br /&gt;
# http://mikroprocesory.sk/8051_instrukcny_subor_sk&lt;br /&gt;
# http://www.spseke.sk/tutor/prednasky/I8051b.htm&lt;br /&gt;
# http://ap.urpi.fei.stuba.sk/ap/texty/assembler.pdf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5871</id>
		<title>Prehľad inštrukcií procesora M8C</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5871"/>
		<updated>2010-06-25T07:14:47Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Inštrukcie práce so zásobníkom */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Inštrukcia procesoru je základný prvok činnosti, ktorú vykonáva procesor v našom prípade procesor M8C. &lt;br /&gt;
V závislosti od výsledku inštrukcie môžu byť nastavované príznakové bity&lt;br /&gt;
registra F:&lt;br /&gt;
*'''CF''' - Carry Flag&lt;br /&gt;
*'''ZF''' - Zero Flag&lt;br /&gt;
&lt;br /&gt;
Inštrukcie procesora môžeme rozdeliť do niekoľkých základných skupín :&lt;br /&gt;
* Aritmetické inštrukcie&lt;br /&gt;
* Logické inštrukcie&lt;br /&gt;
* Inštrukcie presunu dát&lt;br /&gt;
* Inštrukcie skoku&lt;br /&gt;
* Inštrukcie rotácie&lt;br /&gt;
* Inštrukcie práce so zásobníkom&lt;br /&gt;
* Ďalšie inštrukcie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aritmetické inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*''' ADD''' &lt;br /&gt;
 Syntax: ADD  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inštrukcia sčíta argumenty a výsledok uloží do argumentu1, ak sú väčšie čísla ako 8 bitov inštrukcia sa reťazí.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''ADC'''&lt;br /&gt;
 Syntax: ADC  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia sčíta argumenty inštrukcie a pridá príznakový bit Carry (CF),taktiež pre 8 bitové sčítanie. Prevedie sa táto operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; + &amp;lt;argument2&amp;gt; + CF. &lt;br /&gt;
&lt;br /&gt;
* '''SUB'''&lt;br /&gt;
 Syntax: SUB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADD ale argumenty sa odčitujú.&lt;br /&gt;
&lt;br /&gt;
* '''SBB'''&lt;br /&gt;
 Syntax: SBB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADC, ale taktiež sa argumenty odčitujú, takže sa prevedie operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; - &amp;lt;argument2&amp;gt; - Borrow&lt;br /&gt;
&lt;br /&gt;
* '''INC'''&lt;br /&gt;
 Syntax: INC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia zvýši 8 bitové číslo o jednotku (+1). Táto funkcia sa využíva, pretože je rýchlejšia ako ADD &amp;lt;argument&amp;gt;, 1.&lt;br /&gt;
&lt;br /&gt;
* '''DEC'''&lt;br /&gt;
 Syntax: DEC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia je rovnaká ako INC, ale ide o zníženie čísla o jednotka (-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pre INC a DEC inštrukcie sa hodnoty príznakov CF, ZF sa nastavujú pri pretečení resp. pri&lt;br /&gt;
dosiahnutí nuly argumentu&lt;br /&gt;
Používajú sa hlavne pri inkrementovaní počítadiel cyklov.&lt;br /&gt;
&lt;br /&gt;
===Logické inštrukcie===&lt;br /&gt;
&lt;br /&gt;
* '''AND'''&lt;br /&gt;
 Syntax: AND  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické násobenie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; AND &amp;lt;argument2&amp;gt;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie AND&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa k nulovaniu vybraných bitov. Napr. ak chcem vynulovať tretí bit akumulátora A, tak potom&lt;br /&gt;
 AND A, CPL 8&lt;br /&gt;
&lt;br /&gt;
* '''OR'''&lt;br /&gt;
 Syntax: OR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické sšítanie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; OR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie OR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa na nastavenie požadovaných bitov, napr. chcem nastaviť tretí bit akumulátora A, potom &lt;br /&gt;
 OR A, 3&lt;br /&gt;
&lt;br /&gt;
* '''XOR'''&lt;br /&gt;
 Syntax: XOR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické funkciu, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; XOR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie XOR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Pokiaľ dáme Xoru rovnaké číslo tak vždy vyjde 0. Je vhodný pre nulovanie. Napr. ak potrebujem dať do akumulátora A nulu potom &lt;br /&gt;
 XOR A,A&lt;br /&gt;
&lt;br /&gt;
* '''TST'''&lt;br /&gt;
 Synatax: TST &amp;lt;argument1&amp;gt;, &amp;lt;argumen2&amp;gt;&lt;br /&gt;
Inštrukcia  vykoná logický súčin operandov, podľa výsledku operácie nastaví príznakový bit ZF, ale výsledok neuloží&lt;br /&gt;
 TST A,%01000000      ;ak bit 6 je 1 potom ZF =0&lt;br /&gt;
 TST A, %01111000     ;ak bity 6,5,4 alebo 3 sú 0 potom ZF=1&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
* '''CPL'''&lt;br /&gt;
 Syntax: CPL &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia neguje obsah argumentu, t.j. vymení všetky 0 za 1 a naopak. Pri Hodnote 0x00 nastavuje príznak ZF.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,%10010110 &lt;br /&gt;
 CPL A           ;A:=01101001b&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie presunu dát===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''MOV'''&lt;br /&gt;
 Syntax: MOV &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Táto inštrukcia jednoducho presunie argument2 do argument1&lt;br /&gt;
&lt;br /&gt;
Musí sa dodržať niekoľko pravidiel:&lt;br /&gt;
# Veľkosť (počet bitov), argument1 musí byť rovnako veľký ako argument2&lt;br /&gt;
# Do segmentových registrov nie je možné uložiť priamo číslo&lt;br /&gt;
&lt;br /&gt;
 MOV A, 1234&lt;br /&gt;
 MOV X,A&lt;br /&gt;
&lt;br /&gt;
# Nie je možné priamo presúvať s pamäti do pamäti&lt;br /&gt;
# Žiadna inštrukcia nesmie mať ako argument viac ako jednu adresu.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,5 ; A:=5&lt;br /&gt;
 MOV X,SP ; X:=SP&lt;br /&gt;
&lt;br /&gt;
* '''SWAP'''&lt;br /&gt;
 Syntax: SWAP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia navzájom prehodí obsah horného a dolného polbajtu uložených v argumente,t.j. Vymení horné 4 bity a dolné 4 bity v argumente, výsledok je uložený v argumente. &lt;br /&gt;
&lt;br /&gt;
Príklad: &lt;br /&gt;
 A:=11000011b &lt;br /&gt;
 SWAP A&lt;br /&gt;
 A:=00111100b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''MVI'''&lt;br /&gt;
 Syntax: MVI &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia načíta 8-bitovú konštantu do registra. Pamäťový prístup je indexovaný. Index je sám o sebe v pamäti. Index je inkremenovaný po prevedení operácie.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV [table],1		; prvá hodnota je v tabulke s indexom 1&lt;br /&gt;
 MOV [table+1],2 	; druhá hodnota dostala index 2&lt;br /&gt;
 MOV [ptr], table 	; pointer na prvý prvok v tabuľke&lt;br /&gt;
 MVI A,[ptr] 		; A &amp;lt;-1, ptr &amp;lt;- table+1&lt;br /&gt;
 MVI A,[ptr]		; A&amp;lt;-2, ptr &amp;lt;- table +2&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie skoku===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''JMP''' &lt;br /&gt;
 Syntax: JMP &amp;lt;návetie&amp;gt;&lt;br /&gt;
Inštrukcia nepodmieneného skoku. Dlžka inštrukcie je 2 byty. Používa 12 bitovú adresu, kód inštrukcie sa nachádza v prvých 4 bitoch.&lt;br /&gt;
Príklad:&lt;br /&gt;
  MOV A, 4&lt;br /&gt;
 JMP návestie	; skok na návestie &lt;br /&gt;
&lt;br /&gt;
* '''LJMP'''&lt;br /&gt;
 Syntax: LJMP &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia absolútneho skoku, používa sa 16 bitová adresa. Táto inštrukcia zabezpečí. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:LJMP.jpg|center|framed|Obr 1.Skok na adresu 20h]]&lt;br /&gt;
&lt;br /&gt;
Keďže inštrukcie sa vykonávajú postupne, po vykonaní inštrukcie na adrese 20h pokračuje vykonávaním inštrukcie na adrese 21h, potom 22h atď.&lt;br /&gt;
&lt;br /&gt;
Najpoužívanejšie je JMP, pri chybe kompilátora sa inštrukcia zmení na LJMP&lt;br /&gt;
&lt;br /&gt;
* '''Jx'''&lt;br /&gt;
 Syntax: Jx &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcie podmieneného skoku sa navzájom odlišujú rozhodovacou podmienkov, ktorá riadi prevedenie skoku. Po vyhodnotení podmienky skoku sa program bude vykonávať ďalej alebo sa vykonávanie programu presunie na iné miesto. Rozhodujúcou podmienkou sú stavy príznačných bitov.&lt;br /&gt;
# '''JC''' &amp;lt;návestie&amp;gt; 	; skok na návestie ak CF =1&lt;br /&gt;
# '''JNC''' &amp;lt;návestie&amp;gt;	; skok na návestie ak CF=0&lt;br /&gt;
# '''JZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=1&lt;br /&gt;
# '''JNZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=0&lt;br /&gt;
&lt;br /&gt;
* CMP&lt;br /&gt;
 Syntax: CMP &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Porovná argumenty, ale neuloží výsledok. Podľa zmeny príznačných bitov CF a ZF sa určuje, aký z argumentov&lt;br /&gt;
je &amp;gt;, &amp;lt;, =, &amp;gt;=, &amp;lt;=.&lt;br /&gt;
&lt;br /&gt;
 ZF=1 ak A == B &lt;br /&gt;
 ZF=0 ak A&amp;lt;&amp;gt;B&lt;br /&gt;
 CF=1 ak A-B&amp;lt;0 (A&amp;lt;B)&lt;br /&gt;
 CF=0 ak A-B&amp;gt;=0 (A&amp;gt;=B) &lt;br /&gt;
&lt;br /&gt;
Príklady podmienených skokov:&lt;br /&gt;
 CMP A,4       ;A==4&lt;br /&gt;
 JZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;&amp;gt;4 &lt;br /&gt;
 JNZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;4 &lt;br /&gt;
 JC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;gt;=4 &lt;br /&gt;
 JNC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;=4  &lt;br /&gt;
 JZ navestie&lt;br /&gt;
 JC navestie&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* '''CALL'''&lt;br /&gt;
 Syntax: CALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia zavolá podpogram. Volanie podprogramu v rozsahu 2 byty, používa sa 12-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''LCALL'''&lt;br /&gt;
Je podobná inštrukcii CALL, používa sa 16-bitová adresa a rozsah je 3 byty.&lt;br /&gt;
&lt;br /&gt;
Inštrukcie CALL a LCALL odkladajú pri volaní do zásobníka návratovú adresu (byte adrH, adrL)&lt;br /&gt;
&lt;br /&gt;
* '''RET''' &lt;br /&gt;
 Syntax: RET &amp;lt;argument&amp;gt; (nemusí byť)&lt;br /&gt;
Inštrukcia zabezpečuje návrat z posledného skoku, za posledný CALL čím sa dostaneme na miesto v odkiaľ bol volaný podprogram, čím sa pokračuje v ďalšom vykonávaní programu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RET.jpg|center|framed|Obr 2. Skok s podprogramu]]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie rotácie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''RRC'''&lt;br /&gt;
 Syntax: RRC &amp;lt;argument&amp;gt;,&amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doprava o n miest. Pri každom posune uloží do&lt;br /&gt;
siedmeho bitu obsah nultého bitu a do príznačného bitu Carry sa uloží nultý bit.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RRC.jpg|center|framed|Obr 3. Rotácia do prava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 10100010 –-&amp;gt; 11010001&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''RLC'''&lt;br /&gt;
 Syntax: RLC &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doľava o n miest. Pri každom posune uloží do nultého bitu obsah siedmeho bitu. Siedmy bit sa pri každom posune ukladá do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RLC.jpg|center|framed|Obr 4. Rotácia do ľava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 10001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 00100010 –-&amp;gt; 01000101&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''&lt;br /&gt;
 Syntax:ASR &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doprava. Do siedmeho bitu uloží siedmi bit.  A posunie bity doprava .&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASR.jpg|center|framed|Obr 5. Aritmetické posunutie do prava]]&lt;br /&gt;
&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 10100011 –-&amp;gt; 11010001 &lt;br /&gt;
                      C=1&lt;br /&gt;
&lt;br /&gt;
* '''ASL'''&lt;br /&gt;
 Syntax:ASL &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doľava. Do spodného bitu uloží nulu. Ukladáa najvyšší bit t.j. siedmi, do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASL.jpg|center|framed|Obr 6. Aritmetické posunutie doľava]]&lt;br /&gt;
 00001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie práce so zásobníkom===&lt;br /&gt;
&lt;br /&gt;
* '''PUSH'''&lt;br /&gt;
 Syntax: PUSH &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vloží hodnoty registra na miesto dočasného odloženia hodnôt, ktoré nazývame zásobník.&lt;br /&gt;
Príklad:&lt;br /&gt;
 PUSH A ;do vrcholu zásobníka uložia dáta z akumulátora A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''POP'''&lt;br /&gt;
 Syntax: POP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia vráti hodnoty zo zásobníka do registra.&lt;br /&gt;
Príklad:&lt;br /&gt;
 POP A – z vrcholu zásobníka sú dáta presunuté späť do akumulátora A&lt;br /&gt;
&lt;br /&gt;
===Ďalšie inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
* '''ROMX'''&lt;br /&gt;
Kopíruje dáta z pamäťe ROM do zásobníka.&lt;br /&gt;
* '''HALT'''&lt;br /&gt;
Uvedie procesor do stavu halt. Čo má za následok uvoľnenie zberníc a prerušenie behu program.&lt;br /&gt;
* '''INDEX'''&lt;br /&gt;
Načitanie hodnoty s tabuľky hodnôt v pamäti ROM pomocou indexu akumulátora.&lt;br /&gt;
* '''SSC'''&lt;br /&gt;
Volanie špeciálnych subrutín z pamäte ROM.&lt;br /&gt;
* '''NOT'''&lt;br /&gt;
Prázdne 4 hodinové cykly&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Odkazy a literatúra===&lt;br /&gt;
# http://egr.spu.edu/bolding/EE3280/PSoC/05-M8C-Instructions.ppt&lt;br /&gt;
# http://www.kemt.fei.tuke.sk/Predmety/KEMT411_ESM/_web/wwwfiles/kapitola%2004.htm&lt;br /&gt;
# http://mikroprocesory.sk/8051_instrukcny_subor_sk&lt;br /&gt;
# http://www.spseke.sk/tutor/prednasky/I8051b.htm&lt;br /&gt;
# http://ap.urpi.fei.stuba.sk/ap/texty/assembler.pdf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5868</id>
		<title>Prehľad inštrukcií procesora M8C</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5868"/>
		<updated>2010-06-25T07:09:15Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Inštrukcie skoku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Inštrukcia procesoru je základný prvok činnosti, ktorú vykonáva procesor v našom prípade procesor M8C. &lt;br /&gt;
V závislosti od výsledku inštrukcie môžu byť nastavované príznakové bity&lt;br /&gt;
registra F:&lt;br /&gt;
*'''CF''' - Carry Flag&lt;br /&gt;
*'''ZF''' - Zero Flag&lt;br /&gt;
&lt;br /&gt;
Inštrukcie procesora môžeme rozdeliť do niekoľkých základných skupín :&lt;br /&gt;
* Aritmetické inštrukcie&lt;br /&gt;
* Logické inštrukcie&lt;br /&gt;
* Inštrukcie presunu dát&lt;br /&gt;
* Inštrukcie skoku&lt;br /&gt;
* Inštrukcie rotácie&lt;br /&gt;
* Inštrukcie práce so zásobníkom&lt;br /&gt;
* Ďalšie inštrukcie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aritmetické inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*''' ADD''' &lt;br /&gt;
 Syntax: ADD  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inštrukcia sčíta argumenty a výsledok uloží do argumentu1, ak sú väčšie čísla ako 8 bitov inštrukcia sa reťazí.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''ADC'''&lt;br /&gt;
 Syntax: ADC  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia sčíta argumenty inštrukcie a pridá príznakový bit Carry (CF),taktiež pre 8 bitové sčítanie. Prevedie sa táto operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; + &amp;lt;argument2&amp;gt; + CF. &lt;br /&gt;
&lt;br /&gt;
* '''SUB'''&lt;br /&gt;
 Syntax: SUB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADD ale argumenty sa odčitujú.&lt;br /&gt;
&lt;br /&gt;
* '''SBB'''&lt;br /&gt;
 Syntax: SBB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADC, ale taktiež sa argumenty odčitujú, takže sa prevedie operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; - &amp;lt;argument2&amp;gt; - Borrow&lt;br /&gt;
&lt;br /&gt;
* '''INC'''&lt;br /&gt;
 Syntax: INC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia zvýši 8 bitové číslo o jednotku (+1). Táto funkcia sa využíva, pretože je rýchlejšia ako ADD &amp;lt;argument&amp;gt;, 1.&lt;br /&gt;
&lt;br /&gt;
* '''DEC'''&lt;br /&gt;
 Syntax: DEC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia je rovnaká ako INC, ale ide o zníženie čísla o jednotka (-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pre INC a DEC inštrukcie sa hodnoty príznakov CF, ZF sa nastavujú pri pretečení resp. pri&lt;br /&gt;
dosiahnutí nuly argumentu&lt;br /&gt;
Používajú sa hlavne pri inkrementovaní počítadiel cyklov.&lt;br /&gt;
&lt;br /&gt;
===Logické inštrukcie===&lt;br /&gt;
&lt;br /&gt;
* '''AND'''&lt;br /&gt;
 Syntax: AND  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické násobenie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; AND &amp;lt;argument2&amp;gt;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie AND&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa k nulovaniu vybraných bitov. Napr. ak chcem vynulovať tretí bit akumulátora A, tak potom&lt;br /&gt;
 AND A, CPL 8&lt;br /&gt;
&lt;br /&gt;
* '''OR'''&lt;br /&gt;
 Syntax: OR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické sšítanie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; OR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie OR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa na nastavenie požadovaných bitov, napr. chcem nastaviť tretí bit akumulátora A, potom &lt;br /&gt;
 OR A, 3&lt;br /&gt;
&lt;br /&gt;
* '''XOR'''&lt;br /&gt;
 Syntax: XOR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické funkciu, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; XOR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie XOR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Pokiaľ dáme Xoru rovnaké číslo tak vždy vyjde 0. Je vhodný pre nulovanie. Napr. ak potrebujem dať do akumulátora A nulu potom &lt;br /&gt;
 XOR A,A&lt;br /&gt;
&lt;br /&gt;
* '''TST'''&lt;br /&gt;
 Synatax: TST &amp;lt;argument1&amp;gt;, &amp;lt;argumen2&amp;gt;&lt;br /&gt;
Inštrukcia  vykoná logický súčin operandov, podľa výsledku operácie nastaví príznakový bit ZF, ale výsledok neuloží&lt;br /&gt;
 TST A,%01000000      ;ak bit 6 je 1 potom ZF =0&lt;br /&gt;
 TST A, %01111000     ;ak bity 6,5,4 alebo 3 sú 0 potom ZF=1&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
* '''CPL'''&lt;br /&gt;
 Syntax: CPL &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia neguje obsah argumentu, t.j. vymení všetky 0 za 1 a naopak. Pri Hodnote 0x00 nastavuje príznak ZF.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,%10010110 &lt;br /&gt;
 CPL A           ;A:=01101001b&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie presunu dát===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''MOV'''&lt;br /&gt;
 Syntax: MOV &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Táto inštrukcia jednoducho presunie argument2 do argument1&lt;br /&gt;
&lt;br /&gt;
Musí sa dodržať niekoľko pravidiel:&lt;br /&gt;
# Veľkosť (počet bitov), argument1 musí byť rovnako veľký ako argument2&lt;br /&gt;
# Do segmentových registrov nie je možné uložiť priamo číslo&lt;br /&gt;
&lt;br /&gt;
 MOV A, 1234&lt;br /&gt;
 MOV X,A&lt;br /&gt;
&lt;br /&gt;
# Nie je možné priamo presúvať s pamäti do pamäti&lt;br /&gt;
# Žiadna inštrukcia nesmie mať ako argument viac ako jednu adresu.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,5 ; A:=5&lt;br /&gt;
 MOV X,SP ; X:=SP&lt;br /&gt;
&lt;br /&gt;
* '''SWAP'''&lt;br /&gt;
 Syntax: SWAP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia navzájom prehodí obsah horného a dolného polbajtu uložených v argumente,t.j. Vymení horné 4 bity a dolné 4 bity v argumente, výsledok je uložený v argumente. &lt;br /&gt;
&lt;br /&gt;
Príklad: &lt;br /&gt;
 A:=11000011b &lt;br /&gt;
 SWAP A&lt;br /&gt;
 A:=00111100b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''MVI'''&lt;br /&gt;
 Syntax: MVI &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia načíta 8-bitovú konštantu do registra. Pamäťový prístup je indexovaný. Index je sám o sebe v pamäti. Index je inkremenovaný po prevedení operácie.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV [table],1		; prvá hodnota je v tabulke s indexom 1&lt;br /&gt;
 MOV [table+1],2 	; druhá hodnota dostala index 2&lt;br /&gt;
 MOV [ptr], table 	; pointer na prvý prvok v tabuľke&lt;br /&gt;
 MVI A,[ptr] 		; A &amp;lt;-1, ptr &amp;lt;- table+1&lt;br /&gt;
 MVI A,[ptr]		; A&amp;lt;-2, ptr &amp;lt;- table +2&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie skoku===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''JMP''' &lt;br /&gt;
 Syntax: JMP &amp;lt;návetie&amp;gt;&lt;br /&gt;
Inštrukcia nepodmieneného skoku. Dlžka inštrukcie je 2 byty. Používa 12 bitovú adresu, kód inštrukcie sa nachádza v prvých 4 bitoch.&lt;br /&gt;
Príklad:&lt;br /&gt;
  MOV A, 4&lt;br /&gt;
 JMP návestie	; skok na návestie &lt;br /&gt;
&lt;br /&gt;
* '''LJMP'''&lt;br /&gt;
 Syntax: LJMP &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia absolútneho skoku, používa sa 16 bitová adresa. Táto inštrukcia zabezpečí. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:LJMP.jpg|center|framed|Obr 1.Skok na adresu 20h]]&lt;br /&gt;
&lt;br /&gt;
Keďže inštrukcie sa vykonávajú postupne, po vykonaní inštrukcie na adrese 20h pokračuje vykonávaním inštrukcie na adrese 21h, potom 22h atď.&lt;br /&gt;
&lt;br /&gt;
Najpoužívanejšie je JMP, pri chybe kompilátora sa inštrukcia zmení na LJMP&lt;br /&gt;
&lt;br /&gt;
* '''Jx'''&lt;br /&gt;
 Syntax: Jx &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcie podmieneného skoku sa navzájom odlišujú rozhodovacou podmienkov, ktorá riadi prevedenie skoku. Po vyhodnotení podmienky skoku sa program bude vykonávať ďalej alebo sa vykonávanie programu presunie na iné miesto. Rozhodujúcou podmienkou sú stavy príznačných bitov.&lt;br /&gt;
# '''JC''' &amp;lt;návestie&amp;gt; 	; skok na návestie ak CF =1&lt;br /&gt;
# '''JNC''' &amp;lt;návestie&amp;gt;	; skok na návestie ak CF=0&lt;br /&gt;
# '''JZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=1&lt;br /&gt;
# '''JNZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=0&lt;br /&gt;
&lt;br /&gt;
* CMP&lt;br /&gt;
 Syntax: CMP &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Porovná argumenty, ale neuloží výsledok. Podľa zmeny príznačných bitov CF a ZF sa určuje, aký z argumentov&lt;br /&gt;
je &amp;gt;, &amp;lt;, =, &amp;gt;=, &amp;lt;=.&lt;br /&gt;
&lt;br /&gt;
 ZF=1 ak A == B &lt;br /&gt;
 ZF=0 ak A&amp;lt;&amp;gt;B&lt;br /&gt;
 CF=1 ak A-B&amp;lt;0 (A&amp;lt;B)&lt;br /&gt;
 CF=0 ak A-B&amp;gt;=0 (A&amp;gt;=B) &lt;br /&gt;
&lt;br /&gt;
Príklady podmienených skokov:&lt;br /&gt;
 CMP A,4       ;A==4&lt;br /&gt;
 JZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;&amp;gt;4 &lt;br /&gt;
 JNZ navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;4 &lt;br /&gt;
 JC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;gt;=4 &lt;br /&gt;
 JNC navestie&lt;br /&gt;
 CMP A,4       ;A&amp;lt;=4  &lt;br /&gt;
 JZ navestie&lt;br /&gt;
 JC navestie&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* '''CALL'''&lt;br /&gt;
 Syntax: CALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia zavolá podpogram. Volanie podprogramu v rozsahu 2 byty, používa sa 12-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''LCALL'''&lt;br /&gt;
Je podobná inštrukcii CALL, používa sa 16-bitová adresa a rozsah je 3 byty.&lt;br /&gt;
&lt;br /&gt;
Inštrukcie CALL a LCALL odkladajú pri volaní do zásobníka návratovú adresu (byte adrH, adrL)&lt;br /&gt;
&lt;br /&gt;
* '''RET''' &lt;br /&gt;
 Syntax: RET &amp;lt;argument&amp;gt; (nemusí byť)&lt;br /&gt;
Inštrukcia zabezpečuje návrat z posledného skoku, za posledný CALL čím sa dostaneme na miesto v odkiaľ bol volaný podprogram, čím sa pokračuje v ďalšom vykonávaní programu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RET.jpg|center|framed|Obr 2. Skok s podprogramu]]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie rotácie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''RRC'''&lt;br /&gt;
 Syntax: RRC &amp;lt;argument&amp;gt;,&amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doprava o n miest. Pri každom posune uloží do&lt;br /&gt;
siedmeho bitu obsah nultého bitu a do príznačného bitu Carry sa uloží nultý bit.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RRC.jpg|center|framed|Obr 3. Rotácia do prava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 10100010 –-&amp;gt; 11010001&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''RLC'''&lt;br /&gt;
 Syntax: RLC &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doľava o n miest. Pri každom posune uloží do nultého bitu obsah siedmeho bitu. Siedmy bit sa pri každom posune ukladá do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RLC.jpg|center|framed|Obr 4. Rotácia do ľava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 10001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 00100010 –-&amp;gt; 01000101&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''&lt;br /&gt;
 Syntax:ASR &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doprava. Do siedmeho bitu uloží siedmi bit.  A posunie bity doprava .&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASR.jpg|center|framed|Obr 5. Aritmetické posunutie do prava]]&lt;br /&gt;
&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 10100011 –-&amp;gt; 11010001 &lt;br /&gt;
                      C=1&lt;br /&gt;
&lt;br /&gt;
* '''ASL'''&lt;br /&gt;
 Syntax:ASL &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doľava. Do spodného bitu uloží nulu. Ukladáa najvyšší bit t.j. siedmi, do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASL.jpg|center|framed|Obr 6. Aritmetické posunutie doľava]]&lt;br /&gt;
 00001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie práce so zásobníkom===&lt;br /&gt;
&lt;br /&gt;
* '''PUSH'''&lt;br /&gt;
 Syntax: PUSH &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia uloží 16 alebo 32 bitové hodnoty do zásobníku. K ukazateľu zásobníka SP sa pričíta jednotka a dáta na uvedenej adrese s inštrukciou sú uložené na vrchol zásobníka.&lt;br /&gt;
Príklad:&lt;br /&gt;
 PUSH 120 ;do vrcholu zásobníka uloží dáta z adresy 120&lt;br /&gt;
&lt;br /&gt;
* '''POP'''&lt;br /&gt;
 Syntax: POP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia je opakom PUSH, načíta 16 alebo 32 bitové číslo zo zásobníka. od ukazateľa zásobníka je odčítaná jednotka, z vrcholu zásobníka sú vyzdvihnuté dáta uložené na adresu uvedenú pri inštrukcii.&lt;br /&gt;
Príklad:&lt;br /&gt;
 POP 120 – z vrcholu zásobníka sú dáta presunuté na adresu 120&lt;br /&gt;
&lt;br /&gt;
===Ďalšie inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
* '''ROMX'''&lt;br /&gt;
Kopíruje dáta z pamäťe ROM do zásobníka.&lt;br /&gt;
* '''HALT'''&lt;br /&gt;
Uvedie procesor do stavu halt. Čo má za následok uvoľnenie zberníc a prerušenie behu program.&lt;br /&gt;
* '''INDEX'''&lt;br /&gt;
Načitanie hodnoty s tabuľky hodnôt v pamäti ROM pomocou indexu akumulátora.&lt;br /&gt;
* '''SSC'''&lt;br /&gt;
Volanie špeciálnych subrutín z pamäte ROM.&lt;br /&gt;
* '''NOT'''&lt;br /&gt;
Prázdne 4 hodinové cykly&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Odkazy a literatúra===&lt;br /&gt;
# http://egr.spu.edu/bolding/EE3280/PSoC/05-M8C-Instructions.ppt&lt;br /&gt;
# http://www.kemt.fei.tuke.sk/Predmety/KEMT411_ESM/_web/wwwfiles/kapitola%2004.htm&lt;br /&gt;
# http://mikroprocesory.sk/8051_instrukcny_subor_sk&lt;br /&gt;
# http://www.spseke.sk/tutor/prednasky/I8051b.htm&lt;br /&gt;
# http://ap.urpi.fei.stuba.sk/ap/texty/assembler.pdf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5860</id>
		<title>Prehľad inštrukcií procesora M8C</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Preh%C4%BEad_in%C5%A1trukci%C3%AD_procesora_M8C&amp;diff=5860"/>
		<updated>2010-06-25T06:40:35Z</updated>

		<summary type="html">&lt;p&gt;Matesx: /* Inštrukcie rotácie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Inštrukcia procesoru je základný prvok činnosti, ktorú vykonáva procesor v našom prípade procesor M8C. &lt;br /&gt;
V závislosti od výsledku inštrukcie môžu byť nastavované príznakové bity&lt;br /&gt;
registra F:&lt;br /&gt;
*'''CF''' - Carry Flag&lt;br /&gt;
*'''ZF''' - Zero Flag&lt;br /&gt;
&lt;br /&gt;
Inštrukcie procesora môžeme rozdeliť do niekoľkých základných skupín :&lt;br /&gt;
* Aritmetické inštrukcie&lt;br /&gt;
* Logické inštrukcie&lt;br /&gt;
* Inštrukcie presunu dát&lt;br /&gt;
* Inštrukcie skoku&lt;br /&gt;
* Inštrukcie rotácie&lt;br /&gt;
* Inštrukcie práce so zásobníkom&lt;br /&gt;
* Ďalšie inštrukcie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aritmetické inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*''' ADD''' &lt;br /&gt;
 Syntax: ADD  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inštrukcia sčíta argumenty a výsledok uloží do argumentu1, ak sú väčšie čísla ako 8 bitov inštrukcia sa reťazí.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''ADC'''&lt;br /&gt;
 Syntax: ADC  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia sčíta argumenty inštrukcie a pridá príznakový bit Carry (CF),taktiež pre 8 bitové sčítanie. Prevedie sa táto operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; + &amp;lt;argument2&amp;gt; + CF. &lt;br /&gt;
&lt;br /&gt;
* '''SUB'''&lt;br /&gt;
 Syntax: SUB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADD ale argumenty sa odčitujú.&lt;br /&gt;
&lt;br /&gt;
* '''SBB'''&lt;br /&gt;
 Syntax: SBB  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
To isté ako ADC, ale taktiež sa argumenty odčitujú, takže sa prevedie operácia &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; - &amp;lt;argument2&amp;gt; - Borrow&lt;br /&gt;
&lt;br /&gt;
* '''INC'''&lt;br /&gt;
 Syntax: INC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia zvýši 8 bitové číslo o jednotku (+1). Táto funkcia sa využíva, pretože je rýchlejšia ako ADD &amp;lt;argument&amp;gt;, 1.&lt;br /&gt;
&lt;br /&gt;
* '''DEC'''&lt;br /&gt;
 Syntax: DEC &amp;lt;argument&amp;gt;&lt;br /&gt;
Táto inštrukcia je rovnaká ako INC, ale ide o zníženie čísla o jednotka (-1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pre INC a DEC inštrukcie sa hodnoty príznakov CF, ZF sa nastavujú pri pretečení resp. pri&lt;br /&gt;
dosiahnutí nuly argumentu&lt;br /&gt;
Používajú sa hlavne pri inkrementovaní počítadiel cyklov.&lt;br /&gt;
&lt;br /&gt;
===Logické inštrukcie===&lt;br /&gt;
&lt;br /&gt;
* '''AND'''&lt;br /&gt;
 Syntax: AND  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické násobenie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; AND &amp;lt;argument2&amp;gt;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie AND&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa k nulovaniu vybraných bitov. Napr. ak chcem vynulovať tretí bit akumulátora A, tak potom&lt;br /&gt;
 AND A, CPL 8&lt;br /&gt;
&lt;br /&gt;
* '''OR'''&lt;br /&gt;
 Syntax: OR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické sšítanie, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; OR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie OR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Používa sa na nastavenie požadovaných bitov, napr. chcem nastaviť tretí bit akumulátora A, potom &lt;br /&gt;
 OR A, 3&lt;br /&gt;
&lt;br /&gt;
* '''XOR'''&lt;br /&gt;
 Syntax: XOR  &amp;lt;argument1&amp;gt;,&amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia urobí logické funkciu, t.j. &amp;lt;argument1&amp;gt; := &amp;lt;argument1&amp;gt; XOR &amp;lt;argument2&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Pravdivostná tabuľka logickej funkcie XOR&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;argument1&amp;gt;:=&lt;br /&gt;
! &amp;lt;argument1&amp;gt;&lt;br /&gt;
! &amp;lt;argument2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Pokiaľ dáme Xoru rovnaké číslo tak vždy vyjde 0. Je vhodný pre nulovanie. Napr. ak potrebujem dať do akumulátora A nulu potom &lt;br /&gt;
 XOR A,A&lt;br /&gt;
&lt;br /&gt;
* '''TST'''&lt;br /&gt;
 Synatax: TST &amp;lt;argument1&amp;gt;, &amp;lt;argumen2&amp;gt;&lt;br /&gt;
Inštrukcia  vykoná logický súčin operandov, podľa výsledku operácie nastaví príznakový bit ZF, ale výsledok neuloží&lt;br /&gt;
 TST A,%01000000      ;ak bit 6 je 1 potom ZF =0&lt;br /&gt;
 TST A, %01111000     ;ak bity 6,5,4 alebo 3 sú 0 potom ZF=1&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
* '''CPL'''&lt;br /&gt;
 Syntax: CPL &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia neguje obsah argumentu, t.j. vymení všetky 0 za 1 a naopak. Pri Hodnote 0x00 nastavuje príznak ZF.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,%10010110 &lt;br /&gt;
 CPL A           ;A:=01101001b&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie presunu dát===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''MOV'''&lt;br /&gt;
 Syntax: MOV &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Táto inštrukcia jednoducho presunie argument2 do argument1&lt;br /&gt;
&lt;br /&gt;
Musí sa dodržať niekoľko pravidiel:&lt;br /&gt;
# Veľkosť (počet bitov), argument1 musí byť rovnako veľký ako argument2&lt;br /&gt;
# Do segmentových registrov nie je možné uložiť priamo číslo&lt;br /&gt;
&lt;br /&gt;
 MOV A, 1234&lt;br /&gt;
 MOV X,A&lt;br /&gt;
&lt;br /&gt;
# Nie je možné priamo presúvať s pamäti do pamäti&lt;br /&gt;
# Žiadna inštrukcia nesmie mať ako argument viac ako jednu adresu.&lt;br /&gt;
&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,5 ; A:=5&lt;br /&gt;
 MOV X,SP ; X:=SP&lt;br /&gt;
&lt;br /&gt;
* '''SWAP'''&lt;br /&gt;
 Syntax: SWAP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia navzájom prehodí obsah horného a dolného polbajtu uložených v argumente,t.j. Vymení horné 4 bity a dolné 4 bity v argumente, výsledok je uložený v argumente. &lt;br /&gt;
&lt;br /&gt;
Príklad: &lt;br /&gt;
 A:=11000011b &lt;br /&gt;
 SWAP A&lt;br /&gt;
 A:=00111100b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''MVI'''&lt;br /&gt;
 Syntax: MVI &amp;lt;argument1&amp;gt;, &amp;lt;argument2&amp;gt;&lt;br /&gt;
Inštrukcia načíta 8-bitovú konštantu do registra. Pamäťový prístup je indexovaný. Index je sám o sebe v pamäti. Index je inkremenovaný po prevedení operácie.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV [table],1		; prvá hodnota je v tabulke s indexom 1&lt;br /&gt;
 MOV [table+1],2 	; druhá hodnota dostala index 2&lt;br /&gt;
 MOV [ptr], table 	; pointer na prvý prvok v tabuľke&lt;br /&gt;
 MVI A,[ptr] 		; A &amp;lt;-1, ptr &amp;lt;- table+1&lt;br /&gt;
 MVI A,[ptr]		; A&amp;lt;-2, ptr &amp;lt;- table +2&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie skoku===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''JMP''' &lt;br /&gt;
 Syntax: JMP&amp;lt;návetie&amp;gt;&lt;br /&gt;
Inštrukcia nepodmieneného skoku prinúti procesor spracovávať inštrkcie z iného miesta v pamäti.&lt;br /&gt;
Príklad:&lt;br /&gt;
 MOV A,4&lt;br /&gt;
 Skok:		; návestie s názvom „Skok“&lt;br /&gt;
 MOV X, A&lt;br /&gt;
 JMP Skok	; skok na návestie „Skok“&lt;br /&gt;
&lt;br /&gt;
* '''LJMP'''&lt;br /&gt;
 Syntax: LJMP &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia vykoná skok na adresu v rozsahu 64 kB, čiže celého adresovateľného priestoru, používa sa 16-bitová adresa. Táto inštrukcia zabezpečí, že program z miesta tejto inštrukcie priamo odskočí na uvedenú adresu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:LJMP.jpg|center|framed|Obr 1.Skok na adresu 20h]]&lt;br /&gt;
&lt;br /&gt;
Keďže inštrukcie sa vykonávajú postupne, po vykonaní inštrukcie na adrese 20h pokračuje vykonávaním inštrukcie na adrese 21h, potom 22h atď. &lt;br /&gt;
&lt;br /&gt;
* '''Jx'''&lt;br /&gt;
 Syntax: Jx &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcie podmieneného skoku sa navzájom odlišujú rozhodovacou podmienkov, ktorá riadi prevedenie skoku. Po vyhodnotení podmienky skoku sa program bude vykonávať ďalej alebo sa vykonávanie programu presunie na iné miesto. Rozhodujúcou podmienkou sú stavy príznačných bitov.&lt;br /&gt;
# '''JC''' &amp;lt;návestie&amp;gt; 	; skok na návestie ak CF =1&lt;br /&gt;
# '''JNC''' &amp;lt;návestie&amp;gt;	; skok na návestie ak CF=0&lt;br /&gt;
# '''JZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=1&lt;br /&gt;
# '''JNZ''' &amp;lt;návestie&amp;gt;	; skok na návestie ak JZ=0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''CALL'''&lt;br /&gt;
 Syntax: CALL &amp;lt;návestie&amp;gt;&lt;br /&gt;
Inštrukcia zavolá návestie, ale najskôr uloží adresu následujúcej inštrukcie, aby sa program vrátiť späť. Volanie podprogramu v rozsahu 2 kB, používa sa 11-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''LCALL'''&lt;br /&gt;
Je podobná ištrukcii CALL, volanie podprogramu v rozsahu 64 kB, používa sa 16-bitová adresa.&lt;br /&gt;
&lt;br /&gt;
* '''RET''' &lt;br /&gt;
 Syntax: RET &amp;lt;argument&amp;gt; (nemusí byť)&lt;br /&gt;
Inštrukcia zabezpečuje návrat z posledného skoku, za posledný CALL čím sa dostaneme na miesto v odkiaľ bol volaný podprogram, čím sa pokračuje v ďalšom vykonávaní programu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RET.jpg|center|framed|Obr 2. Skok s podprogramu]]&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie rotácie===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''RRC'''&lt;br /&gt;
 Syntax: RRC &amp;lt;argument&amp;gt;,&amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doprava o n miest. Pri každom posune uloží do&lt;br /&gt;
siedmeho bitu obsah nultého bitu a do príznačného bitu Carry sa uloží nultý bit.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RRC.jpg|center|framed|Obr 3. Rotácia do prava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 10100010 –-&amp;gt; 11010001&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''RLC'''&lt;br /&gt;
 Syntax: RLC &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity v argumente doľava o n miest. Pri každom posune uloží do nultého bitu obsah siedmeho bitu. Siedmy bit sa pri každom posune ukladá do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:RLC.jpg|center|framed|Obr 4. Rotácia do ľava]]&lt;br /&gt;
&lt;br /&gt;
 C=0&lt;br /&gt;
 10001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=1&lt;br /&gt;
 C=1&lt;br /&gt;
 00100010 –-&amp;gt; 01000101&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
* '''ASR'''&lt;br /&gt;
 Syntax:ASR &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doprava. Do siedmeho bitu uloží siedmi bit.  A posunie bity doprava .&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASR.jpg|center|framed|Obr 5. Aritmetické posunutie do prava]]&lt;br /&gt;
&lt;br /&gt;
 00001111 ––&amp;gt; 00000111&lt;br /&gt;
                      C=1&lt;br /&gt;
 10100011 –-&amp;gt; 11010001 &lt;br /&gt;
                      C=1&lt;br /&gt;
&lt;br /&gt;
* '''ASL'''&lt;br /&gt;
 Syntax:ASL &amp;lt;argument&amp;gt;, &amp;lt;n&amp;gt;&lt;br /&gt;
Posunie všetky bity registra doľava. Do spodného bitu uloží nulu. Ukladáa najvyšší bit t.j. siedmi, do príznačného bitu Carry.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ASL.jpg|center|framed|Obr 6. Aritmetické posunutie doľava]]&lt;br /&gt;
 00001111 ––&amp;gt; 00011110&lt;br /&gt;
                      C=0&lt;br /&gt;
&lt;br /&gt;
===Inštrukcie práce so zásobníkom===&lt;br /&gt;
&lt;br /&gt;
* '''PUSH'''&lt;br /&gt;
 Syntax: PUSH &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia uloží 16 alebo 32 bitové hodnoty do zásobníku. K ukazateľu zásobníka SP sa pričíta jednotka a dáta na uvedenej adrese s inštrukciou sú uložené na vrchol zásobníka.&lt;br /&gt;
Príklad:&lt;br /&gt;
 PUSH 120 ;do vrcholu zásobníka uloží dáta z adresy 120&lt;br /&gt;
&lt;br /&gt;
* '''POP'''&lt;br /&gt;
 Syntax: POP &amp;lt;argument&amp;gt;&lt;br /&gt;
Inštrukcia je opakom PUSH, načíta 16 alebo 32 bitové číslo zo zásobníka. od ukazateľa zásobníka je odčítaná jednotka, z vrcholu zásobníka sú vyzdvihnuté dáta uložené na adresu uvedenú pri inštrukcii.&lt;br /&gt;
Príklad:&lt;br /&gt;
 POP 120 – z vrcholu zásobníka sú dáta presunuté na adresu 120&lt;br /&gt;
&lt;br /&gt;
===Ďalšie inštrukcie===&lt;br /&gt;
----&lt;br /&gt;
* '''ROMX'''&lt;br /&gt;
Kopíruje dáta z pamäťe ROM do zásobníka.&lt;br /&gt;
* '''HALT'''&lt;br /&gt;
Uvedie procesor do stavu halt. Čo má za následok uvoľnenie zberníc a prerušenie behu program.&lt;br /&gt;
* '''INDEX'''&lt;br /&gt;
Načitanie hodnoty s tabuľky hodnôt v pamäti ROM pomocou indexu akumulátora.&lt;br /&gt;
* '''SSC'''&lt;br /&gt;
Volanie špeciálnych subrutín z pamäte ROM.&lt;br /&gt;
* '''NOT'''&lt;br /&gt;
Prázdne 4 hodinové cykly&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Odkazy a literatúra===&lt;br /&gt;
# http://egr.spu.edu/bolding/EE3280/PSoC/05-M8C-Instructions.ppt&lt;br /&gt;
# http://www.kemt.fei.tuke.sk/Predmety/KEMT411_ESM/_web/wwwfiles/kapitola%2004.htm&lt;br /&gt;
# http://mikroprocesory.sk/8051_instrukcny_subor_sk&lt;br /&gt;
# http://www.spseke.sk/tutor/prednasky/I8051b.htm&lt;br /&gt;
# http://ap.urpi.fei.stuba.sk/ap/texty/assembler.pdf&lt;/div&gt;</summary>
		<author><name>Matesx</name></author>
		
	</entry>
</feed>