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



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

Procesy a vlákna (Processes and Threads)

Paralelní programování

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

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

Management procesu I Mgr. Josef Horálek

Stavba operačního systému

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

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)

Procesy a vlákna Mgr. Josef Horálek

Paralelní programování

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Architektura rodiny operačních systémů Windows NT 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

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

Vlákna Co je to vlákno?

IT ESS II. 1. Operating Systém Fundamentals

Ú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Ů

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

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í

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

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

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

Paralelní výpočetní jádro matematického modelu elektrostatického zvlákňování

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

Matematika v programovacích

ČÁST 1. Základy 32bitového programování ve Windows

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

Roury a zprávy Mgr. Josef Horálek

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

Vícevláknové programování na CPU: POSIX vlákna a OpenMP I. Šimeček

Struktura programu v době běhu

Operační systémy. Tomáš Hudec.

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

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

Ukázka zkouškové písemka OSY

SUPERPOČÍTAČE DANIEL LANGR ČVUT FIT / VZLÚ

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

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

Téma 3. Procesy a vlákna

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Virtualizace. Lukáš Krahulec, KRA556

Management procesu II Mgr. Josef Horálek

Systém adresace paměti

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

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

HelenOS ARM port. Pavel Jančík Michal Kebrt Petr Štěpán

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

Paralelní programování

Pokročilé architektury počítačů

PB002 Základy informačních technologií

Linux Teorie operačních systémů a realita

Ovladače pro Windows. Ovladače Windows A4M38KRP. Str. 1

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

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění

Paralelní výpočty na clusteru KMD

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

OPERAČNÍ SYSTÉMY. Operační systém je prostředník mezi hardwarem (technickým vybavením počítače) a určitým programem, který uživatel používá.

Úvod do GPGPU J. Sloup, I. Šimeček

Pokročilé architektury počítačů

Když se Linux nevejde. Jiné operační systémy Lenka Kosková Třísková, LinuxDays2018

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

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

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)

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

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

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

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U

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

Úvod do OpenMP. Jiří Fürst

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

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

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

Pokročilé architektury počítačů

Pohled do nitra mikroprocesoru Josef Horálek

2010/2011 ZS. Operační systém. úvod základní architektury

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

a co je operační systém?

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Metody připojování periferií

PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ

Systém souborů (file system, FS)

Činnost operačních systémů. Beránek Pavel 1. KŠPA

Témata profilové maturitní zkoušky

Poslední aktualizace: 21. května 2015

GPGPU Aplikace GPGPU. Obecné výpočty na grafických procesorech. Jan Vacata

Základy programování Operační systémy (UNIX) doc. RNDr. Petr Šaloun, Ph.D. VŠB-TUO, FEI (přednáška připravena z podkladů Ing. Michala Radeckého)

úvod Historie operačních systémů

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Implementace systémů HIPS: historie a současnost. Martin Dráb

Úvod. Programovací paradigmata

Transformace digitalizovaného obrazu

11. Přehled prog. jazyků

Správa procesů a vláken Mgr. Josef Horálek

Transkript:

Vláknové programování část I Lukáš Hejmánek, Petr Holub {xhejtman,hopet}@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2015 04 07 1/27

Vláknové programování v C/C++ 1. Procesy, vlákna, přepínání kontextu, knihovna pthreads, vznik a ukončení vláken, základy ladění aplikací 2. Základy synchronizace: zámky, semafory, podmíněné proměnné 3. Pokročilé synchronizace: bariéry, rw zámky, pojmenované semafory, futexy 4. Afinita,Atributy vláken, režimy startu vlákna, priority, ukončování vláken, thread-specific data 5. OpenMP 6. Práce s pamětí 7. GUI, OpenGL, Futures a TPE v C++ 2/27

Přehled přednášky Procesy a vlákna Procesy Vlákna Pthreads OpenMP C++11 3/27

Procesy Proces Instance programu, která je sekvenčně prováděna. Je to entita pro alokace zdrojů (procesor, paměť, atd) Procesy tvoří stromovou hierarchii vztah rodič potomek Sex is not really common among processes each process has just one parent. 4/27

Procesy Typy procesů Levný proces (Light Weight Process LWP) Levné procesy mezi sebou sdílí adresní prostor Minimum privátních zdrojů Drahý proces (Heavy Weight Process HWP) Drahé procesy jsou mezi sebou zcela izolované Prakticky všechny zdroje jsou privátní 5/27

Procesy Popisovač procesu Obsahuje informace o Signálech Přidělené paměti Otevřených souborech Aktuálním adresáři HW kontext (obsah registrů, zásobník,... ) TSS Terminálu Prioritě Stav... 6/27

Procesy Vytvoření procesu Proces vzniká rozštěpením rodiče Po startu je potomek stejný jako rodič Stejný obsah paměti (Copy on Write) Vykonává stejný kód 7/27

Procesy Běh procesu Vykonávání kódu programu charakterizován kontextem Dva režimy běhu User space kód samotného programu Kernel space kód jádra Stav procesu Running Interruptible Uninterruptible (Nezpracovává signály) Stopped Traced Konkurence vs. paralelismus Konkurence vykonávání stejného nebo různého kódu více procesy, nemusí probíhat ve stejný čas Paralelismus konkurence probíhající ve stejný čas 8/27

Procesy Přepínání kontextu Zásadní mechanismus multitaskingu Mechanismus uložení a obnovení stavu CPU Rozlišujeme přepnutí kontextu Registrové (obsluha přerušení) Vláknové (přepnutí na jiné vláko téhož procesu) Procesové (přepnutí na jiný proces) 9/27

Procesy Kroky při přepínání kontextu Uložení stavu CPU, obvykle do TSS Všechny běžné registry, deskriptory segmentu, příznaky Stav a registry FPU Obnova adresního prostoru Načtení nového stavu CPU 10/27

Procesy Softwarové vs. hardwarové přepínání kontextu Kontext lze uložit a obnovit v softwaru (kopírování stavu) Některé procesory podporují přepnutí kontextu v HW (architektura x86 od Intel 80386 a dál) Linux od verze jádra 2.4 používá softwarové přepnutí kontextu Softwarové i hardwarové přepnutí kontextu je velmi drahá operace! 11/27

Procesy Komunikace mezi procesy Soubory Signály (signal(7)) Sockets (socket(2)) Fronty zpráv (mq_overview(7)) Trubky (pipes), pojmenované vs. nepojmenované (pipe(2)) Semafory (sem_overview(7)) Sdílená paměť, paměťově mapované soubory (shm_overview(7), mmap(2)) Message passing (MPI knihovny) 12/27

Vlákna Proč vlákna? Paralelismus Výkon Odezva Komunikace 13/27

Vlákna Vlákno Podmnožina procesu Vlákno nemá vlastní adresní prostor Typicky sdílí stav ostatními vlákny daného procesu Shared-memory model: Komunikace mezi vlákny je možná stejně jako u procesů a navíc i přes jejich sdílenou paměť Oproti procesu jsou běžně sdílené globální a statické proměnné 14/27

Vlákna Vlákna stejného procesu sdílí Kód programu Většinu dat Novější koncepce vláken podporuje nesdílenou paměť thread local storage (TLS) Otevřené soubory (file descriptors) Signály a obsluhu signálů Současný pracovní adresář Identifikaci uživatele a skupiny Process ID (PID) Pojmenované semafory, fronty zpráv a další nástroje IPC 15/27

Vlákna Každé vlákno má unikátní Thread ID (identifikace vlákna) Obsah registrů procesoru, ukazatel vrcholu zásobníku Zásobník pro lokální proměnné a návratové adresy Masku signálů Prioritu Hodnotu proměnné errno (dle POSIX.1c) 16/27

Vlákna Implementace vláken v operačním systému je různá proces a vlákno není rozlišeno (vlákno je tedy procesem Linux bez NPTL) proces a vlákno jsou rozlišeny (vlákno se liší od procesu Windows, Linux s NPTL) vlákna v uživatelském prostoru (vlákna si řídí sám proces Java Green Threads (obsolete), Erlang) 17/27

Vlákna Mapování vláken na plánovací entity v jádře mapování vláken 1:1 současné produkční implementace Linux, Windows, FreeBSD s libthr mapování vláken N:M + teoreticky nejefektivnější příliš složité, problémy s invertováním priorit, atd. FreeBSD s Kernel Scheduler Entitites, experimenty i v Linuxu mapování vláken N:1 zastaralý přístup, user-space threading FreeBSD s libc_r 18/27

Vlákna Některé systémy mají levné přepínání vláken a drahé přepínání procesů (Windows NT, OS/2). Některé systémy příliš nerozlišují v přepnutí vlákna nebo procesu. Proč uvažujeme vlákna místo procesů? Rychlejší přepnutí běžících vláken než běžících procesů. Snadné sdílení paměti a dalších zdrojů mezi běžícími vlákny (někdy ovšem nevýhoda). 19/27

Knihovna Pthreads POSIX Threads (Pthreads) je POSIX standard pro vlákna Vlákna v systémech na bázi jádra Linux Linux threads neúplná implementace POSIX Threads Vlákno bylo obsluhováno stejně jako proces, mělo i vlastní PID (process ID). Není nutná speciální podpora jádra, problémy s výkonem, pokud se vlákno samo nevzdá procesoru (yield()). Nahrazena NPTL Native POSIX threads library Výrazně vyšší výkonnost Vlákno je samo o sobě jednotkou plánování, tj. procesový plánovač plánuje i vlákna obvykle úplně stejně. NPTL potřebuje speciální podporu jádra pro synchronizaci. Pthreads knihovna má implementaci pro řadu systémů: Linux, *BSD, Windows, MacOS,... 20/27

Kompilace Dvě možnosti kompilace: gcc -o foo foo.c -lpthread -D REENTRANT gcc -o foo foo.c -pthread -D REENTRANT Nezapomínáme na to, že záleží na pořadí knihoven a objektových souborů na příkazové řádce. 21/27

Open MP Standard pro programování se sdílenou pamětí Podpora v programovacích jazycích Fortran (od r. 1997), C, C++ (od r.1998) Současná verze 3.0 je z roku 2008 pro Fotran i C/C++ Podporováno řadou překladačů vč. gcc a Intel cc Podpora paralelního programování pomocí Soustavy direktiv pro překladač Knihovních procedur Proměnných prostředí 22/27

Programovací model OpenMP Explicitní paralelismus Fork/join model Vnořený (nested) paralelismus není vždy dostupný funkcí) 23/27

Překlad gcc -g -o foo foo.c -fopenmp -D_REENTRANT Aplikace je slinkována s knihovnami libgomp a libpthread. 24/27

Přehled syntaxe Základní formát #pragma omp jméno-příkazu [klauzule] nový_řádek Všechny příkazy končí novým řádkem Používá konstrukci pragma (pragma = věc) Rozlišuje malá/velká písmena Příkazy mají stejná pravidla jako C/C++ Delší příkazy lze napsat na více řádků pomocí escape znaku \ 25/27

C++11 Novější standard C++ publikovaný v září 2011 Jako první verze obsahuje podporu vláken Následnící C++14 a C++17 (C++14 vydán v srpnu 2014) 26/27

Překlad C++11 g++ -o c11test c11test.c -std=c++11 -pthread Neuvedení -pthread způsobí runtime chybu 1 terminate called after throwing an instance of std::system_error 2 what(): Enable multithreading to use std::thread: Operation not 3 permitted 4 Aborted (core dumped) 27/27