<?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=95.47.186.95&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2F95.47.186.95</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=95.47.186.95&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2F95.47.186.95"/>
		<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/95.47.186.95"/>
		<updated>2026-10-21T17:29:00Z</updated>
		<subtitle>Z FAV wiki</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>https://512.cz/index.php?title=Stromov%C3%A9_struktury_(Avl,_BVS,_B,_Red-Black)_a_jejich_implementace</id>
		<title>Stromové struktury (Avl, BVS, B, Red-Black) a jejich implementace</title>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Stromov%C3%A9_struktury_(Avl,_BVS,_B,_Red-Black)_a_jejich_implementace"/>
				<updated>2015-06-10T12:41:59Z</updated>
		
		<summary type="html">&lt;p&gt;95.47.186.95: /* B-strom */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Strom je ADT uchovávající prvky v hierarchické struktuře předcůdce-následovník. Použití v reprezentaci znalostí a stavového prostoru, popis scény při zpracování obrazu, v databázových systémech, systémech souborů, pro rozhodovací stromy, komprese dat, raytracing. &lt;br /&gt;
&lt;br /&gt;
* '''Obecné stromy''' - uzly mohou mít libovolný počet následovníků. Implementace pomocí ukazatelů, ve vrcholech spojový seznam následovníku.&lt;br /&gt;
* '''N-ární stromy''' - uzel má nejvýše n následovníků. Implementace ukazateli, ve vrcholech pole následovníků. &lt;br /&gt;
* '''Binární stromy''' - uzel má nejvýše dva následovníky. Implementace ukazateli a výčtem následovníků, případne polem.&lt;br /&gt;
&lt;br /&gt;
Binární strom, kde nalevo od každého prvku jsou k prvky s nižším klíčem a napravo s vyšším (příp. obráceně), je binární vyhledávací strom (BVS). Kořenem obyčejného BVS je první vložený prvek, další prvky se vkládají nalevo nebo napravo od něj. Při postupném vkládání seřazené posloupnosti ale takový strom degraduje na lineární seznam, což zvyšuje složitost vyhledávání. Proto je na místě snaha o vyvážení stromu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AVL ==&lt;br /&gt;
&lt;br /&gt;
(Adelson-Velsky, Landis)&lt;br /&gt;
&lt;br /&gt;
BVS zachovávající pravidlo, že podstromy každého vrcholu se mohou výškou lišit nejvýše o 1. Vyvážení kontrolováno po každém vložení a výberu. Vrchol obsahuje navíc položku informující o rozdílu výšek obou jeho podstromu (-2, -1 levá strana, 0 vyvážený, 1, 2 pravá strana). Vložení stejné jako u BVS, po vložení prepocet rozdílu výšek (v každém kořenu na cestě z vloženého prvku do kořenu stromu sledujeme, jak se jeho vyvýžení změní). Při nevyváženosti v některém vrcholu rotace v tomto vrcholu.&lt;br /&gt;
&lt;br /&gt;
Rotace:&lt;br /&gt;
* '''Jednoduchá''' - nevyváženost způsobuje levá větev levého podstromu nebo pravá větev pravého podstromu. Kontrolujeme, zda kořen podstromu má stejné znamínko jako kořen nadstromu ???&lt;br /&gt;
* '''Dvojitá''' - nevyváženost způsobuje pravá vetev levého podstromu nebo levá větev pravého podstromu. Provedeme nejdříve rotaci spodní větve, a tím se dostaneme na předchozí problém. &lt;br /&gt;
&lt;br /&gt;
Odebrání stejné jako u BVS - nahrazení prvku symetrickým následovníkem, po odstranění prvku prepočty rozdílu výšek kontrola vyváženosti smerem ke kořeni (od původní pozice symetrického následovníka - prvky prohozeny a zde odstraňován).&lt;br /&gt;
&lt;br /&gt;
// přidat obrázek&lt;br /&gt;
&lt;br /&gt;
== Red-Black ==&lt;br /&gt;
&lt;br /&gt;
Další modifikace BVS. Vrcholy obsahují navíc položku s informací o barve (cervená nebo cerná). &lt;br /&gt;
Pravidla: &lt;br /&gt;
koren je vždy cerný, &lt;br /&gt;
cesty od korene do každého listu obsahují stejný pocet cerných vrcholu (cerná výška stromu), &lt;br /&gt;
cervený vrchol má pouze cerné následovníky. &lt;br /&gt;
&lt;br /&gt;
Vkládaný vrchol je na zacátku vždy cervený, postupne od jeho pozice ke koreni kontrola pravidel a prípadná náprava&lt;br /&gt;
&lt;br /&gt;
- přebarvením vrcholů: pokud je rodič červený a jeho bratr také, oba přebarvíme na černé a jejich rodiče na černé) &lt;br /&gt;
- pokud bratr rodiče červený není, přebarvíme na černo pouze rodiče a provedeme rotace &lt;br /&gt;
	 - pokud je rodič levým synem, a vkládaný také, provedeme rotaci do prava (rodič se stane kořenem)&lt;br /&gt;
	 - pokud je rodič levý, ale vkládaný pravý, provedeme nejprve rotaci do leva (vkládaný se stane rodičem) a tím získáme předchozí problém, tedy přebarvíme a zarotujeme do prava podle vkládaného prvku, který se stane kořenem. &lt;br /&gt;
&lt;br /&gt;
Rotace jsou stejné jako u AVL stromu. Odebrání - nahrazení symetrickým následovníkem, ten ale obarven barvou odebíraného vrcholu, a po té postupujeme stejně jako při vkládání, tedy od místa odebrání kontrola pravidel smerem ke koreni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== B-strom ==&lt;br /&gt;
&lt;br /&gt;
B-strom řádu '''m''' má v každém vrcholu nejvýše m následovníků. &lt;br /&gt;
&lt;br /&gt;
Pravidla:&lt;br /&gt;
* klíčů ve vrcholu je o 1 méně než následovníků&lt;br /&gt;
* všechny listy jsou stejně hluboko&lt;br /&gt;
* všechny vrcholy mají maximálně '''m''' následovníků&lt;br /&gt;
* všechny vrcholy kromě kořene mají minimálně m/2 následovníků&lt;br /&gt;
* kořen je buď list nebo má alespoň 2 následovníky&lt;br /&gt;
&lt;br /&gt;
Ve vrcholech klíce serazené, vrcholy razeny jako u BVS (menší klíce vlevo, vetší vpravo). Pri vkládání se pridávají klíce do listu, pokud je v listu prekrocen maximální pocet (pretecení stránky), je list rozdelen uprostred a prostrední klíc vložen do rodice (zde opet kontrola prekrocení poctu). Odebereme-li klíc z listu a ten má potom príliš málo podtecení stránky), muže si vypujcit od sousedu (klíc z rodice do vrcholu, klíc ze souseda do rodice), pokud sousedi mají minimální pocet, dojde ke sloucení vrcholu s jedním sousedem a klícem z rodice. Pri odebírání z vnitrních vrcholu je nutné místo vždy zaplnit - klíc od potomka. Nemají-li potomci dost klícu, sloucí se dva potomci do jednoho. Implementace ukazateli s následovníky seznamem nebo polem, prípadne pomocí dvourozmerných polí (jedno pro klíce, jedno pro indexy následovníku, index korenu).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>95.47.186.95</name></author>	</entry>

	<entry>
		<id>https://512.cz/index.php?title=Prost%C5%99edky_pro_synchronizaci_proces%C5%AF</id>
		<title>Prostředky pro synchronizaci procesů</title>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Prost%C5%99edky_pro_synchronizaci_proces%C5%AF"/>
				<updated>2015-06-10T11:51:16Z</updated>
		
		<summary type="html">&lt;p&gt;95.47.186.95: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zakázání přerušení&lt;br /&gt;
* V systému se sdílením času přepíná CPU mezi procesy pouze jako důsledek přerušení&lt;br /&gt;
* Zakážeme-li přerušení, k přepínání nedochází&lt;br /&gt;
* Nejjednodušší řešení, možné pouze v jednoprocesorovém systému&lt;br /&gt;
* Není dovoleno v uživatelském režimu&lt;br /&gt;
&lt;br /&gt;
Řešení s aktivním čekáním&lt;br /&gt;
Základní předpoklady o systému:&lt;br /&gt;
# Zápis a čtení ze společné datové oblasti jsou nedělitelné operace&lt;br /&gt;
# Kritické sekce nemohou mít přiřazenou prioritu&lt;br /&gt;
# Relativní rychlost procesů je neznámá&lt;br /&gt;
# Proces se může pozastavit mimo kritickou sekci&lt;br /&gt;
&lt;br /&gt;
Průběžně se testuje, zra už může proces do kritické sekce vstoupit - plýtvání časem CPU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Petersonovo řešení&lt;br /&gt;
* Na začátku není v kritické sekci žádný proces&lt;br /&gt;
* Proces 0 volá enter_CS(0)&lt;br /&gt;
** Nastaví interested[0]:=true, turn:=0;&lt;br /&gt;
** Protože interested[1]=false, nebude čekat ve smyčce&lt;br /&gt;
* Pokud proces 1 volá enter_CS(1)&lt;br /&gt;
** Nastaví interested[1]:=true, turn:=1;&lt;br /&gt;
** Bude čekat ve smyčce, dokud se interested[0] nenastaví na false (voláním leave_CS(0))&lt;br /&gt;
* Co kdyby oba procesy volaly enter_CS téměř současně?&lt;br /&gt;
** Oba nastaví interested na true&lt;br /&gt;
** Oba nastaví turn na své číslo; „téměř souběžný zápis“ se ale provede sekvenčně, tj. nejdříve nastaví turn jeden, hodnota bude přepsána druhým&lt;br /&gt;
** Oba se dostanou do while, proces 0 projde, proces 1 aktivně čeká&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spin-lock s instrukcí TSL&lt;br /&gt;
&lt;br /&gt;
Většina současných počítačů má instrukci, která otestuje hodnotu a nastaví paměťové místo v jedné nedělitelné operaci (TSL - „Test and Set Lock“) - HW podpora&lt;br /&gt;
&lt;br /&gt;
* Proměnná zámek - na počátku 0&lt;br /&gt;
* Proces, který chce vstoupit do KS otestuje&lt;br /&gt;
** Pokud 0 nastaví na 1 a vstoupí do KS&lt;br /&gt;
** Pokud 1 čeká&lt;br /&gt;
* Problém časového souběhu (pokud by TSL nebyla atomická):&lt;br /&gt;
** Jeden proces přečte, vidí 0&lt;br /&gt;
** Druhý proces je naplánován, přečte, vidí 0, nastaví na 1, vstoupí do KS&lt;br /&gt;
** Po naplánování první zapíše 1 a máme 2 procesy v KS&lt;br /&gt;
* Řešení vyžaduje HW podporu&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Další možnosti&lt;br /&gt;
* [[Semafory, jejich použití a implementace|Semafory]]&lt;br /&gt;
* Mutexy - někdy nepotřebujeme použít schopnost semaforů čítat, tj. stačila by nám pouze jejich schopnost zajistit vzájemné vyloučení =&amp;gt; mutex&lt;br /&gt;
* [[Monitory]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předávání zpráv - primitiva send a receive&lt;br /&gt;
# Čeká-li primitivum send na převzetí zprávy příjemcem, je blokující (synchronní). Ve většině systémů je neblokující.&lt;br /&gt;
# Pokud při zavolání recese není ve frontě žádná zpráva, může se recese buď zablokovat, nebo se může vrátit s chybou. Ve většině systémů je blokující.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Synchronizační primitiva ==&lt;br /&gt;
 &lt;br /&gt;
jsou v operačních systémech prostředky, umožňující zároveň běžícím&lt;br /&gt;
aplikacím ošetřit současný přístup ke sdíleným prostředkům. Ve smyslu algoritmu se jedná o rozhraní&lt;br /&gt;
a jeho implementace není důležitá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chybné použití synchronizačních primitiv může vést k jejich '''neúčinnosti''' (tedy k prostředku stejně&lt;br /&gt;
mohou přistoupit dva procesy najednou) nebo k '''deadlocku''' (vzájemnému zablokování).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Deadlock''' (česky také uváznutí) je odborný výraz pro situaci, kdy úspěšné dokončení nějaké akce je&lt;br /&gt;
podmíněno předchozím dokončením jiné akce, přičemž tato jiná akce může být dokončena až po&lt;br /&gt;
dokončení původní akce. Vzniká paradox, často označovaný jako ''Co bylo dříve? Slepice nebo vejce?''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V počítači se jedná o zablokování procesů (případně vláken) způsobené čekáním na synchronizačních&lt;br /&gt;
primitivech. Obvykle k němu dochází v důsledku chyby při jejich programování. Pokud uváznutí&lt;br /&gt;
nastane, řeší se například zrušením transakce (rollback) nebo násilným ukončením procesů.&lt;br /&gt;
Některé systémy spoléhají na to, že deadlock nastává zřídka a uživatel si pomůže sám.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== K uváznutí dojde jen při splnění všech následujících podmínek: ===&lt;br /&gt;
&lt;br /&gt;
* '''Vzájemné vyloučení (Mutual exclusion)'''&lt;br /&gt;
Prostředek může v jednom okamžiku používat jenom jeden proces (jinak dojde k chybě).&lt;br /&gt;
* '''Drž a čekej (Hold &amp;amp; wait)'''&lt;br /&gt;
Proces může žádat o další prostředky, i když už má nějaké přiděleny.&lt;br /&gt;
* '''Neodnímatelnost (No preemption)'''&lt;br /&gt;
Jakmile proces zmíněný prostředek vlastní, nelze mu ho bezpečně odejmout, musí ho sám vrátit.&lt;br /&gt;
* '''Čekání do kruhu (Circular wait)'''&lt;br /&gt;
Je možné uzavřít cyklus z procesů čekající každý na svého předchůdce – respektive k deadlocku&lt;br /&gt;
dojde, jakmile je tento cyklus uzavřen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mezi synchronizační primitiva patří '''zámek''' a jejich zobecnění '''semafory''', '''fronty zpráv''' a '''monitor'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Zámky a semafory''' bývají implementovány operačním systémem pomocí atomických operací na&lt;br /&gt;
sdílené paměti a plánovače.&lt;br /&gt;
&lt;br /&gt;
Pro synchronizaci v paralelním programování stačí atomické operace na sdílené paměti (čekají na&lt;br /&gt;
sebe procesy na různých procesorech a tedy mohou čekat aktivně) a je možné je implementovat i bez&lt;br /&gt;
pomoci operačního systému.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fronty zpráv''' jsou primitivní operací v případě paralelního programování, ale je možné je&lt;br /&gt;
implementovat v operačním systému i na jednom procesoru.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Monitor''' je možné realizovat pouze s podporou programovacího jazyka.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Korektní paralelní program - Nutné podmínky&lt;br /&gt;
# Dva procesy se nesmí nacházet současně ve stejné sdružené sekci.&lt;br /&gt;
# Žádné předpoklady nesmí být kladeny na rychlost a počet procesorů.&lt;br /&gt;
# Pokud proces běžící mimo kritickou sekci nesmí být blokován ostatní procesy.&lt;br /&gt;
# Žádný proces nesmí do nekonečna čekat na vstup do kritické sekce&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>95.47.186.95</name></author>	</entry>

	<entry>
		<id>https://512.cz/index.php?title=Probl%C3%A9m_uv%C3%ADznut%C3%AD_proces%C5%AF,_graf_alokace_zdroj%C5%AF</id>
		<title>Problém uvíznutí procesů, graf alokace zdrojů</title>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Probl%C3%A9m_uv%C3%ADznut%C3%AD_proces%C5%AF,_graf_alokace_zdroj%C5%AF"/>
				<updated>2015-06-10T11:25:43Z</updated>
		
		<summary type="html">&lt;p&gt;95.47.186.95: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;V množině procesů nastalo uvíznutí, jestliže každý proces množiny čeká na událost, kterou může způsobit pouze jiný proces množiny. Protože všechny čekají, žádný z nich událost nevygeneruje, nevzbudí jiný proces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Podmínky vzniku uvíznutí ==&lt;br /&gt;
(musejí být splněny všechny 4, 1-3 jsou předpoklad pro 4):&lt;br /&gt;
# Vzájemné vyloučení: každý zdroj je buď dostupný, nebo je výhradně přiřazen právě jednomu procesu&lt;br /&gt;
# „hold and wait“: proces držící výhradně přiřazené zdroje může požadovat další zdroje&lt;br /&gt;
# Nemožnost odejmutí: jednomu přiřazené zdroje nemohou být procesu násilně odejmuty&lt;br /&gt;
# Cyklické čekání: musí být cyklický řetězec dvou nebo více procesů, kde každý z nich čeká na zdroj držený dalším členem&lt;br /&gt;
&lt;br /&gt;
Tyto 4 podmínky mohou být modelovány pomocí orientovaných grafů = ''graf alokace zdrojů''.&lt;br /&gt;
&lt;br /&gt;
Graf má 2 typy uzlů:&lt;br /&gt;
* proces - zobrazujeme jako kruh&lt;br /&gt;
* zdroj - zobrazujeme jako čtverec&lt;br /&gt;
Význam hran:&lt;br /&gt;
* od zdroje k procesu: zdroj držen procesem&lt;br /&gt;
* od procesu ke zdroji: proces je blokován čekáním na zdroj&lt;br /&gt;
Cyklus v grafu je nutnou a postačující podmínkou pro vznik uvíznutí&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Alokace-zdroju.jpg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Řešení zablokování ==&lt;br /&gt;
&lt;br /&gt;
# '''Pštrosí algoritmus''' - Zablokování se ani nedetekuje, ani se mu nezabraňuje, ani se neodstraňuje, Uživatel sám rozhodne o řešení (kill). Nespotřebovává prostředky OS - nemá režii ani neomezuje podmínky provozu. (Nejčastější řešení - Unix, Windows)&lt;br /&gt;
# '''Detekce a zotavení''' - Hledá kružnici v orientovaném grafu (hrany vedou od procesu, který čeká, k procesu, který prostředek vlastní), pokud tam je kružnice, nastalo zablokování a je třeba ho řešit:&lt;br /&gt;
#* Odebrání prostředku - dohled operátora, pouze na přechodnou dobu&lt;br /&gt;
#* Zabíjení procesů z cyklu (resp. mimo cyklus vlastnící identický prostředek)&lt;br /&gt;
#* Rollback (OS ukládá stav procesů, při zablokování se některé procesy vrátí do předchozího stavu =&amp;gt; ztracena práce... obdoba u DB)&lt;br /&gt;
# '''Vyhýbání se''' - Bezpečný stav (procesy/prostředky nejsou zablokovány, existuje cesta, jak uspokojit všechny požadavky na prostředky spouštěním procesů v jistém pořadí); Viď. bankéřův algoritmus. Nutné je předem znát všechny prostředky, které budou programy potřebovat; OS pak dává prostředky tomu, který je nejblíž svému maximu potřeby a navíc pro který je prostředků dost na dokončení. Dnes se moc nepoužívá.&lt;br /&gt;
# P'''ředcházení (prevence)''' - napadení jedné z Coffmanových podmínek&lt;br /&gt;
# '''Vzájemné vyloučení''' - spooling (prostriedky spravuje jeden systemový proces, ktory dohliada na to, aby jeho stav bol konzistentny (tiskarna) - pozor na místo na disku)&lt;br /&gt;
# '''Drž a čekej''' - žádat o všechny prostředky před startem procesu. Nejprve všechno uvolnit a pak znovu žádat o všechny najednou&lt;br /&gt;
# '''Neodnímatelnost''' - vede k chaosu&lt;br /&gt;
# '''Čekání do kruhu''' - nejvýše jeden prostředek - všechny prostředky jednoznačně očíslovány, procesy mohou žádat o prostředky jen ve vzestupném pořadí&lt;br /&gt;
# '''Dvojfázové zamykání''' - nejprve postupně všechno zamykám (první fáze). Potom se může pracovat se zamčenými prostředky - a na závěr se už jen odemyká (druhá fáze) - viď transakční spracování u databází ((striktní/konzervativní) dvoufázové zpracování)&lt;br /&gt;
&lt;br /&gt;
''Bankéřův algoritmus'': Bankéř má klienty a těm slíbil jistou výšku úvěru. Bankéř ví, že ne všichni klienti potřebují plnou výši úvěru najednou. Klienti občas navštíví banku a žádají postupně o prostředky do maximální výšky úvěru. Až klient skončí s obchodem, vrátí bance vypůjčené peníze. Bankéř peníze půjčí pouze tehdy, zůstane-li banka v bezpečném stavu. &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>95.47.186.95</name></author>	</entry>

	<entry>
		<id>https://512.cz/index.php?title=Probl%C3%A9m_uv%C3%ADznut%C3%AD_proces%C5%AF,_graf_alokace_zdroj%C5%AF</id>
		<title>Problém uvíznutí procesů, graf alokace zdrojů</title>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Probl%C3%A9m_uv%C3%ADznut%C3%AD_proces%C5%AF,_graf_alokace_zdroj%C5%AF"/>
				<updated>2015-06-10T11:21:54Z</updated>
		
		<summary type="html">&lt;p&gt;95.47.186.95: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;V množině procesů nastalo uvíznutí, jestliže každý proces množiny čeká na událost, kterou může způsobit pouze jiný proces množiny. Protože všechny čekají, žádný z nich událost nevygeneruje, nevzbudí jiný proces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Podmínky vzniku uvíznutí ==&lt;br /&gt;
(musejí být splněny všechny 4, 1-3 jsou předpoklad pro 4):&lt;br /&gt;
# Vzájemné vyloučení: každý zdroj je buď dostupný, nebo je výhradně přiřazen právě jednomu procesu&lt;br /&gt;
# „hold and wait“: proces držící výhradně přiřazené zdroje může požadovat další zdroje&lt;br /&gt;
# Nemožnost odejmutí: jednomu přiřazené zdroje nemohou být procesu násilně odejmuty&lt;br /&gt;
# Cyklické čekání: musí být cyklický řetězec dvou nebo více procesů, kde každý z nich čeká na zdroj držený dalším členem&lt;br /&gt;
&lt;br /&gt;
Tyto 4 podmínky mohou být modelovány pomocí orientovaných grafů = ''graf alokace zdrojů''.&lt;br /&gt;
&lt;br /&gt;
Graf má 2 typy uzlů:&lt;br /&gt;
* proces - zobrazujeme jako kruh&lt;br /&gt;
* zdroj - zobrazujeme jako čtverec&lt;br /&gt;
Význam hran:&lt;br /&gt;
* od zdroje k procesu: zdroj držen procesem&lt;br /&gt;
* od procesu ke zdroji: proces je blokován čekáním na zdroj&lt;br /&gt;
Cyklus v grafu je nutnou a postačující podmínkou pro vznik uvíznutí&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Alokace-zdroju.jpg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Řešení zablokování ==&lt;br /&gt;
&lt;br /&gt;
# Pštrosí algoritmus - Zablokování se ani nedetekuje, ani se mu nezabraňuje, ani se neodstraňuje, Uživatel sám rozhodne o řešení (kill). Nespotřebovává prostředky OS - nemá režii ani neomezuje podmínky provozu. (Nejčastější řešení - Unix, Windows)&lt;br /&gt;
# Detekce a zotavení - Hledá kružnici v orientovaném grafu (hrany vedou od procesu, který čeká, k procesu, který prostředek vlastní), pokud tam je kružnice, nastalo zablokování a je třeba ho řešit:&lt;br /&gt;
#* Odebrání prostředku - dohled operátora, pouze na přechodnou dobu&lt;br /&gt;
#* Zabíjení procesů z cyklu (resp. mimo cyklus vlastnící identický prostředek)&lt;br /&gt;
#* Rollback (OS ukládá stav procesů, při zablokování se některé procesy vrátí do předchozího stavu $ \Rightarrow$ ztracena práce... obdoba u DB)&lt;br /&gt;
# Vyhýbání se - Bezpečný stav (procesy/prostředky nejsou zablokovány, existuje cesta, jak uspokojit všechny požadavky na prostředky spouštěním procesů v jistém pořadí); Viď. bankéřův algoritmus. Nutné je předem znát všechny prostředky, které budou programy potřebovat; OS pak dává prostředky tomu, který je nejblíž svému maximu potřeby a navíc pro který je prostředků dost na dokončení. Dnes se moc nepoužívá.&lt;br /&gt;
# Předcházení (prevence) - napadení jedné z Coffmanových podmínek&lt;br /&gt;
# Vzájemné vyloučení - spooling (prostriedky spravuje jeden systemový proces, ktory dohliada na to, aby jeho stav bol konzistentny (tiskarna) - pozor na místo na disku)&lt;br /&gt;
# Drž a čekej - žádat o všechny prostředky před startem procesu. Nejprve všechno uvolnit a pak znovu žádat o všechny najednou&lt;br /&gt;
# Neodnímatelnost - vede k chaosu&lt;br /&gt;
# Čekání do kruhu - nejvýše jeden prostředek - všechny prostředky jednoznačně očíslovány, procesy mohou žádat o prostředky jen ve vzestupném pořadí&lt;br /&gt;
# Dvojfázové zamykání - nejprve postupně všechno zamykám (první fáze). Potom se může pracovat se zamčenými prostředky - a na závěr se už jen odemyká (druhá fáze) - viď transakční spracování u databází ((striktní/konzervativní) dvoufázové zpracování)&lt;br /&gt;
&lt;br /&gt;
Bankéřův algoritmus: Bankéř má klienty a těm slíbil jistou výšku úvěru. Bankéř ví, že ne všichni klienti potřebují plnou výši úvěru najednou. Klienti občas navštíví banku a žádají postupně o prostředky do maximální výšky úvěru. Až klient skončí s obchodem, vrátí bance vypůjčené peníze. Bankéř peníze půjčí pouze tehdy, zůstane-li banka v bezpečném stavu. &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>95.47.186.95</name></author>	</entry>

	</feed>