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

Podobné dokumenty
David Bednárek Jakub Yaghob Filip Zavoral.

NPRG051 Pokročilé programování v C /17 Úkol 2

3. týden týden týden týden týden týden Termín DÚ: vždy úterý 9:00. Zadání DÚ 1

Práce s pamětí. Tématicky zaměřený vývoj aplikací v jazyce C skupina Systémové programování Linux. Martin Husák, Petr Velan, Martin Drašar

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

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

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

PB071 Programování v jazyce C

Open Source Programování

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.

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

Programování v C++ 2, 4. cvičení

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

C++ a vnější svět. David Bednárek Jakub Yaghob Filip Zavoral

Pavel Procházka. 3. prosince 2014

David Bednárek Jakub Yaghob Filip Zavoral.

Roury a zprávy Mgr. Josef Horálek

Procesy a vlákna - synchronizace

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Mělká a hluboká kopie

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)

Generické programování

Jakub Čermák Microsoft Student Partner

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Paralelní programování

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

Struktura programu v době běhu

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

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

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Teoretické minimum z PJV

Synchronizace vjj 1

Osnova přednášky. Informační a řídicí systémy I. Ovladače v OS a v ŘS REX. Ovladače ve Windows. Komunikace s ovladači v OS

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

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

Vytváření a použití knihoven tříd

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

Programování v C++ 3, 3. cvičení

Jazyk C++ I. Šablony 3

Softwarové komponenty a Internet

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

Vlákna Co je to vlákno?

Principy objektově orientovaného programování

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

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

Více o konstruktorech a destruktorech

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

POSIX X b. Přenositelné rozhraní pro Real-Time operační systémy

Jazyk C++ I. Šablony

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Dokumentace ke knihovně InsDevice

Bootkity v teorii a praxi. Martin Dráb martin.drab@ .cz

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

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

ADT/ADS = abstraktní datové typy / struktury

Programování v Javě I. Leden 2008

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Asynchronní programování v.net

PB161 Programování v jazyce C++ Přednáška 10

PRINCIPY OPERAČNÍCH SYSTÉMŮ

Jazyk C++ I. Šablony 2

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Paralelní programování

POSIX, Make, CMake. Miroslav Jaroš. PB071 Úvod do nízkoúrovňového programovnání. 29. dubna 2019

Programování v C++ 2, 8. cvičení

Úvod do programování - Java. Cvičení č.4

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Zápis programu v jazyce C#

a co je operační systém?

KTE / ZPE Informační technologie

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

Paralelní programování

Procesy a vlákna (Processes and Threads)

Programování v Javě I. Únor 2009

Programování ve Windows Dynamické knihovny. Andrea Číková Martin Osovský

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

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

12. Správa souborů. ZOS 2006, L. Pešička

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

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.

Seminář Java II p.1/43

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

PREPROCESOR POKRAČOVÁNÍ

Java a XML. 10/26/09 1/7 Java a XML

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

Úvod do programovacích jazyků (Java)

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

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

Programování v C++ 1, 5. cvičení

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

Souborové operace Mgr. Josef Horálek

David Bednárek Jakub Yaghob Filip Zavoral.

Java - řazení objektů

Šablony, kontejnery a iterátory

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

Čipové karty Lekařská informatika

Transkript:

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

Vazby na OS Co není řešeno ISO normou Pokročilá práce se soubory Paměťově mapované soubory, asynchronní soubory Práce s adresáři Práce s procesy a vlákny Synchronizační primitiva Sdílená paměť DLL Jednotné rozhraní, implementace podle OS

Asynchronní soubory Spuštění souborové operace a pokračování v práci Vznik nové entity, na které se dá zjistit stav operace nebo čekat na dokončení operace Aplikace async_read OS start read is_ready read finished

Asynchronní soubory demo Windows HANDLE f = CreateFile( f.txt, FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS FILE_FLAG_OVERLAPPED, 0); OVERLAPPED o; memset(&o, 0, sizeof(overlapped)); o.hevent = CreateEvent(0, TRUE, FALSE, 0); o.offset = offs; ReadFile(f, buf, sz, &rsz, &o); WaitForSingleObject(o.hEvent, INFINITE); CloseHandle(o.hEvent); CloseHandle(f); AIO int f = open( f.txt, O_RDONLY O_LARGEFILE, rights); aiocb a; memset(&a, 0, sizeof(aiocb)); aiocb. aio_fildes = f; aiocb. aio_offset = offs; aiocb. aio_nbytes = sz; aiocb. aio_buf = buf; aiocb. aio_sigevent.sigev_notify = SIGEV_NONE; aio_read(&a); aio_suspend(&a, 1, 0); rsz = aio_return(&a); close(f);

Paměťově mapované soubory Namapování, odmapování souboru Na otevřený soubor Vytvoření, zánik okna Soubor VAP okno

Paměťově mapované soubory Windows

Paměťově mapované soubory demo Windows HANDLE f = CreateFile( f.txt, FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, 0); HANDLE m = CreateFileMapping(f, 0, PAGE_READONLY, 0, sz, 0); void *p = MapViewOfFileEx(m, FILE_MAP_READ, 0, offs, sz, hinta); POSIX int f = open( f.txt, O_RDONLY O_LARGEFILE, rights); void *p = mmap(hinta, sz, PROT_READ, MAP_SHARED, f, offs); munmap(p, sz); close(f); UnmapViewOfFile(p); CloseHandle(m); CloseHandle(f);

Práce s adresáři Otevření, zavření adresáře U některých OS i s filtrem jmen Čtení adresáře Získání jména, atributů, velikosti, práv, Vytváření, rušení adresáře

Práce s adresáři demo Windows WIN32_FIND_DATA ffd; HANDLE dir = FindFirstFile( C:\\*.*, &ffd); do { // do something with ffd.cfilename and ffd. dwfileattributes } while(findnextfile(dir, &ffd)); FindClose(dir); POSIX DIR *dir = opendir( / ); for(;;) { } dirent *de = readdir(dir); if(!de) break; // the end // do something with de->d_name and de->d_type closedir(dir);

Práce s procesy a vlákny Start nového procesu Předání parametrů, prostředí Start vlákna, čekání na dokončení vlákna Bude řešeno v C++ 0x

Vlákna demo Windows class thr_class { public: void start(); int thr_fnc() = 0; private: static DWORD WINAPI win_thr(lpvoid p); }; DWORD WINAPI thr_class::win_thr(lpvoid p) { } thr_class *tc = static_cast<thr_class*>(p); return tc->thr_fnc(); void thr_class::start() { } DWORD thrid; CreateThread(0, ssz, win_thr, this, 0, &thrid); pthread class thr_class { public: void start(); void thr_fnc() = 0; private: static void *p_thr(void *p); pthread_attr_t pat; }; void *p_thr(void *p) { thr_class *tc = static_cast<thr_class*>(p); tc->thr_fnc(); return 0; } void thr_class::start() { } pthread_attr_init(&pat); pthread_attr_setdetachstate(&pat, PTHREAD_CREATE_DETACHED); pthread_create(&thrid, &pat, p_thr, this);

Synchronizační primitiva Semafory Anonymní, pojmenované Kritická sekce Spin-lock Udělej si sám Atomické (interlocked) operace Windows Events WaitForSingleObject, WaitForMultipleObjects POSIX Pthread

Semafor demo Windows HANDLE s = CreateSemaphore(0, ival, numeric_limits<int>::max(), 0); POSIX sem_t s; sem_init(&s, 1, ival); ReleaseSemaphore(s, 1, 0); sem_post(&s); WaitForSingleObject(s); sem_wait(&s); CloseHandle(s); sem_destroy(&s);

Sdílená paměť Sdílení paměti mezi různými procesy Obvykle identifikována jménem Granularita na stránky MASOS, SASOS offsety VAP A FAP VAP B App B App A App A App B

Sdílená paměť demo SASOS Windows klient HANDLE shm = OpenFileMapping( FILE_MAP_WRITE FILE_MAP_READ, FALSE, moje ); void *p = MapViewOfFileEx(shm, FILE_MAP_READ, 0, 0, sz, hinta); struct s { int n; int *ptr; }; for(int i=0;i<static_cast<s*>(p)->n;++i) cout << static_cast<s*>(p)->ptr[i]; UnmapViewOfFile(p); CloseHandle(shm); Windows server HANDLE shm = CreateFileMapping (INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, sz, moje ); void *p = MapViewOfFileEx(shm, FILE_MAP_WRITE, 0, 0, sz, hinta); struct s { int n; int *ptr; }; static_cast<s*>(p)->n = N; static_cast<s*>(p)->ptr = static_cast<char*>(p)+sizeof(s); for(int i=0;i<n;++i) static_cast<s*>(p)->ptr[i] = i; UnmapViewOfFile(p); CloseHandle(shm);

Sdílená paměť demo MASOS Windows klient HANDLE shm = OpenFileMapping( FILE_MAP_WRITE FILE_MAP_READ, FALSE, moje ); void *p = MapViewOfFileEx(shm, FILE_MAP_READ, 0, 0, sz, hinta); struct s { int n; size_t offs; }; for(int i=0;i<static_cast<s*>(p)->n;++i) cout << static_cast<int*>(static_cast<char*>(p) +static_cast<s*>(p)->offs)[i]; UnmapViewOfFile(p); CloseHandle(shm); Windows server HANDLE shm = CreateFileMapping (INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, sz, moje ); void *p = MapViewOfFileEx(shm, FILE_MAP_WRITE, 0, 0, sz, hinta); struct s { int n; size_t offs; }; static_cast<s*>(p)->n = N; static_cast<s*>(p)->offs = sizeof(s); for(int i=0;i<n;++i) static_cast<int*>(static_cast<char*>(p) +static_cast<s*>(p)->offs)[i] = i; UnmapViewOfFile(p); CloseHandle(shm);

Sdílená paměť demo POSIX klient int shm = shm_open( moje, O_RDWR, rights); void *p = mmap(hinta, sz, PROT_READ, MAP_SHARED, shm, 0); struct s { int n; int *ptr; }; for(int i=0;i<static_cast<s*>(p)->n;++i) cout << static_cast<s*>(p)->ptr[i]; munmap(p, sz); close(shm); shm_unlink( moje ); POSIX server int shm = shm_open( moje, O_RDWR O_CREAT O_EXCL, rights); void *p = mmap(hinta, sz, PROT_READ PROT_WRITE, MAP_SHARED, shm, 0); struct s { int n; int *ptr; }; static_cast<s*>(p)->n = N; static_cast<s*>(p)->ptr = static_cast<char*>(p)+sizeof(s); for(int i=0;i<n;++i) static_cast<s*>(p)->ptr[i] = i; munmap(p, sz); close(shm); shm_unlink( moje );

DLL Dynamické natažení za běhu Získání adresy funkce podle zveřejněného jména Windows Samostatný EXE vlastní kód, data, heap POSIX Shared objects

DLL demo Windows HANDLE dll = LoadLibrary( moje.dll ); typedef void (*dll_fnc_t)( ); dll_fnc_t dll_fnc = reinterpret_cast<dll_fnc_t> (GetProcAddress(dll, fnc )); dll_fnc( ); FreeLibrary(dll); POSIX void *dll = dlopen( moje.dll, RTLD_NOW); typedef void (*dll_fnc_t)( ); dll_fnc_t dll_fnc = reinterpret_cast<dll_fnc_t> (dlsym(dll, fnc )); dll_fnc( ); dlclose(dll);