background image

 

Tr−êng §¹i häc B¸ch khoa Hµ néi 

Khoa C«ng nghÖ Th«ng tin 

Bé m«n c«ng nghÖ phÇn mÒm 

============= o ============= 

 

 

 

 

 

 

 

 

 

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 

background image

HÖ ®iÒu hµnh 

 

trang   2/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Ch−¬ng 1. 

C¸c kh¸i niÖm c¬ b¶n 

LT: 6 TiÕt, TH: 0 TiÕt 

1. 

CÊu tróc ph©n líp vµ sù ph¸t triÓn cña hÖ thèng tÝnh to¸n 

a. LÞch sö ph¸t triÓn cña c¸c hÖ thèng tÝnh to¸n   c¸c nguyªn lý ph¸t triÓn 
cña processor vµ hÖ lÖnh. 

-

  1940-1950 

§©y lµ giai ®o¹n ra ®êi thÕ hÖ ®Çu tiªn cña m¸y tÝnh ®iÖn tö, víi nh÷ng hÖ 

thèng m¸y tÝnh cÊu t¹o tõ c¸c bé phËn c¬ khÝ vµ ®Ìn ®iÖn tö. C¸c m¸y tÝnh giai 
®o¹n nµy võa cång kÒnh (kÝch cì b»ng mét toµ nhµ) võa phøc t¹p. Do ®ã mét 
m¸y ph¶i dïng nhiÒu ng−êi sö dông. 

Trong giai ®o¹n nµy: Ph¹m vi ng−êi sö dông m¸y tÝnh ®iÖn tö cßn bÞ bã 

hÑp ë nh÷ng chuyªn gia mµ th«i. 

Ng−êi thiÕt kÕ x©y dùng ch−¬ng tr×nh chÝnh lµ ng−êi lËp tr×nh vµ còng lµ  

ng−êi vËn hµnh. 

Ng«n ng÷ lµm viÖc cña hä lµ ng«n ng÷ m¸y lµ mét chuçi sè nhÞ ph©n 01 v× 

vËy c«ng viÖc cña hä rÊt ®¬n ®iÖu nhµm ch¸n vµ viÖc m¾c lçi lµ kh«ng thÓ tr¸nh 
khái do ®ã cÇn hiÖu chØnh ch−¬ng tr×nh. V× thÕ hiÖu suÊt lµm viÖc thÊp, trung 
b×nh kho¶ng 8 c©u lÖnh/ngµy. 

Tån t¹i c«ng viÖc cho mäi ng−êi, mäi ch−¬ng tr×nh: Mong muèn cña 

ng−êi sö dông lu«n kh¸c xa víi kh¶ n¨ng ®¸p øng cña m¸y tÝnh. Nã rÊt phong 
phó ®a d¹ng, cßn kh¶ n¨ng cña m¸y tÝnh trong mét thêi gian x¸c ®Þnh lµ hÇu nh− 
kh«ng ®æi. Bªn c¹nh ®ã còng cã nh÷ng kh¶ n¨ng cña m¸y tÝnh nh− tèc ®é 
processor ng−êi dïng Ýt khi khai th¸c triÖt ®Ó. 

Ng−êi ta thÊy mét sè c«ng viÖc lµ cÇn thiÕt cho mäi ng−êi, th−êng xuyªn 

®−îc sö dông do ®ã ph¶i x©y dùng (c¸c ch−¬ng tr×nh chuÈn hay ch−¬ng tr×nh 
mÉu) Standard Programs. ViÖc nµy ®−îc thùc hiÖn bëi c¸c nhµ lËp tr×nh vµ ®−îc 
cung cÊp cïng víi m¸y tÝnh. Tõ ®ã t¹o thµnh mét bé th− viÖn ch−¬ng tr×nh mÉu. 

{Standard Programs} = Library of Standard Programs 
Ban ®Çu c¸c ch−¬ng tr×nh mang tÝnh chÊt hoµn thiÖn: tõ mét ®Çu vµo nhÊt 

®Þnh (input) sÏ ®−a ra mét kÕt qu¶(output). Tuy nhiªn viÖc nµy lµ kh«ng thuËn lîi 
vµ hiÖu qu¶ v× cã nhiÒu chøc n¨ng con cña ch−¬ng tr×nh sÏ lÆp ®i lÆp l¹i nhiÒu 
lÇn. V× vËy ng−êi ta nghÜ ®Õn c¸c ph−¬ng ph¸p c¶i tiÕn hiÖu suÊt lµm viÖc lµ ph¶i 
x©y dùng c¸c ch−¬ng tr×nh con vµ c¶i tiÕn hÖ lÖnh cña processor tøc lµ gi¶m bít 

c¸c lÖnh macroprocessor mµ thay vµo ®ã lµ c¸c phÐp xö lý t¸c ®éng lªn bit, byte. 
 

background image

HÖ ®iÒu hµnh 

 

trang   3/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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. 

background image

HÖ ®iÒu hµnh 

 

trang   4/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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 

 
 

background image

HÖ ®iÒu hµnh 

 

trang   5/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 

II. SOFTWARE 

P/N Description 

Unit Price 

 

 

 

00P7778 

VISUALAGE JAVA ENTERPRISE EDITION V3.5 

PROGRAM PKG 

4,349.00 

11K7694 

WEBSPHERE STUDIO ADVANCED V3.5 

 PROGRAM PACKAGE WITH 1 CLIENT ADV 

2,899.00 

 

Oracle 8i Standard Edition Release 3 

(with 5 Client) 

1,120.00 

659-00399 

VStudio Pro 6.0 Win32 English Intl CD Refresh 

1,107.76 

 

 

 

021-02665 

Office 2000 win 32 English Intl CD 

477.25 

021-03851 

Office 2000 win 32 English OLP NL 

385.65 

227-01187 

WinNT Svr 4.0 English Intl CD 5 Clt SP4 

823.25 

 

TOTAL 

11,161.91 

 
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í 

background image

HÖ ®iÒu hµnh 

 

trang   6/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  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. 

background image

HÖ ®iÒu hµnh 

 

trang   7/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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. 

background image

HÖ ®iÒu hµnh 

 

trang   8/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

C¸n bé lËp 

tr×nh hÖ thèng

N g−êi sö 

dô ng

C¸n bé kü 

thuËt

Ng−êi lµm c«ng 

t¸c qu¶n lý

 

 
 
 
 
 
 
 
 
 

 

 
§è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 

 
− 
 

Ch−¬ng tr×nh øng dông 

Ch−¬ng tr×nh dÞch

So¹n th¶o v¨n b¶n

Qu¶n lý 

c¬ së d÷ liÖu 

HÖ ®iÒu hµnh 

Tµi nguyªn 

background image

HÖ ®iÒu hµnh 

 

trang   9/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒ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) 

background image

HÖ ®iÒu hµnh 

 

trang   10/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  KiÓm tra xem cã tån t¹i æ ®Üa A: 
+  KiÓm tra xem cã tån t¹i ®Üa A 
+  KiÓm tra kh¶ n¨ng truy nhËp ®Üa tõ 
+  KiÓm tra cã tån t¹i tÖp f1.txt 
+  KiÓm tra cã ®äc ®−îc tÖp hay kh«ng 
+  LÆp l¹i víi C: 

-

  H§H ph¶i cã nh÷ng ph−¬ng tiÖn kiÓm tra tÝnh ®óng ®¾n cña d÷ liÖu trong khi 

thao t¸c. 

b. An toµn 

-

  HÖ thèng cè g¾ng b¶o vÖ th«ng tin, cè g¾ng chèng c¸c tr−êng hîp truy nhËp 

kh«ng hîp thøc. 

-

  Chøc n¨ng b¶o vÖ th«ng tin ®−îc chia thµnh nhiÒu møc: 

+  C¸c møc do hÖ thèng ®¶m nhiÖm: VÝ dô trong c¸c hÖ thèng UNIX, khi 

muèn xo¸  hay söa ®æi néi dung mét tÖp, ng−êi sö dông ph¶i cã quyÒn xo¸ 
söa ®èi víi file ®ã. 

+  Cã møc do ng−êi sö dông ®¶m nhiÖm: LÖnh DEL *.* cña MSDOS, hÖ 

thèng hái l¹i ng−êi sö dông mét lÇn n÷a ®Ó tr¸nh sai sãt v« ý. 

c. Kh¸i qu¸t theo thêi gian 

-

  H§H ph¶i cã tÝnh kÕ thõa tõ c¸c hÖ thèng cò 

-

  H§H còng ph¶i cã kh¶ n¨ng thÝch nghi víi nh÷ng thay ®æi trong t−¬ng lai. 

d. HiÖu qu¶ 

-

  C¸c tµi nguyªn cña hÖ thèng ph¶i ®−îc khai th¸c tèi −u. 

-

  H§H ph¶i duy tr× ®ång ®é trong toµn bé hÖ thèng. 

e. ThuËn tiÖn 

-

  H§H ph¶i th©n thiÖn víi ng−êi sö dông do ®ã H§H ph¶i cã nhiÒu h×nh th¸i 

giao tiÕp: 
+  Giao tiÕp d¹ng dßng lÖnh 
+  Giao tiÕp d¹ng thùc ®¬n (Menu) 
+  Giao tiÕp d¹ng biÓu t−îng 

6. 

Nguyªn lý x©y dùng ch−¬ng tr×nh H§H 

a. Module 

-

  H§H ph¶i ®−îc x©y dùng tõ c¸c module ®éc lËp nh−ng cã kh¶ n¨ng liªn kÕt 

thµnh mét hÖ thèng cã thÓ thu gän hoÆc më réng tuú ý. 

-

  C¸c module ®ång cÊp quan hÖ víi nhau th«ng qua d÷ liÖu vµo vµ ra. 

background image

HÖ ®iÒu hµnh 

 

trang   11/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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 

background image

HÖ ®iÒu hµnh 

 

trang   12/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  §Üa nµo? Th−êng trùc: §Üa C: 
+  Th− môc nµo? Th−êng trùc: C:\Tp70 
+  Xem g×? Xem tÊt c¶ c¸c tÖp 
+  §−a ra ®©u? §−a ra thiÕt bÞ ra chuÈn: Mµn h×nh 
+  §−a ra nh− thÕ nµo? §Çy ®ñ th«ng tin 

-

  Tham sè 

+  Tham sè vÞ trÝ: XuÊt hiÖn theo vÞ trÝ vµ theo dßng tham sè. 
+  Tham sè kho¸ ®−îc x©y dùng theo tõ kho¸ vµ cã thÓ xuÊt hiÖn ë vÞ trÝ bÊt 

kú, tr×nh tù bÊt kú. 

-

  VÝ dô 

C:\> format A: /q 

+  LÖnh format ®Üa 
+  Tham sè vÞ trÝ: §Üa A 
+  Tham sè kho¸: Format nhanh 

 

f. Nguyªn lý b¶o vÖ nhiÒu møc 

-

  Ch−¬ng tr×nh vµ d÷ liÖu ph¶i ®−îc b¶o vÖ nhiÒu møc b»ng nhiÒu kho¸. 

-

  VÝ dô trong Linux 

+  Møc 1: Ng−êi sö dông ph¶i cã tµi kho¶n míi ®−îc sö dông m¸y tÝnh. 
+  Møc 2: ChØ nh÷ng ng−êi sö dông thuéc nhãm A míi ®−îc truy nhËp vµ tÖp 

chung cña nhãm A. 

background image

HÖ ®iÒu hµnh 

 

trang   13/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

7. 

Thµnh phÇn cña H§H vµ kiÕn tróc H§H 

a. Thµnh phÇn cña H§H 

-

  Ng«n ng÷ lµm viÖc vµ giao tiÕp 

HÖ ®iÒu hµnh ph¶i cã Ýt nhÊt 3 ng«n ng÷ lµm viÖc vµ giao tiÕp phôc vô cho 

c¸c ®èi t−îng kh¸c nhau. 

+  Ng«n ng÷ m¸y: Lµ ng«n ng÷ thùc hiÖn duy nhÊt cña hÖ thèng v× vËy cßn 

gäi lµ ng«n ng÷ thùc hiÖn. Mäi ng«n ng÷ kh¸c ®Òu ph¶i ®−îc ¸nh x¹ sang 
ng«n ng÷ nµy. 

+  Ng«n ng÷ vËn hµnh: Lµ ng«n ng÷ gióp thao t¸c viªn giao tiÕp víi hÖ 

thèng. VÝ dô: ng«n ng÷ MSDOS. 

+  Ng«n ng÷ thuËt to¸n: Lµ ng«n ng÷ chñ yÕu gióp ng−êi sö dông giao tiÕp 

víi hÖ thèng. VÝ dô ng«n ng÷ Pascal, C, Visual Basic. Mçi ng«n ng÷ cã 
thÓ cã nhiÒu ch−¬ng tr×nh dÞch ®Ó ¸nh x¹ sang ng«n ng÷ m¸y. 

-

  HÖ thèng qu¶n lý tµi nguyªn: Supervisor 

§©y lµ hÖ thèng phôc vô ph©n phèi vµ qu¶n lý tµi nguyªn. 

 
b. KiÕn tróc H§H 

 
 
 
 
 
 
 
 
 
 
 
 
 
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

 

DÞch vô

Nh©n 

CT øng dông

COMMAND 

MSDOS.SYS 

 

IO.SYS 

 

 

BIOS 

CT øng dông 

background image

HÖ ®iÒu hµnh 

 

trang   14/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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 

background image

HÖ ®iÒu hµnh 

 

trang   15/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒ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. 

background image

HÖ ®iÒu hµnh 

 

trang   16/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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.  

 
 
 
 

background image

HÖ ®iÒu hµnh 

 

trang   17/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Ch−¬ng 2. 

HÖ thèng xö lý ng¾t trong IBM PC 

1. 

Kh¸i niÖm vÒ ng¾t vµ xö lý ng¾t trong IBM PC 

-

  Ng¾t lµ hiÖn t−îng t¹m ngõng thùc hiÖn mét tiÕn tr×nh ®Ó chuyÓn sang thùc 

hiÖn mét tiÕn tr×nh kh¸c khi cã mét sù kiÖn x¶y ra trong hÖ thèng tÝnh to¸n. 
Cã thÓ hiÓu t¹m nghÜa “thùc hiÖn mét tiÕn tr×nh” lµ thùc hiÖn mét ch−¬ng 
tr×nh, tiÕn tr×nh bÞ ng¾t cã thÓ coi lµ ch−¬ng tr×nh chÝnh, cßn tiÕn tr×nh xö lý 
ng¾t cã thÓ coi lµ ch−¬ng tr×nh con. 

-

  Ch−¬ng tr×nh con xö lý ng¾t lµ mét ch−¬ng tr×nh ng«n ng÷ m¸y hoµn toµn 

b×nh th−êng. Ch−¬ng tr×nh nµy ®Þa chØ kÕt thóc b»ng lÖnh IRET (Interupt 
RETurn), nã ra lÖnh cho bé xö lý quay vÒ thùc hiÖn tiÕp ch−¬ng tr×nh chÝnh 
®óng tõ chç mµ nã bÞ ng¾t. 

 
 
 
 
 
 
 
 
  
 
 

-

  §è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 

Ch−¬ng tr×nh chÝnh

CÊt gi÷ c¸c thanh ghi 

Kh«i phôc c¸c thanh ghi

Ch−¬ng tr×nh con 

background image

HÖ ®iÒu hµnh 

 

trang   18/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  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ã. 

background image

HÖ ®iÒu hµnh 

 

trang   19/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Ba b−íc thùc hiÖn ®Çu tiªn ®Òu gièng nhau 

-

  Kh¸c nhau 

 

Ch−¬ng tr×nh con 

Ch−¬ng tr×nh xö lý ng¾t 

Khi chóng ta cã lêi gäi ch−¬ng 
tr×nh con, chóng ta cÇn biÕt 
®Ých x¸c ch−¬ng tr×nh con n»m 
t¹i ®©u. Ch−¬ng tr×nh chÝnh vµ 
ch−¬ng tr×nh con ®−îc g¾n kÕt 
víi nhau thµnh mét tiÕn tr×nh 
duy nhÊt. 

Ch−¬ng tr×nh bÞ ng¾t vµ 
ch−¬ng tr×nh xö lý ng¾t lµ 
2 tiÕn tr×nh ®éc lËp, 2 tiÕn 
tr×nh nµy kh«ng biÕt th«ng 
tin cña nhau. Trong 
ch−¬ng tr×nh bÞ ng¾t còng 
kh«ng cã lêi gäi ®Õn 
ch−¬ng tr×nh xö lý ng¾t. 

Trong ch−¬ng tr×nh chÝnh ta 
ph¶i khai b¸o th− viÖn c¸c 
ch−¬ng tr×nh con. 

 

 

4. 

B¶ng vector ng¾t 

Khi ng¾t ®−îc t¹o ra, n¬i ph¸t sinh nã kh«ng cÇn biÕt ®Þa chØ cña ch−¬ng 

tr×nh xö lý ng¾t t−¬ng øng mµ chØ cÇn biÕt sè hiÖu ng¾t. Sè hiÖu nµy chØ ®Õn mét 
phÇn tö trong mét b¶ng gäi lµ b¶ng c¸c vector ng¾t n»m ë vïng cã ®Þa chØ thÊp 
nhÊt trong bé nhí vµ chøa ®Þa chØ cña ch−¬ng tr×nh con xö lý ng¾t. §Þa chØ b¾t 
®Çu cña mçi ch−¬ng tr×nh con ®−îc x¸c ®Þnh bëi ®Þa chØ ®o¹n vµ ®Þa chØ offset 
®−îc ®Æt tr−íc ®o¹n. 

Hai ®Þa chØ nµy ®Òu lµ 16 bit (2 byte), nh− vËy mçi ®Þa chØ ng¾t chiÕm 4 

byte trong bé nhí. M¸y tÝnh PC cã 256 ng¾t kh¸c nhau ®−îc ®¸nh sè tõ 0 ®Õn 
255 do vËy ®é dµi cña c¶ b¶ng do vËy sÏ lµ 256*4 = 1024. B¶ng vector ng¾t 
chiÕm c¸c « nhí tõ ®Þa chØ 0 ®Õn 3FFh. Sè thø tù cña ng¾t b»ng sè thø tù cña 
vector ng¾t. §Þa chØ cña ch−¬ng tr×nh xö lý sè i ®−îc chøa trong b¶ng vÐc t¬ ng¾t 
tõ ®Þa chØ offset 4*(i-1) ®Õn 4*(i-1) + 3. 

Mét sè ng¾t th−êng dïng 
 

STT  Sè hiÖu ng¾t

Chøc n¨ng 

00 

Ng¾t chia cho 0 

04 

Ng¾t trµn sè 

08 

Ng¾t thêi gian 

09 Ng¾t 

bµn 

phÝm 

background image

HÖ ®iÒu hµnh 

 

trang   20/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

10H 

Ng¾t phôc vô mµn h×nh 

19H 

Ng¾t khëi ®éng hÖ thèng 

20H 

KÕt thóc ch−¬ng tr×nh 

21H 

Gäi c¸c hµm cña DOS 

25H/26H §äc/ghi 

®Üa 

10 

27H 

KÕt thóc nh−ng th−êng tró 

11 

33H 

Ng¾t phôc vô chuét 

12 

67H 

Qu¶n lý bé nhí më réng 

 

5. 

Gäi ng¾t trong Assembler 

-

  VÝ dô: Gäi ng¾t 10 h Èn con trá 

Mov AH,1 

Mov CX,0100H 
INT 10H 

-

  Gi¶i thÝch 

Cho CH = 1, dßng ®Çu tiªn cña ma trËn hiÓn thÞ con trá 
Cho CL = 0, dßng cuèi cïng cña ma trËn hiÓn thÞ con trá 
Nh− vËy CH < CL v× vËy con trá kh«ng hiÖn ra mµn h×nh 

-

  Nhóng ng«n ng÷ Assembler vµo trong m«i tr−êng PASCAL 

uses crt; 

begin 

 writeln('...'); 

 asm 

  mov 

AH,1 

  mov 

CX,$0100 

 end; 

 readkey; 

end. 

6. 

Gäi ng¾t trong Pascal 

Pascal cung cÊp hai thñ tôc ®Ó gäi ng¾t trong th− viÖn Dos 

-

  Thñ tôc Intr 

procedure Intr(IntNo: Byte; var Regs: Registers); 
®Ó gäi ng¾t víi mét sè hiÖu ng¾t bÊt kú 

-

  Thñ tôc MsDos 

procedure MsDos(var Regs: Registers); 
®Ó gäi ng¾t 21H cña DOS. 
 

-

  KiÓu b¶n ghi Registers 

type 

background image

HÖ ®iÒu hµnh 

 

trang   21/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

  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 

 

7. 

Bé thanh ghi cña 8088 

Bé vi xö lý 8088 cã 14 thanh ghi cã ®é dµi 16 bit vµ ®−îc chia thµnh 4 lo¹i 

a. C¸c thanh ghi chung 

-

  Th−êng dïng ®Ó l−u tr÷ trong c¸c phÐp to¸n sè häc. 

Gåm cã 

+  AX (Accumulator): Thanh ghi tÝch lòy 

Th−êng dïng ®Ó l−u tr÷ c¸c gi¸ trÞ trong khi thùc hiÖn c¸c phÐp to¸n sè 

häc. 

+  BX (Base): Thanh ghi c¬ së 

background image

HÖ ®iÒu hµnh 

 

trang   22/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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

 
C¸c cê ®−îc chia lµm hai lo¹i 

-

  C¸c cê tr¹ng th¸i 

+  CF (Carry Flag): Cê nhí chØ phÐp to¸n sè häc cã nhí 
+  OF (Overflow Flag): Cê trµn chØ phÐp to¸n sè häc bÞ trµn 
+  ZF (Zero Flag): Cê zero chØ kÕt qu¶ b»ng kh«ng hoÆc so s¸nh b»ng 
+  SF (Sign Flag): Cê dÊu chØ kÕt qu¶ ©m kh«ng hoÆc so s¸nh ©m 
+  PF (Parity Flag): Cê ch½n lÎ chØ sè ch½n c¸c bit 1 

background image

HÖ ®iÒu hµnh 

 

trang   23/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  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; 

background image

HÖ ®iÒu hµnh 

 

trang   24/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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; 

 

{ thay ®æi ng¾t Ctrl + Break } 

setintvec($1B,addr(thay_doi_break)); 

i:=0; 

write('Cho biet mat khau:'); 

while (i<3) and (not break_flag) do begin 

          pw; 

          if(password = 'ABC') then begin 

                    setintvec($1B,p); 

                    exit; 

          end 

          else begin 

                    i:=i+1; 

                    write(#7#7#7); 

          end; 

end; 

 

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 

background image

HÖ ®iÒu hµnh 

 

trang   25/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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 WriteBiWord(w: Word); 

var i: byte; 
begin 

 for i := 15 downto 0 do begin 
     if((w shr i) mod 2 = 0) then 

         Write('0') 
     else 

         Write('1'); 
     if(i mod 4 = 0) then Write(' '); 

 end; 

end; 

 

procedure WriteHexWord(w: Word); 
const 

 hexChars: array [0..$F] of Char = 
   '0123456789ABCDEF'; 

begin 
 Write(hexChars[Hi(w) shr 4], 

       hexChars[Hi(w) and $F], 
       hexChars[Lo(w) shr 4], 

       hexChars[Lo(w) and $F]); 
end; 

 
procedure WriteWord(w: Word); 

begin 
 Writeln; 

 Write('w = ',w); 
 Write(' = '); WriteHexWord(w); 

 Write(' = '); WriteBiWord(w); 
end; 

 
procedure TestShift; 

var 

background image

HÖ ®iÒu hµnh 

 

trang   26/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 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 

 

------------- 
 

A = 4660 =  

 

1234 = 0001 0010 0011 0100 

B = 22136 =  

 

5678 = 0101 0110 0111 1000 

NOT A = 60875 =  

EDCB = 1110 1101 1100 1011 

A AND B = 4656 =  

1230 = 0001 0010 0011 0000 

A OR B = 22140 =  

567C = 0101 0110 0111 1100 

A XOR B = 17484 =   444C = 0100 0100 0100 1100 

background image

HÖ ®iÒu hµnh 

 

trang   27/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  Hµm lÊy byte cao cña mét tõ (word) 

function Hi(X): Byte; 

-

  Hµm lÊy byte thÊp cña mét tõ (word) 

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; 

 
procedure WriteHexWord(w: Word); 

const 
 hexChars: array [0..$F] of Char = 

   '0123456789ABCDEF'; 
begin 

 Write(hexChars[Hi(w) shr 4], 
       hexChars[Hi(w) and $F], 

       hexChars[Lo(w) shr 4], 
       hexChars[Lo(w) and $F]); 

end; 
 

begin 
 A := $1234; { 4660 } 

 writeln; 

 write('A = ', A, ' = $');WriteHexWord(A); 

 

 { function Hi(X): Byte; } 

 A1 := Hi(A);   { $12 = 18 } 

 writeln; 
 write('A1 = ', A1, ' = $');WriteHexWord(A1); 

 
 { function Lo(X): Byte; } 

 A2 := Lo(A);   { $34 = 52 } 
 writeln; 

 write('A2 = ', A2, ' = $');WriteHexWord(A2); 
 writeln; 

 
 { function Swap(X): (Same type as parameter); } 

 B := Swap(A); { $3412 = 13330 } 
 write('B = ', B, ' = $');WriteHexWord(B); 

end. 

-

  Hµm lÊy ®Þa chØ ®o¹n cña mét biÕn, mét thñ tôc hay mét hµm 

function Seg(X): Word; 

Lo(x)

Hi(x)

background image

HÖ ®iÒu hµnh 

 

trang   28/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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; } 
 

procedure WriteHexWord(w: Word); 
const 

 hexChars: array [0..$F] of Char = 
   '0123456789ABCDEF'; 

begin 
 Write(hexChars[Hi(w) shr 4], 

       hexChars[Hi(w) and $F], 
       hexChars[Lo(w) shr 4], 

       hexChars[Lo(w) and $F]); 
end; 

var 
 i: Integer; 

begin 

 Write('The current code segment is $'); 

 WriteHexWord(CSeg); Writeln; 

 

 Write('The global data segment is $'); 

 WriteHexWord(DSeg); Writeln; 

 

 Write('The stack segment is $'); 

 WriteHexWord(SSeg); Writeln; 

 

 Write('The stack pointer is at $'); 

 WriteHexWord(SPtr); Writeln; 

 

 Write('i is at offset $'); 

 WriteHexWord(Ofs(i)); 

 

 Write(' in segment $'); 

 WriteHexWord(Seg(i)); 

end. 

background image

HÖ ®iÒu hµnh 

 

trang   29/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 

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 

background image

HÖ ®iÒu hµnh 

 

trang   30/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

   Ten: string[40]; { 40 + 1 ®é dµi ký tù } 
   DiaChi: string[40]; { 40 + 1 ®é dµi ký tù } 

   DienThoai: string[20]; { 20 + 1 ®é dµi ký tù } 
   Tuoi: byte; { 1 } 

   GioiTinh: boolean; { 1 } 
 end; 

var 
 P: ^NhanVien; 

begin 
 GetMem(P, SizeOf(NhanVien)); 

 Writeln ('Kich thuoc bg la ', SizeOf(NhanVien), ' bytes.'); 

 FreeMem (P, SizeOf(NhanVien)); 

end. 
{ Kich thuoc cua ban ghi la 105 bytes.} 

-

  Thñ tôc sao chÐp c¸c byte 

procedure Move(var Source, Dest; Count: Word); 

-

  VÝ dô: 

{ procedure Move(var Source, Dest; Count: Word); 

 Copies bytes from source to dest. } 

 

procedure WriteHexWord(w: Word); 

const 

 hexChars: array [0..$F] of Char = 

   '0123456789ABCDEF'; 

begin 

 Write(hexChars[Hi(w) shr 4], 

       hexChars[Hi(w) and $F], 

       hexChars[Lo(w) shr 4], 

       hexChars[Lo(w) and $F]); 

end; 

 

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 

background image

HÖ ®iÒu hµnh 

 

trang   31/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

procedure FillChar(var X; Count: Word; value); 

-

  Truy nhËp trùc tiÕp bé nhí 

Mem, MemW, MemL 

Mem ®Ó lÊy mét byte t¹i ®Þa chØ ®−îc trá bëi ®Þa chØ ®o¹n vµ ®Þa chØ offset. 
MemW ®Ó lÊy mét word (2 bytes) t¹i ®Þa chØ ®−îc trá bëi ®Þa chØ ®o¹n vµ 

®Þa chØ offset. 

MemL ®Ó lÊy mét longint (4 bytes) t¹i ®Þa chØ ®−îc trá bëi ®Þa chØ ®o¹n vµ 

®Þa chØ offset. 

-

  VÝ dô: 

var 

 i: Byte; 

 j: Word; 

 k: Longint; 

begin 

 i := 1; 

 j := 1000; 

 k := 1000000; 
 writeln; 

 writeln('i = ', Mem[seg(i):ofs(i)]); 
 writeln('j = ', MemW[seg(j):ofs(j)]); 

 writeln('k = ', MemL[seg(k):ofs(k)]); 
end. 

  

background image

HÖ ®iÒu hµnh 

 

trang   32/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Ch−¬ng 3. 

Qu¶n lý thiÕt bÞ ngo¹i vi vµ tÖp 

LT: 12 TiÕt, TH: 

Khi c«ng nghÖ th«ng tin ngµy mét ph¸t triÓn, sè l−îng c¸c thiÕt bÞ ngo¹i vi 

g¾n vµo m¸y tÝnh ngµy cµng  lín. Tæ chøc vµ qu¶n lý c¸c thiÕt bÞ ngo¹i vi ngµy 
mét khã kh¨n vµ quan träng. NhiÖm vô c¬ b¶n vµ quan träng nhÊt cña c¸c H§H 
hiÖn ®¹i lµ qu¶n lý vµ khai th¸c tèi −u c¸c thiÕt bÞ ngo¹i vi. NhiÖm vô nµy quyÕt 
®Þnh hiÖu suÊt chung cña toµn hÖ thèng. 

1. 

Nguyªn lý ph©n cÊp trong tæ chøc vµ qu¶n lý thiÕt bÞ ngo¹i vi 

a. Giíi thiÖu 

ThiÕt bÞ ngo¹i vi hÕt søc ®a d¹ng, phong phó vÒ chñng lo¹i vµ cã thÓ g¾n 

vµo vµo hÖ thèng víi sè l−îng lín. Ngoµi c¸c thiÕt bÞ chuÈn cã tÝnh chÊt b¾t buéc 
do ng−êi s¶n xuÊt cung cÊp nh− bµn phÝm, mµn h×nh, chuét   c¸c hÖ thèng tÝnh 
to¸n ph¶i lu«n cã tÝnh më tøc lµ kh¶ n¨ng giao tiÕp víi sè l−îng tuú ý c¸c thiÕt bÞ 
ngo¹i vi bæ xung. §iÒu nµy lµ cÇn thiÕt v× hÖ thèng tÝnh to¸n ph¶i s½n sµng cã thÓ 
sö dông cho mét m«i tr−êng bÊt kú. 

VÝ dô: M¸y tÝnh cã thÓ g¾n vµo m¸y ®äc thÎ ®Ó kiÓm tra nh©n viªn cã ®i 

lµm hay kh«ng? ®Ó h¹n chÕ sù x©m ph¹m tr¸i phÐp. 

Nãi chung cÊu t¹o vµ chøc n¨ng cña c¸c thiÕt bÞ ngo¹i vi lµ kh¸c nhau. VÝ 

dô: mµn h×nh lµ thiÕt bÞ ra chuÈn, bµn phÝm lµ thiÕt bÞ vµo chuÈn. Tuy chóng ®Òu 
lµ thiÕt bÞ chuÈn nh−ng râ rµng cÊu t¹o vµ ho¹t ®éng cña hai thiÕt bÞ nµy kh¸c 
nhau rÊt nhiÒu. H¬n n÷a c¸c tÝnh hiÖu ®iÒu khiÓn ®−îc truyÒn ®Õn c¸c thiÕt bÞ sÏ 
®iÒu khiÓn thao t¸c hiÖn hµnh cña nã. RÊt khã ®Ó cã c¸c tÝn hiÖu riªng cho tõng 
chøc n¨ng riªng cña c¸c thiÕt bÞ bao gåm c¶ c¸c thiÕt bÞ cã thÓ ®−îc thªm vµo 
trong suèt thêi gian tån t¹i cña hÖ thèng. VÝ dô: 1 tÝn hiÖu cña hÖ thèng ®−a ®Õn 
m¸y in cã thÓ hiÓu lµ bá qua mét dßng (dßng tr¾ng) nh−ng l¹i cã ý nghÜa lµ tua 
l¹i nÕu tÝn hiÖu ®−îc ®−a ®Õn æ b¨ng tõ. 

ChÝnh v× vËy mµ processor kh«ng thÓ lµm viÖc trùc tiÕp víi c¸c thiÕt bÞ 

ngo¹i vi nµy mµ chØ lµm viÖc víi c¸c thiÕt bÞ ®iÒu khiÓn (Device Controller). 

 

background image

HÖ ®iÒu hµnh 

 

trang   33/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Device Controller 1

Device Controller 2

DCn

IO Device 1 

IO Device 2 

IO Device m 

Processor

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. 

 
 
 

 

 
 

 
 
 
 
 

 
 

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. 

 
 
 
 
 
 
 
 
 
 

TB§K 1 

TB§K 2

IO Device

IO Device 11 

IO Device 12 

Device Controller

IO Device 21

background image

HÖ ®iÒu hµnh 

 

trang   34/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  Trao ®æi vµo ra víi kªnh 

§Ó thùc hiÖn mét phÐp trao ®æi vµo ra ë mét kªnh nµo ®ã th× processor 

ph¶i t¹o ra ch−¬ng tr×nh trªn ng«n ng÷ cña thiÕt bÞ ®iÒu khiÓn (cßn gäi lµ ch−¬ng 
tr×nh kªnh). TiÕp theo processor chuyÓn giao ch−¬ng tr×nh kªnh cïng víi d÷ liÖu 
cÇn thiÕt cho kªnh. Sau ®ã processor tiÕp tôc thùc hiÖn c«ng viÖc cña m×nh. 

Nh− vËy c¸c c«ng viÖc cña kªnh ®−îc thùc hiÖn song song víi c«ng viÖc 

cña processor ®iÒu nµy lµm t¨ng tèc ®é chung cña c¶ hÖ thèng. 

Khi kªnh thùc hiÖn xong c«ng viÖc cña m×nh kªnh sÏ b¸o vÒ cho processor 

d−íi d¹ng ng¾t vµo/ra cïng víi m· kÕt qu¶ thùc hiÖn c«ng viÖc (return code). TÝn 
hiÖu ng¾t cã thÓ ®−îc xö lý ngay lËp tøc hay ph¶i chê ®îi hoÆc thËm chÝ bÞ huû 
bá nÕu processor thÊy kh«ng cÇn thiÕt. M· kÕt qu¶ bao giê còng ®−îc l−u tr÷ ®Ó 
chê processor xö lý. 

Khi processor dõng c«ng viÖc cña m×nh ®Ó ®¸nh gi¸ c«ng viÖc thùc hiÖn 

cña kªnh (tÝn hiÖu ng¾t ®−îc xö lý), processor sÏ lÊy m· trë vÒ tõ kªnh. NÕu m· 
cho biÕt kªnh thùc hiÖn tèt ®Ñp th× processor cã thÓ giao tiÕp c«ng viÖc míi cho 
kªnh (nÕu cßn). Ng−îc l¹i, processor cã thÓ yªu cÇu kªnh thùc hiÖn l¹i c«ng 
viÖc. NÕu sau n lÇn (phô thuéc vµo tõng hÖ ®iÒu hµnh) vÉn kh«ng ®−îc ta míi 
nhËn ®−îc th«ng b¸o lçi. 

Ng«n ng÷ kªnh cã thÓ ®−îc ®−a vµo hÖ thèng khi n¹p hÖ ®iÒu hµnh hoÆc 

cã thÓ ®−îc cung cÊp cho processor ngay khi hÖ thèng ho¹t ®éng. 

§èi víi MSDOS gi¶i quyÕt b»ng c¸c ®−a c¸c c©u lÖnh ®iÒu khiÓn thiÕt bÞ 

trong CONFIG.SYS hoÆc thùc hiÖn c¸c ch−¬ng tr×nh cung cÊp ng«n ng÷ kªnh 
trong khi hÖ ®iÒu hµnh ®ang lµm viÖc. 

-

  VÝ dô 

§èi víi thiÕt bÞ ngo¹i vi chuét 

+  Ta cã thÓ ®−a vµo tÖp config.sys c©u lÖnh 

Device = C:\mouse\mouse.sys 

+  HoÆc thùc hiÖn ch−¬ng tr×nh Mouse.com 

-

  VÝ dô (më réng nãi thªm): t¹o æ ®Üa ¶o 

Device = c:\windows\Ramdrive.sys 200 

T¹o mét ®Üa ¶o (RAM disk) kÝch th−íc 200K, nÕu chØ cã æ mÒm A: th× æ 

®Üa nµy sÏ lµ ®Üa B: 

2. 

Phßng §Öm (Buffer) 

§Æc tr−ng c¬ b¶n cña thiÕt bÞ ngo¹i vi lµ tèc ®é ho¹t ®éng nhá h¬n nhiÒu 

lÇn so víi tèc ®é ho¹t ®éng cña processor. §Ó thùc hiÖn mét phÐp vµo ra hÖ 
thèng ph¶i kÝch ho¹t thiÕt bÞ, chê ®îi thiÕt bÞ ®¹t tr¹ng th¸i thÝch hîp (VÝ dô nh− 
m¸y in ph¶i chê nãng   ) vµ sau ®ã chê ®îi c«ng viÖc ®−îc thùc hiÖn. ChÝnh v× 

background image

HÖ ®iÒu hµnh 

 

trang   35/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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); 

 

 

 

 
 
 
 
 
 
 
 
 
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 

Reset(f)

Read(f,a) 

background image

HÖ ®iÒu hµnh 

 

trang   36/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  Ph©n lo¹i phßng ®Öm 

a. Phßng ®Öm trung chuyÓn 

-

  Lµ phßng ®Öm thuÇn tuý l−u tr÷ t¹m thêi c¸c phÐp phôc vô vµo ra. 

-

  Phßng ®Öm nµy cã hai lo¹i 

+  Phßng ®Öm vµo lµ phßng ®Öm chØ dïng ®Ó nhËp th«ng tin. Trong hÖ thèng 

sÏ cã lÖnh ®Ó ®−a th«ng tin vµo phßng ®Öm (®äc vËt lý). 
Khi gÆp chØ thÞ ®äc (READ), th«ng tin sÏ ®−îc t¸ch vµ chuyÓn tõ phßng 

®Öm vµo c¸c ®Þa chØ t−¬ng øng trong ch−¬ng tr×nh øng dông. Nh− vËy, mçi gi¸ 
trÞ ®−îc l−u tr÷ ë hai n¬i trong bé nhí (mét ë phßng ®Öm vµ mét ë vïng bé nhí 
trong ch−¬ng tr×nh øng dông). Khi gi¸ trÞ cuèi cïng cña phßng ®Öm vµo ®−îc lÊy 
ra th× phßng ®Öm ®−îc gi¶i phãng (rçng) vµ hÖ thèng ®−a th«ng tin míi vµo 
phßng ®Öm trong thêi gian ng¾n nhÊt cã thÓ. 

§Ó gi¶m thêi gian chê ®îi, hÖ thèng cã thÓ tæ chøc nhiÒu phßng ®Öm vµo, 

khi hÕt th«ng tin ë mét phßng ®Öm, hÖ thèng sÏ chuyÓn sang phßng ®Öm kh¸c. 

+  Phßng ®Öm ra lµ phßng ®Öm ®Ó ghi th«ng tin. Trong hÖ thèng cã lÖnh ®Ó 

gi¶i phãng phßng ®Öm (ghi vËt lý). Khi cã chØ thÞ ghi (WRITE), th«ng tin 
®−îc ®−a vµo phßng ®Öm. Khi phßng ®Öm ra ®Çy, hÖ thèng sÏ ®−a th«ng 
tin ra thiÕt bÞ ngo¹i vi. HÖ thèng còng cã thÓ tæ chøc nhiÒu phßng ®Öm ra. 
 
 
 

 
 
 
 
 

-

  −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í 

Buffer 

a

Buffer

Read(f,a)

Write(f,a)

System 

System 

background image

HÖ ®iÒu hµnh 

 

trang   37/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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Þ. 

 
 
 
 
 
 
 
 

-

  −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 
 
 
 
 
 
 
 
 
 
 

 
 

-

  Sau mét kho¶ng thêi gian vai trß cña ba phßng ®Öm ®−îc thay ®æi cho nhau. 

-

  −u ®iÓm: 

Buffer

®Þa chØ a

System 

§äc

Ghi

Xö lý

background image

HÖ ®iÒu hµnh 

 

trang   38/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒ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. 

 
 
 
 

background image

HÖ ®iÒu hµnh 

 

trang   39/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

4. 

Qu¶n lý mµn h×nh 

a. Giíi thiÖu 

C¸c thµnh phÇn cña thiÕt bÞ mµn h×nh. Trong m¸y IBM PC, thiÕt bÞ mµn 

h×nh gåm cã hai thµnh phÇn: 

1.  Card mµn h×nh (display adapter) 
2.  Mµn h×nh hiÓn thÞ, cßn gäi t¾t lµ mµn h×nh (monitor) 

Card mµn h×nh nèi m¸y tÝnh víi mµn h×nh th«ng qua mét chip lµ bé ®iÒu 

khiÓn (Cathode Ray Tube Controller). Card mµn h×nh cã c¸c cæng vµo/ra lËp 
tr×nh ®−îc, vïng nhí (®Ó t¹o) ký tù ROM vµ bé nhí mµn h×nh RAM chøa th«ng 
tin cÇn ®−a ra mµn h×nh hiÓn thÞ. 

C¸c cæng vµo ra cña mµn h×nh: 

Cæng 

M« t¶ 

M« t¶ thªm 

2c0-2df  EGA #2                                    

EGA I/O Ports

3b0-3df Video 

Graphics 

Array (VGA)                

VGA I/O Ports

3c0-3cf  Enhanced Graphics Adapter (EGA) #1 

EGA I/O Ports

3d0-3df  Color/Graphics Adapter (CGA) and EGA CGA I/O Ports

 

b. Bé nhí mµn h×nh 

Bé nhí mµn h×nh vÒ mÆt logic ®−îc coi nh− mét phÇn cña bé nhí n»m ë vÞ 

trÝ A0000-BFFFF lµ n¬i l−u tr÷ th«ng tin hiÓn thÞ cho mµn h×nh ë c¶ chÕ ®é ®å 
ho¹ vµ chÕ ®é v¨n b¶n. 

-

  Víi mµn h×nh VGA (®−îc sö dông phÇn lín hiÖn nay), bé nhí mµn h×nh v¨n 

b¶n b¾t ®Çu tõ vÞ trÝ B8000-BFFFF (dµi 8000H). Trong chÕ ®é nµy mçi ký tù 
trªn mµn h×nh t−¬ng øng víi 2 byte trong bé nhí. 
+  Byte ®Çu tiªn sÏ l−u tr÷ m· ASCII cña ký tù 
+  Byte tiÕp theo l−u tr÷ thuéc tÝnh cña ký tù 

7 6 5  4  3  2 1  0 

Blink Red Green Blue Intensity Red Green Blue 

 

Mµu nÒn 

Mµu ký tù 

 

 

 
Intensity = 1 : mÇu ch÷ ®−îc t¨ng ®é s¸ng 

background image

HÖ ®iÒu hµnh 

 

trang   40/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Fgb = 1 : mÇu nÒn ®−îc t« s¸ng 

-

  B¶ng mÇu 

Do ba bÝt kiÓu R,G,B t¹o thµnh c¸c mÇu 
 

Sè thø tù 

D¹ng Hex 

MÇu 

1 00H 

black 

2 01H 

blue 

3 02H 

green 

4 03H 

cyan 

5 04H 

red 

6 05H 

magenta 

7 06H 

brown 

8 07H 

white 

9 08H 

gray 

10 09H 

bright 

blue 

11 0aH 

bright 

green 

12 0bH 

bright 

cyan 

13 0cH 

bright 

red 

14 0dH 

bright 

magenta 

15 0eH 

yellow 

16 0fH 

bright 

white 

 
§è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µ 

 
 
 
 
 
 
 
B8000 + 80.2.y + 2.x = B800:160y + 2.x 
Nh− vËy t¹i « nhí cã ®Þa chØ B800:160y + 2.x ta ®−a m· ký tù cÇn hiÓn thÞ 

(y,x)

x

y

background image

HÖ ®iÒu hµnh 

 

trang   41/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

t¹i « nhí cã ®Þa chØ B800:160y + 2.x + 1 ta ®−a thuéc tÝnh ký tù 

-

  Gi¶i thÝch khai b¸o biÕn d¹ng absolute 

+  Khi ta khai b¸o biÕn nh− sau 

Var  tªn_biÕn : tªn_kiÓu absolute Seg:Ofs; 

Th× ch−¬ng tr×nh sÏ t¹o ra mét biÕn víi ®Þa chØ cña biÕn t¹i ®Þa chØ ®−îc 

trá bëi seg vµ ofs. Khai b¸o biÕn d¹ng nµy cho phÐp ta truy nhËp bé nhí mét 
c¸ch thuËn tiÖn h¬n. 

+  VÝ dô: 

head: Word absolute $0040:$001A; 

Ch−¬ng tr×nh sÏ t¹o ra mét biÕn kiÓu word t¹i ®Þa chØ $0040:$001A; 

-

  VÝ dô in mét ký tù ‘X’ t¹i dßng 10, cét 40 tøc lµ (y,x) = (39,9) víi mÇu nÒn lµ 

mÇu xanh (cã m· lµ 01H) vµ ch÷ mÇu ®á (cã m· lµ 04H) 

uses crt,dos; 

var 

 A: Array[0..4000] of Byte absolute $B800:$0000; 

 x,y: integer; 

 ch : char; 

 tt : byte; 

begin 

 clrscr; 

 ch := 'X'; 

 x := 39; y := 9; 

 A[160*y + 2*x] := ord(ch); { ký tù X } 

 tt := tt OR $14; { mau nen = BLUE, mau chu = RED } 

 A[160*y + 2*x + 1] := tt; 

 readkey; 

end. 

-

  VÝ dô: in ra mµn h×nh x©u 'Truong Dai Hoc Bach Khoa' 

uses crt,dos; 

const 

 str : string = 'Truong Dai Hoc Bach Khoa'; 

var 

 A: Array[0..4000] of Byte absolute $B800:$0000; 

 x,y,i: integer; 

 

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. 

background image

HÖ ®iÒu hµnh 

 

trang   42/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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  

background image

HÖ ®iÒu hµnh 

 

trang   43/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  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; { ham dat vi tri con tro } 

 r.bh := 0; { trang 0 } 

 r.dh := 10; { dong 10 } 

 r.dl := 40; { cot 40 } 

 intr($10,r); 

 

 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 

background image

HÖ ®iÒu hµnh 

 

trang   44/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 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('!'); 
 

 r.ah := $06; { ham cuon trong cua so } 
 r.al := 10; 

 r.ch := 6; { dong 6 goc trai} 
 r.cl := 20; { cot 20 goc trai} 

 r.dh := 20; { dong 20 goc phai} 
 r.dl := 60; { dong 60 goc phai } 

 r.bh := $40; {mÇu nÒn=mÇu ®á – xem thªm thuéc tÝnh kt) 
 intr($10,r); 

 
 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. 

background image

HÖ ®iÒu hµnh 

 

trang   45/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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. 

background image

HÖ ®iÒu hµnh 

 

trang   46/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

5. 

Qu¶n lý bµn phÝm 

a. Giíi thiÖu 

Bµn phÝm ®−îc ®iÒu khiÓn th«ng qua 1 bé ®iÒu khiÓn bµn phÝm lµ bé Vi 

Xö Lý 8048 (®èi víi PC chuÈn) hoÆc 8042 (®èi víi m¸y AT). Mçi khi cã sù kiÖn 
bÊm hoÆc nh¶ phÝm th× bé ®iÒu khiÓn nµy cã nhiÖm vô b¸o cho ROM-BIOS biÕt 
®Ó xö lý. NÕu mét phÝm ®−îc bÊm l©u th× bé ®iÒu khiÓn lÆp l¹i phÝm nµy sau 
nh÷ng kho¶ng x¸c ®Þnh. Mçi lÇn bÊm th× c¸c vi m¹ch cña bµn phÝm t¹o ra mét sè 
1 byte gäi lµ m· quÐt (scan code) ®Æc tr−ng cho phÝm t−¬ng øng. Bµn phÝm t¹o ra 
mét m· scan kh¸c khi mét phÝm ®−îc nh¶. 

Cô thÓ: Khi bÊm mét phÝm, bµn phÝm t¹o ra mét m· scan, khi nh¶ phÝm ®ã 

bµn phÝm t¹o ra mét m· scan kh¸c b»ng m· scan lóc bÊm céng thªm 128 (cho bÝt 
7 cña m· scan lóc bÊm b»ng 1). 

|                             Keyboard Scan Codes                              | 

|------------------------------------------------------------------------------| 

|Hex Dec Key |Hex Dec Key  |Hex Dec Key    |Hex Dec Key     |Hex Dec Key       | 

|------------+-------------+---------------+----------------+------------------| 

|01   1  Esc |12  18  E    |23  35  H      |34  52  . >     |45  69  NumLock   | 

|02   2  1 ! |13  19  R    |24  36  J      |35  53  / ?     |46  70  ScrollLock| 

|03   3  2 @ |14  20  T    |25  37  K      |36  54  Shft(Rt)|47  71  Home [7]  | 

|04   4  3 # |15  21  Y    |26  38  L      |37  55  * PrtSc |48  72  Up   [8]  | 

|05   5  4 $ |16  22  U    |27  39  ; :    |38  56  Alt     |49  73  PgUp [9]  | 

|06   6  5 % |17  23  I    |28  40  " '    |39  57  spacebar|4a  74  K -       | 

|07   7  6 ^ |18  24  O    |29  41  ` ~    |3a  58  CapsLock|4b  75  Left [4]  | 

|08   8  7 & |19  25  P    |2a  42  Shft(L)|3b  59  F1      |4c  76       [5]  | 

|09   9  8 * |1a  26  [ {  |2b  43  \ |    |3c  60  F2      |4d  77  Right[6]  | 

|0a  10  9 ( |1b  27  ] }  |2c  44  Z      |3d  61  F3      |4e  78  K +       | 

|0b  11  0 ) |1c  28  Enter|2d  45  X      |3e  62  F4      |4f  79  End  [1]  | 

|0c  12  - _ |1d  29  Ctrl |2e  46  C      |3f  63  F5      |50  80  Down [2]  | 

|0d  13  + = |1e  30  A    |2f  47  V      |40  64  F6      |51  81  PgDn [3]  | 

|0e  14  bksp|1f  31  S    |30  48  B      |41  65  F7      |52  82  Ins  [0]  | 

|0f  15  Tab |20  32  D    |31  49  N      |42  66  F8      |53  83  Del  [.]  | 

|10  16  Q   |21  33  F    |32  50  M      |43  67  F9      |                  | 

|11  17  W   |22  34  G    |33  51  , <    |44  68  F10     |                  | 

|------------------------------------------------------------------------------|

 

Khi ng−êi sö dông bÊm phÝm, bµn phÝm kh«ng hÒ biÕt ý nghÜa cña phÝm 

®−îc bÊm th× chØ th«ng b¸o cã t¸c ®éng phÝm th«ng qua ng¾t 9H. Ng¾t 9H gäi 
ch−¬ng tr×nh xö lý ng¾t, ch−¬ng tr×nh nµy sÏ ®äc gi¸ trÞ ë cæng 60H ®Ó biÕt t¸c 
®éng phÝm nµo ®· x¶y ra. Sau ®ã m· scan ®−îc bµn phÝm trao cho ROM-BIOS 
vµ ®−îc c¸c tr×nh phôc vô bµn phÝm ®æi thµnh 2 byte. Byte thÊp chøa m· ASCII 
cña phÝm cßn byte cao chøa m· scan tõ bµn phÝm. Víi c¸c phÝm chøc n¨ng 
kh«ng cã m· ASCII nªn byte thÊp cã gi¸ trÞ lµ 0. Sau ®ã ROM-BIOS sÏ ®Æt 2 
byte nµy vµo mét hµng ®îi n»m trong bé nhí. 
b. Bé ®Öm bµn phÝm 

Bé ®Öm bµn phÝm gåm cã 32 byte tõ ®Þa chØ 0040:001E - 0040:003D, chøa 

tèi ®a lµ 16 ký tù (v× mçi ký tù chiÕm 2 byte : 1 cho m· ASCII vµ 1 cho m· 

background image

HÖ ®iÒu hµnh 

 

trang   47/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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. 

 
 
 
 
 
 
 
 

+  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 } 

 

     { ®äc m· ascii cña ký tù } 
     ch1 := Mem[$0040 : head]; 

Head t¹i $001A 

Tail t¹i $001C 

0040:001E 

0040:003D 

background image

HÖ ®iÒu hµnh 

 

trang   48/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

     { ®ä 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; 

 
     head := tail; { thay cho lÖnh readkey; } 

 until (ch1 = 13); { cho ®Õn khi gÆp phÝm Enter } 
end. 

 

-

  VÝ dô 2: ch−¬ng tr×nh gi¶ lËp bÊm phÝm 

{ Dua ra vung dem ban phim lenh Dir va Enter } 
uses crt,dos; 

const 
 a:array[0..7] of byte=($44,$20,$69,$17,$72,$13,$0D,$1C); 

 { gom co lenh Dir va dau Enter (Ascii va scan code) } 
var 

 head: Word absolute $0000:$041A; 
 tail: Word absolute $0000:$041C; 

 
 i : byte; 

 
procedure WriteToKb(ch : byte); 

begin { bé nhí bµn phÝm tõ 0040:001E - 0040:003D } 

 Mem[$0040 : tail] := ch; tail := tail + 1; 

 if (tail > $003D) then tail := $001E; 

end; 
 

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. 

background image

HÖ ®iÒu hµnh 

 

trang   49/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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)  | 

+------------------------------------------------------------------------+ 

 

background image

HÖ ®iÒu hµnh 

 

trang   50/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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

 

ZF := (Flags AND $40) 

e. Thay ®æi ng¾t bµn phÝm 

-

  Thay ®æi ng¾t bµn phÝm vÒ c¬ b¶n còng gièng nh− thay ®æi c¸c ng¾t kh¸c cña 

hÖ thèng nh−ng cã mét sè ®iÓm kh¸c 

background image

HÖ ®iÒu hµnh 

 

trang   51/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  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; 
 

procedure Swap(sc : byte); 
var 

 tail: Word absolute $0000:$041C; 
 head1: word; 

 ch: byte; 

begin 

 { bé nhí bµn phÝm tõ 0040:001E - 0040:003D } 

background image

HÖ ®iÒu hµnh 

 

trang   52/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 if (sc = $02) OR (sc = $03) then begin 
    if(sc = $02) then { neu bam so 1 tren day phim tren } 

          begin ch := $32; { so 2 } 
                sc := $03; 

          end 
    else 

          begin ch := $31; { so 1 } 
                sc := $02; 

    end; 
    head1 := tail - 2; 

    if (head1 < $001E) then head1 := $003C; 
    Mem[$0040 : head1] := ch; 

    Mem[$0040 : (head1 + 1) ] := sc; 
 end; 

end; 
 

{$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 = 1B

h

 vµ m· scan = 1. Gi¶ sö thñ tôc gi¶i ph−¬ng 

tr×nh bËc 2 Giai_PTB2 ®· cã s½n. 

background image

HÖ ®iÒu hµnh 

 

trang   53/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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. 

background image

HÖ ®iÒu hµnh 

 

trang   54/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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¸. 
 

background image

HÖ ®iÒu hµnh 

 

trang   55/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 

 

-

  Truy nhËp tÖp 

+  Truy nhËp tuÇn tù: ViÖc ®äc / ghi theo thø tù tõ ®Çu tÖp ®Õn cuèi tÖp 
+  Truy nhËp ngÉu nhiªn: Cã thÓ truy nhËp tuÇn tù hoÆc ®äc / ghi theo bÊt kú 

tr×nh tù nµo. 

-

  KiÓu tÖp 

+  TÖp th«ng th−êng: Gåm c¸c tÖp text (d¹ng ASCII) vµ tÖp nhÞ ph©n dïng ®Ó 

l−u tr÷ d÷ liÖu. 

+  Th− môc: Chøa mét tËp c¸c tÖp 
+  TÖp ®Æc biÖt: ®−îc truy nhËp bëi thiÕt bÞ 

-

  C¸c thao t¸c víi tÖp 

+  T¹o tÖp 
+  Xo¸ tÖp 
+  Më tÖp 
+  §ãng tÖp 
+  §äc tÖp 
+  Ghi d÷ liÖu (cã thÓ ghi ®Ì lªn d÷ liÖu cò) 
+  Më réng (ghi d÷ liÖu vµo cuèi tÖp, kh«ng lµm mÊt d÷ liÖu cò) 
+  Di chuyÓn con trá ®Ó ®äc/ghi d÷ liÖu 
+  §äc/ThiÕt lËp thuéc tÝnh tÖp 
+  §æi tªn tÖp 

-

  CÊu tróc th− môc 

+  Th− môc gèc: Dos (C:\), Unix (/) 
+  §−êng dÉn 

background image

HÖ ®iÒu hµnh 

 

trang   56/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Dïng ®Ó chØ ra n¬i l−u tr÷ tÖp 
§−êng dÉn tuyÖt ®èi: chØ ra tÖp  tõ th− môc gèc 

vÝ dô: C:\TP\Bin\Turbo.exe 

§−êng dÉn t−¬ng ®èi: chØ ra tÖp tõ th− môc hiÖn t¹i 

VÝ dô: lÖnh DIR ..\BGI (nÕu ®ang ë trong C:\TP\Bin) 

 

 

b. Trao ®æi d÷ liÖu víi tÖp 

 
 
 
 

HÖ Qu¶n trÞ CSDL

C¸c ph−¬ng ph¸p truy nhËp 

(Access Methods) 

Truy nhËp logic

Truy nhËp vËt lý

PhÐp trao ®æi vµo/ra

ThiÕt bÞ ngo¹i vi

Ng−êi 

sö  

dông 

®iÒu 

hµnh  

§Æc thï 
-Giao diÖn tèt 
-Kh«ng nÐn 

§Æc thï 
-§é nÐn cao 
-Cã tÝnh chÊt 
v¹n n¨ng 
-Tån t¹i c¸c 
macro  

background image

HÖ ®iÒu hµnh 

 

trang   57/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

7. 

Qu¶n lý tÖp trong MSDOS 

a. CÊu tróc ®Üa tõ 

-

  CÊu tróc vËt lý 

 
 
 
 
 
 
 
 

 

+  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 

Track

Sector

Head

background image

HÖ ®iÒu hµnh 

 

trang   58/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  §Þ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 

 

b. phôc vô ®äc/ghi ®Üa 

Ta sö dông ng¾t 13H ®Ó ®äc/ghi ®Üa 

-

  §äc mét Sector: Ta sö dông ng¾t 13h, hµm 02h 

+  Input: 

DL = Sè hiÖu ®Üa (0 = A...; 80H = HD0; 81H = HD1)  

DH = Sè hiÖu ®Çu tõ 

CH = track (cylinder) number (0 

÷ n) 

CL = Sè hiÖu sector (1 

÷ n) 

AL = Sè sector cÇn ®äc 

ES:BX => ®Þa chØ vïng nhí 
Chó ý: Gi¸ trÞ Sector gåm 6 bit vµ Cylinder lµ 10bit:  

15 

14 

13 

12 

11 

10 

9

8

7

6

5

4

0

Cylinder Sector 

 
Thñ tôc m· ho¸ Cylinder vµ Sector 

Function CylSecEncode(Cylinder, Sector : Word) : Word; 

Begin 

CylSecEncode := (Lo(Cylinder) shl 8) 

or (Hi(Cylinder) shl 6) or Sector; 

End; 

+  Output: 

NÕu cã lçi: Carry Flag=CY=1 vµ m· lçi trong AH 

NÕu kh«ng lçi: AH = 0 vµ ES:BX => ®Þa chØ vïng nhí 

 

+--------------------------------------------------------------------------------+ 

|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           | 

background image

HÖ ®iÒu hµnh 

 

trang   59/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

| 04H |  sector ID bad or not found.                                             | 

| 05H |  reset failed                                                            | 

| 08H |  DMA failure                                                             | 

| 09H |  DMA overrun: attempted to write across a 64K-byte boundary.             | 

| 0bH |  bad track flag encountered                                              | 

| 10H |  bad CRC: invalid CRC when data checked.                                 | 

| 11H |  data corrected: recoverable error found/corrected by ECC algorithm      | 

| 20H |  controller failure                                                      | 

| 40H |  bad seek.  requested track not found                                    | 

| 80H |  time out.  drive did not respond                                        | 

|0aaH |  drive not ready                                                         | 

|0bbH |  undefined error                                                         | 

|0ffH |  sense operation failed                                                  | 

+--------------------------------------------------------------------------------+

 

 

-

  B¶ng m· lçi 

 

Gi¸ trÞ 

ý nghÝa 

00 
01 
02 
03 
04 
05 
06 
07 
08 
09 
0A 
10 
11 
20 
40 
80 
AA 
BB 
CC 
E0 
FF 

Thµnh c«ng 
LÖnh kh«ng hîp lÖ 
Kh«ng t×m thÊy dÊu ®Þa chØ trªn ®Üa. 
Muèn ghi lªn ®Üa ®−îc b¶o vÖ chèng ghi (M) 
Kh«ng t×m thÊy sector 
T¸i lËp kh«ng ®−îc (C) 
§Üa mÒm ®· lÊy ra (M) 
B¶ng tham sè bÞ háng (C) 
DMA ch¹y lçi (M) 
DMA ë ngoµi ph¹m vi 46 K 
Cê sector bÞ lçi 
CRC hay ECC lçi 
ECC ®· ®iÒu chØnh d÷ liÖu sai (C) 
Lçi do bé ®iÒu khiÓn ®Üa. 
Lçi kh«ng t×m ®−îc track 
Lçi hÕt thêi gian 
æ ®Üa kh«ng s½n sµng (C) 
Lçi kh«ng x¸c ®Þnh (C) 
Lçi lóc ghi (C) 
Lçi thanh ghi tr¹ng th¸i (C) 
Thao t¸c dß thÊt b¹i 

 (C = chØ dïng cho ®Üa cøng; M = chØ dïng cho ®Üa mÒm) 

 

-

  Thñ tôc ®äc mét sector 

background image

HÖ ®iÒu hµnh 

 

trang   60/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Type SectorType = array[0..511] of byte; 
 

Function CylSecEncode(Cylinder, Sector : Word) : Word; 
Begin 

CylSecEncode := (Lo(Cylinder) shl 8) 

or (Hi(Cylinder) shl 6) or Sector; 

End; 
 

{ NÕu cã lçi tr¶ vÒ false, nÕu kh«ng lçi tr¶ vÒ true } 
function ReadSector(var buf: SectorType; 

         Drive, Cylinder, Head, Sector: Byte) : Boolean; 
var r: registers; 

begin 
 fillchar(buf,sizeof(buf),$11); 

 with r do begin 
  dl := Drive;  dh := Head; 

  cx := CylSecEncode(Cylinder, Sector); 
  al := 1; { so sector } 

  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; 

-

  Ghi mét Sector: Ta sö dông ng¾t 13h, hµm 03h, hµm nµy t−¬ng tù hµm 02h. 

-

  Chó ý: Víi æ mÒm th× ®éng c¬ cÇn cã mét thêi gian khëi ®éng ®Ó ®¹t tèc ®é 

lµm viÖc, nh−ng thêi gian chê ®îi cña hµm ®äc/ghi ®Üa lµ rÊt nhá v× vËy cÇn 
ph¶i thùc hiÖn viÖc ®äc/ghi vµi lÇn tr−íc khi kh¼ng ®Þnh cã lçi vµo/ra. 

-

  Cluster gåm mét nhãm sector liªn tiÕp nhau vÒ mÆt logic vµ ph©n phèi bé nhí 

cho ng−êi sö dông, sè l−îng sector cho mét cluster th−êng lµ bé sè cña hai vµ 
Cluster ®−îc ®¸nh sè tõ 2 trë ®i. 

c. CÊu tróc th«ng tin B¶ng tham sè ®iÒu khiÓn 

B¶ng tham sè ®iÒu khiÓn x¸c ®Þnh toµn bé vïng hÖ thèng: ®èi víi ®Üa mÒm 

th× n»m ë (0, 0, 1) vµ ®èi víi ®Üa cøng th× n»m ë sector ®Çu tiªn cña mçi ®Üa logic 
(partition), vÝ dô ®èi víi ®Üa logic thø nhÊt lµ (0, 1, 1). Tuú theo khu«n d¹ng cña 
b¶ng FAT mµ hÖ thèng dµnh mét sè l−îng sector kh¸c nhau cho Boot Record. 
Boot Record cña FAT 12 vµ FAT 16 chiÕm 1 sector, cßn Boot Record cña FAT 
32 th−êng chiÕm 3 sector. 

-

  CÊu tróc Boot Record cña FAT 12 vµ FAT 16 

+  PhÇn 1: chøa  tham sè cña ®Üa tõ 

background image

HÖ ®iÒu hµnh 

 

trang   61/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  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è 

 

 
 
              Ch−¬ng tr×nh måi
 
 

55AA

 
PhÇn nµy cã dÊu hiÖu lµ ch÷ ký gåm 2 byte 55AA. 

-

  CÊu tróc cô thÓ nh− sau: 

 

No Offset Leng 

ý 

nghÜa 

1 0  3 

JMP 

Tªn hÖ thèng format ®Üa tõ 

Sè byte trªn mét sector 

Sè sector / cluster 

Ghi ®Þa chØ cña FAT thø nhÊt trong ®Üa logic 

6 10  1 

Sè 

l−îng b¶ng FAT 

11 

Sè phÇn tö tèi ®a ë th− môc gèc 

13 

= 0; <> 0 : Ghi sè l−îng sector cña ®Üa tõ nÕu < 32 MB 

15 

Byte Media: F8 nÕu lµ HD, F0: FDD 1.44 

10 

16 

Sè sector dµnh cho mét b¶ng FAT 

11 

18 

Sè sector dµnh cho mét Track 

12 

1A 

Sè ®Çu tõ 

13 

1C 

Ghi ®Þa chØ tuyÖt ®èi cña Boot Sector trong ®Üa vËt lý 

14 

20 

= 0; <> 0 : tæng sè sector cña ®Üa >= 32 MB 

15 

24 

§Þa chØ vËt lý æ ®Üa tõ A: 00H, C: 80H, D: 81H 

16 25  1 Dù 

tr÷ 

17 

26 

DÊu hiÖu 29H 

18 

27 

Ghi sè hiÖu cña ®Üa tõ 

19 2B 11

10

 Tªn 

®Üa 

tõ 

20 

36 

Dù tr÷: FAT16

32 32 32

 (32 lµ dÊu c¸ch) 

21 

3Eh 

448 

§o¹n m· thùc hiÖn 

22 

1Feh 

Ch÷ ký (55h AAh) 

 
 

background image

HÖ ®iÒu hµnh 

 

trang   62/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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 

 

FAT 

512 

Root 

Dir 

 HD

209 

Sec/ 

FAT 

63 

Sec/ 

Track 

64 

Head 

63 hidden sectors 
(®/c Boot Sector) 

20: 41  0C  34 00 

80

00

29  1E

13

DA

13

20

20  20  20  20 

 3411009 

C:

 

ch÷ 

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 

FAT Copies 

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    

 

-

  Ch−¬ng tr×nh ®äc Boot Sector 

+  KÕt qu¶ 

Thong tin ve Boot Sector 
Ten HDH : MSWIN4.1 

So byte / sector : 512 
So sector / cluster : 16 

So phan tu toi da o thu muc goc : 512 
So bang Fat : 2 

So byte / Fat : 0 
So sector / cylinder : 63 

So head : 255 

background image

HÖ ®iÒu hµnh 

 

trang   63/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  M· nguån 

uses crt,dos; 

const hexs: array[0..15] of char = '0123456789ABCDEF'; 

Type SectorType = array[0..511] of byte; 

 

function ReadSector(var buf: SectorType; 

Drive, Cylinder, Head, Sector: Byte) : Boolean; 

begin 

end; 

 
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). 

background image

HÖ ®iÒu hµnh 

 

trang   64/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

d.  Th− môc gèc (Directory) 

-

  Th− môc cã hai lo¹i: 

+  Th− môc gèc (Root): lµ thµnh phÇn thiÕt yÕu ë mäi hÖ ®iÒu hµnh. 
+  Th− môc con (SubDirectory) 

Th− môc bao gåm  c¸c phÇn tö, mçi phÇn tö nÕu ®−îc sö dông sÏ t−¬ng 

øng víi mét tÖp trong th− môc. 

Trong MSDOS th× mçi phÇn tö gåm 32 byte ®−îc chia thµnh 8 tr−êng 

-

  CÊu tróc mét phÇn tö trong th− môc (32 byte) 

 

 

No Offset Leng 

ý 

nghÜa 

Tªn tÖp (nÕu nhá 8 ký tù th× lÊy ký tù <space> ®iÒn vµo) 

2 8  3 

PhÇn 

më 

réng 

Thuéc tÝnh tÖp attribute 

4 C 10

10

 Dù 

tr÷ 

5 16

H

 

Thêi gian (Giê, Phót, Gi©y) t¹o/cËp nhËt cuèi cïng 

18 

Ngµy (N¨m, Th¸ng, Ngµy) t¹o/cËp nhËt cuèi cïng 

7 1A  2 

Starting 

Cluster: 

ghi cluster ®Çu tiªn cña tÖp 

8 1C  4 

KÝch 

th−íc tÖp (tÝnh theo byte) 

 

+------------------------------------------------------------------------------+ 

|                            Directory Entry Layout                            | 

|------------------------------------------------------------------------------| 

|Offset Size Contents                                                          | 

|______ ____ __________________________________________________________________| 

|            +-------------------------------+                                 | 

| +0      8  |'F' 'I' 'L' 'E' 'N' 'A' 'M' 'E'| left-justified, blank-padded    | 

|            +-----------+-------------------+                                 | 

| +8      3  |'E' 'X' 'T'|                     left-justified, blank-padded    | 

|            +---+---+---+                                                     | 

|+0bH     1  |atr|                              file attribute                 | 

|            +------------ - - ----+                                           | 

|+0cH    0aH |      reserved       |                                           | 

|            +-------+---- - - ----+                                           | 

|+16H     2  | time  |         time created or last modified in filetime format| 

|            +-------|                                                         | 

|+18H     2  | date  |         date created or last modified in filetime format| 

|            +----------------+                                                | 

|+1aH     2  |Starting Cluster|   ghi cluster ®Çu tiªn cña tÖp (link into FAT) | 

|            +----------------+                                                | 

|+1cH     4  |   file size   |                  file size in bytes             | 

|            +---------------+                                                 | 

+------------------------------------------------------------------------------+

 

background image

HÖ ®iÒu hµnh 

 

trang   65/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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) 

 

-

  Thuéc tÝnh ngµy/giê 

+  Thêi gian (giê, phót, gi©y) 

background image

HÖ ®iÒu hµnh 

 

trang   66/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

15 

14 

13 

12

11

10

9

8

7

6

5

4

Giê Phót 

Gi©y 

(b−íc 2) 

 

+  Thêi gian (n¨m, th¸ng, ngµy) 

15 

14 

13 

12

11

10

9

8

7

6

5

4

Sè n¨m kÓ tõ n¨m 1980 

Th¸ng 

Ngµy 

 

+------------------------------------------------------------------------------+ 

|                            File Time/Date Format                             | 

|------------------------------------------------------------------------------| 

|                                                                              | 

| 1 1 1 1 1 1                       Load word at DIR_ENTRY+16H into a          | 

|+5-4-3-2-1-0-9-8-7-6-5-4-3-2-1-0+  16-bit register and perform mask           | 

||   hour  |  minute   |  sec/2  |  and shift operations to extract            | 

|+-------------------------------+  components of the file time.               | 

| +-------+ +---------+ +-------+                                              | 

|     |          |          5+---> 2-second increments (0-30 valid) (t & 001fH)| 

|     |          6+--------------> minute (0-59 valid)       ((t & 07e0H) >> 5)| 

|     5+-------------------------> hour (0-23 valid)       ((t & 0f800H) >> 11)| 

|                                                                              | 

| 1 1 1 1 1 1                                                                  | 

|+5-4-3-2-1-0-9-8-7-6-5-4-3-2-1-0+                                             | 

||    year     | month |   day   |  Use word at DIR_ENTRY+18H.  After 16-bit   | 

|+-------------------------------+  masks and shifts, add 1980 (07bcH) to year.| 

| +-----------+ +-----+ +-------+                                              | 

|       |          |        5+---> day (0-31)                       (d & 001fH)| 

|       |          4+------------> month (1-12 valid)        ((d & 01e0H) >> 5)| 

|       7+-----------------------> year (0-127 valid)        ((d & f800H) >> 9)| 

|                                => tõ  1980 ®Õn 2107                          | 

+------------------------------------------------------------------------------+

 

+  VÝ dô: C0 B2 => Time = C0B2 = 

10110 010110 00000 

Giê 10110 = 22 => 10 chiÒu 

Phót 010110 = 22 

Gi©y 00000 = 0 

KÕt qu¶ cho ta thêi gian lÇn söa cuèi cïng (hoÆc t¹o) lµ 10:22 pm  

+  VÝ dô: 97 26 => Date = 2697 = 

0010011 0100 10111

 

N¨m 1980 + 0010011 = 1980 + 19 = 1999 

Th¸ng 0100 = 4  

Ngµy 10111 => ngµy 23 

KÕt qu¶ cho ta ngµy cña lÇn söa cuèi cïng (hoÆc t¹o) lµ  4-23-99 

-

  Bµi tËp vÒ nhµ 

ChuyÓn ®æi gi¸ trÞ thêi gian gåm: ngµy, th¸ng, n¨m, giê, phót, gi©y thµnh 

4 byte cã ®Þnh d¹ng gièng ®Þnh d¹ng trªn vµ ng−îc l¹i. 

-

  VÝ dô: 

§äc th− môc gèc cña ®Üa A: biÕt sè phÇn tö tèi ®a lµ 224, sè sector dµnh 

cho th− môc gèc lµ 14 (224*32/512 = 224/16 = 14 hay cho  al := 14) 

uses crt,dos; 
type 

background image

HÖ ®iÒu hµnh 

 

trang   67/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 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; 

 

Type RootType = array[0..223] of elmt; 

 

Function CylSecEncode(Cylinder, Sector : Word) : Word; 

Begin 

CylSecEncode := (Lo(Cylinder) shl 8) 

or (Hi(Cylinder) shl 6) or Sector; 

End; 

function ReadSector(var buf: RootType; 

Drive, Cylinder, Head, Sector: Byte) : Boolean; 

var r: registers; 

begin 

background image

HÖ ®iÒu hµnh 

 

trang   68/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 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: 

 

A       .TXT        21/ 9/2001         8:46:18        16 

FUZZY   .TXT        19/ 6/2001        16:37:38      2444 

TMP     .VN          6/ 1/2001        17: 5:20        34 

background image

HÖ ®iÒu hµnh 

 

trang   69/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 

e. FAT (File Allocation Table) 

-

  Vai trß cña FAT 

+  Qu¶n lý bé nhí ph©n phèi cho tõng tÖp 
+  Qu¶n lý bé nhí tù do 
+  Qu¶n lý vïng bé nhí chÊt l−îng kÐm (kh«ng cho hÖ thèng ghi th«ng tin 

vµo). 

-

  B¶ng FAT bao gåm c¸c phÇn tö, mçi phÇn tö cã thÓ lµ 12 bit hay 16 bit. C¸c 

phÇn tö tõ phÇn tö thø hai trë ®i, mçi phÇn tö t−¬ng øng víi mét cluster trªn 
®Üa vµ ng−îc l¹i. Tr−êng hîp cã mét sector bÞ kÐm th× hÖ thèng sÏ ®¸nh dÊu 
c¸c phÇn tö cña cluster ®ã lµ FF7 (®èi víi FAT 12) hoÆc lµ FFF7 (®èi víi 
FAT 16). ChØ cÇn cã mét sector cã chÊt l−îng kÐm th× c¶ cluster bÞ ®¸nh dÊu 
lµ cã chÊt l−îng kÐm. 

PhÇn tö 0: Fxx (®èi víi FAT 12) vµ FFxx (®èi víi FAT 16) 
trong ®ã xx lµ 1 byte gäi lµ byte Media cho biÕt kiÓu ®Üa tõ. 

 

Media 

KiÓu ®Üa tõ 

F9 

®Üa mÒm 1.2 M 

F0 

®Üa mÒm 1.4 M 

3 F8 

®Üa 

cøng 

 
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. 

background image

HÖ ®iÒu hµnh 

 

trang   70/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 
VÝ dô: tÖp f1.txt cã gi¸ trÞ Starting Cluster = 6 

0 FF0

1 FFF

2  

3 4 

4 8 

5 FFF

6 9 

7 5 

8 7 

9 3 

 

 

 
Nh− vËy tÖp ®−îc l−u ë c¸c cluster sau: 6->9->3->4->8->7->5. 
Khi hÖ thèng muèn ®äc néi dung tÖp: HÖ thèng b¾t ®Çu ®äc tõ cluster sè 6 

vµ ®äc phÇn tö t−¬ng øng trong b¶ng FAT, néi dung cña phÇn tö nµy chØ cho hÖ 
thèng biÕt ph¶i ®äc cluster sè 9, tiÕp tôc nh− vËy cho ®Õn phÇn tö sè 5. Gi¸ trÞ 
cña phÇn tö sè 5 lµ FFF ®©y lµ dÊu hiÖu kÕt thóc vµ dõng l¹i. 

§Ó t¨ng tèc ®é truy nhËp, ngay lÇn truy nhËp ®Çu tiªn lµm viÖc víi ®Üa tõ, 

hÖ thèng sÏ ®äc lu«n FAT vµ ROOT vµo RAM, nh− vËy hÖ thèng chØ cÇn truy 
nhËp vµo bé nhí ®Ó lÊy th«ng tin, kh«ng cÇn ph¶i truy nhËp l¹i ®Üa tõ do vËy t¨ng 
®−îc tèc ®é vµ gi¶m ®−îc di chuyÓn c¬ khÝ cña ®Çu tõ. 

-

  Truy nhËp b¶ng FAT 16: 

Mçi phÇn tö cña FAT 16 lµ mét word, v× vËy viÖc ®äc/ghi mçi phÇn tö lµ 

kh¸ dÔ dµng. 

 

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>

 

-

  Truy nhËp b¶ng FAT 12: 

Mçi phÇn tö cña FAT 12 lµ mét 1.5 word, v× vËy viÖc ®äc/ghi mçi phÇn tö 

lµ phøc t¹p h¬n. Hai phÇn tö 2n vµ 2n + 1 cña FAT ®−îc l−u tr÷ trong 3 byte. 

background image

HÖ ®iÒu hµnh 

 

trang   71/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  VÝ dô: ghi 2 phÇn tö 

2n    : 123

h

 => 0123 => ®¶o => 2301 

2n + 1: 456

h

 => 4560 => ®¶o => 6045 

ghi vµo ®Üa 

236145 

+  VÝ dô: ®äc 2 phÇn tö 

®äc 3 byte, ta ®−îc 

123456 

2n    : 1234 => ®¶o => 3412 => AND 0FFF => 412 

2n + 1: 3456 => ®¶o => 5634 => AND FFF0 => 563 

+  Gi¶i thuËt ®äc phÇn tö thø i vµo m¶ng 

B: array[0..xxx] of byte

 

 

 
 
 
 
 
 
 
 
 
 

 

Byte1                Byte2                Byte3 

 

  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 

 

p := (i*3) div 2

a := MemW[seg(buf[p]) : ofs(buf[p])];

odd(i)

a := a shr 4 

a := a AND $0FFF 

True False

background image

HÖ ®iÒu hµnh 

 

trang   72/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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; 

 

 if(r.ah <> 0) then begin 

  writeln('Co loi doc dia '); 

  exit; 

 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 } 

background image

HÖ ®iÒu hµnh 

 

trang   73/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

   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. 

background image

HÖ ®iÒu hµnh 

 

trang   74/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 

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) 

 

Ch−¬ng tr×nh nhËn biÕt cÊu tróc

 

 
B¶ng ph©n ch−¬ng 

55AA 

PhÇn nµy cã dÊu hiÖu lµ ch÷ ký gåm 2 byte 55AA. 
§Üa cøng ®−îc chia thµnh c¸c phÇn, mçi phÇn ®−îc sö dông nh− mét ®Üa 

tõ ®éc lËp gäi lµ ®Üa logic. Th«ng tin vÒ c¸c phÇn nµy n»m trong b¶ng ph©n 
ch−¬ng. 

-

  CÊu tróc b¶ng ph©n ch−¬ng: b¶ng ph©n ch−¬ng ®−îc b¾t ®Çu tõ ®Þa chØ 1BE 

gåm 4 phÇn tö mçi phÇn tö 16 byte.  

+------------------------------------------------------------------------------+ 

|Offset Size Contents                                                          | 

|______ ____ __________________________________________________________________| 

|            +---- - - - - - - - - - - - - - - - - - - - - - - - - - ----+     | 

|  +0   1beH | code to load and execute boot sector of active partition  |     | 

|            +---- - - - - - - - + - - - - - - - - - - - - - - - - - ----+     | 

|+1beH   10H |                   |  partition 1 entry  (see below)             | 

|            +---- - - - - - ----|                                             | 

|+1ceH   10H |                   |  partition 2 entry                          | 

|            +---- - - - - - ----|                                             | 

|+1deH   10H |                   |  partition 3 entry                          | 

|            +---- - - - - - ----|                                             | 

|+1eeH   10H |                   |  partition 4 entry                          | 

|            +---- - + - - - ----+                                             | 

|+1feH   2   | 55 aa |              partition table signature (0aa55H)         | 

|            +-------+                                                         | 

|                                                                              | 

+------------------------------------------------------------------------------+ 

Mçi phÇn tö chia thµnh 4 tr−êng, mçi tr−êng 4 byte 

15-12 11-8  7-4 

3-0 

§Þa chØ 

vËt lý ®Çu

§Þa chØ 

vËt lý cuèi

§Þa chØ 

logic ®Çu

Tæng sè 

sector 

+  §Þa chØ vËt lý ®Çu 

3 2 1 0 

Sys

Head

Sec

Cyl

Sys = 00 th× ®©y lµ ®Üa logic chøa d÷ liÖu 
Sys = 80 th× ®©y lµ ®Üa logic chøa hÖ thèng 

background image

HÖ ®iÒu hµnh 

 

trang   75/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 
Head: ®Çu tõ ®Çu tiªn 

2 phÇn tö Sec vµ Cyl ®−îc ph©n phèi nh− sau 

15 14 13 12 11

10

09

08

07

06

05

04

03 02 01

00

Cyl Sec 

Cyl 

Nh− vËy sè bit dµnh cho tr−êng Cyl lµ 10 

vµ dµnh cho sec lµ 6. 

 

VÝ dô: Ta cã 2 byte lµ FF vµ 4D ta ph¶i tÝnh Sec=?, Cyl=? 

KÕt qu¶ cho ta Sec = 63 vµ Cyl = 845 

 

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 = 845

10

 

+  §Þa chØ vËt lý cuèi 

3 2 1 

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                | 

background image

HÖ ®iÒu hµnh 

 

trang   76/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

|              |                    |                          | 
+--------------------------------------------------------------+

 

-

  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; 

 

Type SectorType = array[0..511] of byte; 

 

function ReadSector(var buf: SectorType; 

        Drive, Cylinder, Head, Sector: Byte) : Boolean; 

{ ®· cho chÐp råi } 

{ phÇn ch−¬ng tr×nh chÝnh } 

var 

 buf: SectorType; 

 i,j: word; 

 kt, kti: longint; 

Begin 

 ReadSector(buf,$80,0,0,1); 

 kt := 0; 

 for i := 0 to 3 do begin 

  j := $1CA + i*16; 

{ 1CA la vi tri kich thuoc phan tu dau tien } 

  kti := MemL[seg(buf[j]):ofs(buf[j])]; 
  kt := kt + kti; 

 end; 
 kt := kt div 2048; { MB, 1 sec = 512 byte } 

 writeln('Kich thuoc dia tu la ', kt, ' MB'); 
 readkey; 

end. 

 
 

 

background image

HÖ ®iÒu hµnh 

 

trang   77/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

background image

HÖ ®iÒu hµnh 

 

trang   78/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Ch−¬ng 4. 

Qu¶n lý tiÕn tr×nh 

1. 

§Þnh nghÜa tiÕn tr×nh 

TÊt c¶ c¸c m¸y tÝnh hiÖn ®¹i ®Òu cã thÓ thùc hiÖn nhiÒu viÖc cïng mét lóc. 

Trong khi thùc hiÖn ch−¬ng tr×nh cña ng−êi sö dông, m¸y tÝnh cã thÓ ®äc d÷ liÖu 
tõ ®Üa vµ ®−a ra mµn h×nh hoÆc m¸y in. Trong m«i tr−êng ®a ch−¬ng tr×nh 
(multiprogramming system), mét CPU cã thÓ chuyÓn tõ ch−¬ng tr×nh nµy sang 
ch−¬ng tr×nh kh¸c, thùc hiÖn mçi ch−¬ng tr×nh trong kho¶ng 1% hoÆc 1/10 mili 
gi©y. NÕu nãi chÝnh x¸c, th× t¹i mét thêi ®iÓm, CPU chØ thùc hiÖn ®−îc mét 
ch−¬ng tr×nh. Nh−ng nÕu xÐt trong kho¶ng thêi gian phÇn tr¨m gi©y th× CPU cã 
thÓ thùc hiÖn nhiÒu c«ng viÖc. 

-

  §Þnh nghÜa 

TiÕn tr×nh lµ mét d·y c¸c tr¹ng th¸i cña hÖ thèng tÝnh to¸n vµ viÖc chuyÓn 

tõ tr¹ng th¸i nµy sang tr¹ng th¸i kh¸c ®−îc thùc hiÖn theo 1 ch−¬ng tr×nh nµo ®ã. 

 

s

0

  s

1

  s

2

  s

3

  s

4

  s

5

  s

6

  s

7

 

s

n-1

 

s

n

 

s

n+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ô: 

 

 
 
 
 
 

 

  
 
 
 
 

Khëi t¹o 

S½n sµng

®−îc chÊp nhËn

Thùc hiÖn 

ng¾t

KÕt thóc

tho¸t 

®iÒu phèi

Chê ®îi

chê ®îi mét sù kiÖn hoÆc 

mét tÝn hiÖu vµo/ra 

kÕt thóc mét sù kiÖn hoÆc 

mét tÝn hiÖu vµo/ra 

background image

HÖ ®iÒu hµnh 

 

trang   79/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  Khëi t¹o: TiÕn tr×nh ®ang ®−îc t¹o ra. 
+  S½n s»ng: TiÕn tr×nh chê ®Ó kÕt nèi vµo processor. 
+  Thùc hiÖn: C¸c lÖnh ®ang ®−îc thùc hiÖn. 
+  Chê ®îi: TiÕn tr×nh chê mét sù kiÖn vµo/ra hoÆc chê nhËn mét tÝn hiÖu nµo 

®ã. 

+  KÕt thóc: TiÕn tr×nh kÕt thóc thùc hiÖn. 

2. 

Khèi ®iÒu khiÓn tiÕn tr×nh (Process Control Bloc - PCB) 

-

  Mçi tiÕn tr×nh ®−îc biÓu diÔn trong hÖ ®iÒu hµnh bëi mét khèi ®iÒu khiÓn tiÕn 

tr×nh gåm cã 
+  Tr¹ng th¸i tiÕn tr×nh. 
+  LÖnh m¸y: m¸y tÝnh chØ ra ®Þa chØ lÖnh m¸y ®Çu tiªn trong tiÕn tr×nh. 
+  Bé thanh ghi. 
+  Th«ng tin vÒ lÞch trong bé ®iÒu khiÓu CPU: bao gåm thø tù −u tiªn cña 

tiÕn tr×nh, c¸c tham sè ®Ó lËp lÞch. 

+  Th«ng tin vÒ bé nhí. 
+  Th«ng tin tÝnh to¸n: gåm thêi gian chiÕm gi÷ processor, thêi gian thùc tÕ, 

giíi h¹n vÒ thêi gian,  sè l−îng c«ng viÖc. 

+  Th«ng tin tr¹ng th¸i c¸c cæng vµo/ra. 

3. 

C¸ch thùc tiÕn tr×nh 

a. Thùc hiÖn tuÇn tù 

Khi hÖ thèng kÕt thóc mét tiÕn tr×nh th× hÖ thèng míi chuyÓn sang tiÕn 

tr×nh kh¸c. Thùc hiÖn tuÇn tù kh«ng ph¶i lµ ®èi t−îng nghiªn cøu cña chóng ta. 
b. Thùc hiÖn song song 

Hai tiÕn tr×nh ®−îc gäi lµ song song nÕu thêi ®iÓm b¾t ®Çu cña mét tiÕn 

tr×nh n»m gi÷a thêi ®iÓm b¾t ®Çu vµ kÕt thóc cña tiÕn tr×nh kia. 

 
 
 
 

-

  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. 

TiÕn tr×nh 1 

TiÕn tr×nh 2 

B¾t ®Çu

KÕt thóc 

B¾t ®Çu

background image

HÖ ®iÒu hµnh 

 

trang   80/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

+  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. 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

A

B

C

TiÕn tr×nh

Thêi gian

A

B

HÖ ®iÒu hµnh

CÊt gi÷ tr¹ng th¸i trong PCB

A

Kh«i phôc tr¹ng th¸i tõ PCB

B

CÊt gi÷ tr¹ng th¸i trong PCB

B

Kh«i phôc tr¹ng th¸i tõ PCB

A

Ng¾t hoÆc lêi gäi hÖ thèng

Ng¾t hoÆc lêi gäi hÖ thèng

Ho¹t ®éng 

NghØ 

Ho¹t ®éng 

NghØ

NghØ

Sù thay ®æi thùc hiÖn tiÕn tr×nh

background image

HÖ ®iÒu hµnh 

 

trang   81/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

4. 

Ph©n lo¹i tiÕn tr×nh song song 

a. §éc lËp 

Hai tiÕn tr×nh song song ®−îc thùc hiÖn riªng rÏ kh«ng cã quan hÖ víi 

nhau. 

 
 
 
 
 
 
 
 
 
 
 
 
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? 

 
 
 
 
 
 
 
 
 
 
 
 
C¸c ph−¬ng ph¸p tæ chøc l−u tr÷ c¸c th«ng b¸o: 

A1 

A2 

An 

B1

B2

Bm

 

A1 

A2 

An 

B1

B2

Bm

 

Information

Information

background image

HÖ ®iÒu hµnh 

 

trang   82/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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ã. 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Khi tiÕn tr×nh con ®· ho¹t ®éng th× hai tiÕn tr×nh nµy kh«ng biÕt g× vÒ nhau 

A1 

A2 

An 

B1

B2

Bm

 

background image

HÖ ®iÒu hµnh 

 

trang   83/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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. 

 
 
 
 
 
 
 
 
 
 
 
 
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 

A1 

A2 

An 

B1

B2

Bm

 

Tµi 

 

Nguyªn 

background image

HÖ ®iÒu hµnh 

 

trang   84/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Gi¶ sö cÇn thùc hiÖn mét tËp c¸c khèi lÖnh song song s

1

, s

2

,   , s

n

 

 
 
 
 
 
 
 
 
 
 
 
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). 

S

1

 

S

2

S

n

 

background image

HÖ ®iÒu hµnh 

 

trang   85/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Nh− vËy biÕn OUT = 4 vµ IN = 7 
 
 
 
 
 
 
 
 
 
 

+  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é IN

A

, nh− vËy IN

A

 = 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é IN

B

, nh− vËy IN

B

 = 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 = IN

B

 + 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 IN

A

=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 = IN

A

 + 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 

Abc.txt

Prog.doc

Prog.pas

4

5

6

7

OUT = 4

IN = 7

TiÕn tr×nh  A 

TiÕn tr×nh  B 

background image

HÖ ®iÒu hµnh 

 

trang   86/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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; 

background image

HÖ ®iÒu hµnh 

 

trang   87/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 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; 

background image

HÖ ®iÒu hµnh 

 

trang   88/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 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; 

background image

HÖ ®iÒu hµnh 

 

trang   89/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 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). 

background image

HÖ ®iÒu hµnh 

 

trang   90/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

8. 

Ph−¬ng ph¸p KiÓm tra vµ X¸c lËp (Test and Set) 

-

  Trong hÖ lÖnh cña m¸y tÝnh tån t¹i lÖnh cho thùc hiÖn nhiÒu c«ng viÖc liªn 

tôc. C¸c c«ng viÖc nµy t¹o thµnh mét hÖ lÖnh nguyªn tè, kh«ng thÓ chØ thùc 
hiÖn mét c«ng viÖc. Thñ tôc Test_And_Set cã thÓ ®−îc ®Þnh nghÜa nh− sau: 

Procedure TS(var local: integer); 
Begin 

local:=global; 
global:=1; 

End; 

+  Chó ý: hai lÖnh trªn ph¶i ®−îc thùc hiÖn liªn tôc kh«ng bÞ chia rÏ. 
+  Mçi tiÕn tr×nh sÏ sö dông hai biÕn lµ biÕn local cña m×nh vµ biÕn global 

cña toµn ch−¬ng tr×nh. 

-

  S¬ ®å ®iÒu ®é 

Var 

 

lc1, lc2: integer; 

 global: 

integer; 

 

Procedure TS(var local: integer); 

Begin 

 local:=global; 

 global:=1; 

End; 

 

 

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. 

background image

HÖ ®iÒu hµnh 

 

trang   91/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

Global Lc1  Lc2 

0 1   
1 0   

... 

1 (chê ®îi) 

0    
1  0 

 1 

(chê 

®îi)  

... ... ... 

 

-

  ¦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 

background image

HÖ ®iÒu hµnh 

 

trang   92/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

®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. 

background image

HÖ ®iÒu hµnh 

 

trang   93/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

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. 

 

background image

HÖ ®iÒu hµnh 

 

trang   94/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

-

  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. 

 

 

[5]   

Ph¹m V¨n Êt. LËp tr×nh C c¬ së vµ n©ng cao, 1997. 

[6]   

Lª §øc Trung, Lª §¨ng H−ng, NguyÔn Thanh Thuû. Ng«n ng÷ LËp 

tr×nh C, 1996. 

[7]   

Lª §¨ng H−ng, T¹ TuÊn Anh. LËp tr×nh h−íng ®èi t−îng víi C++, 

Khoa CNTT 1999. 

[8]   

Bruce Eckel. Thinhking in C++, 1999. 

 

 

 

background image

HÖ ®iÒu hµnh 

 

trang   95/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

 

Ch−¬ng 1.

 C¸c kh¸i niÖm c¬ b¶n.......................................................... 2

 

1. CÊu tróc ph©n líp vµ sù ph¸t triÓn cña hÖ thèng tÝnh to¸n.............. 2

 

2. Tµi nguyªn cña hÖ thèng tÝnh to¸n.................................................. 5

 

3. §Þnh nghÜa H§H............................................................................. 7

 

4. Ph©n lo¹i hÖ ®iÒu hµnh .................................................................... 8

 

5. C¸c tÝnh chÊt c¬ b¶n cña hÖ ®iÒu hµnh............................................ 9

 

6. Nguyªn lý x©y dùng ch−¬ng tr×nh H§H....................................... 10

 

7. Thµnh phÇn cña H§H vµ kiÕn tróc H§H...................................... 13

 

8. C¸c h×nh th¸i giao tiÕp .................................................................. 14

 

9. Giíi thiÖu vÒ MSDOS.................................................................... 15

 

Ch−¬ng 2.

 HÖ thèng xö lý ng¾t trong IBM PC ................................... 17

 

1. Kh¸i niÖm vÒ ng¾t vµ xö lý ng¾t trong IBM PC............................ 17

 

2. Ph©n lo¹i ng¾t................................................................................ 17

 

3. Quy tr×nh xö lý ng¾t ...................................................................... 18

 

4. B¶ng vector ng¾t............................................................................ 19

 

5. Gäi ng¾t trong Assembler ............................................................. 20

 

6. Gäi ng¾t trong Pascal .................................................................... 20

 

7. Bé thanh ghi cña 8088 .................................................................. 21

 

8. Thay ®æi ng¾t trong hÖ thèng ........................................................ 23

 

9. Mét sè hµm vµ thñ tôc th−êng dïng trong lËp tr×nh hÖ thèng ...... 24

 

Ch−¬ng 3.

 Qu¶n lý thiÕt bÞ ngo¹i vi vµ tÖp ......................................... 32

 

1. Nguyªn lý ph©n cÊp trong tæ chøc vµ qu¶n lý thiÕt bÞ ngo¹i vi .... 32

 

2. Phßng §Öm (Buffer)...................................................................... 34

 

3. SPOOL- Simultaneous Peripheral Operation On-Line ................. 38

 

4. Qu¶n lý mµn h×nh.......................................................................... 39

 

5. Qu¶n lý bµn phÝm.......................................................................... 46

 

6. Qu¶n lý tÖp .................................................................................... 54

 

7. Qu¶n lý tÖp trong MSDOS ............................................................ 57

 

Ch−¬ng 4.

 Qu¶n lý tiÕn tr×nh .............................................................. 78

 

1. §Þnh nghÜa tiÕn tr×nh ..................................................................... 78

 

2. Khèi ®iÒu khiÓn tiÕn tr×nh (Process Control Bloc - PCB) ............. 79

 

3. C¸ch thùc tiÕn tr×nh....................................................................... 79

 

4. Ph©n lo¹i tiÕn tr×nh song song....................................................... 81

 

5. M« t¶ tiÕn tr×nh song song ............................................................ 83

 

6. Tµi nguyªn g¨ng vµ ®o¹n g¨ng ..................................................... 84

 

background image

HÖ ®iÒu hµnh 

 

trang   96/96 

Lª TiÕn Dòng 

 

BM C«ng nghÖ phÇn mÒm 

 

7. Ph−¬ng ph¸p kho¸ trong ............................................................... 86

 

8. LT: 6 TiÕt, TH: .............................................................................. 94