4. semafoare. probleme clasice
Post on 11-Oct-2015
68 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
5/21/2018 4. Semafoare. Probleme Clasice
1/42
Semafoare.Probleme clasice.
Ciprian Dobre
ciprian.dobre@cs.pub.ro
-
5/21/2018 4. Semafoare. Probleme Clasice
2/42
Sincronizarea: excluderea mutual i sincronizarea
condiionat. Cteva rezultate notabile:
semafoare
regiuni critice monitoare
Cteva dintre problemele clasice:
productori-consumatori problema filozofilor
cititori-scriitori
problema brbierului
Dezvoltarea algoritmilor folosind
variabile partajate (MIMD)
-
5/21/2018 4. Semafoare. Probleme Clasice
3/42
Tip special de variabile partajate manipulate prin 2
operaii atomice: P i V (Dijkstra, 1965)
Valoarea semaforului: unntreg nenegativ
V (verhogen = to increment) semnaleaz apariia unui eveniment (incrementeaz
semaforul)
P (proberen = to test) ntrzie un proces pn la producerea unui eveniment
(decrementeaz semaforul)
Semafoare
-
5/21/2018 4. Semafoare. Probleme Clasice
4/42
Problema
Fiecare proces P(i) al unei colecii de procese P(i:1..n) execut
ciclic o
seciune criticn care are acces exclusiv la anumite resurse partajateurmat de o seciune necriticn care folosete doar resurse locale.
Soluie
var mutex: sem := 1;
co P(i:1..n)::
do true ->
P(mutex); /* acaparare seciune critic */
Seciune critic;V(mutex); /* eliberare seciune critic */
Seciune necritic
od
oc
Seciuni critice
-
5/21/2018 4. Semafoare. Probleme Clasice
5/42
Exemplu executie
Sectiunecritica
time
-
5/21/2018 4. Semafoare. Probleme Clasice
6/42
Problema
Se consider M productori i N consumatori care comunic printr-un singurtampon partajat.
Productori i consumatori
TT
T
Am loc? Am ce prelua?
-
5/21/2018 4. Semafoare. Probleme Clasice
7/42
Productori i consumatori
Soluia
var buf: T; /* T tipul datelor */
var gol: sem := 1, plin: sem := 0; /* sem binare */
co Productor (i: 1..M):: co Consumator (i: 1..N)::
var v: T; var w: T;
do true -> do true ->
v := produce(); P(plin);
P(gol); w := buf;
buf := v; V(gol);V(plin); consum(w);
od; od;
oc oc
semnalizare
-
5/21/2018 4. Semafoare. Probleme Clasice
8/42
var buf: array [1:k] of T;
var gol: sem := k, plin: sem := 0; /* semafoare generale */
co Productor::
var v: T;
var ultim: int := 1;
do true ->
v := produce();
P(gol); /* exist locuri goale? */
buf[ultim] := v;
ultim := ultim mod k + 1; /* circular */V(plin);
od;
Consumator::
var w: T;
var prim: int := 1;
do true ->
P(plin); /* exist valori n buffer? */
w := buf[prim]; prim := prim mod k + 1;
V(gol);
consum(w);
od;oc
Comunicarea productor i consumator prin
tampon limitat
-
5/21/2018 4. Semafoare. Probleme Clasice
9/42
Comunicarea productor i consumator prin
tampon limitat
TT
k x T
Am loc?Am ce prelua?
-
5/21/2018 4. Semafoare. Probleme Clasice
10/42
var buf: array [1:k] of T;
var prim: int := 1, ultim: int := 1;
var gol: sem := k, plin: sem := 0;
var mutexP: sem := 1, mutexC: sem := 1;
co Productor(i:1..M):: co Consumator (i: 1..N)::
var v: T; var w: T;do true -> do true ->
v := produce(); P(plin);
P(gol); P(mutexC);
P(mutexP); w := buf[prim];
buf[ultim] := v; prim := prim mod k + 1ultim := ultim mod k + 1; V(mutexC);
V(mutexP); V(gol);
V(plin); consum(w);
od; od;
oc oc
Mai muli productori i mai muli consumatori
sectiune
critica
-
5/21/2018 4. Semafoare. Probleme Clasice
11/42
co Filozof (i:1..5)::
do true ->
ia beioare;
mnnc;
elibereaz beioare;
gndete;
od
oc
1
2
3
4
5
1 2
3
4
5
Descartes
Socrate
Confucius
EliadePlaton
DEADLOCKFiecare mai are nevoie de un beior
Problema filozofilor
-
5/21/2018 4. Semafoare. Probleme Clasice
12/42
var b: array [1:5] of sem := ([5] 1);
co Filozof (i:1..4)::
do true ->
P(b[i]); P(b[i+1]);
mnnc;
V(b[i]); V(b[i+1]);
gndete;
od;
Filozof (5)::
do true ->
P(b[1]); P(b[5]);
mnnc;
V(b[1]); V(b[5]);
gndete;
od;
co
1
2
3
45
1 2
35
4Descartes
Socrate
Confucius
EliadePlaton
Problema filozofilor (2)
-
5/21/2018 4. Semafoare. Probleme Clasice
13/42
Problema cititorilori scriitorilor
Excludere mutualzona de memorie
(resursa critica)
1) Un singur scriitor are dreptul sa
scrie la un moment dat,2) Doar daca nu exista un cititor
curent care citeste
1) Un cititor poate citi din
memorie, indiferent daca deja
exista alti cititori ce deja citesc
2) Doar daca nu exista un scriitor
care scrie
-
5/21/2018 4. Semafoare. Probleme Clasice
14/42
var rw: sem := 1;
co Cititor (i: 1..m)::
do true ->
P(rw);
citete din resursa comun;
V(rw);od;
Scriitor (j: 1..n)::
do true ->
P(rw);
scrie n resursa comun;
V(rw);
od;
oc
Problema cititorilori scriitorilor
Excludere mutual
Excludere mutuala strica !Un singur proces are voie sa
execute opeartii pe resursa
critica
-
5/21/2018 4. Semafoare. Probleme Clasice
15/42
zona de memorie
(resursa critica)
-
5/21/2018 4. Semafoare. Probleme Clasice
16/42
var nr: int := 0; mutexR: sem := 1, rw: sem := 1;
co Cititor (i: 1..m)::
do true ->P(mutexR);
nr := nr + 1;
if nr = 1 -> P(rw) fi; /* dac primul cititor */
V(mutexR);
citete din resursa comun;P(mutexR);
nr := nr - 1;
if nr = 0 -> V(rw) fi; /* dac ultimul cititor */
V(mutexR);
od;Scriitor (j: 1..n)::
do true ->
P(rw);
scrie n resursa comun;
V(rw);
od;
oc
Problema cititorilor si scriitorilor
Excludere mutual(2)
sectiunecritica
-
5/21/2018 4. Semafoare. Probleme Clasice
17/42
zona de memorie
(resursa critica)nr = 0
nr = 1
nr = 2
-
5/21/2018 4. Semafoare. Probleme Clasice
18/42
Invariant global:
RW: ( nr == 0 || nw == 0 ) && nw
-
5/21/2018 4. Semafoare. Probleme Clasice
19/42
var nr: int := 0, nw: int := 0;
co Cititor (i: 1..m)::
do true ->
nr := nr + 1>
citete din resursa comun;
od;
Scriitor (j: 1..n)::
do true ->
nw := nw + 1>
scrie n resursa comun;
od;
oc
Problema cititorilori scriitorilorSincronizare condi
ionat
(2)
-
5/21/2018 4. Semafoare. Probleme Clasice
20/42
Politici:
noile cereri de la cititori sunt ntrziate dac un scriitor ateapt un cititor ntrziat este trezit doar dac nu exist un scriitor n
ateptare.
var nr: int := 0; /* nr. cititori care folosesc resursa */
nw: int := 0; /* nr. scriitori care folosesc resursa */
var e: sem := 1; /* intrare seciune atomic */
r: sem := 0; /* ateapt nw == 0 */
w: sem := 0; /* ateapt ca nw == 0 i nr == 0 */
var dr: int := 0; /* nr. cititori ntrziai */
dw: int := 0; /* nr. scriitori ntrziai */
Problema cititorilori scriitorilorSincronizare condi
ionat
(3)
-
5/21/2018 4. Semafoare. Probleme Clasice
21/42
Split binary semaphore
Folosit pentru a implementa att excluderea mutual ct i sincronizareacondiionat.
Semafoarele e, ri w formeazmpreun un semafor splitat(split binarysemaphore):
cel mult un semafor este 1 la un moment dat 0 e + r + w 1 fiecare cale de execuie ncepe cu un P i se termin cu un singur V
instruciunile ntre P i V se executn excludere mutual.
Tehnica se numete pasareatafetei:
Iniial un semafor este 1 i un proces poate preluatafeta printr-o operaie Pasupra semaforului
cnd un proces deinetafeta (se executntr-o seciune critic i toatesemafoarele sunt 0), el poate pasa tafeta altui proces printr-o operaie Vasupra unuia din cele trei semafoare.
Problema cititorilori scriitorilorSincronizare condi
ionat
(4)
-
5/21/2018 4. Semafoare. Probleme Clasice
22/42
co Cititor (i: 1..m)::
do true ->
P(e);if nw > 0 or dw > 0 ->
dr := dr + 1; V(e); P(r);
fi;
nr := nr + 1;
if dr > 0 -> dr := dr - 1; V(r);
[] dr == 0 -> V(e);
fi;
citete din resursa comun;
P(e);nr := nr - 1;
if nr == 0 and dw > 0 -> dw := dw - 1; V(w);
[] nr > 0 or dw == 0 -> V(e);
fi;
od;oc
Problema cititorilori scriitorilorSincronizare condi
ionat
(5)
-
5/21/2018 4. Semafoare. Probleme Clasice
23/42
co Scriitor (j: 1..n)::
do true ->
P(e);if nr > 0 or nw > 0 ->
dw := dw + 1; V(e); P(w)
fi;
nw := nw + 1;
V(e);
scrie n resursa comun;
P(e);
nw := nw - 1;
if dr > 0 and dw == 0 -> dr := dr - 1; V(r);
[] dw > 0 -> dw := dw-1; V(w);
[] dr == 0 and dw == 0 -> V(e);
fi;
od;
oc
Problema cititorilori scriitorilorSincronizare condi
ionat
(6)
-
5/21/2018 4. Semafoare. Probleme Clasice
24/42
Problema:
O frizerie cu un brbier, unscaun de brbier, n scaunede ateptare.
Cnd nu sunt clieni,brbierul doarme.
Cnd sosete un client fietrezete brbierul, fie
ateapt dac acesta eocupat.
Dac toate scaunele suntocupate, clientul pleac.
Problema brbierului
-
5/21/2018 4. Semafoare. Probleme Clasice
25/42
Ce se poate intampla rau?
https://www.youtube.com/watch?v=APfn72TeUkA
-
5/21/2018 4. Semafoare. Probleme Clasice
26/42
clienti
BarbierGata
Pas 1
-
5/21/2018 4. Semafoare. Probleme Clasice
27/42
clienti
BarbierGata
Pas 2
-
5/21/2018 4. Semafoare. Probleme Clasice
28/42
clienti
BarbierGata
Pas 3
-
5/21/2018 4. Semafoare. Probleme Clasice
29/42
clienti
BarbierGata
Pas 4
-
5/21/2018 4. Semafoare. Probleme Clasice
30/42
var NumrScauneLibere: int := n,
Clieni: sem := 0,
BrbierGata: sem := 0,
Scaune: sem:= 1;
co Brbier::
do true ->
P(Clieni); /* se cautun client;
dacexist, este chemat */
P(Scaune); /* are client, va modifica
NumrScauneLibere */
NumrScauneLibere++; /* se elibereazun scaun */V(BrbierGata); /* brbierul e gata stund */
V(Scaune); /* a terminat de modificat
NumrScauneLibere */
/* Brbierul tunde... */
odco
Problema brbierului (2)
atomicitate
sincronizare cu Client
-
5/21/2018 4. Semafoare. Probleme Clasice
31/42
co Client(i:1..m)
do true ->
P(Scaune); /* clientul ncearcsob
in
un scaun liber */
if NumrScauneLibere > 0 -> /* existun scaun disponibil? */
NumrScauneLibere--; /* clientul se aaz*/
V(Clieni); /* se anunbrbierul cs-a
ocupat un scaun */V(Scaune); /* se renunla accesul asupra
NumrScauneLibere */
P(BrbierGata); /* clientul ateaptpentru a
fi tuns */
/* Clientul e tuns... */[] NumrScauneLibere == 0 ->/* nu sunt scaune libere */
V(Scaune); /* elibereazmutexul */
/* Clientul pleacnetuns... */
fi
odoc
Problema brbierului (2)
atomicitate
sincronizare cu Barbier
-
5/21/2018 4. Semafoare. Probleme Clasice
32/42
Sumar
Dezvoltarea algoritmilor folosind variabile
partajate (MIMD)
Semafoare
Seciuni critice Probleme:
Productori i consumatori
Problema filozofilor
Problema cititorilor i scriitorilor
Problema brbierului
-
5/21/2018 4. Semafoare. Probleme Clasice
33/42
Quiz
Cum ati implementa o bariera folosind semafoare?
Ex. (suma elementelor unui vector):
var a: array [1:n] of int;co suma (k:1..n)::
fa j := 1 to sup( ) ->if k mod 2j = 0 ->
a[k] := a[k-2j-1] + a[k]fi
barrieraf
oc
Nu dati inca lucrarea ...
Un pic de practice: Cigarette
-
5/21/2018 4. Semafoare. Probleme Clasice
34/42
Un pic de practice: Cigarette
smokers problem Un agent i trei fumtori
Fumtorii: Ateaptingrediente (tutun, hrtie, chibrit) Confecioneazigar Fumeaz
Agentul deine toate 3 ingredientele Un fumtor are tutun, un altul hrtie, al 3-lea chibrituri) Agentul selecteazdouingrediente (random) pe care le
dfumtorilor Doar fumtorul ce are nevoie de exact acele 2 ingrediente
trebuie sle preia Agentul nu poate semnaliza exact acelui fumtor pentru c
nu tie care fumtor e care, respectiv ingredientele sunt
random extrase
-
5/21/2018 4. Semafoare. Probleme Clasice
35/42
Cigarette smokers problem
var tobacco: sem := 0;paper : sem := 0;match : sem := 0;agent : sem := 1;
co Agent::do draw1 -> P(agent); V(tobacco); V(paper);[] draw2 -> P(agent); V(paper); V(match);[] draw3 -> P(agent); V(tobacco); V(match)
odocco Smoker1::
P(tobacco); P(paper); V(agent);occo Smoker2::
P(paper); P(match); V(agent);occo Smoker3::
P(tobacco); P(match); V(agent);oc
Functioneaza ???
Cigarette smokers problem
-
5/21/2018 4. Semafoare. Probleme Clasice
36/42
Cigarette smokers problem -
deadlock
P(tobacco) P(paper)
P(paper)
P(match)
P(tobacco)
P(match)
OK!
DEADLOCK!
-
5/21/2018 4. Semafoare. Probleme Clasice
37/42
Quiz
Ganditi-va la o solutie pentru evitarea
deadlock-ului
-
5/21/2018 4. Semafoare. Probleme Clasice
38/42
Cigarette smokers problem
var tobacco: sem := 0;paper : sem := 0;
match : sem := 0;agent : sem := 1;
isTobacco : bool := false;isPaper : bool := false;isMatch : bool := false;
tobaccoSem: sem := 0;paperSem : sem := 0;matchSem : sem := 0;
co Agent::do draw1 -> P(agent); V(tobacco); V(paper);
[] draw2 -> P(agent); V(paper); V(match);[] draw3 -> P(agent); V(tobacco); V(match)od
oc
-
5/21/2018 4. Semafoare. Probleme Clasice
39/42
Cigarette smokers problemco PusherA::P(tobacco);
P(e);if isPaper -> isPaper := false; V(matchSem);[] isMatch -> isMatch := false; V(paperSem);[] isPaper = isMatch = false -> isTobacco := true;fi
V(e);oc
co PusherB::P(match);P(e);if isPaper -> isPaper := false; V(tobaccoSem);
[] isTobacco -> isTobacco := false; V(paperSem);[] isPaper = isTobacco = false -> isMatch := true;fiV(e);
oc
co PusherC::
P(paper);P(e);if isTobacco -> isTobacco := false; V(matchSem);[] isMatch -> isMatch := false; V(tobaccoSem);[] isPaper = isMatch = false -> isPaper := true;fiV(e);
oc
-
5/21/2018 4. Semafoare. Probleme Clasice
40/42
Cigarette smokers problem
co SmokerWithTobacco::P(tobaccoSem);# makeCigaretteV(agent);# smoke
occo SmokerWithPaper::
P(paperSem);# makeCigaretteV(agent);# smoke
oc
co SmokerWithMatch::P(matchSem);# makeCigaretteV(agent);# smoke
oc
-
5/21/2018 4. Semafoare. Probleme Clasice
41/42
Posibila solutie pentru bariera
var b: sem := 0; e : sem := 1;
nb : int := 0;co proc (k:1..n)::# enter barrierP(e);nb:=nb+1;if (nb = n)-> V(b);[] (nb > 1) -> P(b); V(b);[] (nb = 1) -> P(b);finb:=nb-1;V(e);# exit barrier
oc
# if lastprocess toenter barrier
# if first
process toenter barrier
-
5/21/2018 4. Semafoare. Probleme Clasice
42/42
ntrebri?
top related