Tải bản đầy đủ (.pdf) (25 trang)

Nguyên lí hệ điều hành

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (806.58 KB, 25 trang )

Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 1 -
Chng 2: Qun lý tin trình
Trong chng này chúng ta s tìm hiu chc nng qun lý tin trình ca Hu hành : làm th nào  phân
chia CPU cho các tin trình ? Theo vt x lý ca tin trình ? Và các thao tác trên tin trình ?
2.1 T chc qun lý tin trình
2.1.1. Các trng thái ca tin trình
Trng thái ca tin trình ti mt thi m c xác nh bi hot ng hin thi ca tin trình ti thi m ó.
Trong quá trình sng, mt tin trình thay i trng thái do nhiu nguyên nhân nh : phi ch mt s kin nào
ó xy ra, hay i mt thao tác nhp/xut hoàn tt, buc phi dng hot ng do ã ht thi gian x lý …
i mt thi m, mt tin trình có th nhn trong mt các trng thái sau ây :
i to : tin trình ang c to lp.
Running : các ch th ca tin trình ang c x lý.
Blocked : tin trình ch c cp phát mt tài nguyên, hay ch mt
 kin xy ra .
Ready : tin trình chc cp phát CPU  x lý.
t thúc : tin trình hoàn tt x lý.
Hình 2.2 S chuyn trng thái gia các tin trình
i mt thi m, ch có mt tin trình có th nhn trng thái running trên mt b x lý bt k. Trong khi ó,
nhiu tin trình có th trng thái blocked hay ready.
Các cung chuyn tip trong s trng thái biu din sáu s chuyn trng thái có th xy ra trong các u kin
sau :
Tin trình mi to c a vào h thng
u phi cp phát cho tin trình mt khong thi gian s dng CPU
Tin trình kt thúc
Tin trình yêu cu mt tài nguyên nhng cha c áp ng vì tài nguyên cha sn sàng  cp phát ti thi
m ó ; hoc tin trình phi ch mt s kin hay thao tác nhp/xut.
u phi chn mt tin trình khác  cho x lý .
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 2 -
Tài nguyên mà tin trình yêu cu tr nên sn sàng  cp phát ; hay s kin hoc thao tác nhp/xut tin trình


ang i hoàn tt.
2.1.2 Ch x lý ca tin trình
m bo h thng hot ng úng n, hu hành cn phi c bo v khi s xâm phm ca các tin
trình. Bn thân các tin trình và d liu cng cn c bo v tránh các nh hng sai lc ln nhau. Mt
cách tip cn  gii quyt vn  là phân bit hai ch x lý cho các tin trình : ch không c quyn và
chc quyn nh vào s tr giúp ca c ch phn cng. Tp lnh ca CPU c phân chia thành các lnh
c quyn và lnh không c quyn. C ch phn cng ch cho phép các lnh c quyn c thc hin trong
ch c quyn. Thông thng ch có hu hành hot ng trong ch c quyn, các tin trình ca
ngi dùng hot ng trong ch không c quyn, không thc hin c các lnh c quyn có nguy cnh
ng n h thng. Nh vy hu hành c bo v. Khi mt tin trình ngi dùng gi n mt li gi h
thng, tin trình ca hu hành x lý li gi này s hot ng trong chc quyn, sau khi hoàn tt thì tr
quyn u khin v cho tin trình ngi dùng trong ch không c quyn.
Hình v 2.3 Hai ch x lý
2.1.3. Cu trúc d liu khi qun lý tin trình
u hành qun lý các tin trình trong h thng thông qua khi qun lý tin trình (process control block -
PCB). PCB là mt vùng nh lu tr các thông tin mô t cho tin trình, vi các thành phn ch yu bao gm :
nh danh ca tin trình (1) : giúp phân bit các tin trình
Trng thái tin trình (2): xác nh hot ng hin hành ca tin trình.
Ng cnh ca tin trình (3): mô t các tài nguyên tin trình ang trong quá trình, hoc  phc v cho hot
ng hin ti, hoc  làm c s phc hi hot ng cho tin trình, bao gm các thông tin v:
Trng thái CPU: bao gm ni dung các thanh ghi, quan trng nht là con tr lnh IP lu tra ch câu lnh k
tip tin trình s x lý. Các thông tin này cn c lu tr khi xy ra mt ngt, nhm có th cho phép phc hi
hot ng ca tin trình úng nh trc khi b ngt.
 x lý: dùng cho máy có cu hình nhiu CPU, xác nh s hiu CPU mà tin trình ang s dng.
 nh chính: danh sách các khi nhc cp cho tin trình.
Tài nguyên s dng: danh sách các tài mguyên h thng mà tin trình ang s dng.
Tài nguyên to lp: danh sách các tài nguyên c tin trình to lp.
Thông tin giao tip (4): phn ánh các thông tin v quan h ca tin trình vi các tin trình khác trong h
thng :
Tin trình cha: tin trình to lp tin trình này .

Tin trình con: các tin trình do tin trình này to lp .
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 3 -
u tiên : giúp bu phi có thông tin  la chn tin trình c cp CPU.
Thông tin thng kê (5): ây là nhng thông tin thng kê v hot ng ca tin trình, nh thi gian ã s dng
CPU,thi gian ch. Các thông tin này có th có ích cho công vic ánh giá tình hình h thng và doán các
tình hung tng lai.
Hình v 2.4 Khi mô t tin trình
2.1.4. Thao tác trên tin trình
u hành cung cp các thao tác ch yu sau ây trên mt tin trình :
o lp tin trình (create)
t thúc tin trình (destroy)
m dng tin trình (suspend)
tái kích hot tin trình (resume)
thay i u tiên tin trình
2.1.4.1. To lp tin trình
Trong quá trình x lý, mt tin trình có th to lp nhiu tin trình mi bng cách s dng mt li gi h thng
ng ng. Tin trình gi li gi h thng  to tin trình mi sc gi là tin trình cha, tin trình c to
i là tin trình con. Mi tin trình con n lt nó li có th to các tin trình mi…quá trình này tip tc s
o ra mt cây tin trình.
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 4 -
Hình v2.5 Mt cây tin trình trong h thng UNIX
Các công vic hu hành cn thc hin khi to lp tin trình bao gm :
nh danh cho tin trình mi phát sinh
a tin trình vào danh sách qun lý ca h thng
xác nh u tiên cho tin trình
o PCB cho tin trình
p phát các tài nguyên ban u cho tin trình
Khi mt tin trình to lp mt tin trình con, tin trình con có th sc hu hành trc tip cp phát tài

nguyên hoc c tin trình cha cho tha hng mt s tài nguyên ban u.
Khi mt tin trình to tin trình mi, tin trình ban u có th x lý theo mt trong hai kh nng sau :
Tin trình cha tip tc x lý ng hành vi tin trình con.
Tin trình cha chn khi mt tin trình con nào ó, hoc tt c các tin trình con kt thúc x lý.
Các hu hành khác nhau có th chn la các cài t khác nhau  thc hin thao tác to lp mt tin trình.
2.1.4.2. Kt thúc tin trình
t tin trình kt thúc x lý khi nó hoàn tt ch th cui cùng và s dng mt li gi h thng  yêu cu h
u hành hy b nó. ôi khi mt tin trình có th yêu cu hu hành kt thúc x lý ca mt tin trình khác.
Khi mt tin trình kt thúc, hu hành thc hin các công vic :
thu hi các tài nguyên h thng ã cp phát cho tin trình
y tin trình khi tt c các danh sách qun lý ca h thng
y b PCB ca tin trình
u ht các hu hành không cho phép các tin trình con tip tc tn ti nu tin trình cha ã kt thúc. Trong
nhng h thng nh th, hu hành s tng phát sinh mt lot các thao tác kt thúc tin trình con.
2.1.5. Cp phát tài nguyên cho tin trình
Khi có nhiu ngi s dng ng thi làm vic trong h thng, hu hành cn phi cp phát các tài nguyên
theo yêu cu cho mi ngi s dng. Do tài nguyên h thng thng rt gii hn và có khi không th chia s,
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 5 -
nên him khi tt c các yêu cu tài nguyên ng thi u c tha mãn. Vì th cn phi nghiên cu mt
phng pháp  chia s mt s tài nguyên hu hn gia nhiu tin trình ngi dùng ng thi. Hu hành
qun lý nhiu loi tài nguyên khác nhau (CPU, b nh chính, các thit b ngoi vi …), vi mi loi cn có mt
 ch cp phát và các chin lc cp phát hiu qa. Mi tài nguyên c biu din thông qua mt cu trúc d
liu, khác nhau v chi tit cho tng loi tài nguyên, nhng c bn cha ng các thông tin sau :
nh danh tài nguyên
Trng thái tài nguyên : ây là các thông tin mô t chi tit trng thái tài nguyên : phn nào ca tài nguyên ã
p phát cho tin trình, phn nào còn có th s dng ?
Hàng i trên mt tài nguyên : danh sách các tin trình ang chc cp phát tài nguyên tng ng.
 cp phát : là n code m nhim vic cp phát mt tài nguyên c thù. Mt s tài nguyên òi hi các
gii thut c bit (nh CPU, b nh chính, h thng tp tin), trong khi nhng tài nguyên khác (nh các thit b

nhp/xut) có th cn các gii thut cp phát và gii phóng tng quát hn.
Hình 2.6 Khi qun lý tài nguyên
Các mc tiêu ca k thut cp phát :
o m mt s lng hp l các tin trình truy xut ng thi n các tài nguyên không chia sc.
p phát tài nguyên cho tin trình có yêu cu trong mt khong thi gian trì hoãn có th chp nhn c.
i u hóa s s dng tài nguyên.
 có th thõa mãn các mc tiêu k trên, cn phi gii quyt các vn  ny sinh khi có nhiu tin trình ng
thi yêu cu mt tài nguyên không th chia s.
2.2 u phi tin trình
Trong môi trng a chng, có th xy ra tình hung nhiu tin trình ng thi sn sàng  x lý. Mc tiêu
a các h phân chia thi gian (time-sharing) là chuyn i CPU qua li gia các tin trình mt cách thng
xuyên  nhiu ngi s dng có th tng tác cùng lúc vi tng chng trình trong quá trình x lý.
 thc hin c mc tiêu này, hu hành phi la chn tin trình c x lý tip theo. Bu phi s s
ng mt gii thut u phi thích hp  thc hin nhim v này. Mt thành phn khác ca hu hành cng
tim n trong công tác u phi là  phân phi (dispatcher). B phân phi s chu trách nhim chuyn i ng
nh và trao CPU cho tin trình c chn bi bu phi  x lý.
2.2.1. Gii thiu
2.2.1.1. Mc tiêu u phi
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 6 -
u phi không cung cp c ch, mà a ra các quyt nh. Các hu hành xây dng nhiu chin lc
khác nhau  thc hin vic u phi, nhng tu chung cn t c các mc tiêu sau :
a) S công bng ( Fairness) :
Các tin trình chia s CPU mt cách công bng, không có tin trình nào phi chi vô hn c cp phát
CPU
b) Tính hiu qa (Efficiency) :
 thng phi tn dng c CPU 100% thi gian.
c) Thi gian áp ng hp lý (Response time) :
c tiu hoá thi gian hi áp cho các tng tác ca ngi s dng
d) Thi gian lu li trong h thng ( Turnaround Time) :

c tiu hóa thi gian hoàn tt các tác v x lý theo lô.
e) Thông lng ti a (Throughput ) :
c i hóa s công vic c x lý trong mt n v thi gian.
Tuy nhiên thng không th tha mãn tt c các mc tiêu k trên vì bn thân chúng có s mâu thun vi nhau
mà ch có th dung hòa chúng  mc  nào ó.
2.2.1.2. Các c m ca tin trình
u phi hot ng ca các tin trình là mt vn  rt phc tp, òi hi hu hành khi gii quyt phi xem
xét nhiu yu t khác nhau  có tht c nhng mc tiêu  ra. Mt sc tính ca tin trình cn c
quan tâm nh tiêu chun u phi :
a) Tính hng xut / nhp ca tin trình ( I/O-boundedness):
Khi mt tin trình nhn c CPU, ch yu nó ch s dng CPU n khi phát sinh mt yêu cu nhp xut ?
Hot ng ca các tin trình nh th thng bao gm nhiu lt s dng CPU , mi lt trong mt thi gian
khá ngn.
b) Tính hng x lý ca tin trình ( CPU-boundedness):
Khi mt tin trình nhn c CPU, nó có khuynh hng s dng CPU n khi ht thi gian dành cho nó ? Hot
ng ca các tin trình nh th thng bao gm mt s ít lt s dng CPU , nhng mi lt trong mt thi
gian  dài.
c) Tin trình tng tác hay x lý theo lô :
Ngi s dng theo kiu tng tác thng yêu cu c hi áp tc thi i vi các yêu cu ca h, trong khi
các tin trình ca tác vc x lý theo lô nói chung có th trì hoãn trong mt thi gian chp nhn c.
d) u tiên ca tin trình :
Các tin trình có thc phân cp theo mt s tiêu chun ánh giá nào ó, mt cách hp lý, các tin trình
quan trng hn ( có u tiên cao hn) cn c u tiên hn.
e) Thi gian ã s dng CPU ca tin trình :
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 7 -
t s quan m u tiên chn nhng tin trình ã s dng CPU nhiu thi gian nht vì hy vng chúng s cn
ít thi gian nht  hoàn tt và ri khi h thng . Tuy nhiên cng có quan m cho rng các tin trình nhn
c CPU trong ít thi gian là nhng tin trình ã phi ch lâu nht, do vy u tiên chn chúng.
f) Thi gian còn li tin trình cn  hoàn tt :

Có th gim thiu thi gian chi trung bình ca các tin trình bng cách cho các tin trình cn ít thi gian
nht  hoàn tt c thc hin trc. Tuy nhiên áng tic là rt him khi bit c tin trình cn bao nhiêu
thi gian na  kt thúc x lý.
2.2.1.3. u phi không c quyn và u phi c quyn (preemptive/nopreemptive)
Thut toán u phi cn xem xét và quyt nh thi m chuyn i CPU gia các tin trình. Hu hành có
th thc hin c chu phi theo nguyên lý c quyn hoc không c quyn.
u phi c quyn : Nguyên lý u phic quyn cho phép mt tin trình khi nhn c CPU s có
quyn c chim CPU n khi hoàn tt x lý hoc t nguyn gii phóng CPU. Khi ó quyt nh u phi
CPU s xy ra trong các tình hung sau:
Khi tin trình chuyn t trng thái ang x lý(running) sang trng thái b khóa blocked ( ví d ch mt thao
tác nhp xut hay ch mt tin trình con kt thúc…).
Khi tin trình kt thúc.
Các gii thut c quyn thng n gin và d cài t. Tuy nhiên chúng thng không thích hp vi các h
thng tng quát nhiu ngi dùng, vì nu cho phép mt tin trình có quyn x lý bao lâu tùy ý, có ngha là tin
trình này có th gi CPU mt thi gian không xác nh, có th ngn cn nhng tin trình còn li trong h thng
có mt c hi  x lý.
u phi không c quyn : Ngc vi nguyên lý c quyn, u phi theo nguyên lý không c quyn
cho phép tm dng hot ng ca mt tin trình ang sn sàng x lý. Khi mt tin trình nhn c CPU, nó
n c s dng CPU n khi hoàn tt hoc t nguyn gii phóng CPU, nhng mt tin trình khác có u
tiên có th dành quyn s dng CPU ca tin trình ban u. Nh vy là tin trình có th b tm dng hot ng
t c lúc nào mà không c báo trc,  tin trình khác x lý. Các quyt nh u phi xy ra khi :
Khi tin trình chuyn t trng thái ang x lý (running) sang trng thái b khóa blocked ( ví d ch mt thao
tác nhp xut hay ch mt tin trình con kt thúc…).
Khi tin trình chuyn t trng thái ang x lý (running) sang trng thái ready ( ví d xy ra mt ngt).
Khi tin trình chuyn t trng thái ch (blocked) sang trng thái ready ( ví d mt thao tác nhp/xut hoàn
t).
Khi tin trình kt thúc.
Các thut toán u phi theo nguyên tc không c quyn ngn cn c tình trng mt tin trình c chim
CPU, nhng vic tm dng mt tin trình có th dn n các mâu thun trong truy xut, òi hi phi s dng
t phng pháp ng b hóa thích hp  gii quyt.

Trong các h thng s dng nguyên lý u phi c quyn có th xy ra tình trng các tác v cn thi gian x
lý ngn phi ch tác v x lý vi thi gian rt dài hoàn tt! Nguyên lý u phi c quyn thng ch thích
p vi các h x lý theo lô.
i vi các h thng tng tác(time sharing), các h thi gian thc (real time),cn phi s dng nguyên lý u
phi không c quyn  các tin trình quan trng có c hi hi áp kp thi. Tuy nhiên thc hin u phi
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 8 -
theo nguyên lý không c quyn òi hi nhng c ch phc tp trong vic phân nh u tiên, và phát sinh
thêm chi phí khi chuyn i CPU qua li gia các tin trình.
2.2.2. T chc u phi
2.2.2.1. Các danh sách s dng trong quá trình u phi.
u hành s dng hai loi danh sách  thc hin u phi các tin trình là danh sách sn sàng (ready list)
và danh sách chi(waiting list).
Khi mt tin trình bt u i vào h thng, nó c chèn vào danh sách các tác v (job list). Danh sách này bao
m tt c các tin trình ca h thng. Nhng ch các tin trình ang thng trú trong b nh chính và  trng
thái sn sàng tip nhn CPU  hot ng mi c a vào danh sách sn sàng.
u phi s chn mt tin trình trong danh sách sn sàng và cp CPU cho tin trình ó. Tin trình c cp
CPU s thc hin x lý, và có th chuyn sang trng thái ch khi xy ra các s kin nhi mt thao tác
nhp/xut hoàn tt, yêu cu tài nguyên cha c tha mãn, c yêu cu tm dng Khi ó tin trình sc
chuyn sang mt danh sách chi.
u hành ch s dng mt danh sách sn sàng cho toàn h thng, nhng mi mt tài nguyên ( thit b ngoi
vi ) có mt danh sách chi riêng bao gm các tin trình ang chc cp phát tài nguyên ó.
Hình 2.9 Các danh sách u phi
Quá trình x lý ca mt tin trình tri qua nhng chu k chuyn i qua li gia danh sách sn sàng và danh
sách chi. S di ây mô t su phi các tin trình da trên các danh sách ca h thng.
Thot u tin trình mi c t trong danh sách các tin trình sn sàng (ready list), nó si trong danh sách
này cho n khi c chn  cp phát CPU và bt u x lý. Sau ó có th xy ra mt trong các tình hung
sau :
Tin trình phát sinh mt yêu cu mt tài nguyên mà h thng cha tháp ng, khi ó tin trình sc
chuyn sang danh sách các tin trình ang ch tài nguyên tng ng.

Tin trình có th b bt buc tm dng x lý do mt ngt xy ra, khi ó tin trình c a tr li vào danh
sách sn sàng  chc cp CPU cho lt tip theo.
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 9 -
Hình 2.10  chuyn i gia các danh sách u phi
Trong trng hp u tiên, tin trình cui cùng s chuyn t trng thái blocked sang trng thái ready và li
c a tr vào danh sách sn sàng. Tin trình lp li chu k này cho n khi hoàn tt tác v thì c h thng
y b khi mi danh sách u phi.
2.2.2.2. Các cp u phi
Thc ra công vic u phi c hu hành thc hin  hai mc  : u phi tác v (job scheduling) và
u phi tin trình ( process scheduling).
a) u phi tác v
Quyt nh la chn tác v nào c a vào h thng, và np nhng tin trình ca tác vó vào b nh chính
 thc hin. Chc nng u phi tác v quyt nh mc a chng ca h thng ( s lng tin trình trong
 nh chính). Khi h thng to lp mt tin trình, hay có mt tin trình kt thúc x lý thì chc nng u phi
tác v mi c kích hot. Vì mc a chng tng i n nh nên chc nng u phi tác v có tn sut
hot ng thp .
 h thng hot ng tt, b u phi tác v cn bit tính cht ca tin trình là hng nhp xut (I/O
bounded) hay ng x lý ( CPU bounded). Mt tin trình c gi là hng nhp xut nu nó ch yu nó ch
 dng CPU  thc hin các thao tác nhp xut. Ngc li mt tin trình c gi là hng x lý u nó ch
u nó ch s dng CPU  thc hin các thao tác tính toán.  cân bng hot ng ca CPU và các thit b
ngoi vi, bu phi tác v nên la chn các tin trình  np vào b nh sao cho h thng là s pha trn hp
lý gia các tin trình ng nhp xut và các tin trình ng x lý
b) u phi tin trình
Chn mt tin trình  trng thái sn sàng ( ã c np vào b nh chính, và có  tài nguyên  hot ng ) và
p phát CPU cho tin trình ó thc hin. Bu phi tin trình có tn sut hot ng cao, sau mi ln xy ra
ngt ( do ng h báo gi, do các thit b ngoi vi ), thng là 1 ln trong khong 100ms. Do vy  nâng cao
hiu sut ca h thng, cn phi tng tc  x lý ca bu phi tin trình. Chc nng u phi tin trình là
t trong chc nng c bn, quan trng nht ca hu hành.
Trong nhiu hu hành, có th không có bu phi tác v hoc tách bit rt ít i vi bu phi tin

trình. Mt vài hu hành li a ra mt cp u phi trung gian kt hp c hai cp u phi tác v và
tin trình
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 10 -
Hình 2.11 Cp u phi trung gian
2.2.3. Các chin lc u phi
2.2.3.1. Chin lc FIFO
Nguyên tc : CPU c cp phát cho tin trình u tiên trong danh sách sn sàng có yêu cu, là tin trình
c a vào h thng sm nht. ây là thut toán u phi theo nguyên tc c quyn. Mt khi CPU c
p phát cho tin trình, CPU chc tin trình t nguyn gii phóng khi kt thúc x lý hay khi có mt yêu cu
nhp/xut.
Hình 2.12 u phi FIFO
Ví d :
Tin trình Thi m vào RL Thi gian x lý
P1 0 24
P2 1 3
P3 2 3
Th t cp phát CPU cho các tin trình là :
P1 P2 P3
0 ‘24 27 30
thi gian chi c x lý là 0 i vi P1, (24 -1) vi P2 và (24+3-2) vi P3. Thi gian ch trung bình là (
0+23+25)/3 = 16 milisecondes.
2.2.3.2. Chin lc phân phi xoay vòng (Round Robin)
Nguyên tc : Danh sách sn sàng c x lý nh mt danh sách vòng, bu phi ln lt cp phát cho
ng tin trình trong danh sách mt khong thi gian s dng CPU gi là quantum. ây là mt gii thut u
phi không c quyn : khi mt tin trình s dng CPU n ht thi gian quantum dành cho nó, hu hành
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 11 -
thu hi CPU và cp cho tin trình k tip trong danh sách. Nu tin trình b khóa hay kt thúc trc khi s dng
t thi gian quantum, hu hành cng lp tc cp phát CPU cho tin trình khác. Khi tin trình tiêu th ht

thi gian CPU dành cho nó mà cha hoàn tt, tin trình c a tr li vào cui danh sách sn sàng i
c cp CPU trong lt k tip.
Ví d :
Hình 2.13 u phi Round Robin
Tin trình Thi m vào RL Thi gian x lý
P1 0 24
P2 1 3
P3 2 3
u s dng quantum là 4 milisecondes, th t cp phát CPU s là :
P1 P2 P3 P1 P1 P1 P1 P1
0 ‘4 7 10 14 18 22 26 30
Thi gian chi trung bình s là (0+6+3+5)/3 = 4.66 milisecondes.
u có n tin trìh trong danh sách sn sàng và s dng quantum q, thì mi tin trình sc cp phát CPU 1/n
trong tng khong thi gian q. Mi tin trình s không phi i quá (n-1)qn v thi gian trc khi nhn c
CPU cho lt k tip.
2.2.3.3. u phi vi u tiên
Nguyên tc : Mi tin trình c gán cho mt u tiên tng ng, tin trình có u tiên cao nht s
c chn  cp phát CPU u tiên. u tiên có thc nh ngha ni ti hay nh vào các yu t bên
ngoài. u tiên ni ti s dng các i lng có tho lng  tính toán u tiên ca tin trình, ví d các
gii hn thi gian, nhu cu b nhu tiên cng có thc gán t bên ngoài da vào các tiêu chun do
u hành nh tm quan trng ca tin trình, loi ngi s dng s hu tin trình…
Gii thut u phi vi u tiên có th theo nguyên tc c quyn hay không c quyn. Khi mt tin trình
c a vào danh sách các tin trình sn sàng, u tiên ca nó c so sánh vi u tiên ca tin trình
hin hành ang x lý. Gii thut u phi vi u tiên và không c quyn s thu hi CPU t tin trình hin
hành  cp phát cho tin trình mi nu u tiên ca tin trình này cao hn tin trình hin hành. Mt gii
thut c quyn s chn gin chèn tin trình mi vào danh sách sn sàng, và tin trình hin hành vn tip tc
 lý ht thi gian dành cho nó.
Ví d : (u tiên 1 > u tiên 2> u tiên 3)
Tin trình
Thi m vào RL u tiên Thi gian x lý

P1 0 3 24
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 12 -
P2 1 1 3
P3 2 2 3
 dng thut gii c quyn, th t cp phát CPU nh sau :
P1 P2 P3
0 ‘24 27 30
 dng thut gii không c quyn, th t cp phát CPU nh sau :
P1 P2 P3 P1
0 ‘1 4 7 30
2.2.3.4. Chin lc công vic ngn nht (Shortest-job-first SJF)
Nguyên tc : ây là mt trng hp c bit ca gii thut u phi vi u tiên. Trong gii thut này, 
u tiên pc gán cho mi tin trình là nghch o ca thi gian x lý t mà tin trình yêu cu : p = 1/t. Khi
CPU c t do, nó sc cp phát cho tin trình yêu cu ít thi gian nht  kt thúc- tin trình ngn nht.
Gii thut này cng có thc quyn hay không c quyn. S chn la xy ra khi có mt tin trình mi c
a vào danh sách sn sàng trong khi mt tin trình khác ang x lý. Tin trình mi có th s hu mt yêu cu
thi gian s dng CPU cho ln tip theo (CPU-burst) ngn hn thi gian còn li mà tin trình hin hành cn x
lý. Gii thut SJF không c quyn s dng hot ng ca tin trình hin hành, trong khi gii thut c quyn
 cho phép tin trình hin hành tip tc x lý.
Ví d :
Tin trình Thi m vào
RL
Thi gian x

P1 0 6
P2 1 8
P3 2 4
P4 3 2
 dng thut gii SJF c quyn, th t cp phát CPU nh sau:

P1 P4 P3 P2
0 6 8 12 20
 dng thut gii SJF không c quyn, th t cp phát CPU nh sau:
P1 P4 P1 P3 P2
0 3 5 8 12 20
2.2.3.5. Chin lc u phi vi nhiu mc u tiên
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 13 -
Nguyên tc : Ý tng chính ca gii thut là phân lp các tin trình tùy theo u tiên ca chúng  có
cách thc u phi thích hp cho tng nhóm. Danh sách sn sàng c phân tách thành các danh sách riêng
bit theo cp u tiên, mi danh sách bao gm các tin trình có cùng u tiên và c áp dng mt gii
thut u phi thích hp u phi. Ngoài ra, còn có mt gii thut u phi gia các nhóm, thng gii
thut này là gii thut không c quyn và s dng u tiên cnh.Mt tin trình thuc v danh sách  cp
u tiên i s chc cp phát CPU khi các danh sách  cp u tiên ln hn iã trng.
Hình 2.14u phi nhiu cp u tiên
Hình 2.15 u phi Multilevel Feedback
2.2.3.6. Chin lc u phi X s (Lottery)
Nguyên tc : Ý tng chính ca gii thut là phát hành mt s vé s và phân phi cho các tin trình trong h
thng. Khi n thi m ra quyt nh u phi, s tin hành chn 1 vé "trúng gii", tin trình nào s hu vé
này sc nhn CPU
Tho lun : Gii thut Lottery cung cp mt gii pháp n gin nhng bo m tính công bng cho thut
toán u phi vi chi phí thp  cp nht u tiên cho các tin trình :
TÓM TT
Trong sut chu trình sng, tin trình chuyn i qua li gia các trng thái ready, running và blocked.
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 14 -
u phi ca hu hành chu trách nhim áp dng mt gai thut u phi thích hp  chn tin trình
thích hp c s dng CPU, và b phân phi s chuyn giao CPU cho tin trình này.
Các gii thut u phi thông dng : FIFO, RoundRobin, u phi vi u tiên, SJF, Multilevel Feedback
Câu hi cng c bài hc

Các câu hi cn tr li c sau bài hc này :
1. Thông tin lu tr trong PCB và TCB ?
2. T chc u phi tin trình ?
3. Phân tích u, khuyt ca các chin lc u phi
Bài tp
Bài 1. Xét tp các tin trình sau (vi thi gian yêu cu CPU và u tiên kèm theo) :
Tin trình Thi m vào
RL
Thi gian CPU u tiên
P
1
0 10 3
P
2
1 1 1
P
3
2 2 3
P
4
3 1 4
P
5
4 5 2
Gi s các tin trình cùng c a vào h thng ti thi m 0
a)Cho bit kt quu phi hot ng ca các tin trình trên theo thut toán FIFO; SJF; u phi theo u
tiên c quyn (u tiên 1 > 2 > ); và RR (quantum=2).
b)Cho bit thi gian lu li trong h thng (turnaround time) ca tng tin trình trong tng thut toán u phi
 câu a.
c)Cho bit thi gian ch trong h thng (waiting time) ca tng tin trình trong tng thut toán u phi  câu

a.
d)Thut toán u phi nào trong các thut toán  câu a cho thi gian ch trung bình là cc tiu ?
Bài 2. Gi s có các tin trình sau trong h thng :
Tin trình Thi m vào RL Thi gian CPU
P
1
0.0 8
P
2
0.4 4
P
3
1.0 1
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 15 -
 dng nguyên tc u phi c quyn và các thông tin có c ti thi m ra quyt nh  tr li các câu
i sau ây :
a)Cho bit thi gian lu li trung bình trong h thng (turnaround time) ca các tin trình trong thut toán u
phi FIFO.
b)Cho bit thi gian lu li trung bình trong h thng (turnaround time) ca các tin trình trong thut toán u
phi SJF.
c)Thut toán SJF dnh ci tin s thc hin ca h thng , nhng lu ý chúng ta phi chn u phi P
1
ti
thi m 0 vì không bit rng s có hai tin trình ngn hn vào h thng sau ó . Th tính thi gian lu li
trung bình trong  thng nu  CPU nhàn ri trong 1 n v thi gian u tiên và sau ó s dng SJF u
phi. Lu ý P
1
và P
2

s phi ch trong sut thi gian nhàn ri này, do vy thi gian ch ca chúng tng lên.
Thut toán u phi này c bit n nhu phi da trên thông tin v tng lai.
LIÊN LC GIA CÁC TIN TRÌNH & VN NG B
HOÁ
Các tin trình trên nguyên tc là hoàn toàn c lp, nhng thc t có th nh th không ? Trong bài này chúng ta s tìm
hiu lý do các tin trình có nhu cu liên lc, các c ch h tr vic liên lc này cng nh nhng vn t ra khi các tin
trình trao i thông tin vi nhau.
2.3 Liên lc gia các tin trình
2.3.1. Nhu cu liên lc gia các tin trình
Trong môi trng a chng, mt tin trình không n c trong h thng , mà có thnh hng n các tin
trình khác , hoc b các tin trình khác tác ng. Nói cách khác, các tin trình là nhng thc thc lp , nhng
chúng vn có nhu cu liên lc vi nhau  :
Chia s thông tin: nhiu tin trình có th cùng quan tâm n nhng d liu nào ó, do vy hu hành cn
cung cp mt môi trng cho phép s truy cp ng thi n các d liu chung.
p tác hoàn thành tác v: ôi khi t c mt s x lý nhanh chóng, ngi ta phân chia mt tác v
thành các công vic nh có th tin hành song song. Thng thì các công vic nh này cn hp tác vi nhau 
cùng hoàn thành tác v ban u, ví d d liu kt xut ca tin trình này li là d liu nhp cho tin trình khác
…Trong các trng hp ó, hu hành cn cung cp c ch các tin trình có th trao i thông tin vi
nhau.
2.3.2. Các vn  ny sinh trong vic liên lc gia các tin trình
Do mi tin trình s hu mt không gian a ch riêng bit, nên các tin trình không th liên lc trc tip d
dàng mà phi nh vào các c ch do hu hành cung cp. Khi cung cp c ch liên lc cho các tin trình, h
u hành thng phi tìm gii pháp cho các vn  chính yu sau :
Liên kt tng minh hay tim n (explicit naming/implicit naming) : tin trình có cn phi bit tin trình nào
ang trao i hay chia s thông tin vi nó ? Mi liên kt c gi là tng minh khi c thit lp rõ ràng , trc
tip gia các tin trình, và là tim n khi các tin trình liên lc vi nhau thông qua mt qui c ngm nào ó.
Liên lc theo chng b hay không ng b (blocking / non-blocking): khi mt tin trình trao i thông
tin vi mt tin trình khác, các tin trình có cn phi i cho thao tác liên lc hoàn tt ri mi tip tc các x lý
khác ? Các tin trình liên lc theo c chng b s ch nhau hoàn tt vic liên lc, còn các tin trình liên lc
theo c ch nonblocking thì không.

Liên lc gia các tin trình trong h thng tp trung và h thng phân tán: c ch liên lc gia các tin trình
trong cùng mt máy tính có s khác bit vi vic liên lc gia các tin trình gia nhng máy tính khác nhau?
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 16 -
Hu ht các hu hành a ra nhiu c ch liên lc khác nhau, mi c ch có nhng c tính riêng, và
thích hp trong mt hoàn cnh chuyên bit.
2.4. Các c ch thông tin liên lc
2.4.1. Tín hiu (Signal)
Gii thiu: Tín hiu là mt c ch phn mm tng t nh các ngt cng tác ng n các tin trình. Mt
tín hiu c s dng  thông báo cho tin trình v mt s kin nào ó xy ra. Có nhiu tín hiu c nh
ngha, mi mt tín hiu có mt ý ngha tng ng vi mt s kin c trng.
Ví d : Mt s tín hiu ca UNIX
Tín hiu Mô t
SIGINT
Ngi dùng nhn phím DEL  ngt x lý tin trình
SIGQUIT
Yêu cu thoát x lý
SIGILL
Tin trình x lý mt ch th bt hp l
SIGKILL
Yêu cu kt thúc mt tin trình
SIGFPT
Li floating  point xy ra ( chia cho 0)
SIGPIPE
Tin trình ghi d liu vào pipe mà không có reader
SIGSEGV
Tin trình truy xut n mt a ch bt hp l
SIGCLD
Tin trình con kt thúc
SIGUSR1

Tín hiu 1 do ngi dùng nh ngha
SIGUSR2
Tín hiu 2 do ngi dùng nh ngha
i tin trình s hu mt bng biu din các tín hiu khác nhau. Vi mi tín hiu s có tng ng mt trình x
lý tín hiu (signal handler) qui nh các x lý ca tin trình khi nhn c tín hiu tng ng.
Các tín hiu c gi i bi :
Phn cng (ví d li do các phép tính s hc)
t nhân hu hành gi n mt tin trình ( ví d lu ý tin trình khi có mt thit b nhp/xut t do).
t tin trình gi n mt tin trình khác ( ví d tin trình cha yêu cu mt tin trình con kt thúc)
Ngi dùng ( ví d nhn phím Ctl-C  ngt x lý ca tin trình)
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 17 -
Khi mt tin trình nhn mt tín hiu, nó có th x s theo mt trong các cách sau :
 qua tín hiu
 lý tín hiu theo kiu mc nh
Tip nhn tín hiu và x lý theo cách c bit ca tin trình.
Hình 3.1 Liên lc bng tín hiu
2.4.2. Pipe
Gii thiu: Mt pipe là mt kênh liên lc trc tip gia hai tin trình : d liu xut ca tin trình này c
chuyn n làm d liu nhp cho tin trình kia di dng mt dòng các byte.
Khi mt pipe c thit lp gia hai tin trình, mt trong chúng s ghi d liu vào pipe và tin trình kia sc
 liu t pipe. Th t d liu truyn qua pipe c bo toàn theo nguyên tc FIFO. Mt pipe có kích thc
gii hn (thng là 4096 ký t)
Hình 3.2 Liên lc qua pipe
t tin trình ch có th s dng mt pipe do nó to ra hay k tha t tin trình cha. Hu hành cung cp các
i gi h thng read/write cho các tin trình thc hin thao tác c/ghi d liu trong pipe. Hu hành cng
chu trách nhim ng b hóa vic truy xut pipe trong các tình hung:
Tin trình c pipe s b khóa nu pipe trng, nó s phi i n khi pipe có d liu  truy xut.
Tin trình ghi pipe s b khóa nu pipe y, nó s phi i n khi pipe có ch trng  cha d liu.
2.4.3. Vùng nh chia s

Gii thiu: Cách tip cn ca c ch này là cho nhiu tin trình cùng truy xut n mt vùng nh chung gi
là vùng nh chia s (shared memory).Không có bt k hành vi truyn d liu nào cn phi thc hin ây, d
liu chn gin c t vào mt vùng nh mà nhiu tin trình có th cùng truy cp c.
i phng thc này, các tin trình chia s mt vùng nh vt lý thông qua trung gian không gian a ch ca
chúng. Mt vùng nh chia s tn ti c lp vi các tin trình, và khi mt tin trình mun truy xut n vùng
nh này, tin trình phi kt gn vùng nh chung ó vào không gian a ch riêng ca tng tin trình, và thao tác
trên ó nh mt vùng nh riêng ca mình.
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 18 -
Hình 3.3 Liên lc qua vùng nh chia s
2.4.4. Trao i thông p (Message)
Gii thiu: Hu hành còn cung cp mt c ch liên lc gia các tin trình không thông qua vic chia s
t tài nguyên chung , mà thông qua vic gi thông p.  h tr c ch liên lc bng thông p, hu
hành cung cp các hàm IPC chun (Interprocess communication), c bn là hai hàm:
Send(message) : gi mt thông p
Receive(message) : nhn mt thông p
u hai tin trình P và Q mun liên lc vi nhau, cn phi thit lp mt mi liên kt gia hai tin trình, sau ó
P, Q s dng các hàm IPC thích hp  trao i thông p, cui cùng khi s liên lc chm dt mi liên kt
gia hai tin trình s b hy. Có nhiu cách thc  thc hin s liên kt gia hai tin trình và cài t các theo
tác send /receive tng ng : liên lc trc tip hay gián tip, liên lc ng b hoc không ng b , kích thc
thông p là cnh hay không … Nu các tin trình liên lc theo kiu liên kt tng minh, các hàm Send và
Receive sc cài t vi tham s :
Send(destination, message) : gi mt thông p n destination
Receive(source,message) : nhn mt thông p t source
2.4.5. Sockets
Gii thiu: Mt socket là mt thit b truyn thông hai chiu tng t nh tp tin, chúng ta có thc hay
ghi lên nó, tuy nhiên mi socket là mt thành phn trong mt mi ni nào ó gia các máy trên mng máy tính
và các thao tác c/ghi chính là s trao i d liu gia các ng dng trên nhiu máy khác nhau.
 dng socket có th mô phng hai phng thc liên lc trong thc t : liên lc th tín (socket óng vai trò
u cc) và liên lc n thoi (socket óng vai trò tng ài) .

Các thuc tính ca socket:
Domaine: nh ngha dng thc a ch và các nghi thc s dng. Có nhiu domaines, ví d UNIX,
INTERNET, XEROX_NS,
Type: nh ngha các c m liên lc:
a) S tin cy
b) S bo toàn th t d liu
c) Lp li d liu
d) Ch ni kt
e) Bo toàn gii hn thông p
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 19 -
f) Kh nng gi thông p khn
 thc hin liên lc bng socket, cn tin hành các thao tác ::
o lp hay m mt socket
n kt mt socket vi mt a ch
Liên lc : có hai kiu liên lc tùy thuc vào ch ni kt:
a) Liên lc trong ch không liên kt
: liên lc theo hình thc hp th:
hai tin trình liên lc vi nhau không kt ni trc tip
i thông p phi kèm theo a ch ngi nhn.
Hình thc liên lc này có c m c :
ngi gi không chc chn thông p ca hc c gi n ngi nhn,
t thông p có thc gi nhiu ln,
hai thông p  gi theo mt th t nào ó có thn tay ngi nhn theo mt th t khác.
t tin trình sau khi ã m mt socket có th s dng nó  liên lc vi nhiu tin trình khác nhau nh
 hai primitive send và receive.
b) Liên lc trong ch ni kt
:
Mt liên kt c thành lp gia hai tin trình. Trc khi mi liên kt này c thit lp, mt trong hai tin
trình phi i có mt tin trình khác yêu cu kt ni.Có th s dng socket  liên lc theo mô hình client-

serveur. Trong mô hình này, server s dng li gi h thng listen và accept  ni kt vi client, sau ó , client
và server có th trao i thông tin bng cách s dng các primitive send và receive.
y mt socket
Ví d :
Trong nghi thc truyn thông TCP, mi mi ni gia hai máy tính c xác nh bi mt port, khái
nim port ây không phi là mt cng giao tip trên thit b vt lý mà ch là mt khái nim logic trong
cách nhìn ca ngi lp trình, mi port c tng ng vi mt s nguyên dng.
Hình 3.4 Các socket và port trong mi ni TCP.
Hình 3.4 minh ha mt cách giao tip gia hai máy tính trong nghi thc truyn thông TCP. Máy A to ra mt
socket và kt buc (bind) socket ny vi mt port X (tc là mt s nguyên dng có ý ngha cc b trong máy
A), trong khi ó máy B to mt socket khác và móc vào (connect) port X trong máy A.
2.5. Nhu cu ng b hóa (synchronisation)
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 20 -
Trong mt h thng cho phép các tin trình liên lc vi nhau, bao gi hu hành cng cn cung cp kèm
theo nhng c chng b hóa  bo m hot ng ca các tin trình ng hành không tác ng sai lch n
nhau vì các lý do sau ây:
2.5.1. Yêu cu c quyn truy xut (Mutual exclusion)
Các tài nguyên trong h thng c phân thành hai loi: tài nguyên có th chia s cho phép nhiu tin
trình ng thi truy xut, và tài nguyên không th chia s ch chp nhn mt ( hay mt s lng hn ch
) tin trình s dng ti mt thi m. Tính không th chia s ca tài nguyên thng có ngun gc t
t trong hai nguyên nhân sau ây:
c tính cu to phn cng ca tài nguyên không cho phép chia s.
u nhiu tin trình s dng tài nguyên ng thi, có nguy c xy ra các kt qu không
oán c do hot ng ca các tin trình trên tài nguyên nh hng ln nhau.
 gii quyt vn , cn bo m tin trình c quyn truy xut tài nguyên, ngha là h thng phi
kim soát sao cho ti mt thi m, ch có mt tin trình c quyn truy xut mt tài nguyên không
th chia s.
2.5.2. Yêu cu phi hp (Synchronization)
Nhìn chung, mi tng quan v tc  thc hin ca hai tin trình trong h thng là không th bit

trc, vì u này ph thuc vào nhiu yu tng nh tn sut xy ra các ngt ca tng tin trình, thi
gian tin trình c cp phát b x lý… Có th nói rng các tin trình hot ng không ng b vi
nhau. Nh ng có nhng tình hung các tin trình cn hp tác trong vic hoàn thành tác v, khi ó cn
phi ng b hóa hot ng ca các tin trình , ví d mt tin trình ch có th x lý nu mt tin trình
khác ã kt thúc mt công vic nào ó …
2.5.3. Bài toán ng b hoá
2.5.3.1. Vn  tranh t u khin (race condition)
Gi s có hai tin trình P
1
và P
2
thc hin công vic ca các k toán, và cùng chia s mt vùng nh
chung lu tr bin taikhoan phn ánh thông tin v tài khon. Mi tin trình mun rút mt khon tin
tienrut t tài khon:
if (taikhoan - tienrut >=0)
taikhoan = taikhoan - tienrut;
else
error(« khong the rut tien ! »);
Gi s trong tài khon hin còn 800, P
1
mun rút 500 và P
2
mun rút 400. Nu xy ra tình hung nh
sau :
Sau khi ã kim tra u kin (taikhoan - tienrut >=0) và nhn kt qu là
300, P
1
ht thi gian x lý mà h thng cho phép, hu hành cp phát CPU cho P
2
.

P
2
kim tra cùng u kin trên, nhn c kt qu là 400 (do P
1
vn cha rút tin) và
rút 400. Giá tr ca taikhoanc cp nht li là 400.
Khi P
1
 c tái kích hot và tip tc x lý, nó s không kim tra li u kin
(taikhoan - tienrut >=0)-vì ã kim tra trong lt x lý trc- mà thc hin
rút tin. Giá tr ca taikhoan s li c cp nht thành -100. Tình hung li xy ra !
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 21 -
Các tình hung tng t nh th - có th xy ra khi có nhiu hn hai tin trình c và ghi d liu trên
cùng mt vùng nh chung, và kt qu ph thuc vào su phi tin trình ca h thng- c gi là
các tình hung tranh t u khin (race condition) .
2.5.3.2. Min gng (critical section)
 ngn chn các tình hung li có th ny sinh khi các tin trình truy xut ng thi mt tài nguyên
không th chia s, cn phi áp t mt s truy xut c quyn trên tài nguyên ó : khi mt tin trình
ang s dng tài nguyên, thì nhng tin trình khác không c truy xut n tài nguyên.
n chng trình trong ó có kh nng xy ra các mâu thun truy xut trên tài nguyên chung c gi
là min gng (critical section). Trong ví d trên, n mã :
if (taikhoan - tienrut >=0)
taikhoan = taikhoan - tienrut;
a mi tin trình to thành mt min gng.
Có th gii quyt vn  mâu thun truy xut nu có th bo m ti mt thi m ch có duy nht mt
tin trình c x lý lnh trong min gng.
t phng pháp gii quyt tt bài toán min gng cn thõa mãn 4 u kin sau :
Không có hai tin trình cùng  trong min gng cùng lúc.
Không có gi thit nào t ra cho s liên h v tc  ca các tin trình, cng nh v s

ng b x lý trong h thng.
t tin trình tm dng bên ngoài min gng không c ngn cn các tin trình khác
vào min gng.
Không có tin trình nào phi ch vô hn c vào min gng.
Tóm tt
t s tin trình trong h thng có nhu cu trao i thông tin  phi hp hot ng, do mi tin trình
có mt không gian a chc lp nên viêc liên lc ch có th thc hin thông qua các c ch do hu
hành cung cp.
t s c ch trao i thông tin gia các tin trình :
Tín hiu : thông báo s xy ra ca mt s kin
Pipe : truyn d liu không cu trúc
Vùng nh chia s : cho phép nhiu tin trình truy cp n cùng mt vùng nh
Trao i thông p : truyn d liu có cu trúc, có th vn dng trong các
 phân tán
Socket : chun hoán vic liên lc gia các h thng khác bit
Khi các tin trình trao i thông tin, chia s tài nguyên chung, cn phi ng b hoá hot ng ca
chúng ch yu do yêu cu c quyn truy xut hoc phi hp hot ng.
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 22 -
Min gng là n lnh trong chng trình có kh nng phát sinh mâu thun truy xut.  không xy ra mâu
thun truy xut, cn m bo ti mt thi m ch có mt tin trình c vào min gng.
ng c bài hc
Các câu hi cn tr li c sau bài hc này :
1. Các c ch trao i thông tin : tình hung s dng, u, khuyt ?
2. Các yêu cu ng b hoá ?
Bài tp
Phân tích các bài toán sau ây và xác nh nhng yêu cu ng b hoá, min gng :
Bài 1.Bài toán To phân t H
2
O

ng b hot ng ca mt phòng thí nghim s dng nhiu tin trình ng hành sau  to các phân t H
2
O:
MakeH() // Mi tin trình MakeH to 1 nguyên t H
{
Make-Hydro();
}
MakeO() // Mi tin trình MakeO to 1 nguyên t O
{
Make-Oxy();
}
MakeWater() /* Tin trình MakeWater hot ng ng hành
vi các tin trình MakeH, MakeO, ch có  2 H và 1 O  to H
2
O */
{
while (T)
Make-Water(); //To 1 phân t H
2
O
}
Bài 2.Bài toán Cây cu c
 tránh sp , ngi ta ch có cho phép ti a 3 xe lu thông ng thi qua mt cây cu rt c. Hãy
xây dng th tc ArriveBridge(int direction) và ExitBridge() kim soát giao thông trên cu sao cho :
i mi thi m, ch cho phép ti a 3 xe lu thông trên cu.
i mi thi m, ch cho phép ti a 3 xe luthông cùng hng
trên cu.
i chic xe khi n u cu s gi ArriveBridge(direction) kim tra u kin lên cu, và khi ã
qua cu c s gi ExitBridge() báo hiu kt thúc.
Gi s hot ng ca mi chic xe c mô t bng mt tin trình Car() sau ây:

Car(int direction) /* direction xác nh hng di chuyn ca mi chic xe.*/
{
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 23 -
RuntoBridge(); // i v phía cu
ArriveBridge(direction);
PassBridge(); // Qua cu
Exit Bridge();
RunfromBridge(); // ã qua cu
}
Bài 3. Bài toán Qua sông
 vt qua sông, các nhân viên Microsof và các Linux hacker cùng s dng mt bn sông và phi chia
 mt s thuyn c bit. Mi chic thuyn này ch cho phép ch 1 ln 4 ngi, và phi có  4 ngi
i khi hành c.  bo m an toàn cho c 2 phía, cn tuân th các lut sau :
a. Không chp nhn 3 nhân viên Microsoft và 1 Linux hacker trên cùng mt chic
thuyn.
b. Ngc li, không chp nhn 3 Linux hacker và 1 nhân viên Microsoft trên cùng mt
chic thuyn.
c. Tt c các trng hp kt hp khác u hp pháp.
d. Thuyn ch khihành khi ã có  4 hành khách.
n xây dng 2 th tc HackerArrives() và EmployeeArrives()c gi tng ng bi 1 hacker hoc
1 nhân viên khi hn b sông  kim tra u kin có cho phép h xung thuyn không ? Các th tc
này s sp xp nhng ngi thích hp có th lên thuyn. Nhng ngi ã c lên thuyn khi thuyn
cha y s phi chn khi ngi th 4 xung thuyn mi có th khi hành qua sông. (Không quan
tâm n s lng thuyn hay vic thuyn qua sông ri tr li…Xem nh luôn có thuyn  sp xp theo
các yêu cu hp l)
Gi s hot ng ca mi hacker c mô t bng mt tin trình Hacker() sau ây:
Hacker()
{
RuntoRiver(); // i n b sông

HackerArrives (); // Kim tra u kin xung thuyn
CrossRiver(); // Khi hành qua sông
}
và hot ng ca mi nhân viên c mô t bng mt tin trình Employee() sau ây:
Employee()
{
RuntoRiver(); // i n b sông
EmployeeArrives (); // Kim tra u kin xung thuyn
CrossRiver(); // Khi hành qua sông
}
Bài 4. Bài toán u phi hành khách xe bus
Hãy tng tng bn chu trách nhim kim soát hành khách lên xe bus ti mt trm dng.
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 24 -
i xe bus có  ch cho 10 hành khách. Trong ó 4 ch ch dành cho khách ngi xe ln, 6 ch còn li
ch dành cho khách bình thng.
Công vic ca bn là cho khách lên xe theo úng qui nh ch, khi xe y khách s khi hành. Có th có
nhiu xe và nhiu hành khách vào bn cùng lúc, nguyên tc u phi s xp khách vào y mt xe, cho
xe này khi hành ri mi u phi cho xe khác.
Gi s hot ng u phi khách ca bn cho 1 chic xe bus c mô t qua tin trình
GetPassengers(); hot ng ca mi hành khách tùy loi c mô t ln lt bng tin trình
WheelPassenger() và NonWheelPassenger() sau ây , hãy sa cha các n code, s dng c ch
semaphore  thc hin các nguyên tc ng b hoá cn thit.
GetPassenger()
{
ArriveTerminal(); // tip nhn mt xe vào bn
OpenDoor(); // m ca xe, th tc này xem nhã có
for (int i=0; i<4; i++) // tip nhn các hành khách ngi xe ln
{
ArrangeSeat(); // a 1 khách vào ch

}
for (int i=0; i<6; i++) // tip nhn các hành khách bình thng
{
ArrangeSeat(); // a 1 khách vào ch
}
CloseDoor(); // óng ca xe, th tc này xem nhã có
DepartTerminal(); // cho mt xe ri bn
}
WheelPassenger()
{
ArriveTerminal(); // n bn
GetOnBus(); // lên xe
}
NonWheelPassenger()
{
ArriveTerminal(); // n bn
GetOnBus(); // lên xe
}
Bài 5. Bài toán sn xut thit b xe hi
Hãng Pontiac có 2 b phn hot ng song song :
- B phn sn xut 1 khung xe :
Giáo trình Nguyên lý hu hành – KS. Trn Ngc Thái,  môn Tin hc – i hc DL Hi Phòng
Tài liu lu hành ni b - 25 -
MakeChassis() { // to khung xe
Produce_chassis();
}
- B phn sn xut 1 bánh xe :
MakeTires() { // to bánh xe và gn vào khung xe
Produce_tire();
Put_tire_to_Chassis();

}
Hãy ng b hot ng trong vic sn xut xe hi theo nguyên tc sau :
o n xut mt khung xe,
o n có  4 bánh xe cho 1 khung xe c sn xut ra, sau ó mi tip tc sn xut khung xe khác…
CÁC GII PHÁP NG B HOÁ (Bài tp ln)

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×