<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>http://wiki.sps-pi.cz/index.php?action=history&amp;feed=atom&amp;title=Multitasking</id>
	<title>Multitasking - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.sps-pi.cz/index.php?action=history&amp;feed=atom&amp;title=Multitasking"/>
	<link rel="alternate" type="text/html" href="http://wiki.sps-pi.cz/index.php?title=Multitasking&amp;action=history"/>
	<updated>2026-05-04T19:22:43Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>http://wiki.sps-pi.cz/index.php?title=Multitasking&amp;diff=4940&amp;oldid=prev</id>
		<title>Bkolesnicenko: Založena nová stránka: &#039;&#039;&#039;Multitasking&#039;&#039;&#039; (z angličtiny, &#039;&#039;multi = mnoho, task = úloha&#039;&#039;) označuje v informatice schopnost [[Operační s…</title>
		<link rel="alternate" type="text/html" href="http://wiki.sps-pi.cz/index.php?title=Multitasking&amp;diff=4940&amp;oldid=prev"/>
		<updated>2010-06-11T08:19:34Z</updated>

		<summary type="html">&lt;p&gt;Založena nová stránka: &amp;#039;&amp;#039;&amp;#039;Multitasking&amp;#039;&amp;#039;&amp;#039; (z &lt;a href=&quot;/index.php?title=Angli%C4%8Dtina&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Angličtina (stránka neexistuje)&quot;&gt;angličtiny&lt;/a&gt;, &amp;#039;&amp;#039;multi = mnoho, task = úloha&amp;#039;&amp;#039;) označuje v &lt;a href=&quot;/index.php?title=Informatika_(po%C4%8D%C3%ADta%C4%8Dov%C3%A1_v%C4%9Bda)&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Informatika (počítačová věda) (stránka neexistuje)&quot;&gt;informatice&lt;/a&gt; schopnost [[Operační s…&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Multitasking&amp;#039;&amp;#039;&amp;#039; (z [[angličtina|angličtiny]], &amp;#039;&amp;#039;multi = mnoho, task = úloha&amp;#039;&amp;#039;) označuje v [[Informatika (počítačová věda)|informatice]] schopnost [[Operační systém|operačního systému]] provádět (přinejmenším zdánlivě) několik [[Proces (program)|procesů]] současně (tzv. &amp;#039;&amp;#039;&amp;#039;víceúlohový systém&amp;#039;&amp;#039;&amp;#039;). [[Kernel|Jádro]] operačního systému velmi rychle střídá na [[procesor]]u běžící procesy (tzv. [[změna kontextu]]), takže [[Uživatel (počítačový)|uživatel]] počítače má dojem, že běží současně.&lt;br /&gt;
&lt;br /&gt;
Dnešní [[operační systém]]y jsou typicky víceúlohové – sem patří např. [[Microsoft Windows]], [[Linux]] i [[Mac OS X]]. Naopak [[Disk Operating System|DOS]] je příkladem jednoúlohového systému, na kterém vždy běží pouze jediný [[počítačový program|program]] a teprve po jeho ukončení je možné spustit jiný.&lt;br /&gt;
&lt;br /&gt;
== Multiprogramování ==&lt;br /&gt;
Multiprogramování (anglicky &amp;#039;&amp;#039;multiprogramming&amp;#039;&amp;#039;) je technika vícenásobného zpracování, kdy se zdroje počítače dělí mezi více úloh. V počátcích bylo multiprogramování řešeno tak, že se úlohy vystřídaly v běhu v okamžiku, kdy jedna z nich čekala na pomalejší periferii, až dokončí [[Vstup/výstup|vstupně-výstupní]] operaci (požadavek na tisk, čtení z pásky, disku a podobně). V dnešní době operační systém střídá úlohy v rychlém sledu, aby obsluha počítače mohla se všemi plynule pracovat. Multiprogramování tak v současné době využívá multitasking jako hlavní nástroj. &lt;br /&gt;
&lt;br /&gt;
Programátor využívá multitasking zcela přirozeným způsobem, nemusí ho ve svém programu nijak řešit. Naopak může programovat tak, že předpokládá současný běh více procesů zároveň, využívá komunikaci mezi procesy, může problém vyřešit několika samostatnými programy, které jsou spuštěny současně a podobně.&lt;br /&gt;
&lt;br /&gt;
== Implementace ==&lt;br /&gt;
V počítači obvykle není k dispozici tolik procesorů, kolik úloh chceme spustit zároveň. Proto není možné zajistit, aby všechny spuštěné úlohy běžely současně. Místo toho je zajištěno, že se běžící úlohy na [[procesor]]u (resp. procesorech) počítače velmi rychle střídají a vytváří se tak zdání jejich současného běhu. Čas, po který je umožněno každé úloze běžet, se nazývá &amp;#039;&amp;#039;časové kvantum&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Na obrázku vpravo jsou znázorněny úlohy A, B a C, které se střídají v běhu na jednom procesoru, přičemž je naznačeno, že úloha může běžet kratší dobu, než je maximální časové kvantum.&lt;br /&gt;
&lt;br /&gt;
Podle způsobu přidělování a odebírání časových kvant úlohám se rozlišují dva základní způsoby multitaskingu:&lt;br /&gt;
&lt;br /&gt;
* nepreemptivní multitasking&lt;br /&gt;
* preemptivní multitasking&lt;br /&gt;
&lt;br /&gt;
=== Nepreemptivní multitasking ===&lt;br /&gt;
Nepreemptivní multitasking vyžaduje aktivní spoluúčast běžících úloh. Každá úloha je povinna dostatečně často [[Systémové volání|systémovým voláním]] předat řízení zpět operačnímu systému, který díky tomu může spustit jinou úlohu, která se po chvíli opět dobrovolně vzdá procesoru atd. Výhodou řešení je jednodušší implementace operačního systému. Podstatnou nevýhodou je skutečnost, že chybně naprogramovaná úloha, která nevrátí řízení zpět operačnímu systému, způsobí úplné zastavení systému i ostatních úloh.&lt;br /&gt;
&lt;br /&gt;
[[Microsoft Windows]], které nepoužívaly 32bitové jádro NT (tj. [[Windows 3.x]], [[Windows 95]], [[Windows 98]]), používaly nepreemptivní multitasking. Z marketingových důvodů byl však označován jako &amp;#039;&amp;#039;kooperativní multitasking&amp;#039;&amp;#039; s tím, že úloha, která byla na popředí (tj. měla aktivní okno), dostávala větší časová kvanta, než ostatní úlohy (které uživatel přímo neovládal, a proto mu to nevadilo, naopak systém vypadal jako výkonnější). Ve Windows 2.x (vydané v roce [[1988]]) a novějších bylo možné samostatně spouštět více DOS aplikací, které běžely v preemptivním multitaskingu, ale vlastní Windows aplikace běžely v kooperativním multitaskingu, takže chybně naprogramovaná aplikace způsobila „zatuhnutí“ celého systému. Nepreemptivní multitasking používal též [[Mac OS]] (používaný před [[Mac OS X]]) a [[RISC OS]].&lt;br /&gt;
&lt;br /&gt;
=== Preemptivní multitasking ===&lt;br /&gt;
V preemptivním multitaskingu o přidělování a odebírání procesoru jednotlivým úlohám plně rozhoduje [[operační systém]]. V pravidelných intervalech (typicky zhruba 100× až 1000× za sekundu) [[přerušení|přeruší]] provádění běžícího programu, vyhodnotí aktuální situaci (které úlohy žádají o přidělení procesoru, jejich priority atd.) a nechá běžet buď opět úlohu, kterou přerušil, nebo jinou úlohu, která má zájem o přidělení procesoru. I v preemptivním multitaskingu však může úloha dobrovolně požádat o přepnutí kontextu a vzdát se zbytku svého kvanta (úloha takzvaně „usne“ nebo se zablokuje provedením pomalé [[Vstup/výstup|vstupně-výstupní]] operace, jako je například čtení dat z [[pevný disk|pevného disku]]).&lt;br /&gt;
&lt;br /&gt;
Preemptivní multitasking používají [[Windows 95]] (jen pro [[32bitový|32bitové]] programy, zbytek běží nepreemptivně). Plně preemptivní je až řada [[Windows NT]]. Dále ho již od svého vzniku používá [[Mac OS X]], [[UN*X|unixová]] jádra (včetně [[Linux]]u) a další operační systémy.&lt;br /&gt;
&lt;br /&gt;
Výhodou tohoto řešení je, že nedochází k „zatuhnutí“ počítače, neboť i v případě, že se úloha zacyklí, odebere operační systém pomocí [[Časovač (počítač)|časovače]] dané úloze řízení a přidělí procesor jiné úloze. Nevýhodou je složitější implementace operačního systému a nutnost hardwarové podpory v procesoru počítače (viz [[privilegovaný režim]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Atomické operace ==&lt;br /&gt;
&lt;br /&gt;
U některých operací musí být zaručeno, že proběhnou celé, že jejich provádění nebude v polovině přerušeno např. přepnutím na jinou úlohu. Takové operace se označují jako &amp;#039;&amp;#039;[[atomická operace|atomické]]&amp;#039;&amp;#039;. Každá atomická operace musí proběhnout buď celá, nebo vůbec. Příkladem atomické operace je např. použití [[Semafor (synchronizace)|semaforu]] či jiného [[synchronizační primitivum|synchronizačního primitiva]]. Mezi zjištěním jeho stavu a následnou změnou nesmí být úloha přerušena, protože úloha, která by pak dostala řízení, by mohla stav semaforu změnit a došlo by k chybnému chování.&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
* Proces kontroluje, zda je na semaforu signál &amp;#039;&amp;#039;volno&amp;#039;&amp;#039;,&lt;br /&gt;
* Proces zjistí, že ano, proto se chystá nastavit &amp;#039;&amp;#039;stůj&amp;#039;&amp;#039; a vpustit vlak na trať.&lt;br /&gt;
* V tu chvíli ovšem dojde k přepnutí na jinou úlohu.&lt;br /&gt;
* Druhá úloha zkontroluje, že na semaforu je signál &amp;#039;&amp;#039;volno&amp;#039;&amp;#039;, nastaví &amp;#039;&amp;#039;stůj&amp;#039;&amp;#039; a z druhé strany vpustí vlak na trať.&lt;br /&gt;
* Dojde k přepnutí zpět na první úlohu.&lt;br /&gt;
* Ta dokončí nastavení na &amp;#039;&amp;#039;stůj&amp;#039;&amp;#039; a vpustí vlak na trať, čímž dojde ke kolizi.&lt;br /&gt;
&lt;br /&gt;
U kooperativního multitaskingu je atomicita takových operací zaručena prostě tím, že se v jejím průběhu nevolají systémové funkce, které by umožnily přepnutí kontextu. Jelikož nikdy jindy k přepnutí dojít nemůže, je tím zaručena správná funkce. U preemptivního multitaskingu je naopak potřeba takovému nevhodnému přepnutí explicitně bránit - aplikace používají [[synchronizační primitivum|synchronizační primitiva]] implementovaná buď jako služby operačního systému, nebo s využitím hardwarové podpory. U skutečného multitaskingu, tzn. při práci na více procesorech, se atomicita operací zajišťuje pouze pomocí hardwarových prostředků: procesor poskytuje instrukce současně zjišťující a měnící stav paměti, které jsou nejen atomické z hlediska samotného procesoru, ale navíc vyvolají hardwarovou synchronizaci mezi procesory. V dřívějších systémech postačovalo „zamknout“ paměťovou sběrnici, tedy zabránit ostatním procesorům v přístupu k paměti. Moderní systémy vyžadují navíc zneplatnit části cache ostatních procesorů.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zdroj: http://cs.wikipedia.org&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Uživatel:Bkolesnicenko|Bkolesnicenko]] 11. 6. 2010, 08:19 (UTC)&lt;/div&gt;</summary>
		<author><name>Bkolesnicenko</name></author>
	</entry>
</feed>