Upload
lam-thanh-tai
View
256
Download
10
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