chapter05 2 process synchronization
DESCRIPTION
Đồng bộ ProcessTRANSCRIPT
-
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