<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://512.cz/skins/common/feed.css?301"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>https://512.cz/index.php?feed=atom&amp;target=147.228.209.161&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2F147.228.209.161</id>
		<title>FAV wiki - Příspěvky uživatele [cs]</title>
		<link rel="self" type="application/atom+xml" href="https://512.cz/index.php?feed=atom&amp;target=147.228.209.161&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2F147.228.209.161"/>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Speci%C3%A1ln%C3%AD:P%C5%99%C3%ADsp%C4%9Bvky/147.228.209.161"/>
		<updated>2026-10-22T04:12:45Z</updated>
		<subtitle>Z FAV wiki</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>https://512.cz/index.php?title=Z%C3%A1sobn%C3%ADk,_fronta,_seznam</id>
		<title>Zásobník, fronta, seznam</title>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Z%C3%A1sobn%C3%ADk,_fronta,_seznam"/>
				<updated>2016-06-08T20:26:19Z</updated>
		
		<summary type="html">&lt;p&gt;147.228.209.161: /* Fronta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Všechny tyto ADT implementují IsEmpty (prázdná struktura) a Size (pošet prvků ve struktuře)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zásobník ==&lt;br /&gt;
&lt;br /&gt;
Interface: operace Push, Pop, Peek&lt;br /&gt;
* '''Push''' vkládá data do zásobníku za sebe&lt;br /&gt;
* '''Pop''' vybírá nejpozději  vložená data&lt;br /&gt;
* '''Peek''' vrátí nejpozději vložená data bez výběru prvku ze struktury&lt;br /&gt;
= LIFO pamět (Last In First Out)&lt;br /&gt;
 &lt;br /&gt;
Všechny operace jsou O(1)&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Zasobnik.jpg]]&lt;br /&gt;
 &lt;br /&gt;
Head: vrchol zásobníku&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Implementace objektově: &lt;br /&gt;
* Prvky (objekty) obsahují data a ukazují na nižžší  prvky v zásobníku (na prvky pod sebou)&lt;br /&gt;
* '''Konstruktor:''' Vytvoříme ukazatel Head, který nastavíme na null&lt;br /&gt;
* '''Modifikátor:''' Push vytvoří pro data nový prvek, který ukazuje na prvek Head (Head bude předchozí), a změní ukazatel Head na vytvořený prvek&lt;br /&gt;
* '''Selektor:''' Peek vrátí data prvku Head, pokud Head != null. Pop vrátí stejná data jako Peek, ale před návratem změní ukazatel Head na předchozí prvek (Head = Head.Previous)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Implementace na poli:&lt;br /&gt;
* Máme pole typu stejného jako data&lt;br /&gt;
* '''Konstruktor:''' Alokace pole a indexu Head, nastavení Head na -1&lt;br /&gt;
* '''Modifikátor:''' Push zvýší index Head o 1 a zapíše data do pole na tento index. Pokud je index mimo pole, zvětšení pole (např. 2x), a po té zápis&lt;br /&gt;
* '''Selektor:''' Peek vrátí prvek pole pod indexem Head, pokud Head &amp;gt;= 0. Pop jako peek, ale před návratem provede Head--, pokud Head &amp;gt;= 0.&lt;br /&gt;
&lt;br /&gt;
== Fronta ==&lt;br /&gt;
&lt;br /&gt;
Interface: operace Push, Pop, Front&lt;br /&gt;
* '''Enqueue''' vkládá data do fronty za sebe&lt;br /&gt;
* '''Dequeue''' vybírá nejdříve vložená data&lt;br /&gt;
* '''Front''' vrátí nejdříve vložená data bez výběru prvku ze struktury&lt;br /&gt;
= FIFO pamět (First In First Out)&lt;br /&gt;
 &lt;br /&gt;
[[Soubor:Fronta.jpg]]&lt;br /&gt;
&lt;br /&gt;
First: začátek fronty; Last: konec fronty&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Implementace objektově: &lt;br /&gt;
* Prvky obsahují data a ukazují na následující prvky fronty&lt;br /&gt;
* '''Konstruktor:''' Vytvoříme pouze ukazatele First a Last, ukazující na null.&lt;br /&gt;
* '''Modifikátor:''' Push vytvoří pro data nový prvek, upraví prvek Last (pokud != null) tak, aby ukazoval na tento prvek, a změní ukazatel Last na tento prvek. Je-li ukazatel First nastaven na null, nastaví tento také na vytvořený prvek.&lt;br /&gt;
* '''Selektor:''' Front vrátí data prvku First, pokud First != null. Pop vrátí stejná data jako Front, ale před návratem změní ukazatel First na následující prvek, pokud First != null (First = First.Next)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Implementace na poli (cyklicky):&lt;br /&gt;
Máme pole typu stejného jako data a indexy First a Last. Indexy neukazují přímo do pole, nýbrž je proveden přepočet (Index mod Delka pole)&lt;br /&gt;
abychom využili celé pole. Tato fronta má omezenou délku.&lt;br /&gt;
* '''Konstruktor:''' Alokace pole a indexů, nastavení Last na -1 a First na -1&lt;br /&gt;
* '''Modifikátor:''' Pokud ((Last + 1) mod Delka) != (First mod Delka), Push provede Last++ a zapíše data do pole na tento index, jinak chyba (plná fronta). Pokud First = -1, pak First = 0 (první prvek).&lt;br /&gt;
* '''Selektor:''' Front vrátí prvek pole pod indexem First, pokud First &amp;lt;= Last. Pop jako Front, ale před návratem provede First++.&lt;br /&gt;
&lt;br /&gt;
Speciálním případem je například prioritní fronta, která řadí prvky ve frontě podle priority&lt;br /&gt;
&lt;br /&gt;
== Seznam ==&lt;br /&gt;
 &lt;br /&gt;
Interface - Iterator nad seznamem: Add, Remove, Get; First, Next, IsLast, případně další (Previous, Last, IndexOf, ...)&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Seznam.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''Add''' vkládá data na pozici iterátoru. Složitost dle implementace.&lt;br /&gt;
* '''Remove''' maže data na pozici iterátoru&lt;br /&gt;
* '''Get''' vrátí data na pozici iteratoru&lt;br /&gt;
* '''First''' vrátí iterátor na začátek seznamu&lt;br /&gt;
* '''Next''' posune iterátor dále&lt;br /&gt;
* '''IsLast''' indikuje koncová prvek&lt;br /&gt;
* (Previous v obousměrných seznamech posune iterator na předchozí prvek)&lt;br /&gt;
* (Last posune iterator na poslední prvek)&lt;br /&gt;
* (IndexOf vyhledá prvek ve struktuře)&lt;br /&gt;
= struktura, do které je možné libovolně zapisovat a číst (na libovolné pozici)&lt;br /&gt;
 &lt;br /&gt;
Iterator: ukazatel do struktury&lt;br /&gt;
&lt;br /&gt;
Implementace objektově - nástřel: &lt;br /&gt;
&lt;br /&gt;
[[Soubor:Zasovnik-fronta-seznam-objektove.jpg]]&lt;br /&gt;
&lt;br /&gt;
Prvky ukazují na následující prvky seznamu. Iterátor je dobré implementovat tak, že ve skutečnosti ukazuje na předchozí prvek (Pokud tedy seznam není obousměrný, pak máme metodu Previous a je to jedno). Metoda add vloží prvek za prvek, na který ukazuje iterátor tak, že pouze upraví ukazatele prvků:&lt;br /&gt;
 &lt;br /&gt;
Remove je opačný proces, Get vrátí data (Tedy Iterator.Next.Data), První prvek seznamu si uložíme, abychom se mohli rychle vracet, stejně jako poslední prvek. Next provede Iterator.Next = Iterator.Next.Next. Kontrolujeme, zda nejsme mimo seznam.&lt;br /&gt;
&lt;br /&gt;
* Obousměrný seznam: Prvky mají i ukazatele na předchozí prvky, a je tedy možné se po nich pohybovat na obě strany.&lt;br /&gt;
* Kruhový seznam: Poslední prvek neukazuje na null, ale na první prvek. Tyto seznamy jsou použitelné ve speciálních případech (například nastavení segmentů sedmisegmentovky pro digitální hodiny)&lt;br /&gt;
&lt;br /&gt;
Implementace na poli (nástřel):&lt;br /&gt;
Pole má nevýhodu, že je nutné přesunout prvky doprava od iterétoru, pokud vkládáme prvky. Při mazání lze prvky posunout doleva, nebo do pole uložit hodnotu, která se zcela jistě nebude v poli nebude vyskytovat, nebo vytvořit stínové pole, ve kterém si smazané prvky označíme, a při posunu iterátoru je poté vynecháme. Tento přístup je dobrý pokud pole často upravujeme.&lt;br /&gt;
&lt;br /&gt;
{{fav-kiv-bzinf}}&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>147.228.209.161</name></author>	</entry>

	<entry>
		<id>https://512.cz/index.php?title=Pl%C3%A1nov%C3%A1n%C3%AD_%C3%BAloh_a_proces%C5%AF_v_d%C3%A1vkov%C3%BDch_syst%C3%A9mech</id>
		<title>Plánování úloh a procesů v dávkových systémech</title>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Pl%C3%A1nov%C3%A1n%C3%AD_%C3%BAloh_a_proces%C5%AF_v_d%C3%A1vkov%C3%BDch_syst%C3%A9mech"/>
				<updated>2016-06-08T13:13:21Z</updated>
		
		<summary type="html">&lt;p&gt;147.228.209.161: /* Multilevel Feedback */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Non-preemtivní plánování: proces si podrží kontrolu nad CPU dokud se jí nevzdá&lt;br /&gt;
* Preemtivní - proces lze přerušit během CPU burstu a naplánovat jiný&lt;br /&gt;
&lt;br /&gt;
Bere se ohled na:&lt;br /&gt;
* průchodnost (počet úloh dokončených za časovou jednotku)&lt;br /&gt;
* průměrnou dobu obrátky (průměrná doba od zadání úlohy do systému do dokončení úlohy)&lt;br /&gt;
* využití CPU&lt;br /&gt;
&lt;br /&gt;
== First-Come First-Served (FCFS) ==&lt;br /&gt;
&lt;br /&gt;
* Někdy používán název FIFO&lt;br /&gt;
* Zpracování podle času příchodu úlohy, „kdo dřív přijde, ten dřív mele“&lt;br /&gt;
* Nepreemptivní FCFS je nejjednodušší plánovací algoritmus (úloha běží dokud neskončí)&lt;br /&gt;
* Je spravedlivý&lt;br /&gt;
* Během I/O operací se CPU nevyužívá, ale přesto je blokováno stávajícím procesem&lt;br /&gt;
&lt;br /&gt;
== Shortest Job First (SJF) ==&lt;br /&gt;
&lt;br /&gt;
* Předpoklad, že je předem známá doba vykonávání úlohy&lt;br /&gt;
* Nepreemptivní, jedna fronta příchozích úloh, plánovač vybere vždy úlohu s nejkratší dobou běhu&lt;br /&gt;
* Nevýhodou je, že na dlouho trvající úlohy se nemusí vůbec dostat&lt;br /&gt;
&lt;br /&gt;
== Shortest Remaining Time (SRT) ==&lt;br /&gt;
&lt;br /&gt;
* Preemptivní varianta SJF&lt;br /&gt;
* Plánovač vždy vybere úlohu, jejíž zbývající doba běhu je nejkratší&lt;br /&gt;
* Např. právě prováděné úloze to bude trvat 10 min., do systému přijde úloha trvající 1 minutu - systém prováděnou úlohu pozastaví a nechá běžet novou úlohu&lt;br /&gt;
* Problém: možnost vyhladovění úloh&lt;br /&gt;
&lt;br /&gt;
== Multilevel Feedback ==&lt;br /&gt;
&lt;br /&gt;
* Je preemptivní&lt;br /&gt;
* N rozdílných prioritních úrovní, každá úroveň má svou frontu úloh&lt;br /&gt;
* Úloha vstoupí do systému s nejvyšší prioritou&lt;br /&gt;
* Na každé prioritní úrovni je stanoveno maximu času CPU, které může úloha na této úrovni obdržet&lt;br /&gt;
** Pokud úloha překročí limit, její priorita se sníží&lt;br /&gt;
** Na nejnižší úrovni může proces běžet neustále nebo může být překročení považováno za chybu&lt;br /&gt;
* Procesor obsluhuje nejvyšší neprázdnou frontu&lt;br /&gt;
* Výhoda: rozlišuje mezi I/O a CPU úlohami (upřednostňuje I/O)&lt;br /&gt;
&lt;br /&gt;
{{fav-kiv-bzinf}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>147.228.209.161</name></author>	</entry>

	</feed>