83
02/2015 Duy Phan Chương 5: Đồng bộ - 1

Slide Bài Giảng Hệ Diều Hành Chương 5 - UIT

Embed Size (px)

Citation preview

  • 02/2015 Duy Phan

    Chng 5: ng b - 1

  • 2 ng b Duy Phan

    n tp chng 4

  • 3 ng b Duy Phan

    Bi tp chng 4

  • 4 ng b Duy Phan

    Mc tiu

    Hiu c vn tranh chp gia cc tin trnh

    trong h iu hnh

    Bit c cc gii php gii quyt tranh chp

    Hiu c cc vn trong gii quyt tranh chp

    Bit c cc yu cu ca cc gii php trong

    vic gii quyt tranh chp v phn nhm cc gii

    php

  • 5 ng b Duy Phan

    Ni dung

    Gii thiu v race condition

    Gii thiu cc gii php tng qut gii quyt tranh chp

    Phn tch cc chi tit cc vn trong vic gii quyt tranh chp

    Yu cu ca gii php trong vic gii quyt tranh chp

    Phn nhm cc gii php

  • 6 ng b Duy Phan

    t vn

    Kho st cc process/thread thc thi ng thi v chia se d liu (qua shared memory, file).

    Nu khng c s kim sot khi truy cp cc d liu chia se th c th a n ra trng hp khng nht qun d liu (data inconsistency).

    duy tr s nht qun d liu, h thng cn c c ch bo m s thc thi c trt t ca cc process ng thi. Q

    L p

    R

  • 7 ng b Duy Phan

    Bi ton Producer - Consumer

    P khng c ghi d liu vo buffer y

    C khng c c d liu t buffer ang trng

    P v C khng c thao tc trn buffer cng lc

    P

    C

    Buffer (N)

    Gii hn, khng gii hn

    ???

  • 8 ng b Duy Phan

    Bounded buffer

    Qu trnh Producer

    item nextProduce;

    while(1){

    while(count == BUFFER_SIZE); /*ko lam gi*/

    buffer[in] = nextProducer;

    count++;

    in = (in+1)%BUFFER_SIZE;

    Qu trnh Consumer

    item nextConsumer;

    while(1){

    while(count == 0); /*ko lam gi*/

    nextConsumer = buffer[out];

    count--;

    out = (out+1)%BUFFER_SIZE;

    bin count c chia se

    gia producer va consumer

  • 9 ng b Duy Phan

    Bounded buffer (tt)

    Cc lnh tng, gim bin count tng ng trong ngn ng my l:

    Producer (count++)

    register1 = count

    register1 = register1 + 1

    count = register1

    Consumer (count--)

    register2 = count

    register2 = register2 - 1

    count = register2

    Trong , cc register l cc thanh ghi ca CPU

  • 10 ng b Duy Phan

    Bounded buffer (tt)

    M my ca cc lnh tng v gim bin count c th b thc thi xen k

    Gi s count ang bng 5. Chui thc thi c th xy ra

    0:producer register1 := count {register1 = 5}

    1:producer register1 := register1 + 1 {register1 = 6}

    2:consumer register2 := count {register2 = 5}

    3:consumer register2 := register2 - 1 {register2 = 4}

    4:producer count := register1 {count = 6}

    5:consumer count := register2 {count = 4}

    Cn phi c gii php cc lnh count++, count-- phi l n nguyn (atomic), nghia l thc hin nh mt lnh n, khng b ngt na chng.

  • 11 ng b Duy Phan

    Bounded buffer (tt)

    Race condition: nhiu process truy xut va thao tac ng thi

    ln d liu chia se (nh bin count)

    Kt qua cui cung cua vic truy xut ng thi nay phu

    thuc th t thc thi cua cac lnh thao tac d liu.

    d liu chia se c nht quan, cn bao am sao cho tai mi

    thi im chi co mt process c thao tac ln d liu chia se.

    Do o, cn co c ch ng b hoat ng cua cac process nay.

  • 12 ng b Duy Phan

    Vn Critical Section

    Gi s c n process truy xut ng thi d liu chia se

    Cu trc ca mi process Pi c on code nh sau: Do { entry section /* vao critical section */

    critical section /* truy xut d liu chia xe */ exit section /* ri critical section */

    remainder section /* lam nhng vic khac */ } While (1)

    Trong mi process c nhng on code c cha cc thao tc ln d liu chia se. on code ny c gi l vng tranh chp (critical section, CS).

  • 13 ng b Duy Phan

    Vn Critical Section (tt)

    Vn Critical Section: phai bao am s loai tr

    tng h (mutual exclusion, mutex), tc la khi mt

    process ang thc thi trong vung tranh chp, khng co

    process nao khac ng thi thc thi cac lnh trong

    vung tranh chp.

  • 14 ng b Duy Phan

    Yu cu ca li gii cho CS Problem

    Li gii phi tha ba tnh cht:

    (1) Loi tr tng h (Mutual exclusion): Khi mt process P ang thc thi trong vng tranh chp (CS) ca n th khng c process Q no khc ang thc thi trong CS ca Q.

    (2) Progress: Mt tin trnh tm dng bn ngoi min gng khng c ngn cn cc tin trnh khc vo min gng

    (3) Ch i gii hn (Bounded waiting): Mi process chi phi ch c vo vng tranh chp trong mt khong thi gian c hn nh no . Khng xy ra tnh trng i ti nguyn (starvation).Khng c gi thit no t ra cho s lin h v tc ca cc tin trnh, cung nh v s lng b x ly trong h thng

  • 15 ng b Duy Phan

    Phn loi gii php

    Nhm gii php Busy Waiting

    S dng cc bin c hiu

    S dng vic kim tra lun phin

    Gii php ca Peterson

    Cm ngt

    Chi th TSL

    Nhm gii php Sleep & Wakeup

    Semaphore

    Monitor

    Message

  • 16 ng b Duy Phan

    Cc gii php Busy waiting

    Tip tc tiu th CPU trong khi ch i vo min gng

    Khng i hi s tr gip ca H iu hnh

    While (cha c quyn) do_nothing() ;

    CS;

    T b quyn s dng CS

  • 17 ng b Duy Phan

    Cc gii php Sleep & Wake up

    T b CPU khi cha c vo min gng

    Cn H iu hnh h tr

    if (cha c quyn) Sleep() ;

    CS;

    Wakeup (somebody);

  • 18 ng b Duy Phan

    Tng kt

    Race condition

    Cc gii php tng qut gii quyt tranh chp

    Cc chi tit cc vn trong vic gii quyt tranh chp

    Yu cu ca gii php trong vic gii quyt tranh chp

    Cc nhm cc gii php

  • 19 ng b Duy Phan

    Cu hi n tp

  • 02/2015 Duy Phan

    Kt thc chng 5-1

  • 01/2015 Duy Phan

    Chng 5: ng b - 2

  • 2 ng b Duy Phan

    Cu hi n tp 5 - 1

  • 3 ng b Duy Phan

    Mc tiu

    Hiu c nhm gii php Busy waiting bao gm:

    Cc gii php phn mm

    Cc gii php phn cng

  • 4 ng b Duy Phan

    Ni dung

    Cc gii php phn mm

    S dng gii thut kim tra lun phin

    S dng cc bin c hiu

    Gii php ca Peterson

    Gii php Bakery

    Cc gii php phn cng

    Cp ngt

    Ch th TSL

  • 5 ng b Duy Phan

    Gii thut 1

    Bin chia se

    int turn; /* khi u turn = 0 */

    nu turn = i thi Pi c phep vao critical section, vi i = 0 hay 1

    Process Pi

    do {

    while (turn != i);

    critical section

    turn = j;

    remainder section

    } while (1);

    Tho man mutual exclusion (1)

    Nhng khng tho man yu cu v progress (2) va bounded waiting (3) vi tinh cht strict alternation ca gii thut

  • 6 ng b Duy Phan

    Gii thut 1 (tt)

    V d:

    P0 c RS (remainder section) rt ln cn P1 c RS nh ???

    Process P0:

    do

    while (turn != 0);

    critical section

    turn := 1;

    remainder section

    while (1);

    Process P1:

    do

    while (turn != 1);

    critical section

    turn := 0;

    remainder section

    while (1);

  • 7 ng b Duy Phan

    Gii thut 2

    Bin chia se

    boolean flag[ 2 ]; /* khi u flag[ 0 ] = flag[ 1 ] = false */

    Nu flag[ i ] = true thi Pi sn sang vao critical section.

    Process Pi

    do {

    flag[ i ] = true; /* Pi sn sang vao CS */

    while ( flag[ j ] ); /* Pi nhng Pj */

    critical section

    flag[ i ] = false;

    remainder section

    } while (1);

    Bo m c mutual exclusion. Chng minh?

    Khng tha man progress. Vi sao?

  • 8 ng b Duy Phan

    Gii thut 3 (Peterson)

    Bin chia se

    Kt hp c gii thut 1 v 2.

    Process Pi, vi I = 0 hay 1

    do {

    flag[ i ] = true; /* Process i sn sang */ turn = j; /* Nhng process j */ while (flag[ j ] and turn == j);

    critical section

    flag[ i ] = false;

    remainder section

    } while (1);

    Tho man c c 3 yu cu (chng minh?)

    gii quyt bai toan critical section cho 2 process

  • 9 ng b Duy Phan

    Gii thut Peterson 2 process

    Process P0

    do {

    /* 0 wants in */

    flag[0] = true;

    /* 0 gives a chance to 1 */

    turn = 1;

    while (flag[1] &&turn == 1);

    critical section

    /* 0 no longer wants in */

    flag[0] = false;

    remainder section

    } while(1);

    Process P1

    do {

    /* 1 wants in */

    flag[1] = true;

    /* 1 gives a chance to 0 */

    turn = 0;

    while (flag[0] && turn == 0);

    critical section

    /* 1 no longer wants in */

    flag[1] = false;

    remainder section

    } while(1);

  • 10 ng b Duy Phan

    Gii thut 3: Tnh ng n

    Gii thut 3 tha mutual exclusion, progress, v bounded waiting

    Mutual exclusion c m bo bi v

    P0 v P1 u trong CS nu v ch nu flag[0] = flag[1] = true v turn = I cho mi Pi (khng th xy ra)

    Chng minh tha yu cu v progress v bounded waiting

    Pi khng th vo CS nu v ch nu b kt ti vng lp while() vi iu kin flag[j]=true v turn = j

    Nu Pj khng mun vo CS th flag[j] = false v do Pi c th vo CS

  • 11 ng b Duy Phan

    Gii thut 3: Tnh ng n (tt)

    Nu Pj bt flag[j]=true v ang ch ti while() th

    c ch hai trng hp l turn = i hoc turn = j

    Nu turn = i v Pi vo CS. Nu turn = j th Pj vo CS

    nhng s bt flag[j]=false khi thot ra -> cho php Pi

    v CS

    Nhng nu Pj c thi gian bt flag[j]=true th Pj

    cng phi gn turn = i

    V Pi khng thay i tri cua bin turn khi ang ket

    trong vong lp while(), Pi se ch va o CS nhiu

    nht la sau mt ln Pj vao CS (bounded waiting)

  • 12 ng b Duy Phan

    Gii thut bakery: n process

    Trc khi vao CS, process Pi nhn mt con s. Process nao gi con s nho nht thi c vao CS

    Trng hp Pi va Pj cung nhn c mt chi s:

    N u i < j thi Pi c vao trc. (i xng)

    Khi ra khoi CS, Pi t lai s cua minh bng 0

    C ch cp s cho cac process thng tao cac s theo c ch tng dn, vi du 1, 2, 3, 3, 3, 3, 4, 5,

    Ki hiu

    (a,b) < (c,d) nu a < c hoc if a = c va b < d

    max(a0,,ak) la con s b sao cho b ai vi moi i = 0,, k

  • 13 ng b Duy Phan

    Gii thut bakery: n process (tt)

    /* shared variable */

    boolean choosing[ n ]; /* initially, choosing[ i ] = false */

    int num[ n ]; /* initially, num[ i ] = 0 */

    do {

    choosing[ i ] = true;

    num[ i ] = max(num[0], num[1],, num[n 1]) + 1; choosing[ i ] = false;

    for (j = 0; j < n; j++) {

    while (choosing[ j ]);

    while ((num[ j ] != 0) && (num[ j ], j) < (num[ i ], i));

    }

    critical section

    num[ i ] = 0;

    remainder section

    } while (1);

  • 14 ng b Duy Phan

    T software n hardware

    Khuyt im ca cc gii php software:

    Cac process khi yu cu c vao vung tranh chp u phai lin tuc kim tra iu kin (busy waiting), t n nhiu thi gian x ly cua CPU

    N u thi gian x ly trong vung tranh chp ln, mt giai phap hiu qua nn co c ch block cac process c n i.

    Cc gii php phn cng:

    Cm ngt (disable interrupts)

    Du ng cac lnh c bit

  • 15 ng b Duy Phan

    Cm ngt

    Trong h thng uniprocessor:

    mutual exclusion c m bo

    Nhng nu system clock c

    cp nht do interrupt th

    Trong h thng multiprocessor:

    mutual exclusion khng c

    m bo

    Ch cm ngt ti CPU thc thi

    lnh disable_interrupts

    Cc CPU khc vn c th truy

    cp b nh chia s

    Process Pi: do { disable_interrupts(); critical section enable_interrupts(); remainder section } while (1);

  • 16 ng b Duy Phan

    Lnh TestAndSet

    c v ghi mt bin trong mt thao tc atomic

    (khng chia ct c)

    boolean TestAndSet( boolean

    *target){

    boolean rv = *target;

    *target = true; return rv;

    }

    Shared data:

    boolean lock = false;

    Process Pi :

    do {

    while (TestAndSet(&lock)); critical section

    lock = false;

    remainder section

    } while (1);

  • 17 ng b Duy Phan

    Lnh TestAndSet (tt)

    Mutual exclusion c bo m: nu Pi vo CS, cc

    process Pj khc u ang busy waiting

    Khi Pi ra khoi CS, qu trinh chn la process Pj vo

    CS k tip l tuy y khng bo m iu kin bounded waiting. Do o co th xy ra starvation (bi

    bo oi)

    Cc processor (vi du Pentium) thng thng cung cp

    mt lnh n l Swap(a, b) co tc dung hon chuyn

    ni dung cua a v b.

    Swap(a, b) cung co u nhc im nh

    TestAndSet

  • 18 ng b Duy Phan

    Swap v mutual exclusion

    Bin chia se lock c khi to gia tr false

    Mi process Pi co bin cc b key

    Process Pi nao thy gia tr lock = false thi c vao CS.

    Process Pi s loi tr cac process Pj khac khi thit lp lock = true

    void Swap(boolean *a,

    boolean *b) {

    boolean temp = *a;

    *a = *b;

    *b = temp;

    }

    Bi n chia se (khi ta o la false) bool lock;

    bool key;

    Process Pi

    do {

    key = true;

    while (key == true)

    Swap(&lock, &key);

    critical section

    lock = false;

    remainder section

    } while (1)

    Khng thoa man bounded waiting

  • 19 ng b Duy Phan

    Gii thut dung TestAndSet tho man 3 yu cu

    C u tru c d li u du ng chung (khi ta o la false)

    bool waiting[ n ];

    bool lock;

    Mutual exclusion: Pi chi co th va o CS n u va chi n u ho c waiting[ i ] = false, ho c key = false

    key = false chi khi TestAndSet (hay Swap) c thc thi

    Process u tin thc thi TestAndSet mi co key == false; ca c process kha c u pha i i

    waiting[ i ] = false chi khi process kha c ri kho i CS

    Chi co m t waiting[ i ] co gia tri false

    Progress: chng minh tng t nh mutual exclusion

    Bounded waiting: waiting in the cyclic order

  • 20 ng b Duy Phan

    Gii thut dung TestAndSet tho man 3 yu cu (tt)

    waiting[ i ] = true;

    key = true;

    while (waiting[ i ] && key)

    key = TestAndSet(lock);

    waiting[ i ] = false;

    j = (i + 1) % n;

    while ( (j != i) && !waiting[ j ] )

    j = (j + 1) % n;

    if (j == i)

    lock = false;

    else

    waiting[ j ] = false;

    critical section

    remainder section

    do {

    } while (1)

  • 21 ng b Duy Phan

    n tp

    Cc gii php phn mm

    S dng gii thut kim tra lun phin

    S dng cc bin c hiu

    Gii php ca Peterson

    Gii php Bakery

    Cc gii php phn cng

    Cp ngt

    Ch th TSL

  • 01/2015 Duy Phan

    Kt thc chng 5-2

  • 01/2015Duy Phan

    Chng 5: ng b - 3

  • 2 ng bDuy Phan

    Cu hi n tp 5 - 2

  • 3 ng bDuy Phan

    Mc tiu

    Bit c cc gii php ng b tin trnh theo kiu

    Sleep & Wake up bao gm:

    Semaphore

    Critical Region

    Monitor

    p dng cc gii php ny vo cc bi ton ng b

    kinh in

  • 4 ng bDuy Phan

    Ni dung

    Cc gii php Sleep & Wake up

    Semaphore

    Cc bi ton ng b kinh in

    Critical Region

    Monitor

  • 5 ng bDuy Phan

    Cc gii php Sleep & Wake up

    int busy; // =1 nu CS ang bi chimint blocked; // s P ang bi khoado{

    if (busy){blocked = blocked +1;sleep();

    }else busy =1;

    CS;busy = 0;if (blocked !=0){

    wakeup (process);blocked = blocked -1;

    }RS;

    } while (1);

  • 6 ng bDuy Phan

    Semaphore

    L cng cu ng b cung cp bi OS m khng i hi busy

    waiting

    Semaphore S l mt bin s nguyn.

    Ngoi thao tc khi ng bin thi chi c th c truy xut qua

    hai tc vu c tinh n nguyn (atomic) v loai tr (mutual

    exclusive)

    wait(S) hay cn goi la P(S): giam gia tri semaphore (S=S-1) . K o

    nu gia tri nay m thi process thc hin lnh wait() bi blocked.

    signal(S) hay cn goi la V(S): tng gia tri semaphore (S=S+1) . K

    o nu gia tri nay khng dng, mt process ang blocked bi mt

    lnh wait() se c hi phuc thc thi.

    Tranh busy waiting: khi phai i thi process se c t vao mt

    blocked queue, trong o cha cac process ang ch i cung mt

    s kin.

  • 7 ng bDuy Phan

    Semaphore (tt)

    P(S) hay wait(S) s dung gianh tai nguyn va

    giam bin m S=S-1

    V(S) hay signal(S) se giai phong tai nguyn va tng

    bin m S= S+1

    Nu P c thc hin trn bin m

  • 8 ng bDuy Phan

    Hin thc semaphore

    inh nghia semaphore la mt record

    typedef struct {

    int value;

    struct process *L; /* process queue */

    } semaphore;

    Gia s h iu hanh cung cp hai tac vu (system

    call):

    block(): tam treo process nao thc thi lnh nay

    wakeup(P): hi phuc qua trinh thc thi cua process P

    ang blocked

  • 9 ng bDuy Phan

    Hin thc semaphore (tt)

    Cac tac vu semaphore c hin thc nh sau:

    void wait(semaphore S) {

    S.value--;

    if (S.value < 0) {

    add this process to S.L;block();

    }}

    void signal(semaphore S) { S.value++;

    if (S.value

  • 10 ng bDuy Phan

    Hin thc semaphore (tt)

    Khi mt process phai ch trn semaphore S, no se

    bi blocked va c t trong hang i semaphore

    Hang i nay la danh sach lin kt cac PCB

    Tac vu signal() thng s dung c ch FIFO khi

    chon mt process t hang i va a vao hang i

    ready

    block() va wakeup() thay i trang thai cua process

    block: chuyn t running sang waiting

    wakeup: chuyn t waiting sang ready

  • 11 ng bDuy Phan

    V d s dng semaphore 1

    Shared data:

    semaphore mutex;

    /* initially mutex.value = 1 */

    Process Pi:

    do {

    wait(mutex);

    critical section

    signal(mutex);

    remainder section

    } while (1);

    Dung cho n process

    Khi tao S.value = 1

    Chi duy nht mt

    process c vao CS

    (mutual exclusion)

    cho phep k process

    vao CS, khi tao

    S.value = k

  • 12 ng bDuy Phan

    V d s dng semaphore 2

    ng b hoat ng

    theo yu cu, P1 phai inh

    nghia nh sau:

    S1;

    signal(synch);

    Va P2 inh nghia nh sau:

    wait(synch);

    S2;

    Hai process: P1 va P2

    Yu cu: lnh S1 trong

    P1 cn c thc thi

    trc lnh S2 trong P2

    inh nghia semaphore

    synch ng b

    Khi ng semaphore:

    synch.value = 0

  • 13 ng bDuy Phan

    Nhn xt

    Khi S.value 0: s process co th thc thi wait(S)

    ma khng bi blocked = S.value

    Khi S.value < 0: s process ang i trn S la

    S.value

    Atomic va mutual exclusion: khng c xay ra

    trng hp 2 process cung ang trong thn lnh

    wait(S) va signal(S) (cung semaphore S) tai mt

    thi im (ngay ca vi h thng multiprocessor)

    do o, oan ma inh nghia cac lnh wait(S) va signal(S) cung chinh la vung tranh chp

  • 14 ng bDuy Phan

    Nhn xt (tt)

    Vung tranh chp cua cac tac vu wait(S) va signal(S)

    thng thng rt nh: khoang 10 lnh.

    Giai phap cho vung tranh chp wait(S) va signal(S)

    Uniprocessor: co th dung c ch cm ngt (disable

    interrupt). Nhng phng phap nay khng lam vic

    trn h thng multiprocessor.

    Multiprocessor: co th dung cac giai phap software

    (nh giai thut Dekker, Peterson) hoc giai phap

    hardware (TestAndSet, Swap).

    Vi CS rt nh nn chi phi cho busy waiting se rt thp.

  • 15 ng bDuy Phan

    Deadlock v starvation

    Deadlock: hai hay nhiu process ang ch i v han inh mt s

    kin khng bao gi xay ra (vd: s kin do mt trong cac process

    ang i tao ra).

    Goi S va Q la hai bin semaphore c khi tao = 1

    P0 P1

    wait(S); wait(Q);

    wait(Q); wait(S);

    signal(S); signal(Q);

    signal(Q); signal(S);

    P0 thc thi wait(S), ri P1 thc thi wait(Q), ri P0 thc thi wait(Q)

    bi blocked, P1 thc thi wait(S) bi blocked.

    Starvation (indefinite blocking) Mt tin trinh co th khng bao

    gi c ly ra khi hang i ma no bi treo trong hang i o.

  • 16 ng bDuy Phan

    Cc loi semaphore

    Counting semaphore: mt s nguyn co gia tri

    khng han ch.

    Binary semaphore: co tri la 0 hay 1. Binary

    semaphore rt d hin thc.

    Co th hin thc counting semaphore bng binary

    semaphore.

  • 17 ng bDuy Phan

    Cc bi ton ng b kinh in

    Bounded Buffer Problem

    Readers and Writers Problem

    Dining-Philosophers Problem

  • 18 ng bDuy Phan

    Bi ton bounder buffer

    D liu chia s:

    Semaphore full, empty, mutex;

    Khi tao:

    full = 0; /* s buffers y */

    empty = n; /* s buffers trng */

    mutex = 1;

    out

    n buffers

  • 19 ng bDuy Phan

    Bi ton bounder buffer

    do {

    wait(full)

    wait(mutex);

    nextc = get_buffer_item(out);

    signal(mutex);

    signal(empty);

    consume_item(nextc);

    } while (1);

    do {

    nextp = new_item();

    wait(empty);

    wait(mutex);

    insert_to_buffer(nextp);

    signal(mutex);

    signal(full);

    } while (1);

    producer consumer

  • 20 ng bDuy Phan

    Bi ton Dining Philosophers

    5 trit gia ngi n va

    suy nghi

    Mi ngi cn 2 chic

    ua (chopstick) n

    Trn ban chi co 5 ua

    Bai toan nay minh hoa

    s kho khn trong vic

    phn phi tai nguyn

    gia cac process sao

    cho khng xay ra

    deadlock va starvation

    0

    23

    4 0 1

    4 2

    3

    D liu chia s:

    Semaphore chopstick[5];

    Khi u cac bin u la 1

  • 21 ng bDuy Phan

    Bi ton Dining Philosophers (tt)

    Triet gia th i:

    do {

    wait(chopstick [ i ])

    wait(chopstick [ (i + 1) % 5 ])

    eat

    signal(chopstick [ i ]);

    signal(chopstick [ (i + 1) % 5 ]);

    think

    } while (1);

  • 22 ng bDuy Phan

    Bi ton Dining Philosophers (tt)

    Giai phap trn co th gy ra deadlock Khi tt ca trit gia oi bung cung luc va ng thi cm

    chic ua bn tay trai deadlock

    Mt s giai phap khac giai quyt c deadlock Cho phep nhiu nht 4 trit gia ngi vao cung mt luc

    Cho phep trit gia cm cac ua chi khi ca hai chic ua u

    sn sang (nghia la tac vu cm cac ua phai xay ra trong

    CS)

    Trit gia ngi vi tri l cm ua bn trai trc, sau o mi

    n ua bn phai, trong khi o trit gia vi tri chn cm

    ua bn phai trc, sau o mi n ua bn trai

    Starvation?

  • 23 ng bDuy Phan

    Bi ton Reader-Writers

    Writer khng c cp nht d liu khi co mt

    Reader ang truy xut CSDL

    Tai mt thi im, chi cho phep mt Writer c

    sa i ni dung CSDL

    Database

    R1

    R2

    R3

    W1 W2

  • 24 ng bDuy Phan

    Bi ton Reader-Writers (tt)

    B oc trc b ghi (first

    reader-writer)

    D liu chia s

    semaphore mutex = 1;

    semaphore wrt = 1;

    int readcount = 0;

    Writer process

    wait(wrt);

    ...

    writing is performed

    ...

    signal(wrt);

    Reader process

    wait(mutex);

    readcount++;

    if (readcount == 1)

    wait(wrt);

    signal(mutex);

    ...

    reading is performed

    ...

    wait(mutex);

    readcount--;

    if (readcount == 0)

    signal(wrt);

    signal(mutex);

  • 25 ng bDuy Phan

    Bi ton Reader-Writers (tt)

    mutex: bao v bin readcount

    wrt

    Bao am mutual exclusion i vi cac writer

    c s dung bi reader u tin hoc cui cung vao

    hay ra khi vung tranh chp.

    Nu mt writer ang trong CS va co n reader ang i

    thi mt reader c xp trong hang i cua wrt va n 1

    reader kia trong hang i cua mutex

    Khi writer thc thi signal(wrt), h thng co th phuc hi

    thc thi cua mt trong cac reader ang i hoc writer

    ang i.

  • 26 ng bDuy Phan

    Cc vn vi semaphore

    Semaphore cung cp mt cng cu manh me bao am

    mutual exclusion va phi hp ng b cac process

    Tuy nhin, nu cac tac vu wait(S) va signal(S) nm rai rac

    rt nhiu processes kho nm bt c hiu ng cua cac tac vu nay. Nu khng s dung ung co th xay ra tinh trang deadlock hoc starvation.

    Mt process bi die co th keo theo cac process khac

    cung s dung bin semaphore.

    signal(mutex)

    critical section

    wait(mutex)

    wait(mutex)

    critical section

    wait(mutex)

    signal(mutex)

    critical section

    signal(mutex)

  • 27 ng bDuy Phan

    Critical Region (CR)

    La mt cu truc ngn ng cp cao (high-level language

    construct, c dich sang ma may bi mt compiler),

    thun tin hn cho ngi lp trinh.

    Mt bin chia s v kiu d liu T, khai bao nh sau

    v: shared T;

    Bin chia s v chi co th c truy xut qua phat biu sau

    region v when B do S; /* B la mt biu thc Boolean */

    Y nghia: trong khi S c thc thi, khng co qua trinh

    khac co th truy xut bin v.

  • 28 ng bDuy Phan

    CR v bi ton bounded buffer

    D liu chia se:

    struct buffer

    {

    int pool[n];

    int count,

    in,

    out;

    }

    region buffer when (count < n) {

    pool[in] = nextp;

    in = (in + 1) % n;

    count++;

    }

    Producer

    region buffer when (count > 0){

    nextc = pool[out];

    out = (out + 1) % n;

    count--;

    }

    Consumer

  • 29 ng bDuy Phan

    Monitor

    Cung la mt cu truc ngn ng cp cao tng t

    CR, co chc nng nh semaphore nhng d iu

    khin hn

    Xut hin trong nhiu ngn ng lp trinh ng thi

    nh

    Concurrent Pascal, Modula-3, Java,

    Co th hin thc bng semaphore

  • 30 ng bDuy Phan

    Monitor (tt)

    La mt module phn mm,

    bao gm

    Mt hoc nhiu thu tuc

    (procedure)

    Mt oan code khi tao

    (initialization code)

    Cac bin d liu cuc b

    (local data variable)

    c tinh cua monitor

    Local variable chi co

    th truy xut bi cac

    thu tuc cua monitor

    Process vao monitor

    bng cach goi mt

    trong cac thu tuc o

    Chi co mt process co

    th vao monitor tai mt

    thi im mutual exclusion c bao

    am

    shared data

    entry queue

    operations

    initialization

    code

    M hinh cua mt monitor

    n gian

  • 31 ng bDuy Phan

    Cu trc ca monitor

    monitor monitor-name{

    shared variable declarations

    procedure body P1 () {. . .

    }

    procedure body P2 () {. . .

    }

    procedure body Pn () {. . .

    }

    {

    initialization code

    }

    }

  • 32 ng bDuy Phan

    Condition variable

    Nhm cho phep mt process i trong monitor, phai khai

    bao bin iu kin (condition variable)

    condition a, b;

    Cac bin iu kin u cuc b va chi c truy cp bn

    trong monitor.

    Chi co th thao tac ln bin iu kin bng hai thu tuc:

    a.wait: process goi tac vu nay se bi block trn bin iu kin a

    process nay chi co th tip tuc thc thi khi co process khac thc

    hin tac vu a.signal

    a.signal: phuc hi qua trinh thc thi cua process bi block trn bin

    iu kin a.

    Nu co nhiu process: chi chon mt

    Nu khng co process: khng co tac dung

  • 33 ng bDuy Phan

    Monitor c condition variable

    Cac process co th i entry

    queue hoc i cac condition

    queue (a, b,)

    Khi thc hin lnh a.wait,

    process se c chuyn vao

    condition queue a

    Lnh a.signal chuyn mt

    process t condition queue a

    vao monitor

    Khi o, bao am mutual

    exclusion, process goi a.signal

    se bi blocked va c a vao

    urgent queue

    entry queueshared data

    ...

    operations

    initialization

    code

    a

    b

  • 34 ng bDuy Phan

    Monitor c condition variable (tt)

    local data

    condition variables

    procedure 1

    procedure k

    initialization code

    ...

    monitor waiting area entrance

    entry queue

    c1.wait

    condition c1

    condition cn

    cn.wait

    urgent queue

    cx.signal

    ...

    MONITOR

    exit

  • 35 ng bDuy Phan

    Monitor v dining philosophers

    monitor dp {

    enum {thinking, hungry, eating} state[5];

    condition self[5];

    0

    1

    23

    4

  • 36 ng bDuy Phan

    Dining philosophers (tt)

    void pickup(int i) {

    state[ i ] = hungry;

    test[ i ];

    if (state[ i ] != eating)

    self[ i ].wait();

    }

    void putdown(int i) {

    state[ i ] = thinking;

    // test left and right neighbors

    test((i + 4) % 5); // left neighbor

    test((i + 1) % 5); // right

    }

  • 37 ng bDuy Phan

    Dining philosophers (tt)

    void test (int i) {

    if ( (state[(i + 4) % 5] != eating) &&

    (state[ i ] == hungry) &&

    (state[(i + 1) % 5] != eating) ) {

    state[ i ] = eating;

    self[ i ].signal();

    }

    void init() {

    for (int i = 0; i < 5; i++)

    state[ i ] = thinking;

    }

    }

  • 38 ng bDuy Phan

    Dining philosophers (tt)

    Trc khi n, mi trit gia phai goi ham pickup(),

    n xong ri thi phai goi ham putdown()

    dp.pickup(i);

    n

    dp.putdown(i);

    Giai thut khng deadlock nhng co th gy

    starvation.

  • 39 ng bDuy Phan

    Cu hi n tp

    Semaphore l g? Nu cch hoat ng cua semaphore

    v ng dung vo mt bi ton ng b?

    Monitor l g? Nu cch hoat ng cua monitor v

    ng dung vo mt bi ton ng b?

  • 40 ng bDuy Phan

    Bi tp

    S dng

  • 01/2015Duy Phan

    Kt thc chng 5-3

    ch5-1.pdfch5-2.pdfch5-3.pdf