42
5/21/2018 4.Semafoare.ProblemeClasice-slidepdf.com http://slidepdf.com/reader/full/4-semafoare-probleme-clasice 1/42 Semafoare. Probleme clasice. Ciprian Dobre [email protected]

4. Semafoare. Probleme Clasice

Embed Size (px)

DESCRIPTION

semafoare

Citation preview

  • 5/21/2018 4. Semafoare. Probleme Clasice

    1/42

    Semafoare.Probleme clasice.

    Ciprian Dobre

    [email protected]

  • 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?