Phm Th Phi ©2004 5.1 H điu hành Chng 5: ng b hóa tin trình ̈ C s ̈ Bài toán min tng trc ̈ ng b hóa bng phn cng ̈ Semaphores ̈ Các bài toán c đin v đng b hóa ̈ Monitors ̈ ng b hóa trong Solaris và Windows 2000 Phm Th Phi ©2004 5.2 H điu hành C s ̈ Truy cp cnh tranh lên d liu đc chia s có th gây nên tình trng không nht quán d liu. ̈ Vic duy trì s nht quán d liu yêu cu các c ch đ đm bo s thc thi mt cách có th t ca các tin trình có hp tác vi nhau. ̈ Ví d? Phm Th Phi ©2004 5.3 H điu hành Tình trng đua tranh ̈ Tình trng đua tranh:làtình trng mà vài tin trình cùng truy cp và thay đi lên d liu đc chia s.Giátr cui cùng ca d liu chia s ph thuc vào tin trình nào hoàn thành cui cùng. ̈ ngn chn tình trng đua tranh, các tin trình đua tranh phi đc đng b hóa. Phm Th Phi ©2004 5.4 H điu hành Vn đ min tng trc ̈ Tt c n tin trình đang cnh tranh đ s dng d liu chia s. ̈ Mi tin trình có mt đon mã lnh, gi là min tng trc, mà trong đócóhành đng truy cp d liu đc chia s. ̈ Vn đ – đm bo rng khi mt tin trình đang chy trong min tng trc, không có mt tin trình nào khác đc cho phép chy trong min tng trc ca mình. Phm Th Phi ©2004 5.5 H điu hành Gii pháp cho vn đ min tng trc 1. Loi tr h tng.Nu tin trình P i đang thc thi trong min tng trc, thì không có tin trình nào khác có th thc thi trong min tng trc ca mình. 2. Tin trin.Nu không có tin trình nào đang thc thi trong min tng trc ca nó và có tn ti vài tin trình đang mong mun đc thc thi trong min tng trc ca chúng, thì vic la chn cho mt tin trình bc vào min tng trc ca nó không th b trì hoãn mãi đc. 3. Ch đi hu hn. Không có tin trình nào phi ch đi vnh vin đ có th bc vào min tng trc ca nó Phm Th Phi ©2004 5.6 H điu hành Nhng c gng đu tiên đ gii quyt bài toán min tng trc ̈ Ch có 2 tin trình, P 0 và P 1 ̈ Cu trúc tng quát ca tin trình P i (tin trình kia là P 1-j ) do { entry section critical section exit section reminder section } while (1); ̈ Các tin trình có th chia s mt s bin chung đ đng b hóa hành đng ca chúng. Phm Th Phi ©2004 5.7 H điu hành Gii thut1 ̈ Các bin chung: H int turn; khi đu turn = 0 H turn = i ⇒ P i có th bc vào min tng trc ca nó ̈ Tin trình P i do { while (turn != i) ; critical section turn = j; reminder section } while (1); ̈ Gii pháp này thõa mãn yêu cu v loi tr h tng nhng không tin trin đc. Phm Th Phi ©2004 5.8 H điu hành Gii thut2 ̈ Các bin chia s H boolean flag[2]; khi đu flag [0] = flag [1] = false. H flag [i] = true ⇒ P i sn sàng bc vào min tng trc ca nó ̈ Tin trình P i do { flag[i] := true; while (flag[j]) ; critical section flag [i] = false; remainder section } while (1); ̈ Thõa mãn yêu cu loi tr h tng, nhng không tin trin Phm Th Phi ©2004 5.9 H điu hành Gii thut3 ̈ Kt hp các bin chia s đc s dng trong các gii thut 1 và 2. ̈ Tin trình P i do { flag [i]:= true; turn = j; while (flag [j] and turn = j) ; critical section flag [i] = false; remainder section } while (1); ̈ Thõa mãn c 3 điu kin Phm Th Phi ©2004 5.10 H điu hành Gii thut Bakery ̈ Trc khi bc vào min tng trc ca mình, tin trình nhn đc mt con s. Tin trình nào nhn đc con s nh nht s có quyn bc vào min tng trc. ̈ If tin trình P i và P j nhn đc cùng mt s, và nu i<j,thìP i đc phc v trc; ngc li P j đc phc v trc. ̈ B sinh luôn luôn sinh ra các con s theo th t tng; ví d 1,2,3,3,3,3,4,5 Min tng trc cho n tin trình Phm Th Phi ©2004 5.11 H điu hành Gii thut Bakery ̈ Chú thích < dùng đ so sánh các cp (ticket #, process id #) H (a,b) < c,d) if a < c or if a = c and b < d H max (a 0 ,…, a n-1 )làs k, sao cho k ≥ a i for i =0, …, n –1 ̈ D liu chia s boolean choosing[n]; int number[n]; Các d liu trên đc khi to tng ng là false và 0 Phm Th Phi ©2004 5.12 H điu hành Gii thut Bakery do { choosing[i] = true; number[i] = max(number[0], number[1], …, number [n – 1])+1; choosing[i] = false; for (j = 0; j < n; j++) { while (choosing[j]) ; while ((number[j] != 0) && ((number[j],j) < (number[i],i)) ; } critical section number[i] = 0; remainder section } while (1); Phm Th Phi ©2004 5.13 H điu hành ng b hóa vi s tr giúp ca phn cng ̈ c và sa đi ni dung ca mt word mt cách t đng boolean TestAndSet(boolean &target) { boolean rv = target; target = true; return rv; } Phm Th Phi ©2004 5.14 H điu hành Loi tr tng h vi Test-and-Set ̈ D liu đc chia s: boolean lock = false; ̈ Tin trình P i do { while (TestAndSet(lock)) ; critical section lock = false; remainder section } Phm Th Phi ©2004 5.15 H điu hành Loi tr tng h vi s tr giúp ca phn cng ̈ T đng swap hai bin void Swap(boolean &a, boolean &b) { boolean temp = a; a = b; b = temp; } Phm Th Phi ©2004 5.16 H điu hành Loi tr tng h viSwap ̈ D liu chia s (khi to là false): boolean lock; boolean waiting[n]; ̈ Tin trình P i do { key = true; while (key == true) Swap(lock,key); critical section lock = false; remainder section } Phm Th Phi ©2004 5.17 H điu hành Semaphores ̈ Công c dùng đ đng b hóa không gây ra tình trng ch đi bn. ̈ Semaphore S –bin integer ̈ Ch có th đc truy cp thông qua hai thao tác nguyên t (không th chia nh đc na): wait (S): while S≤ 0 do no-op; S ; signal (S): S++; Phm Th Phi ©2004 5.18 H điu hành Min tng trc ca n tin trình ̈ D liu chia s: semaphore mutex; //khi đu mutex = 1 ̈ Tin trình Pi: do { wait(mutex); critical section signal(mutex); remainder section } while (1); Phm Th Phi ©2004 5.19 H điu hành Cài đt Semaphore ̈ nh ngha mt semaphore nh là mt record typedef struct { int value; struct process *L; } semaphore; ̈ Gi s ta đã có hai thao tác: H block – ngng tm thi tin trình gi thao tác này. H wakeup(P) khi đng li tin trình đã b blocked P. Phm Th Phi ©2004 5.20 H điu hành Cài đt ̈ Các thao tác trên Semaphore bây gi đc đnh ngha nh sau: wait(S): S.value ; if (S.value < 0) { add this process to S.L; block; } signal(S): S.value++; if (S.value <= 0) { remove a process P from S.L; wakeup(P); } Phm Th Phi ©2004 5.21 H điu hành Semaphore nh là công c đng b hóa tng quát ̈ Thc thi B trong P j ch sau khi A đã đc thc thi trong P i ̈ S dng semaphore flag khi to vi giá tr 0 ̈ Code: P i P j MM Await(flag) signal(flag) B Phm Th Phi ©2004 5.22 H điu hành Deadlock và cht đói ̈ Deadlock – hai hoc nhiu tin trình đang ch đi vô hn mt s kin nào đó, mà s kin đóch có th đc to ra bi mt trong các tin trình đang ch đi kia. ̈ Xem S và Q là 2 semaphores đc khi to là 1 P 0 P 1 wait(S); wait(Q); wait(Q); wait(S); MM signal(S); signal(Q); signal(Q) signal(S); ̈ S cht đói – b nghn (block) không hn đnh. Mt tin trình có th không bao gi đc xóa khi hàng đi trong semaphore. Phm Th Phi ©2004 5.23 H điu hành Có hai kiu semaphore ̈ Semaphore tng dn– giá tr integer có th tri qua nhiu min giá tr. ̈ Semaphore nh phân – giá tr integer ch nhn mt trong hai giá tr 0và1;cóth cài đt đn gin hn. ̈ Có th coi semephore nh phân là trng hp đc bit ca semaphore tng dn. Phm Th Phi ©2004 5.24 H điu hành Các bài toán đng b hóa c đin ̈ Bài toán ngi sn xut-ngi tiêu dùng (Bounded-Buffer hay Producer-Customer) ̈ Bài toán Readers and Writers ̈ Bài toán “5 nhà trit gia n ti” (Dining-Philosophers) Phm Th Phi ©2004 5.25 H điu hành Bounded-Buffer ̈ D liu chia s semaphore full, empty, mutex; Khi to: full = 0, empty = n, mutex = 1 Phm Th Phi ©2004 5.26 H điu hành Bounded-Buffer – tin trình Producer do { … produce an item in nextp … wait(empty); wait(mutex); … add nextp to buffer … signal(mutex); signal(full); } while (1); Phm Th Phi ©2004 5.27 H điu hành Bounded-Buffer – Tin trình Consumer do { wait(full) wait(mutex); … remove an item from buffer to nextc … signal(mutex); signal(empty); … consume the item in nextc … } while (1); Phm Th Phi ©2004 5.28 H điu hành Bài toán Readers-Writers ̈ D liu chia s semaphore mutex, wrt; Khi to mutex = 1, wrt = 1, readcount = 0 Phm Th Phi ©2004 5.29 H điu hành Readers-Writers – Tin trình Writer wait(wrt); … writing is performed … signal(wrt); Phm Th Phi ©2004 5.30 H điu hành Readers-Writers – Tin trình Reader wait(mutex); readcount++; if (readcount == 1) wait(wrt); signal(mutex); … reading is performed … wait(mutex); readcount ; if (readcount == 0) signal(wrt); signal(mutex): Phm Th Phi ©2004 5.31 H điu hành Bài toán nm nhà trit gia n ti ̈ D liu chia s semaphore chopstick[5]; Khi đu, các giá tr là 1 Phm Th Phi ©2004 5.32 H điu hành Bài toán nm nhà trit gia n ti ̈ Philosopher i: do { wait(chopstick[i]) wait(chopstick[(i+1) % 5]) … eat … signal(chopstick[i]); signal(chopstick[(i+1) % 5]); … think … } while (1); Phm Th Phi ©2004 5.33 H điu hành Monitors ̈ Cu trúc dùng đ đng b hóa đc cài đt ngôn ng cp cao, nó cho phép chia s an toàn mt kiu d liu tru tng nào đógia nhiu tin trình cnh tranh. monitor monitor-name { shared variable declarations procedure body P1 (…) { . . . } procedure body P2 (…) { . . . } procedure body Pn (…) { . . . } { initialization code } } Phm Th Phi ©2004 5.34 H điu hành Monitors ̈ cho phép mt tin trình ch đi trong monitor, mt bin điu kin phi đc khai báo nh sau: condition x, y; ̈ Bin điu kin ch có th đc s dng vi hai thao tác wait và signal. H Thao tác x.wait(); có ngha là tin trình đang gi thao tác này đang ng cho đn khi mt tin trình khác gi x.signal(); H Thao tác x.signal khi đng li chính xác mt tin trình đang ng đ ch đi trên bin x. Nu không có tin trình nào đang ng trên x, thì thao tác signal không gây nh hng gì c. Phm Th Phi ©2004 5.35 H điu hành Cái nhìn mt cách có s đ v Monitor Phm Th Phi ©2004 5.36 H điu hành Monitor vi các bin điu kin Phm Th Phi ©2004 5.37 H điu hành Ví d v cài đt bài toán 5 nhà trit gia n ti trên monitor monitor dp { enum {thinking, hungry, eating} state[5]; condition self[5]; void pickup(int i) // các slide k tip void putdown(int i) // các slide k tip void test(int i) // các slide k tip void init() { for (int i = 0; i < 5; i++) state[i] = thinking; } } Phm Th Phi ©2004 5.38 H điu hành Các nhà trit gia n ti 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); test((i+1) % 5); } Phm Th Phi ©2004 5.39 H điu hành 5 nhà trit gia n ti void test(int i) { if ( (state[(i + 4) % 5] != eating) && (state[i] == hungry) && (state[(i + 1) % 5] != eating)) { state[i] = eating; self[i].signal(); } } . hành Chng 5: ng b hóa tin trình ̈ C s ̈ Bài toán min tng trc ̈ ng b hóa bng phn cng ̈ Semaphores ̈ Các bài toán c đin v đng b hóa ̈ Monitors ̈. s ph thuc vào tin trình nào hoàn thành cui cùng. ̈ ngn chn tình trng đua tranh, các tin trình đua tranh phi đc đng b hóa. Phm Th Phi ©2004 5.4 H