Preemption (výpočetní) - Preemption (computing)

V práci na počítači , preempce je akt dočasné přerušenívykonávající úkol , s úmyslem obnovení to v pozdější době. Toto přerušení provádí externí plánovač bez pomoci nebo spolupráce s úkolem. Tento preemptivní plánovač obvykle běží v nejvíce privilegovaném ochranném kruhu , což znamená, že přerušení a obnovení jsou považovány za vysoce bezpečné akce. Taková změna v aktuálně vykonávané úloze procesoru je známá jako přepínání kontextu .

Uživatelský režim a režim jádra

V jakémkoli daném návrhu systému nemusí být některé operace prováděné systémem předkupitelné. To se obvykle týká funkcí jádra a přerušení služby, které, pokud není povoleno jejich dokončení , mají tendenci vytvářet závodní podmínky vedoucí k zablokování . Vyloučení plánovače z předvolby úloh během zpracování funkcí jádra zjednodušuje návrh jádra na úkor odezvy systému . Rozdíl mezi uživatelským režimem a režimem jádra , který určuje úroveň oprávnění v systému, lze také použít k rozlišení, zda je úkol aktuálně preemptable.

Většina moderních operačních systémů má preemptivní jádra , která jsou navržena tak, aby umožňovala předvádění úkolů, i když jsou v režimu jádra. Příklady takových operačních systémů jsou Solaris 2.0/SunOS 5.0, Windows NT , jádro Linuxu (2.5.4 a novější), AIX a některé systémy BSD ( NetBSD , od verze 5).

Preemptivní multitasking

Termín preemptivní multitasking se používá k rozlišení víceúlohového operačního systému , který umožňuje předjímání úkolů, od kooperativního víceúlohového systému, kde procesy nebo úkoly musí být výslovně naprogramovány tak, aby poskytovaly, když nepotřebují systémové prostředky.

Jednoduše řečeno: Preemptivní multitasking zahrnuje použití mechanismu přerušení, který pozastaví aktuálně provádějící proces a vyvolá plánovač, aby určil, který proces by měl být spuštěn příště. Proto všechny procesy získají určité množství času CPU v daném okamžiku.

V preemptivním multitaskingu může jádro operačního systému také iniciovat přepnutí kontextu, aby bylo splněno omezení priority plánovací politiky , čímž se předchází aktivnímu úkolu. Preemption obecně znamená „předchozí zabavení“. Když úkol s vysokou prioritou v dané instanci zabere aktuálně spuštěný úkol, je známý jako preemptivní plánování.

Termín „preemptivní multitasking“ se někdy mylně používá, když je zamýšlený význam konkrétnější, místo toho se odkazuje na třídu plánovacích zásad známých jako časově sdílené plánování nebo sdílení času .

Preemptivní multitasking umožňuje počítačovému systému spolehlivěji zaručit každému procesu pravidelný „výsek“ provozní doby. Umožňuje také systému rychle se vypořádat s důležitými vnějšími událostmi, jako jsou příchozí data, což může vyžadovat okamžitou pozornost jednoho nebo jiného procesu.

V libovolnou konkrétní dobu lze procesy seskupit do dvou kategorií: ty, které čekají na vstup nebo výstup (nazývané „ I/O vázané “), a ty, které plně využívají CPU („ CPU vázáno “). V raných systémech by procesy často „ hlasovaly “ nebo „ zaneprázdnily čekáním “ při čekání na požadovaný vstup (například vstup na disk, klávesnici nebo síť). Během této doby proces neprováděl užitečnou práci, ale stále si udržoval úplnou kontrolu nad CPU. S příchodem přerušení a preemptivního multitaskingu mohly být tyto procesy vázané na I/O „blokovány“ nebo pozastaveny, dokud nedorazí potřebná data, což umožní jiným procesům využívat CPU. Protože příchod požadovaných dat by generoval přerušení, blokovaným procesům by bylo možné zaručit včasný návrat k provedení.

Ačkoli byly techniky multitaskingu původně vyvinuty tak, aby umožnily více uživatelům sdílet jeden počítač, brzy se ukázalo, že multitasking je užitečný bez ohledu na počet uživatelů. Mnoho operačních systémů, od sálových počítačů až po osobní počítače pro jednoho uživatele a systémy pro ovládání neuživatele (jako ty v robotických kosmických lodích ), uznalo užitečnost podpory více úloh najednou z různých důvodů. Multitasking umožňuje jednomu uživateli spouštět více aplikací současně nebo spouštět procesy „na pozadí“ při zachování kontroly nad počítačem.

Časový řez

Časové období, po které může proces běžet v systému preventivního multitaskingu, se obecně nazývá časový úsek nebo kvantum . Plánovač se spustí jednou pokaždé, když zvolíte další proces, který chcete spustit. Délka každého časového úseku může být kritická pro vyvažování výkonu systému a odezvy procesu - pokud je časový úsek příliš krátký, pak plánovač spotřebuje příliš mnoho času na zpracování, ale pokud je časový úsek příliš dlouhý, bude procesům trvat déle reagovat na vstup.

Je naplánováno přerušení, aby jádro operačního systému mohlo přepínat mezi procesy, když vyprší jejich časové úseky, což efektivně umožní sdílet čas procesoru mezi řadou úkolů, což dává iluzi, že se s těmito úkoly zabývá souběžně (současně). Operační systém, který takový design ovládá, se nazývá víceúlohový systém.

Podpora systému

Dnes téměř všechny operační systémy podporují preemptivní multitasking, včetně aktuálních verzí Windows , macOS , Linux (včetně Androidu ) a iOS .

Některé z prvních operačních systémů dostupných domácím uživatelům s preemptivním multitaskingem byly Sinclair QDOS (1984) a Amiga OS (1985). Oba běžely na mikroprocesorech rodiny Motorola 68000 bez správy paměti. Amiga OS používal dynamické načítání přemístitelných bloků kódu („ žurnály “ v žargonu Amigy) k preventivnímu multitaskingu všech procesů ve stejném plochém adresním prostoru.

Starší operační systémy pro PC, jako jsou MS-DOS a PC DOS , nepodporovaly víceúlohové zpracování vůbec, nicméně alternativní operační systémy jako MP/M-86 (1981) a Concurrent CP/M-86 podporovaly preemptivní multitasking. Jiné unixové systémy, včetně MINIX a Coherent, poskytovaly preemptivní multitasking na osobních počítačích z 80. let.

Pozdější verze DOS nativně podporující preemptivní multitasking/multithreading zahrnují Concurrent DOS , Multiuser DOS , Novell DOS (později Caldera OpenDOS a DR-DOS 7.02 a vyšší). Od souběžného DOS 386 mohli také spouštět více programů DOS souběžně ve virtuálních počítačích DOS .

Nejstarší verze systému Windows, aby podpořila omezenou formu preemptivní multitasking byl Windows / 386 2.0 , který používal Intel 80386 ‚S 8086 režim Virtuální spuštění DOS aplikace ve virtuálních 8086 strojů , běžně známý jako‚DOS krabice‘, který by mohl být předešel . Ve Windows 95, 98 a Me byly 32bitové aplikace vytvořeny preventivně spuštěním každé z nich v samostatném adresním prostoru, ale 16bitové aplikace zůstaly pro zpětnou kompatibilitu spolupracující. V systému Windows 3.1x (chráněný režim) běžely ovladače jádra a virtuálních zařízení preemptivně, ale všechny 16bitové aplikace nebyly preemptivní a sdílely stejný adresní prostor.

Preemptivní multitasking byl vždy podporován Windows NT (všechny verze), OS/2 (nativní aplikace), unixovými a unixovými systémy (jako Linux , BSD a macOS ), VMS , OS/360 a mnoha dalšími navrženými operačními systémy pro použití na akademických a středních až velkých obchodních trzích.

Ačkoli existovaly plány na upgrade kooperativního multitaskingu, který se nachází v klasickém systému Mac OS, na preemptivní model (a v systému Mac OS 9 existovalo preemptivní rozhraní API , i když v omezeném smyslu), od těchto se upustilo ve prospěch systému Mac OS X (nyní nazývaného macOS), který jako hybrid starého stylu Mac System a NeXTSTEP je operační systém založený na jádře Mach a částečně odvozený z BSD , který vždy poskytoval unixový preemptivní multitasking.

Viz také

Reference