1. Trang chủ
  2. » Công Nghệ Thông Tin

Chương 5: Đồng bộ hóa tiến trình pptx

10 998 10

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 284,87 KB

Nội dung

Phm Th Phi ©2004 5.1 H điu hành Chng 5: ng b hóa tin trình ̈ C s ̈ Bài toán min tng trc ̈ ng b hóa bng phn cng ̈ Semaphores ̈ Các bài toán c đin v đng b hóa ̈ Monitors ̈ ng b hóa trong Solaris và Windows 2000 Phm Th Phi ©2004 5.2 H điu hành C s ̈ Truy cp cnh tranh lên d liu đc chia s có th gây nên tình trng không nht quán d liu. ̈ Vic duy trì s nht quán d liu yêu cu các c ch đ đm bo s thc thi mt cách có th t ca các tin trình có hp tác vi nhau. ̈ Ví d? Phm Th Phi ©2004 5.3 H điu hành Tình trng đua tranh ̈ Tình trng đua tranh:làtình trng mà vài tin trình cùng truy cp và thay đi lên d liu đc chia s.Giátr cui cùng ca d liu chia s ph thuc vào tin trình nào hoàn thành cui cùng. ̈  ngn chn tình trng đua tranh, các tin trình đua tranh phi đc đng b hóa. Phm Th Phi ©2004 5.4 H điu hành Vn đ min tng trc ̈ Tt c n tin trình đang cnh tranh đ s dng d liu chia s. ̈ Mi tin trình có mt đon mã lnh, gi là min tng trc, mà trong đócóhành đng truy cp d liu đc chia s. ̈ Vn đ – đm bo rng khi mt tin trình đang chy trong min tng trc, không có mt tin trình nào khác đc cho phép chy trong min tng trc ca mình. Phm Th Phi ©2004 5.5 H điu hành Gii pháp cho vn đ min tng trc 1. Loi tr h tng.Nu tin trình P i đang thc thi trong min tng trc, thì không có tin trình nào khác có th thc thi trong min tng trc ca mình. 2. Tin trin.Nu không có tin trình nào đang thc thi trong min tng trc ca nó và có tn ti vài tin trình đang mong mun đc thc thi trong min tng trc ca chúng, thì vic la chn cho mt tin trình bc vào min tng trc ca nó không th b trì hoãn mãi đc. 3. Ch đi hu hn. Không có tin trình nào phi ch đi vnh vin đ có th bc vào min tng trc ca nó Phm Th Phi ©2004 5.6 H điu hành Nhng c gng đu tiên đ gii quyt bài toán min tng trc ̈ Ch có 2 tin trình, P 0 và P 1 ̈ Cu trúc tng quát ca tin trình P i (tin trình kia là P 1-j ) do { entry section critical section exit section reminder section } while (1); ̈ Các tin trình có th chia s mt s bin chung đ đng b hóa hành đng ca chúng. Phm Th Phi ©2004 5.7 H điu hành Gii thut1 ̈ Các bin chung: H int turn; khi đu turn = 0 H turn = i ⇒ P i có th bc vào min tng trc ca nó ̈ Tin trình P i do { while (turn != i) ; critical section turn = j; reminder section } while (1); ̈ Gii pháp này thõa mãn yêu cu v loi tr h tng nhng không tin trin đc. Phm Th Phi ©2004 5.8 H điu hành Gii thut2 ̈ Các bin chia s H boolean flag[2]; khi đu flag [0] = flag [1] = false. H flag [i] = true ⇒ P i sn sàng bc vào min tng trc ca nó ̈ Tin 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 cu loi tr h tng, nhng không tin trin Phm Th Phi ©2004 5.9 H điu hành Gii thut3 ̈ Kt hp các bin chia s đc s dng trong các gii thut 1 và 2. ̈ Tin 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 điu kin Phm Th Phi ©2004 5.10 H điu hành Gii thut Bakery ̈ Trc khi bc vào min tng trc ca mình, tin trình nhn đc mt con s. Tin trình nào nhn đc con s nh nht s có quyn bc vào min tng trc. ̈ If tin trình P i và P j nhn đc cùng mt s, và nu i<j,thìP i đc phc v trc; ngc li P j đc phc v trc. ̈ B sinh luôn luôn sinh ra các con s theo th t tng; ví d 1,2,3,3,3,3,4,5 Min tng trc cho n tin trình Phm Th Phi ©2004 5.11 H điu hành Gii thut Bakery ̈ Chú thích < dùng đ so sánh các cp (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 liu chia s boolean choosing[n]; int number[n]; Các d liu trên đc khi to tng ng là false và 0 Phm Th Phi ©2004 5.12 H điu hành Gii thut 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); Phm Th Phi ©2004 5.13 H điu hành ng b hóa vi s tr giúp ca phn cng ̈ c và sa đi ni dung ca mt word mt cách t đng boolean TestAndSet(boolean &target) { boolean rv = target; target = true; return rv; } Phm Th Phi ©2004 5.14 H điu hành Loi tr tng h vi Test-and-Set ̈ D liu đc chia s: boolean lock = false; ̈ Tin trình P i do { while (TestAndSet(lock)) ; critical section lock = false; remainder section } Phm Th Phi ©2004 5.15 H điu hành Loi tr tng h vi s tr giúp ca phn cng ̈ T đng swap hai bin void Swap(boolean &a, boolean &b) { boolean temp = a; a = b; b = temp; } Phm Th Phi ©2004 5.16 H điu hành Loi tr tng h viSwap ̈ D liu chia s (khi to là false): boolean lock; boolean waiting[n]; ̈ Tin trình P i do { key = true; while (key == true) Swap(lock,key); critical section lock = false; remainder section } Phm Th Phi ©2004 5.17 H điu hành Semaphores ̈ Công c dùng đ đng b hóa không gây ra tình trng ch đi bn. ̈ Semaphore S –bin integer ̈ Ch có th đc truy cp thông qua hai thao tác nguyên t (không th chia nh đc na): wait (S): while S≤ 0 do no-op; S ; signal (S): S++; Phm Th Phi ©2004 5.18 H điu hành Min tng trc ca n tin trình ̈ D liu chia s: semaphore mutex; //khi đu mutex = 1 ̈ Tin trình Pi: do { wait(mutex); critical section signal(mutex); remainder section } while (1); Phm Th Phi ©2004 5.19 H điu hành Cài đt Semaphore ̈ nh ngha mt semaphore nh là mt record typedef struct { int value; struct process *L; } semaphore; ̈ Gi s ta đã có hai thao tác: H block – ngng tm thi tin trình gi thao tác này. H wakeup(P) khi đng li tin trình đã b blocked P. Phm Th Phi ©2004 5.20 H điu hành Cài đt ̈ Các thao tác trên Semaphore bây gi đc đnh ngha 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); } Phm Th Phi ©2004 5.21 H điu hành Semaphore nh là công c đng b hóa tng quát ̈ Thc thi B trong P j ch sau khi A đã đc thc thi trong P i ̈ S dng semaphore flag khi to vi giá tr 0 ̈ Code: P i P j MM Await(flag) signal(flag) B Phm Th Phi ©2004 5.22 H điu hành Deadlock và cht đói ̈ Deadlock – hai hoc nhiu tin trình đang ch đi vô hn mt s kin nào đó, mà s kin đóch có th đc to ra bi mt trong các tin trình đang ch đi kia. ̈ Xem S và Q là 2 semaphores đc khi to là 1 P 0 P 1 wait(S); wait(Q); wait(Q); wait(S); MM signal(S); signal(Q); signal(Q) signal(S); ̈ S cht đói – b nghn (block) không hn đnh. Mt tin trình có th không bao gi đc xóa khi hàng đi trong semaphore. Phm Th Phi ©2004 5.23 H điu hành Có hai kiu semaphore ̈ Semaphore tng dn– giá tr integer có th tri qua nhiu min giá tr. ̈ Semaphore nh phân – giá tr integer ch nhn mt trong hai giá tr 0và1;cóth cài đt đn gin hn. ̈ Có th coi semephore nh phân là trng hp đc bit ca semaphore tng dn. Phm Th Phi ©2004 5.24 H điu hành Các bài toán đng b hóa c đin ̈ Bài toán ngi sn xut-ngi tiêu dùng (Bounded-Buffer hay Producer-Customer) ̈ Bài toán Readers and Writers ̈ Bài toán “5 nhà trit gia n ti” (Dining-Philosophers) Phm Th Phi ©2004 5.25 H điu hành Bounded-Buffer ̈ D liu chia s semaphore full, empty, mutex; Khi to: full = 0, empty = n, mutex = 1 Phm Th Phi ©2004 5.26 H điu hành Bounded-Buffer – tin trình Producer do { … produce an item in nextp … wait(empty); wait(mutex); … add nextp to buffer … signal(mutex); signal(full); } while (1); Phm Th Phi ©2004 5.27 H điu hành Bounded-Buffer – Tin 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); Phm Th Phi ©2004 5.28 H điu hành Bài toán Readers-Writers ̈ D liu chia s semaphore mutex, wrt; Khi to mutex = 1, wrt = 1, readcount = 0 Phm Th Phi ©2004 5.29 H điu hành Readers-Writers – Tin trình Writer wait(wrt); … writing is performed … signal(wrt); Phm Th Phi ©2004 5.30 H điu hành Readers-Writers – Tin 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): Phm Th Phi ©2004 5.31 H điu hành Bài toán nm nhà trit gia n ti ̈ D liu chia s semaphore chopstick[5]; Khi đu, các giá tr là 1 Phm Th Phi ©2004 5.32 H điu hành Bài toán nm nhà trit gia n ti ̈ Philosopher i: do { wait(chopstick[i]) wait(chopstick[(i+1) % 5]) … eat … signal(chopstick[i]); signal(chopstick[(i+1) % 5]); … think … } while (1); Phm Th Phi ©2004 5.33 H điu hành Monitors ̈ Cu trúc dùng đ đng b hóa đc cài đt  ngôn ng cp cao, nó cho phép chia s an toàn mt kiu d liu tru tng nào đógia nhiu tin trình cnh tranh. monitor monitor-name { shared variable declarations procedure body P1 (…) { . . . } procedure body P2 (…) { . . . } procedure body Pn (…) { . . . } { initialization code } } Phm Th Phi ©2004 5.34 H điu hành Monitors ̈  cho phép mt tin trình ch đi trong monitor, mt bin điu kin phi đc khai báo nh sau: condition x, y; ̈ Bin điu kin ch có th đc s dng vi hai thao tác wait và signal. H Thao tác x.wait(); có ngha là tin trình đang gi thao tác này đang ng cho đn khi mt tin trình khác gi x.signal(); H Thao tác x.signal khi đng li chính xác mt tin trình đang ng đ ch đi trên bin x. Nu không có tin trình nào đang ng trên x, thì thao tác signal không gây nh hng gì c. Phm Th Phi ©2004 5.35 H điu hành Cái nhìn mt cách có s đ v Monitor Phm Th Phi ©2004 5.36 H điu hành Monitor vi các bin điu kin Phm Th Phi ©2004 5.37 H điu hành Ví d v cài đt bài toán 5 nhà trit gia n ti trên monitor monitor dp { enum {thinking, hungry, eating} state[5]; condition self[5]; void pickup(int i) // các slide k tip void putdown(int i) // các slide k tip void test(int i) // các slide k tip void init() { for (int i = 0; i < 5; i++) state[i] = thinking; } } Phm Th Phi ©2004 5.38 H điu hành Các nhà trit gia n ti 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); } Phm Th Phi ©2004 5.39 H điu hành 5 nhà trit gia n ti 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 Chng 5: ng b hóa tin trình ̈ C s ̈ Bài toán min tng trc ̈ ng b hóa bng phn cng ̈ Semaphores ̈ Các bài toán c đin v đng b hóa ̈ Monitors ̈. s ph thuc vào tin trình nào hoàn thành cui cùng. ̈  ngn chn tình trng đua tranh, các tin trình đua tranh phi đc đng b hóa. Phm Th Phi ©2004 5.4 H

Ngày đăng: 06/03/2014, 09:21

TỪ KHÓA LIÊN QUAN