Multitasking

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 16. března 2021; kontroly vyžadují 9 úprav .

Multitasking ( anglicky  multitasking ) je vlastnost operačního systému nebo runtime prostředí poskytovat možnost paralelního (nebo pseudoparalelního ) zpracování několika úloh . Skutečný multitasking operačního systému je možný pouze v distribuovaných počítačových systémech .

Existují 2 typy multitaskingu [1] :

Multithreading  je specializovaná forma multitaskingu [1] .

Vlastnosti prostředí multitaskingu

Primitivní multitaskingová prostředí poskytují čisté „sdílení zdrojů“, kde je každému úkolu přiřazena specifická paměťová oblast a úkol je aktivován v přesně definovaných časových intervalech.

Pokročilejší multitaskingové systémy přidělují prostředky dynamicky, když úloha začíná v paměti nebo opouští paměť, v závislosti na její prioritě a na systémové strategii. Toto multitaskingové prostředí má následující vlastnosti:

Potíže s implementací multitaskingového prostředí

Hlavním problémem při implementaci multitaskingového prostředí je jeho spolehlivost, vyjádřená v ochraně paměti, zpracování selhání a přerušení , ochraně před zamrznutím a uváznutím .

Kromě spolehlivosti musí být multitaskingové prostředí efektivní. Náklady na prostředky na jeho údržbu by neměly: zasahovat do procesů, zpomalovat jejich práci, výrazně omezovat paměť.

Historie multitaskingových operačních systémů

Implementace multitaskingových operačních systémů byla zpočátku vážným technickým problémem, proto se zavedení multitaskingových systémů opozdilo a uživatelé dávali přednost jednoúlohovým systémům ještě dlouho po implementaci.

Později, když se objevilo několik úspěšných řešení, se multitaskingová prostředí začala zlepšovat a nyní se používají všude.

Poprvé byl multitasking operačního systému implementován při vývoji operačního systému Multics ( 1964 ). Jedním z prvních multitaskingových systémů byl OS/360 (1966 [2] ), používaný pro počítače IBM a jejich sovětské protějšky ES EVM . Vývoj systému byl značně zpožděn a IBM poprvé navrhla jednoúlohový DOS , aby uspokojila zákazníky před úplným uvedením OS / 360 do provozu. Systém byl kritizován kvůli nízké spolehlivosti a obtížnosti provozu.

V roce 1969 byl na základě Multics vyvinut systém UNIX s poměrně elegantním algoritmickým řešením problému multitaskingu. V současné době byly vytvořeny desítky operačních systémů založených na UNIXu.

Počítače PDP-11 a jejich sovětské protějšky SM-4 používaly multitaskingový systém RSX-11 (sovětským protějškem je SM EVM RTOS ) a TSX-PLUS systém distribuce času, který poskytuje omezené možnosti multitaskingu a čas pro více uživatelů. režim sdílení, emulující pro každého uživatele jednoúlohový RT-11 (sovětský analog - RAFOS ). Posledně jmenované řešení bylo velmi oblíbené díky nízké efektivitě a spolehlivosti plnohodnotného multitaskingového systému.

Šikovným řešením se ukázal být operační systém VMS , původně vyvinutý pro počítače VAX (sovětský ekvivalent je SM-1700 ) jako vývoj RSX-11.

První multimediální osobní počítač na světě Amiga 1000 ( 1984 ) byl původně navržen s plnou hardwarovou podporou pro preemptivní multitasking v reálném čase v AmigaOS . V tomto případě probíhal vývoj hardwaru a softwaru paralelně, což vedlo k tomu, že z hlediska kvantizace plánovače multitaskingu (1/50 sekundy na přepnutí kontextu) zůstal AmigaOS na osobních počítačích dlouhou dobu nepřekonaný .

Multitasking byl také poskytován společností Microsoft v operačních systémech Windows . Využití zkušeností VMS zajistilo systémům výrazně vyšší výkon a spolehlivost. Z hlediska doby multitaskingového přepínání kontextu (kvantizace) lze pouze tyto operační systémy srovnávat s AmigaOS a UNIX (a také jeho potomky, jako je linuxové jádro ).

Zajímavé je, že multitasking lze implementovat nejen v operačním, ale i jazykovém prostředí. Například specifikace programovacích jazyků Modula-2 a Ada vyžadují podporu pro multitasking mimo jakýkoli operační systém. V důsledku toho populární implementace programovacího jazyka TopSpeed ​​​​Modula-2 od JPI / Clarion v první polovině 90. let umožnila organizovat různé typy multitaskingu (kooperativní a preemptivní – viz níže) pro vlákna jednoho program v rámci tak zásadně jednoúlohového operačního systému, jakým je MS-DOS . To bylo provedeno zahrnutím kompaktního plánovače úloh do programového modulu obsahujícího obsluhu přerušení časovače [3] . Programovací jazyky, které mají tuto vlastnost, se někdy nazývají jazyky v reálném čase [4] .

Typy pseudoparalelního multitaskingu

Snadné přepínání

Typ multitaskingu, při kterém operační systém načítá dvě nebo více aplikací do paměti současně, ale pouze hlavní aplikaci je přidělen procesorový čas. Aby aplikace na pozadí fungovala, musí být aktivována. Takový multitasking lze implementovat nejen v operačním systému, ale také pomocí programů pro přepínání úloh. V této kategorii je známý program DESQview , který běžel pod DOSem a byl poprvé vydán v roce 1985.

Výhody: můžete používat již běžící programy napsané bez nutnosti multitaskingu.

Nevýhody: nemožné v neinteraktivních systémech, které fungují bez lidského zásahu. Interakce mezi programy je extrémně omezená.

Kolaborativní nebo kooperativní multitasking

Typ multitaskingu, ve kterém se další úloha spustí až poté, co se aktuální úloha výslovně prohlásila za připravenou poskytnout čas CPU jiným úlohám. Jako zvláštní případ je taková deklarace implikována při pokusu o zachycení již obsazeného objektu mutex (linuxové jádro) a také při čekání na příchod další zprávy ze subsystému uživatelského rozhraní (verze Windows až do 3.x včetně, stejně jako 16bitové aplikace ve Windows 9x ).

Kooperativní multitasking lze nazvat multitaskingem „druhé fáze“, protože používá pokročilejší techniky než jednoduché přepínání úloh implementované mnoha známými programy (jako je DOS Shell z MS-DOS 5.0). Jednoduchým přepnutím získá aktivní program veškerý čas CPU a aplikace na pozadí jsou zcela zmrazeny. Díky kooperativnímu multitaskingu může aplikace skutečně zabrat tolik času CPU, kolik uzná za vhodné. Všechny aplikace sdílejí čas CPU a pravidelně předávají řízení další úloze.

Výhody kooperativního multitaskingu: není potřeba chránit všechny sdílené datové struktury pomocí objektů, jako jsou kritické sekce a mutexy, což zjednodušuje programování, zejména portování kódu z prostředí s jedním úkolem do prostředí s více úkoly.

Nevýhody: neschopnost všech aplikací fungovat v případě chyby v jedné z nich, vedoucí k absenci volání operace „dej CPU čas“. Extrémně obtížná možnost implementace multitaskingové I/O architektury v jádře OS, která umožňuje procesoru provádět jednu úlohu, zatímco jiná úloha zahájila I/O operaci a čeká na své dokončení.

Preemptivní nebo preemptivní multitasking ( v reálném čase )

Typ multitaskingu, při kterém operační systém sám přenáší řízení z jednoho spustitelného programu na druhý v případě dokončení I/O operací, výskytu událostí v hardwaru počítače, vypršení časovačů a časových úseků nebo příjmu určitých signálů z jednoho programu do druhého. V tomto druhu multitaskingu lze procesor přepínat z provádění jednoho programu na provádění jiného bez jakéhokoli požadavku prvního programu a doslova mezi libovolnými dvěma instrukcemi v jeho kódu. Rozdělení času procesoru provádí plánovač procesů. Kromě toho může být každé úloze přiřazena určitá priorita uživatelem nebo samotným operačním systémem, což poskytuje flexibilní kontrolu nad rozdělením času procesoru mezi úkoly (můžete například snížit prioritu programu náročného na zdroje, snížení jeho rychlosti, ale zvýšení výkonu procesů na pozadí). Tento druh multitaskingu poskytuje rychlejší odezvu na akce uživatele.

výhody:

nedostatky:

Implementováno v takových operačních systémech, jako jsou:

Problémové situace v multitaskingových systémech

Hladovění

Časová prodleva od probuzení vlákna do jeho volání na procesoru, během které je v seznamu vláken připraveno ke spuštění. Vyskytuje se kvůli přítomnosti vláken s vyšší nebo stejnou prioritou, která jsou neustále spuštěna.

Negativním efektem je, že od probuzení vlákna do provedení další důležité operace dochází k časové prodlevě, což zdržuje provedení této operace a po ní práci mnoha dalších komponent.

Hladovění vytváří úzké hrdlo v systému a brání mu vyždímat z něj maximální výkon, omezený pouze hardwarovými úzkými hrdly.

Jakékoli hladovění nad 100% využití procesoru lze opravit zvýšením priority hladovějícího vlákna, možná dočasně.

Aby se zabránilo hladovění, operační systém zpravidla automaticky vyvolává vlákna s nízkou prioritou připravená ke spuštění, i když existují vlákna s vysokou prioritou, za předpokladu, že vlákno nebylo spuštěno po dlouhou dobu (~10 sekund). Vizuálně je tento obrázek většině uživatelů Windows dobře znám - pokud se v jednom z programů vlákno točilo donekonečna, přední okno funguje dobře, navzdory tomu vlákno spojené s předním oknem zvyšuje prioritu systému Windows. Zbytek oken se překresluje s velkými prodlevami, porcemi za vteřinu, protože jejich vykreslování v této situaci funguje pouze díky mechanismu prevence hladovění (jinak by hladověl navždy).

Podmínky závodu

Nedeterministické pořadí provádění dvou toků kódu, které zpracovávají stejná data a jsou prováděny ve dvou různých vláknech (úkolech). Vede k závislosti pořadí a správnosti provedení na náhodných faktorech.

Eliminováno přidáním nezbytných zámků a synchronizačních primitiv . Obvykle se jedná o snadno odstranitelnou závadu (zapomenutý zámek ).

Inverze priority

Vlákno L má nízkou prioritu, vlákno M má střední prioritu a vlákno H má vysokou prioritu. Vlákno L získá mutex a při provádění při držení mutexu je přerušeno vláknem M, které se z nějakého důvodu probudilo a má vyšší prioritu. Vlákno H se pokouší získat mutex.

Ve výsledné situaci vlákno H čeká, až vlákno M dokončí aktuální práci, protože zatímco vlákno M probíhá, vlákno L s nízkou prioritou nepřijímá řízení a nemůže uvolnit mutex.

Eliminováno zvýšením priority všech vláken, která získají daný mutex, na stejně vysokou hodnotu po dobu, po kterou je mutex držen. Některé implementace mutexu to dělají automaticky. Alternativně je vlákno, které již získalo mutex, povýšeno po pokusu o současné získání mutexu vláknem s vyšší prioritou.

Odkazy

Poznámky

  1. 1 2 [Herbert Schildt The Complete Java Reference, 7th Edition: Per. z angličtiny-M.: LLC "I. D. Williams, 2007, s. 253-254]
  2. Mealy GH, Witt BI, Clark WA Funkční struktura OS/360. IBM Systems Journal, 5, č. 1, 1966
  3. Beletsky Ya TopSpeed: Rozšířená verze jazyka Modula-2 pro osobní počítače IBM. - M.: "Inženýrství", 1993
  4. Young S. Algoritmické jazyky v reálném čase