Počítačový multitasking - Computer multitasking

Moderní desktopové operační systémy jsou schopné zpracovávat velké množství různých procesů současně. Tento snímek obrazovky ukazuje Linux Mint běžící současně na desktopovém prostředí Xfce , Firefoxu , kalkulačkovém programu, vestavěném kalendáři, Vim , GIMP a VLC media player .
Možnosti multitaskingu systému Microsoft Windows 1.0 1 vydané v roce 1985, zde zobrazeny spuštěné programy MS-DOS Executive a Calculator

Při výpočtu , multitasking je souběžné provádění více úloh (také známý jako procesy ) po určité časové období. Nové úkoly mohou přerušit již spuštěné před jejich dokončením, místo aby čekaly na jejich ukončení. Výsledkem je, že počítač provádí segmenty více úkolů prokládaným způsobem, zatímco úkoly sdílejí společné prostředky zpracování, jako jsou centrální procesorové jednotky (CPU) a hlavní paměť . Multitasking automaticky přeruší spuštěný program, uloží jeho stav (dílčí výsledky, obsah paměti a obsah registru počítače) a načte uložený stav jiného programu a přenese do něj řízení. Tento " kontextový přepínač " může být inicializován v pevných časových intervalech ( preventivní multitasking ), nebo může být spuštěný program kódován pro signál dohledovému softwaru, když může být přerušen ( kooperativní multitasking ).

Multitasking nevyžaduje paralelní provádění více úkolů přesně ve stejnou dobu; místo toho umožňuje více než jednomu úkolu postupovat za dané časové období. I na víceprocesorových počítačích umožňuje multitasking spouštět mnohem více úkolů, než je tomu u CPU.

Multitasking je běžnou funkcí počítačových operačních systémů. Umožňuje efektivnější využití hardwaru počítače; tam, kde program čeká na nějakou externí událost, jako je vstup uživatele nebo přenos vstupu/výstupu s periferií, může být centrální procesor stále používán s jiným programem. V systému sdílení času používá více lidských operátorů stejný procesor, jako by byl vyhrazen pro jejich použití, zatímco v zákulisí počítač slouží mnoha uživatelům multitaskingem jejich jednotlivých programů. V multiprogramovacích systémech běží úloha, dokud nemusí čekat na externí událost nebo dokud plánovač operačního systému násilně nevymění spuštěnou úlohu z CPU. Systémy v reálném čase , jako jsou systémy určené k řízení průmyslových robotů, vyžadují včasné zpracování; jeden procesor může být sdílen mezi výpočty pohybu stroje, komunikací a uživatelského rozhraní.

Víceúlohové operační systémy často obsahují opatření ke změně priority jednotlivých úkolů, aby důležité úlohy získaly více času procesoru než ty, které jsou považovány za méně významné. V závislosti na operačním systému může být úkol tak velký jako celý aplikační program nebo může být tvořen menšími vlákny, která provádějí části celkového programu.

Procesor určený pro použití s ​​víceúlohovými operačními systémy může obsahovat speciální hardware pro bezpečnou podporu více úkolů, jako je ochrana paměti a ochranné kroužky, které zajišťují, že dozorový software nemůže být poškozen nebo rozvrácen chybami programu v uživatelském režimu.

Pojem „multitasking“ se stal mezinárodním pojmem, protože stejné slovo se používá v mnoha dalších jazycích, jako je němčina, italština, holandština, dánština a norština.

Multiprogramování

V počátcích výpočetní techniky byl čas CPU drahý a periferní zařízení byla velmi pomalá. Když počítač spustil program, který potřeboval přístup k periferii, centrální procesorová jednotka (CPU) by musela zastavit provádění programových pokynů, zatímco periferie zpracovávala data. To bylo obvykle velmi neefektivní.

Prvním počítačem využívajícím multiprogramovací systém byl britský Leo III vlastněný J. Lyonsem a spol. Během dávkového zpracování bylo do paměti počítače načteno několik různých programů a první začal běžet. Když první program dosáhl instrukce čekající na periferii, kontext tohoto programu byl uložen a druhý program v paměti dostal šanci spustit. Proces pokračoval, dokud všechny programy neskončily.

Použití multiprogramování bylo vylepšeno příchodem virtuální paměti a technologie virtuálních strojů , která jednotlivým programům umožňovala využívat paměť a prostředky operačního systému, jako by jiné souběžně běžící programy pro všechny praktické účely neexistovaly.

Multiprogramování neposkytuje žádnou záruku, že program poběží včas. První program může skutečně fungovat několik hodin bez nutnosti přístupu k periferii. Jelikož na interaktivním terminálu nečekali žádní uživatelé, nebyl to žádný problém: uživatelé odevzdali balíček děrných karet operátorovi a o několik hodin později se vrátili pro vytištěné výsledky. Multiprogramování výrazně zkrátilo čekací doby při zpracování více dávek.

Kooperativní multitasking

Počáteční víceúlohové systémy používaly aplikace, které si navzájem dobrovolně předávaly čas. Tento přístup, který byl nakonec podporován mnoha počítačovými operačními systémy , je dnes znám jako kooperativní multitasking. Ačkoli se nyní ve větších systémech používá jen zřídka, s výjimkou specifických aplikací, jako je CICS nebo subsystém JES2 , byl kooperativní multitasking kdysi jediným plánovacím schématem používaným systémem Microsoft Windows a Classic Mac OS, které umožňovalo spuštění více aplikací současně. Kooperativní multitasking se v systémech RISC OS používá dodnes .

Protože kooperativně víceúlohový systém spoléhá na to, že se každý proces pravidelně vzdává času jiným procesům v systému, jeden špatně navržený program může sám spotřebovat veškerý čas CPU, a to buď prováděním rozsáhlých výpočtů, nebo zaneprázdněným čekáním ; obojí by způsobilo zablokování celého systému . V serverovém prostředí jde o nebezpečí, kvůli kterému je celé prostředí nepřijatelně křehké.

Preemptivní multitasking

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. Operační systémy byly vyvinuty tak, aby využívaly výhod těchto hardwarových schopností a preventivně běhaly více procesů. Preemptivní multitasking byl implementován v PDP-6 Monitor a MULTICS v roce 1964, v OS/360 MFT v roce 1967 a v Unixu v roce 1969 a byl k dispozici v některých operačních systémech pro počítače tak malé jako PDP-8 DEC; je základní funkcí všech unixových operačních systémů, jako jsou Linux , Solaris a BSD s jejich deriváty , a také moderních verzí Windows.

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 primitivních systémech software často „ hlasoval “ nebo „ zaneprázdněn “ během čekání na požadovaný vstup (například vstup na disk, klávesnici nebo síť). Během této doby systém nevykonával užitečnou práci. S příchodem přerušení a preemptivního multitaskingu mohly být 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í.

Nejdříve preemptivní multitasking OS dostupný domácím uživatelům byl Sinclair QDOS na Sinclair QL , vydaný v roce 1984, ale stroj si koupilo jen velmi málo lidí. Commodore's Amiga , vydaná následující rok, byl prvním komerčně úspěšným domácím počítačem, který tuto technologii využíval, a díky svým multimediálním schopnostem je jasným předchůdcem současných osobních počítačů s více úkoly. Společnost Microsoft učinila z preventivního multitaskingu základní funkci svého vlajkového operačního systému na počátku 90. let při vývoji Windows NT 3.1 a poté Windows 95 . To bylo později přijato na Apple Macintosh Mac OS X, který, jako Unix-jako operační systém, používá preemptivní multitasking pro všechny nativní aplikace.

Podobný model se používá v systému Windows 9x a Windows NT , kde se nativní 32bitové aplikace preventivně multitaskují. 64bitové edice Windows, a to jak pro architektury x86-64, tak pro Itanium , již nepodporují starší 16bitové aplikace, a proto zajišťují preemptivní multitasking pro všechny podporované aplikace.

Reálný čas

Dalším důvodem pro multitasking bylo navrhování výpočetních systémů v reálném čase , kde existuje řada možná nesouvisejících vnějších činností, které je třeba řídit jediným procesorovým systémem. V takových systémech je hierarchický systém přerušení spojen s prioritizací procesů, aby se zajistilo, že klíčovým aktivitám bude poskytnut větší podíl dostupného času procesu .

Vícevláknové

Protože multitasking výrazně zlepšil propustnost počítačů, programátoři začali implementovat aplikace jako sady spolupracujících procesů (například jeden proces shromažďující vstupní data, jeden proces zpracovávající vstupní data, jeden proces zapisující výsledky na disk). To však vyžadovalo některé nástroje, které umožňují procesům efektivně vyměňovat data.

Vlákna se zrodila z myšlenky, že nejúčinnějším způsobem, jak spolupracující procesy vyměňovat data, bude sdílet celý jejich paměťový prostor. Vlákna jsou tedy efektivně procesy, které běží ve stejném kontextu paměti a sdílejí další prostředky se svými nadřazenými procesy , například otevřené soubory. Vlákna jsou popisována jako odlehčené procesy, protože přepínání mezi vlákny nevyžaduje změnu kontextu paměti.

Zatímco vlákna jsou naplánována preventivně, některé operační systémy poskytují variantu vláken, pojmenovaných vláken , která jsou naplánována společně. V operačních systémech, které neposkytují vlákna, může aplikace implementovat vlastní vlákna pomocí opakovaných volání funkcí pracovníků. Vlákna jsou ještě lehčí než vlákna a programování je o něco snazší, i když na strojích s více procesory obvykle přicházejí o některé nebo všechny výhody vláken .

Některé systémy přímo podporují multithreading v hardwaru .

Ochrana paměti

Základem každého víceúlohového systému je bezpečné a efektivní sdílení přístupu k systémovým prostředkům. Přístup do paměti musí být přísně spravován, aby bylo zajištěno, že žádný proces nemůže neúmyslně nebo záměrně číst nebo zapisovat do paměťových míst mimo adresní prostor procesu. To se provádí za účelem obecné stability systému a integrity dat, jakož i zabezpečení dat.

Obecně za správu přístupu k paměti odpovídá jádro operačního systému v kombinaci s hardwarovými mechanismy, které poskytují podpůrné funkce, jako je například jednotka pro správu paměti (MMU). Pokud se proces pokusí získat přístup k umístění paměti mimo svůj paměťový prostor, MMU požadavek odmítne a signalizuje jádru, aby provedlo příslušné akce; obvykle to má za následek násilné ukončení přestupkového procesu. V závislosti na designu softwaru a jádra a konkrétní konkrétní chybě může uživateli být zobrazena chybová zpráva o narušení přístupu, například „chyba segmentace“.

V dobře navrženém a správně implementovaném víceúlohovém systému nemůže daný proces nikdy přímo přistupovat k paměti, která patří jinému procesu. Výjimkou z tohoto pravidla je případ sdílené paměti; například v meziprocesovém komunikačním mechanismu System V jádro přiděluje paměť, aby byla vzájemně sdílena více procesy. Takové funkce často používá software pro správu databází, jako je PostgreSQL.

Nedostatečné mechanismy ochrany paměti, buď kvůli chybám v jejich designu nebo špatným implementacím, umožňují chyby zabezpečení, které může potenciálně zneužít škodlivý software.

Výměna paměti

Použití odkládacího souboru nebo odkládacího oddílu je způsob, jakým může operační systém poskytnout více paměti, než je fyzicky dostupné, a to ponecháním částí primární paměti v sekundárním úložišti . Zatímco multitasking a výměna paměti jsou dvě zcela nesouvisející techniky, jsou velmi často používány společně, protože výměna paměti umožňuje načtení více úkolů současně. Víceúlohový systém obvykle umožňuje spuštění jiného procesu, když běžící proces dosáhne bodu, kdy musí počkat, až se část paměti znovu načte ze sekundárního úložiště.

Programování

Procesy, které jsou zcela nezávislé, není problém naprogramovat ve víceúlohovém prostředí. Většina složitosti víceúlohových systémů pochází z potřeby sdílet počítačové zdroje mezi úkoly a synchronizovat provoz spolupracujících úloh.

Používají se různé souběžné výpočetní techniky, aby se zabránilo potenciálním problémům způsobeným více úkoly pokoušející se o přístup ke stejnému zdroji.

Větší systémy byly někdy stavěny s centrálním procesorem (procesory) a určitým počtem I/O procesorů , což je druh asymetrického multiprocesingu .

V průběhu let byly zdokonaleny systémy více úkolů. Moderní operační systémy obecně obsahují podrobné mechanismy pro stanovení priorit procesů, zatímco symetrické multiprocesing zavedl nové složitosti a možnosti.

Viz také

Reference