Principy operačních systémů Lekce 5: Multiprogramming a multitasking, vlákna
Multiprogramování předchůdce multitaskingu Vzájemné volání: Implementován procesem (nikoliv OS) Procesu je přidělen procesor, pokud je volán jiným běžícím procesem Omezené přepínání: Systém přepíná mezi jedním běžným procesem a tzv. pomůckami (accessories) malé programy specielně pro tento účel programované (např. jednoduchý textový, grafický editor, kalkulačka) Neomezené přepínání: Možnost přepínání mezi jakýmikoli běžícími procesy (Apple MacOS modul MultiFinder) Lekce 5: Multiprogramming a multitasking 2
Kooperativní (nepreemptivní) multitasking Jeden proces na popředí ostatní na pozadí. Proces na popředí má přidělen procesor, když jej nepotřebuje (např. čeká na událost, např. vstup z klávesnice), může být na krátkou dobu přidělen procesor některému procesu na pozadí. Procesy kooperují s OS (předávají mu řízení, když nepotřebují procesor) voláním služby systému Výhody: Možnost spuštění více procesů, kooperace mezi nimi Lepší využití prostředků v systému (paměť, čas procesoru) Možnost implementovat víceuživatelský systém) Nevýhody: Větší nároky na HW Nutnost řešit problémy s bezpečností a stabilitou systému Při chybě volání služby přerušení může dojít k zamrznutí systému Lekce 5: Multiprogramming a multitasking 3
Preemptivní multitasking Neustálé přepínání mezi procesy Procesy na multitaskingu nespolupracují Přerušení odebrání procesoru je vygenerováno při každé události v systému Kontext musí obsahovat více údajů než např. u přepínání úloh - stav registrů procesoru a koprocesoru (proces po znovupřidělení procesoru nemusí být informován o tom, že jeho činnost nebyla souvislá) Je nutno řešit problém přidělování prostředků (architektura klient-server pro přístup k ovladačům zařízení) Lekce 5: Multiprogramming a multitasking 4
Time slicing (sdílení času) Vylepšení preemptivního multitaskingu Přepnutí kontextu nejen při vygenerování nějaké události, ale i v určitých časových intervalech (v řádu jednotek až desítek ms) Rychlé střídání procesů ve využití času procesoru = pseudoparalelismus (uživatel má dojem paralelního zpracování úloh) Přerušení procesu vždy po uplynutí stanoveného časového intervalu nebo dříve, bylo-li přerušení vyvoláno nějakou událostí resp. pokud byl dokončen před uplynutím intervalu Lekce 5: Multiprogramming a multitasking 5
Preemptivní multitasking Výhody: Možnost spuštění více procesů, možnost spolupráce a komunikace procesů Lepší využití prostředků systému (paměť, čas procesoru apod.) Možnost implementace víceuživatelského systému Možnost implementace GUI Možnost implementace bezpečnostních mechanismů Snadnější implementace než u kooperativního multitaskingu Nezávislost na běhu procesů (a dobré vůli programátorů) Nevýhody: Vetší nároky na HW Rozsáhlejší kontext než u kooperativního multitaskingu Lekce 5: Multiprogramming a multitasking 6
Vlákno (Thread) Vlákno (též vlákno řízení, anglicky thread) označuje v informatice odlehčený proces, pomocí něhož se snižuje režie operačního systému při změně kontextu, které je nutné pro zajištění multitaskingu (zdánlivého běhu více úloh zároveň, který je zajištěn jejich rychlým střídáním na procesoru) nebo při masivně paralelních výpočtech. Zatímco běžné procesy jsou navzájem striktně odděleny, sdílí vlákna nejen společný paměťový prostor, ale i další struktury. Procesy Jednovláknové Vícevláknové (Multithreading) Lekce 5: Multiprogramming a multitasking 7
Vztah procesu a vlákna Vlákno: Lekce 5: Multiprogramming a multitasking 8
Proces a vlákna Lekce 5: Multiprogramming a multitasking 9
Proces a vlákna Lekce 5: Multiprogramming a multitasking 10
Rozdíly mezi multithreadovým a multiprocesorovým multitaskingem Sdílená paměť Jednodušší režie při přepínání: Přepnutí mezi vlákny bývá výrazně rychlejší neboť vlákna sdílejí paměť a uživatelská práva svého mateřského procesu a není je třeba při přepínání měnit. V některých případech není třeba při přepínání vláken volat jádro OS. Rychlejší může být i vytváření a rušení vlákna. Vlákno také spotřebuje méně paměti, což je důležité pro aplikace, které používají stovky nebo více vláken. Lekce 5: Multiprogramming a multitasking 11
Podpora vláken v OS: Z hlediska spravování vláken OS můžeme vlákna rozdělit na vlákna na uživatelské úrovni (ULT) vlákna na úrovni jádra (KLT) kombinace KLT a ULT Lekce 5: Multiprogramming a multitasking 12
Vlákna na uživatelské úrovni (ULT = User- Level Threads) Vlastnosti Správu vláken provádí tzv. vláknová knihovna (Thread Library) na úrovni aplikačního procesu, JOS o jejich existenci neví Přepojování mezi vlákny nepožaduje provádění funkcí jádra Nepřepíná se ani kontext procesu ani režim procesoru Aplikace má možnost zvolit si nejvhodnější strategii a algoritmus pro plánování vláken Příklady POSIX některé implementace knihovny Pthreads Solaris1 knihovna Threads Lekce 5: Multiprogramming a multitasking 13
Vlákna na uživatelské úrovni (ULT) Lekce 5: Multiprogramming a multitasking 14
Vlákna na uživatelské úrovni (ULT) Výhody nezávislost na podpoře vláken v OS přepínání mezi vlákny je nezávislé na OS (může být rychlejší) výrazně rychlejší tvorba a přepínání vláken plná kontrola procesu nad správou běhu vláken Nevýhody volání služby jedním vláknem zablokuje všechna vlákna procesu nutnost dodatečného programování (řízení vláken programátorem) pokud jádro přiděluje procesor pouze procesům, nemohou dvě vlákna téhož procesu běžet současně, i když systém obsahuje více procesorů Lekce 5: Multiprogramming a multitasking 15
Vlákna na úrovni jádra (KLT = Kernel-Level Threads) Vlastnosti Veškerá správa vláken je realizována OS Každé vlákno v uživatelském prostoru je zobrazeno na vlákno v jádře (model 1:1) JOS vytváří, plánuje a ruší vlákna Jádro může plánovat vlákna na různé CPU Skutečný multiprocessing Příklady Windows NT/2000/XP Linux 4.4BSD UNIX Tru64 UNIX Lekce 5: Multiprogramming a multitasking 16
Vlákna na úrovni jádra Lekce 5: Multiprogramming a multitasking 17
Vlákna na úrovni jádra Výhody: Volání systému neblokuje ostatní vlákna téhož procesu Jeden proces může využít více procesorů (skutečný paralelismus uvnitř jednoho procesu každé vlákno běží na jiném procesoru) Tvorba, rušení a přepínání mezi vlákny je levnější než mezi procesy I moduly jádra mohou mít vícevláknový charakter Nevýhody: Systémová správa je režijně nákladnější než u čistě uživatelských vláken Klasické plánování není spravedlivé: Dostává-li vlákno své kvantum, pak procesy s více vlákny dostávají více času Lekce 5: Multiprogramming a multitasking 18
Kombinace ULT a KLT Některé OS podporují oba způsoby běhu vláken. Přiřazování uživatelských vláken k systémovým se děje automaticky (bez programátora) anebo programátor může nastavit počet vláken na úrovni jádra. Příklady Windows 2000/XP s nadstavbou ThreadFiber FreeBSD 5.x Lekce 5: Multiprogramming a multitasking 19
Kdy se vlákna používají Obsluha periferií U některých zařízení je třeba periodicky testovat stav hardware Vláknu pak nemusí zbývat mnoho času na obsluhu uživatelského rozhraní Jedno vlákno pro komunikaci s uživatelem a druhé obsluhuje hardware Síťová komunikace Jedno vlákno akceptuje příchozí komunikace Jedno vlákno odesílá data Jedno vlákno zpracovává data Vyvolání dojmu rychlé odezvy programu Práce s velkým objemem data uložených v databázi Hlavní vlákno pouze obsluhuje uživatelské rozhraní, další pracuje s databází Lekce 5: Multiprogramming a multitasking 20
Kdy se vlákna používají Urychlení výpočtu Lze-li spustit na víceprocesorovém stroji kooperující vlákna na několika procesorech Vhodné pro architekturu aplikace Simulace jedno vlákno počítá vlastní simulaci Další vlákno periodicky vzorkuje stav simulace a zobrazuje ho Primární vlákno obsluhuje uživatelské rozhraní Efektivita Některé aplikace jsou ze své podstaty nevhodná pro jednovláknovou architekturu Použití vláken může vést k výraznému zpřehlednění programového kódu V moderním OS už beztak běží několik vláken, pár navíc nehraje roli. Každý OS má maximální strop na počet threadů, kdy je plánování procesu stále ještě efektivní Lekce 5: Multiprogramming a multitasking 21
Kritéria pro použití vláken Vlákna je výhodné použít, pokud aplikace splňuje některé z následujících kritérií: Je složena z několika nezávislých úloh. Může být blokována po dlouhou dobu. Obsahuje výpočetně náročnou část. Reaguje na asynchronní události. Obsahuje úlohy s nižší nebo vyšší prioritou než zbytek aplikace. Lekce 5: Multiprogramming a multitasking 22
Nevýhody vláken Vlákna byste měli používat jen tam, kde je to opravdu nutné, protože tvorba vlákna na určitých platformách je poněkud zdlouhavá operace. K vyřešení tohoto problému se u vícevláknových aplikací používá mechanismus sdružování vláken. Každé vlákno vytváří v paměti vlastní zásobník, do kterých jsou ukládány mezivýsledky, stavy proměnných, adresy apod. I když je teoreticky možné vytvářet obrovský počet vláken, maximální počet vláken je omezen platformou. Z toho vyplývá, že při tvorbě vláken je třeba se řídit zdravým rozumem. Tento problém nelze vyloučit, lze jej však ovlivnit pomocí sdružování vláken. Je však nutno nechat na správci sdružovaní, kdy vlákno vytvořit a kolik jich vůbec vytvářet. Jednou z největších nevýhod vláken je však zvýšená složitost kódu Je daleko složitější sledovat tok programu. Další z nevýhod vláken je sdílení prostředků, za kterou je většinou odpovědný programátor. K řízení sdílení prostředků se používá synchronizace. Ta zaručuje, že stav dat nebude změněn z více vláken zároveň. Lekce 5: Multiprogramming a multitasking 23
Typické vícevláknové aplikace Lekce 5: Multiprogramming a multitasking 24
Modely vícevláknových aplikací Lekce 5: Multiprogramming a multitasking 25
Model Boss/Worker Lekce 5: Multiprogramming a multitasking 26
Model Boss/Worker Lekce 5: Multiprogramming a multitasking 27
Model Peer Lekce 5: Multiprogramming a multitasking 28
Model Peer Lekce 5: Multiprogramming a multitasking 29
Model Pipeline Lekce 5: Multiprogramming a multitasking 30
Model Pipeline Lekce 5: Multiprogramming a multitasking 31
Vícevláknové aplikace a ladění Hlavní problémy vícevláknových aplikací souvisí se synchronizací Uváznutí (Deadlock) úspěšné dokončení první akce je podmíněno předchozím dokončením druhé akce Souběh (Race Conditions) - přístup více vláken ke sdíleným proměnným a alespoň jedno vlákno nevyužívá synchronizačních mechanismů. Vlákno čte hodnotu zatímco jiné vlákno zapisuje. Zápis a čtení nejsou atomické a data mohou být neplatná. Vyhladovění - stav, kdy jsou vláknu neustále odepírány prostředky. Bez těchto prostředků program nikdy nedokončí svůj úkol. Lekce 5: Multiprogramming a multitasking 32