Professional Documents
Culture Documents
Bµi gi¶ng
HÖ §iÒu Hµnh
60 tiÕt (45 tiÕt lý thuyÕt + 15 tiÕt thùc hµnh)
(Version 0.11)
Biªn so¹n
Lª TiÕn Dòng
Hµ néi 8-2001
HÖ ®iÒu hµnh trang 2/96
Lý do: c¸c hµm c¬ së nh− lÊy c¨n, sinx, hay luü thõa kh«ng ph¶i ai còng
cÇn dïng, nh−ng ai còng cÇn xö lý th«ng tin, mµ c¬ së nhá nhÊt cña th«ng tin
n»m trong bit, byte nªn khi t¨ng c−êng kh¶ n¨ng cho processor trong lÜnh vùc xö
lý bit th× nã sÏ g¾n víi nhu cÇu cña mäi ng−êi h¬n.
- 1951-1960
{Library of Standard Programs} §Ó ®¸p øng nhu cÇu ng−êi sö dông, mét
mÆt ng−êi ta ph¶i nghiªn cøu c¸c thuËt to¸n lÊy c¨n, sinx, cos, . trªn c¬ së xö lý
bit, byte; mÆt kh¸c ph¶i x©y dùng s½n c¸c modul ®¸p øng yªu cÇu nay.
§éi ngò ng−êi sö dông ngµy cµng lín => tho¶ m·n nhu cÇu lËp tr×nh d−íi
d¹ng th− viÖn ngµy cµng lín theo => yªu cÇu sè th− viÖn lín víi néi dung ®å sé
=> khã. Gi¶i quyÕt b»ng c¸ch ph¶i cung cÊp cho ng−êi sö dông c«ng cô cho
phÐp m« t¶ nh÷ng gi¶i thuËt cÇn thiÕt =>
§©y lµ thêi kú ra ®êi cña ng«n ng÷ thuËt to¸n víi mét lo¹t c¸c ch−¬ng
tr×nh dÞch. C¸c ng«n ng÷ ra ®êi: Assembler, FORTRAN, COBOL.
§i ®«i víi chóng lµ kü thuËt b¸n dÉn, s¶n xuÊt ®−îc b¨ng tõ cho phÐp l−u
tr÷ ®−îc mét sè ch−¬ng tr×nh. §· cã sù ph©n ho¸ chøc n¨ng gi÷a ng−êi lËp tr×nh
vµ thao t¸c viªn (operator).
+ Processor còng chuyÓn giao mét sè chøc n¨ng cho c¸c thiªt bÞ kh¸c.
+ §· b¾t ®Çu viÖc nhãm c¸c ch−¬ng tr×nh hay t¸c vô (jobs) l¹i ®Ó xö lý theo
l«. §· cã nh÷ng mÇm mèng cña hÖ ®iÒu hµnh:
o Thùc hiÖn tù ®éng c¸c c«ng viÖc
o N¹p vµ gi¶i phãng ch−¬ng tr×nh trong bé nhí
o Qu¶n lý vµo ra: ®äc b×a, b¨ng tõ, m¸y in.
=> M« h×nh ho¹t ®éng cña hÖ ®iÒu hµnh : ng−êi sö dông t¸c ®éng trùc tiÕp lªn
MTDT hay th«ng qua th− viÖn ch−¬ng tr×nh mÉu hoÆc t¸c ®éng trung gian qua
ch−¬ng tr×nh dÞch =>
+ HÖ thèng qu¶n lý
o Qu¶n lý th− viÖn
o Qu¶n lý Ch−¬ng tr×nh dÞch
o Qu¶n lý cung cÊp dÞch vô
- 1960-nay
TiÕn thªm mét b−íc trong viÖc c¬ së ho¸ th− viÖn ch−¬ng tr×nh mÉu. Thay
v× cung cÊp c¸c ch−¬ng tr×nh hoµn thiÖn, cung cÊp c¸c module gi¶i quyÕt tõng
phÇn gi¶i thuËt, phÐp biÕn ®æi th−êng gÆp => ngoµi ra cßn cÇn cã nh÷ng modul
chuyªn phôc vô ®iÒu khiÓn vµ tæ chøc c¸c module trong th− viÖn.
Ra ®êi ph¸t triÓn m¹ch tÝch hîp (kÝch cì nhá, tèc ®é cao), c¸c ®Üa tõ víi
tèc ®é truy nhËp d÷ liÖu lín h¬n.
+ Ra ®êi c¸c m¸y vi tÝnh IBM PC vµ MSDOS.
o Giao diÖn ®å ho¹
o Chøc n¨ng ®a ph−¬ng tiÖn ®−îc nhóng vµo hÖ ®iÒu hµnh.
o HÖ ®iÒu hµnh ®· g¾n víi m¹ng vµ Internet.
o C¸c hÖ thèng song song: nhiÒu bé vi xö lý cïng chia sÎ mét hÖ
thèng bus, ®ång hå, thiÕt bÞ ngo¹i vi, bé nhí.
o C¸c hÖ thèng ph©n t¸n: nhiÒu bé vi xö lý nh−ng dïng bé nhí, bus,
®ång hå riªng nh−ng liªn l¹c trao ®æi víi nhau ®Ó thùc hiÖn mét
nhiÖm vô nµo ®ã.
o HÖ thèng thêi gian thùc: C¸c xö lý tinh to¸n bÞ giíi h¹n vÒ mÆt thêi
gian thùc hiÖn.
Ng−êi ta ®−a ra c¸c líp tuú chän (option) ®Ó ®−a m¸y tÝnh vÒ c¸c m«i
tr−êng lµm viÖc phï hîp.
b. PhÇn mÒm vµ vai trß cña c¸c líp ch−¬ng tr×nh trong hÖ thèng tÝnh to¸n
Trong khi phÇn kü thuËt thay ®æi chËm ch¹p th× phÇn ch−¬ng tr×nh bao
quanh MTDT ph¸t triÓn víi tèc ®é chãng mÆt. Ngµy nay gi¸ thµnh cña phÇn
mÒm chiÕm mét tØ träng lín trong gi¸ trÞ toµn hÖ thèng.
- So s¸nh gi¸ thµnh gi÷a phÇn cøng vµ phÇn mÒm
Ngµy 06/06/2001
I. HARDWARE
Server
P/N Description Unit Price
X Series 230 IBM Series x230 PIII 1000 Mhz/ 256 Kb Cache 3,475.00
865861Y IBM Netfinity 128MB SDRAM ECC RDIMM
Intergrated dual channel Ultra 160 LVD SCSI
Internal storage: 218.4 GB 10/100 Ethernet intergrated
10 bays( 6 hot plug, 2 half-high, 40x IDE CDROM)
250w Power Supply Cooling fans: 2
33L3123 IBM Netfinity 128MB SDRAM ECC RDIMM 305.00
33L3125 IBM Netfinity 256MB SDRAM ECC RDIMM 641.00
37L7205 IBM Netfinity 18.2 GB 10K-4 Wide Ultra160 SCSI 598.00
IBM E54 Color Monitor, stealth black 178.00
C5647A HP SureStore Tape 40i GB Internal (40GB) 1,980.00
TOTAL 7,177.00
II. SOFTWARE
P/N Description Unit Price
C¸c ch−¬ng tr×nh bao quanh phÇn kü thuËt t¹o thµnh mét m«i tr−êng tÝnh
to¸n. Mçi ch−¬ng tr×nh muèn ®−îc thùc hiÖn ph¶i g¾n víi m«i tr−êng vµ thõa
h−ëng ë m«i tr−êng mäi kh¶ n¨ng cña hÖ thèng. Lµm cho th«ng tin l−u chuyÓn
dÔ dµng gi÷a c¸c thµnh phÇn cña hÖ thèng. Th«ng tin ®Çu ra cña mét module nµy
cã thÓ lµm ®Çu vµo cho mét module kh¸c. Mäi biÕn ®æi trung gian ®Òu do hÖ
thèng ®¶m nhiÖm vµ trong suèt víi ng−êi sö dông.
VÝ dô: c¸c phÇn mÒm Word, Excel g¾n liÒn víi m«i tr−êng Windows. Khi
c¸c th«ng sè cña m«i tr−êng thay ®æi (HÖ thèng font ch÷, bµn phÝm, ng«n
ng÷ )=> sÏ ¶nh h−ëng lªn c¸c phÇn mÒm nµy.
Dï lµ mét ch−¬ng tr×nh hay mét thµnh phÇn cña hÖ thèng th× ®Òu ph¶i ho¹t
®éng ®ång bé víi toµn hÖ thèng (c¸c thµnh phÇn hÖ thèng hay ch−¬ng tr×nh
kh¸c). HÖ thèng cã chøc n¨ng ®¶m b¶o ®Çy ®ñ c¸c ®iÒu kiÖn vËt chÊt ®Ó ch−¬ng
tr×nh ch¹y ®−îc nh− bé nhí, thêi gian phôc vô cña processor, thiÕt bÞ ngo¹i vi =>
Tãm l¹i hÖ thèng cã nhiÖm vô qu¶n lý tµi nguyªn.
2. Tµi nguyªn cña hÖ thèng tÝnh to¸n
- C¸c tµi nguyªn chñ yÕu
Tµi nguyªn ph©n chia lµm hai lo¹i c¬ b¶n: kh«ng gian vµ thêi gian. Trong
khung c¶nh mçi hÖ thèng th× ®ã lµ kh«ng gian nhí vµ thêi gian thùc hiÖn lÖnh.
a. Bé nhí
- Bé nhí lµ n¬i l−u tr÷ th«ng tin.
- §Æc tr−ng bé nhí
+ Thêi gian truy nhËp trùc tiÕp: thêi gian trùc tiÕp ®Ó truy nhËp tíi ®Þa chØ
bÊt kú trong bé nhí.
+ Thêi gian truy nhËp tuÇn tù: Khi tån t¹i mét c¸ch tæ chøc l−u tr÷ kÕ tiÕp.
Bé nhí th−êng ®−îc ph©n cÊp theo tèc ®é truy nhËp trùc tiÕp hay kÕ tiÕp.
Bé nhí ®−îc gäi lµ thùc hiÖn nÕu processor cã thÓ thùc hiÖn c©u lÖnh bÊt kú ghi
trong ®ã. §Æc ®iÓm cña bé nhí nµy lµ thêi gian truy nhËp thùc hiÖn vµ truy nhËp
tuÇn tù lµ b»ng nhau. Bé nhí trong bao giê còng lµ bé nhí thùc hiÖn.
+ Kh«ng gian bé nhí
+ Gi¸ thµnh
- Ph©n lo¹i bé nhí
+ Bé nhí trong: Cã tèc ®é truy nhËp cao nh−ng kh«ng gian bé nhí nhá
+ Bé nhí ngoµi: Cã kh«ng gian bé nhí lín nh−ng tèc ®é truy nhËp thÊp.
Thêi gian truy nhËp trùc tiÕp th−êng lín h¬n thêi gian truy tuÇn tù. Lo¹i
bé nhí phæ biÕn lµ bé nhí ®Üa cøng, ®Üa mÒm, b¨ng tõ, ®Üa quang.
b. Thêi gian processor
B¶n th©n Processor lµ tµi nguyªn quan träng. Tµi nguyªn thêi gian ë ®©y lµ
thêi gian thùc hiÖn c©u lÖnh chø kh«ng ph¶i thêi gian cña cuéc sèng hµng ngµy.
Processor ®−îc dïng cho nhiÒu tiÕn tr×nh kh¸c nhau do ®ã viÖc ph©n chia thêi
gian sö dông processor cña mçi tiÕn tr×nh ph¶i ®−îc tèi −u ho¸, ®Æc biÖt lµ khi
chóng cßn dïng chung tµi nguyªn kh¸c: ch−¬ng tr×nh, d÷ liÖu, thiÕt bÞ vµo ra...
Nãi c¸ch kh¸c, thêi gian processor chÝnh lµ mét tµi nguyªn quan träng cña hÖ
thèng.
c. ThiÕt bÞ ngo¹i vi
- §a d¹ng
- Sè l−îng lín >>1
- Tèc ®é xö lý << tèc ®é processor
C¸c thiÕt bÞ tiÕp nhËn, l−u tr÷ th«ng tin ë bé nhí ngoµi trong thêi gian dµi
®−îc gäi lµ thiÕt bÞ ngo¹i vi. M¸y in, bµn phÝm, mµn h×nh, chuét,
modem, .Tr−íc ®©y c¸c thiÕt bÞ nµy th−êng ®−îc ®Æt xa phßng ®Æt m¸y chÝnh
nªn gäi lµ thiÕt bÞ ngo¹i vi. Chóng cßn cã tªn gäi kh¸c lµ thiÕt bÞ vµo ra. Chóng
th−êng ®−îc g¾n víi MTDT th«ng qua c¸c thiÕt bÞ trung gian: c¸c thiÕt bÞ ®iÒu
khiÓn.
Tµi nguyªn cã hai lo¹i: Ph©n chia ®−îc vµ kh«ng ph©n chia ®−îc.
Ph©n chia ®−îc: Cho phÐp nhiÒu ng−êi hay ch−¬ng tr×nh sö dông nã mét c¸ch
®ång thêi. §iÓn h×nh lµ bé nhí(trong vµ ngoµi): cã thÓ n¹p nhiÒu ch−¬ng tr×nh
vµo bé nhí trong, hay 1 ch−¬ng tr×nh sö dông nhiÒu tÖp trªn ®Üa cøng.
Kh«ng ph©n chia ®−îc: phÇn lín c¸c tµi nguyªn cßn l¹i. Tuy nhiªn cã thÓ
ph©n phèi viÖc sö dông chóng sao cho ng−êi sö dông c¶m gi¸c nh− ®−îc phôc vô
®ång thêi.
3. §Þnh nghÜa H§H
HÖ ®iÒu hµnh lµ mét phÇn quan träng cña mäi hÖ thèng th«ng tin. Mét hÖ
thèng th«ng tin gåm 4 thµnh phÇn: phÇn cøng, hÖ ®iÒu hµnh, ch−¬ng tr×nh øng
dông, ng−êi sö dông.
PhÇn cøng: CPU, bé nhí, thiÕt bÞ vµo ra cung cÊp c¸c tµi nguyªn th«ng tin
c¬ së.
C¸c ch−¬ng tr×nh øng dông: ch−¬ng tr×nh dÞch, hÖ thèng c¬ së d÷ liÖu,
tr×nh so¹n th¶o v¨n b¶n . qui ®Þnh c¸ch sö dông c¸c tµi nguyªn ®ã ®Ó gi¶i quyÕt
nh÷ng vÊn ®Ò cña ng−êi sö dông.
HÖ ®iÒu hµnh ®iÒu khiÓn vµ ®ång bé viÖc sö dông phÇn cøng cña c¸c
ch−¬ng tr×nh øng dông phôc vô c¸c ng−êi sö dông kh¸c nhau víi c¸c môc ®Ých
sö dông phong phó ®a d¹ng.
Ta cã thÓ hiÓu H§H lµ HÖ THèNG c¸c ch−¬ng tr×nh ®¶m b¶o c¸c chøc
n¨ng giao tiÕp ng−êi m¸y vµ qu¶n lý tµi nguyªn hÖ thèng tÝnh to¸n.
- Tuy nhiªn cã nhiÒu ng−êi quan s¸t H§H d−íi c¸c gãc ®é kh¸c nhau v× thÕ
tån t¹i nhiÒu ®Þnh nghÜa vÒ H§H.
§èi víi ng−êi sö dông: H§H lµ tËp hîp c¸c ch−¬ng tr×nh, phôc vô khai
th¸c hÖ thèng tÝnh to¸n mét c¸ch dÔ dµng, thuËn tiÖn.
Ng−êi sö dông khi thùc hiÖn mét ch−¬ng tr×nh nµo ®ã trªn MTDT th× chØ
quan t©m ®Õn viÖc hÖ thèng cã ®¸p øng ®−îc nhu cÇu cña hä hay kh«ng? Cã
ch−¬ng tr×nh cÇn thùc hiÖn, cã ®ñ bé nhí ®Ó ch¹y Hä kh«ng quan t©m ®Õn viÖc
hÖ ®iÒu hµnh lµm g× nh»m môc ®Ých g×, cã cÊu tróc nh− thÕ nµo?
§èi víi ng−êi lµm c«ng t¸c qu¶n lý: H§H lµ mét tËp c¸c ch−¬ng tr×nh
phôc vô qu¶n lý chÆt trÏ vµ sö dông tèi −u c¸c tµi nguyªn cña hÖ thèng tÝnh to¸n.
§èi víi c¸n bé kü thuËt: H§H lµ hÖ thèng ch−¬ng tr×nh bao trïm lªn mét
m¸y tÝnh vËt lý cô thÓ ®Ó t¹o ra mét m¸y logic víi nh÷ng tµi nguyªn míi vµ kh¶
n¨ng míi.
C¸c ®Þnh nghi· trªn ph¶n ¸nh vÞ trÝ quan s¸t cña ng−êi nªu. Hä ®øng ë
ngoµi hÖ thèng vµ thÓ hiÖn ®iÒu hä mong ®îi vµ còng lµ ®iÒu hä nh×n thÊy.
§èi víi c¸n bé lËp tr×nh hÖ thèng: H§H lµ hÖ thèng m« h×nh ho¸, m«
pháng c¸c ho¹t ®éng cña m¸y, cña ng−êi sö dông vµ cña thao t¸c viªn ho¹t ®éng
trong c¸c hÖ thèng ®èi tho¹i nh»m t¹o m«i tr−êng ®Ó qu¶n lý chÆt trÏ c¸c tµi
nguyªn vµ tæ chøc khai th¸c chóng mét c¸ch thuËn tiÖn vµ tèi −u.
Ch−¬ng
− tr×nh dÞch So¹n th¶o v¨n b¶n Qu¶n lý
c¬ së d÷ liÖu
Ch−¬ng tr×nh øng dông
HÖ ®iÒu hµnh
Tµi nguyªn
§èi víi c¸c c¸n bé lËp tr×nh hÖ thèng, vÞ trÝ cña hä lµ ë bªn trong hÖ ®iÒu
hµnh. Hä quan s¸t c¸c module, c¸c thµnh phÇn cña hÖ thèng, quan s¸t mèi quan
hÖ gi÷a chóng. §©y lµ quan ®iÓm cña chóng ta trong suèt qu¸ tr×nh kh¶o s¸t
nghiªn cøu hÖ ®iÒu hµnh.
- Nh− vËy H§H lµ hÖ chuyªn gia ra ®êi sím nhÊt vµ thuéc lo¹i hoµn thiÖn nhÊt.
4. Ph©n lo¹i hÖ ®iÒu hµnh
a. HÖ ®iÒu hµnh ®¬n nhiÖm vµ hÖ ®iÒu hµnh ®a nhiÖm
Dùa vµo c¸ch thøc ®−a ch−¬ng tr×nh vµo bé nhí, chän ch−¬ng tr×nh cã s½n
trong bé nhí ®Ó processor thùc hiÖn, ng−êi ta ph©n thµnh: hÖ ®iÒu hµnh ®¬n
nhiÖm, ®a nhiÖm.
- HÖ ®iÒu hµnh ®¬n nhiÖm
T¹i mét thêi ®iÓm x¸c ®Þnh, khi mét ch−¬ng tr×nh ®−îc ®−a vµo bé nhí th×
nã chiÕm gi÷ mäi tµi nguyªn cña hÖ thèng, vµ v× vËy ch−¬ng tr×nh kh¸c kh«ng
thÓ ®−îc ®−a vµo bé nhí trong khi nã ch−a kÕt thóc.
Nh−ng do c¸c thiÕt bÞ vµo ra th−êng lµm viÖc víi tèc ®é chËm, ng−êi ta
dïng kü thuËt SPOOLING(simultanous peripheral Operation on line): cho phÐp
t¹o ra hiÖu øng song song c¸c thiÕt bÞ chØ cho phÐp vµo ra tuÇn tù(sÏ ®Ò cËp chi
tiÕt ë ch−¬ng sau).
- HÖ ®iÒu hµnh ®a nhiÖm
HÖ ®iÒu hµnh cho phÐp t¹i mét thêi ®iÓm cã nhiÒu ch−¬ng tr×nh ë trong bé
nhí trong. Chóng cã nhu cÇu ®−îc ph©n phèi thêi gian phôc vô CPU, bé nhí vµ
thiÕt bÞ ngo¹i vi. Nh− vËy CPU, bé nhí, thiÕt bÞ ngo¹i vi v.v.. lµ c¸c tµi nguyªn
®−îc chia sÎ cho c¸c ch−¬ng tr×nh ®ã. VÊn ®Ò lµ lµm sao ®¶m b¶o tèt nhÊt tÝnh
b×nh ®¼ng khi gi¶i quyÕt vÊn ®Ò ph©n phèi tµi nguyªn.
b. HÖ ®iÒu hµnh ®¬n ch−¬ng vµ hÖ ®iÒu hµnh ®a ch−¬ng (MultiUsers)
- HÖ ®iÒu hµnh ®¬n ch−¬ng
T¹i mét thêi ®iÓm x¸c ®Þnh hÖ ®iÒu hµnh chØ cho phÐp mét ng−êi sö dông
thao t¸c mµ th«i.
- HÖ ®iÒu hµnh ®a ch−¬ng
HÖ ®iÒu hµnh cho phÐp t¹i mét thêi ®iÓm cã thÓ phôc vô nhiÒu ng−êi sö
dông.
c. HÖ ®iÒu hµnh tËp trung vµ hÖ ®iÒu hµnh ph©n t¸n
- HÖ ®iÒu hµnh tËp trung
Trªn mét hÖ thèng m¸y tÝnh chØ cã mét H§H duy nhÊt cµi ë m¸y chñ. C¸c
m¸y tr¹m ®−îc khëi ®éng nhê m¸y chñ vµ nã chØ lµm chøc n¨ng nhËp/xuÊt d÷
liÖu. Mäi xö lý ®Òu tËp trung ë m¸y chñ.
- HÖ ®iÒu hµnh ph©n t¸n
Trªn mçi m¸y cã 1 hÖ ®iÒu hµnh kh¸c nhau, m¸y chñ chÞu tr¸ch nhiÖm
cung øng c¸c dÞch vô ®Ó truy nhËp ®Õn c¸c tµi nguyªn chung vµ ®iÒu hµnh toµn
hÖ thèng, c¸c phÐp xö lý cã thÓ tiÕn hµnh ë m¸y tr¹m.
d. HÖ ®iÒu hµnh ph©n chia thêi gian vµ hÖ ®iÒu hµnh thêi gian thùc
- HÖ ®iÒu hµnh ph©n chia thêi gian (Share time)
Mét CPU lu«n phiªn phôc vô c¸c tiÕn tr×nh vµ 1 tiÕn tr×nh cã thÓ r¬i vµo
tr¹ng th¸i chê ®îi khi ch−a ®−îc ph©n phèi CPU.
- HÖ ®iÒu hµnh thêi gian thùc (Real time)
Mét tiÕn tr×nh khi ®· x©m nhËp vµo hÖ thèng th× ë bÊt kú lóc nµo ®Òu ®−îc
ph©n phèi CPU.
5. C¸c tÝnh chÊt c¬ b¶n cña hÖ ®iÒu hµnh
a. Tin cËy
- Mäi ho¹t ®éng cña H§H ®Òu ph¶i chuÈn x¸c tuyÖt ®èi.
- Th«ng tin cña H§H ®−a ra ph¶i chÝnh x¸c vµ ph¶i ng¨n ngõa c¸c sai sãt ngÉu
nhiªn, h¹n chÕ c¸c sai sãt cè ý.
- VÝ dô
A:\> copy A:\f1.txt C:
+ KiÓm tra xem cã tån t¹i c¹c ®Üa kh«ng (control card)
- Tån t¹i quan hÖ ph©n cÊp khi c¸c liªn kÕt c¸c module t¹o thµnh nh÷ng
module cã kh¶ n¨ng gi¶i quyÕt c¸c vÊn ®Ò phøc t¹p h¬n.
b. Phñ chøc n¨ng
- Mét c«ng viÖc cã thÓ thùc hiÖn b»ng nhiÒu c¸ch kh¸c nhau.
- VÝ dô
Muèn in tÖp f1.txt
+ C:\> copy f1.txt prn
+ C:\> type f1.txt >prn
+ C:\> print f1.txt
c. Marco-processor
- Khi cã mét c«ng viÖc cô thÓ, hÖ thèng sÏ x©y dùng c¸c yªu cÇu, liÖt kª c¸c
b−íc ph¶i thùc hiÖn tõ ®ã x©y dùng ch−¬ng tr×nh t−¬ng øng, sau ®ã thùc hiÖn
ch−¬ng tr×nh nãi trªn.
- VÝ dô: Trong MSDOS ta cã c¸c tÖp config.sys vµ autoexec.bat
d. Nguyªn lý b¶ng tham sè ®iÒu khiÓn
- HÖ thèng kh«ng tham chiÕu trùc tiÕp ®Õn thiÕt bÞ, ®èi t−îng vËt lý mµ chØ lµm
viÖc víi b¶ng tham sè x¸c ®Þnh ®Æc tr−ng cña thiÕt bÞ ®ã.
- B¶ng tham sè ®−îc hÖ thèng x©y dùng ngay trong qu¸ tr×nh lµm viÖc
- VÝ dô
B¶ng tham sè cña mét m¸y tÝnh PC ®−îc l−u trong CMOS 64byte
- Lîi Ých cña viÖc sö dông b¶ng tham sè
+ Truy nhËp thùc hiÖn c«ng viÖc nhanh víi CPU
+ Kh«ng phô thuéc vµo c¸c thiÕt bÞ vËt lý cô thÓ
- VÝ dô:
Bªn c¹nh b¶ng tham sè ®−îc l−u trong CMOS cßn cã c¸c b¶ng tham sè
trong tÖp config.sys vµ autoexec.bat cho phÐp ta thay ®æi gi¸ trÞ c¸c biÕn m«i
tr−êng cña MSDOS.
Files = Sè_tÖp_më_tèi_®a
e. Nguyªn lý gi¸ trÞ chuÈn
- H§H chuÈn bÞ b¶ng gi¸ trÞ cña c¸c tham sè gäi lµ b¶ng gi¸ trÞ chuÈn. Trong
tr−êng hîp mét module hoÆc mét c©u lÖnh cã nhiÒu tham sè vµ ng−êi sö dông
kh«ng nªu hÕt c¸c gi¸ trÞ tham sè th× H§H ph¶i lÊy gi¸ trÞ trong b¶ng gi¸ trÞ
chuÈn bæ xung vµo c¸c tham sè thiÕu.
- VÝ dô:
C:\>TP70>Dir
MSDOS.SYS
DÞch vô
IO.SYS
Nh©n
BIOS
Nh©n lµ phÇn chÝnh cña H§H lµm c¸c nhiÖm vô nh− qu¶n lý bé nhí, qu¶n
lý tiÕn tr×nh, ph©n chia tµi nguyªn Nh©n chØ ®¶m nhiÖm c¸c chøc n¨ng c¬ b¶n
nhÊt, cã kÝch th−íc nhá ®Ó gi¶m ®Õn møc tèi thiÓu lçi.
DÞch vô lµ phÇn më réng c¸c chøc n¨ng cña H§H cho phÐp khai th¸c tµi
nguyªn hÖ thèng vµ hç trî ng−êi dïng nh− qu¶n lý tÖp, qu¶n lý th− môc, th− ®iÖn
tö, truyÒn tÖp.
Giao tiÕp lµ phÇn t¹o ra m«i tr−êng giao tiÕp gi÷a ng−êi sö dông vµ m¸y
tÝnh.
8. C¸c h×nh th¸i giao tiÕp
a. H×nh th¸i dßng lÖnh
Ng−êi sö dông giao tiÕp víi H§H qua c¸c dßng lÖnh, mçi lÖnh cã c¸c
tham sè t−¬ng øng.
- −u ®iÓm
+ DÔ x©y dùng vµ gi¶m c«ng søc cho ng−êi x©y dùng hÖ thèng.
+ Ng−êi sö dông cã thÓ ®−a tham sè cña lÖnh mét c¸c chÝnh x¸c theo mong
muèn.
- Nh−îc ®iÓm
+ Tèc ®é ®−a lÖnh vµo chËm, ng−êi sö dông ph¶i nhí c¸c tham sè.
+ §èi víi c¸c thao t¸c viªn kh«ng cã kinh nghiÖm, th× h×nh th¸i giao tiÕp.
nµy g©y c¶n trë ®Õn hiÖu qu¶ lµm viÖc.
+ H×nh th¸i giao tiÕp nµy bÞ c¶n trë bëi hµng rµo ng«n ng÷.
b. H×nh th¸i thùc ®¬n
Ng−êi sö dông giao tiÕp víi H§H th«ng c¸c c¸c thùc ®¬n, c¸c thùc ®¬n
th−êng cã d¹ng tr¶i xuèng (Popup). Mçi mét thùc ®¬n con t−¬ng øng víi mét
chøc n¨ng. C¸c tham sè cã thÓ ®−îc ®−a vµo th«ng qua giao tiÕp víi ng−êi sö
dông.
- −u ®iÓm
+ H×nh th¸i nµy kh«ng yªu cÇu nhí lÖnh
+ Ng−êi sö dông cã thÓ truy nhËp vµo thùc ®¬n qua bµn phÝm hoÆc qua
chuét.
- Nh−îc ®iÓm
+ H×nh th¸i giao tiÕp nµy bÞ c¶n trë bëi hµng rµo ng«n ng÷.
+ §«i khi c¸c tõ trªn thùc ®¬n kh«ng nªu bËt ®−îc chøc n¨ng cña nã
c. H×nh th¸i cöa sæ biÓu t−îng
Ng−êi sö dông giao tiÕp víi H§H th«ng c¸c c¸c thanh c«ng cô vµ c¸c biÓu
t−îng. Mçi mét biÓu t−îng t−¬ng øng víi mét chøc n¨ng. C¸c tham sè cã thÓ
®−îc ®−a vµo th«ng qua giao tiÕp víi ng−êi sö dông.
- −u ®iÓm
+ H×nh th¸i nµy kh«ng yªu cÇu nhí lÖnh
+ Ng−êi sö dông kh«ng bÞ hµng rµo ng«n ng÷ g©y c¶n trë.
- Nh−îc ®iÓm
+ Cã thÓ cã rÊt nhiÒu biÓu t−îng do ®ã g©y sù nhËp nh»ng vÒ chøc n¨ng.
+ Kh«ng thuËn lîi khi thao t¸c b»ng bµn phÝm
d. H×nh th¸i kÕt hîp
HÖ ®iÒu hµnh th−êng kÕt hîp nhiÒu h×nh th¸i giao tiÕp ®Ó t¹o ra tÝnh th©n
thiÖn víi ng−êi sö dông. VÝ dô: viÖc kÕt hîp thùc ®¬n víi c¸c biÓu t−îng, hoÆc
kÕt hîp gi÷a c¸c biÓu t−îng vµ c¸c tõ gîi ý (tooltip).
H×nh th¸i giao tiÕp kÕt hîp nµy kh¾c phôc ®−îc c¸c nh−îc ®iÓm cña c¸c
h×nh th¸i giao tiÕp ®¬n lÎ.
9. Giíi thiÖu vÒ MSDOS
a. LÞch sö cña DOS
- Nh÷ng n¨m 1980, h·ng Intel cho ra ®êi bé vi xö lý 16 bÝt 8086. Jim Paterson
®· bá c«ng søc x©y dùng hÖ ®iÒu hµnh míi cho lo¹i m¸y tÝnh sö dông bé vi
xö lý nµy ®ã lµ 86-DOS. H§H nµy ®· cè g¾ng kh¾c phôc nh÷ng ®iÓm yÕu cña
hÖ ®iÒu hµnh tr−íc ®ã lµ CP/M.
- Microsoft ®· mua l¹i H§H cña Jim Paterson vµ ph¸t triÓn thµnh hÖ ®iÒu hµnh
PCDOS hay MSDOS. Phiªn b¶n ®Çu tiªn cña MSDOS thÕ hÖ 1.0 ra ®êi vµo
8/1981.
- C¸c c¶i tiÕn cña MSDOS 1.0 so víi CP/M
+ Cã thªm lo¹i ch−¬ng tr×nh ch¹y EXE bªn c¹nh c¸c ch−¬ng tr×nh COM.
+ H§H t¸ch bé xö lý lÖnh thµnh mét phÇn néi tró vµ mét phÇn ngo¹i tró.
+ §Ó tiÖn lîi cho viÖc qu¶n lý ®Üa ng−êi ta ®−a ra b¶ng File Allocation Table
viÕt t¾t lµ FAT ®Ó qu¶n lý ®Üa. Mçi phÇn tö cña b¶ng FAT t−¬ng øng víi
521 byte trªn ®Üa gäi lµ sector, chØ ra sector nµy ®· cã d÷ liÖu hay cßn tù
do.
+ MSDOS 1.0 cho phÐp xö lý l« (batch) mét sè lÖnh cña MSDOS b»ng c¸ch
t¹o mét tÖp batch.
+ Ngµy th¸ng t¹o hay cËp nhËt tÖp còng ®−îc l−u tr÷ cïng víi th«ng tin cña
tÖp.
Phiªn b¶n MSDOS 2.0 ra ®êi vµo n¨m 1983
Phiªn b¶n MSDOS 3.0 ra ®êi vµo n¨m 1984
Phiªn b¶n MSDOS 4.0 ra ®êi vµo n¨m 1988
b. C¸c thµnh phÇn cña MSDOS
- BIOS: Chøa c¸c ch−¬ng tr×nh cña supervisor vµ qu¶n lý tÖp nh−ng ch−a kÕt
nèi thµnh hÖ thèng. Do ®ã cÇn ch−¬ng tr×nh kÝch ho¹t.
- Ch−¬ng tr×nh måi Boot Strap Loader: n»m ë sector ®Çu tiªn cña ®Üa tõ dïng
®Ó kÝch ho¹t toµn bé ch−¬ng tr×nh hÖ thèng.
- IO.SYS: D−íi sù hç trî cña BSL bao lÊy BIOS, cung cÊp c¸c dÞch vô c¬ b¶n
nhÊt nh− chia sÎ tµi nguyªn, qu¶n lý bé nhí.
- MSDOS.SYS: më réng IO.SYS lÇn n÷a
- COMMAND.COM: liªn l¹c gi÷a ng−êi sö dông vµ hÖ thèng, chøa c¸c lÖnh
néi tró.
- C¸c lÖnh ngoµi: lµ thµnh phÇn më réng theo tõng lÜnh vùc.
- §èi víi c¸c hÖ thèng tÝnh to¸n viÖc gäi ng¾t dïng cho viÖc c¸c bé phËn kh¸c
nhau cña hÖ thèng tÝnh to¸n b¸o cho processor biÕt vÒ kÕt qu¶ thùc hiÖn c«ng
viÖc cña m×nh.
2. Ph©n lo¹i ng¾t
Cã nhiÒu tiªu chÝ ®Ó ph©n lo¹i ng¾t
- Ph©n lo¹i theo ng¾t trong vµ ng¾t ngoµi
+ Ng¾t trong lµ ng¾t do c¸c tÝn hiÖu cña procesor b¸o cho processor
+ Ng¾t ngoµi lµ ng¾t do c¸c tÝnh hiÖu bªn ngoµi b¸o cho processor
- Ph©n lo¹i theo sù sö dông
+ Ng¾t dµnh cho H§H sö dông. NÕu thay ®æi xö lý ng¾t nµy sÏ lµm thay ®æi
chøc n¨ng cña hÖ thèng.
+ Ng¾t dµnh cho ng−êi sö dông
+ Ng¾t dù tr÷, hoÆc lµ ®Ó cho H§H sö dông sau nµy hoÆc ®Ó ng−êi sö dông
dïng cho môc ®Ých riªng.
- Ph©n lo¹i ng¾t cøng vµ ng¾t mÒm, ®©y lµ c¸ch ph©n lo¹i phæ biÕn nhÊt
a. Ng¾t mÒm
- Lµ ng¾t ®−îc gäi b»ng mét lÖnh ë trong ch−¬ng tr×nh. LÖnh gäi ng¾t tõ
ch−¬ng tr×nh ng«n ng÷ m¸y lµ lÖnh INT (INTerupt), c¸c lÖnh gäi ng¾t tõ
ch−¬ng tr×nh ng«n ng÷ bËc cao sÏ ®−îc dÞch thµnh lÖnh INT.
b. Ng¾t cøng
- Lµ ng¾t ®−îc gäi bëi c¸c ch−¬ng tr×nh ®−îc cøng ho¸ trong c¸c m¹ch ®iÖn tö.
- Ng¾t cøng ®−îc chia lµm hai lo¹i:
+ Ng¾t cøng che ®−îc (Maskable Interupt)
Lµ ng¾t cã thÓ dïng mÆt n¹ ®Ó ng¨n cho kh«ng ng¾t ho¹t ®éng. Ta cã thÓ
®Æt c¸c bÝt trong mÆt l¹ b»ng lÖnh CLI (CLear Interupt flag).
VÝ dô: Ng¾t chuét lµ ng¾t cøng cã thÓ bÞ che.
+ Ng¾t cøng kh«ng che ®−îc (Non Maskable Interupt)
Lµ ng¾t kh«ng thÓ dïng mÆt n¹ che ®−îc.
VÝ dô: Ng¾t 2 b¸o hiÖu cã lçi trong bé nhí.
Ng¾t cøng kh«ng che ®−îc cã ®é −u tiªn cao nhÊt vµ ®−îc CPU phôc vô
tr−íc tÊt c¶ c¸c ng¾t kh¸c.
3. Quy tr×nh xö lý ng¾t
a. Quy tr×nh xö lý ng¾t
Quy tr×nh xö lý ng¾t ®−îc chia thµnh 5 b−íc
- B−íc 1:
L−u ®Æc tr−ng sù kiÖn g©y ng¾t vµo n¬i quy ®Þnh
- B−íc 2:
L−u tr¹ng th¸i cña tiÕn tr×nh bÞ ng¾t vµo n¬i quy ®Þnh
- B−íc 3:
ChuyÓn ®iÒu khiÓn tíi ch−¬ng tr×nh xö lý ng¾t
- B−íc 4:
Thùc hiÖn ch−¬ng tr×nh xö lý ng¾t, tøc lµ xö lý sù kiÖn
- B−íc 5:
Kh«i phôc tiÕn tr×nh bÞ ng¾t
b. Ch−¬ng tr×nh con vµ ch−¬ng tr×nh xö lý ng¾t
- Gièng nhau
Khi thùc hiÖn xong c«ng viÖc, hai ch−¬ng tr×nh ®Òu trë vÒ ch−¬ng tr×nh ë
møc trªn nã.
Registers = record
case Integer of
0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word);
1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);
end;
Chó ý:
+ §Æt c¸c th«ng sè cho c¸c thanh ghi tr−íc khi gäi thñ tôc.
+ LÊy ra c¸c gi¸ trÞ tr¶ vÒ qua c¸c thanh ghi sau khi gäi thñ tôc.
- VÝ dô:
Dïng hµm 2AH ®Ó xem ngµy
uses Dos;
var
date, year, month, day: string;
regs: Registers;
begin
regs.ah := $2a; { Hµm $2A ®Ó lÊy ngµy }
msdos(regs);
with regs do
begin
str(cx,year); { ChuyÓn gi¸ trÞ tõ sè sang x©u }
str(dh,month);
str(dl,day);
end;
date := day+'/'+month+'/'+year;
writeln(' Hom nay la ', date);
end.
KÕt qu¶
Hom nay la 11/8/2001
Th−êng dïng ®Ó trá ®Õn ®Çu cña mét b¶ng dÞch chuyÓn trong bé nhí. Nã
còng ®−îc dïng ®Ó cÊt gi÷ phÇn ®Þa chØ offset cña mét ®Þa chØ theo ®o¹n.
+ CX (Count): Thanh ghi ®Õm
Th−êng dïng nh− mét bé ®Õm ®Ó ®iÒu khiÓn mét vßng lÆp hoÆc ®Ó chuyÓn
lÆp d÷ liÖu.
+ DX (Data): Thanh ghi d÷ liÖu
Th−êng dïng ®Ó cÊt gi÷ c¸c gi¸ trÞ 16 bit cho c¸c môc ®Ých chung.
C¸c thanh ghi chung ®−îc chia nhá thµnh hai thanh ghi 8 bit lµ thanh ghi
thÊp (Low) chøa c¸c bit tõ 0 ®Õn 7 vµ thanh ghi cao (High) chøa c¸c bit tõ 8 ®Õn
15. Nh− vËy ta cã 8 thanh ghi nhá lµ AH,AL, BH,BL, CH,CL, DH, DL.
b. C¸c thanh ghi ®o¹n
- CS (Code Segment): Thanh ghi ®o¹n lÖnh
Dïng ®Ó x¸c ®Þnh ®o¹n lÖnh, n¬i chøa ch−¬ng tr×nh ®ang ®−îc thùc hiÖn.
- DS (Data Segment): Thanh ghi ®o¹n d÷ liÖu
Dïng ®Ó x¸c ®Þnh ®o¹n d÷ liÖu, n¬i chøa d÷ liÖu cña ch−¬ng tr×nh ®ang
®−îc thùc hiÖn.
- SS (Stack Segmen): Thanh ghi ®o¹n ng¨n xÕp
Dïng ®Ó x¸c ®Þnh ®o¹n ng¨n xÕp, lµ vïng lµm viÖc t¹m thêi dïng ®Ó theo
dâi c¸c tham sè vµ c¸c ®Þa chØ ®ang ®−îc ch−¬ng tr×nh sö dông.
- ES (Extra Segment): Thanh ghi ®o¹n ngoµi
Khi vïng nhí cÇn sö dông v−ît qu¸ 64K, bé vi xö lý dïng thanh ES ®Ó trá
®Õn mét ®o¹n thªm. Ngoµi ra thanh ES cßn ®−îc sö dông cho viÖc chuyÓn d÷
liÖu gi÷a c¸c ®o¹n.
c. Thanh ghi cê
Lµ thanh ghi CF ®−îc dïng ®Ó l−u tr÷ c¸c cê
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
OF DF IF TF SF ZF AF PF CF
+ AF (Auxiliary Flag): Cê nhí phô dïng trong c¸c phÐp to¸n trªn c¸c sè
BCD (Binary-coded Decimal)
- C¸c cê ®iÒu khiÓn
+ DF (Direction Flag): Cê ®Þnh h−íng ®iÒu khiÓn h−íng tiÕn/lïi trong c¸c
phÐp lÆp
+ IF (Interupt Flag): Cê ng¾t ®iÒu khiÓn cho phÐp ng¾t
+ TF (Trap Flag): Cê bÉy ®iÒu kiÓn viÖc thùc hiÖn tõng lÖnh
d. Bé ®Õm ch−¬ng tr×nh
- Lµ thanh ghi IP ®−îc dïng ®Ó chøa ®Þa chØ offset trong ®o¹n lÖnh, n¬i mµ
ch−¬ng tr×nh ®ang thùc hiÖn, v× vËy cßn ®−îc gäi lµ con trá lÖnh.
8. Thay ®æi ng¾t trong hÖ thèng
a. C¸c b−íc khi muèn thay ®æi ng¾t
- ViÕt ch−¬ng tr×nh con xö lý ng¾t
{T¹o ch−¬ng tr×nh con xö lý ng¾t víi ®Þa chØ gäi 4 byte}
{$F+}
procedure thay_doi_break; interrupt;
begin
{thùc hiÖn c¸c xö lý ng¾t}
end;
{$F-}
- L−u tr÷ vector ng¾t cò
Sö dông thñ tôc
procedure GetIntVec(IntNo: Byte; var Vector: Pointer);
Vector thuéc kiÓu Pointer dïng ®Ó chøa ®Þa chØ ch−¬ng tr×nh xö lý ng¾t.
- Thay thÕ vector ng¾t míi
Sö dông thñ tôc
procedure SetIntVec(IntNo: Byte; Vector: Pointer);
- Thùc hiÖn c¸c chøc n¨ng kh¸c
- Kh«i phôc vector ng¾t cò
b. VÝ dô viÕt ch−¬ng tr×nh ®¨ng nhËp vµo m¸y
program Mat_Khau;
uses crt,dos;
var
p: pointer; { chøa ®Þa chØ ng¾t cò }
break_flag: boolean;
i,j: byte;
password: string[16];
procedure pw;
var i: byte;
begin
password:= '';
{ Password cã ®é dµi b»ng 3 }
for i:= 1 to 3 do password:=password + readkey;
end;
{T¹o ch−¬ng tr×nh con xö lý ng¾t víi ®Þa chØ gäi 4 byte}
{$F+}
procedure thay_doi_break; interrupt;
begin
break_flag:=true;
end;
{$F-}
begin
clrscr;
{ l−u ng¾t Ctrl + Break vµo vïng nhí ®−îc trá bëi p }
getintvec($1B,p);
break_flag:=false;
inline($EA/$00/$00/$FF/$FF);
{ LÖnh JMP FFFF:0000 }
end.
9. Mét sè hµm vµ thñ tôc th−êng dïng trong lËp tr×nh hÖ thèng
- C¸c to¸n tö Logic
not
and
or
xor
shl
shr
- VÝ dô:
{
not | Bitwise negation|integer type |integer type
and | Bitwise and |integer type |integer type
or | Bitwise or |integer type |integer type
xor | Bitwise xor |integer type |integer type
shl | Shift left |integer type |integer type
shr | Shift right |integer type |integer type
}
procedure TestShift;
var
A: Word;
begin
writeln;
writeln('-------------');
A := $8FFF;
WriteWord(A);
A := A shl 2;
WriteWord(A);
A := A shr 4;
WriteWord(A);
end;
procedure TestNotAndOrXor;
var
A,B: Word;
begin
writeln;
writeln('-------------');
A:= $1234;
B:= $5678;
WriteWord(A);
WriteWord(B);
WriteWord(NOT A);
WriteWord(A AND B);
WriteWord(A OR B);
WriteWord(A XOR B);
end;
begin
TestShift;
TestNotAndOrXor;
end.
{
Ban Dau : w = 36863 = 8FFF = 1000 1111 1111 1111
Sau quay trai: w = 16380 = 3FFC = 0011 1111 1111 1100
Sau quay phai: w = 1023 = 03FF = 0000 0011 1111 1111
-------------
}
- Hµm lÊy byte cao cña mét tõ (word)
function Hi(X): Byte; Lo(x)
- Hµm lÊy byte thÊp cña mét tõ (word) Hi(x)
function Lo(X): Byte;
- Hµm ho¸n ®æi néi dung byte thÊp vµ byte cao
function Swap(X): (Same type as parameter);
- VÝ dô:
var
A,B: Word;
A1,A2: Byte;
begin
A := $1234; { 4660 }
writeln;
write('A = ', A, ' = $');WriteHexWord(A);
- Hµm lÊy ®Þa chØ offset cña mét biÕn, mét thñ tôc hay mét hµm
function Ofs(X): Word;
- Hµm lÊy ®Þa chØ ®o¹n cña ®o¹n m· hiÖn thêi
function CSeg: Word;
- Hµm lÊy ®Þa chØ ®o¹n cña ®o¹n d÷ liÖu
function DSeg: Word;
- Hµm lÊy ®Þa chØ ®o¹n cña ®o¹n ng¨n xÕp (stack)
function SSeg: Word;
- Hµm lÊy gi¸ trÞ cña con trá stack IP cña ®o¹n ng¨n xÕp
function SPtr: Word;
- VÝ dô:
{ CSeg, DSeg, SSeg, SPtr, Ofs, and Seg functions.}
{ function Ofs(X): Word; }
{
CSeg : The current code segment is $0DC7
DSeg : The global data segment is $0E6D
SSeg : The stack segment is $0E98
SPtr : The stack pointer is at $3FFE
i is at offset $0062 in segment $0E6D
}
- Hµm lÊy ®Þa chØ cña mét biÕn, mét thñ tôc hay mét hµm
function Addr(X): pointer;
- Hµm lÊy ®Þa chØ khi biÕt ®Þa chØ ®o¹n vµ ®Þa chØ offset
function Ptr(Seg, Ofs: Word): Pointer;
- VÝ dô:
{ function Addr(X): pointer; }
{ function Ptr(Seg, Ofs: Word): Pointer; }
var
P1, P2: ^Byte;
i, j : Byte;
begin
writeln('--------');
i := 1;
P1 := Addr(i);
Writeln('i = ', P1^);
j := i + 1;
P2 := Ptr( seg(j), ofs(j));
Writeln('j = ', P2^);
end.
{
i = 1
j = 2
}
- Thñ tôc xin cÊp ph¸t vµ gi¶i phãng bé nhí bé nhí
procedure GetMem(var P: Pointer; Size: Word);
procedure FreeMem(var P: Pointer; Size: Word);
- VÝ dô:
{ function SizeOf: Integer; }
{ procedure GetMem(var P: Pointer; Size: Word);}
{ The largest block that can be safely allocated
on the heap at one time is 65,528 bytes (64K-$8). }
{ procedure FreeMem(var P: Pointer; Size: Word); }
type
NhanVien = record
var
A: array[1..2] of Byte;
B: Word;
i: Byte;
begin
for i := 1 to 2 do A[i] := i;
{ A[1] = 1; A[2] = 2; => A = $0201 }
Move(A, B, SizeOf(A));
{ B = 513 = $0201; }
writeln;
write('B = ', B);
write(' = '); WriteHexWord(B);
end.
- Thñ tôc ®iÒn ®Çy mét sè c¸c byte víi mét gi¸ trÞ kiÓu byte hoÆc kiÓu char
C¸c thiÕt bÞ ®iÒu khiÓn nµy sÏ th«ng dÞch tÝn hiÖu ®iÒu khiÓn cho phï hîp
víi thiÕt bÞ ngo¹i vi g¾n víi nã vµ sÏ ®iÒu khiÓn thao t¸c t−¬ng øng víi thiÕt bÞ.
§èi víi mét hÖ thèng m¸y tÝnh c¸c thiÕt bÞ ®iÒu khiÓn ho¹t ®éng nh−
nh÷ng m¸y tÝnh chuyªn dïng (cã hÖ lÖnh riªng vµ ch−¬ng tr×nh riªng). Mét m¸y
tÝnh cã thÓ cã nhiÒu thiÕt bÞ ®iÒu khiÓn.
Processor
IO Device 1
IO Device 2
IO Device m
b. Kªnh
Mét thiÕt bÞ ®iÒu khiÓn vµ c¸c thiÕt bÞ ngo¹i vi do nã ®iÒu khiÓn t¹o thµnh
mét hÖ thèng ho¹t ®éng ®éc lËp gäi lµ kªnh. Mét m¸y tÝnh cã thÓ cã nhiÒu kªnh,
c¸c kªnh nµy ph¶i cã kh¶ n¨ng liªn hÖ víi processor.
- Kªnh ®¬n vµ kªnh bã:
NÕu thiÕt bÞ ®iÒu khiÓn lµm viÖc trùc tiÕp víi thiÕt bÞ vµo ra ta cã kªnh
®¬n.
Kªnh bã cã kªnh cã nhiÒu kªnh ®¬n, tøc lµ thiÕt bÞ ®iÒu khiÓn l¹i ®iÒu
khiÓn c¸c thiÕt bÞ ®iÒu khiÓn kh¸c.
Device Controller
IO Device 11 IO Device 21
IO Device 12
vËy phÇn lín c¸c thiÕt bÞ vµo ra lµm viÖc víi tõng khèi d÷ liÖu chø kh«ng ph¶i
tõng byte riªng lÎ. §Ó ®¶m b¶o n¨ng suÊt, hÖ thèng cÇn ph¶i
+ Cè g¾ng thùc hiÖn song song c«ng viÖc vµo ra víi c¸c phÐp xö lý th«ng tin
kh¸c
+ Gi¶m sè l−îng c¸c phÐp trao ®æi vµo ra vËt lý
+ Thùc hiÖn tr−íc c¸c phÐp nhËp d÷ liÖu
- Nh− vËy ng−êi ta ph¶i sö dông phßng ®Öm ®Ó n©ng cao n¨ng suÊt
+ Phßng ®Öm cña hÖ ®iÒu hµnh lµ mét vïng nhí dïng ®Ó l−u tr÷ t¹m thêi
c¸c th«ng tin phôc cho c¸c phÐp vµo ra.
+ Ngoµi ra cßn cã phßng ®Öm cña thiÕt bÞ kh«ng phô thuéc vµo hÖ ®iÒu
hµnh gäi lµ phßng ®Öm kü thuËt. VÝ dô phßng ®Öm cña m¸y in.
- VÝ dô
Assign(f,’f1.txt’);
Reset(f);
Read(f,a);
Reset(f)
Buffer
Read(f,a)
Khi thùc hiÖn Reset(f) th× hÖ thèng ®· ®−a d÷ liÖu tõ ®Üa lªn vïng ®Öm.
Khi ch−¬ng tr×nh muèn ®äc d÷ liÖu tõ tÖp vµo biÕn a th× hÖ thèng chØ cÇn lÊy d÷
liÖu tõ vïng ®Öm thay cho viÖc ®äc tÖp.
Gi¶ thiÕt mçi lÇn truy nhËp ®Üa mÊt 0,01 gi©y, kÝch th−íc vïng ®Öm lµ 512
bytes vµ thêi gian truy nhËp vµo bé nhí lµ rÊt nhá (so víi 0,01)
Sè byte cÇn ®äc Kh«ng cã vïng ®Öm Cã vïng ®Öm
1B 0,01’’ 0,01’’
512B 5’’ = 512x0.01 0,01’’
5KB 50’’ = 10x5 0.1’’ = 10x0.01
50KB 8’ = 10x50 1’’ = 10x01.
Buffer
System
Buffer
Read(f,a)
System
Write(f,a)
a
- −u ®iÓm:
+ §¬n gi¶n
+ Cã hÖ sè song song cao v× tèc ®é gi¶i phãng vïng ®Öm lín
+ Cã tÝnh chÊt v¹n n¨ng, thÝch øng víi mäi ph−¬ng ph¸p truy nhËp
- Nh−îc ®iÓm
+ Tèn bé nhí
+ Tèn thêi gian ®Ó trao ®æi th«ng tin trong bé nhí
b. Phßng ®Öm xö lý
Th«ng tin ®−îc xö lý ngay trong phßng ®Öm kh«ng ghi l¹i vµo n¬i kh¸c
trong bé nhí. ChØ thÞ ®äc x¸c ®Þnh ®Þa chØ th«ng tin chø kh«ng cung cÊp th«ng
tin chø kh«ng cung cÊp gi¸ trÞ.
Buffer
System
®Þa chØ a
- −u ®iÓm:
+ TiÕt kiÖm bé nhí
+ Kh«ng mÊt thêi gian chuyÓn th«ng tin ë bé nhí trong, thÝch hîp khi cÇn
kÝch th−íc b¶n ghi d÷ liÖu lín.
- Nh−îc ®iÓm
+ TÝnh v¹n n¨ng kh«ng cao
+ HÖ sè song song thÊp
c. Phßng ®Öm vßng trßn
Phßng ®Öm vßng trßn th−êng cã ba phßng ®Öm
§äc Ghi
Xö lý
- Sau mét kho¶ng thêi gian vai trß cña ba phßng ®Öm ®−îc thay ®æi cho nhau.
- −u ®iÓm:
+ Cã sù ®ång bé gi÷a ®äc, ghi vµ xö lý (ba qu¸ tr×nh ®−îc thùc hiÖn song
song).
+ Th−êng ¸p dông cho hÖ c¬ së d÷ liÖu vµ h÷u dông nhÊt khi l−îng th«ng tin
vµo b»ng l−îng th«ng tin ra.
- Nh−îc ®iÓm (kh«ng thÊy cã, tù nghÜ ra)
3. SPOOL- Simultaneous Peripheral Operation On-Line
M« pháng c¸c phÐp trao ®æi vµo ra ngay trong lóc thùc hiÖn
- Spool lµ c¬ chÕ thay mét thiÕt bÞ ngo¹i vi b»ng mét thiÕt bÞ trung gian cã kh¶
n¨ng dïng chung, cã tèc ®é cao vµ sau ®ã thay trë l¹i thiÕt bÞ trung gian b»ng
thiÕt bÞ cuèi khi ®iÒu kiÖn cho phÐp.
- −u ®iÓm:
+ Cã thÓ mau chãng kÕt thóc ch−¬ng tr×nh ng−êi sö dông
+ Ta gi¶i phãng ®−îc c¸c rµng buéc vÒ sè l−îng thiÕt bÞ
+ Khai th¸c c¸c thiÕt bÞ ngo¹i vi mét c¸ch tèi −u
- C¸c ph−¬ng ph¸p tæ chøc SPOOL
+ Ph−¬ng ph¸p 1
TiÕn hµnh ®−a th«ng tin ra thiÕt bÞ trung gian ë trªn thiÕt bÞ mµ chóng ta
m« pháng vµ chóng ta cã thÓ sao chÐp nguyªn v¨n kÕt qu¶ ra thiÕt bÞ cuèi, ®iÒu
nµy chØ lµm ®−îc khi 2 thiÕt bÞ cã tÝnh n¨ng t−¬ng ®−¬ng.
+ Ph−¬ng ph¸p 2
B−íc 1: T¹o ch−¬ng tr×nh kªnh 1 theo yªu cÇu cña ng−êi sö dông
VÝ dô: ng−êi sö dông cÇn ®−a ra m¸y in => t¹o ch−¬ng tr×nh kªnh ®−a ra
m¸y in.
B−íc 2: T¹o ch−¬ng tr×nh kªnh 2 cã nhiÖm vô l−u tr÷ ch−¬ng tr×nh kªnh 1
vµ d÷ liÖu cña nã lªn thiÕt bÞ trung gian
Xö lý kÕt thóc: chuyÓn ch−¬ng tr×nh kªnh ®· l−u tr÷ (ch−¬ng tr×nh kªnh 1)
ra kªnh cña thiÕt bÞ cuèi.
§èi víi mµu nÒn chØ cã thÓ cã c¸c mÇu tõ 1 – 8 tøc lµ ®Õn mµu cã m· lµ
7H (White).
- HiÓn thÞ mét ký tù
Ký tù cã vÞ trÝ (y,x) tÝnh tõ (0,0) ®Õn (79,24) trªn mµn h×nh th× vÞ trÝ cña nã
trong bé nhí lµ
x
y
(y,x)
begin
clrscr;
x := 9; y := 9; { dßng 10 cét 10 }
for i:= 1 to length(str) do
A[160*y + 2*(x+i)] := ord(str[i]);
readkey;
end.
- VÝ dô: Khëi t¹o mµn h×nh ®å ho¹ 256 mÇu (mét pixel chiÕm 1 byte) vµ vÏ
mét ®−êng th¼ng tõ (0,0) – (99,99) (CÇn ph¶i ®Æt l¹i trang???)
uses Graph,Crt;
var
gd,gm: integer;
A: Array[0..4000] of Byte absolute $A000:$0000;
i: integer;
begin
gd :=installUserDriver('SVGA256',Nil);
gm := 2; { 640 x 480 }
InitGraph(gd,gm,'c:\tp70\bgi');
for i := 0 to 99 do
A[i*(getmaxx + 1) + i] := Green;
{ v× getmaxx cho 639 v× vËy ph¶i céng thªm 1 }
readkey;
closegraph;
end.
c. Mét sè hµm phôc vô mµn h×nh cña ROM BIOS
Ta sö dông ng¾t 10h cña ROM BIOS cho mµn h×nh. Gi¸ trÞ cña hµm ®−îc
®−a vµo thanh ghi AH.
- §Æt kÝch th−íc con trá: Ta sö dông hµm 01h
+ Input:
AH = 01H
CH = start line (0-1fH; 20H=no cursor)
CL = end line (0-1fH)
- §Æt vÞ trÝ con trá: Ta sö dông hµm 02h
+ Input:
AH = 02H
BH = video page (0-based)
DH,DL = row,column (0-based)
+ VÝ dô:
uses crt, dos;
var
r: Registers;
begin
r.ah := $02; { ham dat vi tri con tro }
r.bh := 0; { trang 0 }
r.dh := 10; { dong 10 }
r.dl := 40; { cot 40 }
intr($10,r);
readkey;
end.
- §äc con trá: Ta sö dông hµm 03h
+ Input:
AH = 03H
BH = video page (0-based)
+ Output:
DH,DL = current row,column of cursor
CH,CL = current start,end line of cursor
+ VÝ dô:
uses crt, dos;
var
r: Registers;
begin
clrscr;
r.ah := $02;
r.bh := 0;
intr($10,r);
write('x');
writeln;
writeln('vi tri hien thoi cua con tro la (',
r.dh,' , ', r.dl, ')');
writeln('start line = ', r.ch, ', end line = ', r.cl);
readkey;
end.
- Cuén mµn h×nh lªn mét sè dßng trong ph¹m vi mét cöa sæ: Sö dông hµm 06h
+ Input:
AH = 06H
CH,CL = row,clm of upper left corner of window (0-based)
DH,DL = row,clm of lower right corner of window
AL = number of blank lines to scroll in (0=blank entire
window)
BH = video attribute to be used on blank lines
+ VÝ dô:
uses crt, dos;
var
r: Registers;
i,j: byte;
begin
clrscr;
for i := 1 to 9 do
for j := 1 to 80 do
write('.');
for i := 10 to 25 do
for j := 1 to 80 do
write('!');
readkey;
end.
- Cuén mµn h×nh xuèng mét sè dßng trong ph¹m vi mét cöa sæ:
+ Sö dông hµm 07h. C¸c tham sè nh− hµm 06h
- Bµi tËp: L−u l¹i toµn bé mµn h×nh v¨n b¶n ra tÖp, sau ®ã kh«i phôc l¹i mµn
h×nh khi hoµn thµnh c«ng viÖc gi¶i ph−¬ng tr×nh bËc 2.
- Lêi gi¶i
uses crt,dos;
type
MH = Array[0..4000] of Byte;
var
A: MH absolute $B800:$0000;
f: file of MH;
begin
clrscr;
writeln('Xin chao cac ban da den voi mon HDH');
writeln('Ban khoe chu');
assign(f,'mh.hex');
rewrite(f);
write(f,A); { dua bo nho man hinh ra tep }
close(f);
while keypressed do readkey; readkey;
clrscr;
writeln('Bam mot phim bat ky');
while keypressed do readkey; readkey;
reset(f);
read(f,A); { dua tu tep ra bo nho man hinh }
while keypressed do readkey; readkey;
close(f);
end.
scan). §Ó chØ tíi vÞ trÝ trong bé nhí cña ký tù ®Çu tiªn (trong c¸c c¸c ký tù cßn
trong bé ®Öm) ta dïng mét tõ nhí t¹i ®Þa chØ $0040:$001A, gäi lµ con trá ®Çu
(Head). VÞ trÝ cña ký tù tiÕp theo ®−îc chØ bëi néi dung cña tõ nhí t¹i ®Þa chØ
$0040:$001C gäi lµ con trá cuèi (Tail). Head vµ Tail chØ lµ ®Þa chØ offset cña
®o¹n cã ®Þa chØ ®o¹n lµ $0040.
0040:001E
0040:003D
+ Khi cã cÇn ®−a mét ký tù vµo bé ®Öm th× ®−a vµo hai byte nhí ®−îc trá
bëi con trá Tail. Sau ®ã Tail ®−îc t¨ng lªn 2 (Tail := Tail + 2, nÕu tail >
$003D th× Tail := $001E). Khi lÊy ra mét ký tù th× hÖ thèng lÊy hai byte
®−îc trá bëi con trá Head, sau ®ã Head ®−îc t¨ng lªn.
+ NÕu cã ký tù trong bé ®Öm th× gi¸ trÞ cña head kh¸c gi¸ trÞ cña tail.
Ta cã thÓ thay hµm KeyPressed b»ng phÐp so s¸nh (head <> tail)
+ NÕu bé ®Öm rçng th× gi¸ trÞ cña head b»ng gi¸ trÞ cña tail.
Ta cã thÓ “xo¸ rçng” vïng ®Öm bµn phÝm b»ng c¸ch g¸n gi¸ trÞ cña head =
tail (head := tail) hoÆc ng−îc l¹i (tail := head).
- VÝ dô: ch−¬ng tr×nh ®äc m· scan vµ m· ASCII khi bÊm phÝm. Chó ý: ®èi víi
mét sè phÝm nh− shift hay caps lock th× kh«ng b¾t ®−îc do ch−¬ng tr×nh xö lý
ng¾t kh«ng chuyÓn thµnh m· hai byte. Muèn b¾t ®−îc th× dïng ch−¬ng tr×nh
chÆn ng¾t bµn phÝm vµ ®äc tõ cæng 60H.
uses crt,dos;
var
head: Word absolute $0040:$001A;
tail: Word absolute $0040:$001C;
ch1, ch2, i : byte;
begin
clrscr;
repeat
{ chê phÝm bÊm }
while (head = tail) do; { thay cho Not KeyPressed }
{ ®ä m· scan cña ký tù }
ch2 := Mem[$0040 : (head + 1)];
write('Ky tu ''', chr(ch1), ''' co ma ascii = ', ch1);
write(' va ma scan = ', ch2); writeln;
i : byte;
begin
writeln('Chuong trinh gia lap go phim');
head := tail;
for i := 0 to 7 do WriteToKb(a[i]);
{ chay tu dau nhac dos se thay lenh dir duoc thuc hien }
{ hoac thay bang 'while keypressed do write(readkey);' }
end.
c. ChuyÓn ®æi c¸c m· scan
Khi ROM-BIOS nhËn ®−îc m· scan qua cæng 60H th× nã sÏ tiÕn hµnh
chuyÓn sang m· 2 byte. Trong qu¸ tr×nh chuyÓn ®æi ROM-BIOS lu«n kiÓm tra
tr¹ng th¸i c¸c phÝm SHIFT, CTRL, ALT vµ c¸c phÝm Capslock, Numlock ®Ó tr¶
kÕt qu¶n ®óng. Tr¹ng th¸i c¸c phÝm ®Æc biÖt nµy ®−îc ROM-BIOS l−u trong 2
byte n»m t¹i ®Þa chØ $0040:$0017 (hay 0417) vµ $0040:$0018 (hay 0418).
ROM-BIOS còng kiÓm tra 1 sè tæ hîp phÝm ®Æc biÖt cã t¸c dông nh− lµ c¸c lÖnh
yªu cÇu ROM-BIOS thùc hiÖn mét c«ng viÖc nµo ®ã. VÝ dô nh− Ctrl – Alt –
Del yªu cÇu khëi ®éng l¹i m¸y.
Trong tr−êng hîp phÝm kÐp (vÝ dô: phÝm 1 vµ phÝm ! ë hµng phÝm trªn) th×
m· ASCII cña chóng kh¸c nhau (ord(‘1’) = 49 vµ ord(‘!’) = 33) nh−ng vÉn gi÷
nguyªn gi¸ trÞ m· scan cña chóng (scan(‘1’) = 2). Hai phÝm cho ký tù gièng nhau
nh−ng ë kh¸c vÞ trÝ th× cho m· scan kh¸c nhau (m· scan cña phÝm 1 trªn hµng
phÝm trªn lµ 2, cßn cña phÝm 1 trªn d·y phÝm sè lµ 79).
NÕu cã mét phÝm phÝm chøc n¨ng ®−îc bÊm th× m· ASCII b»ng 0, cßn m·
scan ®−îc gi÷ nguyªn (phÝm F1 cã m· scan 59).
+ Keyboard Shift Status Flags
§èi víi bµn phÝm cò
+------------------------------------------------------------------------+
| +-7--6--5--4--3--2--1--0+ Perform INT 16H Fn 02H |
| |I |C |N |S |a |c |sL|sR| or fetch AL=byte at 0:0417 |
| +-----------------------+ bit |
| | | | | | | | +-> 0: alpha-shift (right side) DOWN (AL & 01H) |
| | | | | | | +----> 1: alpha-shift (left side) DOWN (AL & 02H) |
| | | | | | +-------> 2: Ctrl-shift (either side) DOWN (AL & 04H) |
| | | | | +----------> 3: Alt-shift (either side) DOWN (AL & 08H) |
| | | | +-------------> 4: ScrollLock state (AL & 10H) |
| | | +----------------> 5: NumLock state (AL & 20H) |
| | +-------------------> 6: CapsLock state (AL & 40H) |
| +----------------------> 7: Insert state (AL & 80H) |
+------------------------------------------------------------------------+
| +-7--6--5--4--3--2--1--0+ |
| |i |c |n |s | |sy|aL|cL| fetch AL=byte at 0:0418 |
| +-----------------------+ bit |
| | | | | | | | +-> 0: Ctrl-shift (left side) DOWN (AL & 01H) |
| | | | | | | +----> 1: Alt-shift (left side) DOWN (AL & 02H) |
| | | | | | +-------> 2: SysReq DOWN (AL & 04H) |
| | | | | +----------> 3: hold/pause state (AL & 08H) |
| | | | +-------------> 4: ScrollLock DOWN (AL & 10H) |
| | | +----------------> 5: NumLock DOWN (AL & 20H) |
| | +-------------------> 6: CapsLock DOWN (AL & 40H) |
| +----------------------> 7: Insert DOWN (AL & 80H) |
+------------------------------------------------------------------------+
+ §èi víi bµn phÝm míi (101 phÝm) th× byte tr¹ng th¸i t¹i $0040:$0017
+------------------------------------------------------------------------+
| |
| +-7--6--5--4--3--2--1--0+ |
| |sy|c |n |s |aR|cR|aL|cL| Perform INT 16H Fn 12H (101-key BIOS only)|
| +-----------------------+ bit |
| | | | | | | | +-> 0: Ctrl-shift (left side) DOWN (AH & 01H) |
| | | | | | | +----> 1: Alt-shift (left side) DOWN (AH & 02H) |
| | | | | | +-------> 2: Ctrl-shift (right side) DOWN (AH & 04H) |
| | | | | +----------> 3: Alt-shift (right side) DOWN (AH & 08H) |
| | | | +-------------> 4: ScrollLock DOWN (AH & 10H) |
| | | +----------------> 5: NumLock DOWN (AH & 20H) |
| | +-------------------> 6: CapsLock DOWN (AH & 40H) |
| +----------------------> 7: SysReq DOWN (AH & 80H) |
+------------------------------------------------------------------------+
- Bµi tËp: LËp tr×nh hiÖn thÞ tr¹ng th¸i cña c¸c phÝm
Caps lock (AND $40), Num lock (AND $20), Scroll lock (AND $10)
uses crt,dos;
var
a: byte absolute $0040:$0017;
const
tg : array[false .. true] of string = ('Tat','Bat');
begin
writeln('Trang thai cac phim nhu sau :');
writeln('Trang thai phim Caps lock la ', tg[(a AND $40) > 0]);
writeln('Trang thai phim Num lock la ', tg[(a AND $20) > 0]);
writeln('Trang thai phim Scroll lock la ', tg[(a AND $10) > 0]);
end.
d. Mét sè hµm phôc vô bµn phÝm cña ROM-BIOS
- Trong ROM-BIOS cã hai ng¾t kh¸c nhau cho bµn phÝm
+ Ng¾t 9H: Dïng ®Ó thu thËp d÷ liÖu tõ bµn phÝm vµ ®Æt vµo vïng ®Öm ë ®Þa
chØ thÊp trong bé nhí.
+ Ng¾t 16H: §¸p øng c¸c yªu cÇu phôc vô bµn phÝm vµ truyÒn d÷ liÖu tõ bé
®Öm bµn phÝm ®Õn c¸c ch−¬ng tr×nh kh¸c.
- §äc mét ký tù kÕ tiÕp tõ bµn phÝm: Ta sö dông ng¾t 16h, hµm 00h
+ Input:
AH = 00H
+ Output:
AL = ASCII { b»ng 0 cho c¸c phÝm ®Æc biÖt }
AH = Scan Code
- KiÓm tra ®· cã ký tù trong bé ®Öm ch−a: Ta sö dông ng¾t 16h, hµm 01h
+ Input:
AH = 01H
+ Output:
ZF = ZR = 1: NÕu kh«ng cã ký tù nµo
ZF = NZ = 0: NÕu trong bé ®Öm cã ký tù
Thanh ghi cê
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
OF DF IF TF SF ZF AF PF CF
+ Ph¶i gäi lµ ch−¬ng tr×nh xö lý ng¾t bµn phÝm cña hÖ thèng ®Ó chuyÓn d÷
liÖu tõ m· scan vÒ m· 2 byte. V× vËy ta khai b¸o mét biÕn kiÓu thñ tôc vµ
g¸n ®Þa chØ cña ch−¬ng tr×nh xö lý ng¾t cò cho ®Þa biÕn nµy ®Ó sau nµy ta
cã thÓ gäi ®−îc thñ tôc nµy.
Var kb: procedure;
getintvec($9,@kb);
+ Tr−íc khi gäi l¹i ch−¬ng tr×nh xö lý ng¾t trªn ph¶i kh«i phôc l¹i thanh ghi
cê b»ng lÖnh PushF (push flags) hay cã m· m¸y lµ $9C.
- VÝ dô: ch−¬ng tr×nh ®äc m· scan bµn phÝm
uses dos,crt;
var
kb: procedure;
ch: char;
{$F+}
procedure keyclick; interrupt;
begin
if (Port[$60] < $80) then writeln('Scan = ',Port[$60]);
{ chi lay ma scan khi bam phim, khong lay ma nha phimm }
inline($9C); { PushF push flags }
kb; { gäi l¹i thñ tôc xö lý ng¾t cò }
end;
{$F-}
begin
getintvec($9,@kb);
setintvec($9,addr(keyclick));
repeat ch := readkey;
until ch = #27;
setintvec($9,@kb);
end.
- VÝ dô: ho¸n ®æi hai phÝm 1 vµ 2 (ë trªn hµng phÝm trªn)
uses dos,crt;
var
kb: procedure;
ch: char;
sc: byte;
{$F+}
procedure keyclick; interrupt;
begin
sc := Port[$60];
inline($9C); { PushF push flags }
kb;
if (sc < $80) then Swap(sc);
end;
{$F-}
begin
getintvec($9,@kb);
setintvec($9,addr(keyclick));
repeat ch := readkey;
writeln(' Bam phim ', ch);
until ch = #27;
setintvec($9,@kb);
end.
- Bµi tËp: Trong lóc thùc hiÖn c«ng viÖc gi¶i ph−¬ng tr×nh bËc 2 (cô thÓ trong
lóc nhËp d÷ liÖu) lóc ng−êi sö dông bÊm ESC th× tho¸t khái ch−¬ng tr×nh. BiÕt
m· ASCII cña ESC = 27 = 1Bh vµ m· scan = 1. Gi¶ sö thñ tôc gi¶i ph−¬ng
tr×nh bËc 2 Giai_PTB2 ®· cã s½n.
uses dos,crt;
var
kb: procedure;
ch: char;
function check : boolean;
var
tail: Word absolute $0040:$001C;
x: word;
begin
{ bé nhí bµn phÝm tõ 0040:001E - 0040:003D }
x := tail - 2;
if (x < $001E) then x := $003C;
if (Mem[$0040 : x] = $1B) AND
(Mem[$0040 : (x + 1) ] = $01) then
check := true
else
check := false;
end;
{$F+}
procedure keyclick; interrupt;
begin
inline($9C); { PushF push flags }
kb;
if(check) then
begin
writeln('Ban da bam Esc');
setintvec($9,@kb);
halt;
end;
end;
{$F-}
begin
getintvec($9,@kb);
setintvec($9,addr(keyclick));
writeln('Chuong trinh bat phim');
writeln('Bam Enter hoac ESC de thoat');
repeat ch := readkey;
writeln('Bam Enter hoac ESC de thoat');
until ch = #13;
writeln('Ban da bam Enter');
setintvec($9,@kb);
end.
6. Qu¶n lý tÖp
a. C¸c kh¸i niÖm
- TÖp: Cã hai ®Æc tr−ng cña tÖp
+ L−u tr÷ d÷ liÖu bé nhí ngoµi: Tån t¹i cho tíi khi ng−êi sö dông xo¸ khái
bé nhí ngoµi. Kh«ng bÞ mÊt d÷ liÖu khi t¾t m¸y tÝnh.
+ Cã nhiÒu ng−êi sö dông: (nhu cÇu chia sÎ tÖp)
TÖp thùc hiÖn: NhiÒu ng−êi cïng muèn dïng mét øng dông nµo ®ã
TÖp cña nh©n hÖ ®iÒu hµnh:
TÖp v¨n b¶n: text, ¶nh, ©m thanh
Th− môc: gåm nhiÒu tÖp
- TÖp gåm cã Tªn tÖp vµ phÇn më réng (kh«ng b¾t buéc) ®Ó
+ Ng−êi sö dông cã thÓ hiÓu ®−îc
+ PhÇn më réng cho tÖp dïng ®Ó
Nhãm c¸c tÖp cïng kiÓu theo mét quy −íc
TÖp cña hÖ ®iÒu hµnh
+ BiÓu t−îng còng lµ thµnh phÇn cña phÇn më réng gióp ng−êi sö dông qu¶n
lý tèt h¬n
- Thuéc tÝnh cña tÖp
+ Ng−êi së h÷u, nhãm së h÷u
+ Thuéc tÝnh Èn, hÖ thèng, l−u tr÷(archive), chØ ®äc
+ Thêi gian lÇn truy nhËp cuèi cïng, thêi giansöa ®æi cuèi cïng
+ QuyÒn ®iÒu khiÓn, mËt khÈu
+ KÝch th−íc hiÖn t¹i, kÝch th−íc tèi ®a
+ C¸c øng dông cã liªn kÕt, vËn hµnh (operation)
- Tæ chøc tÖp
+ Tæ chøc tuÇn tù theo byte: d÷ liÖu ®−îc tæ chøc l−u tr÷, ®äc vµ ghi mét
c¸ch tuÇn tù tõng byte. C¸ch tæ chøc nµy cã tÝnh v¹n n¨ng, mäi øng dông
®Òu cã thÓ sö dông tÖp.
+ Tæ chøc tuÇn tù theo b¶n ghi: d÷ liÖu ®−îc tæ chøc l−u tr÷, ®äc vµ ghi mét
c¸ch tuÇn tù tõng b¶n ghi víi kÝch th−íc cè ®Þnh.
+ Tæ chøc c©y c¸c b¶n ghi: d÷ liÖu ®−îc tæ chøc l−u tr÷, ®äc vµ ghi theo c©y
c¸c b¶n ghi theo tr−êng kho¸.
§Æc thï
HÖ -§é nÐn cao
®iÒu Truy nhËp vËt lý
-Cã tÝnh chÊt
hµnh v¹n n¨ng
-Tån t¹i c¸c
PhÐp trao ®æi vµo/ra
macro
ThiÕt bÞ ngo¹i vi
Sector
Head
+ D÷ liÖu ®−îc ghi trªn ®Üa theo c¸c ®−êng trßn ®ång t©m gäi lµ track (r·nh)
khi ®Üa cã nhiÒu mÆt gäi lµ cylinder.
+ Mçi cylinder ®−îc chia thµnh c¸c sector (cung). Mçi sector l−u tr÷ ®−îc
mét sè c¸c byte.
+ §Üa cã thÓ cã 1, 2 hay nhiÒu mÆt (side). Mçi mÆt ®−îc truy nhËp b»ng mét
®Çu tõ (head).
- Dung l−îng cña ®Üa phô thuéc vµo sè ®Çu tõ, sè cylinder, sè sector trªn mét
track vµ sè byte trªn mét sector
- VÝ dô: ®Üa cã c¸c th«ng sè sau
Sè byte / sector = 512
Sè sector / track = 63
Sè cylinder = 523
Sè mÆt = 128
Ta cã dung l−îng ®Üa b»ng 523*128*63*512 ≈ 2 GB
- VÝ dô: ®Üa cã c¸c th«ng sè sau (cho bµi tËp t¹i líp)
Sè byte / sector = 512
Sè sector / track = 18
Sè mÆt = 2
Sè cylinder = 80
Ta cã dung l−îng ®Üa b»ng 2*80*18*512 ≈ 1.44 MB
- §Þa chØ vËt lý cña mét sector trªn mét ®Üa ®−îc ®Æc tr−ng bëi (Cylinder,
Head, Sector).
+ C¸c cylinder ®−îc ®¸nh sè tõ ngoµi vµo b¾t ®Çu tõ 0.
+ Sè hiÖu ®Çu tõ ®−îc ®¸nh sè tõ 0.
+ C¸c sector ®−îc ®¸nh sè tõ 1.
- Sector logic
Sector cã thÓ ®−îc truy nhËp qua ®Þa chØ logic. Sè hiÖu sector logic ®−îc
®¸nh sè tõ 0 b¾t ®Çu tõ cylinder 0, ®Çu tõ 1, sector vËt lý 1. TiÕp tôc ®¸nh sè theo
track vµ theo ®Çu tõ cho mçi cylinder
relSec = (CylNo * SecsPerTrack * Heads) + (HeadNo * SecsPerTrack) + (SecNo - 1)
relSec = 0*63*64 + 1*63 + (1-1) = 63
+--------------------------------------------------------------------------------+
|Err# | Description |
|_____|__________________________________________________________________________|
| 00H | no error on last operation |
| 01H | bad command: invalid request to controller |
| 02H | bad address mark |
| 03H | write protect: attempted to write on write-protected diskette |
- B¶ng m· lçi
+ PhÇn 2: chøa ch−¬ng tr×nh måi (Boot Strap Loader), cÇn thiÕt cho ®Üa khëi
®éng
Tham sè
55AA
- VÝ dô:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00: EB 3C 90 4D 53 57 49 4E 34 2E 31 00 02 40 01 00
JMP M S W I N 4 . 1 512 64 ®/c FAT
10: 02 00 02 00 00 F8 D1 00 3F 00 40 00 3F 00 00 00
512 209 63
2 Root Sec/ Sec/ 64 63 hidden sectors
FAT Dir HD FAT Track Head (®/c Boot Sector)
20: 41 0C 34 00 80 00 29 1E 13 DA 13 20 20 20 20 20
ch÷
3411009 C: ký Serial Number Tªn ®Üa tõ (rçng)
30: 20 20 20 20 20 20 46 41 54 31 36 20 20 20
Tªn ®Üa tõ (rçng) FAT16
OEM ID MSWIN4.1
Bytes per sector 512
Sectors per cluster 64
Reserved sectors at beginning 1
FAT Copies 2
Root directory entries 512
Total sectors on disk (Unused)
Media descriptor byte F8 Hex
Sectors per FAT 209
Sectors per track 63
Sides 64
Special hidden sectors 63: Boot Sector n»m (0,1,1)
Big total number of sectors 3411009
Physical drive number 128
Extended Boot Record Signature 29 Hex
Volume Serial Number 13DA131E Hex
Volume Label (rçng)
File System ID FAT16
+ M· nguån
uses crt,dos;
const hexs: array[0..15] of char = '0123456789ABCDEF';
Type SectorType = array[0..511] of byte;
var
buf: SectorType;
i,j: word;
Begin
clrscr;
ReadSector(buf,$80,0,1,1); { Boot Sector }
Writeln('Thong tin ve Boot Sector');
Write('Ten HDH : ');
for i := $03 to ($03 + 7) do write(chr(buf[i])); Writeln;
Write('So byte / sector : ', buf[$0B] + buf[$0C]*256);
Writeln;
Write('So sector / cluster : ', buf[$0D]); Writeln;
Write('So bang Fat : ', buf[$10]); Writeln;
Write('So phan tu toi da o thu muc goc : ', buf[$11] +
buf[$12]*256); Writeln;
Write('So byte / Fat : ', buf[$16] + buf[$17]*256); Writeln;
Write('So sector / cylinder : ', buf[$18] + buf[$19]*256);
Writeln;
Write('So head : ', buf[$1A] + buf[$1B]*256); Writeln;
readkey;
end.
- Bµi tËp: Sao l−u Boot Sector ®Üa A:
+ LËp tr×nh ®äc Boot Sector cña ®Üa A: vµ l−u ra tÖp t¹i ®Üa cøng
+ Kh«i phôc l¹i khi Boot Sector cña A: khi bÞ háng Boot Sector
- CÊu tróc Boot Record cña FAT 32 (cho tù nghiªn cøu).
Trong ®ã
- Byte sè 0 ®ãng vai trß ®Æc biÖt nh− sau:
00: phÇn tö nµy ch−a ®−îc sö dông
0E: phÇn tö nµy ®· ®−îc sö dông nh− bÞ xo¸
2E20 (.<space>): phÇn tö thø nhÊt cña th− môc con
2E2E (..): phÇn tö thø hai cña th− môc con
Hai phÇn tö ®Çu tiªn nµy dïng ®Ó t¹o danh s¸ch mãc nèi c¸c phÇn tö th−
môc víi nhau. Tr−êng Starting Cluster cña phÇn tö thø nhÊt chØ tíi chÝnh nã vµ
tr−êng Starting Cluster cña phÇn tö thø hai chØ tíi th− môc trùc tiÕp trªn nã.
+ Chó ý: Th− môc gèc kh«ng cã hai phÇn tö ®Çu tiªn nµy.
- Thuéc tÝnh attribute
+------------------------------------------------------------------------------+
| File Attribute |
|------------------------------------------------------------------------------|
|+7-6-5-4-3-2-1-0+ |
|| |a|d|v|s|h|r| |
|+---------------+ bit description mask value|
| | | | | | +-> 0: 1=file is Read-only (can't be written/deleted) (a & 01H)|
| | | | | +---> 1: 1=Hidden (a & 02H)|
| | | | +-----> 2: 1=System (a & 04H)|
| | | +-------> 3: 1=Volume label entry (a = 08H)|
| | +---------> 4: 1=subDirectory entry (a & 10H)|
| +-----------> 5: Archive bit. 1=file has NOT been backed up (a & 20H)|
+------------------------------------------------------------------------------+
+ VÝ dô
0 0 1 0 0 1 1 1
Arc Sys Hid R/O (Read Only)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Giê Phót Gi©y (b−íc 2)
elmt = record
filename: array[0..7] of char;
ext: array[0..2] of char;
attb: byte;
reserved: array[0..9] of byte;
Dt: longint;
firstCluster: word;
size: longint;
end;
procedure show(e: elmt);
var
i: byte;
t: DateTime;
begin
if(e.firstCluster <> 0) then
{ ph¶i kiÓm tra v× d−íi Win98 th× cã sù më réng cho tªn
tÖp dµi, v× thÕ cã nhiÒu phÇn tö phô vµ cã thµnh phÇn
firstCluster = 0 )
with e do begin
for i := 0 to 7 do write(filename[i]); write('.');
for i := 0 to 2 do write(ext[i]); write(' ':8);
{ procedure UnpackTime(DT: Longint; var T: TDateTime); }
{ DateTime = record
Year,Month,Day,Hour,Min,Sec: Word;
end;
}
UnpackTime(dt,t);
with t do begin
write(Day:2, '/', Month:2, '/', Year:4); write(' ':8);
write(Hour:2, ':', Min:2, ':', Sec:2);
end;
write(size: 10); writeln;
end;
end;
fillchar(buf,sizeof(buf),$11);
with r do begin
dl := Drive; dh := Head;
cx := CylSecEncode(Cylinder, Sector);
al := 14; { so sector = 14 vi 224 * 32 = 14 * 512}
ah := 2; { doc o dia }
bx := ofs(buf); es := seg(buf);
end;
intr($13,r);
if(r.ah <> 0) then ReadSector := false
else ReadSector := true;
end;
var
t: Datetime;
buf: RootType;
i,j: word;
{
DateTime = record
Year,Month,Day,Hour,Min,Sec: Word;
end;
}
begin
clrscr;
writeln('Cho dia A:'); readln;
ReadSector(buf,0,0,1,2);
while(buf[i].filename[0] <> #0) do
begin
show(buf[i]);
i := i + 1;
end;
readkey;
end.
+ KÕt qu¶:
Cho dia A:
Nh¾c l¹i phÇn tö thø 7 (cã ®Þa chØ offset lµ 1A víi kÝch th−íc 2 byte trong
1 phÇn tö cña th− môc) ghi Starting Cluster, tøc lµ cluster ®Çu tiªn cña tÖp. Tõ
néi dung cña phÇn tö trong b¶ng FAT t−¬ng øng ta cã thÓ t×m ®−îc phÇn tö tiÕp
theo hay chÝnh lµ cluster tiÕp theo dïng ®Ó l−u tr÷ tÖp.
C¸c phÇn tö trong b¶ng FAT t¹o thµnh mét danh s¸ch mãc nèi vµ phÇn tö
cuèi cïng cña danh s¸ch cã gi¸ trÞ lµ FFF (®èi víi FAT 12) vµ FFFF (®èi víi
FAT 16). V× c¸c phÇn tö t¹o thµnh danh s¸ch mãc nèi nªn chóng kh«ng nhÊt
thiÕt ph¶i n»m c¹nh nhau.
0 1 2 3 4 5 6 7
F8 FF FF 7F 15 01 FF FF 17 00 FF FF FF FF B6 00
277 <EOF> <EOF> <EOF>
8 9 10 11 12 13 14 15
25 00 2C 00 14 17 FF FF FF FF FF FF FF FF FF FF
37 44 5908 <EOF> <EOF> <EOF> <EOF> <EOF>
p := (i*3) div 2
a := MemW[seg(buf[p]) : ofs(buf[p])];
True False
odd(i)
B C F A D E
A B C D E F
Entry thø nhÊt Entry thø hai
- VÝ dô:
Gi¸ trÞ c¸c byte cña 50 phÇn tö ®Çu tiªn cña Fat 12 lµ
F0 FF FF 03 40 00 05 60 00 07 80 00
09 A0 00 0B C0 00 0D E0 00 0F 00 01
11 20 01 13 40 01 15 60 01 17 80 01
19 A0 01 1B C0 01 1D E0 01 1F 00 02
21 20 02 23 40 02 25 60 02 27 80 02
29 A0 02 2B C0 02 2D E0 02 2F 00 03
31 20 03
Fat 12 ë hÖ 16
FF0 FFF 003 004 005 006 007 008
009 00A 00B 00C 00D 00E 00F 010
011 012 013 014 015 016 017 018
019 01A 01B 01C 01D 01E 01F 020
021 022 023 024 025 026 027 028
029 02A 02B 02C 02D 02E 02F 030
031 032
Gi¸ trÞ phÇn tö thø 2 vµ thø 3 ®−îc l−u tr÷ 3 byte 3,4 vµ 5 lµ 03 40 00
tÝnh ra ®−îc 003 vµ 004.
- VÝ dô: LËp tr×nh ®äc vµ ®−a ra mµn h×nh 50 phÇn tö ®Çu tiªn cña b¶ng FAT
12 trªn ®Üa mÒm 1.44 MB
uses crt,dos;
const
hexs: array[0..15] of char = '0123456789ABCDEF';
var
buf : array[0..511] of byte;
r: registers;
i,p,k1,k2,k3,a: word;
begin
clrscr; fillchar(buf,sizeof(buf),$11);
writeln('Chuong trinh dua ra 50 phan tu dau tien cua FAT 12');
writeln('Cho dia A: va bam mot phim bat ky');
readkey;
for i:=1 to 10 do begin
with r do begin
dl := 0; { 00H: dia A }
dh := 0; { head = 0 }
cx := 2; { Fat o sector 2, cylinder 0 }
al := 1; { so sector }
ah := 2; { doc o dia }
bx := ofs(buf);
es := seg(buf);
end;
intr($13,r);
end;
writeln('GT cac byte cua 50 phan tu dau tien cua Fat 12 la');
for i:=0 to 74 do { 50 phantu * 3 / 2 = 75 }
begin
if(i mod 8 = 0) then writeln; { 8 * 3/2= 12 }
k1 := buf[i] shr 4;
k2 := buf[i] and $0F;
write(hexs[k1]:3, hexs[k2]);
end;
writeln;
writeln('Fat 12 o he 16');
for i:=0 to 49 do
begin
if(i mod 8 = 0) then writeln; { 8 * 3/2= 12 }
p := i*3 div 2;
a := MemW[seg(buf[p]) : ofs(buf[p])];
if odd(i) then a := a shr 4
else a := a and $0FFF;
k1 := a shr 8;
k2 := (a and $00F0) shr 4;
k3 := a and $000F;
write(hexs[k1]:3,hexs[k2],hexs[k3]);
end;
readkey;
end.
f. Master Boot
Lµ sector ®Çu tiªn cña ®Üa cøng (cylinder 0, head 0, sector 1) vµ ®−îc n¹p
vµo bé nhí t¹i 0000: 7000 ®Ó thùc hiÖn.
- CÊu tróc Master Boot
+ PhÇn 1: Ch−¬ng tr×nh nhËn biÕt cÊu tróc
+ PhÇn 2: B¶ng ph©n ch−¬ng (Partition Table)
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
FF 4D
1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 1
Cyl 63 Cyl
Cyl = 11 0100 1101 = 84510
+ §Þa chØ vËt lý cuèi
3 2 1 0
Type Head Sec Cyl
Type = 00 : cÊm truy nhËp
Type = 01 : hÖ thèng Dos 12 (dïng cho FAT 12)
Type = 04 : hÖ thèng Dos 16 (cho ®Üa <= 5M)
Type = 06 : hÖ thèng Dos 16 (cho ®Üa >= 5M)
Type = 0C : hÖ thèng Dos 32
Type = 50 : hÖ thèng DM (Disk Management) Readonly
Type = 51: hÖ thèng DM (Disk Management) Read/Write
Type = 05 : Më réng, dïng ®Ó t¹o ra ®Üa logic vµ cÊu tróc
cña ®Üa logic gièng nh− cÊu tróc cña ®Üa vËt lý, nh−ng c¸c
thµnh phÇn con cña ®Üa më réng (05) th× kh«ng ®−îc dïng lµm
®Üa khëi ®éng.cc
Type = 0F : Më réng.
+--------------------------------------------------------------+
| Extended DOS Partition |
|--------------------------------------------------------------|
| _ Each drive table can also contain another type-5 entry |
| to point to yet another drive table: |
| +--------------------+ 0M |
| +-----| master boot sector | Volume #1 |
| | | +--------------------| |
| | +->| DOS boot sector | (drive C:) |
| | \ fat, dir & data \ |
| +---->|--------------------| 32M |
| +-----| Extension table | Volume #2 |
| | | +--------------------| |
| | +->| DOS boot sector | (drive D:) |
| | \ fat, dir & data \ |
| +---->|--------------------| 64M |
| | Extension table | Volume #3 |
| | | |
+--------------------------------------------------------------+
- VÝ dô:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
80 01 01 00 06 3F FF 4D 3F 00 00 00 41 0C 34 00
Sys Head Sec(-2b) Cyl(+2b) BIGDOS 63 63 845 63 ∑=3411009
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Kh«ng sö dông
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Kh«ng sö dông
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Kh«ng sö dông
relSec = (CylNo*SecsPerTrack*Heads)+(HeadNo*SecsPerTrack)+(SecNo - 1)
relSec = 0*63*64 + 1*63 + (1-1) = 63
Dung l−îng ®Üa 3411009*512 ≈ 1.6 GB
- VÝ dô: ®äc dung l−îng ®Üa cøng thø nhÊt
uses crt,dos;
s0 s1 s2 s3 s4 s5 s6 s7 sn-1 sn sn+1
C¸c tr¹ng th¸i nµy kh«ng nhÊt thiÕt ph¶i liªn tiÕp nhau.
+ NÕu ch−¬ng tr×nh cña hÖ thèng th× cho ta tiÕn tr×nh hÖ thèng.
+ NÕu ch−¬ng tr×nh cña ng−êi sö dông th× cho ta tiÕn tr×nh cña ng−êi sö
dông.
HiÓu mét c¸ch th«ng th−êng ta cã thÓ coi tiÕn tr×nh lµ mét ch−¬ng tr×nh
®ang ®−îc thùc hiÖn.
- VÝ dô:
TiÕn tr×nh 1
B¾t ®Çu KÕt thóc
TiÕn tr×nh 2
B¾t ®Çu
- Thùc hiÖn song song vËt lý: cïng mét thêi ®iÓm 2 tiÕn tr×nh cïng ®−îc thùc
hiÖn.
C¸c ®iÓm cÇn chó ý:
+ Lo¹i nµy chØ cã thÓ thùc hiÖn ë trong chÕ ®é nhiÒu processor.
+ Hai tiÕn tr×nh song song vËt lý cã thÓ sö dông song song thiÕt bÞ ngo¹i vi
vµ processor do ®ã c¸ch lµm viÖc cña hÖ thèng hoµn toµn kh¸c so víi chÕ
®é ®¬n processor.
- Thùc hiÖn song song ®an xen
§Ó n©ng cao hiÖu qu¶ cña processor, c¸c tiÕn tr×nh lÇn l−ît ®−îc phôc vô
®an xen lÉn nhau.
TiÕn tr×nh
A B C
C
B
A
Thêi gian
A HÖ ®iÒu hµnh B
Ng¾t hoÆc lêi gäi hÖ thèng
NghØ
Kh«i phôc tr¹ng th¸i tõ PCBA
Ho¹t ®éng
A1 B1
A2 B2
An Bm
HÖ thèng ph¶i cã c¬ chÕ b¶o vÖ ®Ó tiÕn tr×nh nµy kh«ng lµm ¶nh h−ëng
®Õn tiÕn tr×nh kh¸c.
b. Quan hÖ th«ng tin
Hai tiÕn tr×nh A vµ B ®−îc gäi lµ cã quan hÖ th«ng tin víi nhau nÕu tiÕn
tr×nh nµy cã göi th«ng b¸o cho tiÕn tr×nh kia. TiÕn tr×nh göi th«ng b¸o cã thÓ
kh«ng cÇn biÕt tiÕn tr×nh nhËn cã tån t¹i hay kh«ng? ë ®©u? vµ ®ang ë giai ®o¹n
nµo?
A1 B1
Information
A2 B2
Information
An Bm
- Sö dông bé nhí
HÖ thèng sÏ sö dông mét phÇn bé nhí ®Ó l−u tr÷ c¸c th«ng b¸o. Mçi tiÕn
tr×nh cÇn nhËn th«ng b¸o chØ viÖc rµ so¸t trong “hßm th−” cña hÖ thèng.
+ ¦u ®iÓm: l−u tr÷ ®−îc l−îng th«ng tin lín víi thêi gian l−u tr÷ l©u.
+ Nh−îc ®iÓm: tÝnh thô ®éng cao.
- Göi th«ng b¸o qua cæng vµo/ra
+ ¦u ®iÓm: c¸c tiÕn tr×nh cã thÓ dÔ dµng lÊy th«ng tin tõ cæng mµ kh«ng bÞ
hµng rµo bé nhí ng¨n c¶n.
+ Nh−îc ®iÓm: dung l−îng th«ng tin chøa ë c¸c cæng kh«ng lín, thêi gian
l−u tr÷ th«ng b¸o bÞ h¹n chÕ.
- Sö dông ch−¬ng tr×nh th− ký (Monitor)
Ch−¬ng tr×nh th− ký (Monitor) lµ ch−¬ng tr×nh cña hÖ thèng, nã ®−îc cung
cÊp mäi th«ng tin nh−ng kh«ng cã kh¶ n¨ng ®iÒu khiÓn hÖ thèng. Th«ng qua
ch−¬ng tr×nh nµy, tiÕn tr×nh cã thÓ dÔ dµng x¸c ®Þnh ®−îc tiÕn tr×nh kia ë ®©u.
+ ¦u ®iÓm: TÝnh chñ ®éng cao.
c. Lo¹i song song ph©n cÊp
Lµ lo¹i tiÕn tr×nh mµ trong qu¸ tr×nh ho¹t ®éng nã s¶n sinh ra mét tiÕn
tr×nh n÷a ho¹t ®éng song song víi chÝnh nã.
A1
A2
B1
B2
An
Bm
Khi tiÕn tr×nh con ®· ho¹t ®éng th× hai tiÕn tr×nh nµy kh«ng biÕt g× vÒ nhau
- Tµi nguyªn cña tiÕn tr×nh con cã thÓ lÊy tõ vèn tµi nguyªn cña hÖ thèng hoÆc
lÊy tõ vèn tµi nguyªn cña tiÕn tr×nh chÝnh.
+ NÕu lÊy tµi nguyªn tõ vèn tµi nguyªn cña hÖ thèng th× hÖ thèng cã thÓ
qu¶n lý tµi nguyªn tËp chung. Nh− vËy sÏ tèi −u ho¸ ®−îc viÖc sö dông tµi
nguyªn, nh−ng viÖc qu¶n lý nµy rÊt phøc t¹p.
+ NÕu tiÕn tr×nh con lÊy tõ vèn tµi nguyªn cña tiÕn tr×nh chÝnh th× ta cã hÖ
qu¶n lý tµi nguyªn ph©n t¸n. Lo¹i tµi nguyªn nµy ®¬n gi¶n, nh−ng kh«ng
cã kh¶ n¨ng khai th¸c tèi −u tµi nguyªn hÖ thèng.
Trong mäi tr−êng hîp nÕu tµi nguyªn lÊy ë ®©u th× ph¶i tr¶ vÒ ®ã, v× vËy
tiÕn tr×nh chÝnh th−êng sö dông c¸c lÖnh chê POS hoÆc WAIT ®Ó c¸c tiÕn tr×nh
con kÞp tr¶ l¹i tµi nguyªn.
d. TiÕn tr×nh ®ång møc
Hai tiÕn tr×nh ®−îc gäi lµ ®ång møc nÕu cã thÓ sö dông chung tµi nguyªn
theo nguyªn t¾c lÇn l−ît.
A1 B1
Tµi
A2 B2
Nguyªn
An Bm
Hai tiÕn tr×nh nµy kh«ng ph©n biÖt tiÕn tr×nh chÝnh vµ tiÕn tr×nh con, mµ lµ
hai tiÕn tr×nh ®éc lËp. Mçi tiÕn tr×nh sau khi sö dông tµi nguyªn th× ph¶i tr¶ l¹i
cho hÖ thèng vµ tiÕp tôc ho¹t ®éng ®éc lËp.
VÝ dô: ch−¬ng tr×nh ch¬i cê: Tµi nguyªn chung lµ bµn cê. Gi¶ sö ®Õn l−ît
tiÕn tr×nh thø nhÊt, tiÕn tr×nh thø nhÊt chiÕm tµi nguyªn ®Ó ch¬i, khi ra quyÕt ®Þnh
xong th× tr¶ l¹i bµn cê cho hÖ thèng. TiÕn tr×nh thø hai ph¶i kiÓm tra xem tiÕn
tr×nh thø nhÊt ®· ®i ch−a? nÕu xong råi th× míi ®Õn l−ît nã (thùc hiÖn nh− tiÕn
tr×nh thø nhÊt).
5. M« t¶ tiÕn tr×nh song song
Ta dïng ký ph¸p nh©n t¹o
Gi¶ sö cÇn thùc hiÖn mét tËp c¸c khèi lÖnh song song s1, s2, , sn
S1 S2 Sn
Ta ®−a vµo trong mét khèi lÖnh ®−îc b¾t ®Çu bëi tõ kho¸ ParBegin
(Parallel Begin) vµ kÕt thóc bëi tõ kho¸ ParEnd (Parallel End).
ParBegin
S1;
S2;
...
Sn;
ParEnd;
6. Tµi nguyªn g¨ng vµ ®o¹n g¨ng
- Tµi nguyªn g¨ng lµ tµi nguyªn mµ trong mét kho¶ng thêi gian nhÊt ®Þnh th×
chØ phôc vô hîp lý cho mét sè h÷u h¹n c¸c tiÕn tr×nh.
- §o¹n ch−¬ng tr×nh sö dông tµi nguyªn g¨ng gäi lµ ®o¹n g¨ng hay chç hÑp
trong tiÕn tr×nh.
- HÖ ®iÒu hµnh ph¶i tæ chøc cho mäi tiÕn tr×nh ®i qua chç hÑp mét c¸ch hîp lý,
c«ng viÖc nµy gäi lµ ®iÒu ®é tiÕn tr×nh qua ®o¹n g¨ng.
- Sù cÇn thiÕt ph¶i ®iÒu ®é
Ta xem xÐt vÝ dô khi 2 tiÕn tr×nh cïng muèn in ra m¸y in.
+ Khi mét tiÕn tr×nh cÇn in mét tÖp ra m¸y in, nã ®−a tªn tÖp vµo th− môc
spool. Mét tiÕn tr×nh ®iÒu khiÓn in kh¸c kiÓm tra ®Þnh kú nÕu cã tÖp nµo
cÇn in, nÕu t×m thÊy th× in tÖp nã vµ lo¹i tªn tÖp khái th− môc spool. Gi¶ sö
th− môc spool cã sè l−îng phÇn tö rÊt lín (mçi phÇn tö chøa mét tªn tÖp).
Ta cã hai biÕn dïng dung lµ OUT ®Ó chØ tÖp tiÕp theo cÇn in vµ IN ®Ó chØ
vÞ trÝ rçng tiÕp theo dïng ®Ó chøa tªn tÖp cÇn in.
+ Ta gi¶ sö vÞ trÝ 0 – 3 rçng (c¸c tÖp ®· ®−îc in), vÞ trÝ 4 – 6 ®ang bËn
(chøa tªn tÖp cÇn in).
TiÕn tr×nh A
4 Abc.txt OUT = 4
5 Prog.doc
6 Prog.pas
7 IN = 7
TiÕn tr×nh B
+ Gi¶ sö tiÕn tr×nh A cÇn in mét tÖp a.txt, khi ®ã tiÕn tr×nh A sÏ ®äc biÕn IN
vµ ®−a vµo biÕn côc bé INA, nh− vËy INA = 7. Lóc ®ã cã tÝn hiÖu ng¾t ®ång
hå vµ CPU quyÕt ®Þnh tiÕn tr×nh A ®· ch¹y ®ñ thêi gian vµ chuyÓn sang
thùc hiÖn tiÕn tr×nh B. §Õn l−ît m×nh, tiÕn tr×nh B còng muèn in tÖp b.txt.
TiÕn tr×nh B ®äc biÕn IN vµ ®−a vµo biÕn côc bé INB, nh− vËy INB = 7.
TiÕn tr×nh B ®−a tªn tÖp b.txt vµo vÞ trÝ thø 7 trong th− môc spool vµ cËp
nhËt biÕn IN = INB + 1 = 8, sau ®ã lµm c¸c viÖc kh¸c.
+ Khi CPU chuyÓn sang thùc hiÖn tiÕn tr×nh A, kh«ng may tiÕn tr×nh A vÉn
gi÷ nguyªn biÕn INA=7. TiÕn tr×nh A ®−a tªn tÖp a.txt vµo vÞ trÝ thø 7 vµ
cËp nhËt biÕn IN = INA + 1 = 8.
+ TiÕn tr×nh ®iÒu khiÓn in kh«ng ®−îc th«ng b¸o lµ cã sù cè vµ tiÕp tôc thùc
hiÖn nhiÖm vô.
+ Nh− vËy tÖp b.txt ®· bÞ ®æi thµnh tÖp a.txt vµ sÏ kh«ng ®−îc in ra m¸y in.
- C¸c c«ng cô ®iÒu ®é ph¶i tho¶ m·n c¸c yªu cÇu sau:
+ Ph¶i ®¶m b¶o sao cho tiÕn tr×nh kh«ng chiÕm gi÷ tµi nguyªn g¨ng v« h¹n
+ NÕu cã mét tiÕn tr×nh xÕp hµng chê tµi nguyªn g¨ng th× sím hay muén nã
ph¶i vµo ®−îc ®o¹n g¨ng cña m×nh (®−îc phôc vô tµi nguyªn g¨ng).
+ NÕu cã tiÕn tr×nh xÕp hµng chê ®îi tµi nguyªn g¨ng vµ nÕu tµi nguyªn
g¨ng ®ã ®−îc gi¶i phãng th× nã ph¶i ®−îc phôc vô trong c¸c tiÕn tr×nh
®ang chê ®îi.
- C¸c c«ng cô ®iÒu ®é: Chia lµm ba líp chÝnh
+ Ph−¬ng ph¸p kho¸ trong: lµ lo¹i gi¶i thuËt kh«ng yªu cÇu g× vÒ thiÕt bÞ
hoÆc hÖ thèng. Ph−¬ng ph¸p nµy cã tÝnh chÊt v¹n n¨ng øng víi mäi ng«n
ng÷, mäi lo¹i m¸y.
+ KiÓm tra vµ x¸c lËp
X¸c lËp dùa vµo thiÕt bÞ, thiÕt bÞ cã nh÷ng lÖnh ®Æc biÖt phôc vô cho riªng
c«ng t¸c ®iÒu ®é.
+ Kü thuËt ®Ìn b¸o: dùa vµo c«ng cô ®Æc biÖt cña tõng hÖ ®iÒu hµnh.
7. Ph−¬ng ph¸p kho¸ trong
- Nguyªn lý:
Dïng thªm c¸c biÕn víi t− c¸ch lµ tµi nguyªn chung ®Ó chøa c¸c cê cho
biÕt tiÕn tr×nh vµo ®o¹n g¨ng hay ra khái ®o¹n g¨ng.
- Gi¶ thiÕt:
+ Cã hai tiÕn tr×nh song song cïng sö dông 1 tµi nguyªn g¨ng chung vµ kh¶
n¨ng phôc vô cña tµi nguyªn g¨ng lµ 1.
+ Mçi tiÕn tr×nh chØ cã mét ®o¹n g¨ng n»m ë ®Çu tiÕn tr×nh.
+ C¸c tiÕn tr×nh nµy lÆp v« h¹n, nÕu cã kÕt thóc th× ë ®©u ®ã ngoµi ®o¹n
g¨ng.
- Sö dông mét biÕn IS_USED cã gi¸ trÞ b»ng 1 ®Ó chØ ra tµi nguyªn g¨ng ®ang
bÞ mét tiÕn tr×nh nµo ®ã chiÕm gi÷ vµ ng−îc l¹i, khi IS_USED = 0 chØ ra tµi
nguyªn g¨ng ®ang s½n sµng phôc vô. Khi mét tiÕn tr×nh thÊy biÕn IS_USED =
0, nã ph¶i ®Æt biÕn IS_USED = 1 tr−íc khi sö dông tµi nguyªn g¨ng. Tuy
nhiªn ta dÔ dµng tiÕn biÕn IS_USED l¹i trë thµnh tµi nguyªn g¨ng. Gi¶ sö tiÕn
tr×nh 1 kiÓm tra thÊy biÕn IS_USED = 0, tr−íc lóc nã ®Æt biÕn nµy lªn 1 th×
tiÕn tr×nh 2 l¹i kiÓm tra biÕn nµy vµ tÊt nhiªn khi ®ã biÕn IS_USED = 0. Nh−
vËy c¶ hai tiÕn tr×nh ®Òu vµo ®o¹n g¨ng vµ ®Òu sö dông tµi nguyªn g¨ng. Nãi
c¸ch kh¸c vÊn ®Ò ®iÒu ®é ch−a ®−îc gi¶i quyÕt
- Sö dông biÕn TURN ®Ó chØ ®Õn l−ît tiÕn tr×nh nµo ®−îc sö dông tµi nguyªn
g¨ng.
+ S¬ ®å nguyªn lý
Var turn : integer;
Begin
turn := 1;
ParBegin
{ Hai khèi lÖnh trong tõ kho¸ ParBegin vµ ParEnd ®−îc
thùc hiÖn song song víi nhau }
TT1:
REPEAT
while (turn <> 1) do ;
vao_doan_gang_1; { ®o¹n g¨ng cña tiÕn tr×nh 1 }
turn := 2; { chuyÓn tµi nguyªn g¨ng cho tt2)
thuc_hien_viec_khac_1;
{ phÇn cßn l¹i cña tiÕn tr×nh 1 }
UNTIL FALSE;
TT2:
REPEAT
while (turn <> 2) do ;
vao_doan_gang_2; { ®o¹n g¨ng cña tiÕn tr×nh 2 }
turn := 1; { chuyÓn tµi nguyªn g¨ng cho tt1)
thuc_hien_viec_khac_2;
{ phÇn cßn l¹i cña tiÕn tr×nh 2 }
UNTIL FALSE;
ParEnd;
End.
+ Gi¶i thÝch: Ban ®Çu TURN = 1, tøc lµ tiÕn tr×nh 1 ®−îc phÐp sö dông tµi
nguyªn g¨ng. Khi tiÕn tr×nh 1 dïng tµi nguyªn g¨ng xong th× ®Æt TURN =
2, ®Ó cho phÐp tiÕn tr×nh 2 sö dông tµi nguyªn g¨ng. Khi tiÕn tr×nh 2 sö
dông xong tµi nguyªn g¨ng th× l¹i ®Æt TURN = 1, ®Ó chØ ®Õn l−ît tiÕn tr×nh
1 sö dông.
+ Tuy nhiªn ta gi¶ sö tiÕn tr×nh 1 dïng xong tµi nguyªn g¨ng, sau khi ®Æt
TURN = 2 sang thùc hiÖn thñ tôc thuc_hien_viec_khac_1, thñ tôc nµy
kh¸ ng¾t, tiÕn tr×nh 1 quay l¹i ®o¹n g¨ng. Nh−ng lóc nµy tiÕn tr×nh 2 ®ang
bËn thùc hiÖn c¸c c«ng viÖc kh¸c trong thñ tôc
thuc_hien_viec_khac_2. TiÕn tr×nh 2 vÉn ch−a vµo ®o¹n g¨ng v× vËy
biÕn TURN vÉn cã gi¸ trÞ b»ng 2. V× vËy mÆc dï tµi nguyªn g¨ng kh«ng
®−îc sö dông nh−ng do TURN = 2 mµ tiÕn tr×nh 1 kh«ng thÓ sö dông ®−îc
tµi nguyªn g¨ng.
- §Ó kh¾c phôc nh−îc ®iÓm nµy ng−êi ta ®−a ra c¸ch thøc dïng hai biÕn c1 vµ
c2 cho hai tiÕn tr×nh nh− sau:
+ S¬ ®å nguyªn lý
Var c1,c2 : integer;
Begin
c1 := 0;
c2 := 0;
ParBegin
{ Hai khèi lÖnh trong tõ kho¸ ParBegin vµ ParEnd ®−îc
thùc hiÖn song song víi nhau }
TT1:
REPEAT
while (c2 > 0) do ;
c1 := 1;
vao_doan_gang_1; { ®o¹n g¨ng cña tiÕn tr×nh 1 }
c1 := 0;
thuc_hien_viec_khac_1;
{ phÇn cßn l¹i cña tiÕn tr×nh 1 }
UNTIL FALSE;
TT2:
REPEAT
while (c1 > 0) do ;
c2 := 1;
vao_doan_gang_2; { ®o¹n g¨ng cña tiÕn tr×nh 2 }
c2 := 0;
thuc_hien_viec_khac_2;
{ phÇn cßn l¹i cña tiÕn tr×nh 2 }
UNTIL FALSE;
ParEnd;
End.
- Gi¶i thÝch
C1 vµ C2 ®¹i diÖn cho viÖc sö dông tµi nguyªn g¨ng thø nhÊt vµ tµi nguyªn
g¨ng thø hai.
+ Ban ®Çu c¶ hai biÕn ®Òu cã gi¸ trÞ b»ng 0 thÓ hiÖn tµi nguyªn g¨ng ®ang ë
tr¹ng th¸i s½n sµng phôc vô.
+ Gi¶ sö tiÕn tr×nh 1 ®−îc phôc vô tr−íc, tiÕn tr×nh 1 bá qua viÖc chê ®îi
while (c2 > 0) do ;
vµ chiÕm lÊy tµi nguyªn g¨ng ®ång thêi ®Æt C1 = 1;
+ C1 = 1 cã nghÜa lµ tiÕn tr×nh 1 ®ang sö dông tµi nguyªn g¨ng. Trong lóc tµi
nguyªn g¨ng ®ang bÞ tiÕn tr×nh 1 chiÕm gi÷ th× tiÕn tr×nh 2 ph¶i chê ®îi
while (c1 > 0) do ;
Khi tiÕn tr×nh 1 dïng xong tµi nguyªn g¨ng th× ®Æt l¹i biÕn C1 = 0.
+ Khi C1 = 0 vµ tiÕn tr×nh 2 kÕt thóc viÖc chê ®îi
while (c1 > 0) do ; { ®−îc kÕt thóc do c1 = 0 }
lóc nµy tiÕn tr×nh 2 chiÕm gi÷ tµi nguyªn g¨ng vµ ®Æt C2 = 1;
Khi tiÕn tr×nh 2 dïng xong tµi nguyªn g¨ng th× ®Æt l¹i C2 = 0;
+ Qu¸ tr×nh nh− vËy ®−îc lÆp ®i lÆp l¹i, cho ®Õn khi kÕt thóc c¶ hai tiÕn tr×nh
(lÖnh kÕt thóc ë trong ®o¹n ch−¬ng tr×nh kh«ng ph¶i lµ ®o¹n g¨ng).
- Trong tr−êng hîp tåi nhÊt, c¶ hai tiÕn tr×nh ®Òu vµo ®o¹n g¨ng vµ ®Æt biÕn C1
vµ C2 b»ng 1, vµ c¶ hai tiÕn tr×nh ®Òu kh«ng vµo ®−îc ®o¹n g¨ng vµ g©y ra
hiÖn t−îng chê ®îi vßng trßn. Lý ®o lµ viÖc x¸c lËp vµo ®o¹n g¨ng vµ kh¶
n¨ng xem xÐt cã ®−îc vµo ®o¹n g¨ng cña hai ®o¹n trªn kh«ng cã quan hÖ víi
nhau.
- V× vËy ng−êi ta ®−a ra mét ph−¬ng ph¸p kh¸c phèi hîp hai ph−¬ng ph¸p trªn,
ph−¬ng ph¸p nµy phèi hîp X¸c lËp – KiÓm tra – X¸c lËp, do Delker c«ng
bè n¨m 1968 nh− sau:
Var c1, c2, tt: integer;
Begin
c1:=0; c2:=0; tt:=1;
ParBegin
TT1:
REPEAT
c1:=1;
while(c2=1) do Begin
if(tt = 2) then Begin
c1:=0;
while(tt =2) do;
c1:=1;
End;
End;
vao_doan_gang_1;
c1:=0; tt:=2;
thuc_hien_viec_khac_1;
UNTIL FALSE;
TT2:
REPEAT
c2:=1;
while(c1=1) do Begin
if(tt = 1) then Begin
c2:=0;
while(tt =1) do;
c2:=1;
End;
End;
vao_doan_gang_2;
c2:=0; tt:=1;
thuc_hien_viec_khac_2;
UNTIL FALSE;
ParEnd;
End.
- ¦u ®iÓm:
+ Gi¶i thuËt nµy cã tÝnh chÊt v¹n n¨ng ¸p dông cho mäi c«ng cô vµ mäi hÖ
thèng.
+ TËn dông, ph¸t huy kh¶ n¨ng tèi ®a tµi nguyªn g¨ng.
- Nh−îc ®iÓm
+ §é phøc t¹p tû lÖ víi sè l−îng tiÕn tr×nh vµ sè tµi nguyªn g¨ng.
+ Tån t¹i hiÖn t−îng chê ®îi tÝch cùc. MÆc dï kh«ng lµm g× c¶ nh−ng vÉn
chiÕm thêi gian processor.
Nguyªn nh©n lµ do mçi tiÕn tr×nh ph¶i lµm viÖc víi nhiÒu biÕn, trong ®ã cã
nhiÒu biÕn kh«ng ph¶i cña m×nh (vÝ dô: muèn x¸c lËp biÕn c1 ph¶i kiÓm tra biÕn
c2 vµ biÕn tt).
Begin
gl:=0;
ParBegin
TT1:
REPEAT
lc1:=1;
while lc1=1 do TS(lc1);
vao_doan_gang_1;
gl:=0;
thuc_hien_viec_khac_1;
UNTIL FALSE;
TT2:
REPEAT
lc2:=1;
while lc2=1 do TS(lc2);
vao_doan_gang_2;
gl:=0;
thuc_hien_viec_khac_2;
UNTIL FALSE;
ParEnd;
End.
- ¦u ®iÓm:
Kh¾c phôc ®−îc ®é phøc t¹p cña thuËt to¸n, ®é phøc t¹p thuËt to¸n kh«ng
phô thuéc vµo sè l−îng tiÕn tr×nh.
- Nh−îc ®iÓm:
VÉn cßn hiÖn t−îng chê ®îi tÝch cùc.
9. Kü thuËt ®Ìn b¸o
§©y lµ c«ng cô phô thuéc vµo hÖ thèng do Dijkstra ®Ò xuÊt, víi t− t−ëng
nh− sau:
- HÖ thèng sö dông biÕn ®Ìn b¸o nguyªn ®Æc biÖt (Semaphore) s. Ban ®Çu s
nhËn mét gi¸ trÞ b»ng kh¶ n¨ng phôc vô cña tµi nguyªn g¨ng. HÖ thèng cã hai
phÐp ®Ó thao t¸c trªn s lµ P(s) vµ V(s).
P: Proberen (tiÕng Hµ Lan) cã nghÜa lµ gi¶m
V: Verhogen cã nghÜa lµ kiÓm tra
- Néi dung cña P(s) nh− sau:
+ Gi¶m s ®i mét:
s := s – 1
+ KiÓm tra xem nÕu s<0 ®−a tiÕn tr×nh vµo xÕp hµng
If (s<0) then xep_hang;
- Néi dung cña V(s) nh− sau:
+ T¨ng s lªn mét:
s := s +1;
+ KiÓm tra nÕu s <= 0 th× kÝch ho¹t mét tiÕn tr×nh ra ho¹t ®éng
If (s<=0) then hoat_dong;
- §Æc ®iÓm quan träng lµ 2 phÐp P vµ V lµ liªn tôc, trong qu¸ tr×nh thùc hiÖn P
hoÆc V th× processor kh«ng bÞ ng¾t ®Ó chuyÓn sang c«ng viÖc kh¸c.
- Tuy nhiªn c¸c phÐp xö lý nµy cã thÓ kh«ng tån t¹i trªn c¸c m¸y v× P vµ V
ph¶i lµm viÖc víi dßng xÕp hµng vµ th«ng tin l−u tr÷ kh¸ lín. §Ó kh¾c phôc
®iÒu nµy ng−êi ta x©y dùng c¸c thñ tôc procedure ®Ó thùc hiÖn c¸c phÐp xö lý
nµy.
+ §Çu cña th©n thñ tôc bao giê còng ra lÖnh cÊm ng¾t tøc lµ chÆn mäi tÝn
hiÖu vµo processor CLI, trõ nh÷ng tÝn hiÖu b¾t buéc (ng¾t kh«ng che
®−îc).
+ Cuèi th©n thñ tôc cã lÖnh gi¶i phãng ng¾t (STI).
- S¬ ®å ®iÒu ®é
Var
s: integer;
Begin
s:=1;
ParBegin
TT1:
REPEAT
P(s);
vao_doan_gang_1;
V(s);
thuc_hien_viec_khac_1;
UNTIL FALSE;
TT2:
REPEAT
P(s);
vao_doan_gang_2;
V(s);
thuc_hien_viec_khac_2;
UNTIL FALSE;
ParEnd;
End.
S TT1 TT2
1 P(s)
0 Lµm TT1 P(s)
-1 chê ®îi
-1 TT1 xong chê ®îi
0 V(s) LµmTT2
0 TT2 xong
1 V(s)
V× s>0 nªn kh«ng cßn tiÕn tr×nh nµo
cÇn tµi nguyªn g¨ng
- ¦u ®iÓm:
Chèng ®−îc hiÖn t−îng chê ®îi tÝch cùc.
Lý do: mçi tiÕn tr×nh chØ ph¶i kiÓm tra ®iÒu kiÖn vµo ®o¹n g¨ng mét lÇn,
nÕu kh«ng vµo ®−îc sÏ cã mét tiÕn tr×nh kh¸c kÝch ho¹t tiÕn tr×nh nµy vµo thêi
®iÓm thÝch hîp.
- Qu¶n lý bé nhí
10. LT: 6 TiÕt, TH:
Qu¶n lý tiÕn tr×nh LT: 12 TiÕt, TH:Tµi liÖu tham kh¶o
- Tµi liÖu tham kh¶o
[1] NguyÔn Thanh Tïng. Gi¸o tr×nh HÖ ®iÒu hµnh, 1995.
[2] A.S. Tanenbaum. Operating Systems Design and Implementation, 1997.
[3] Abraham Silberschatz. Principes des systmÌmes d exploitation, 1994.
[4] Peter Norton. CÈm nang lËp tr×nh hÖ thèng cho IBM PC, 1992.