You are on page 1of 28

I HC NNG TRNG I HC BCH KHOA

KHOA CNG NGH THNG TIN

N MN HC
NGUYN L H IU HNH

TI : BI TON NM TRIT GIA

Ngi hng dn : NGUYN VN NGUYN Sinh vin thc hin : BI V NHT HONG Lp : 06T3

BO CO N

NGUYN L H IU HNH

nng, 01/2010

GVHD : Th.S. NGUYN VN NGUYN

2/28

BO CO N

NGUYN L H IU HNH

LI CM N

Nhng kin thc c bn cng nh nng cao v h iu hnh, nm bt c nguyn tc hot ng. Nguyn l h iu hnh l hc phn rt quan trng v bt buc i vi tt c sinh vin chuyn ngnh cng ngh thng tin. Nguyn l h iu hnh cung cp cho sinh vin ng c bn ca h iu hnh trn my tnh. H iu hnh c xem l thnh phn trung gian hay l cu ni cho s giao tip ca ngi s dng v my tnh. Thng qua h iu hnh ngi s dng d dng lm vic v khai thc hiu qu thit b phn cng my tnh, qun l phn mm ng dng. Ngi s dng ch cn thao tc cc lnh, cc s kin v ch cc tin trnh ca h iu hnh thc hin. Vi mt H iu hnh c tim nng nh th, chng ta phi c s nghin cu, hiu bit v n, c th nm bt tt v cc khi nim chuyn ngnh v H iu hnh. Em xin cm n s hng dn tn tnh ca thy th.S. Nguyn Vn Nguyn gip em hon thnh ti ny. Sinh vin thc hin Bi V Nht Hong

GVHD : Th.S. NGUYN VN NGUYN

3/28

BO CO N

NGUYN L H IU HNH

LI M U
Nu khng c phn mm, my tnh ch l mt thit b in t thng thng. Vi s h tr ca phn mm, my tnh c th lu tr, x l thng tin v ngi s dng c th gi li c thng tin ny. Phn mm my tnh c th chia thnh nhiu loi: chng trnh h thng, qun l s hot ng ca chnh my tnh. Chng trnh ng dng, gii quyt cc vn lin quan n vic s dng v khai thc my tnh ca ngi s dng. H iu hnh thuc nhm cc chng trnh h thng v n l mt chng trnh h thng quan trng nht i vi my tnh v c ngi s dng. H iu hnh iu khin tt c cc ti nguyn ca my tnh v cung cp mt mi trng thun li cc chng trnh ng dng do ngi s dng vit ra c th chy c trn my tnh. Mt my tnh hin i c th bao gm: mt hoc nhiu processor, b nh chnh, clocks, a, giao din mng, v cc thit b vo/ra khc. Tt c n to thnh mt h thng phc tp. vit cc chng trnh theo di tt c cc thnh phn ca my tnh v s dng chng mt cch hiu qu, ngi lp trnh phi bit processor thc hin chng trnh nh th no, b nh lu tr thng tin nh th no, cc thit b a lm vic (ghi/c) nh th no, li no c th xy ra khi c mt block a, y l nhng cng vic rt kh khn v qu kh i vi ngi lp trnh. Nhng rt may cho c ngi lp trnh ng dng v ngi s dng l nhng cng vic trn c h iu hnh h tr nn h khng cn quan tm n na. chng ta cn tim hiu v h iu hnh c mt ci nhn tng quan v nhng g lin quan n vic thit k ci t cng nh chc nng ca h iu hnh h iu hnh t c mc tiu: Gip ngi s dng khai thc my tnh d dng v chng trnh ca ngi s dng c th chy c trn my tnh. "Bi ton ba ti ca cc trit gia" (Dining Philosophers), mt bi ton kinh in v tng tranh v chia s ti nguyn. Vic nghin cu bi ton s cho chng ta hiu r hn v kha cnh ny ca h iu hnh.

GVHD : Th.S. NGUYN VN NGUYN

4/28

BO CO N

NGUYN L H IU HNH

PH LC
CHNG I BI TON....................................................................................6 I.1 ti........................................................................................................6 I.2 M t vn .............................................................................................6 I.3 Yu cu bi ton.......................................................................................6 CHNG II C S L THUYT...................................................................7 II.1 Tin trnh (proccess)...............................................................................7 II.1.1 Khi nim........................................................................................7 II.1.2 nh ngha tin trnh........................................................................7 II.1.3 Cc loi tin trnh.............................................................................7 II.1.4 Tuyn (Thred)..................................................................................7 II.2 Ti nguyn gng v on gng................................................................8 II.2.1 Ti nguyn gng (Critical Resource)...............................................8 II.2.2 on gng (Critical Section)............................................................9 II.2.3 Yu cu i vi on gng..............................................................9 II.3 Gii php Semaphore..............................................................................9 II.4 Deadlock...............................................................................................10 II.4.1 Gii thiu vn ............................................................................10 II.4.2 iu kin hnh thnh tt nghn......................................................11 II.4.3 Ngn chn tc nghn (Deadlock Prevention).................................11 CHNG III CCH GII QUYT BI TON............................................12 III.1 Qun l vng gng...............................................................................12 III.2 Gii php x l deadlock.....................................................................14 III.3 Chng trnh........................................................................................14 III.3.1 Class Philosopher.........................................................................15 III.3.2 Class Chopstick............................................................................16 III.3.3 Class Diner...................................................................................16 III.3.4 Class PhilCanvas..........................................................................16 CHNG IV KT QU CHNG TRNH..................................................17 IV.1.1 Chng trnh tm dng................................................................17 IV.1.2 Chng trnh c reset...............................................................18 CHNG V KT LUN...............................................................................19 V.1.1 t c........................................................................................19 V.1.2 Cha t........................................................................................19

GVHD : Th.S. NGUYN VN NGUYN

5/28

BO CO N

NGUYN L H IU HNH

CHNG I I.1 ti

BI TON

Vit chng trnh gii quyt bi ton Nm trit gia n ti. Chng trnh to ra nm qu trnh con m phng hot ng ca nm trit gia. S dng Semaphore ng b hot ng ca nm trit gia ny.

I.2

M t vn

y l bi ton c in v h iu hnh. Bi ton ba ti ca cc trit gia c a ra bi nh ton hc E. W. Dijkstra. Bi ton c m t nh sau : C nm trit gia cng ngi n ti quanh mt chic bn trn, trc mt mi ngi c mt a m , gia 2 trit gia th c mt chic na.

Mi trit gia dnh ton b thi gian suy ngh hoc n khi i. Mi trit gia ch c th n khi c c 2 chic na bn cnh mnh. i : mt trit gia c th cht i nu ng ta khng c cch no n c Tc nghn : cc trit gia phi i ln nhau nn khng c ai n c.

I.3

Yu cu bi ton

Phi t ra thut ton sao cho khi mt trit gia b i th ng ta s c n v m bo khng c trit gia no b cht i. Bi ton t ra vn ng b gia cc tin trnh, gii quyt vn tc nghn c th xy ra. Thut ton c a ra l thut ton Semaphore.

GVHD : Th.S. NGUYN VN NGUYN

6/28

BO CO N

NGUYN L H IU HNH

CHNG II II.1 Tin trnh (proccess)

C S L THUYT

II.1.1 Khi nim


Tin trnh l mt b phn ca mt chng trnh ang thc hin, n v thc hin tin trnh l processer. V tin trnh l mt b phn ca chng trnh nn tng t nh chng trnh tin trnh cng s hu mt con tr lnh, mt con tr stack, mt tp cc thanh ghi, mt khng gian a ch trong b nh chnh v tt c cc thng tin cn thit khc tin trnh c th hot ng c.

II.1.2 nh ngha tin trnh


nh ngha ca Saltzer: Tin trnh l mt chng trnh do mt processor logic thc hin. nh ngha ca Horning & Rendell: Tin trnh l mt qu trnh chuyn t trng thi ny sang trng thi khc di tc ng ca hm hnh ng, xut pht t mt trng thi ban u no .

II.1.3 Cc loi tin trnh


Cc tin trnh trong h thng c th chia thnh hai loi: tin trnh tun t v tin trnh song song. Tin trnh tun t l cc tin trnh m im khi to ca n l im kt thc ca tin trnh trc . Tin trnh song song l cc tin trnh m im khi to ca tin trnh ny mn thn ca cc tin trnh khc, tc l c th khi to mt tin trnh mi khi cc tin trnh trc cha kt thc. Tin trnh tun t xut hin trong cc h iu hnh n nhim nh h iu hnh MSDOS Cc tin trnh song song xut hin trong h iu hnh a nhim.

Cc tin trnh song song

II.1.4 Tuyn (Thred)


Tuyn l mt thnh phn ca tin trnh s hu ngn xp v thc thi c lp ngay trong m lnh ca tin trnh. Nu nh h iu hnh c nhiu tin trnh th trong mi tin trnh bn c th to ra nhiu tuyn hot dng song song vi nhau tng t nh cc tin trnh hot ng song song trong h iu hnh. u im ca tuyn l chng hot ng trong cng mt khng gian a ch ca tin trnh. Tp hp mt nhm cc tuyn c th s dng chung bin ton cc, vng nh heap, bng m t file ca GVHD : Th.S. NGUYN VN NGUYN 7/28

BO CO N

NGUYN L H IU HNH

tin trnh, c ch lin lc gia cc tuyn n gin v hiu qu hn c ch lin lc gia cc tin trnh vi nhau ( nu h iu hnh ca bn chy trn phn cng nhiu b x l th tuyn thc s chy song song ch khng phi gi lp kiu xoay vng ). u im ca s dng tuyn trong tin trnh n gin hn lp trnh tun t. Nhiu thao tc xut nhp hoc hin th d liu c th tch ri v phn cho cc tuyn chy c lp thc thi. V d trong mi trng ha, khi bn copy mt file c kch thc ln, chng trnh s c thit k sao cho mt tuyn thc hin c ghi d liu t a, tuyn khc s m trch vic hin th phn trm hon thnh cng vic cho ngi dng theo di tin . i vi h iu hnh chi ph chuyn i gia ng cnh ca tin trnh cao v chm hn chi ph chuyn i ng cnh dnh cho tuyn ( vi tin trnh h iu hnh phi ct thng s mi trng, thanh ghi trng thi, hon i vng nh) Tuy nhin, im yu ca vic dng tuyn l kh nng v ca mt tuyn s nh hng n tt c cc tuyn khc v ton b tin trnh ang hot ng. L do l cc tuyn dng chung vng nh v khng gian a ch ca tin trnh. Ngc li, mt tin trnh b v lun c h iu hnh c lp hon ton khng gy nh hng n cc tin trnh khc. Tin trnh c th chy trn nhiu my khc nhau trong khi tuyn ch c thc thi trn mt my v trong mt tin trnh.

II.2

Ti nguyn gng v on gng

II.2.1 Ti nguyn gng (Critical Resource)


Trong mi trng h iu hnh a nhim - a chng a ngi s dng, vic chia s ti nguyn cho cc tin trnh ca ngi s dng dng chung l cn thit, nhng nu h iu hnh khng t chc tt vic s dng ti nguyn dung chung ca cc tin trnh hot ng ng thi, th khng nhng khng mang li hiu qu khai thc ti nguyn ca h thng m cn lm hng d liu ca cc ng dng. V nguy him hn l vic hng d liu ny c th h iu hnh v ng dng khng th pht hin c. Vic hng d liu ca ng dng c th lm sai lch ngha thit k ca n. y l iu m c h iu hnh v ngi lp trnh u khng mong mun. Cc tin trnh hot ng ng thi thng cnh tranh vi nhau trong vic s dng ti nguyn dng chung. Hai tin trnh hot ng ng thi cng ghi vo mt khng gian nh chung (mt bin chung) trn b nh hay hai tin trnh ng thi cng ghi d liu vo mt file chia s, l nhng biu hin ca s cnh tranh v vic s dng ta nguyn dng chung ca cc tin trnh. cc tin trnh hot ng ng thi khng cnh tranh hay xung t vi nhau khi s dng ti nguyn dng chung h iu hnh phi t chc cho cc tin trnh ny c c quyn truy xut/s dng trn cc ti nguyn dng chung ny. Nhng ti nguyn c h iu hnh chia s cho nhiu tin trnh hot ng ng thi dng chung, m c nguy c dn n s tranh chp gia cc tin trnh ny khi s dng chng, c gi l ti nguyn gng. Ti nguyn gng c th l ti nguyn phn cng hoc ti nguyn phn mn, c th l ti nguyn phn chia c hoc khng phn chia c, nhng a s thng l ti nguyn phn chia c nh l: cc bin chung, cc file chia s.

GVHD : Th.S. NGUYN VN NGUYN

8/28

BO CO N

NGUYN L H IU HNH

II.2.2 on gng (Critical Section)


on code trong cc tin trnh ng thi, c tc ng n cc ti nguyn c th tr thnh ti nguyn gng c gi l on gng hay min gng. Tc l, cc on code trong cc chng trnh dng truy cp n cc vng nh chia s, cc tp tin chia s c gi l cc on gng. Trong v d 1 trn c hai on gng l: { L1 := Count v Count := L1 } hn ch cc li c th xy ra do s dng ti nguyn gng, h iu hnh phi iu khin cc tin trnh sao cho, ti mt thi im ch c mt tin trnh nm trong on gng, nu c nhiu tin trnh cng mun vo (thc hin) on gng th ch c mt tin trnh c vo, cc tin trnh khc phi ch, mt tin trnh khi ra khi (kt thc) on gng phi bo cho h iu hnh v/hoc cc tin trnh khc bit cc tin trnh ny vo on gng, vv. Cc cng tc iu khin tin trnh thc hin on gng ca h iu hnh c gi l iu tin trnh qua on gng. cng tc iu tin trnh qua on gng c thnh cng, th cn phi c s phi hp gia vi x l, h iu hnh v ngi lp trnh. Vi x l a ra cc ch th, h iu hnh cung cp cc cng c ngi lp trnh xy dng cc s iu hp l, m bo s c quyn trong vic s dng ti nguyn gng ca cc tin trnh.

II.2.3 Yu cu i vi on gng
on gng phi tha cc yu cu sau : Ti mt thi im khng th c hai tin trnh nm trong on gng. Nu c nhiu tin trnh ng thi cng xin c vo on gng th ch c mt tin trnh c php vo on gng, cc tin trnh khc phi xp hng ch trong hng i. Tin trnh ch ngoi on gng khng c ngn cn cc tin trnh khc vo on gng. Khng c tin trnh no c php lu v hn trong on gng v khng c tin trnh phi ch lu mi c vo on gng (ch trong hng i). Nu ti nguyn gng c gii phng th h iu hnh c nhim v nh thc cc tin trnh trong hng i ra to iu kin cho n vo on gng. Cc vn c th gp phi i vi on gng C th dn n tc nghn (Deadlock) trong h thng. Cc tin trnh c th b i (Stravation) ti nguyn.

II.3

Gii php Semaphore

Semaphore l mt ng gp quan trng khc ca nh ton hc E. W. Dijkstra. C th xem Semaphore nh l mt m rng ca Mutex locks. Semaphore (s nh tn hiu bng c) S l mt bin nguyn, khi gn bng mt gi tr khng m, l kh nng phc v ca ti nguyn gng tng ng vi n. ng vi S c mt hng i F(s) lu cc tin trnh ang b blocked trn S. Ch c hai thao tc Down v Up c tc ng n semaphore (s nh tn hiu bng c) S. Down gim S xung mt n v, Up tng S ln mt n v. Mi tin trnh trc khi vo on gng th phi gi Down kim tra v xc lp quyn vo on gng. GVHD : Th.S. NGUYN VN NGUYN 9/28

BO CO N

NGUYN L H IU HNH

Mi tin trnh ngay sau khi ra khi on gng phi gi Up kim tra xem c tin trnh no ang i trong hng i hay khng, nu c th a tin trnh trong hng i vo on gng. Khi tin trnh gi Up th h thng s thc hin. y chng ta cn lu rng: Down v Up l cc th tc ca h iu hnh, nn h iu hnh ci t c ch c quyn cho n, tc l cc lnh bn trong n khng th tch ri nhau.

II.4

Deadlock

II.4.1 Gii thiu vn


Trong mi trung a chng, nhiu qu trnh c th cnh tranh mt s gii hn ti nguyn. Mt qu trnh yu cu ti nguyn, nu ti nguyn khng sn dng ti thi im , qu trnh i vo trng thi ch. Qu trnh ch c th khng bao gi chuyn trng thi tr li v ti nguyn chng yu cu b gi bi nhng qu trnh ang ch khc. Trng hp ny c gi l deadlock (kho cht). Trong trng hp bi ton l khi tt c cc trit gia u i cng mt lc, h ngi vo bn v tt c cng nhc chic na bn tay phi ca mnh, v cng ch i chic na t hng xm bn tay tri dn n cc tin trnh b kha cht.

GVHD : Th.S. NGUYN VN NGUYN

10/28

BO CO N

NGUYN L H IU HNH

II.4.2 iu kin hnh thnh tt nghn


Nm 1971, Coffman a ra v chng t c rng, nu h thng tn ti ng thi bn iu kin sau y th h thng s xy ra tt nghn: Loi tr ln nhau (mutual excution) hay c quyn s dng: i vi cc ti nguyn khng phn chia c th ti mi thi im ch c mt tin trnh s dng c ti nguyn. Gi v i (hold and wait): Mt tin trnh hin ti ang chim gi ti nguyn, li xin cp pht thm ti nguyn mi. Khng u tin (No preemption): Khng c ti nguyn no c th c gii phng t mt tin trnh ang chim gi n. S tc nghn c th tn ti vi ba iu kin trn, nhng cng c th khng xy ra ch vi 3 iu kin . chc chn tc nghn xy ra cn phi c iu kin th t. i vng trn (Circular wait): y l trng hp ca v d 1 m chng ta nu trn. Tc l, mi tin trnh ang chim gi ti nguyn m tin trnh khc ang cn.

II.4.3 Ngn chn tc nghn (Deadlock Prevention)


Ngn chn tc nghn l thit k mt h thng sao cho hin tng tc nghn b loi tr. Cc phng thc ngn chn tc nghn u tp trung gii quyt bn iu kin gy ra tc nghn, sao cho h thng khng th xy ra ng thi bn iu kin tc nghn: i vi iu kin c quyn: iu kin ny gn nh khng trnh khi, v s c quyn l cn thit i vi ti nguyn thuc loi phn chia c nh cc bin chung, cc tp tin chia s, h iu hnh cn phi h tr s c quyn trn cc ti nguyn ny. i vi iu kin gi v i: iu kin ny c th ngn chn bng cch yu cu tin trnh yu cu tt c ti nguyn m n cn ti mt thi im v tin trnh s b kho (blocked) cho n khi yu cu ti nguyn ca n c h iu hnh p ng. Phng php ny khng hiu qu. Th nht, tin trnh phi i trong mt khong thi gian di c ti nguyn mi c th chuyn sang hot ng c, trong khi tin trnh ch cn mt s t ti nguyn trong s l c th hot ng c, sau yu cu tip. Th hai, lng ph ti nguyn, v c th tin trnh gia nhiu ti nguyn m ch n khi sp kt thc tin trnh mi s dng, v c th y l nhng ti nguyn m cc tin trnh khc ang rt cn. y h iu hnh c th t chc phn lp ti nguyn h thng. Theo tin trnh phi tr ti nguyn mc thp mi c cp pht ti nguyn cp cao hn. i vi iu kin No preemption: iu kin ny c th ngn chn bng cch, khi tin trnh b ri vo trng thi kho, h iu hnh c th thu hi ti nguyn ca tin trnh b kho cp pht cho tin trnh khc v cp li y ti nguyn cho tin trnh khi tin trnh c a ra khi trng thi kho. i vi iu kin ch i vng trn: iu kin ny c th ngn chn bng cch phn lp ti nguyn ca h thng. Theo , nu mt tin trnh c cp pht ti nguyn lp L, th sau n ch c th yu cu cc ti nguyn lp thp hn lp L.

GVHD : Th.S. NGUYN VN NGUYN

11/28

BO CO N

NGUYN L H IU HNH

CHNG III III.1 Qun l vng gng

CCH GII QUYT BI TON

Chng trnh xem mi trit gia l 1 tin trnh, chopstick l ti nguyn chung cn c bo v. Bin taken c xy dng trong class Chopstick qu l ti nguyn dng chung l cc chopsticks, mi chopsticks c to ra s c 1 bin kha taken nh du : taken = true chopstick c s dng. taken = false chopstick cha c s dng. Class Chopstick ng vai tr qun l vng gng vi 2 phng thc synchronized put() v get() m v ng vng gng. synchronized void put() { taken=false; display.setChopstick(identity,taken); notify(); } Phng thc ny tng ng vi hnh ng mt trit gia t Chopstick xung (gii phng Chopstick) cc trit gia khc c th s dng ti nguyn chung ny. synchronized void get()throws java.lang.InterruptedException { while (taken) wait(); taken=true; display.setChopstick(identity,taken); } Nu ti nguyn chung (Chopstick) ang c s dng th trit gia phi i (wait) cho n khi ti nguyn c gii phng, lc trit gia s dng ti nguyn ny ng thi thit lp taken = true kha cc tin trnh khc. Nh vy bin taken ng vai tr kha vng ti nguyn dng chung khi n ang c s dng bi mt tin trnh.

GVHD : Th.S. NGUYN VN NGUYN

12/28

BO CO N

NGUYN L H IU HNH

Xt trng hp c th sau

Chng trnh to ra 5 tin trnh tng ng vi 5 trit gia v 5 ti nguyn dng chung tng ng 5 chopsticks public void start() { for (int i =0; i<display.NUMPHILS; ++i) chopstick[i] = new Chopstick(display,i); for (int i =0; i<display.NUMPHILS; ++i){ phil[i] = makePhilosopher(this,i, chopstick[(i-1+display.NUMPHILS)% display.NUMPHILS], chopstick[i]); phil[i].start(); } } Xt trng thi c th ca cc chopsticks ta c chopsticks[0].taken == false chopsticks[1].taken == false chopsticks[2].taken == false chopsticks[3].taken == true chopsticks[4].taken == false GVHD : Th.S. NGUYN VN NGUYN 13/28

BO CO N

NGUYN L H IU HNH

III.2 Gii php x l deadlock


Vn deadlock c th c trnh khi bng vic xy dng phng thc Wait() v Signal() sao cho vng trn i khng xy ra y cc phng thc c ci t nh sau public void Wait()throws java.lang.InterruptedException{ if(identity%2==0){ view.setPhil(identity,view.HUNGRY); right.get(); //gotright chopstick view.setPhil(identity,view.GOTRIGHT); sleep(500); left.get(); } else{ view.setPhil(identity,view.HUNGRY); left.get(); //gotleft chopstick view.setPhil(identity,view.GOTLEFT); sleep(500); right.get(); } } public void Signal(){ right.put(); left.put(); } Phng thc Wait() v Signal() c xy dng qun l tin trnh ra vo vng gng. Vi cch xy dng nh trn th 2 tin trnh cnh nhau c s th t chn l khc nhau s c th t ly cc chopstick theo th t khc nhau.

III.3 Chng trnh


Chng trnh c xy dng gm 4 class Class Diners : y l class chnh khi to v lin kt cc class khc Class PhilCanvas : qun l giao din Class Philosopher : class to cc tin trnh Class Chopstick : ti nguyn dng chung (chopstick )

GVHD : Th.S. NGUYN VN NGUYN

14/28

BO CO N

NGUYN L H IU HNH

Cc class quan h nh s sau

III.3.1 Class Philosopher


Cc bin cn xt private int indentity : dng nh ch s (nh id) cho tng tin trnh private Chopstick left, right : y l 2 ti nguyn dng chung m mi tin trnh c php s dng. Phng thc Wait() v Signal() qun l tin trnh vo vng gng v gii quyt vn tc nghn. Phng thc run() : chy tin trnh while (true) { 1. view.setPhil(identity,view.THINKING); 2. sleep(controller.sleepTime()); 3. Wait(); 4. view.setPhil(identity,view.EATING); 5. sleep(controller.eatTime()); 6. Signal(); } 1 v 2 tin trnh ang ch i vo vng gng. 3 tin trnh gi phng thc Wait() kim tra iu kin vo vng gng. 4 v 5 tin trnh c thc thi.

GVHD : Th.S. NGUYN VN NGUYN

15/28

BO CO N

NGUYN L H IU HNH

6 thot khi vng gng v gii phng ti nguyn.

III.3.2 Class Chopstick


Cc bin cn xt private boolean taken : nh du trng thi ca chopstick c s dng hay cha, taken == true l ti nguyn c s dng, taken == false cha c s dng. private int indentity : nh danh cho chopstick. Phng thc get() c gi khi mt tin trnh mun s dng ti nguyn. Phng thc put() c gi gii phng ti nguyn.

III.3.3 Class Diner


Khi to giao din, khi to cc tin trnh, to mi trng cho cc tin trnh hot ng.

III.3.4 Class PhilCanvas


Qun l giao din.

GVHD : Th.S. NGUYN VN NGUYN

16/28

BO CO N

NGUYN L H IU HNH

CHNG IV IV.1.1 Chng trnh tm dng

KT QU CHNG TRNH

T kt qu demo ta c : Trit gia s 0 v s 3 ang i Trit gia s 1 v s ang suy ngh Trit gia s 4 ang n

GVHD : Th.S. NGUYN VN NGUYN

17/28

BO CO N

NGUYN L H IU HNH

IV.1.2 Chng trnh c reset

Khi ng li cc tin trnh c tm dng, reset li bng thng bo trng thi.

GVHD : Th.S. NGUYN VN NGUYN

18/28

BO CO N

NGUYN L H IU HNH

CHNG V V.1.1 t c

KT LUN

Chng trnh t c chc nng m t bi ton bng giao din trc quan sinh ng, s dng giao din swing trn nn applet. To cc tin trnh m phng da trn lp Thread. Bng cch s dng slider cho php ngi dng ty chnh thi gian cung cp cho cc tin trnh, gip d dng nm bt v kim sot. Bng cch xy dng phng thc Wait() chng trnh x l c vn deadlock. Chng trnh c phn thnh cc class vi cc chc nng r rng to thun li cho vic m rng v pht trin sau ny, c bit pht trin giao din mt cch d dng m khng nh hng n phn li ca chng trnh. Chng trnh c th c pht trin m rng cho n tin trnh ty .

V.1.2 Cha t
Phn giao din chng trnh cha c bt mt.

GVHD : Th.S. NGUYN VN NGUYN

19/28

BO CO N

NGUYN L H IU HNH

TI LIU THAM KHO


[1] ng V Tng, Gio trnh Nguyn L H iu Hnh, NXB H Ni(2005) [2] http://www.scribd.com/doc/7221635/H-iu-hanh?autodown=pdf [3] n mu kha 05

GVHD : Th.S. NGUYN VN NGUYN

20/28

BO CO N

NGUYN L H IU HNH

PH LC
//<APPLET CODE="Diners.class" WIDTH=400 HEIGHT=75 ALIGN=center> import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.*; import java.awt.geom.AffineTransform; import javax.swing.*; public class Diners extends JApplet { PhilCanvas display; Thread[] phil= new Thread[PhilCanvas.NUMPHILS]; Chopstick[] chopstick = new Chopstick[PhilCanvas.NUMPHILS]; JScrollBar slider; JButton restart; JButton freeze; TextArea txtMes; public void init() { setLayout(new BorderLayout()); display = new PhilCanvas(this); display.setSize(300,320); add("Center",display); slider = new JScrollBar(Scrollbar.HORIZONTAL, 50, 5, 0, 100); restart = new JButton("Restart"); restart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (display.deadlocked()) { stop(); slider.setValue(50); start(); } display.thaw(); } }); freeze = new JButton("Freeze"); freeze.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { display.freeze(); } });

GVHD : Th.S. NGUYN VN NGUYN

21/28

BO CO N Panel p2 = new Panel(); p2.setLayout(null); p2.setSize(150,400); Label l0,l1,l2,l3,l4,l5,l6; l1 = new Label("EATING"); l2 = new Label(""); l2.setBackground(Color.GREEN); l3 = new Label("HUNGRY"); l4 = new Label(""); l4.setBackground(Color.BLUE); l5 = new Label("THINKING"); l6 = new Label(""); l6.setBackground(Color.YELLOW); l1.setBounds(10,220,60,30); p2.add(l1); l2.setBounds(80,220,50,30); p2.add(l2); l3.setBounds(10,260,60,30); p2.add(l3); l4.setBounds(80,260,50,30); p2.add(l4); l5.setBounds(10,300,60,30); p2.add(l5); l6.setBounds(80,300,50,30); p2.add(l6); p2.setBackground(Color.WHITE); txtMes = new TextArea(); txtMes.setBounds(0,0,150,200); p2.add(txtMes); Panel p1 = new Panel(); p1.setLayout(new BorderLayout()); p1.add("Center",slider); p1.add("East",restart); p1.add("West",freeze); add("South",p1); add("West",p2); setSize(600,400); }

NGUYN L H IU HNH

Thread makePhilosopher(Diners d, int id, Chopstick left, Chopstick right) { return new Philosopher(d,id,left,right); } public int sleepTime() { return (slider.getValue()*(int)(100*Math.random())); }

GVHD : Th.S. NGUYN VN NGUYN

22/28

BO CO N

NGUYN L H IU HNH

public int eatTime() { return (slider.getValue()*(int)(50*Math.random())); } public void start() { for (int i =0; i<display.NUMPHILS; ++i) chopstick[i] = new Chopstick(display,i); for (int i =0; i<display.NUMPHILS; ++i){ phil[i] = makePhilosopher(this,i, chopstick[(i-1+display.NUMPHILS)% display.NUMPHILS], chopstick[i]); phil[i].start(); } } public void stop() { for (int i =0; i<display.NUMPHILS; ++i) { phil[i].interrupt(); } } } class Philosopher extends Thread { private int identity; private PhilCanvas view; private Diners controller; private Chopstick left; private Chopstick right; Philosopher(Diners ctr, int id, Chopstick l, Chopstick r) { controller = ctr; view = ctr.display; identity = id; left = l; right = r; } public void Wait()throws java.lang.InterruptedException{ if(identity%2==0){ view.setPhil(identity,view.HUNGRY); right.get(); //gotright chopstick view.setPhil(identity,view.GOTRIGHT); sleep(500); left.get(); }

GVHD : Th.S. NGUYN VN NGUYN

23/28

BO CO N else{

NGUYN L H IU HNH

view.setPhil(identity,view.HUNGRY); left.get(); //gotright chopstick view.setPhil(identity,view.GOTLEFT); sleep(500); right.get(); } } public void Signal(){ right.put(); left.put(); } public void run() { try { while (true) { //thinking view.setPhil(identity,view.THINKING); sleep(controller.sleepTime()); //hungry Wait(); //eating view.setPhil(identity,view.EATING); sleep(controller.eatTime()); Signal(); } } catch (java.lang.InterruptedException e) {} } } class Chopstick { private boolean taken=false; private PhilCanvas display; private int identity; Chopstick(PhilCanvas disp, int id){ display = disp; identity = id; } synchronized void put() { taken=false; display.setChopstick(identity,taken);

GVHD : Th.S. NGUYN VN NGUYN

24/28

BO CO N notify(); }

NGUYN L H IU HNH

synchronized void get()throws java.lang.InterruptedException { while (taken) wait(); taken=true; display.setChopstick(identity,taken); } } class PhilCanvas extends Canvas { Diners controller; Image offscreen; Dimension offscreensize; Graphics offgraphics; static final int NUMPHILS = 5; static final int THINKING = 0; static final int HUNGRY = 1; static final int GOTRIGHT = 2; static final int EATING =3; static final int GOTLEFT = 4; Image[] imgs = new Image[5]; AffineTransform [] philPlace = new AffineTransform[NUMPHILS]; int [] state = new int [NUMPHILS]; double [] chopX = new double[NUMPHILS]; double [] chopY = new double[NUMPHILS]; double [] disX = new double[NUMPHILS]; double [] disY = new double[NUMPHILS]; boolean[] untable= new boolean[NUMPHILS]; boolean frozen = false; String Message = ""; PhilCanvas(Diners controller) { super(); this.controller = controller; MediaTracker mt; mt = new MediaTracker(this); imgs[0] = controller.getImage(controller.getDocumentBase(), "image/thinking.gif"); mt.addImage(imgs[0], 0); imgs[1] = controller.getImage(controller.getDocumentBase(), "image/hungry.gif"); mt.addImage(imgs[1], 1);

GVHD : Th.S. NGUYN VN NGUYN

25/28

BO CO N

NGUYN L H IU HNH

imgs[2] = controller.getImage(controller.getDocumentBase(), "image/gotright.gif"); mt.addImage(imgs[2], 2); imgs[3] = controller.getImage(controller.getDocumentBase(), "image/eating.gif"); mt.addImage(imgs[3], 3); imgs[4] = controller.getImage(controller.getDocumentBase(), "image/gotleft.gif"); mt.addImage(imgs[4], 4); try { mt.waitForID(0); mt.waitForID(1); mt.waitForID(2); mt.waitForID(3); mt.waitForID(4); } catch (java.lang.InterruptedException e) { System.out.println("Couldn't load one of the images"); } initPlacing(); } void backdrop() { Dimension d = getSize(); if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) { offscreen = createImage(d.width, d.height); offscreensize = d; offgraphics = offscreen.getGraphics(); offgraphics.setFont(new Font("Helvetica",Font.BOLD,18)); Graphics2D g2D = (Graphics2D) offgraphics; g2D.translate(d.width/2, d.height/2); } offgraphics.setColor(Color.WHITE); offgraphics.fillRect(-d.width/2, -d.height/2, d.width, d.height); } void drawtable() { offgraphics.setColor(Color.red); offgraphics.fillOval(-80,-80,160,160); offgraphics.setColor(Color.black); for(int i=0; i<NUMPHILS; i++) { if(untable[i]){ offgraphics.setColor(Color.black); offgraphics.fillRect((int)chopX[i],(int)chopY[i],5,30); }

GVHD : Th.S. NGUYN VN NGUYN

26/28

BO CO N

NGUYN L H IU HNH

offgraphics.setColor(Color.black); offgraphics.drawString(String.valueOf(i),(int)disX[i],(int)disY[i]); offgraphics.setColor(Color.WHITE); offgraphics.fillOval((int)disX[i],(int)disY[i],25,25); } } public void paint(Graphics g) { update(g); } public void update(Graphics g) { backdrop(); for (int i = 0; i < NUMPHILS; i++) { philPaint(offgraphics,i); if(state[i]==EATING) Message += "Philosopher "+i+" EATING"; } controller.txtMes.setText(Message); drawtable(); if (deadlocked()) { offgraphics.setColor(Color.black); offgraphics.drawString("DEADLOCKED",-60,0); } g.drawImage(offscreen, 0, 0, null); } void philPaint(Graphics g,int i) { Graphics2D g2D = (Graphics2D)g; g2D.drawImage(imgs[state[i]],philPlace[i],this); } synchronized void setPhil(int id,int s) throws java.lang.InterruptedException{ while (frozen) wait(); state[id] = s; repaint(); } synchronized void freeze(){ frozen = true; } synchronized void thaw() { frozen = false; notifyAll(); Message = "";

GVHD : Th.S. NGUYN VN NGUYN

27/28

BO CO N }

NGUYN L H IU HNH

synchronized void setChopstick(int id, boolean taken) { untable[id]= !taken; } boolean deadlocked(){ int i=0; while(i<NUMPHILS && state[i]==GOTRIGHT) ++i; return i==NUMPHILS; } void initPlacing() { double radius = 130.0; double philWidth = imgs[0].getWidth(this); double philHeight = imgs[0].getHeight(this); double radians; for (int i = 0; i < NUMPHILS; i++) { philPlace[i] = new AffineTransform(); radians = 2.0 * Math.PI*(1.0 - (double) i/(double)NUMPHILS); philPlace[i].rotate(radians); philPlace[i].translate(0,-radius); philPlace[i].translate(-philWidth/2,-philHeight/2); } radius = 55; for (int i = 0; i < NUMPHILS; i++) { radians = (double)i * 2.0 * Math.PI / (double)NUMPHILS + Math.PI/ (double)NUMPHILS; chopX[i] = -Math.sin(radians) * radius; chopY[i] = -Math.cos(radians) * radius; untable[i] = true; } radius = 65; for (int i = 0; i < NUMPHILS; i++) { radians = (double)i * 2.0 * Math.PI / (double)NUMPHILS; disX[i] = -Math.sin(radians) * radius-12; disY[i] = -Math.cos(radians) * radius-12; } } }

GVHD : Th.S. NGUYN VN NGUYN

28/28

You might also like