Vlákna Co je to vlákno?



Podobné dokumenty
Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Procesy a vlákna (Processes and Threads)

Programovací jazyky s podporou vláken Java

Principy operačních systémů. Lekce 4: Správa procesů

Vláknové programování část I

Architektura a koncepce OS OS a HW (archos_hw) Architektura a koncepce OS Jádro OS (archos_kernel) Architektura a koncepce OS Typy OS (archos_typy)

Principy operačních systémů. Lekce 1: Úvod

Operační systémy. Přednáška 1: Úvod

Operační systémy. Přednáška 2: Procesy a vlákna

Petr Krajča. 26. říjen, 2012

ZOS OPAKOVÁNÍ. L. Pešička

Management procesu I Mgr. Josef Horálek

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Paralelní programování

Ukázka zkouškové písemka OSY

Procesy a vlákna - synchronizace

Přednáška 11. Historie MS Windows. Architektura Windows XP. Grafické a znakové rozhraní. Úlohy, procesy a vlákna.

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Stavba operačního systému

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 11. březen, 2011

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Paralelní programování

Matematika v programovacích

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

Služba ve Windows. Služba (service) je program

Reprezentace dat v informačních systémech. Jaroslav Šmarda

09. Memory management. ZOS 2006, L.Pešička

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška III. 7. listopad, / 23

Přidělování CPU Mgr. Josef Horálek

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Operační systémy. Přednáška 4: Komunikace mezi procesy

Principy počítačů a operačních systémů

Virtualizace. Lukáš Krahulec, KRA556

Principy operačních systémů. Lekce 6: Synchronizace procesů

Metody připojování periferií BI-MPP Přednáška 2

Management procesu II Mgr. Josef Horálek

Výpočet v módu jádro. - přerušení (od zařízení asynchronně) - výjimky - softvérové přerušení. v důsledku událostí

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

Dílčí projekt: Systém projektování textilních struktur 1.etapa: tvorba systému projektování vlákno - příze - tkanina

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Principy operačních systémů. Lekce 2: Správa paměti

Téma 3. Procesy a vlákna

Poslední aktualizace: 21. května 2015

Operační systémy 2. Přednáška číslo 1. Úvod do OS

03. Synchronizace procesů. ZOS 2006, L. Pešička

Operační systémy. Tomáš Vojnar IOS 2009/2010. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

Zvýšení spolehlivosti a diagnostika operačních systémů pracujících v reálném čase

Strojový kód. Instrukce počítače

IB109 Návrh a implementace paralelních systémů. Organizace kurzu a úvod. Jiří Barnat

IB109 Návrh a implementace paralelních systémů. Organizace kurzu a úvod. RNDr. Jiří Barnat, Ph.D.

Úvod do Linuxu. SŠSI Tábor 1

Lineární datové struktury

Struktura a architektura počítačů (BI-SAP) 7

Distribuovaný systém je takový systém propojení množiny nezávislých počítačů, který poskytuje uživateli dojem jednotného systému.

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Pohled do nitra mikroprocesoru Josef Horálek

Systém adresace paměti

Přidělování paměti II Mgr. Josef Horálek

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Téma 3 Procesy a vlákna

Pojem Výpočetní proces. Požadavky na OS při práci s procesy. Stavy procesů

Úvod do operačního systému Linux Mgr. Josef Horálek

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška I / 21

Úvod. Programovací paradigmata

Operační systém. Logické prostředky výpoč etního systému jsou:

Přerušovací systém s prioritním řetězem

Úvod do operačního systému Linux Mgr. Josef Horálek

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška II. 14. říjen, / 26

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Disková pole (RAID) 1

Stavy procesů. Požadavky na OS při práci s procesy

Procesy a vlákna. A3B33OSD (J. Lažanský) verze: Jaro 2014

Stavy procesů. Požadavky na OS při práci s procesy

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

IT ESS II. 1. Operating Systém Fundamentals

Operační systémy pro systémy sběru dat (=DAQ systems). Vývoj aplikačních programů. Operační systémy pro DAQ RTOS VxWorks Windows CE RTX LabVIEW RT

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

11 Návrh programového vybavení

VIRTUALIZACE POČÍTAČE HISTORIE A VÝVOJ

Přijímací zkouška - informatika

Základní datové struktury

Spojová implementace lineárních datových struktur

Struktura pamětí a procesů v DB Oracle. Radek Strnad

Principy operačních systémů

Pokročilé architektury počítačů

Definice OS. Operační systém je základní programové vybavení počítače, nezbytné pro jeho provoz.

Windows a real-time. Windows Embedded

Profilová část maturitní zkoušky 2015/2016

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Kapitola 10: Diskové a souborové struktury. Klasifikace fyzických médií. Fyzická média

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

SÁM O SOBĚ DOKÁŽE POČÍTAČ DĚLAT JEN O MÁLO VÍC NEŽ TO, ŽE PO ZAPNUTÍ, PODOBNĚ JAKO KOJENEC PO PROBUZENÍ, CHCE

konec šedesátých let vyvinut ze systému Multics původní účel systém pro zpracování textů autoři: Ken Thompson a Denis Ritchie systém pojmnoval Brian

Architektura počítačů Úvod

Transkript:

Vlákna Co je to vlákno? Hierarchie z pohledu operačního systému: Proces o největší výpočetní entita plánovače o vlastní prostředky, paměť a další zdroje o v závislosti na OS možnost preemptivního multitaskingu Vlákno Thread o každý proces má alespoň jeden, primární, thread o jeden proces může mít několik vláken o vlákna sdílí adresový prostor procesu a jeho zdroje o každé vlákno má svůj vlastní kontext (id, registry, prioritu, atd.) o v závislosti na OS možnost preemptivního multithreadingu Vlákno Fiber o Fiber MS terminologie o Fiber je analogií threadu k procesu o Fiber plánuje některý thread procesu, ne plánovač operačního systému o Fiber běží v kontextu threadu, který ho naplánoval o Má pouze stav, zásobník a specifická data např. prioritu má pouze thread o Fiber může ukončit běh vlákna v jehož kontextu běží o Ukončení aktivního fiberu jiným fiberem není OK stack corruption => abnormal termination Strana 1 (celkem 10)

o Fibre nevyužívá preemptivního multithreadingu OS, proces musí zajistit, že se fiber vzdá procesoru kooperativní multithreading Light-Weight Processes Unix System V a Solaris několik LWP běží v uživatelském adresovém prostoru ve strojovém času přiděleném vláknu jádra tj. nad jedním vlákem jádra běží několik LWP o a nad jedním LWP může běžet několik user-level vláken možné díky sdílenému bloku paměti, který vlastní proces Odpadá režie přepínání úrovně oprávnění user-kernel => KIV/OS o Může být, i nemusí, implementováno za podpory operačního systému způsob, kterým aplikace může použít specifický systém plánování, který je pro ni výhodnější než ten, který poskytuje operační systém obecně vzato, pro malý počet vláken použití fibers neposkytuje výhodu proti threadům http://msdn2.microsoft.com/enus/library/ms686919.aspx Strana 2 (celkem 10)

Implementace využívající podpory OS Native Posix Thread Library pod Linuxem Light-Weight Kernel Threads u některých verzí BSD MS SQL Server 2000 http://msdn2.microsoft.com/enus/library/aa175393(sql.80).aspx Implementace nepoužívající podpory OS GNU Portable Threads FSU PThreads použití v Adě Hybridní Native Posix Thread Library u NetBSD, některé Linuxové releasy a PM2 (Parallel Machine) o mechanismus Scheduler/Linux Activations o N:M M skutečných vláken jádra a na každém z nich N aplikačních vláken Strana 3 (celkem 10)

Kdy se vlákna používají Obsluha periferních zařízení o U některých zařízení je třeba periodicky testovat stav hardware o Vláknu pak nemusí zbývat mnoho času na obsluhu uživatelského rozhraní o Jedno vlákno pro komunikaci s uživatelem a druhé obsluhuje hardware o Simulace časovače Síťová komunikace o Jedno vlákno akceptuje příchozí komunikaci o Jedno vlákno odesílá data o Jedno vlákno zpracovává data Virtualizace procesoru o Například jádro OS umožňující multitasking Vyvolání dojmu rychlé odezvy programu o Práce s velkým objemem dat o Hlavní vlákno pouze obsluhuje uživatelské rozhraní, další zpracovává data na pozadí Urychlení výpočtu o Lze-li spustit na víceprocesorovém stroji kooperující vlákna na několika procesorech o Pro dobře škálovatelné řešení u výpočetní úloh se už dnes ovšem nepoužívá kooperativní (fibers) ani preemptivní (thread) plánování vláken, ale taskstealing a abstrakce procesorového času do úloh (např. Intel Threading Building Blocks) Strana 4 (celkem 10)

Vhodné pro architekturu aplikace o Simulace jedno vlákno počítá vlastní simulaci o Další vlákno periodicky vzorkuje stav simulace a zobrazuje ho o Primární vlákno obsluhuje uživatelské rozhraní Efektivita o Některé aplikace jsou ze své podstaty nevhodná pro jednovláknovou architekturu o Použití vláken může vést k výraznému zpřehlednění programového kódu o V moderním OS už beztak běží několik vláken, pár navíc nehraje roli o Každý OS má maximální strop na počet threadů, kdy je plánování procesu stále ještě efektivní Strana 5 (celkem 10)

Synchronizace Vlákna mohou přistupovat ke sdíleným prostředkům např. úloha producent konzument Aby byla zajištěna správná funkce programu, je třeba zajistit, aby si vlákna nepřepisovala data a četla pouze ta data, která jsou v konzistentním stavu Příklad o Máme připojenou sadu tlakoměrů a callback funkci, která vloží naměřený tlak a číslo tlakoměru do jednosměrného spojového seznamu a zaznamená čas měření jako počet tiků procesoru od jeho startu o Následující kód zobrazuje, kolik kódu je režie a jak málo kódu stačí na potřebnou synchronizaci O tuhle výhodu ale přijdete, jakmile použijete dostatečně vysokoúrovňový jazyk, který se snaží programátorovi usnadnit práci Ovšem za cenu efektivnosti jeho kódu Strana 6 (celkem 10)

typedef struct _tpressure{ _tpressure *next; int64 ticks; double pressure; int16 deviceid; } TPressure; TPressure *head, *tail; void asm CallBack(double Pressure, int16 DeviceID) { //ABI MS x64 konvence //alokace paměti move rax, sizeof(tpressure) push rax call malloc or rax, rax jz Error //nepodařilo se alokovat paměť! mov rsi, rax //v rsi je návratová hodnota malloc //uložení hodnot mov [rsi].tpressure.next, 0 mov [rsi].tpressure.pressure, ecx //pressure mov [rsi].tpressure.deviceid, dx//deviceid //zjištění času jako počet tiků procesoru xor eax, eax //vyprázdní pipeline, aby to vrátilo cpuid //po vykonání RDTSC hodnotu rdtsc //výsledek je v edx:eax shl rdx, 32 mov edx, eax mov [rsi].tpressure.ticks, rdx //až doteď jsme udělali vše, co šlo udělat bez zamykání //teď musíme updatovat *tail na rsi spin: //uděláme v podstatě spinlock mov rax, [tail] lock cmpxchgq [tail], rsi jnz spin or rax, rax //je to první položka v seznamu? jnz finish //aneb byl [tail] NULL? mov [head], rsi finish: //teď ještě aktualizovat starou hodnotu a je hotovo mov [tail], rsi ret } Strana 7 (celkem 10)

Pokud by běžela alespoň dvě vlákna s výše uvedeným kódem na dvou procesorech se sdílenou pamětí, vlákna by si mohla přepisovat oblast paměti, *tail, pokud by tam nebyla obdoba spinlocku o IA32e mode tj. 64-bitový, flat mód Procesor bere segmentový registr jako rovný nule (jenom negeneruje výjimku jako v protected-mode) Řešením proto bylo uzamknutí přístupu ke sběrnici tak, aby k paměti mohlo pouze jedno vlákno lock cmpxchgq A co kdybchom chtěli udržovat counter počtu prvků v seznamu? o Tak za každým spinlockem uděláme lock add [counter], 1 A obousměrný spojový seznam? o V uvedeném příkladu jednoznačně víme i ukazatel na předka klíčový je update tail a head Jenže co dělat v případě, když nám nebudou atomické instrukce stačit? Co kdybychom chtěli kupříkladu ještě počítat i průměrný tlak? o To už bude nutné někde použít kritickou sekci o Atomický add na plovoucí číslo totiž není push qword ptr [CSHandle] call EnterCriticalSectionshl rdx, 32... komplexní činnost push qword ptr [CSHandle] call LeaveCriticalSectionshl rdx, 32 Strana 8 (celkem 10)

A co když bude threadů více než dva a kritických sekcí bude existovat několik? o Zamykání v předem určeném pořadí Nedeterminismus o Thready plánuje operační systém a plánovač je pro aplikaci black-box jednotlivé vlákna běží různě rychle a dopředu se neví, jak rychle nelze předem určit množství přiděleného strojového času jednotlivému vláknu u realtime systémů lze specifikovat nezbytné minimum o Celkový výpočetní čas vlákna určují i přístupy k hw například zápis/čtení z disku disková cache se plní v závislosti na všech běžících programech o Nutnost používat synchronizační primitiva, aby se zajistilo zpracování dat ve správném pořadí Strana 9 (celkem 10)

Přímá podpora vláken programovacím jazykem Většina programátorů není kompetentní k tomu, aby sestavila netriviální, paralelizovaný program, který nebude obsahovat chyby díky špatné synchronizaci, když na všechno nepoužije kritické sekce např. Java synchronized Ale je to pohodlnější, rychleji se to učí oběť možné optimalizaci, pokud opravdu víte, co děláte a proč o Pokud překladač inteligentně nepozná (jako že u některých programátorských kreací to nepozná ani autor), že daný blok kódu odpovídá např. funkci InterlockedCompareExchange, zbytečně se použije kód s mnohem vyšší režií o Nebo viz předchozí příklad ve vysokoúrovňovém jazyku jako je např. Java by se rovnou vygenerovala kritická sekce na update spojového seznamu a počítadla prvků naproti tomu v C++ by se spinlock dal realizovat tak, jak je v příkladu uvedeno Některým chybám lze preventivně zabránit už jenom tím, že syntaxe jazyka nedá programátorovi příležitost je udělat o Zkrátka omezuje programátora tj. na jednu stranu větší bezpečnost, na druhou stranu nižší výkon Strana 10 (celkem 10)