Virtuální přístroje. Operační systémy, vývoj aplikačních programů, speciální techniky programování

Podobné dokumenty
Vývoj aplikačních programů pro systémy DAQ Možnosti vývoje aplikačního SW Jazyk C/C++ Pokročilé techniky programování Vícevláknové aplikace

Virtuální přístroje. Použitá literatura. Operační systémy, vývoj aplikačních programů, speciální techniky programování

Procesy a vlákna - synchronizace

Procesy a vlákna (Processes and Threads)

Cvičení č. 6. Synchronizace ve Windows. 3 Body

Synchronizace vjj 1

ÚVOD DO OPERAČNÍCH SYSTÉMŮ

Von Neumannovo schéma

Operační systém (Operating System)

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

Možnosti programování se sdílenými proměnnými. Týden 6 Programování se sdílenými proměnnými (Shared Variables, SV) Procesy a vlákna.

Windows a real-time. Windows Embedded

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

Procesy a vlákna IPC Komunikace mezi procesy (IPC = Inter-Process Communication)

Management procesu I Mgr. Josef Horálek

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

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

Paralelní programování

ÚVOD DO OPERAČNÍCH SYSTÉMŮ. Vývoj SW aplikací. Unix, POSIX, WinAPI, programování komunikace s periferními zařízeními, ovladače zařízení

Pavel Procházka. 3. prosince 2014

Paralelní programování

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

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í.

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.

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

C++ a vnitřní svět. David Bednárek Jakub Yaghob Filip Zavoral

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

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

Paralelní programování

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

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

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

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

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

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

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

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

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

Paralelní programování

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

Cvičení č. 5. Programování ve Windows program stopky 3 Body

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)

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

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

vjj 1. Priority. Dispatcher

PRINCIPY OPERAČNÍCH SYSTÉMŮ

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

Paralelní programování

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

Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu Obědvající filosofové

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

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

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)

Ukázka zkouškové písemka OSY

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

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

Synchronizace Mgr. Josef Horálek

Stavba operačního systému

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

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Základní informace. Operační systém (OS)

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

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

Základní datové struktury

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

1. Zpracování událostí na pozadí aplikace

Využijte plný výkon procesorů s více jádry v LabVIEW 8.5

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á.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

IT ESS II. 1. Operating Systém Fundamentals

Téma 3. Procesy a vlákna

LABORATORNÍ CVIČENÍ Střední průmyslová škola elektrotechnická

Konzistentnost. Přednášky z distribuovaných systémů

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

Struktura programu v době běhu

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

IUJCE 07/08 Přednáška č. 6

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

Principy operačních systémů

PB153 Operační systémy a jejich rozhraní

ADT/ADS = abstraktní datové typy / struktury

Činnost počítače po zapnutí

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

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

Paralelní programování

Česká letecká servisní a. s.

30. Vlákna, jejich atributy, metody, organizace a stavy. Možnosti synchronizace. (A7B36PVJ)

Výpočetní technika. PRACOVNÍ LIST č. 7. Ing. Luděk Richter

Přidělování zdrojů (prostředků)

2010/2011 ZS. Operační systém. procesy a vlákna. interakce a synchronizace

OPS Paralelní systémy, seznam pojmů, klasifikace

Operační systémy. Přednáška 3: Plánování procesů a vláken

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

C++ 0x aka C++11. Základním kamenem je třída std::thread

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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

PB002 Základy informačních technologií

Transkript:

Virtuální přístroje Operační systémy, vývoj aplikačních programů, speciální techniky programování 1

Použitá literatura [1] Stallings, W.: Operating Systems. Internals and Design Principles. 4th Edition. Prentice Hall, New Jersey, 2001. [2] Silberschatz, A. Galvin, P. B. - Gagne, G.: Operating System Concepts. 6th Edition. John Wiley & Sons, 2003. [3] Tanenbaum, A.: Modern Operating Systems. Modern Operating Systems. Prentice Hall, New Jersey, 2008. [4] Richter, J.: Windows pro pokročilé a experty. Computer Press, 1997. 2

Úvod Jaké technické prostředky (HW) použijeme? (viz první přednáška) Jaké operační systémy (OS) zvolíme? Jaké vývojové prostředky pro tvorbu aplikačních programů nasadíme? Jaké techniky programování budeme využívat? 3

Operační systémy (OS) - 1 Operační systém je software který: řídí provádění uživatelských programů, funguje jako rozhraní mezi aplikačním programem a fyzickými prostředky (resources) počítače, spravuje všechny fyzické prostředky počítače, vytváří lepší, jednodušší, přehlednější prostředí pro efektivní využití počítače. 4

Operační systémy (OS) - 2 [1] Stallings, W.: Operating Systems. 4 th Ed.Prentice Hall, New Jersey, 2001. 5

Typy OS vhodné pro virtuální přístroje OS pro osobní počítače příklady: Windows 95/98/ME, Windows 2000/XP/VISTA/Win2007, Macintosh OS,Linux. RTOS (Real Time OS) Speciální aplikace (průmysl, doprava, vědecké experimenty, vestavěné aplikace) Hard/soft RTOS příklady: VxWorks, RT Linux, RTX, PharLap, (a většina Embedded OS) Vestavěné OS (Embedded OS) OS pro komerční i nekomerční aplikace (TV přijímače, mobilní telefony, pračky, digitální fotoaparáty, aj.) OS pro speciální paměťové karty, PDA, aj. většinou mají vlastnosti RTOS příklady: uclinux, FreeRTOS, Android, QNX, Symbian 6

OS pro distribuované aplikace Paralelní systémy Multiprocesorové systémy pro speciální účely Clusters Distribuované systémy Využívají vhodné sítě LAN, WAN, aj. Architektury klient-server, peer-to-peer 7

Vývojové prostředky Vývojové systémy na bázi textově orientovaných programovacích jazyků: LabWindows/CVI MS.NET (resp. Visual C/C++) Vývojové systémy na bázi grafického programování: LabVIEW Agilent VEE Matlab/Simulink 8

Procesy a vlákna základní témata Procesy/vlákna Výhody a nevýhody použití vláken Jaké operační systémy podporují multithreading? Synchronizace vláken Techniky programování 9

Procesy a vlákna Proces (process) - běžící program (= instance programu ). Proces vlastní: privátní adresový prostor systémové prostředky (soubory, dynamicky alokovanou paměť, synchronizační prostředky apod.) nejméně jedno vlákno 10

Procesy a vlákna Vlákno (thread) vzniká při inicializaci procesu (primární vlákno). Primární vlákno může vytvářet vlákna sekundární. Vlákna: sdílejí privátní adresový prostor procesu mohou přistupovat ke globálním proměnným a systémovým prostředkům procesu každé vlákno má vlastní zásobník a vlastní kontext 11

Multitasking Multiprocessing / multithreading [1] Stallings, W.: Operating Systems. 4 th Ed.Prentice Hall, New Jersey, 2001. 12

Multiprocessing / multithreading [1] Stallings, W.: Operating Systems. 4 th Ed.Prentice Hall, New Jersey, 2001. 13

Multitasking Stavy vlákna (procesu) ve víceúlohovém OS PŘIDĚLENÍ PROCESORU RUNNING READY ODEBRÁNÍ PROCESORU USPÁNÍ PROBUZENÍ WAITING (SLEEPING) 14

Výhody vláken Vícevláknový proces není blokován při zablokování jednoho z vláken (např. při čekání na událost) Paměť a systémové prostředky jsou sdíleny (na rozdíl od procesů), zvyšuje se efektivita jejich využití, zjednodušuje se přenos dat mezi vlákny (např. použití globálních proměnných ale POZOR na kritické sekce!!! v programu) Přepínání kontextu vláken je výrazně rychlejší než přepínání kontextu u procesů Efektivní provádění pomalých I/O operací (I/O operace se mohou překrývat s výpočetními operacemi) Výrazné zrychlení programu v případě multiprocesorové architektury (= počítačový systém obsahuje několik procesorů nebo vícejádrové procesory); vlákna běží skutečně paralelně (NE pseudoparalelně!!!) Lepší strukturování programu (Ale s rozumem!!! Nepřehánět počet vláken, zvyšuje časovou režii při přepínání kontextu) 15

Nevýhody vláken Obtížnější programování Nutnost synchronizace při přístupu ke sdíleným prostředkům (globálním proměnným, periferiím) Velmi obtížné až nereálné ladění programu 16

MULTITASKING / MULTITHREADING Programování vláken ve Win32 Vytvoření vlákna: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpthreadattributes, DWORD dwstacksize, LPTHREAD_START_ROUTINE lpstartaddress, LPVOID lpparameter, DWORD dwcreationflags, LPDWORD lpthreadid );

Programování vláken ve Win32 Ukončení vlákna: VOID ExitThread ( DWORD dwexitcode ); Ukončení z jiného vlákna: BOOL TerminateThread ( HANDLE hthread, DWORD dwexitcode );

Programování vláken ve Win32 Pozastavení vlákna: DWORD SuspendThread( HANDLE hthread ); Opětovné spuštění vlákna: DWORD ResumeThread( HANDLE hthread );

Přístup ke sdíleným prostředkům operace jsou prováděny ve více krocích při souběžném přístupu může dojít k jejich přerušení vlákno je přeplánováno uprostřed operace výsledek závisí na pořadí provádění vláken nastává tzv. race condition (chyba souběhu) 20

Řešení chyby souběhu Kritická sekce dokud není operace dokončena, není možné začít jinou, bez ohledu na počet kroků (atomická změna datové struktury) je nutné identifikovat kritické sekce programu systém zajistí vzájemné vyloučení (mutual exlusion) kód kritické sekce může provádět jen jedno vlákno!! 21

Realizace vzájemného vyloučení Vlákno 1 Vlákno 2 p1_locked = TRUE; p2_locked = TRUE; turn = P2; turn = P1; while (p2_locked && turn = P2); //critical section p1_locked = FALSE; while (p1_locked && turn == P1); //critical section p2_locked = FALSE; 22

Synchronizace vláken - 1 Cíle: zabránit konfliktům mezi vlákny při přístupu ke sdíleným prostředkům (paměti, souborům, periferním zařízením, ap.) pozastavení běhu vláken, dokud nejsou splněny specifikované podmínky nebo nenastane určená událost; zajistit vykonání určitých programových sekvencí v požadovaném pořadí. 23

Synchronizace vláken - 2 Optimální mechanismus synchronizace vláken je založen na možnosti převedení vlákna do stavu čekání resp. spánku (waiting, sleeping), kdy mu není přidělován čas procesoru (viz obr. Stavy vlákna ). V tomto stavu vlákno setrvá tak dlouho, dokud nebudou splněny požadované podmínky (např. ukončení jiného vlákna nebo procesu, nenulový stav semaforu, signalizovaná událost, uplynutí nastaveného časového intervalu apod.). Jakmile podmínky nastanou, systém vlákno probudí, tzn. přesune je (v závislosti na jeho prioritě) do příslušné fronty aktivních procesů připravených na přidělení procesoru. 24

Synchronizace pomocí objektů jádra ve Win32 Synchronizace vláken pomocí funkce: DWORD WaitForSingleObject ( HANDLE hobject, DWORD dwtimeout ); DWORD WaitForMultipleObjects ( DWORD cobjects, CONST HANDLE *lphobjects, BOOL fwaitall, DWORD dwtimeout ); hobject = manipulátor (handle) synchronizačního objektu (mutex, semafor, událost, soubor, proces, vlákno, ) Synchr. objekt je v signalizovaném nebo nesignalizovaném stavu!

Mutex (Mutual Exclusion) synchronizační objekt typu binární semafor signalizován, pokud není vlastněn žádným vláknem typicky se používá pro přístup do kritické sekce Vytvoření mutexu: HANDLE CreateMutex ( LPSECURITY_ATTRIBUTES lpmutexattributes, BOOL binitialowner, LPCTSTR lpname ); Otevření mutexu: HANDLE OpenMutex ( DWORD fdwaccess, BOOL finherit, LPCTSTR lpszmutexname ); Uvolnění mutexu: BOOL ReleaseMutex ( HANDLE hmutex );

Příklad vícevláknového programu - 1 #include <windows.h> HANDLE hthreads[2]; HANDLE g_hmutex; DWORD dwthreadid1, dwthreadid2; int WinMain(...) { // Vytvoření mutexu g_hmutex = CreateMutex (NULL, FALSE, NULL);

Příklad vícevláknového programu - 2 // Vytvoření vláken a jejich okamžité spuštění hthreads[0] = CreateThread (NULL, 0, FirstThread, NULL, 0, &dwthreadid1); hthreads[1] = CreateThread (NULL, 0, SecondThread, NULL, 0, &dwthreadid2); // Čekání na ukončení vláken FirstThread a SecondThread ; // primární vlákno je pozastaveno WaitForMultipleObjects (2,hThreads,TRUE,INFINITE); // Uzavření manipulátorů obou vláken CloseHandle (hthreads[0]); CloseHandle (hthreads[1]); }

Příklad vícevláknového programu - 3 DWORD WINAPI FirstThread (LPVOID lpvthreadparm) { BOOL fdone = FALSE; DWORD dw; while (!fdone) { // čekání na signalizaci mutexu, vlákno je pozastaveno dw = WaitForSingleObject(g_hMutex, INFINITE); } } if (dw == WAIT_OBJECT_0) { // mutex byl signalizován, vlákno může pokračovat... // hlavní programová sekvence vlákna FirstThread... // uvolnění mutexu ReleaseMutex (g_hmutex); }

Příklad vícevláknového programu - 4 DWORD WINAPI SecondThread (LPVOID lpvthreadparm) { BOOL fdone = FALSE; DWORD dw; while (!fdone) { // čekání na signalizaci mutexu, vlákno je pozastaveno dw = WaitForSingleObject(g_hMutex, INFINITE); } } if (dw == WAIT_OBJECT_0) { // mutex byl signalizován, vlákno může pokračovat... // hlavní programová sekvence vlákna SecondThread... // uvolnění mutexu ReleaseMutex (g_hmutex); }

Semafory - 1 synchronizační objekty používané např. ke sledování počtu volných systémových prostředků. hodnota semaforu se pohybuje od nuly do specifikované maximální hodnoty. semafor je signalizován, je-li jeho hodnota větší než nula, nesignalizován, je-li hodnota nulová. při volání funkce WaitForSingleObject (hsemaphore, ) systém zjistí, zda je hodnota semaforu větší než nula a pak ji dekrementuje o jedničku k uvolnění semaforu (tzn. inkrementaci jeho hodnoty) se používá volání funkce ReleaseSemaphore() ReleaseSemaphore() má jiné chování než ReleaseMutex(). Může být volána libovolným vláknem, které má k objektu semaforu přístup. Hodnota semaforu je inkrementována o hodnotu danou argumentem creleasecount.

Semafory - 2 HANDLE CreateSemaphore ( LPSECURITY_ATTRIBUTES lpsemaphoreattributes, LONG linitialcount, LONG lmaximumcount, LPCTSTR lpname ); HANDLE OpenSemaphore ( DWORD fdwaccess, BOOL finherit, LPCTSTR lpszsemname ); BOOL ReleaseSemaphore ( HANDLE hsemaphore, LONG creleasecount, LPLONG lplpreviouscount );

Příklad HANDLE CreateNewSemaphore(LPSECURITY_ATTRIBUTES lpsa, LONG cinitial, LONG cmax, LPTSTR lpszname) { HANDLE hsem; hsem = CreateSemaphore( lpsa, // pointer na security attributes cinitial, // počáteční hodnota cmax, // maximální hodnota lpszname) // jméno semaforu if (hsem!= NULL && GetLastError() == ERROR_ALREADY_EXISTS) { // semafor již existuje, funkce vrátí NULL CloseHandle(hSem); return NULL; } return hsem; // vrátí handle nově vytvořeného semaforu }

Události (Events) Události se zpravidla používají k oznámení, že má být nebo byla ukončena nebo zahájena určitá činnost. Rozlišují se dva typy událostí: ručně resetované a automaticky resetované. Vytvoření události: HANDLE CreateEvent ( LPSECURITY_ATTRIBUTES lpeventattributes, BOOL bmanualreset, BOOL binitialstate, LPCTSTR lpname );

Ručně resetované události do signalizovaného stavu jsou uvedeny voláním funkce: BOOL SetEvent ( HANDLE hevent ); události nejsou prostřednictvím funkcí WaitForSingleObject(), WaitForMultipleObject() převedeny automaticky zpět do nesignalizovaného stavu (jako u mutexu). v signalizovaném stavu událost zůstává tak dlouho, dokud ji některé z vláken explicitně nepřepne do nesignalizovaného stavu. K přepnutí (resetování) se používá funkce: BOOL ResetEvent ( HANDLE hevent ); posloupnost volání SetEvent(), uvolnění všech čekajících vláken a volání ResetEvent() je možné nahradit jedinou funkcí: BOOL PulseEvent ( HANDLE hevent );

Automaticky resetované události s automaticky resetovanými událostmi je možné pracovat podobně jako s ručně resetovanými- jiný je mechanismus resetování!!! do signalizovaného stavu jsou automaticky resetované události uvedeny voláním funkce SetEvent(); oproti ručně resetovaným událostem jsou automaticky resetované události převedeny systémem bezprostředně po probuzení čekajícího vlákna zpět do nesignalizovaného stavu; v běhu může pokračovat pouze jediné vlákno ze všech, která na událost čekají; ostatní vlákna zůstávají pozastavena; použití funkce ResetEvent() je zbytečné.

Multithreading v LabWindows/CVI Thread Pool CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE, DataAcqThreadFunction, NULL, &functionid); int CVICALLBACK ThreadFunction (void *functiondata); Asynchronous Timer

Multithreading v LabWindows/CVI příklad použití Thread Pool int CVICALLBACK DataAcqThreadFunction (void *functiondata); int main(int argc, char *argv[]) { int panelhandle; int functionid; if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelhandle = LoadPanel(0, "DAQDisplay.uir", PANEL)) < 0) return -1; DisplayPanel (panelhandle); CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE, DataAcqThreadFunction, NULL, &functionid); RunUserInterface ();

} Příklad - pokračování DiscardPanel (panelhandle); CmtWaitForThreadPoolFunctionCompletion (DEFAULT_THREAD_POOL_HANDLE, functionid, 0); return 0; int CVICALLBACK DataAcqThreadFunction (void *functiondata) { while (!quit) { Acquire(...); Analyze(...); } return 0; }

Ochrana dat Thread Lock Thread-Safe Variables Thread-Safe Queue

Příklad Viz materiály NI