4_partajat_2014

15
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare Algoritmi Paraleli si distribuiti 1 Dezvoltarea algoritmilor folosind variabile partajate (MIMD) sincronizarea: excluderea mutuală şi sincronizarea condiţionată. câteva rezultate notabile: - semafoare, - regiuni critice, - monitoare. Cîteva dintre problemele "clasice" : - producători-consumatori, - cititori-scriitori, - problema filozofilor, - problema bãrbierului.

description

curs UPB

Transcript of 4_partajat_2014

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 1

    Dezvoltarea algoritmilor folosind variabile partajate (MIMD)

    sincronizarea: excluderea mutual i sincronizarea condiionat.

    cteva rezultate notabile: - semafoare, - regiuni critice, - monitoare.

    Cteva dintre problemele "clasice" : - productori-consumatori, - cititori-scriitori, - problema filozofilor, - problema brbierului.

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 2

    Sectiuni critice

    Problema: fiecare proces P(i) al unei colectii de procese P(i:1..n) executa ciclic o sectiune critica, in care are acces exclusiv la anumite resurse partajate, urmata de o sectiune necritica in care foloseste doar resurse locale.

    Se utilizeaza tipul special sem si primitivele P si V. Asigura excluderea mutuala intre procesele care acceseaza

    sectiunea critica.

    Notatie: se introduc primitivele P si V si variabila semafor s

    P(s) :: 0 -> s := s-1> V(s) ::

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 3

    Sectiuni critice

    Soluie excludere mutuala: var mutex: sem := 1; P(i:1..n):: do true ->

    P(mutex); /*acaparare sect critica*/ Sectiune critica; V(mutex); /*eliberare sect critica*/ Sectiune necritica

    od

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 4

    Producatori si consumatori

    Problema:

    Se considera M producatori si N consumatori care comunica printr-un tampon partajat cu un singur element.

    Trebuie asigurat ca valorile nu sunt suprascrise si nu sunt citite din tampon de mai multe ori.

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 5

    Producatori si consumatori - solutia var buf: T; var gol: sem := 1; plin: sem := 0; /* sem binare */ Producator (i: 1..M):: var v: T; do true ->

    v := produce (); P(gol); buf := v; V(plin)

    od; Consumator (i: 1..N):: var w: T; do true ->

    P(plin); w := buf; V(gol); consuma (w);

    od;

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 6

    Comunicarea un producator si un consumator prin tampon limitat var buf: array [1:k] of T; var gol: sem := k; plin: sem := 0; /*semafoare generalizate*/ Producator::

    var v: T; var ultim: int := 1; /*urmeaza ultimului element */ do true ->

    v := produce (); P(gol); /*exista locuri goale?*/ buf[ultim] := v; ultim := ultim mod k + 1; V(plin)

    od; Consumator::

    var w: T; var prim: int := 1; /*primul element din tampon*/

    do true -> P(plin); /*exista valori in buffer?*/ w := buf[prim]; prim := prim mod k + 1; V(gol); consuma (w);

    od;

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 7

    Mai multi producatori si mai multi consumatori var buf: array [1:k] of T; var gol: sem := k; plin: sem := 0; //semafoare generalizate var prim: int := 1; ultim: int := 1; var mutexP: sem := 1; mutexC: sem := 1; Producator(i:1..M):: var v: T; do true ->

    v := produce (); P(gol);

    P(mutexP); buf[ultim] := v; ultim := ultim mod k + 1; V(mutexP);

    V(plin) od; Consumator (i: 1..N):: var w: T; do true ->

    P(plin); P(mutexC); w := buf[prim]; prim := prim mod k + 1; V(mutexC);

    V(gol); consuma (w);

    od;

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 8

    Problema filozofilor

    Cinci filozofi stau in jurul unei mese rotunde si isi petrec timpul gandind

    si mancand. In mijlocul mesei este o farfurie cu spaghete. Pentru a

    putea manca, un filozof are nevoie de doua furculite. Pe masa sunt cinci

    furculite, fiecare situate intre doi filozofi vecini. Fiecare filozof poate

    folosi furculitele din imediata sa apropiere.

    Problema: se scrie un program care simuleaza comportarea filozofilor

    evitand moartea prin inanitie.

    http://en.wikipedia.org/wiki/Image:Dining_philosophers.png

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 9

    Problema filozofilor - rezolvare var f: array [1:5] of sem := ([5] 1); Filozof (i:1..4):: do true ->

    P(f[i]); P(f[i+1]); mananca; V(f[i]); V(f[i+1]); gandeste

    od;

    Filozof (5):: do true ->

    P(f[1]); P(f[5]); mananca; V(f[1]); V(f[5]); gandeste

    od; http://en.wikipedia.org/wiki/Image:Dining_philosophers.png

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 10

    Problema cititorilor si scriitorilor

    Problema: exista doua tipuri de procese, cititori si scriitori

    care impart o resursa.

    Mai multi cititori pot avea acces simultan la resursa comuna

    daca nici un scriitor nu o modifica in acelasi timp.

    Un scriitor poate modifica resursa daca ea nu este accesata

    de nici un cititor.

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 11

    Problema cititorilor si scriitorilor var rw: sem := 1; var nr: int := 0; mutexR: sem := 1; Cititor (i: 1..m):: do true ->

    P(mutexR); nr := nr+1; if nr = 1 -> P(rw) fi; /*daca primul cititor*/

    V(mutexR); citeste din resursa comuna; P(mutexR)

    nr := nr-1; if nr = 0 -> V(rw) fi; /*daca ultimul cititor*/

    V(mutexR); od; Scriitor (j: 1..n):: do true ->

    P(rw); scrie in resursa comuna; V(rw);

    od;

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 12

    Alte politici de citire si scriere

    Neajuns solutia precedenta: starvation prin intarziere la nesfarsit a scriitorilor

    Alta solutie prioritate pentru scriitori

    noile cereri de la cititori sunt intarziate daca un scriitor asteapta un cititor intarziat este trezit doar daca nu exista un scriitor in asteptare. var nr: int := 0; /*nr cititori care folosesc resursa */ nw: int := 0; /*nr scriitori care folosesc resursa */

    var dr: int := 0; /*nr cititori intarziati */ dw: int := 0; /*nr scriitori intarziati */

    var e: sem := 1; /*intrare sectiune atomica */ r: sem := 0; /*intarzie cititori daca nw>0 sau dw>0*/ w: sem := 0; /*asteapta ca nw=0 si nr=0*/

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 13

    Split binary semaphore Folosit pentru a implementa atat excluderea mutuala cat si

    sincronizarea conditionata.

    Semafoarele e, r si w formeaza impreuna un semafor "splitat" (split binary semaphore)

    - cel mult un semafor este 1 la un moment dat: 0

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 14

    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; citeste din resursa comuna; 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;

  • Universitatea Politehnica Bucureti - Facultatea de Automatic i Calculatoare

    Algoritmi Paraleli si distribuiti 15

    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 in resursa comuna; 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;