Top Banner

of 31

Monitor Examples

Feb 24, 2018

Download

Documents

Neeraj Yadav
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 7/25/2019 Monitor Examples

    1/31

    Monitor Solutions to Classical

    Problems

  • 7/25/2019 Monitor Examples

    2/31

    2

    Announcements

    CS 415 Projects graded.

    Mean 80.! "ig# $0 out o% $0

    CS 414 "ome&or' due Monda(.

  • 7/25/2019 Monitor Examples

    3/31

    )

    *oals %or +oda(

    Continue &it# S(nc#roni,ation Abstractions

    Monitors and condition -ariables

    Producer Consumer &it# Monitors

    eaders/riters roblem and solution &it# Monitors

  • 7/25/2019 Monitor Examples

    4/31

    4

    e-ie& Monitors

    Monitors reresent t#e logic o% t#e rogram ait i% necessar( Signal en c#ange somet#ing so an( &aiting t#reads can

    roceed

    3asic structure o% monitor/based rogram

    lockwhile (need to wait) { unlock

    condvar.wait();

    lock}

    do something so no need to wait

    condvar.signal();

    unlock

    Check and/or updatestate variablesWait if necessary

    Check and/or updatestate variables

  • 7/25/2019 Monitor Examples

    5/31

    5

    e-ie& Producer/consumer &it#

    a bounded bu%%er Problem e%inition

    Producer uts t#ings into a s#ared bu%%er &ait i% %ull6 Consumer ta'es t#em out &ait i% emt(6 7se a %ied/si,e bu%%er bet&een t#em to a-oid loc'ste

    9eed to s(nc#roni,e access to t#is bu%%er

    Correctness Constraints

    Consumer must &ait %or roducer to %ill bu%%ers! i% none %ull sc#eduling constraint Producer must &ait %or consumer to emt( bu%%ers! i% all %ull

    sc#eduling constraint

    :nl( one t#read can maniulate bu%%er ;ueue at a time mutual eclusion

    emember ( &e need mutual eclusion 3ecause comuters are stuid

    *eneral rule o% t#umb7se a searate sema#ore %or eac# constraint Semaphore not_empty; // consumers constraint

    Semaphore not_!ull; // producers constraint Semaphore mute"; // mutual e"clusion

  • 7/25/2019 Monitor Examples

    6/31

    Producer does #(not_!ull)$ %(not_empty)

    Consumer does #(not_empty)$ %(not_!ull)

    ?s order o% P@s imortant> esB Can cause deadloc'

    ?s order o% @s imortant>

    9o! ecet t#at it mig#t a%%ect sc#eduling e%%icienc(

    #at i% &e #a-e 2 roducers or 2 consumers> o &e need to c#ange an(t#ing>

  • 7/25/2019 Monitor Examples

    8/31

    8

    e-ie& Moti-ation %or Monitors and

    Condition ariables Sema#ores are a #uge ste u! but

    +#e( are con%using because t#e( are dual urose 3ot# mutual eclusion and sc#eduling constraints

    Damle t#e %act t#at %liing o% P@s in bounded bu%%er gi-es deadloc' isnot immediatel( ob-ious

    Cleaner idea 7se locks%or mutual eclusion and condition variables%or sc#eduling constraints

    e%inition Monitor a loc' and ,ero or more condition-ariables %or managing concurrent access to s#ared data 7se o% Monitors is a rogramming aradigm

    Some languages li'e Ea-a ro-ide monitors in t#e language +#e loc' ro-ides mutual eclusion to s#ared data

    Al&a(s ac;uire be%ore accessing s#ared data structure

    Al&a(s release a%ter %inis#ing &it# s#ared data

    Foc' initiall( %ree

  • 7/25/2019 Monitor Examples

    9/31

    $

    Condition ariables "o& do &e c#ange t#e get6 routine to &ait until somet#ing is

    in bu%%er> Could do t#is b( 'eeing a count o% t#e number o% t#ings on t#e;ueue &it# sema#ores6! but error rone

    Condition ariable a ;ueue o% t#reads &aiting %or somet#inginsidea critical section

    Ge( idea allo& sleeing inside critical section b( atomicall( releasingloc' at time &e go to slee

    Contrast to sema#ores Can@t &ait inside critical section

    :erations &ait('lock) Atomicall( release loc' and go to slee. e/ac;uire

    loc' later! be%ore returning. Signal() a'e u one &aiter! i% an( roadcast() a'e u all &aiters

    ule Must #old loc' en doing condition -ariable osB

  • 7/25/2019 Monitor Examples

    10/31

    10

    Producer Consumer using Monitors

    -onitorProducer_Consumer& any_t buf[N; int n = 0! tail = 0! hea" = 0; con"ition not_empty! not_full;

    #oi" put$char ch% &.hile$n == N%

    .ait$not_full%;buf[hea"(N = ch;hea"));n));

    si,nal$not_empty%; +

    char ,et$% &.hile$n == 0% .ait$not_empty%;ch = buf[tail(N;tail));n;si,nal$not_full%;return ch;

    +

  • 7/25/2019 Monitor Examples

    11/31

    11

    eminders Subtle asects

    9otice t#at en a t#read calls &ait6! i% it bloc's it also

    automaticall( releases t#e monitor@s mutual eclusion

    loc'

    +#is is an elegant solution to an issue seen &it#

    sema#ores

    Caller #as mutual eclusion and &ants to call PnotHemt(6I

    but t#is call mig#t bloc'

    ?% &e just do t#e call! t#e solution deadloc'sI

    3ut i% &e first call mute6! &e get a race conditionB

  • 7/25/2019 Monitor Examples

    12/31

    12

    e-ie& Mesa -s. "oare monitors

    9eed to be care%ul about recise de%inition o% signal and &ait.

    Consider a iece o% our de;ueue codewhile (n*) {

    wait(not_empty); // +! nothing$ sleep}ch ,u!-tail0; // 1et ne"t item

    #( didn@t &e do t#is>

    i! (n*) {wait(not_empty); // +! nothing$ sleep

    }ch ,u!-tail0;// 1et ne"t item

    Ans&er deends on t#e t(e o% sc#eduling

    "oare/st(le most tetboo's6 Signaler gi-es loc'! CP7 to &aiter= &aiter runs immediatel( aiter gi-es u loc'! rocessor bac' to signaler en it eits critical

    section or i% it &aits again

    Mesa/st(le Ea-a! most real oerating s(stems6 Signaler 'ees loc' and rocessor

    aiter laced on read( ;ueue &it# no secial riorit( Practicall(! need to c#ec' condition again a%ter &ait

  • 7/25/2019 Monitor Examples

    13/31

    1)

    e-ie& Can &e construct Monitors

    %rom Sema#ores> Foc'ing asect is eas( Eust use a mute Can &e imlement condition -ariables t#is &a(>

    &ait() { #("_sem); }

    Signal() { %("_sem); }

    oesn@t &or' ait6 ma( slee &it# loc' #eld

    oes t#is &or' better>&ait() { %(mute"); // 2elease mute" lock #("_sem);

    #(mute"); // 3c4uire mute" lock}Signal() { %("_sem); }

    9o Condition -ars #a-e no #istor(! sema#ores #a-e #istor( #at i% t#read signals and no one is &aiting> 9:/:P #at i% t#read later &aits> +#read aits #at i% t#read @s and noone is &aiting> ?ncrement #at i% t#read later does P> ecrement and continue

  • 7/25/2019 Monitor Examples

    14/31

    14

    Construction o% Monitors %rom

    Sema#ores con@t6 Problem &it# re-ious tr( P and are commutati-e result is t#e same no matter at order

    t#e( occur Condition -ariables are 9:+ commutati-e

    oes t#is %i t#e roblem>&ait(5ock lock) { %(mute"); // 2elease mute" lock #("_sem);

    #(mute"); // 3c4uire mute" lock}Signal() { i! semaphore 4ueue is not empty %("_sem);

    } 9ot legal to loo' at contents o% sema#ore ;ueue +#ere is a race condition signaler can sli in a%ter loc' release and

    be%ore &aiter eecutes sema#ore.P6

    ?t is actuall( ossible to do t#is correctl( Comle solution %or "oare sc#eduling in boo'

    Can (ou come u &it# simler Mesa/sc#eduled solution>

  • 7/25/2019 Monitor Examples

    15/31

    15

    Construction o% HoareMonitors

    using Sema#ores

    or each proce"ure :

    '$mutex%;

    /* bo"y of */

    if$next_count 0%$next%;

    else

    $mutex%;

    Wait(){

    x_count++;

    if(next_count > 0)

    V(next);

    else

    V(mutex); P(x_sem);

    x_count--;

    Signal(){

    If(x_count > 0) { next_count++;

    V(x_sem);

    P(next);

    next_count--;

    }

  • 7/25/2019 Monitor Examples

    16/31

    1 :r suose t#at a &riter is &aiting and an endless o% stream o%

    readers 'ees s#o&ing u. ?s it %air %or t#em to become acti-e>

    e@ll %a-or a 'ind o% bac'/and/%ort# %orm o% %airness :nce a reader is &aiting! readers &ill get in net. ?% a &riter is &aiting! one &riter &ill get in net.

  • 7/25/2019 Monitor Examples

    19/31

    1$

    eaders and riters

    -onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;

    oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%

    & ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1;

    + oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else

    Si,nal$4an2rite%; +

    oid 3eginead6

    N

    i%9riters 1 OO aitingriters 06

    N QQaitingeaders=

    aitCanead6=

    //aitingeaders=

    R

    QQ9eaders=

    SignalCanead6=

    R

    oid Dndead6

    N

    i%//9eaders 06

    SignalCanrite6=

    R

  • 7/25/2019 Monitor Examples

    20/31

    20

    eaders and riters

    -onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;

    oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%

    & ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1;

    + oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else

    Si,nal$4an2rite%; +

    oid 3eginead6

    N

    i%9riters 1 OO aitingriters 06

    N QQaitingeaders=

    aitCanead6=

    //aitingeaders=

    R

    QQ9eaders=

    SignalCanead6=

    R

    oid Dndead6

    N

    i%//9eaders 06

    SignalCanrite6=

    R

  • 7/25/2019 Monitor Examples

    21/31

    21

    eaders and riters

    -onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;

    oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%

    & ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1;

    + oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else

    Si,nal$4an2rite%; +

    oid 3eginead6

    N

    i%9riters 1 OO aitingriters 06

    N QQaitingeaders=

    aitCanead6=

    //aitingeaders=

    R

    QQ9eaders=

    SignalCanead6=

    R

    oid Dndead6

    N

    i%//9eaders 06

    SignalCanrite6=

    R

  • 7/25/2019 Monitor Examples

    22/31

    22

    eaders and riters

    -onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;

    oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%

    & ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1;

    + oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else

    Si,nal$4an2rite%; +

    oid 3eginead6

    N

    i%9riters 1 OO aitingriters 06

    N QQaitingeaders=

    aitCanead6=

    //aitingeaders=

    R

    QQ9eaders=

    SignalCanead6=

    R

    oid Dndead6

    N

    i%//9eaders 06

    SignalCanrite6=

    R

  • 7/25/2019 Monitor Examples

    23/31

    2)

    7nderstanding t#e Solution

    A &riter can enter i% t#ere are no ot#er acti-e &riters and

    no readers are &aiting

  • 7/25/2019 Monitor Examples

    24/31

    24

    eaders and riters

    -onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;

    oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%

    & ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1; + oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else

    Si,nal$4an2rite%; +

    oid 3eginead6

    N

    i%9riters 1 OO aitingriters 06

    N QQaitingeaders=

    aitCanead6=

    //aitingeaders=

    R

    QQ9eaders=

    SignalCanead6=

    R

    oid Dndead6

    N

    i%//9eaders 06

    SignalCanrite6=

    R

  • 7/25/2019 Monitor Examples

    25/31

    25

    7nderstanding t#e Solution

    A reader can enter i%

    +#ere are no &riters acti-e or &aiting

    So &e can #a-e man( readers acti-e all at once

    :t#er&ise! a reader &aits ma(be man( do6

  • 7/25/2019 Monitor Examples

    26/31

    2