You are on page 1of 27

MN H IU HNH

Chng 3

TNG TRANH GIA CC PROCESS


3.1 Gii thiu v tng tranh 3.2 Loi tr tng h gia cc on code CS 3.3 Cc phng php dng ch ch ng (busy waiting) 3.4 ng b cc process : Bi ton Sn xut-Tiu dng 3.5 Cc phng php dng ch th ng (sleep-wakeup) 3.6 Cc bi ton IPC kinh in v gii quyt
Ti liu tham kho : chng 2, sch "Modern Operating Systems", Andrew S. Tanenbaum: , 2nd ed, Prentice Hall
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 1

3.1 Gii thiu v tng tranh


Trong h a chng, thng c nhiu process chy song hnh, nhng mi process c kh ng gian l m vic c lp, khng ai c th truy xut trc tip khng gian lm vic ca process khc => rt tt cho vic bo v ch ng ln nhau nht l khi cc process ny l nhng chng trnh c lp. Nu 2 hay nhiu process cn giao tip nhau ng b hay trao i d liu, ta cn cung cp c ch cho ch ng. C 2 c ch giao tip ch nh gia c c process : truy xut b nh d ng chung v gi/nhn th ng b o. Truy xut b nh chung l 1 trong nhiu hot ng tng tranh gia cc process. Vn tng tranh trn 1 ti nguyn dng chung l vn ln cn phi gii quyt trit v nu nhiu process truy xut ng thi v o 1 t i nguy n d ng chung m khng c s kim sot th d xy ra li lm h hng ti nguyn (iu kin Race).
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 2

Gii thiu v tng tranh


Phn tch k code ca chng trnh, ta nhn thy chng l danh sch lin tip ca 2 loi on code : on code truy xut cc bin cc b ca chng trnh. on code ny thng di v xut hin nhiu. May mn l chng ta khng cn quan tm v kim sot on code ny. on code truy xut ti nguyn dng chung v c th tranh chp vi process khc. y l on code, mc d t xut hin v thng rt ngn, nhng d gy li trn ti nguyn nn ta gi n l 'critical session (vit tt l CS), chng ta cn kim sot cn thn on code CS ny.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 3

Gii thiu v tng tranh


on lnh truy xut cc b critical session 1 on lnh truy xut cc b critical session 2 on lnh truy xut cc b resource 1 on lnh truy xut cc b critical session 2 on lnh truy xut cc b critical session 1 resource 2 on lnh truy xut cc b

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 4

Gii thiu v tng tranh


Th d 2 ng dng truy xut ti khon A ng thi :
1. hin th giao din & ch ngi dng ra lnh 2. Ngi dng ra lnh np vo ti khon A s tin 700USD x l : 21a c ti khon A vo b nh, 22a Tng gi tr ti khon trong b nh ln 700USD. 23a Ghi li gi tr mi. 3. Quay v bc 1 1. hin th giao din & ch ngi dng ra lnh 2. Ngi dng ra lnh rt tin t ti khon A 500USD x l : 21b c ti khon A vo b nh, 22b Gim gi tr ti khon trong b nh i 500USD. 23b Ghi li gi tr mi. 3. Quay v bc 1

Ti khon A

Vng CS

Nu ti khon A l 1000USD v HH iu khin chy 2 process P1 v P2 theo th t 21a22a21b22b23b23a th kt qu ti khon A s l 1700USD (gi tr ng l 1200USD).
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 5

3.2 Loi tr tng h gia cc on CS


kim sot vic truy xut ti nguyn ng thi gia nhiu process, ta khng cho php hn 1 vng CS ca cc process cng truy xut ti nguyn xc nh ti tng thi im. Phng php ny c gi l loi tr tng h gia cc on CS (Mutual Exclusion). C nhiu phng php loi tr tng h c th khc nhau v c chia lm 2 nhm chnh : nhm cc phng php dng ch ch ng (busy waiting) v nhm cc phng php dng ch th ng (sleep/wakeup). Tinh thn ca nhm phng php dng ch ch ng l khi 1 process cn thc hin on code CS tng tranh vi process khc th n phi dng ch n khi process khc chy xong on code CS ny, trong qu trnh dng ch, n vn chim CPU lin tc d iu kin chy tip lin tc (nhng khng thnh cng). Tinh thn ca nhm phng php sleep/wakeup l khi phi dng ch process khc, n xin ng (tr CPU) v nm bt ng. Khi process khc thc hin xong vng CS, h thng s nh thc process ng bt u thc hin on lnh CS
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 6

Loi tr tng h gia cc on CS


Mi ln mun vo vng CS, ta phi gi hm In_Control() kim sot vic thi hnh vng CS, khi hon thnh vng CS, ta phi gi hm Out_Control() thng bo cho cc process khc ang ch chng kim tra li vic i vo.

In_Control(); Vng CS truy xut ti nguyn dng chung Out_Control();

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 7

3.3 Cc phng php ch ch ng


1. Phng php da trn Interrupt Tnh cht c bn ca CPU l sau khi thi hnh 1 lnh my, n s t ng thi hnh lnh my k tip, m khng bt k th g bn ngoi. Tuy nhin, nu ch vy, CPU s khng bao gi p ng kp thi 1 s kin no xy ra trong qu trnh thi hnh chng trnh ca CPU. Do , ngi ta phi to thm 1 chn nhp c tn l IRQ. Mt thit b no nu mun yu cu CPU x l dm cng vic no th hy to tn hiu (ngt) gi v CPU trn chn IRQ. Bnh thng, mi khi CPU thy c tn hiu trn chn IRQ, n s dng tm thi chng trnh ang chy hin hnh, chy on lnh qui nh trc (trnh phc v ngt) x l cng vic dm cho thit b yu cu. Sau khi hon thnh trnh phc v ngt, CPU s quay v tip tc thi hnh chng trnh t v tr ngng trc y.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 8

3.3 Cc phng php ch ch ng


1. Phng php da trn Interrupt Tuy nhin, nu CPU ang thi hnh chng trnh real-time hay nhy cm vi thi gian, n cn c kh nng pht l yu cu ngt. gip chng trnh quyt nh lc no cho php CPU p ng ngt, lc no pht l, ngi ta cung cp 2 lnh my sau : Cli : clear Interrupt : cm CPU c phc v ngt Sti : set interrupt : cho php CPU c p ng ngt. Nh vy, nu ta vit : In_Control() cli Out_Control() sti th ti tng thi im ch c ti a 1 process chy c vng CS, v khng c process no khc (k c trnh lp lch) c th ngt n tm thi.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 9

3.3 Cc phng php ch ch ng


Phng php da trn ngt qung rt n gin, hiu qu nhng nu lp trnh sai th nguy him khn lng. Th d nu ta qun vit lnh sti sau khi hon thnh vng CS th process tng ng s tip tc chy n ht chng trnh ri treo my v khng process no khc, k c trnh lp lch, c th chim c CPU chy. Hin nay, ch c HH mi c php dng phng php ny, chng trnh ng dng khng c php dng. Hn na, phng php da trn ngt ch tc ng trn 1 CPU, nu my c nhiu CPU th cc CPU khc khng b nh hng bi lnh cm ngt trn 1 CPU no .

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 10

3.3 Cc phng php ch ch ng


2. Phng php dng bin kha Mi vng CS c bo v bi 1 bin kha, bin ny lc u = 0 xc nh rng cha process no thi hnh vng CS. Mi ln mun thi hnh vng CS, process s kim tra bin kha, nu n = 0 th set ln 1 v tip tc thi hnh vng CS n khi hon thnh s set li bin kha = 0. Trng hp bin kha = 1 th phi ch process khc thi hnh xong vng CS. Bool process_in_CS = 0; In_Control() { for (;;) if (process_in_CS ==0) break; process_in_CS = 1; }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Out_Control() { process_in_CS = 0; }
Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 11

3.3 Cc phng php ch ch ng


2. Phng php dng bin kha V tng th phng php dng bin kha gii quyt tt vn tranh chp ti nguyn dng chung, nhng nu hin thc bng on lnh C nh slide trc th c th tht bi trong 1 s tnh hung. Gi s process P1 mun thi hnh vng CS, n kim tra bin process_in_CS v thy ang m (=0). Ngay lc ny, process ht khe thi gian, trnh lp lch dng n v chn process P2 chy tip, nu P2 cng mun thi hnh vng CS, n kim tra bin kha, lc ny bin kha vn = 0 nn P2 s set ln 1 ri thi hnh vng CS. Trong lc thi hnh CS, P2 ht khe thi gian v CPU c giao li P1. P1 chy tip v cng set bin kha ln 1 ri vo vng CS. Nh vy lc ny 2 process P1 v P2 ang tranh chp ti nguyn dng chung!

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 12

3.3 Cc phng php ch ch ng


3. Phng php dng lnh TSL Phn tch li ca phng php dng bin kha, ta nhn thy nu 2 lnh kim tra bin kha v set n ln 1 c m bo thi hnh theo c ch nguyn t, khng chia ct (hoc thc hin c hai, hoc khng thi hnh lnh no) th li ca slide trc khng th xy ra, ngha l phng php dng bin kha s chy ng. m bo c tng trn, v mt phn cng, hng ch to CPU s cung cp thm 1 lnh my c bit c tn l TSL (Test-andSet) c dng sau : TSL al, process_in_CS al process_in_CS process_in_CS 1
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 13

3.3 Cc phng php ch ch ng


3. Phng php dng lnh TSL Nh c tnh ca lnh my TSL, ta vit li 2 hm In_Control() v Out_Control() ca phng php dng bin kha nh sau : In_Control() { for (;;) { TSL al, process_in_CS; if (al ==0) break; } } Phn tch on code trn, ta thy process no thc hin c lnh TSL u tin th n set bin kha ln 1 nn nu ngay sau c process khc chy In_Control() th phi ch process ban u, ch khng th vo vng CS trc c. Bool process_in_CS = 0; Out_Control() { process_in_CS = 0; }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 14

3.3 Cc phng php ch ch ng


4. Phng php lun phin tng ca phng php ny l cho cc process lun phin thi hnh vng CS, tng thi im ch 1 process c thi hnh CS. Gi s c N process cn thi hnh CS c nh s t 0 n N-1. To 1 bin "turn" cha ch s process c php thi hnh CS ti tng thi im. Lc u turn c set = 0. In_control (int idproc) { while (turn != idproc) ; // ch n lt mnh } Out_control (int idproc) { turn = (turn +1)%N; // cho process i ngay sau mnh vo }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 15

3.3 Cc phng php ch ch ng


4. Phng php lun phin V l thuyt, phng php lun phin to c s bnh ng tuyt i gia cc process v vic thi hnh vng CS, process no cng c thi hnh CS vi c hi ngang nhau, khng process no c th thi hnh CS nhiu ln hn cc process khc. Tuy nhin trong thc t, cc process thng c phc tp khc nhau, c nhu cu chy vng CS rt khc nhau, process ny cn chy CS nhiu ln, process khc ch cn chy CS t ln. Nh vy, process cn chy CS t ln hn s ngn cn process cn chy CS nhiu ln hn.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 16

3.3 Cc phng php ch ch ng


5. Phng php Peterson
khc phc vn ca phng php lun phin, Peterson nng cp thut gii In_Control() v Out_Control() nh sau : #define FALSE 0 #define TRUE 1 #define N 2 int turn = 0; // ch s process c php thi hnh vng CS int interested[N]; // dy ghi nhn mun cc process, ban u = 0 void In_control (int idproc) { int other = 1 - idproc; interested[idproc] = TRUE; // khai bo mun vo CS turn = idproc; // khng nh mun vo CS while (interested[other]==TRUE && idproc!=turn) ; //ch } void Out_control(int idproc) { interested[idproc] = FALSE; }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 17

3.3 Cc phng php ch ch ng


5. Phng php Peterson Phn tch hm In_Control(), ta thy nu 2 process cng mun vo vng CS 1 lt th process no xin vo trc s thng cn process xin vo sau s phi ch. Hn na, mi process c quyn vo vng CS m khng cn ch n lt mnh nh trc y. Lu on code slide trc ch ng cho trng hp 2 process. Nu c nhiu process cn truy xut vng CS, ta phi hiu chnh li on code phc tp hn nhiu mi gii quyt c vn .

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 18

3.4 ng b cc process : Bi ton Sn xut-Tiu dng


Trong h thng c 2 loi phn t : Sn xut chuyn to sn phm mi v vo kho cha. Tiu dng chuyn ly sn phm t kho cha ra s dng. Bi ton Sn xut -Tiu dng trn c 2 vn cn gii quyt : lm sao phn t Sn xut v Tiu dng khng c tranh chp nhau khi truy xut kho cha sn phm. lm sao ng b tc thi hnh ca 2 phn t chng c th hot ng tt theo thi gian, khng gy khng hong tha hay khng hong thiu.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 19

tng gii quyt Bi ton Sn xut -Tiu dng

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 20

tng gii quyt Bi ton Sn xut -Tiu dng

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 21

tng gii quyt Bi ton Sn xut -Tiu dng


tng ca on code trong 2 slide trc l : kim tra iu kin chy tip cho process Sn xut v Tiu dng. Nu khng th chy tip (kho y/rng) th gi hm sleep() dng chy n lc c process khc nh thc. Khi cn thit, process s gi hm wakeup() nh thc dm process khc dy n tip tc chy t lc ng trc y. Mc d tng trn gii quyt c vn ng b gia cc process, nhng nu lp trnh bng ngn ng C nh slide trc th c th gy li.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 22

tng gii quyt Bi ton Sn xut -Tiu dng


C th nu Producer kim tra kho cha y, tnh gi hm sleep() ng th ht khe thi gian chy. Trnh lp lch s dng tm Producer, chn Consumer chy. Consumer kim tra kho cha, ly c sn phm v nh thc Producer dy. Tuy nhin vic nh thc ny khng c gi tr v Producer cha ng. Sau producer chy tip, n s gi sleep() ng v s khng bao gi thc dy v consumer khng bao gi nh thc n na. Ring Consumer chy tip v theo thi gian, n s ly ht sn phm trong kho cha, khi n s gi sleep() ng ch Producer nh thc nhng s khng bao gi thc dy c v Producer cng v ang ng nh Consumer. Hin tng ny c gi l Deadlock v ta s gii thiu cc phng php khc nhau gii quyt trong chng 4.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 23

3.5 Cc phng php sleep/wakeup


1. Phng php dng Semaphore Semaphore l i tng c cung cp sn bi h thng, i tng ny gm : 1 thuc tnh cha gi tr nguyn dng, ta gi l bin semaphore s. hm down(s) c chc nng gim s 1 n v, nu gim khng c th phi ch n khi c iu kin gim c th lm li. Thi gian thc
hin hm down c th rt di, nhng cc process khc khng th thy c trng thi trung gian ca hm down ny. Ni cch khc vic thi hnh hm down c tnh nguyn t, khng chia ct c.

hm up(s) c chc nng tng s 1 n v, nu sau khi tng m s = 1 th


phi nh thc cc process ang ng v thc hin down(s) trc y m cha c. Thi gian thc hin hm up rt nhanh, vic thi hnh hm up cng c tnh nguyn t, khng chia ct c.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 24

3.5 Cc phng php sleep/wakeup


Ta c th dng Semaphore gii quyt tng tranh gia nhiu process nh sau : kt hp 1 semaphore nh phn vi vng CS tng ng. Semaphore ny s c gn tr u l 1 v sau ny n ch c th cha 2 tr : hoc 0 hoc 1. Ta gi semaphore ny l semaphore nh phn. hm In_Control() kim sot vo vng CS ca process s l li gi hm down (s). hm Out_Control() kim sot ra vng CS ca process s l li gi hm up (s). Nh vy, ti 1 thi im ch c 1 process down(s) c v vo vng CS, cc process khc nu down(s) u b tht bi v phi ng ch. Khi process u tin thc hin xong CS, n thc hin up(s) v s nh thc cc process ng dy. Trong cc process dy ny, ch c 1 process thc hin thnh cng lnh down(s) vo vng CS...
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 25

3.5 Cc phng php sleep/wakeup


//dng Semaphore gii quyt bi ton Sn xut Tiu dng

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 26

3.5 Cc phng php sleep/wakeup


//dng Semaphore gii quyt bi ton Sn xut Tiu dng

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 27

3.5 Cc phng php sleep/wakeup


Phn tch code dng semaphore gii quyt ng thi 2 vn tng tranh v ng b process trong bi ton Sn xut Tiu dng trong slide trc, ta thy vic dng semaphore kh gn nh v hiu qu. Tuy nhin khuyt im ca vic dng semaphore l an ton khng cao. C th nu ta hon v 2 lnh down(&full) v down(&mutex) trong process Consumer th d dn n deadlock v khi ht sn phm trong kho cha, Consumer ti s kha kho trc ri mi kim tra kho cha, lc ny kho cha rng nn Consumer s dng ch Producer nh thc, tuy nhin Producer s phi ng ch Consumer m kho cha Producer v Consumer ng ch nhau v c 2 s ng mi, y l hin tng deadlock m ta s trnh by trong chng 4.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 28

3.5 Cc phng php sleep/wakeup


2. Phng php dng Monitor Monitor l i tng c cung cp sn bi h thng. V cu trc, monitor cng gm nhiu thuc tnh d liu v nhiu tc v chc nng :

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 29

3.5 Cc phng php sleep/wakeup


S khc bit gia Monitor v 1 i tng (module phn mm) bnh thng c th hin bi 2 tnh cht sau : 1. trong monitor, ta c th nh ngha nhiu bin iu kin. Bin iu kin ch c tn, khng c kiu v khng c gi tr nn ta khng dng n nh bin bnh thng. Ch c 2 tc v nh sn c th truy xut bin iu kin : - hm wait(cond) : bt process ng ch trn bin iu kin cond. - hm signal(cond) : nh thc cc process ang ng ch trn bin cond. 2. V mt iu khin, Monitor ch cho php ti a 1 process c vo thi hnh 1 tc v no ca Monitor ti tng thi im. Nh tnh cht ny, ta d dng gii quyt vic loi tr tng h gia cc process khi chng truy xut ng thi 1 ti nguyn dng chung no bng cch t mi on CS vo 1 tc v ring v t tt c cc tc v ny trong mt Monitor no .
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 30

3.5 Cc phng php sleep/wakeup


//dng Monitor gii quyt bi ton Sn xut Tiu dng

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 31

3.5 Cc phng php sleep/wakeup


Code Java dng Monitor hin thc bi ton Sn xut-Tiu dng //c t class ng dng demo bi ton Sn xut Tiu dng public class ProducerConsumer { static final int N = 100; //kch thc kho cha static producer p = new producer(); //i tng thread producer static producer c = new consumer(); //i tng thread consumer static ourMonitor mon = new ourMonitor(); //i tng monitor //im nhp ng dng demo public static void main(String args[]) { p.start(); //khi ng thread Producer c.start(); //khi ng thread Consumer } //(xem tip slide k)

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 32

3.5 Cc phng php sleep/wakeup


Code Java dng Monitor hin thc bi ton Sn xut-Tiu dng //class c t thread Producer static class producer extends Thread { public void run() { int item; while (true) { item = produce_item(); mon.insert (item); } } priavte int produce_item () {...} }

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 33

3.5 Cc phng php sleep/wakeup


Code Java dng Monitor hin thc bi ton Sn xut-Tiu dng //class c t thread Consumer static class consumer extends Thread { public void run() { int item; while (true) { item = mon.remove(); consume_item(item); } } priavte void consume_item (int item) {...} }

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 34

3.5 Cc phng php sleep/wakeup


Code Java dng Monitor hin thc bi ton Sn xut-Tiu dng //class c t Monitor static class our_monitor { private int buffer[] = new int[N]; // kho cha private int count = 0, lo = 0, hi = 0; //cc bin qun l kho cha //hm thm sn phm vo kho cha public synchronized vois insert (int val) { if (count == N) goto_sleep(); //nu kho y th ng buffer[hi] = val; // sn phm vo v tr hi = (hi+1) % N; //tng v tr sn phm count = count +1; //tng counter sn phm if (count == 1) notify(); //nh thc consumer nu cn }
Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 35

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

3.5 Cc phng php sleep/wakeup


Code Java dng Monitor hin thc bi ton Sn xut-Tiu dng //hm ly sn phm t kho cha public synchronized int remove () { int val; if (count == 0) goto_sleep(); //nu kho ht th ng val = buffer[lo]; // ly sn phm t v tr lo = (lo+1) % N; //tng v tr ly sn phm count = count - 1; //gim counter sn phm if (count == N-1) notify(); //nh thc producer nu cn return val; } private void goto_sleep () { try { wait(); } catch (InterruptedException exc) {} } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 36

3.5 Cc phng php sleep/wakeup


3. Phng php gi/nhn thng bo H thng cung cp 2 hm chc nng : send (proc_id, message) cho php gi 1 chui byte ti prcoess proc_id. receive (proc_id, message) cho php ch nhn chui byte t process proc_id gi ti. on code C sau s gii quyt bi ton Sn xut Tiu dng dng phng php gi/nhn thng bo.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 37

3.5 Cc phng php sleep/wakeup


3. Phng php gi/nhn thng bo //Code C hin thc bi ton Sn xut-Tiu dng #define N 100 void Producer(void) { int item; message m; while (TRUE) { item = produce_item(); //to sn phm mi receive(consumer, &m); //ch nhn yu cu t consumer build_message(&m, tiem); //xy dng thng bo cha sn phm send(consumer, &m); //gi n consumer } }

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 38

3.5 Cc phng php sleep/wakeup


3. Phng php gi/nhn thng bo //Code C hin thc bi ton Sn xut-Tiu dng #define N 100 void Consumer(void) { int item; message m; //gi n yu cu sn xut ti Producer for (i = 0; i <N; i++) send (producer, &m); while (TRUE) { receive(producer, &m); //ch nhn sn phm t consumer item = extract_item(&m); //rt trch sn phm mi t thng bo send(producer, &m); //gi yu cu mi n producer consume_item(&tiem); //tiu dng sn phm } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 39

3.6 Cc bi ton IPC kinh in


1. Bi ton 5 SV n cm : 1. bn n c 5 chn cm dnh cho 5 SV, nh s th t t 0 - 4. 2. do thiu a, ch c 5 chic c xen k gia cc chn cm, nh s th t t 0 -4. 3. mi SV n cm cn 1 i a. V lch s, mi SV ch c php ly 2 chic k chn cm ca mnh (chic bn tri v chic bn phi).
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 40

3.6 Cc bi ton IPC kinh in


1. Bi ton 5 SV n cm : 4. hy tm qui trnh n cm cho mi SV sao cho cc iu kin sau c tha : - cc SV n cm c cng ng thi cng tt (hiu qu nht). - cc SV khng c tranh chp nhau trong vic ly i a. - cc SV khng b deadlock trong qu trnh ch ly a.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 41

3.6 Cc bi ton IPC kinh in


1. Bi ton 5 SV n cm : Phn tch hot ng n cm ca SV : - qu trnh n cm khng i hi phi s hu lin tc i a. - qu trnh n cm l hot ng lp, mi chu k gm 3 cng on : 1. ang nhai cm hay ni chuyn. (THINKING) 2. c gng chim hu i a. (HUNGRY) 3. v cm v gp thc n ri a xung bn. (EATING) - trong cng on 1 tn nhiu thi gian nht nhng may mn l trong cng on ny, SV khng cn a (ti nguyn). Cn bc 2 v 3 th rt ngn v cn loi tr tng h gia cc SV.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 42

3.6 Cc bi ton IPC kinh in


1. Bi ton 5 SV n cm : Pht ha qui trnh n cm cho mi SV : #define N 5 void Sinhvien (int i) { while (cn cm) { think(); //cng on 1 take_fork(i); //cng on 2, c th b kt 1 thi gian take_fork((i+1)%N); eat(); put_fork(i); //cng on 3 thng rt nhanh put_fork((i+1)%N); } } Qui trnh n trn d b deadlock, th d nh 5 SV u thc hin lnh take_fork(i); ng thi v u thnh cng. By gi h thc hin tip lnh k th tt c u b dng ch mi mi v khng cn a trn bn.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 43

3.6 Cc bi ton IPC kinh in


1. Bi ton 5 SV n cm : //thut gii ci tin trnh deadlock : #define N 5 void Sinhvien (int i) { while (cn cm) { think(); //cng on 1 L1: take_fork(i); if (!asyn_take_fork((i+1)%5)) { //tht bi put_fork(i); sleep(random()); goto L1; //cng on 2 } eat(); //cng on 3 ... } } Qui trnh n trn trnh c deadlock, nhng cn da vo yu t ngu nhin nn cha hiu qu trit .
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 44

3.6 Cc bi ton IPC kinh in


//thut gii dng semaphore gii quyt tranh chp v ng b : #define N 5 #define LEFT (i-1)%N #define RIGHT (i+1)%N #define THINKING 0 #define HUNGRY 1 #define EATING 2 typedef unsigned int semaphore; int state[N]; semaphore mutex = 1; semaphore s[N]; void Sinhvien (int i) { while (cn cm) { think(); //cng on 1 take_forks(i); //cng on 2, c th b kt 1 thi gian eat(); put_forks(i); //cng on 3 } } Mn : H iu hnh
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Chng 3 : Tng tranh gia cc process Slide 45

3.6 Cc bi ton IPC kinh in


//thut gii dng semaphore gii quyt tranh chp v ng b : void take_forks(int i) { down(&mutex); //m bo 0 tranh chp khi ly a state[i] = HUNGRY; //ghi nhn trng thi ang c gng ly a test(i); //kim tra ly c khng ? nu c s[i] 1 up(&mutex); //nh thc cc SV khc h truy xut a down(&s[i]); //c gng v cm & gp thc n, c th b kt } void test (int i) { if (state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] != EATING) { state[i] = EATING; up(&s[i]); } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

//SV i mun ly a //SV bn tri cha ly //SV bn phi cha ly //ghi nhn SV i ly c a //tng s[i] 1

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 46

3.6 Cc bi ton IPC kinh in


//thut gii dng semaphore gii quyt tranh chp v ng b : void put_forks (int i) { down(&mutex); //m bo 0 tranh chp khi ly a state[i] = THINKING; //ghi nhn trng thi khng dng a test(LEFT); //kim tra ly c khng ? nu c nh thc //SV LEFT dy v cm v gp thc n test(RIGHT); //kim tra ly c khng ? nu c nh thc //SV RIGHT dy v cm v gp thc n up(&mutex); //nh thc cc SV khc h truy xut a }

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 47

3.6 Cc bi ton IPC kinh in


2. Bi ton c/ghi database : 1. c nhiu process cn c/ghi database. 2. lm sao cho vic c/ghi database ca cc process tha cc iu kin sau : khng tranh chp nhau v khng lm hng d liu. vic truy xut database hiu qu cao nht. Cch gii quyt n gin nht : 1. xem ton b database nh 1 ti nguyn dng chung, dng 1 semaphore nh phn db bo v n. 2. bt k process c/ghi database no cng phi down(db) trc khi truy xut database v up(db) sau khi hon tt vic truy xut database.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 48

3.6 Cc bi ton IPC kinh in


2. Bi ton c/ghi database : semaphore db = 1; void Reader (void) { while (cn c datbase) { down(&db); //m bo 0 tranh chp read_database(); //c database up(&db); //nh thc cc process khc dy use_database((); //dng kt qu c c } } void Writer (void) { while (cn ghi database) { prepare_data(); //chun b d liu ghi down(&db); //m bo 0 tranh chp write_database(); //ghi ln database up(&db); //nh thc cc process khc dy } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 49

3.6 Cc bi ton IPC kinh in


2. Bi ton c/ghi database : Thut gii cho Reader slide trc cn km hiu qu, v cc process Reader phi loi tr tng h trong vic c database. Thc t, vic c ng thi database khng lm h database nn cn cho php cc Reader cng c. Gii thut Reader c th hiu chnh thnh : semaphore db = 1, mutex = 1; int rc = 0; void Reader (void) { while (cn c datbase) { down(&mutex); //m bo 0 tranh chp if (++rc == 1) down(&db); //nu l reader u tin th loi tr vi WR up(&mutex); //cho php cc process khc truy xut rc read_database(); //c database down(&mutex); //m bo 0 tranh chp if (--rc == 0) up(&db); //nu l reader cui th cho php writer up(&mutex); //cho php cc process khc truy xut rc use_database(); //dng kt qu c c } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 50

3.6 Cc bi ton IPC kinh in


3. Bi ton tim ht tc : 1. tim ch c 1 gh ht v 1 th ct. 2. tim c hng gh ch N gh. Tm qui trnh lm vic ca th v khch trong tim sao cho cc iu kin sau y c tha : khng tranh chp nhau v vic ngi gh ch v gh ct. t tn nng lng (t thao tc tha) nht. Phn tch : 1. Tim c lc vng, lc nhiu khch. Th nn ng khi khng c khch. Nu c nh thc, th s mi tng khch n gh ct v ct tc cho khch cho n khi ht khch, th li tip tc ng. 2. khi n tim, nu thy cn gh ch, khch s ngi vo 1 gh, nh thc th ri ng ngay. Khi no th nh thc v mi n gh ct th khch thc dy v n ngi vo gh ct ri ng ch th ct xong, tr tin v ra v.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 51

3.6 Cc bi ton IPC kinh in


3. Bi ton tim ht tc : //thut gii cho th dng semaphore semaphore customers = 0; semaphore barbers = 0; semaphore mutex = 1; int waiting = 0; void Barber (void) { while (cn lm vic) { down(&customers); //nu 0 c khch, ng ch down(&mutex); //m bo 0 tranh chp waiting--; //gim s lng khch ch 1 n v up(&barbers); //nh thc 1 khch v mi h ct tc up(&mutex); //cho php cc process khc truy xut waiting cut_hair(); //ct tc cho khch } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 52

Cc bi ton IPC kinh in


3. Bi ton tim ht tc : //thut gii cho khch dng semaphore semaphore customers = 0; semaphore barbers = 0; semaphore mutex = 1; int waiting = 0; void Customer (void) { down(&mutex); //m bo 0 tranh chp if (waiting<CHAIRS) { //nu cn gh ch waiting++; //tng waiting 1 n v up(&customers); //nh thc th dy up(&mutex); //cho php cc process khc truy xut waiting down(&barbers); //ng ch th get_haircut(); //n gh ct cho th ct tc } else up(&mutex); }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : H iu hnh Chng 3 : Tng tranh gia cc process Slide 53

You might also like