You are on page 1of 34

I HC NNG

TRNG I HC BCH KHOA KHOA CNTT

N NGUYN L HDH
ti:
TM HIU GII PHP NG B SEMAPHORE NG DNG GII QUYT BI TON DINING- PHILOSOPHER

GVHD: Nguyn Vn Nguyn SVTH: Mai Phc Tun Lp: 04T3

NNG 11/2007

LI CAM OAN

Ti xin cam oan : 1 Nhng ni dung trong lun vn ny l do ti thc hin di s hng dn trc tip ca thy Nguyn Vn Nguyn 2 Mi tham kho dng trong n u c trch dn r rng tn tc gi, tn cng trnh, thi gian, a im cng b. 3 Mi sao chp khng hp l, vi phm quy ch o to, hay gian tr, ti xin chu hon ton trch nhim. Sinh vin

Mai Phc Tun

MC LC
CHNG 1 GII THIU.....................................................................................................................1 1.1. KHI NIM NG B.........................................................................................................................1 1.2. CC KHI NIM LIN QUAN.................................................................................................................1 1.2.1. Vn on gng.................................................................................................................1 1.2.2. Cc iu kin tha mn on gng......................................................................................2
1.2.2.1. Loi b tranh chp......................................................................................................................2 1.2.2.2. Tin trnh ...................................................................................................................................2 1.2.2.3. Gii hn i................................................................................................................................2

1.3. CC GII PHP NG B....................................................................................................................2 1.3.1. Gii php phn cng............................................................................................................2 1.3.2. Gii php s dng bin kha................................................................................................7 1.3.3. Gii php kim tra lun phin..............................................................................................8 1.3.4. Gii php sleep and wakeup.................................................................................................9 1.3.5. Gii php semaphore.........................................................................................................13 1.3.6. Gii php monitor:.............................................................................................................15 CHNG 2 BI TON.......................................................................................................................19 2.1. BI TON DINING-PHILOSOPHER THEO GII PHP SEMAPHORE..................................................................19 2.1.1. Yu cu bi ton:................................................................................................................19 2.1.2. Gii php............................................................................................................................20 2.2. KT QU........................................................................................................................................22

PH LC..22 KT LUN V HNG PHT TRIN29 TI LIU THAM KHO30

n HDH

Chng 1
1.1.

GII THIU

Khi nim ng b

Mt tin trnh ng b l mt tin trnh m n c th tng tc hoc b tc ng bi 1 tin trnh khc ang thc thi trong h thng. ng tin trnh c l hoc trc tip chia s 1 khng gian a ch ( c ngha l, c m ngun v d liu), hoc c cho php chia s d liu ch thng qua cc files. Mt trng hp chnh tc t c khi s dng cc tin trnh n gin hoc cc tuyn. Cng nhp vo chia s d liu c th kt qu dn n xung khc d liu. Trong n ny, em mun cp n cc k thut khc nhau m bo s thc thi ca a tin trnh, l chia s mt khng gian a ch lgic c ngha l lm cho d liu x l khng b gin on.

1.2.

Cc khi nim lin quan


Vn on gng

1.2.1.

Xem xt mt h thng bao gm n tin trnh {P0, P1, , Pn-1 }. Mi tin trnh c mt on m lnh, c gi l on gng, trong tin trnh c l ang thay i bin chung, cp nht mt bng, vit mt tp, nhng g tng t th. c trng quan trng ca h thng l, khi mt tin trnh ang thc thi trong on gng ca n, khng c mt tin trnh no khc c php thc thi trong on gng ca n. V vy, vic thc thi ca on gng bi tin trnh tranh chp ng lc. Vn on gng thit k mt giao thc m tin trnh c th s dng hp tc. Mi tin trnh phi chp nhn yu cu nhp vo on gng ca n. Phn m lnh thc hin yu

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

cu ny c gi l on tip nhn (entry section). on gng c l c tip tc bi mt thot on. on m lnh cn li l phn d

1.2.2.

Cc iu kin tha mn on gng

1.2.2.1. Loi b tranh chp


Nu tin trnh Pi ang thc thi trong on gng ca n th khng mt tin trnh no khc c th thc thi trong on gng ca n.

1.2.2.2. Tin trnh


Nu khng c tin trnh no ang thc thi on gng v mt vi tin trnh ang mun nhp vo on gng, th ch nhng tin trnh no ang khng thc thi trong on lnh ca chng c th tham gia vo quyt nh trn tin trnh s nhp vo on gng ca n tip theo, v s la chn ny khng th nh dng postponed.

1.2.2.3. Gii hn i
S tn ti ca mt gii hn trn s ln m tin trnh c cho php nhp vo on gng ca chng sau khi tin trnh khc yu cu nhp vo on gng v trc khi m yu cu c cp.

1.3.

Cc gii php ng b
Gii php phn cng

1.3.1.

Nh mt din mo khc ca phn mm, phn cng c trng c th to chng trnh tc v d dng hn v chng minh h thng hiu qu. By gi ta biu din mt vi cu trc phn cng n gin m thng dng trn nhiu h thng, v th hin lm cch no chng ta c th s dng chng hiu qu trong vn on gng.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

Boolean TestAndSet(boolean &target) { Boolean rv = target; Target = true; Return rv; } nh ngha cu trc TestAndSet Vn don gng c th c gii thch mt cch n gin trong mt mi trng n tin trnh nu chng ta c th ngn cm gin on xy ra trong khi mt bin dng chung b thay i. dng ny ta c th chc chn rng th t hin ti ca cu trc s c php thc thi khng cn n quyn u tin. Khng c cu trc no khc c th chy, nn khng c thay i bt ng c lm nn bin chia s. Tic thay, gii php ny khng kh thi trong mi trng a tin trnh. V hiu ho ngt trn mt a tin trnh c th mt nhiu thi gian, nh 1 thng bo b chn n tt c cc tin trnh. Thng bo ny lm dng tr i vo mi on gng, v h thng b gim hiu qu. Cn v vn tng tc trn ng h h thng, nu ng h c cp nht bi ngt. Nhiu my mc v vy a ra cu trc phn cng c bit cho php chng ta hoc kim tra v thay i ni dung ca mt t hoc trao i ni dung ca hai t, t ng- c ngha l, nh mt dn v khng ngt. Chng ta c th s dng cu trc dc bit gii quyt vn on gng trong mi quan h kiu n gin. thm vo tho lun mt cu trc dc bit cho mt my c bit, chng ta tru tng ho khi nim chnh bn cnh loi cu trc. Cu trc TestAndSet c th c nh ngha

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

Do {While (TestAndSet (lock)); Critical section Lock = false; remainder section } while(1);
Thc hin loi b tranh chp vi TestAndSet

Void Swap(boolean &a, boolean &b) { Boolean temp = a; a = b; b = temp; } nh ngha cu trc Swap Nu my c h tr cu trc TestAndSet th chng ta c th thi hnh loi b tranh chp bng cch khai bo mt bin lock, khi to l false. Cu trc ca tin trnh Pi c biu din trn. Cu trc ca Swap nh ngha nh m t trn, iu hnh trn ni dung ca 2 words; nh cu trc TestAndSet, n c thc thi t ng. Nu my c mc ch cu trc Swap, th th loi b tranh chp c a ra nh tip sau . Mt bin ton cc lock c khai bo v c khi to l false. Thm vo mi tin tnh cn c mt bin cc b key. Cu trc ca tin ttrnh Pi c biu din di.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

Do { Key = true; While (key == true) Swap(lock,key); Critical section Lock = false; Remainder section } while(1); Thc hin loi b tranh chp vi cu trc Swap Thut ton ny khng tho mn yu cu bouded-waiting. Chng ta biu din mt thut ton m s dng cu trc TestAndSet. Thut ton ny tho mn tt c cc yu cu ca on gng. Cu trc d liu thng thng l boolean waiting[n]; boolean lock; nhng cu trc d liu trn c khi to l false. gii quyt yu cu loi b tranh chp gp phi, chng ta ch rng tin trnh Pi c th nhp vo on gng ch nu hoc waiting[i]== false hoc key == false. Gi tr ca key c th tr thnh false ch nu TestAndSet c thc thi. Tin trnh u tin thc thi TestAndSet s tm key == false; tt c cc tin trnh khc phi i. Bin waiting[i] l false ch nu cc tin trnh khc ri khi on gng ca n; ch uy nht waiting[i] thit lp l false, ang duy tr yu cu tranh chp.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

gii thch yu cu tin trnh gp, chng ta ch rng i s biu din cho tranh chp cn ng dng ti y, t mt tin trnh thot ra khi on gng hoc thit lp lock l false, hoc thit lp waiting[j] l false. C hai cho php tin trnh nhp vo on gng x l. gii thch yu cu bouded-waiting gp phi, chng ta ch rng khi mt tin trnh ri khi on gng ca n, n qut trn mng ang i trong chu k lnh (i+1,i+2,,n-1,0,,i-1). N c thit k tin trnh u tin trong tp lnh ny nhp vo on (waiting[j] == true) nh tng ln mt nhp vo on gng. Bt k mt tin trnh ang i no nhp vo on gng ca n s cho kt qu trong vng n1 tr li. Khng may thit k phn cng, thi hnh t ng cu trc TestAndSet trn a tin trnh l tc v khng quan trng. Nh b sung thi hnh c xy ra trong nhng cun sch trn cu trc my tnh. Do { waiting[i] = true; key = true; while (waiting[i] && key) key = TestAndSet(lock); waiting[i] = false; critical section j = (i+1) % n; while ((j != i) && !waiting[j]) j = (j+1) % n;

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

if (j == i) lock = false; else waiting[j] = false; remainder section } while(1);


Bounded-waiting loi b tranh chp vi TestAndSet

1.3.2.

Gii php s dng bin kha

Khai bo mt bin lock l bin ton cc, lock c hai gi tr tng ng vi hai trng thi. Lock c gi tr = 0 khi khng c tin trnh no bn trong on gng, v = 1khi trong on gng c tin trnh. Ban u lock c gi tr khi to = 0. Khi mt tin trnh mun i vo on gng ca n, ta kim tra tnh trng ca lock, nu lock khc khng th tin trnh s ch cho n khi lock c gi tr bng mt th nhp vo on gng, sau khi hon thnh cng vic n thit lp lock bng khng v thot ra khi on gng nhng ch cho tin trnh khc vo. While (true) { While (lock != 0); Lock = 1; Critical_section(); Lock = 0; Non critical_section();

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

} S dng bin kho Gi s P0 i vo on gng ca n, sau khi hon thnh n ra khi on gng v thit lp lock = 1, lc ny tin trnh P1 tip tc i vo on gng, nhng cha kp x l xong th c tin trnh P2 cng cn nhp vo on gng x l, v tin trnh P2 c mc u tin cao hn P1 vy lc tin trnh P1 phi dng li P2 chy thc hin, nhng P1 li ang trog on gng chn khng cho P2 vo chy thc hin on gng, nh vy vi phm vo iu kin thc hin don gng.

1.3.3.

Gii php kim tra lun phin

Nguyn tc ca gii php kim tra lun phin l mt tin trnh cn x l on gng s lun phin c gn nhn l 0,1,0.Chng trnh s dng mt bin turn khi to ban u bng 0 i vi tintnh c nhn bng 0 th: While (true) { While (turn != 0); Critical_section(); Turn = 1; Non critical_section(); } Gii php kim tra lun phin nh nhn =0 i vi tin trnh c nhn =1 th : While (true) { While (turn != 1);

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

Critical_section(); Turn = 0; Non critical_section(); } Gii php kim tra lun phin dnh nhn =1 Nh vy hai tin trnh c dn nhn 0,1 bt k s cng lc nhp vo on gng gy xung t, nh th l vi phm vo iu kin x l on gng.

1.3.4.

Gii php sleep and wakeup

C hai gii php Peterson v TSL u tho mn 4 iu kin ca on gng, nhng c hai u c khim khuyt v phi tn thi gian phi ch. Thc cht ca gii php ny thc hin nh sau: Khi mt Tin Trnh (TT) mun i vo on gng th n c kim tra c php vo hay khng. Nu khng c th TT phi ch trong vng lp ch cho n khi vng lp thot. iu ny khng nhng lm lng ph thi gian CPU m n cn a li nhng hiu qu khng mong i. Gi s mt my tnh cn x l hai TT - TT L c u tin thp. - TT H c u tin cao hn. Nguyn tc ca b lp lch l TT H s c thc thi bt c lc no n trong danh sch sn sng. Ti thi im no , lc TT L ang trong on gng th TT H chuyn sang trng thi sn sng thc thi (v d : hon thnh mt thao tc nhp xut) nhng TT H li ang trong vng lp ch, Khi TT L khng bao gi lp

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

10

lch trong lc TT H ang thc thi. TT L s khng c c hi i vo on gng. V vy TT H lp v hn, tnh hung ny i khi gy ra vn o ngc u tin. Chng ta hy xem mt vi cch trao i thng tin c in, cch ny s chn thay v phi lng ph thi gian CPU khi TT khng c php vo on gng. Cch n gin nht l dng cp trng thi "sleep" v "wakeup". Sleep l l li gi h thng xy ra khi cn chn mt TT, ngha l TT s b chn n khi TT khc nh thc n dy. Li gi wakeup nhn mt tham s, xy ra khi TT cn c nh thc. Vic la chn mt trong hai trng thi sleep v wakeup cn c mt tham s, l mt a ch b nh c s dng chuyn t trng thi thc thnh trng thi ng. Vn ngi sn xut v ngi tiu thDng Vn Sn - Ta c th xem vn ngi sn xut - ngi tiu th nh l vn b m c kch thc gii hn. Hai TT cng chia s mt b m c kch thc c nh. Ngi sn xut a thng tin vo b m cn ngi tiu th ly thng tin ra khi b m( tng qut c th c m ngi sn xut v n ngi tiu th, n gin chng ta ch xt trng hp c 1 ngi sn xut v mt ngi tiu th) - iu phin toi pht sinh khi ngi sn xut mun a mt thng tin mi vo b m nhng n y, gii php cho ngi sn xut l a n vo trng thi ng v c nh thc khi ngi tiu th ly ra mt hoc nhiu Item trong b m. Tng t nh vy, nu ngi tiu th mun ly mt Item t mt b m rng, th n s i vo trng thi ng cho n khi ngi sn xut a mt hoc nhiu Item vo b m v nh thc ngi tiu th. - iu ny c v n gin nhng n dn n mu thun trong cc iu kin m chng ta c th sm nhn thy. theo di s Item trong b m, chng ta dng bin count, s Item nhiu nht trong mt b m l N, ngi sn xut s kim tra bin count, nu count = N th ngi sn xut s i vo trng thi ng, ngc li ngi sn xut s a thng tin mi vo b m v tng count ln mt.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

11

- on m ca ngi tiu th cng tng t nh vy, u tin n kim tra bin count, nu count =0 th ngi tiu th i vo trng thi ng, nu khc 0 th n s ly ra mt Item t b m v gim count i mt n v, mi TT cng kim tra xem TT khc c ang ng hay khng, nu c th nh thc n dy. #define N 100; int count =0; void producer(){ while (TRUE){ produce_Item(); if (count==N) sleep(); enter_Item(); count = count +1; if (count ==1) wakeup(consumer); } } void consumer(){ while (TRUE){ if (count==0) sleep(); remove_Item(); count = count -1;

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

12

if (count ==N-1) wakeup(producer); consume_Item(); } } Gii php Sleep and Wakeup cho bi ton producer-consumer By gi chng ta s kim tra li cc mu thun iu kin, n c th dn n s c, v vic truy cp n bin count khng th kim sot c. Tnh hung sau dn n li., b m by gi l rng v ngi tiu th va kim tra bin count th thy count=0, ti thi im ny b lp lch quyt nh tm dng thc thi ngi tiu th v chuyn sang thc thi ngi sn xut. ngi sn xut a mt Item vo b m ri tng count ln 1, ch rng count by gi l 1. V trc count l 0 v do ngi tiu th phi c ng. Lc ny ngi sn xut gi wakeup dnh thc ngi tiu th dy. Tht khng may, ngi tiu th cha tht s ng, do tn hiu wakeup gi i b nh mt. Khi ngi tiu th tip tc thc thi, n kim tra gi tr ca bin count v nhn thy count =0 do n ri vo trng thi ng, sm hay mun th ngi tiu th cng a cc Item vo b m v lm cho n y, lc ny ngi tiu th s i vo trng thi ng. Kt qu l c hai u ng vnh vin. Thc cht ,vn y l tn hiu wakeup gi i b nh mt, nu n khng b nh mt th mi th s hot ng bnh thng, mt cch gii quyt l ta thm mt bit ch vic gi wakeup c gi n mt TT m TT vn ang thc, th bit ny s c bt ln. Sau , khi TT i vo trng thi sleep, nu bt ch nh thc ang bt ln th n s tt i, nhng TT vn trng thi thc. Bit i nh thc l mt cch xc nh cc tn hiu wakeup.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

13

1.3.5.

Gii php semaphore

y l gii php do Djkstra a ra nm 1965, semaphore l mt bin s nguyn (integer) c truy xut ch thng qua 2 thao tc nguyn t:wait v signal.Cc thao tc ny c t tn P(wait-ch kim tra) v V(signal-bo hiu tng). Nhc im chnh ca gii php semaphore l i hi s ch i bn. gii quyt yu cu cho vic ch i bn,chng ta c th hiu chnh nh ngha ca cc thao tc wait v signal ca semaphore.Khi mt qu trnh thc thi thao tc wait v nhn thy rng nu gi tr ca semaphore khng dng,n phi ch.Tuy nhin thay v ch i bn,qu trnh c th nghn chnh n.Thao tc nghn t qu trnh vo mt hng i gn lin vi semaphore v trng thi qu trnh c chuyn ti qu trnh ch.Sau iu khin c chuyn ti b nh thi biu v mt b nh thi biu chn mt qu trnh khc thc thi. Mt qu trnh b nghn ch trn bin semaphore nn c khi ng li trn qu trnh khc thc thi thao tc signal.Qu trnh c khi ng li bi thao tc wakeup v chuyn qu trnh t trng thi ch sang trng thi sn sng.Sau qu trnh c t vo hang i sn sng. ci t semaphore di nh ngha ny,chng ta nh ngha mt semaphore nh mt cu trc c vit bng C nh sau: typedef struct{ int value; struct process *L; } semaphore; Mi semaphore c mt s integer value v mt danh sch cc qu trnh L.Khi mt qu trnh phi ch trn mt semaphore,n c thm vo danh sch cc qu

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

14

trnh L.Mt thao tc signal xa mt qu trnh ra khi danh sch cc qu trnh ang ch v ang nh thc qu trnh . Thao tc semaphore wait by gi c nh ngha nh sau: void wait(semaphore S){ S.value--; If (S.value < 0){ Thm qu trnh ny ti danh sch cc qu trnh S.L; block(); } } Thao tc semaphore signal c nh ngha nh sau: void signal(semaphore S){ S.value++; if(S.value <= 0){ xo mt qu trnh ra khi hng i S.L; wakeup(P); } }

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

15

Thao tc block() tm dng qu trnh gi thao tc .Thao tc wakeup tip tc thc thi qua trnh b nghn P.Hai thao tc ny c cung cp bi h iu hnh nh nhng li gi h thng c bn.

1.3.6.

Gii php monitor:

Lin lc gia cc TT s dng semaphore trng c v d dng, nhng cha hn vy. Nh on chng trnh trn, nu thao tc DOWN thc hin trc khi a vo hoc ly mt Item ra khi b m. Gi s ta o ngc trt t ca hai thao tc DOWN trong on m ca producer, th mutex c tng ln 1 trc khi empty tng. Nu b m y th ngi sn xut s b chn v mutex c t l 0, Theo trnh t, khi ngi tiu th truy cp vo b m n s DOW N mutex xung, v mutex by gi l 0, do n cng b chn. c hai TT s b chn vnh vin m khng bao gi lm vic. Tnh trng ny gi l tc nghn. Vn ny ch ra rng phi ht sc cn thn trong vic s dng cc semaphore. Mt li tm n v mi th tr nn dng hn. iu ny ging nh lp trnh trong ngn ng assembly. d dng vit ng cc chng trnh. Hoare(1974) v Brinch Hansen(1975) xut mt cch giao tip gia cc TT cao hn, gi l monitor. Chng c m t nh sau: Mt monitor l tp hp cc th tc, cc bin v cu trc d liu tt c c nhm li vi nhau trong mt module hoc mt gi c bit. Cc TT c th gi cc th tc trong monitor ny bt c khi no chng mun, nhng chng khng th truy cp trc tip cc cu trc d liu bn trong monitor v cc th tc c khai bo bn ngoi monitor. Sau y l cu trc ca mt monitor c vit bng ngn ng gi Pascal: monitor example Integer I;

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

16

Condition c; procedure producer(x); .. end; procedure consumer(x); .. end; end monitor; Gii php monitor cho bi ton producer-consumer Cc monitor c mt c tnh quan trng l kh nng loi tr ln nhau: ngha l ch c mt TT c th hot ng trong mt monitor ti bt k thi im no. Cc monitor l cu trc ca ngn ng lp trnh, do trnh bin dch bit c chng l on chng trnh c bit v gi cc th tc ny khc vi cc th tc bnh thng khc. Din hnh, khi mt TT gi mt th tc monitor, u tin mt vi ch lnh ca th tc s km tra xem cc TT khc c ang hot ng trong phm vi monitor, nu c li gi TT s b tr hon cho n khi TT khc ri khi monitor. Nu khng c TT no s dng monitor th li gi TT c th c thc hin. Trnh bin dch c nhim v bin dch, ci t loi tr ln nhau trn li vo monitor, nhng cch n gin l s dng mt semaphore nh phn. V trnh bin dch ( khng phi l nh lp trnh) sp xp vic loi tr ln nhau, do n t b li hn. Trong bt c tnh hung no, ngi lp trnh khng cn bit cch m trnh bin dch sp xp cc nguyn tc loi tr ln nhau. Trnh bin dch t tt c cc on gng vo th tc monitor, v s khng c hai TT no thc hin trong on gng cng mt lc.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

17

Mc d monitor cung cp cch ci t loi tr ln nhau d dng nh ta thy trn, nhng iu cha . Chng ta cn mt TT b chn khi khng th x l. Trong vn gia ngi sn xut v ngi tiu th, d dng kim tra b m l y hay rng trong cc th tc monitor. Nhng lm th no ngi sn xut b chn li khi n nhn ra b m y ?. Gii php nm trong cc bin iu kin, cng vi hai php ton trong chng l wait v signal. Khi mt th tc monitor nhn ra rng n khng th tip tc (v d : producer nhn thy b m y) n i trn mt vi bin iu kin. ng tc ny s a TT vo trng thi b chn, n cng cho mt TT trc y b chn tr nn sn sng i vo monitor. Cc TT khc nh ngi tiu th c th nh thc ngi sn xut ang ng bng cch Signal cc bin iu kin ca ngi sn xut. trnh trng hp hot ng cng mt lc trong monitor, chng ta cn mt nguyn tc iu g s xy ra sau php ton Signal. Hoare xut cho php mt TT mi c nh thc thc thi. Brinch Hansen xut kho lo gii quyt vn bng cch yu cu TT thc hin Signal phi thot khi monitor ngay lp tc, ni cch khc l php ton Signal ch xut hin nh l trng thi kt thc trong mt th tc monitor.Chng ta dng xut ca Brinch Hansen v n a trn cc khi nim n gin hn, v cng d dng ci t, nu ton t Signal c thc hin trn mt bin iu kin m TT ang i th n c kt thc bi b lp lch h thng, v TT ang i s c nh thc tr li. Cc bin iu kin khng phi l cc bin m. Chng khng gom gp cc tn hiu cho sau ny s dng nh cch m cc semaphore thc hin, do nu mt bin iu kin c nh du m khng c TT no ang i trn n th tn hiu b nh mt. Php ton wait phi c thc hin trc Signal, nguyn tc ny lm cho vic ci t d dng hn. Thc t khng phi l vn bi v d dng c th theo di trng thi ca mi TT vi cc bin diu kin ca n nu cn thit.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

18

Bn c th ngh cc php ton wait v signal ging nh sleep v wakeup m chng ta thy d b mu thun iu kin, nhng c mt iu khc nhau ct yu l sleep v wakeup d b li v trong khi mt TT ang ri vo sleep th mt TT khc ang nh thc n. Vi monitor iu ny khng xy ra, s loi tr ln nhau c m bo thc hin t ng trn cc th tc monitor, ngha l th tc bn trong mt th tc monitor s pht hin ra nu b m y n s hon thnh thao tc wait m khng phi lo lng rng b lp lch c th chuyn i sang consumer ch trc php ton wait hon thnh. consumer s khng bao gi i vo monitor cho n khi ton t wait c hon thnh v producer sn sng. Bng cch to ra s loi tr ln nhau mt cch t ng ca on gng, monitor to ra lp trnh song song t li hn semaphore. Mc d vy, chng cng c mt vi iu tr ngi, n khng phi l c lp trnh cho ngn ng C, Pascal,Nh chng ta ni trc monitor l t tng ca ngn ng lp trnh. Trnh bin dch phi cng nhn chng v sp xp vic loi tr ln nhau bng mt cch no . Vn khc vi cc monitor v cng ging nh cc semaphore l chng thit k gii quyt vn loi tr ln nhau trn mt hoc nhiu CPU m cc CPU ny c th truy cp n b nh chung bng cch t cc semaphore trong b nh chia s v bo v chng vi cc ch lnh TSL, chng ta c th trnh xung t. Khi chngta mun phn phi h thng c nhiu CPU, mi CPU c mt b nh ring, hoc kt ni ca mt mng cc b, th khng th kt hp c cc tnh nng ring t ca chng c.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

19

Chng 2
2.1.

BI TON

Bi ton dining-philosopher theo gii php semaphore


Yu cu bi ton:

2.1.1.

C 5 trit gia va suy ngh va n ti.Cc trit gia ngi trn mt bn trn xung quanh c 5 chic gh,mi chic gh c ngi bi mt trit gia.Chnh gia bn l mt bt cm v 5 chic a. Khi mt trit gia suy ngh,ng ta khng giao tip vi trit gia khc.Thnh thong khi mt trit gia cm thy i,ng ta chn 2 chic a gn nht(hai chic a nm gia ng ta vi 2 lng ging tri v phi).Mt trit gia c th ly mt chic a ti mt thi im.Ch ,ng ta khng th ly chic a m n ang c dng bi ngi lng ging.Khi mt trit gia i v c hai chic a cng mt lc,ng ta n m khng t a xung.Khi trit gia n xong,ng ta t a xung v bt u suy ngh tip

.
Hnh 2-1: S bn n ca cc trit gia

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

20

2.1.2.

Gii php
Cch gii quyt bi ton

Th hin mi chic a bi mt bin semaphore,mi trit gia c gng ly mt chic a bng cch thc thi thao tc wait trn bin semaphore .Sau khi n xong trit gia t 2 chic a xung bng cch thc thi thao tc signal trn cc bin semaphore tng ng. Gii thut Khai bo s lng hin trit Khai bo thi gian thc hin chng trnh Khai bo trng thi ca mt hin trit Khai bo trng thi ca mt cy a Khai bo danh sch semaphore ca cy a Khai bo danh sch semaphore ca hin trit Khai bo bin m thi gian Khi to hm thc thi m phng hnh vi ca cc hin trit Trit gia ang i: Nu 2 a sn sng th nht 2 chic a ln thc thi tin trnh Bt u n n xong b tng a xung nh thc cc trit gia bn cnh Ngc li dng tin trnh Khi to hm x l tn hiu

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

21

Nu t = thi gian chy chng trnh Tnh thi gian dng chng trnh ti mi trit gia(ch i ) Tng thi gian=tng thi gian thc hin+thi gian ch Ngc li chng trnh tip tc Hm thc thi chng trnh(main) Khi to trng thi cc cy a Khi to bin blocktime Khi to blocking semaphore cho cc hin trit Khi to semaphore mutex cho cc a To n (=PhiloNum) tuyn Ci t b x l tn hiu ALRM

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

22

2.2.

Kt qu

Hnh 2-2:Kt qu chy chng trnh

PH LC
Chng trnh ngun: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <semaphore.h> #include <signal.h>

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

23

#include <time.h> #define PhiloNum 5 //so luong cac hien triet tren ban an #define Timeofprogram 10//thoi gian thuc hien chuong trinh char PhState[PhiloNum]; // trang thai cua 1 hien triet //- : suy nghi,a: dang an, d: doi int ChState[PhiloNum]; // trang thai cua 1 cay dua // 0 : tu do, 1: dang bi chiem dung sem_t semaphore[PhiloNum]; //danh sach cac semaphore cua cac cay dua sem_t philosem[PhiloNum];//danh sach cac semaphore cua cac hien triet int t=0;//bien dem thoi gian (giay) int blocktime[PhiloNum]; //--------------------------------------------void *PhiloThread(void *data){ //ham thuc thi tuyen mo phong hanh vi cac hien triet int id=(int)data;//lay ve dinh danh cac hien triet int left=id;//dinh danh dua trai; int right=(id+1)%PhiloNum;//dinh danh dua phai int second; int t1,t2;

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

24

while(1){ //suy nghi... PhState[id]='-'; while((second=rand()%5)==0); sleep(second); //doi PhState[id]='d'; cont: t1=t; if((ChState[left]==0)&&(ChState[right]==0)){ //ca hai dua deu san sang sem_wait(&semaphore[left]);//khoa dua trai ChState[left]=1; sleep(3); sem_wait(&semaphore[right]);//khoa dua phai ChState[right]=1; }else { sem_wait(&philosem[id]); //cac dua chua san sang, dung tuyen hien hanh goto cont; }

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

25

//nhac du hai dua va bat dau an... t2=t; blocktime[id]=blocktime[id]+(t2-t1); PhState[id]='a'; while((second=rand()%5)==0); sleep(second); //An xong, dat dua trai xuong ChState[left]=0; sem_post(&semaphore[left]); //va dat dua phai xuong ChState[right]=0; sem_post(&semaphore[right]); //danh thuc cac hien triet ngoi ke ben neu dang cho an if(PhState[left]=='d') sem_post(&philosem[left]); if(PhState[right]=='d') sem_post(&philosem[right]); }//while } //--------------------------------------------void catch_alarm(int sig_num){

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

26

//ham xu ly tin hien ALRM t++; if(t==Timeofprogram){ //dinh thoi cham dut chuong trinh int i; int total=0; printf("\n\n Block time:\t"); for(i=0;i<PhiloNum;i++){ total=total+blocktime[i]; printf("%2d",blocktime[i]); } printf("\n Total:\t\t %d",total); printf("\n -End of program\n"); exit(0); } else alarm(1);//tiep tuc timer } //--------------------------------------------int main(){ pthread_t p_thread[PhiloNum]; int res,thr_id,i;

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

27

srand(time(NULL)); //khoi tao trang thai cac cay dua for(i=0;i<PhiloNum;i++) ChState[i]=0; //khoi tao bien bloctime for(i=0;i<PhiloNum;i++) blocktime[i]=0; //khoi tao blocking semaphore cho cac hien triet for(i=0;i<PhiloNum;i++) { res=sem_init(&philosem[i],0,0); if(res!=0){ perror("philo_sem init error"); exit(1); } } //khoi tao semaphore mutex cho cac dua for(i=0;i<PhiloNum;i++) { res=sem_init(&semaphore[i],0,1); if(res!=0){ perror("semaphore init error"); exit(1);

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

28

} } //tao n (=PhiloNum) tuyen for(i=0;i<PhiloNum;i++){ thr_id=pthread_create(&(p_thread[i]),NULL,PhiloThread,(void*)i); if(thr_id!=0){ perror("thread create error!"); exit(1); } } //cai dat bo xu ly tin hieu ALRM signal(SIGALRM,catch_alarm); alarm(1); while(1){ printf("\n\n%2d\tPhilosophers: %s\n\tChopsticks: ",t+1,PhState); for(i=0;i<PhiloNum;i++) printf("%d",ChState[i]); sleep(1); } //loai bo timer

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

29

alarm(0); exit(0); }

KT LUN V HNG PHT TRIN


1. Kt lun
a. ti ba ti trit gia l mt bi ton c bn trong cc bi ton ng b, n gii quyt tranh chp khi c hai tin trnh u cn n mt ti nguyn no . Trong khun kh n ny em ci t bi ton v cho ra kt qu theo phng php semaphore nhng cha to c giao din cho chng trnh. b. Trong khun kh bi ton em ch gii c bi ton khi s trit gia l 5.S lng trit gia l c mc nh khng th thay i.

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

30

-----------

-----------

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

n HDH

31

TI LIU THAM KHO


Ting Vit
[1] [2]

T Tun, Slide Bi Ging Mn Cng Ngh Linux.

Nguyn Phng Lan - Hong c Hi.Lp Trnh Linux-Tp 1, NXB Gio Dc.2001 Trang web [3] http://www.en.wikipedia.org/wiki/Producer-

consumer_problem

GVHD: Nguyn Vn Nguyn

SVTH: Mai Phc Tun

You might also like