You are on page 1of 15

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.

CHNG IV - LUNG
IV.1 Mc ch
Sau khi hc xong chng ny, ngi hc nm c nhng kin thc sau: Cc khi nim gn vi h iu hnh a lung Cc vn lin quan vi lp trnh a lung Cc nh hng ca lung ti vic thit k h iu hnh Cch thc cc h iu hnh hin i h tr lung

IV.2 Gii thiu


M hnh thc thi trong chng 3 gi s rng mt qu trnh l mt chng trnh ang thc thi vi mt lung iu khin. Nhiu h iu hnh hin i hin nay cung cp cc c im cho mt qu trnh cha nhiu lung (thread) iu khin. Trong chng ny gii thiu cc khi nim lin quan vi cc h thng my tnh a lung, gm tho lun Pthread API v lung Java. Chng ta s xem xt nhiu vn c lin quan ti lp trnh a lung v n nh hng nh th no n thit k ca h iu hnh. Cui cng, chng ta s khm ph nhiu h iu hnh hin i h tr lung ti cp nhn nh th no.

IV.3 Tng quan


Mt lung thng c gi l qu trnh nh (lightweight proces-LWP), l mt n v c bn ca vic s dng CPU; n hnh thnh gm: mt nh danh lung (thread ID), mt b m chng trnh, tp thanh ghi v ngn xp. N chia s vi cc lung khc thuc cng mt qu trnh phn m, phn d liu, v ti nguyn h iu hnh nh cc tp tin ang m v cc tn hiu. Mt qu trnh truyn thng (hay qu trnh nng) c mt lung iu khin n. Nu qu trnh c nhiu lung iu khin, n c th thc hin nhiu hn mt tc v ti mt thi im. Hnh VI.1 hin th s khc nhau gia qu trnh n lung v qu trnh a lung.

IV.3.1

S c ng

Nhiu gi phn mm chy trn cc my bn PC l a lung. in hnh, mt ng dng c ci t nh mt qu trnh ring r vi nhiu lung iu khin. Mt trnh duyt Web c th c mt lung hin th hnh nh, vn bn trong khi mt lung khc ly d liu t mng. Mt trnh son tho vn bn c th c mt lung hin th ha, lung th hai c s bm phm trn bn phm t ngi dng, mt lung th ba thc hin vic kim tra chnh t v t vng chy trong ch nn.

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 80

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

Hnh 0-1 Qu trnh n v a lung

Trong nhng trng hp c th mt ng dng n c th c yu cu thc hin nhiu tc v n. Th d, mt trnh phc v web chp nhn cc yu cu khch hng nh trang web, hnh nh, m thanh, ..Mt trnh phc v web c th c nhiu (hng trm) khch hng truy xut ng thi n. Nu trnh phc v web chy nh mt qu trnh n lung truyn thng th n s c th ch phc v mt khch hng ti cng thi im. Lng thi gian m khch hng phi ch yu cu ca n c phc v l rt ln. Mt gii php l c mt trnh phc v chy nh mt qu trnh n chp nhn cc yu cu. Khi trnh phc v nhn mt yu cu, n s to mt qu trnh ring phc v yu cu . Tht vy, phng php to ra qu trnh ny l cch s dng thng thng trc khi lung tr nn ph bin. To ra qu trnh c nh hng rt ln nh c trnh by chng trc. Nu qu trnh mi s thc hin cng tc v nh qu trnh c th ti sao li gnh chu tt c chi ph ? Thng s hiu qu hn cho mt qu trnh cha nhiu lung phc v cng mt mc ch. Tip cn ny s a lung qu trnh trnh phc v web. Trnh phc v s to mt lung ring lng nghe cc yu cu ngi dng; khi yu cu c thc hin n khng to ra qu trnh khc m s to mt lung khc phc v yu cu. Lung cng ng mt vai tr quan trng trong h thng li gi th tc xa (remote process call-RPC). Nh trnh by chng trc, RPCs cho php giao tip lin qu trnh bng cch cung cp c ch giao tip tng t nh cc li gi hm hay th tc thng thng. in hnh, cc trnh phc v RPCs l a lung. Khi mt trnh phc v nhn mt thng ip, n phc v thng ip dng mt lung ring. iu ny cho php phc v nhiu yu cu ng hnh.

IV.3.2

Thun li

Nhng thun li ca lp trnh a lung c th c chia lm bn loi: S p ng: a lung mt ng dng giao tip cho php mt chng trnh tip tc chy thm ch nu mt phn ca n b kha hay ang thc hin mt thao tc di, do gia tng s p ng i vi ngi dng. Th d, mt trnh duyt web vn c th p ng ngi dng bng mt lung trong khi mt nh ang c np bng mt lung khc. Chia s ti nguyn: Mc nh, cc lung chia s b nh v cc ti nguyn ca cc qu trnh m chng thuc v. Thun li ca vic chia s m l n cho php

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 81

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

mt ng dng c nhiu hot ng ca cc lung khc nhau nm trong cng khng gian a ch. Kinh t: cp pht b nh v cc ti nguyn cho vic to cc qu trnh l rt t. V cc lung chia s ti nguyn ca qu trnh m chng thuc v nn n kinh t hn to v chuyn ng cnh gia cc lung. Kh nh gi theo kinh nghim s khc bit chi ph cho vic to v duy tr mt qu trnh hn mt lung, nhng thng n s mt nhiu thi gian to v qun l mt qu trnh hn mt lung. Trong Solaris 2, to mt qu trnh chm hn khong 30 ln to mt lung v chuyn i ng cnh chm hn 5 ln. S dng kin trc a x l: cc li im ca a lung c th pht huy trong kin trc a x l, mi lung thc thi song song trn mt b x l khc nhau. Mt qu trnh n lung ch c th chy trn mt CPU. a lung trn mt my nhiu CPU gia tng tnh ng hnh. Trong kin trc n x l, CPU thng chuyn i qua li gia mi lung qu nhanh to ra hnh nh ca s song song nhng trong thc t ch mt lung ang chy ti mt thi im.

IV.3.3

Lung ngi dng v lung nhn

Chng ta va mi tho lun l xem xt lung nh mt chiu hng chung. Tuy nhin, h tr lung c cung cp hoc cp ngi dng, cho cc lung ngi dng hoc cp nhn, cho cc lung nhn. Lung ngi dng: c h tr di nhn v c ci t bi th vin lung ti cp ngi dng. Th vin cung cp h tr cho vic to lung, lp thi biu, v qun l m khng c s h tr t nhn. V nhn khng bit cc lung cp ngi dng, tt c vic to lung v lp thi biu c thc hin trong khng gian ngi dng m khng cn s can thip ca nhn. Do , cc lung cp ngi dng thng to v qun l nhanh, tuy nhin chng cng c nhng tr ngi. Th d, nu nhn l n lung th bt c lung cp ngi dng thc hin mt li gi h thng nghn s lm cho ton b qu trnh b nghn, thm ch nu cc lung khc sn dng chy trong ng dng. Cc th vin lung ngi dng gm cc lung POSIX Pthreads, Mach C-threads v Solaris 2 UIthreads. Lung nhn: c h tr trc tip bi h iu hnh. Nhn thc hin vic to lung, lp thi biu, v qun l khng gian nhn. V qun l lung c thc hin bi h iu hnh, lung nhn thng to v qun l chm hn lung ngi dng. Tuy nhin, v nhn c qun l cc lung nu mt lung thc hin li gi h thng nghn, nhn c th lp thi biu mt lung khc trong ng dng thc thi. Trong mi trng a x l, nhn c th lp thi biu lung trn mt b x l khc. Hu ht cc h iu hnh hin nay nh Windows NT, Windows 2000, Solaris 2, BeOS v Tru64 UNIX (trc Digital UNIX)-h tr cc lung nhn.

IV.4 M hnh a lung


Nhiu h thng cung cp s h tr c hai lung nhn v lung ngi dng nn to ra nhiu m hnh a lung khc nhau. Chng ta s xem xt ba loi ci t lung thng thng

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 82

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

IV.4.1

M hnh nhiu-mt

M hnh nhiu-mt (nh hnh IV.2) nh x nhiu lung cp ngi dng ti mt lung cp nhn. Qun l lung c thc hin trong khng gian ngi dng v th n hiu qu nhng ton b qu trnh s b kha nu mt lung thc hin li gi h thng kha. V ch mt lung c th truy xut nhn ti mt thi im nn nhiu lung khng th chy song song trn nhiu b x l. Green threads-mt th vin lung c ci t trn cc h iu hnh khng h tr lung nhn dng m hnh nhiu-mt.

Hnh 0-2-M hnh nhiu-mt

IV.4.2

M hnh mt-mt

M hnh mt-mt (hnh IV.3) nh x mi lung ngi dng ti mt lung nhn. N cung cp kh nng ng hnh tt hn m hnh nhiu-mt bng cch cho mt lung khc chy khi mt lung thc hin li gi h thng nghn; n cng cho php nhiu lung chy song song trn cc b x l khc nhau. Ch c mt tr ngi trong m hnh ny l to lung ngi dng yu cu to mt lung nhn tng ng. V chi ph cho vic to lung nhn c th nng ln nng lc thc hin ca ng dng, cc ci t cho m hnh ny gii hn s lung c h tr bi h thng. Windows NT, Windows 2000 v OS/2 ci t m hnh mt-mt ny.

Hnh 0-3-M hnh mt-mt

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 83

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

IV.4.3

M hnh nhiu-nhiu

M hnh nhiu-nhiu (nh hnh VI.4) a hp nhiu lung cp ngi dng ti s lng nh hn hay bng cc lung nhn. S lng cc lung nhn c th c xc nh hoc mt ng dng c th hay mt my c th (mt ng dng c th c cp nhiu lung nhn trn mt b a x l hn trn mt b n x l). Trong khi m hnh nhiu-mt cho php ngi pht trin to nhiu lung ngi dng nh h mun, th ng hnh tht s l khng t c v nhn c th lp thi biu ch mt lung ti mt thi im. M hnh mt-mt cho php ng hnh tt hn nhng ngi pht trin phi cn thn khng to ra qu nhiu lung trong mt ng dng. M hnh nhiu-nhiu gp phi mt trong hai vn khim khuyt: ngi pht trin c th to nhiu lung ngi dng khi cn thit v cc lung nhn tng ng c th chy song song trn mt b a x l. Khi mt lung thc hin mt li gi h thng kha, nhn c th lp thi biu mt lung khc thc thi. Solaris 2, IRIX, HP-UX, v Tru64 UNIX h tr m hnh ny.

Hnh 0-4-M hnh nhiu-nhiu

IV.5 Cp pht lung


Trong phn ny chng ta tho lun cc cp pht xem xt vi cc chng trnh a lung.

IV.5.1

Li gi h thng fork v exec

Trong chng trc chng ta m t li gi h thng fork c dng to mt qu trnh bn sao ring nh th no. Trong mt chng trnh a lung, ng ngha ca cc li gi h thng fork v exec thay i. Nu mt lung trong li gi chng trnh fork th qu trnh mi sao chp li qu trnh tt c lung hay l mt qu trnh n lung mi? Mt s h thng UNIX chn hai n bn fork, mt sao chp li tt c lung v mt sao chp li ch lung c np ln li gi h thng fork. Li gi h thng exec in hnh thc hin cng vic trong cng mt cch nh c m t trong chng trc. Ngha l, nu mt lung np li gi h thng exec, chng trnh c xc nh trong tham s exec s thay th ton b qu trnh-cha tt c lung v cc qu trnh ti nh.

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 84

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

Vic s dng hai n bn fork ph thuc vo ng dng. Nu exec b hy tc th sau khi phn nhnh (forking) th s sao chp li tt c lung l khng cn thit khi chng trnh c xc nh trong cc tham s exec s thay th qu trnh. Trong trng hp ny, vic sao chp li ch gi lung hp l. Tuy nhin, nu qu trnh ring bit ny khng gi exec sau khi phn nhnh th qu trnh ring bit ny nn sao chp li tt c lung.

IV.5.2

S hy b lung

Hy mt lung l mt tc v kt thc mt lung trc khi n hon thnh.Th d, nu nhiu lung ang tm kim ng thi thng qua mt c s d liu v mt lung tr v kt qu, cc lung cn li c th b hy. Mt trng hp khc c th xy ra khi ngi dng nhn mt nt trn trnh duyt web dng trang web ang c ti. Thng mt trang web c ti trong mt lung ring. Khi ngi dng nhn nt stop, lung ang np trang b hy b. Mt lung b hy thng c xem nh lung ch. S hy b mt lung ch c th xy ra hai vin cnh khc nhau: Hy bt ng b: mt lung lp tc kt thc lung ch Hy tr hon: lung ch c th kim tra nh k nu n sp kt thc, cho php lung ch mt c hi t kt thc trong mt cch c th t. S kh khn ca vic hy ny xy ra trong nhng trng hp khi ti nguyn c cp pht ti mt lung b hy hay mt lung b hy trong khi vic cp nht d liu xy ra gia chng, n ang chia s vi cc lung khc. iu ny tr nn c bit kh khn vi s hy bt ng b. H iu hnh thng i li ti nguyn h thng t lung b hy nhng thng n s khng i li tt c ti nguyn. Do , vic hy mt lung bt ng b c th khng gii phng ht ti nguyn h thng cn thit. Mt chn la khc, s hy tr hon thc hin bng mt lung bo hiu rng mt lung ch b hy. Tuy nhin, s hy s xy ra ch khi lung ch kim tra xc nh nu n c hy hay khng. iu ny cho php mt lung kim tra nu n s b hy ti im n c th an ton b hy. Pthreads gi nhng im nh th l cc im hy (cancellation points). Hu ht h iu hnh cho php mt qu trnh hay mt lung b hy bt ng b. Tuy nhin, Pthread API cung cp s hy tr hon. iu ny c ngha rng mt h iu hnh ci t Pthread API s cho php s hy c tr hon.

IV.5.3

Tn hiu qun l

Mt tn hiu (signal) c dng trong h iu hnh UNIX thng bo mt s kin xc nh xy ra. Mt tn hiu c th c nhn hoc ng b hoc bt ng b ph thuc m v l do cho s kin ang c bo hiu. Mt tn hiu hoc ng b hoc bt ng b u theo sau cng mu: Tn hiu c pht sinh bi s xy ra ca mt s kin xc nh. Tn hiu c pht sinh c phn pht ti mt qu trnh. Khi c phn pht xong, tn hiu phi c qun l. Mt th d ca tn hiu ng b gm mt truy xut b nh khng hp l hay chia cho 0. Trong trng hp ny, nu mt chng trnh ang chy thc hin mt trong cc hot ng ny, mt tn hiu c pht sinh. Cc tn hiu ng b c phn pht ti cng mt qu trnh thc hin thao tc gy ra tn hiu (do l do chng c xem ng b).

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 85

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

Khi mt tn hiu c pht sinh bi mt s kin bn ngoi ti mt qu trnh ang chy, qu trnh nhn tn hiu bt ng b. Th d, tn hiu kt thc qu trnh vi phm xc nh (nh <control><C>) hay thi gian ht hn. in hnh, mt tn hiu bt ng b c gi ti qu trnh khc. Mi tn hiu c th c qun l bi mt trong hai b qun l: B qun l tn hiu mc nh B qun l tn hiu c nh ngha bi ngi dng

Mi tn hiu c mt b qun l tn hiu mc nh c thc thi bi nhn khi qun l tn hiu. Hot ng mc nh c th c ghi bi mt hm qun l tn hiu c nh ngha bi ngi dng. Trong trng hp ny, hm c nh ngha bi ngi dng c gi qun l tn hiu hn l hot ng mc nh. C hai tn hiu ng b v bt ng b c th c qun l trong cc cch khc nhau. Mt s tn hiu c th c b qua (nh thay i kch thc ca ca s); cc tn hiu khc c th c qun l bng cch kt thc chng trnh (nh truy xut b nh khng hp l). Qun l tn hiu trong nhng chng trnh n lung khng phc tp; cc tn hiu lun c phn pht ti mt qu trnh. Tuy nhin, phn pht tn hiu l phc tp hn trong nhng chng trnh a lung, nh mt qu trnh c nhiu lung. Mt tn hiu nn c phn pht u? Thng thng, cc tu chn sau tn ti: Phn pht tn hiu ti lung m tn hiu p dng Phn pht tn hiu ti mi lung trong qu trnh. Phn pht tn hiu ti cc lung c th trong qu trnh. Gn mt lung xc nh nhn tt c tn hiu cho qu trnh.

Phng php cho vic phn pht tn hiu ph thuc vo loi tn hiu c pht sinh. Th d, cc tn hiu ng b cn c phn pht ti lung pht sinh ra tn hiu v khng phn pht ti lung no khc trong qu trnh. Tuy nhin, trng hp vi tn hiu bt ng b l khng r rng. Mt s tn hiu bt ng b - nh tn hiu kt thc mt qu trnh (th d:<control><c>)- nn c gi ti tt c lung. Mt s n bn a lung ca UNIX cho php mt lung xc nh tn hiu no s c chp nhn v tn hiu no s b kho. Do , mt vi tn hiu bt ng b c th c phn pht ti ch cc lung khng kho tn hiu. Tuy nhin, v tn hiu cn c qun l ch mt ln, in hnh mt tn hiu c phn pht ch lung u tin c tm thy trong mt lung m khng nghn tn hiu. Solaris 2 ci t bn tu chn; n to mt lung xc nh trong mi qu trnh cho qun l tn hiu. Khi mt tn hiu bt ng b c gi ti mt qu trnh, n c gi ti lung xc nh, sau n phn pht tn hiu ti lung u tin khng kho tn hiu. Mc d Windows 2000 khng cung cp r s h tr tn hiu, nhng chng c th c m phng s dng li gi th tc bt ng b (asynchronous produce callsAPC). Tin ch APC cho php lung ngi dng xc nh hm c gi khi lung ngi dng nhn thng bo v mt s kin xc nh. Nh c hin th bi tn ca n, mt APC rt ging tn hiu bt ng b trong UNIX. Tuy nhin, UNIX phi u tranh vi cch gii quyt tn hiu trong mi trng a lung, phng tin APC phc tp hn nh mt APC c phn pht ti lung xc nh hn qu trnh.

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 86

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

IV.5.4

Nhm lung

Trong phn VI.3, chng ta m t kch bn a lung ca mt trnh phc v web. Trong trng hp ny, bt c khi no trnh phc v nhn mt yu cu, n to mt lung ring phc v yu cu . Ngc li, to mt lung ring tht s cao hn to mt qu trnh ring, d sao mt trnh phc v a lung c th pht sinh vn . Quan tm u tin l lng thi gian c yu cu to lung trc khi phc v yu cu, v lng thi gian xo lung khi n hon thnh. Vn th hai l vn kh gii quyt hn: nu chng ta cho php tt c yu cu ng hnh c phc v trong mt lung mi, chng ta khng thay th gii hn trn s lng lung hot ng ng hnh trong h thng. Nhng lung khng gii hn c th lm cn kit ti nguyn h thng, nh thi gian CPU v b nh. Mt gii php cho vn ny l s dng nhm lung. tng chung nm sau nhm lung l to s lng lung ti thi im khi ng v t chng vo nhm, ni chng ngi v ch cng vic. Khi mt trnh phc v nhn mt yu cu, chng nh thc mt lung t nhm- nu mt lung sn dng truyn n yu cu dch v. Mt khi lung hon thnh dch v ca n, n tr v nhm ang ch cng vic k. Nu nhm khng cha lung sn dng, trnh phc v ch cho ti khi n rnh. Ni c th, cc li ch ca nhm lung l: 1) Thng phc v yu cu nhanh hn vi lung c hn l ch to lung. 2) Mt nhm lung b gii hn s lng lung tn ti bt k thi im no. iu ny c bit quan trng trn nhng h thng khng h tr s lng ln cc lung ng hnh. S lng lung trong nhm c th c t theo kinh nghim (heuristics) da trn cc yu t nh s CPU trong h thng, lng b nh vt l v s yu cu khch hng ng hnh. Kin trc nhm lung tinh vi hn c th t iu chnh s lng lung trong nhm da theo cc mu s dng. Nhng kin trc nh th cung cp li im xa hn ca cc nhm lung nh hn-do tiu tn t b nh hn-khi vic np trn h thng l chm.

IV.5.5

D liu c t lung

Cc lung thuc mt qu trnh chia s d liu ca qu trnh. Tht vy, chia s d liu ny cung cp mt trong nhng li im ca lp trnh a lung. Tuy nhin, mi lung c th cn bn sao d liu xc nh ca chnh n trong mt vi trng hp. Chng ta s gi d liu nh th l d liu c t lung. Th d, trong mt h thng x l giao dch, chng ta c th phc v mi giao dch trong mt lung. Ngoi ra, mi giao dch c th c gn mt danh biu duy nht. gn mi lung vi nh danh duy nht ca n chng ta c th dng d liu c t d liu. Hu ht th vin lung gm Win32 v Pthread cung cp mt s biu mu h tr cho d liu c t lung. Java cng cung cp s h tr nh th.

IV.6 Pthreads
Pthreads tham chiu ti chun POSIX (IEEE 1003.1c) nh ngha API cho vic to v ng b lung. y l mt c t cho hnh vi lung khng l mt ci t.
Bin Son: Th.s Nguyn Ph Trng - 09/2005 Trang 87

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

Ngi thit k h iu hnh c th ci t c t trong cch m h mun. Thng thng, cc th vin ci t c t Pthread b gii hn i vi cc h thng da trn c s ca UNIX nh Solaris 2. H iu hnh Windows thng khng h tr Pthreads mc d cc n bn shareware l sn dng trong phm vi cng cng. Trong phn ny chng ta gii thiu mt s Pthread API nh mt th d cho th vin lung cp ngi dng. Chng ta s xem n nh th vin cp ngi dng v khng c mi quan h khc bit gia mt lung c to dng Pthread v lung c gn vi nhn. Chng trnh C hin th trong hnh di y, m t mt Pthread API c bn xy dng mt chng trnh a lung. Chng trnh hin th trong hnh to mt lung ring xc nh tnh tng ca mt s nguyn khng m. Trong chng trnh Pthread, cc lung ring bt u thc thi trong mt hm xc nh. Trong hnh, y l mt hm runner. Khi chng trnh ny bt u, mt lung ring iu khin bt u trong main. Sau khi khi to, main to ra lung th hai bt u iu khin trong hm runner. By gi chng ta s cung cp tng quan ca chng trnh ny chi tit hn. Tt c chng trnh Pthread phi cha tp tin tiu pthread.h. pthread_t tid khai bo danh biu cho lung s c to. Mi lung c mt tp cc thuc tnh gm kch thc ngn xp v thng tin nh thi. Khai bo pthread_attr_t attr hin din cc thuc tnh cho lung. Chng ta s thit lp cc thuc tnh trong gi hm pthread_attr_init(&attr). V chng ta khng thit lp r thuc tnh, chng ta s dng thuc tnh mc nh c cung cp. Mt lung ring c to vi li gi hm pthread_create. Ngoi ra, truyn nh danh ca lung v cc thuc tnh cho lung, chng ta cng truyn tn ca hm, ni mt lung mi s bt u thc thi, trong trng hp ny l hm runner. Cui cng chng ta s truyn s nguyn c cung cp ti dng lnh, argv[1]. Ti im ny, chng trnh c hai lung: lung khi to trong main v lung thc hin vic tnh tng trong hm runner. Sau khi to lung th hai, lung main s ch cho lung runner hon thnh bng cch gi hm pthread_join. Lung runner s hon thnh khi n gi hm pthread_exit. #include<pthread> #include<stdio.h> int sum: /*D liu ny c chia s bi thread(s)*/ void *runner(void *param); /*lung*/ main(int argc, char *argv[]) { pthread_t tid; /*nh danh ca lung*/ pthread_attr_t attr; /*tp hp cc thuc tnh*/ if(argc !=2){ fprintf(stderr, usage: a.out <integer value>); exit(); } if (atoi(argv[1] < 0)){ fprintf(stderr,%d must be >= 0 \n, atoi(argv[1])); exit(); } /*ly cc thuc tnh mc nh*/ pthread_attr_init(&attr); /*to mt lung*/ pthread_create(&tid,&attr,runner, argv[1]);
Bin Son: Th.s Nguyn Ph Trng - 09/2005 Trang 88

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

/*by gi ch lung kt thc*/ pthread_join(tid,NULL); printf(sum = %d\n,sum); /*Lung s bt u iu khin trong hm ny*/ void *runner(void *param) { int upper = atoi(param); int i; sum = 0; if (upper > 0){ sum+= i; } pthread_exit(0); } }
Hnh 0-5-Chng trnh C a lung dng Pthread API

IV.7 Lung Solaris 2


Solaris 2 l mt n bn ca UNIX vi h tr lung ti cp nhn v cp ngi dng, a x l i xng (SMP) v nh thi thi thc. Solaris 2 ci t Pthread API h tr lung cp ngi dng vi th vin cha APIs cho vic to v qun l lung (c gi lung UI). S khc nhau gia hai th vin ny rt ln, mc d hu ht ngi pht trin hin nay chn th vin Pthread. Solaris 2 cng nh ngha mt cp lung trung gian. Gia lung cp nhn v cp ngi dng l cc qu trnh nh (lightweight process- LWPs). Mi qu trnh cha t nht mt LWP. Th vin lung a hp lung ngi dng trn nhm LWP cho qu trnh v ch lung cp ngi dng hin c ni kt ti mt LWP hon thnh cng vic. Cc lung cn li b kho hoc ch cho mt LWP m chng c th thc thi trn n. Lung cp nhn chun thc thi tt c thao tc trong nhn. Mi LWP c mt lung cp nhn, v mt s lung cp nhn (kernel) chy trn mt phn ca nhn v khng c LWP km theo (th d, mt lung phc v yu cu a ). Cc lung cp nhn ch l nhng i tng c nh thi trong h thng. Solaris 2 ci m hnh nhiu-nhiu; ton b h thng lung ca n c m t trong hnh di y:

Hnh 0-6-Lung Solaris 2

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 89

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

Cc lung cp ngi dng c th gii hn hay khng gii hn. Mt lung cp ngi dng gii hn c gn vnh vin ti mt LWP. Ch lung chy trn LWP v yu cu LWP c th c tn hin ti mt b x l n (xem lung tri nht trong hnh trn). Lin kt mt lung c ch trong trng hp yu cu thi gian p ng nhanh, nh ng dng thi thc. Mt lung khng gii hn gn vnh vin ti bt k LWP no. Tt c cc lung khng gii hn c a hp trong mt nhm cac LWP sn dng cho ng dng. Cc lung khng gii hn l mc nh. Solaris 8 cng cung cp mt th vin lung thay i m mc nh chng lin kt ti tt c cc lung vi mt LWP. Xem xt h thng trong hot ng: bt c mt qu trnh no c th c nhiu lung ngi dng. Cc lung cp ngi dng ny c th c nh thi v chuyn i gia LWPs bi th vin lung khng c s can thip ca nhn. Cc lung cp ngi dng cc k hiu qu v khng c s h tr nhn c yu cu cho vic to hay hu, hay th vin lung chuyn ng cnh t lung ngi dng ny sang lung khc. Mi LWP c ni kt ti chnh xc mt lung cp nhn, ngc li mi lung cp ngi dng l c lp vi nhn. Nhiu LWPs c th trong mt qu trnh, nhng chng c yu cu ch khi lung cn giao tip vi mt nhn. Th d, mt LWP c yu cu mi lung c th kho ng hnh trong li gi h thng. Xem xt nm tp tin khc nhau-c cc yu cu xy ra cng mt lc. Sau , nm LWPs c yu cu v chng ang ch hon thnh nhp/xut trong nhn. Nu mt tc v ch c bn LWPs th yu cu th nm s khng phi ch mt trong nhng LWPs tr v t nhn. B sung mt LWP th su s khng t c g nu ch c cng vic cho nm. Cc lung nhn c nh thi bi b lp thi biu ca nhn v thc thi trn mt hay nhiu CPU trong h thng. Nu mt lung nhn kho (trong khi ch mt thao tc nhp/xut hon thnh), th b x l rnh thc thi lung nhn khc. Nu mt lung b kho ang chy trn mt phn ca LWP th LWP cng kho. trn vng, lung cp ngi dng hin c gn ti LWP cng b kho. Nu mt qu trnh c nhiu hn mt LWP th nhn c th nh thi mt LWP khc. Th vin lung t ng thay i s lng LWPs trong nhm m bo nng lc thc hin tt nht cho ng dng. Th d, nu tt c LWPs trong mt qu trnh b kho bi nhng lung c th chy th th vin t to mt LWP khc c gn ti mt lung ang ch. Do , mt chng trnh c ngn chn t mt chng trnh khc bi s ngho nn ca nhng LWPs khng b kho. LWPs l nhng ti nguyn nhn t duy tr nu chng khng c dng. Th vin lung ages LWPs v xo chng khi chng khng c dng cho khong thi gian di, in hnh khong 5 pht. Cc nh pht trin dng nhng cu trc d liu ci t lung trn Solaris 2: Lung cp ngi dng cha mt lung ID; tp thanh ghi (gm mt b m chng trnh v con tr ngn xp); ngn xp; v u tin (c dng bi th vin cho mc ch nh thi). Khng c cu trc d liu no l ti nguyn nhn; tt c chng tn ti trong khng gian ngi dng. Mt LWP c mt tp thanh ghi cho lung cp nhn n ang chy cng nh b nh v thng tin tnh ton. Mt LWP l mt cu trc d liu nhn v n nm trong khng gian nhn Mt lung nhn ch c mt cu trc d liu nhn v ngn xp. Cu trc d liu gm bn sao cc thanh ghi nhn, con tr ti LWP m n c gn, u tin v thng tin nh thi.

Mi qu trnh trong Solaris 2 gm nhiu thng tin c m t trong khi iu khin qu trnh (Process Control Block-PCB ). Trong thc t, mt qu trnh Solaris 2
Bin Son: Th.s Nguyn Ph Trng - 09/2005 Trang 90

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

cha mt nh danh qu trnh (Process ID-PID); bn b nh; danh sch cc tp tin ang m, u tin; v con tr ca cc lung nhn vi qu trnh (Hnh ).

Hnh 0-7-Qu trnh Solaris 2

IV.8 Lung Windows 2000


Windows 2000 ci t Win32 API. Win32 API l mt API ch yu cho h h iu hnh Windows (Windows 95/98/NT v Windows 2000). Thc vy, nhng g c cp trong phn phn ny p dng ti h h iu hnh ny ng dng Windows chy nh mt qu trnh ring r ni mi qu trnh c th cha mt hay nhiu lung. Windows 2000 dng nh x mt-mt ni m mi lung cp ngi dng nh x ti lung nhn c lin kt ti.Tuy nhin, Windows cng cung cp s h tr cho mt th vin c cu trc (fiber library) cung cp chc nng ca m hnh nhiu-nhiu. Mi lung thuc v mt qu trnh c th truy xut mt khng gian a ch o ca qu trnh. Nhng thnh phn thng thng ca mt lung gm: ID ca lung nh danh duy nht lung Tp thanh ghi biu din trng thi ca b x l Ngn xp ngi dng khi lung ang chy ch ngi dng. Tng t, mi lung cng c mt ngn xp nhn c dng khi lung ang chy trong ch nhn Mt vng lu tr ring c dng bi nhiu th vin thi gian thc v th vin lin kt ng (DLLs).

Tp thanh ghi, ngn xp v vng lu tr ring c xem nh ng cnh ca lung v c c t kin trc ti phn cng m h iu hnh chy trn . Cu trc d liu ch yu ca lung gm: RTHREAD (executive thread block-khi lung thc thi). KTHREAD (kernel thread-khi lung nhn) TEB (thread environment block-khi mi trng lung) Cc thnh phn ch yu ca RTHREAD gm mt con tr ch ti qu trnh no lung thuc v v a ch ca th tc m lung bt u iu khin trong . ETHREAD cng cha mt con tr ch ti KTHREAD tng ng.

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 91

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

KTHREAD gm thng tin nh thi v ng b ha cho lung. Ngoi ra, KTHREAD cha ngn xp nhn (c dng khi lung ang chy trong ch nhn) v con tr ch ti TEB. ETHREAD v KTHREAD tn ti hon ton khng gian nhn; iu ny c ngha ch nhn c th truy xut chng. TEB l cu trc d liu trong khng gian ngi dng c truy xut khi lung ang chy ch ngi dng. Gia nhng trng khc nhau, TEB cha ngn xp ngi dng v mt mng cho d liu c t lung (m Windows gi l lu tr cc b lung)

IV.9 Lung Linux


Nhn Linux c gii thiu trong n bn 2.2. Linux cung cp mt li gi h thng fork vi chc nng truyn thng l to bn sao mt qu trnh. Linux cng cung cp li gi h thng clone m n tng t nh to mt lung. clone c hnh vi rt ging nh fork, ngoi tr thay v to mt bn sao ca qu trnh gi, n to mt qu trnh ring chia s khng gian a ch ca qu trnh gi. N chm dt vic chia s khng gian a ch ca qu trnh cha m mt tc v c nhn bn i x ging rt nhiu mt lung ring r. Chia s khng gian a ch c cho php v vic biu din ca mt qu trnh trong nhn Linux. Mt cu trc d liu nhn duy nht tn ti cho mi qu trnh trong h thng. Mt cu trc d liu nhn duy nht tn ti cho mi qu trnh trong h thng. Tuy nhin, tt hn lu tr d liu cho mi qu trnh trong cu trc d liu l n cha cc con tr ch ti cc cu trc d liu khc ni d liu ny c c lu. Th d, cu trc d liu trn qu trnh cha cc con tr ch ti cc cu trc d liu khc hin din danh sch tp tin ang m, thng tin qun l tn hiu, v b nh o. Khi fork c gi, mt qu trnh mi c to cng vi mt bn sao ca tt c cu trc d liu ca qu trnh cha c lin kt ti. Khi li gi h thng clone c thc hin, mt qu trnh mi ch ti cu trc d liu ca qu trnh cha, do cho php qu trnh con chia s b nh v ti nguyn ca qu trnh cha. Mt tp hp c c truyn nh mt tham s ti li gi h thng clone. Tp hp c ny c dng hin th bao nhiu qu trnh cha c chia s vi qu trnh con. Nu khng c c no c t, khng c chia s xy ra v clone hot ng ging nh fork. Nu tt c nm c c t, qu trnh con chia s mi th vi qu trnh cha. S kt hp khc ca c cho php cc cp chia s khc nhau gia hai mc cao nht ny. iu th v l Linux khng phn bit gia qu trnh v lung. Tht vy, Linux thng s dng thut ng tc v-hn l qu trnh hay lung-khi tham chiu ti dng iu khin trong chng trnh. Ngoi qu trnh c nhn bn, Linux khng h tr a lung, cu trc d liu ring hay th tc nhn. Tuy nhin, nhng ci t Pthreads l sn dng cho a lung cp ngi dng.

IV.10

Lung Java

Nh chng ta thy, h tr cho lung c th c cung cp ti cp ngi dng vi mt th vin nh Pthread. Hn na, hu ht h iu hnh cung cp s h tr cho lung ti cp nhn. Java l mt trong s nh ngn ng cung cp s h tr ti cp ngn ng cho vic to v qun l lung. Tuy nhin, v cc lung c qun l bi my o Java, khng bi mt th vin cp ngi dng hay nhn, rt kh phn cp lung Java nh cp ngi dng hay cp nhn. Trong phn ny chng ta trnh by cc lung Java nh mt thay i i vi m hnh ngi dng nghim ngt hay m hnh
Bin Son: Th.s Nguyn Ph Trng - 09/2005 Trang 92

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

cp nhn. Phn sau chng ta s tho lun mt lung Java c th c nh x ti lung nhn bn di nh th no. Tt c chng trnh to t nht mt lung iu khin n. Thm ch mt chng trnh Java cha ch mt phng thc main chy nh mt lung n trong my o Java. Ngoi ra, Java cung cp cc lnh cho php ngi pht trin to v thao tc cc lung iu khin b sung trong chng trnh.

IV.10.1

To lung

Mt cch to mt lung r rng l to mt lp mi c pht sinh t lp Thread v vit phng thc run ca lp Thread. Tip cn ny c hin th trong hnh sau, n bn Java ca chng trnh a lung xc nh tng cc s nguyn khng m. Mt i tng ca lp pht sinh s chy nh mt lung iu khin n trong my o Java. Tuy nhin, to mt i tng c pht sinh t lp Thread khng to mt lung mi, tri li phng thc start mi tht s to lung mi. Gi phng thc start cho i tng mi thc hin hai th: 1) N cp pht b nh v khi to mt lung mi trong my o Java. 2) N gi phng thc run, thc hin lung thch hp c chy bi my o Java. (Ch , khng th gi phng thc run trc tip, gi phng thc start s gi phng thc run) Class Summation extends Thread { public Summation (int n){ upper = n; } public void run(){ int sum = 0; if (upper>0){ for(int i = 1; i<= upper; i++){ sum+=i; } System.out.println(The sum of +upper+ is + sum); } private int upper; } public class ThreadTester { public static void main(String args[]){ if(args.length>0){ if(Integer.parseInt(args[0])<0) System.err.println(args[0] + must be >= 0.); else{ Summation thrd = new Summation (Integer.parseInt(args[0])); Thrd.start(); }
Bin Son: Th.s Nguyn Ph Trng - 09/2005 Trang 93

i Hc Cn Th - Khoa Cng Ngh Thng Tin - Gio Trnh H iu Hnh V1.0

} Else System.out.println(Usage: summation < integer value); } }


Hnh 0-8- Chng trnh Java tnh tng s nguyn khng m

Khi chng trnh tnh tng thc thi, hai lung c to bi JVM. Lung u tin l lung c ni kt vi ng dng-lung ny bt u thc thi ti phng thc main. Lung th hai l lung Summation c to r rng vi phng thc start. Lung Summation bt u thc thi trong phng thc run ca n. Lung kt thc khi n thot khi phng thc run ca n.

IV.10.2

JVM v h iu hnh ch

Ci t in hnh ca JVM trn nh ca h iu hnh ch (host operating system). Thit lp ny cho php JVM che giu chi tit ci t ca h iu hnh bn di v cung cp mi trng khng i, tru tng cho php chng trnh Java hot ng trn bt k phn cng no h tr JVM. c t cho JVM khng hin th cc lung Java c nh x ti h iu hnh bn di nh th no thay th vic qun i vic quyt nh ci t c th ca JVM. Windows 95/98/NT v Windows 2000 dng m hnh mt-mt; do , mi lung Java cho mt JVM chy trn cc h iu hnh ny nh x ti mt lung nhn. Solaris 2 khi u ci t JVM dng m hnh nhiu-mt. Tuy nhin, n bn 1.1 ca JVM vi Solaris 2.6 c ci t dng m hnh nhiu-nhiu.

IV.11

Tm tt

Lung l mt dng iu khin trong phm vi mt qu trnh. Qu trnh a lung gm nhiu dng iu khin khc nhau trong cng khng gian a ch. Nhng li im ca a lung gm p ng nhanh i vi ngi dng, chia s ti nguyn trong qu trnh, tnh kinh t, v kh nng thun li trong kin trc a x l. Lung cp ngi dng l cc lung c nhn thy bi ngi lp trnh v khng c bit bi nhn. Th vin lung trong khng gian ngi dng in hnh qun l lung cp ngi dng. Nhn ca h iu hnh h tr v qun l cc lung cp nhn. Thng thng, lung cp ngi dng nhanh hn lung cp nhn trong vic to v qun l. C ba loi m hnh khc nhau lin quan n lung cp ngi dng v lung cp nhn. M hnh nhiu-mt nh x nhiu lung ngi dng ti mt lung nhn. M hnh mt-mt nh x mi lung ngi dng ti mt lung nhn tng ng. M hnh nhiu-nhiu a hp nhiu lung ngi dng ti mt s lng nh hn hay bng lung nhn. Nhng chng trnh a lung gii thiu nhiu th thch cho vic lp trnh, gm ng ngha ca li gi h thng fork v exec. Nhng vn khc gm hu b lung, qun l tn hiu, v d liu c t lung. Nhiu h iu hnh hin i cung cp nhn h tr lung nh Windows NT, Windows 2000, Solaris 2 v Linux. Pthread API cung cp tp hp cc hm to v qun l lung ti cp ngi dng. Java cung cp mt API tng t cho vic h tr lung. Tuy nhin, v cc lung Java c qun l bi JVM v khng phi th vin lung cp ngi dng hay nhn, chng khng ri vo loi lung ngi dng hay nhn.

Bin Son: Th.s Nguyn Ph Trng - 09/2005

Trang 94

You might also like