Ch07 Synchronization
Ch07 Synchronization
Chng 7
-1-
Noi dung
Khai niem c ban 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
2
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. V du: bounded buffer (ch. 4), them bien em count
#define BUFFER_SIZE 10 /* 10 buffers */ typedef struct { . . . } item; item buffer[BUFFER_SIZE]; int in = 0, out = 0, count = 0;
3
item nextConsumed; while(1) { while (count == 0); /* do nothing */ nextConsumed = buffer[out] ; count--; out = (out + 1) % BUFFER_SIZE; }
4
(Producer)
count++:
(Consumer)
count--:
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: 1: 2: 3: 4: 5:
register1 := count register1 := register1 + 1 register2 := count register2 := register2 - 1 count := register1 count := register2
Ca hai process thao tac ong thi len bien chung count. Tr cua bien chung nay khong nhat quan di cac thao tac cua hai process. Giai phap: cac lenh count++, count-- phai la n nguyen (atomic), ngha la thc hien nh mot lenh n, khong b ngat na chng.
6
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.
} while(1);
9
(3) 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).
10
12
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
13
V du: P0 co RS (remainder section) rat ln con P1 co RS nho. Neu turn = 0, P0 c vao CS va sau o thc thi turn = 1 va vao vung RS. Luc o P1 vao CS va sau o thc thi turn = 0, ke o P1 vao va xong RS, va i vao CS mot lan na, nhng v turn = 0 nen P1 phai ch P0.
14
Giai thuat 2
Bien chia se Process Pi do {
boolean flag[ 2 ]; /* khi au flag[ 0 ] = flag[ 1 ] = false */ Neu flag[ i ] = true th Pi san sang vao critical section.
flag[ i ] = true; /* Pi san sang vao CS */ */ while ( flag[ j ] ); /* Pi nhng Pj critical section flag[ i ] = false; remainder section } while (1); Bao am c mutual exclusion. Chng minh? Khong thoa man progress. V sao? Trng hp sau co the xay ra:
P0 gan flag[ 0 ] = true P1 gan flag[ 1 ] = true P0 va P1 loop mai mai trong vong lap while
15
Process P1 do {
/* 1 wants in */
flag[0] = true;
/* 0 gives a chance to 1 */
flag[1] = true;
/* 1 gives a chance to 0 */
17
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)
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,,ak) la con so b sao cho b ai vi moi i = 0,, k
20
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);
21
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.
22
Cam ngat
Trong he thong uniprocessor: mutual exclusion c bao am.
Nhng neu system clock c cap nhat do interrupt th
Process Pi: do { disable_interrupts(); critical section enable_interrupts(); remainder section } while (1);
23
M rong
thiet ke mot lenh may co the thc hien hai thao tac chap (atomic, indivisible) tren cung mot o nh (vd: read va write) Viec thc thi cac lenh may nh tren luon bao am mutual exclusive (ngay ca vi he thong multiprocessor)
Cac lenh may ac biet co the am bao mutual exclusion tuy nhien cung can ket hp vi mot so c che khac e thoa man hai yeu cau con lai la progress va bounded waiting cung nh tranh tnh trang starvation va deadlock.
24
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);
25
26
Bien chia se (khi tao la false) bool lock; bool waiting [n]; Process Pi do { key = true; while (key == true) Swap(lock, key); critical section lock = false; remainder section } while (1)
Khong thoa man bounded waiting
27
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;
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;
Progress: chng minh tng t nh mutual exclusion Bounded waiting: waiting in the cyclic order
28
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 exclusive)
wait(S) hay con goi la P(S): giam gia tr semaphore. 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. 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.
30
/* process queue */
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
33
Va P2 nh ngha nh sau:
wait(synch); S2;
35
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
36
37
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 wait(S); wait(Q); M signal(S); signal(Q); P1 wait(Q); wait(S); M 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) co the xay ra khi process vao hang i va c lay ra theo c che LIFO.
38
39
Bounded buffer
producer
do { nextp = new_item(); wait(empty); wait(mutex); insert_to_buffer(nextp); signal(mutex); signal(full); } while (1);
consumer
do { wait(full) wait(mutex); nextc = get_buffer_item(out); signal(mutex); signal(empty); consume_item(nextc); } while (1);
41
(2)
43
(3)
Khi tat ca triet gia oi bung cung luc va ong thi cam chiec ua ben tay trai deadlock
Starvation?
44
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.
46
Y ngha: trong khi S c thc thi, khong co qua trnh khac co the truy xuat bien v. Khi mot process muon thc thi cac lenh trong region (tc la S), bieu thc Boolean B c kiem tra. Neu B = true, lenh S c thc thi. Neu B = false, process b tr hoan cho en khi B = true.
48
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,
50
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)
shared data
entry queue
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
53
entry queue
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
54
entrance
MONITOR
local data condition c1 c1.wait condition variables procedure 1
...
...
4 0
59