Synchronizace paralelních procesů

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

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

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

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

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.

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

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

PARA Filozofové, kuřáci a holič

Procesy a vlákna - synchronizace

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

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

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

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

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

Paralelní programování

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

Synchronizace Mgr. Josef Horálek

Paralelní programování

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

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

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

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

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

TÉMATICKÝ OKRUH Počítače, sítě a operační systémy

Téma 36. Petr Husa

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)

Chapter 7: Process Synchronization

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

Management procesu I Mgr. Josef Horálek

Operační systémy - modelování a algoritmy paralelních výpočtů

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)

Teoretická informatika Tomáš Foltýnek Paralelní programování

Chapter 6: Process Syncronization

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

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Paralelní programování

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

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

Synchronizace procesů

Paralelní programování

Procesy a vlákna (Processes and Threads)

Synchronizace procesů

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

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

Paralelní programování

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

Pavel Procházka. 3. prosince 2014

Paralelní programování

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

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

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

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.

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ DOKTORSKÁ DISERTAČNÍ PRÁCE

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

Česká letecká servisní a. s.

Jazykové konstrukce pro paralelní výpočty

Čipové karty Lekařská informatika

Petr Štěpán, K13133 KN-E-129 Téma 5. Synchronizace a deadlock

Paralelní programování

ZOS. Verze 2010-srpen-31, v3 L. Pešička

Paralelní programování

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

Synchronizace vjj 1

Poslední nenulová číslice faktoriálu

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

Vzájemné vyloučení procesů

x86 assembler and inline assembler in GCC

Princip funkce počítače

Management procesu II Mgr. Josef Horálek

Paralelní programování

B4B35OSY: Operační systémy

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

Základní úrovně: Moorův zákon: multi-core mikroprocesory (CPU) hypertherading pipeline many-core Paralelní systém Instrukce iterace procedura Proces

Cvičení č. 3. Sdílené prostředky a synchronizace Program Banka. 4 body

Téma 4. Synchronizace a deadlock

Základy digitální techniky

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

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

Struktura programu v době běhu

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

Ukázka zkouškové písemka OSY

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

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

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.

User manual SŘHV Online WEB interface for CUSTOMERS June 2017 version 14 VÍTKOVICE STEEL, a.s. vitkovicesteel.com

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

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í

Chapter 6: Process Synchronization

Chapter 6: Process Synchronization

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Konstruktory a destruktory

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Principy operačních systémů. Lekce 7: Obrana proti deadlocku

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

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

Distribuované systémy a výpočty

Základní principy konstrukce systémové sběrnice - shrnutí. Shrnout základní principy konstrukce a fungování systémových sběrnic.

Transkript:

SU Media: Student Středník ČWUT AVC SH Akropolis ikariéra Synchronizace paralelních procesů <small>z ČWUT</small> Obsah 1 Časově závislé chyby, kritické sekce, vzájemné vyloučení 2 Metody vzájemného vyloučení 2.1 zákaz přerušení (Disable Interrupt = DI) 2.2 povinné střídání 2.3 Dekker-Petersonův algoritmus 2.4 instrukce TSL 2.5 operace sleep a wakeup 2.6 semafory 2.7 monitory 2.8 zasílání zpráv 3 Klasické synchronizační úlohy a jejich řešení 3.1 producent a konzument 3.1.1 Řešení s využitím sleep a wake-up 3.1.2 Řešení s využitím semaforů 3.1.3 Řešení s využitím monitorů 3.1.4 Řešení s pomocí zasílání zpráv 3.2 večeřící filozofové 3.3 čtenáři a písaři 3.4 spící holič Časově závislé chyby, kritické sekce, vzájemné vyloučení časově závislé chyby Dva nebo několik procesů používá (čte/zapisuje) společné sdílené prostředky (např. sdílená paměť, sdílení proměnné, sdílené soubory, ). Výsledek výpočtu je závislý na přepínání kontextu jednotlivých procesů, které používají sdílené prostředky. Velmi špatně se detekují (náhodný výskyt)! kritická sekce = část programu, kde procesy používají sdílené prostředky (např. sdílená paměť, sdílená proměnná, sdílený soubor,...). Sdružené kritické sekce = kritické sekce dvou (nebo více) procesů, které se týkají stejného sdíleného prostředku. vzájemné vyloučení Procesům není dovoleno sdílet stejný prostředek ve stejném čase. Procesy se nesmí nacházet ve sdružených sekcích současně. Metody vzájemného vyloučení zákaz přerušení (Disable Interrupt = DI) CPU je přidělováno postupně jednotlivým procesům za pomoci přerušení od časovače nebo jiného přerušení. Proces zakáže všechna přerušení před vstupem do kritické sekce a opět je povolí až po opuštění kritické sekce. Nevýhoda: DI od jednoho uživatele blokuje i ostatní uživatele. Ve víceprocesorovém systému, DI má efekt pouze na aktuálním CPU. Zpomalí reakce na přerušení. Problém se špatně napsanými programy (zablokují CPU)

Užitečná technika uvnitř jádra OS (ale pouze na krátký čas) Není vhodná pro běžné uživatelské procesy!!! povinné střídání /* Process A */ while (turn!= 0); /* wait */ critical_section(); turn=1; noncritical_section(); /* Process B */ while (turn!= 1); /* wait */ critical_section(); turn=0; noncritical_section(); Nevýhody Jeden proces může zpomalit ostatní procesy. Proces nemůže vstoupit do kritické sekce opakovaně (je porušen bod 3 z nutných podmínek... ). Dekker-Petersonův algoritmus #define FALSE 0 #define TRUE 1 #define N 2 /* number of processes */ int turn; /* whose turn is it? */ int interested[n]; /* all values initially FALSE */ void enter_section (int process) /* process is 0 or 1 */ { int other; /* number of other processes */ other = 1 - process; /* the opposite of process */ interested[process] = TRUE; /* show that you are interested */ turn = process; /* set flag */ while (turn == process && interested[other]); /* busy waiting */ void leave_section (int process) /* process: who is leaving */ { interested[process] = FALSE; /* indicate departure from CS */ instrukce TSL Test and Set Lock (TSL) instrukce načte obsah slova z dané adresy v paměti do registru a nastaví obsah slova na nenulovou hodnotu. CPU provádějící TSL instrukci zamkne paměťovou sběrnici, aby znemožnilo ostatním CPU v přístupu do paměti dokud se instrukce TSL nedokončí. Korektní hardwarové řešení. TSL může být použita při synchronizaci v multiprocesorových systémech se sdílenou pamětí. enter_section: TSL REGISTER, LOCK copy LOCK to REGISTER and set LOCK to 1 CMP REGISTER, #0 was LOCK zero? JNE enter_section if it was non zero, LOCK was set, so loop RET return to caller, critical section entered leave_section: MOVE LOCK, #0 RET store a 0 in LOCK return to caller

operace sleep a wakeup semafory monitory Sleep() Systémové volání, které zablokuje proces, který ho zavolal. Zakáže alokování CPU pro tento proces a přesune ho do čekací fronty. Wakeup(proces) Opačná operace, proces je uvolněn z fronty čekajících procesů a bude mu opět přidělováno CPU. Datový typ semafor obsahuje čítač a frontu čekajících procesů. Nabízí tři základní operace: Init(): Čítač se nastaví na zadané číslo (většinou 1) a fronta se vyprázdní. Down(): Pokud je čítač větší než nula, potom se sníží o jedničku. V opačném případě se volající proces zablokuje a uloží do fronty. Up(): Pokud nějaké procesy čekají ve frontě, potom se první z nich probudí. V opačném případě se čítač zvětší o jedničku. Každá z těchto instrukcí je prováděna atomicky (tzn. že během jejího provádění nemůže být přerušena) Počáteční hodnota čítače semaforu určuje kolik procesů může sdílet nějaký prostředek současně. Z počáteční a aktuální hodnoty lze potom určit, kolik procesů je v daném okamžiku v kritické sekci. Binární semafor Je často nazýván mutex (mutual exclusion). Čítač semaforu je na začátku nastaven na jedničku. Umožňuje jednoduše synchronizovat přístup do kritické sekce. Problém se semafory = Pokud například zapomenete použít operaci up() na konci kritické sekce, potom procesy čekající ve frontě budou čekat navždy (uváznutí). Řešení Vyšší úroveň synchronizace se nazývá monitory. Monitor je konstrukce vyšších programovacích jazyků, která nabízí stejné možnosti jako semafor. Pouze jeden proces může být prováděn uvnitř monitoru v jednom okamžiku. Monitory byly implementovány například v Concurrent Pascal, Pascal-Plus, Modula-2, Modula-3, Java,.NET, Monitor Množina procedur, proměnných a datových struktur, které jsou seskupeny dohromady ve speciálním modulu. Pouze jeden proces může být aktivní v daném monitoru v jednom okamžiku. Překladač (nikoliv programátor) se stará o vzájemné vyloučení uvnitř monitoru. Podmíněné proměnné Předdefinovaná datový typ, který umožní pozastavit a opět spustit běžící proces. Operace Wait(c): Pozastaví volající proces na podmíněné proměnné c. Signal(c): Spustí některý z pozastavených procesu na podmíněné proměnné c. zasílání zpráv Dvě základní operace: send(destination,&message), receive(source,&message). Synchronizace Blokující send, blokující receive (rendezvous). Neblokující send, blokující receive. Neblokující send, neblokující receive + test příchozích zpráv. Adresování Přímé: zpráva je uložena přímo do prostoru daného příjemce. Nepřímé: zpráva je uložena dočasně do sdílené datové struktury (mailbox). To umožňuje lépe implementovat kolektivní komunikační algoritmy (one-to-one, one-to-many, many-to-many).

Klasické synchronizační úlohy a jejich řešení producent a konzument Jeden z klasických synchronizačních problémů, který demonstruje problémy paralelního programování. Producent produkuje nějaká data a vkládá je do sdílené paměti. Konzument vybírá data ze sdílené paměti. Řešení s využitím sleep a wake-up define N 100 /* number of slots in the buffer */ int count = 0; /* number of items in buffer */ void producer() { int item; while(true) { item = produce_item(); if (count == N) sleep(); /* if buffer is full, go to sleep */ insert_item(item); count = count + 1; if (count == 1) wakeup(consumer); /* was buffer empty? */ void consumer() { int item; if (count == 0) /* critical point for context switching */ sleep(); /* if buffer is empty, go to sleep */ remove_item(&item) count = count 1; if (count == N - 1) wakeup(producer); /* was buffer full? */ consume_item(&item); Problém Operace wakeup() je zavolána na proces, který není ještě uspán. Co se stane??? Řešení Wakeup waiting bit Když je wakeup() zavolána na proces, který ještě nespí, tento bit je nastaven. Při pokusu uspat proces, který má nastaven tento bit, proces se neuspí, ale pouze se resetuje daný bit. Řešení s využitím semaforů Poznámka: Ochrana kritické sekce je požadována pouze v případě, že je více než-li jeden producent či konzument #define N 100 /* number slots in buffer */ semaphore mutex = 1; /* guards critical section (CS)*/ semaphore empty = N; /* counts empty slots*/ semaphore full = 0; /* counts full slots*/ void producer() { itemtype item; produce_item(&item); down(&empty); /* enter CS*/ enter_item(item); /* leave CS*/ up(&full); void consumer(void) { itemtype item;

down(&full); /* enter CS */ remove_item(&item); /* leave CS */ up(&empty); consume_item(item); Řešení s využitím monitorů procedure Producer; while true do item := produce_item(item); Buffer.Insert(item); end procedure Consumer; while true do Buffer.Remove(item); consume_item(item); end monitor Buffer _monitor var Buff : array[0..max] of ItemType; count : integer; Full, Empty : condition; procedure Insert(E : ItemType); if count = N then Wait(Full); insert_item(e); count := count + 1; if count = 1 then Signal(Empty); procedure Remove(var E : ItemType); if count = 0 then Wait(Empty); remove_item(e); count := count - 1; if count = N - 1 then Signal(Full); count:=0; end_monitor; Řešení s pomocí zasílání zpráv #define N 100 /* slots in shared buffer */ void producer(void) { int item; message m, e; item = produce_item(); receive(consumer,&e); /* wait for an empty */ build_message(&m,item); /* construct a message */ send(consumer,&m); /* send to consumer */ void consumer(void) { int item, i;

message m, e; for (i = 0; i < N; i++) send(producer, &e); /* send N empties */ receive(producer, &m); /* get message */ item = extract_item(&m) /* extract item from message */ send(producer,&e); /* send back empty reply */ consume_item(item); večeřící filozofové 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. #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) { 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]); http://www.doc.ic.ac.uk/~jnm/book/book_applets/diners.html čtenáři a 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. 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() { while(true) { think_up_data(); down(&db); write_data_data(); up(&db); spící holič 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 čekacího křesla a čeká (pokud nějaké je volné), 3. jinak opustí holičství. #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 */ void Customer() { if (waiting < CHAIRS) { waiting = waiting + 1; up(&customes); down(&barbers); get_haircut(); else { leave_shop_without_haircut(); void Barber() { down(&customers); down(&mutex) waiting = waiting - 1; up(&barbers); cut_hair(); Stránka byla naposledy editována v 12:02, 13. 6. 2006.