79
1 Chöông V - Phaàn II Ñoàng Boä vaø Giaûi Quyeát Tranh Chaáp (Process Synchronization)

Chapter05 2 Process Synchronization

Embed Size (px)

DESCRIPTION

Đồng bộ Process

Citation preview

  • 1Chng V - Phan II

    ong Bo va Giai Quyet Tranh Chap

    (Process Synchronization)

  • 2Khoa KTMT

    Noi dung

    at van e (tai sao phai ong bo va giai

    quyet tranh chap ?)

    Van e Critical section

    Cac giai phap phan mem

    Giai thuat Peterson, va giai thuat bakery

    ong bo bang hardware

    Semaphore

    Cac bai toan ong bo

    Critical region

    Monitor

  • 3Khoa KTMT

    at van e

    Khao sat cac process/thread thc thi ong thi va chia

    se d lieu (qua shared memory, file).

    Neu khong co s kiem soat khi truy cap cac d lieu chia

    se th co the a en ra trng hp khong nhat quan d

    lieu (data inconsistency).

    e duy tr s nhat quan d lieu, he thong can co c che

    bao am s thc thi co trat t cua cac process ong thi.

    Q

    Lp R

  • 4Khoa KTMT

    Bai toan Producer-Consumer

    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

    CBuffer (N)

    Gii han, khong gii

    han ???

  • 5Khoa KTMT

    at van e

    Xet bai toan Producer-Consumer vi bounded buffer

    Bounded buffer, them bien em count

    #define BUFFER_SIZE 10 /* 10 buffers */

    typedef struct {

    . . .

    } item;

    item buffer[BUFFER_SIZE];

    int in = 0, out = 0, count = 0;

  • 6Khoa KTMT

    Bounded buffer (tt)

    Qua trnh Producer

    item nextProduced;

    while(1) {

    while (count == BUFFER_SIZE); /* do nothing */

    buffer[in] = nextProduced;

    count++;

    in = (in + 1) % BUFFER_SIZE;

    }

    Qua trnh Consumer

    item nextConsumed;

    while(1) {

    while (count == 0); /* do nothing */

    nextConsumed = buffer[out] ;

    count--;

    out = (out + 1) % BUFFER_SIZE;

    }

    bien count c chia se

    gia producer va consumer

  • 7Khoa KTMT

    Bounded buffer (tt)

    Cac lenh tang, giam bien count tng ng trong ngon ng may la:

    (Producer) count++:

    register1

    = count

    register1

    = register1

    + 1

    count = register1

    (Consumer) count--:

    register2

    = count

    register2

    = register2

    - 1

    count = register2

    Trong o, cac registerila cac thanh ghi cua CPU.

  • 8Khoa KTMT

    Bounded buffer (tt)

    Ma may cua cac lenh tang va giam bien count co the b thc thi xen

    ke

    Gia s count ang bang 5. Chuoi thc thi sau co the xay 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}

    Cac lenh count++, count-- phai la n nguyen

    (atomic), ngha la thc hien nh mot lenh n, khong

    b ngat na chng.

  • 9Khoa KTMT

    Bounded buffer (tt)

    Race condition: nhieu process truy xuat va thao tac

    ong thi len d lieu chia se (nh bien count) Ket qua cuoi cung cua viec truy xuat ong thi nay phu thuoc

    th t thc thi cua cac lenh thao tac d lieu.

    e d lieu chia se c nhat quan, can bao am

    sao cho tai moi thi iem ch co mot process c

    thao tac len d lieu chia se. Do o, can co c che

    ong bo hoat ong cua cac process nay.

  • 10Khoa KTMT

    Van e Critical Section

    Gia s co n process cung truy xuat ong thi d lieu

    chia se

    Cau truc cua moi process Pi - Moi process co oan

    code nh sau :

    Do {

    entry section /* vao critical section */

    critical section /* truy xuat d lieu chia xe */

    exit section /* ri critical section */

    remainder section /* lam nhng viec khac */

    } While (1)

    Trong moi process co nhng oan code co cha cac

    thao tac len d lieu chia se. oan code nay c

    goi la vung tranh chap (critical section, CS).

  • 11Khoa KTMT

    Van e Critical Section

    Van e Critical Section: phai bao am s loai tr

    tng ho (MUTual EXclusion, mutex), tc la khi mot

    process ang thc thi trong vung tranh chap, khong

    co process nao khac ong thi thc thi cac lenh

    trong vung tranh chap.

  • 12Khoa KTMT

    Yeu cau cua li giai cho Critical Section Problem

    Li giai phai thoa bon tnh chat:

    (1) oc quyen truy xuat (Mutual exclusion): Khi mot process P ang

    thc thi trong vung tranh chap (CS) cua no th khong co process Q

    nao khac ang thc thi trong CS cua Q.

    (2) Progress: Mot tien trnh tam dng ben ngoai mien gang (CS)

    khong c ngan can cac tien trnh khac vao mien gang (CS) va

    viec la chon P nao vao CS phai co han nh

    (3) Ch i gii han (Bounded waiting): Moi process ch phai ch

    e c vao vung tranh chap trong mot khoang thi gian co han

    nh nao o. Khong xay ra tnh trang oi tai nguyen (starvation).

    (4)Khong co gia thiet nao at ra cho s lien he ve toc o cua cac

    tien trnh, cung nh ve so lng bo x ly trong he thong

  • 13Khoa KTMT

    Nhm gii php Busy Waiting

    S dng cc bin c hiu

    S dng vic kim tra lun phin

    Gii php ca Peterson

    Cm ngt

    Ch th TSL

    Nhm gii php Sleep & Wakeup

    Semaphore

    Monitor

    Message

    Phan loai giai phap

  • 14Khoa KTMT

    Cac giai phap Busy waiting

    While (cha c quyn) do nothing() ;

    CS;

    T b quyn s dng CS

    Tip tc tiu th CPU trong khi ch i vo min gngKhng i hi s tr gip ca H iu hnh

  • 15Khoa KTMT

    Cac giai phap Sleep & Wake up

    if (cha c quyn) Sleep() ;

    CS;

    Wakeup( somebody);

    T b CPU khi cha c vo min gngCn c H iu hnh h tr

  • 16Khoa KTMT

    Cac giai phap Busy waiting

    Giai thuat 1

    Bien chia se

    Int turn; /* khi au turn = 0 */

    neu turn = i th 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);

    Thoa man mutual exclusion (1)

    Nhng khong thoa man yeu cau ve progress (2) va bounded

    waiting (3) v tnh chat strict alternation cua giai thuat

  • 17Khoa KTMT

    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);

    V du:

    P0 co RS (remainder section) rat ln con P1 co RS nho???

    Giai thuat 1 (tt)

    P0 P1 P0 ?(I/O)

    H Thng b treo

  • 18Khoa KTMT

    Giai thuat 2

    Bien chia se

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

    Neu flag[ i ] = true th Pi

    san sang vao critical section.

    Process Pi

    do {

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

    while ( flag[ j ] ); /* Pinhng P

    j*/

    critical section

    flag[ i ] = false;

    remainder section

    } while (1);

    Bao am c mutual exclusion. Chng minh?

    Khong thoa man progress. V sao?

  • 19Khoa KTMT

    Giai thuat 3 (Peterson)

    Bien chia se: ket hp ca giai thuat 1 va 2

    Process Pi, vi i = 0 hay 1

    do {

    flag[ i ] = true; /* Process i san sang */

    turn = j; /* Nhng process j */

    while (flag[ j ] and turn == j);

    critical section

    flag[ i ] = false;

    remainder section

    } while (1);

    Thoa man c ca 3 yeu cau (chng minh?)

    giai quyet bai toan critical section cho 2 process.

  • 20Khoa KTMT

    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);

    Giai thuat Peterson-2 process

  • 21Khoa KTMT

    Giai thuat 3: Tnh ung an

    Giai thuat 3 thoa mutual exclusion, progress, va

    bounded waiting

    Mutual exclusion c bao am bi v

    P0 va P1 eu trong CS neu va ch neu flag[0] =

    flag[1] = true va turn = i cho moi Pi (khong the xay ra)

    Chng minh thoa yeu cau ve progress va

    bounded waiting

    Pi khong the vao CS neu va ch neu b ket tai vong

    lap while() vi ieu kien flag[ j ] = true va turn = j .

    Neu Pj khong muon vao CS th flag[ j ] = false va do

    o Pi co the vao CS.

  • 22Khoa KTMT

    Giai thuat 3: Tnh ung an (tt)

    Neu Pj a bat flag[ j ] = true va ang ch tai while() th

    co ch hai trng hp la turn = i hoac turn = j

    Neu turn = i th Pi vao CS. Neu turn = j th Pj vao CS

    nhng se bat flag[ j ] = false khi thoat ra cho phep

    Pi vao CS

    Nhng neu Pj co u thi gian bat flag[ j ] = true th Pj

    cung phai gan turn = i

    V Pi khong thay oi tr cua bien turn khi ang ket

    trong vong lap while(), Pi se ch e vao CS nhieu

    nhat la sau mot lan Pj vao CS (bounded waiting)

  • 23Khoa KTMT

    Giai thuat bakery: n process

    Trc khi vao CS, process Pi nhan mot con so.

    Process nao gi con so nho nhat th c vao CS

    Trng hp Pi va Pj cung nhan c mot ch so:

    Neu i < j th Pi c vao trc. (oi xng)

    Khi ra khoi CS, Pi at lai so cua mnh bang 0

    C che cap so cho cac process thng tao cac so

    theo c che tang dan, v du 1, 2, 3, 3, 3, 3, 4, 5,

    K hieu

    (a,b) < (c,d) neu a < c hoac if a = c va b < d

    max(a0,,a

    k) la con so b sao cho b a

    ivi moi i = 0,, k

  • 24Khoa KTMT

    Giai thuat 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; // khng chim quyn vo vng CS

    remainder section

    } while (1);

  • 25Khoa KTMT

    T software en hardware

    Khuyet iem cua cac giai phap software

    Cac process khi yeu cau c vao vung tranh chap eu phai lien tuc kiem tra ieu kien (busy waiting),

    ton nhieu thi gian x ly cua CPU

    Neu thi gian x ly trong vung tranh chap ln, mot giai phap hieu qua nen co c che block cac process

    can i.

    Cac giai phap phan cng (hardware)

    Cam ngat (disable interrupts)

    Dung cac lenh ac biet

  • 26Khoa KTMT

    Cam ngat

    Trong he thong uniprocessor:

    mutual exclusion c bao

    am.

    Nhng neu system clockc cap nhat do interrupt

    th sao?

    Tren he thong multiprocessor:

    mutual exclusion khong c

    am bao

    Ch cam ngat tai CPU thc thi lenh disable_interrupts

    Cac CPU khac van co the truy cap bo nh chia se

    Process Pi:

    do {

    disable_interrupts();

    critical section

    enable_interrupts();

    remainder section

    } while (1);

  • 27Khoa KTMT

    Lenh TestAndSet

    oc va ghi mot bien trong mot

    thao tac atomic (khong chia cat

    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);

  • 28Khoa KTMT

    Lenh TestAndSet (tt)

    Mutual exclusion c bao am: neu Pivao CS, cac

    process Pj

    khac eu ang busy waiting

    Khi Pira khoi CS, qua trnh chon la process P

    jvao CS

    ke tiep la tuy y khong bao am ieu kien bounded

    waiting. Do o co the xay ra starvation (b bo oi)

    Cac processor (v du Pentium) thong thng cung cap

    mot lenh n la Swap(a, b) co tac dung hoan chuyen noi

    dung cua a va b.

    Swap(a, b) cung co u nhc iem nh TestAndSet

  • 29Khoa KTMT

    Swap va mutual exclusion

    Bien chia se lock c khi

    tao gia tr false

    Moi process Pico bien cuc bo

    key

    Process Pinao thay gia tr

    lock = false th c vao CS.

    Process Pise loai tr cac

    process Pjkhac khi thiet lap

    lock = true

    void Swap(boolean &a,

    boolean &b) {

    boolean temp = a;

    a = b;

    b = temp;

    }

    Bien chia se (khi tao 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)

    Khong thoa man bounded waiting

  • 30Khoa KTMT

    Giai thuat dung TestAndSet thoa man 3 yeu cau (1)

    Cau truc d lieu dung chung (khi tao la false)

    bool waiting[ n ];

    bool lock;

    Pi ch co the vao CS neu va ch neu hoac waiting[ i ] = false, hoac

    key = false.

  • 31Khoa KTMT

    Giai thuat dung TestAndSet thoa man 3 yeu cau (2)

    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)

  • 32Khoa KTMT

    Giai thuat dung TestAndSet thoa man 3 yeu cau (3)

    Cau truc d lieu dung chung (khi tao la false)

    bool waiting[ n ];

    bool lock;

    Mutual exclusion: Pi ch co the vao CS neu va ch neu

    hoac waiting[ i ] = false, hoac key = false

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

    Process au tien thc thi TestAndSet mi co key == false;

    cac process khac eu phai i

    waiting[ i ] = false ch khi process khac ri khoi CS

    Ch co mot waiting[ i ] co gia tr false

    Progress: chng minh tng t nh mutual exclusion

    Bounded waiting: waiting in the cyclic order

  • 33Khoa KTMT

    Cac giai phap Sleep & Wake up

    int busy; // =1 neu CS ang b chiem

    Int blocked; // so P ang b khoa

    do

    {

    if (busy==1){

    blocked = blocked +1;

    sleep();

    }

    else

    busy =1;

    CS;

    busy = 0;

    if(blocked !=0){

    wakeup(process);

    blocked = blocked -1;

    }

    RS;

    } while(1);

    Trng hp:

    -A vao CS

    -B kch hoat va tang blocked

    -A kch hoat lai

    -B kch hoat lai

    -?????

  • 34Khoa KTMT

    Semaphore

    La cong cu ong bo cung cap bi OS ma khong oi hoi

    busy waiting

    Semaphore S la mot bien so nguyen.

    Ngoai thao tac khi ong bien th ch co the c truy

    xuat qua hai tac vu co tnh n nguyen (atomic) va loai

    tr (mutual exclusion)

    wait(S) hay con goi la P(S): giam gia tr semaphore (S=S-1) . Ke

    o neu gia tr nay am th process thc hien lenh wait() b

    blocked.

    signal(S) hay con goi la V(S): tang gia tr semaphore (S=S+1) .

    Ke o neu gia tr nay khong dng, mot process ang blocked

    bi mot lenh wait() se c hoi phuc e thc thi.

    Tranh busy waiting: khi phai i th process se c at

    vao mot blocked queue, trong o cha cac process

    ang ch i cung mot s kien.

  • 35Khoa KTMT

    Semaphore

    P(S) hay wait(S) s dung e gianh tai nguyen va giam

    bien em S=S-1

    V(S) hay signal(S) se giai phong tai nguyen va tang bien

    em S= S+1

    Neu P c thc hien tren bien em

  • 36Khoa KTMT

    Hien thc semaphore

    nh ngha semaphore la mot record

    typedef struct {

    int value;

    struct process *L;/* process queue */

    } semaphore;

    Gia s he ieu hanh cung cap hai tac vu

    (system call):

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

    wakeup(P): hoi phuc qua trnh thc thi cua process P

    ang blocked

  • 37Khoa KTMT

    Hien thc semaphore (tt)

    Cac tac vu semaphore c hien 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

  • 38Khoa KTMT

    Hien thc semaphore (tt)

    Khi mot process phai ch tren semaphore S, no

    se b blocked va c at trong hang i

    semaphore

    Hang i nay la danh sach lien ket cac PCB

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

    chon mot process t hang i va a vao hang

    i ready

    block() va wakeup() thay oi trang thai cua

    process

    block: chuyen t running sang waiting

    wakeup: chuyen t waiting sang ready

  • 39Khoa KTMT

    V du s dung semaphore 1 : Hien thc mutex vi semaphore

    Dung cho n process

    Khi tao S.value = 1

    Ch duy nhat mot

    process c vao CS

    (mutual exclusion)

    e cho phep k process

    vao CS, khi tao

    S.value = k

    Shared data:

    semaphore mutex;

    /* initially mutex.value = 1 */

    Process Pi:

    do {

    wait(mutex);

    critical section

    signal(mutex);

    remainder section

    } while (1);

  • 40Khoa KTMT

    V du s dung semaphore 2 :ong bo process bang semaphore

    Hai process: P1 va P2

    Yeu cau: lenh S1 trong

    P1 can c thc thi

    trc lenh S2 trong P2

    nh ngha semaphore

    synch e ong bo

    Khi ong semaphore:

    synch.value = 0

    e ong bo hoat ong

    theo yeu cau, P1 phai

    nh ngha nh sau:

    S1;

    signal(synch);

    Va P2 nh ngha nh sau:

    wait(synch);

    S2;

  • 41Khoa KTMT

    semanphore

    Xet hai tien trnh x ly oan chng

    trnh sau :

    process P1 { A1 ; A2 }

    process P2 { B1 ; B2 }

    ong bo hoa hoat ong cua hai tien

    trnh nay sao cho ca A1 va B1 eu

    hoan tat trc khi A2 hay B2 bat

    au .

  • 42Khoa KTMT

    Nhan xet

    Khi S.value 0: so process co the thc thi wait(S) ma

    khong b blocked = S.value

    Khi S.value < 0: so process ang i tren S la

    S.value

    Atomic va mutual exclusion: khong c xay ra trng

    hp 2 process cung ang trong than lenh wait(S) va

    signal(S) (cung semaphore S) tai mot thi iem (ngay

    ca vi he thong multiprocessor)

    do o, oan ma nh ngha cac lenh wait(S) va

    signal(S) cung chnh la vung tranh chap

  • 43Khoa KTMT

    Nhan xet (tt)

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

    thong thng rat nho: khoang 10 lenh.

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

    Uniprocessor: co the dung c che cam ngat (disable interrupt). Nhng phng phap nay khong lam viec tren he

    thong multiprocessor.

    Multiprocessor: co the dung cac giai phap software (nh giai thuat Dekker, Peterson) hoac giai phap hardware

    (TestAndSet, Swap).

    V CS rat nho nen chi ph cho busy waiting se rat thap.

  • 44Khoa KTMT

    Deadlock va starvation

    Deadlock: hai hay nhieu process ang ch i vo han nh mot s

    kien khong bao gi xay ra (vd: s kien do mot trong cac process

    ang i tao ra).

    Goi S va Q la hai bien 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), roi P1 thc thi wait(Q), roi P0 thc thi wait(Q) b

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

    Starvation (indefinite blocking) Mot tien trnh co the khong bao gi

    c lay ra khoi hang i ma no b treo trong hang i o.

  • 45Khoa KTMT

    Cac loai semaphore

    Counting semaphore: mot so nguyen co gia tr

    khong han che.

    Binary semaphore: co tr la 0 hay 1. Binary

    semaphore rat de hien thc.

    Co the hien thc counting semaphore bang

    binary semaphore.

  • 46Khoa KTMT

    Cac bai toan ong bo (kinh ien)

    Bounded Buffer Problem

    Readers and Writers Problem

    Dining-Philosophers Problem

  • 47Khoa KTMT

    Cac bai toan ong bo

    Bai toan bounded buffer

    D lieu chia se:

    semaphore full, empty, mutex;

    Khi tao:

    full = 0; /* so buffers ay */

    empty = n; /* so buffers trong */

    mutex = 1;

    out

    n buffers

  • 48Khoa KTMT

    Bounded buffer

    do {

    wait(full)

    wait(mutex);//2

    nextc = get_buffer_item(out);

    signal(mutex);//4

    signal(empty);

    consume_item(nextc);

    } while (1);

    do {

    nextp = new_item();

    wait(empty);

    wait(mutex);//1

    insert_to_buffer(nextp);

    signal(mutex);//3

    signal(full);

    } while (1);

    producer consumer

  • 49Khoa KTMT

    Bai toan Dining Philosophers (1)

    5 triet gia ngoi an va suy

    ngh

    Moi ngi can 2 chiec

    ua (chopstick) e an

    Tren ban ch co 5 ua

    Bai toan nay minh hoa s

    kho khan trong viec phan

    phoi tai nguyen gia cac

    process sao cho khong

    xay ra deadlock va

    starvation

    D lieu chia se:

    semaphore chopstick[5];

    Khi au cac bien eu la 1

    0

    1

    23

    4 0 1

    4 2

    3

  • 50Khoa KTMT

    Bai toan Dining Philosophers (2)

    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);

  • 51Khoa KTMT

    Bai toan Dining Philosophers (3)

    Giai phap tren co the gay ra deadlock

    Khi tat ca triet gia oi bung cung luc va ong thi cam chiec ua ben tay trai deadlock

    Mot so giai phap khac giai quyet c deadlock

    Cho phep nhieu nhat 4 triet gia ngoi vao cung mot luc

    Cho phep triet gia cam cac ua ch khi ca hai chiec ua eu san sang (ngha la tac vu cam cac ua phai

    xay ra trong CS)

    Triet gia ngoi v tr le cam ua ben trai trc, sau o mi en ua ben phai, trong khi o triet gia v tr

    chan cam ua ben phai trc, sau o mi en ua

    ben trai

    Starvation?

  • 52Khoa KTMT

    Bai toan Readers-Writers (1)

    Readers - Writers

    W khng c cp nht d liu khi c

    mt R ang truy xut CSDL .

    Ti mt thi im , ch cho php mt W c

    sa i ni dung CSDL.

    Database

    R1

    R2R3

    W1 W2

  • 53Khoa KTMT

    Bai toan Readers-Writers (2)

    Bo oc trc bo ghi (first

    reader-writer)

    D lieu chia se

    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);

  • 54Khoa KTMT

    Bai toan Readers-Writers (3)

    mutex: bao ve bien readcount

    wrt

    Bao am mutual exclusion oi vi cac writer

    c s dung bi reader au tien hoac cuoi cung vao hay ra khoi vung tranh chap.

    Neu mot writer ang trong CS va co n reader

    ang i th mot reader c xep trong hang

    i cua wrt va n 1 reader kia trong hang i

    cua mutex

    Khi writer thc thi signal(wrt), he thong co the

    phuc hoi thc thi cua mot trong cac reader ang

    i hoac writer ang i.

  • 55Khoa KTMT

    Cac van e vi semaphore

    Semaphore cung cap mot cong cu manh me e bao

    am mutual exclusion va phoi hp ong bo cac process

    Tuy nhien, neu cac tac vu wait(S) va signal(S) nam rai

    rac rat nhieu processes kho nam bat c hieu ng

    cua cac tac vu nay. Neu khong s dung ung co the

    xay ra tnh trang deadlock hoac starvation.

    Mot process b die co the keo theo cac process khac

    cung s dung bien semaphore.

    signal(mutex)

    critical section

    wait(mutex)

    wait(mutex)

    critical section

    wait(mutex)

    signal(mutex)

    critical section

    signal(mutex)

  • 56Khoa KTMT

    Critical Region (CR)

    La mot cau truc ngon ng cap cao (high-level language construct,

    c dch sang ma may bi mot compiler), thuan tien hn cho ngi

    lap trnh.

    Mot bien chia se v kieu d lieu T, khai bao nh sau

    v: shared T;

    Bien chia se v ch co the c truy xuat qua phat bieu sau

    region v when B do S; /* B la mot bieu thc Boolean */

    Y ngha: trong khi S c thc thi, khong co qua trnh khac co the

    truy xuat bien v.

  • 57Khoa KTMT

    CR va bai toan bounded buffer

    D liu chia s:

    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

  • 58Khoa KTMT

    Monitor (1)

    Cung la mot cau truc ngon ng cap cao tng t CR, co

    chc nang nh semaphore nhng de ieu khien hn

    Xuat hien trong nhieu ngon ng lap trnh ong thi nh

    Concurrent Pascal, Modula-3, Java,

    Co the hien thc bang semaphore

  • 59Khoa KTMT

    Monitor (2)

    La mot module phan

    mem, bao gom

    Mot hoac nhieu thu tuc(procedure)

    Mot oan code khi tao(initialization code)

    Cac bien d lieu cuc bo(local data variable)

    ac tnh cua monitor

    Local variable ch co the truy xuat bi cac thu tuc

    cua monitor

    Process vao monitor bang cach goi mot trong cac thu

    tuc o

    Ch co mot process co the vao monitor tai mot thi

    iem mutual exclusion

    c bao amshared data

    entry queue

    operations

    initializationcode

    Mo hnh cua mot monitor

    n gian

  • 60Khoa KTMT

    Cau truc cua monitor

    monitor monitor-name{

    shared variable declarationsprocedure body P1 () {

    . . .}procedure body P2 () {

    . . .} procedure body Pn () {

    . . .} {

    initialization code}

    }

  • 61Khoa KTMT

    Condition variable

    Nham cho phep mot process i trong monitor, phai khai bao bien ieu kien (condition variable)

    condition a, b;

    Cac bien ieu kien eu cuc bo va ch c truy cap ben

    trong monitor.

    Ch co the thao tac len bien ieu kien bang hai thu tuc:

    a.wait: process goi tac vu nay se b block tren bien ieu kien a

    process nay ch co the tiep tuc thc thi khi co process khac thc hien tac vu a.signal

    a.signal: phuc hoi qua trnh thc thi cua process b block tren bien ieu kien a.

    Neu co nhieu process: ch chon mot

    Neu khong co process: khong co tac dung

  • 62Khoa KTMT

    Monitor co condition variable

    Cac process co the i entry queue hoac i cac condition

    queue (a, b,)

    Khi thc hien lenh a.wait, process se c chuyen vao

    condition queue a

    Lenh a.signal chuyen mot process t condition queue a

    vao monitor

    Khi o, e bao am mutual

    exclusion, process goi a.signal

    se b blocked va c a vao

    urgent queue

    entry queueshared data

    ...

    operations

    initializationcode

    a

    b

  • 63Khoa KTMT

    Monitor co condition variable (tt)

    local data

    condition variables

    procedure 1

    procedure k

    initialization code

    ...

    monitor waiting area entranceentry queue

    c1.wait

    condition c1

    condition cn

    cn.wait

    urgent queue

    cx.signal

    ...MONITOR

    exit

  • 64Khoa KTMT

    Monitor va dining philosophers

    monitor dp

    {

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

    condition self[5];

    0

    1

    23

    4

  • 65Khoa KTMT

    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

    }

  • 66Khoa KTMT

    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;

    }

    }

  • 67Khoa KTMT

    Dining philosophers (tt)

    Trc khi an, moi triet gia phai goi ham pickup(), an

    xong roi th phai goi ham putdown()

    dp.pickup(i);

    an

    dp.putdown(i);

    Giai thuat khong deadlock nhng co the gay

    starvation.

  • 68Khoa KTMT

    Bi Tp

    Xet giai phap ong bo hoa sau :

    Pi

    while (TRUE) {

    int j = 1-i;

    flag[i]= TRUE; turn = j;

    while (turn == j && flag[j]==TRUE);

    critical-section ();

    flag[j] = FALSE;

    Noncritical-section ();

    }

    ay co phai la mot giai phap bao am 3 iu kin khong ?

  • 69Khoa KTMT

    Bi tp

    Xet giai phap phan mem do Dekker e ngh e to chc truy xat oc quyen

    cho hai tien trnh . Hai tien trnh P0, P1 chia se cac bien sau :

    var flag : array [0..1] of boolean; (khi ong la false)

    turn : 0..1;

    Cau truc mot tien trnh Pi ( i =0 hay 1, va j la tien trnh con lai ) nh

    sau :

    repeat

    flag[i] := true;

    while flag[j] do

    if turn = j then

    begin flag[i]:= false;

    while turn = j do ;

    flag[i]:= true;

    end;

    critical_section();

    turn:= j;

    flag[i]:= false;

    non_critical_section();

    until false;

    Giai phap nay co phai la mot giai phap ung thoa man 4 yeu cau

    khong ?

  • 70Khoa KTMT

    Bi tp

    Gia s mot may tnh khong co ch th TSL, nhng co ch th Swap co kha nang

    hoan oi noi dung cua hai t nh ch bang mot thao tac khong the phan

    chia :

    procedure Swap() var a,b: boolean);

    var temp : boolean;

    begin

    temp := a;

    a:= b;

    b:= temp;

    end;

    S dung ch th nay co the to chc truy xuat oc quyen khong ? Neu co, xay

    dng cau truc chng trnh tng ng

  • 71Khoa KTMT

    Bi tp semanphore

    Xet hai tien trnh x ly oan chng trnh sau :

    process P1 { A1 ; A2 } process P2 { B1 ; B2 }

    ong bo hoa hoat ong cua hai tien trnh nay sao cho ca A1 va

    B1 eu hoan tat trc khi A2 hay B2 bat au .

  • 72Khoa KTMT

    Bi tp semanphore

    S dng semaphore vit li chng trnh sau theo m hnh x l

    ng hnh:

    A = x1 + x2; B = A*x3; C= A + x4; D= B + C; E = D*x5 + C;

    Gi s c 5 process mi process s thc hin 1 biu thc.

  • 73Khoa KTMT

    Bi tp semanphore

    Xet hai tien trnh sau :

    process A { while (TRUE) na = na +1; }

    process B { while (TRUE) nb = nb +1; }

    ong bo hoa x ly cua hai tien trnh tren, s dung hai semaphore tong quat, sao cho tai bat ky thi iem nao cung co

    nb < na

  • 74Khoa KTMT

    Bi tp semanphore

    Mot bien X c chia se bi hai tien trnh cung thc hien oan

    code sau :

    do

    X = X +1;

    if ( X == 20) X = 0;

    while ( TRUE );

    Bat au vi gia tr X = 0, chng to rang gia tr X co the vt qua

    20. Can sa cha oan chng trnh tren nh the nao e bao

    am X khong vt qua 20 ?

  • 75Khoa KTMT

    Bi tp semanphore

    Tong quat hoa cau hoi 8) cho cac tien trnh x ly oan chng

    trnh sau :

    process P1 { for ( i = 1; i

  • 76Khoa KTMT

    1. Trng value trong cu trc semanphore dng th hin tnh cht g:

    S process b kha

    S process c nh thc

    S process c th ng thi truy xut ti nguyn

    C 3 cu trn iu sai.

  • 77Khoa KTMT

    2. Trong gii php Sleep & Wakeup th ngha ca thng s Busy l:

    S process b kha

    S process c nh thc

    S process c th ng thi truy xut ti nguyn

    C 3 cu trn iu sai.

  • 78Khoa KTMT

    Thi gian ch di nht ca 1 process nu dng k thut

    semanphore cho n process:

    Khng ch

    Ch 1 ln process thc thi

    Ch N-1 process thc thi

    Ch N process thc thi

  • 79Khoa KTMT

    Trong cc gii php sau, gii php no khng s dng c trn

    h thng multiprocessor:

    Dekker

    Peterson

    C ch cm ngt (disable interrupt)

    TestandSet