Přednáška 4. Klasické synchronizační úlohy. Implementace procesů, vláken.



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

Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP.

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

PARA Filozofové, kuřáci a holič

Synchronizace paralelních procesů

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 1: Úvod

Jak je definována kritická sekce? Jaký je rozdíl mezi aktivním čekáním a blokováním procesů?

04. Mutexy, monitory. ZOS 2006, L. Pešička

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

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

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

Úvod do mobilní robotiky AIL028

Chapter 6: Process Syncronization

Chapter 7: Process Synchronization

Úvod do mobilní robotiky AIL028


Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Chapter 6: Process Synchronization

Abstraktní datové typy

UNIVERZITA OBRANY. Knihovna HLAGate. Programátorská dokumentace. Petr Františ

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Chapter 6: Process Synchronization

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

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

Grafické znázornění vláken a klasické problémy synchronizace



Paralelní programování

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Téma 5 Synchronizace procesů a problém uváznutí Obsah

Základní datové struktury III: Stromy, haldy

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Synchronizace procesů

Procesy a vlákna - synchronizace

Téma 5 Synchronizace procesů a problém uváznutí

Rekurzivní algoritmy

5 Rekurze a zásobník. Rekurzivní volání metody

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Část 2

Informační systémy 2008/2009. Radim Farana. Obsah. Aktivní serverové stránky ASP. Active Server Pages. Activex Data Objects. LDAP database.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

BI-EP1 Efektivní programování 1

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

PŘETĚŽOVÁNÍ OPERÁTORŮ

Obvody kontaktního řízení

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

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

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Paralelní programování

Mělká a hluboká kopie

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

Postřehová hra. Zadání projektu. 1 Moje cíle

Typický prvek kolekce pro české řazení

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

KTE / ZPE Informační technologie

Pavel Procházka. 3. prosince 2014

Rozptylování, stromy - zákl. vlastnosti

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

Distribuované systémy a výpočty

Jazyk C++, některá rozšíření oproti C

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

Konstruktory překladačů

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 A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

7. ODE a SIMULINK. Nejprve velmi jednoduchý příklad s numerických řešením. Řešme rovnici

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

Abstraktní třídy, polymorfní struktury

Synchronizace procesů

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

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT. Cyklus while, do-while, dělitelnost, Euklidův algoritmus

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Bubble sort. příklad. Shaker sort

Čipové karty Lekařská informatika

Informace o písemných přijímacích zkouškách. Doktorské studijní programy Matematika

C# konzole Program emoce

Stromy, haldy, prioritní fronty

Dokumentace ke knihovně InsDevice

Distribuovaná synchronizace. Paralelní a distribuované systémy. 11. Přednáška Vzájemné vyloučení. Centralizovaný algoritmus - fronta procesů

Poslední nenulová číslice faktoriálu

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Ř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

Architektury VLIW M. Skrbek a I. Šimeček

Konstruktory a destruktory

Dynamické programování. Optimální binární vyhledávací strom

Pracovní ukázka vstupního testu DSA 1.

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Úvod Petr Kropík viz:

1. Téma 12 - Textové soubory a výjimky

Úvod do programovacích jazyků (Java)

Matematická indukce a správnost programů. Základy diskrétní matematiky, BI-ZDM ZS 2011/12, Lekce 13

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Algoritmizace a programování

Programování v Pythonu

Transkript:

Přednáška 4 Klasické synchronizační úlohy. Implementace procesů, vláken. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti 1

Večeřící filosofové Model procesů, které soutěží o výlučný přístup k omezenému počtu prostředků. N filozofů sedí kolem kulatého stolu a každý z nich buď přemýšlí nebo jí. K jídlu potřebuje současně levou a pravou vidličku. Naivní řešení: void philosopher(int i){ while (TRUE){ think(); take_fork(i); take_fork((i+1)% N); eat(); put_fork(i); put_fork((i+1) % N); 2

Večeřící filosofové Naivní řešení může selhat Všichni filozofové vezmou levou vidličku současně a potom budou čekat až se uvolní pravá vidlička => uváznutí(budou čekat donekonečna). Vylepšené řešení Pokud není pravá vidlička k dispozici, filozof vrátí již alokovanou levou vidličku zpět na stůl a pokus o jídlo zopakuje později. Vylepšené řešení může také selhat Všichni filozofové vezmou levou vidličku. Pak se pokusí vzít pravou vidličku, ale protože není volná, vrátí levou vidličku zpět. Toto budou donekonečna opakovat. => livelock (sice nečekají, ale donekonečna provádí to samé a nikdy se jim to nepovede dokončit) 3

Večeřící filosofové semaphore mutex=1; void philosopher(int i){ while(true){ think(); take_fork(i); take_fork((i+1) % N); eat(); put_fork(i); put_fork((i+1 % N); Nevýhoda: pouze jeden filozof může jíst i když by mohlo jíst současně více filozofů. 4

Večeřící filosofové #define N 5 #define LEFT ((i+n-1) % N) #define RIGHT ((i+1) % N) enum stat(thinking, hungry, eating); enum stat state[n];semaphore mutex=1;semaphore s[n]; # initially set to 0 void philosopher(int i) { while (TRUE) { think(); take_forks(i); eat(); put_forks(i); void take_forks(int i) { state[i] = hungry; test(i); down(&s[i]); void put_forks(int i) { state[i] = thinking; test(left); test(right); void test(int i) { if (state[i] == hungry && state[left]!= eating && state[right]!= eating) { state[i] = eating; up(&s[i]); 5

Čtenáři - písaři Model procesů, které přistupují do společné databáze. Více čtenářů může číst současně data pokud žádný písař nemodifikuje data v databázi. Pouze jeden písař může modifikovat data v databázi v jednom okamžiku. 6

Čtenáři - písaři int rc = 0; /* readers counter */ semaphore mutex = 1; semaphore db = 1; /* access to database */ void reader(void) { while(true) { rc = rc + 1; if (rc == 1) down(&db); read_data_base(); /* crit. Section */ rc = rc 1; if (rc == 0) up(&db); use_data_read(); /* non crit. Sect.*/ void writer(void) { while(true) { think_up_data(); down(&db); write_data_base(); up(&db); 7

Čtenáři - písaři i n t r c = 0, w c = 0 ; / * r e a d e r s a n d w r i t e s c o u n t e r s * / s e m a p h o r e m u t e x - r c = 1, m u t e x - w c = 1 ; s e m a p h o r e q u e u e = 1, w r i t e = 1, r e a d = 1 ; / * a c c e s s t o d a t a b a s e * / v o i d r e a d e r ( v o i d ) { w h i l e ( T R U E ) { d o w n ( & q u e u e ) ; d o w n ( & r e a d ) ; d o w n ( & m u t e x - r c ) ; r c = r c + 1 ; i f ( r c = = 1 ) d o w n ( & w r i t e ) ; u p ( & m u t e x - r c ) ; u p ( & r e a d ) ; u p ( & q u e u e ) ; r e a d _ d a t a _ b a s e ( ) ; / * C S * / d o w n ( & m u t e x - r c ) ; r c = r c - 1 ; i f ( r c = = 0 ) u p ( & w r i t e ) ; u p ( & m u t e x - r c ) ; u s e _ d a t a _ r e a d ( ) ; / * n o n C S * / v o i d w r i t e r ( v o i d ) { w h i l e ( T R U E ) { t h i n k _ u p _ d a t a ( ) ; / * n o n C S * / d o w n ( & m u t e x - w c ) ; w c = w c + 1 ; i f ( w c = = 1 ) d o w n ( & r e a d ) ; u p ( & m u t e x - w c ) ; d o w n ( & w r i t e ) ; w r i t e _ d a t a _ d a t a ( ) ; / * C S * / u p ( & w r i t e ) ; d o w n ( & m u t e x - w c ) ; w c = w c - 1 ; i f ( w c = = 0 ) u p ( & r e a d ) ; u p ( & m u t e x - w c ) ; 8

Spící holiči V holičství je N holičů (barber), N holících křesel (barber chair) a M čekacích křesel (waiting chair) pro zákazníky. Pokud není žádný zákazník v holičství, holič sedne do holícího křesla a usne. Pokud přijde zákazník, potom 1. pokud nějaký holič spí, tak ho probudí a nechá se ostříhat, 2. jinak si sedne do křesla a čeká (pokud nějaké je volné), 3. jinak opustí holičství. 9

#define CHAIRS 5 int waiting = 0; /* customers are waiting (not being cut) */ semaphore mutex = 1; /* for mutual exclusion */ semaphore customers = 0; /* # of customers waiting for service */ semaphore barbers = 0; /* # of barbers waiting for customers */ Spící holiči void Customer(void) { if (waiting < CHAIRS) { waiting = waiting + 1; up(&customes); down(&barbers); get_haircut(); else { void Barber(void) { while (TRUE) { down(&customers); down(&mutex) waiting = waiting - 1; up(&barbers); cut_hair(); 10