Giáo trình Nguyên lý hệ điều hành | Trường Đại học Khoa học, Đại học Thái Nguyên

Giáo trình Nguyên lý hệ điều hành | Trường Đại học Khoa học, Đại học Thái Nguyên. Tài liệu được biên soạn dưới dạng file PDF gồm 190 trang, giúp bạn tham khảo, ôn tập và đạt kết quả cao trong kì thi sắp tới. Mời bạn đọc đón xem!

Thông tin:
190 trang 7 tháng trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Giáo trình Nguyên lý hệ điều hành | Trường Đại học Khoa học, Đại học Thái Nguyên

Giáo trình Nguyên lý hệ điều hành | Trường Đại học Khoa học, Đại học Thái Nguyên. Tài liệu được biên soạn dưới dạng file PDF gồm 190 trang, giúp bạn tham khảo, ôn tập và đạt kết quả cao trong kì thi sắp tới. Mời bạn đọc đón xem!

77 39 lượt tải Tải xuống
lOMoARcPSD|41967345
NÔNG MINH NGỌC (Chủ biên), NGUYỄN VĂN HUY
GIÁO TRÌNH
NGUYÊN LÝ H ĐIỀU HÀNH
NHÀ XUẤT BẢN ĐẠI HỌC THÁI NGUYÊN
NĂM 2016
lOMoARcPSD|41967345
2
01 - 67
MÃ SỐ:
ĐHTN - 2016
lOMoARcPSD|41967345
3
MC LC
Chương 1. TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ............................................
5
1.1. Khái nim v h iều hành ...................................................................... 5
1.2. Phân loi h iều hành ............................................................................ 7
1.3. Cu trúc ca h iều hành ..................................................................... 11
1.4. Lch s phát trin các h iều hành ....................................................... 14
Chương 2. CÁC NH XỬ LÝ ĐỒNG NH .................................... 16
2.1. Nhu cu x lý ồng hành ...................................................................... 16
2.2. Khái nim tiến trình (Process) và mô hình a tiến trình
(Multiprocess) .............................................................................................. 17
2.3. Khái nim tiểu trình (Thread) và mô hình a tiểu trình ........................ 18
2.4. Tóm tt .................................................................................................. 21
Chương 3. QUẢN TIẾN TRÌNH ............................................................. 23
3.1. T chc qun lý tiến trình ..................................................................... 23
3.2. Điều phi tiến trình ............................................................................... 30
3.3. Tóm tt .................................................................................................. 45
Chương 4. LIÊN LẠC GIỮA CÁC TIẾN TRÌNH & VẤN ĐỀ ĐỒNG BỘ
HOÁ ..................................................................................................................
49
4.1. Liên lc gia các tiến trình .................................................................... 49
4.2. Các cơ chế thông tin liên lc ................................................................. 50
4.3. Nhu cầu ồng b hóa (synchronisation) ............................................... 57
4.4. Tóm tt .................................................................................................. 60
Chương 5. CÁC GIẢI PHÁP ĐỒNG BỘ HOÁ ........................................... 63
5.1. Gii pháp Busy waiting” ..................................................................... 64
5.2. Các gii pháp “SLEEP and WAKEUP” ............................................... 68
5.3. Vấn ề ng b hoá .............................................................................. 76
5.4. Tc nghn (Deadlock) ........................................................................... 83
lOMoARcPSD|41967345
4
5.5. Tóm tt .................................................................................................. 93
Chương 6. QUẢN BỘ NHỚ ...................................................................
104
6.1. Bi cnh .............................................................................................. 105
6.2. Không gian ịa ch và không gian vt lý ............................................ 106
6.3. Cp phát liên tc ................................................................................. 106
6.4. Cp phát không liên tc ...................................................................... 110
6.5. Tóm tt ................................................................................................ 124
Chương 7. BỘ NHỚ ẢO ............................................................................... 128
7.1. Gii thiu ............................................................................................ 128
7.2. Thay thế trang ..................................................................................... 132
7.3. Cp phát khung trang .......................................................................... 141
7.4. Tóm tt ................................................................................................ 147
Chương 8. HỆ THỐNG QUẢN TẬP TIN ............................................ 153
8.1. Các khái niệm cơ bản .......................................................................... 153
8.2. Mô hình t chc và qun lý các tp tin ............................................... 154
Chương 9. CÁC PHƯƠNG PHÁP CÀI ĐẶT HỆ THỐNG QUẢN LÝ TẬP
TIN ..................................................................................................................
165
9.1. Bng quản lý thư mục, tp tin ............................................................. 165
9.2. Bng phân phi vùng nh ................................................................... 167
9.3. Tp tin chia s ..................................................................................... 169
9.4. Quản lý ĩa .......................................................................................... 171
9.5. Độ an toàn ca h thng tp tin ........................................................... 172
Chương 10. GIỚI THIỆU MỘT SỐ HỆ THỐNG TẬP TIN .................... 175
10.1. MS-DOS ............................................................................................ 175
10.2. Windows95 ....................................................................................... 179
10.3. WINDOWNS NT .............................................................................. 185
10.4. UNIX ................................................................................................. 187
lOMoARcPSD|41967345
5
Chương 1 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH
Chương I cung cp mt cái nhìn tng quát v những nguyên lý cơ bản ca
h iều hành. Bắt ầu t vic xem xét mc tiêu các chức năng của h iều này,
sau ó ến vic kho sát các dng khác nhau cũng như xem xét quá trình phát trin
qua từng giai oạn ca chúng. Các phần này ược trình bày trong các ni dung sau:
* Khái nim v h iều hành
* Phân loi h iều hành
* Cu trúc ca h iều hành
* Lch s phát trin ca h iều hành
Chương I giúp ta hiểu ược h iều hành gì? cu trúc ra sao? h iều
hành ược phân loi theo nhng tiêu chun nào? quá trình phát trin ca h iều
hành ph thuc vào nhng yếu t nào?. Chương I òi hỏi nhng kiến thc bản
v kiến trúc máy tính.
1.1. Khái niệm về hệ iều hành
Hệ iều hành mt chương trình hay mt hệ chương trình hoạt ng giữa
người s dng (user) và phn cng ca máy tính. Mc tiêu ca h iều hành
cung cp môi trường ể người s dng có th thi hành các chương trình giúp cho
máy tính d s dụng hơn, thuận lợi hơn và hiệu qu hơn.
H iều hành mt phn quan trng ca hu hết các h thng y tính.
Mt h thống y tính thường ược chia làm bn phn chính: Phần cứng, Hệ iều
hành, các Chương trình ứng dụng và Người sử dụng.
Phần cứng bao gm CPU, b nh, các thiết b nhp xuất, âynhững tài
nguyên ca y tính. Chương trình ứng dụng như các chương trình dịch, h
thống cơ sở d liệu, các trò chơi, các chương trình thương mại. c chương
trình này s dng tài nguyên của máy tính gii quyết các yêu cu của người s
lOMoARcPSD|41967345
6
dng. Hệ iều hành iều khin và phi hp vic s dng phn cng cho nhng ng
dng khác nhau ca nhiều người s dng khác nhau. H iều hành cung cp một
môi trường mà các chương trình có thể làm vic hu hiu trên ó.
Hình 1.1. Mô hình trừu tượng ca h thng máy tính
H iều hành ược coi b phân phi tài nguyên ca máy tính bao gm: thi
gian s dng CPU, vùng b nhớ, vùng lưu trữ tp tin, thiết b nhp xut v.v…
do các chương trình yêu cầu nhm gii quyết nhng vấn ề do người dùng ặt ra.
H iều hành cũng hoạt ộng như một b qun các tài nguyên phân phối
chúng cho các chương trình và người s dng khi cn thiết. Do có rt nhiu yêu
cu, h iều hành phi gii quyết vấn tranh chp và phi quyết ịnh cấp phát tài
nguyên cho nhng u cu theo th t nào hoạt ng ca máy tính hiu qu
nht. Mt h iều hành cũng thể ược coi như một chương trình kim soát
vic s dụng máy tính, ặc bit là các thiết b nhp xut.
Tuy nhiên, nhìn chung chưa có ịnh nghĩa nào là hoàn hảo v h iều hành.
H iều hành tn tại gii quyết các vấn ề s dng h thng máy tính. Mc tiêu
cơ bản ca nó là giúp cho việc thi hành các chương trình dễ dàng hơn. Mục tiêu
th hai là h tr cho các thao tác trên h thng máy tính hiu qu hơn. Mục tiêu
này c bit quan trng trong nhng h thng nhiều người dùng và trong nhng
h thng ln (phn cng + quy s dng). Tuy nhiên hai mục tiêu y cũng
lOMoARcPSD|41967345
7
phần tương phản vì vy lý thuyết v h iều hành tp trung vào vic tối ưu hóa
việc s dng tài nguyên ca máy tính.
1.2. Phân loại hệ iều hành
1.2.1. Hệ thống xử lý theo
* Bộ giám sát thường trực:
Khi mt công vic chm dt, h thng s thc hin công vic kế tiếp
không cn s can thip của người lập trình, do ó thời gian thc hin s mau hơn.
Một chương trình, còn gọi b giám sát thường trực ược thiết kế giám sát vic
thc hin dãy các công vic mt cách t ộng, chương trình y luôn luôn thường
trú trong b nh chính.
Hệ iều hành theo thc hin các công vic lần lượt theo nhng ch th ịnh
trước.
* CPU và thao tác nhập xuất:
CPU thường hay nhàn ri do tốc làm vic ca các thiết b nhp xut
(thường là thiết b cơ) chậm hơn rất nhiu ln so vi các thiết b iện t. Cho
mt CPU chm nhất, cũng nhanh hơn rất nhiu ln so vi thiết b nhp xuất.
Do ó phải các phương pháp ng ba vic hoạt ộng ca CPU và thao tác
nhp xut.
* Xử lý off_line:
X lý off_line thay CPU phải c trc tiếp t thiết b nhp xut ra
thiết b xut, h thng dùng mt bộ lưu trữ trung gian. CPU ch thao thác vi b
phn này. Việc ọc hay xuất ều ến và t b lưu trữ trung gian.
* Spooling:
Spool (simultaneous peripheral operation on-line) là ồng b hóa các thao
tác bên ngoài on-line. chế này cho phép x ca CPU là on-line, s dng ĩa
lưu các dữ liu nhập cũng như xuất.
lOMoARcPSD|41967345
8
1.2.2. Hệ thống xử lý theo lô a chương
Khi nhiu công vic cùng truy xut lên thiết b, vấn lp lch cho các
công vic là cn thiết. Khía cnh quan trng nht trong vic lp lch là kh năng
a chương. Đa chương (multiprogram) gia tăng khai thác CPU bằng cách t chc
các công vic sao cho CPU luôn luôn phi trong tình trng làm vic.
Ý tưởng như sau: h iều hành lưu giữ mt phn ca các công vic nơi
lưu trữ trong b nh. CPU s lần lượt thc hin các phn công vic này. Khi ang
thực hin, nếu yêu cu truy xut thiết b thì CPU không ngh thc hin
tiếp công vic th hai…
Vi h a chương trình, hệ iều hành ra quyết ịnh cho người s dng vì vy,
hệ iều hành a nhiệm rt tinh vi. H phi x lý các vấn lp lch cho công vic,
lp lch cho b nh và cho c CPU.
1.2.3. Hệ thống chia sẻ thời gian
H thng chia s thi gian là mt m rng logic ca h a chương. Hệ thống
này còn ược gi hệ thống a nhiệm (multitasking). Nhiu công vic cùng ược
thc hiện thông qua chế chuyển i ca CPU như hệ a chương nhưng thời gian
mi ln chuyển ổi din ra rt nhanh.
H thng chia s ược phát trin ể cung cp vic s dng bên trong ca mt
máy nh gtr hơn. Hệ iều hành chia sẻ thi gian dùng lp lch CPU a
chương cung cp cho mỗi người s dng mt phn nh trong máy tính chia s.
Một chương trình khi thi hành ược gi mt tiến trình. Trong quá trình thi hành
ca mt tiến trình, nó phi thc hin các thao c nhp xut và trong khong thời
gian ó CPU sẽ thi hành mt tiến trình khác. H iều hành chia s cho phép nhiều
người s dng chia s máy tính một cách ng b do thi gian chuyển ổi nhanh
nên h có cm giác là các tiến trình ang ược thi hành cùng lúc.
H iều hành chia s phc tạp hơn hệ iều hành a chương. phải các
chức năng: qun tr và bo v b nh, s dng b nh o. cũng cung cp h
thng tp tin truy xut on-line…
H iều hành chia s là kiu ca các h iều hành hiện ại ngày nay.
lOMoARcPSD|41967345
9
1.2.4. Hệ thống song song
Ngoài các h thng ch mt b x còn các h thng nhiu b
x lý cùng chia s h thng ường truyn d liệu, ng h, b nh các thiết b
ngoi vi. Các b x lý này liên lc bên trong vi nhau
nhiu nguyên nhân xây dng dng h thng này. Vi s gia tăng số
lượng b x lý, công việc ược thc hiện nhanh chóng hơn, Nhưng không phải
theo úng tỉ l thời gian, nghĩa n bộ x lý không nghĩa sẽ thc hin
nhanh hơn n lần.
H thng vi máy nhiu b x lý s tối ưu hơn hệ thng có nhiu máy có
mt b x các b x chia s các thiết b ngoi vi, h thống lưu trữ,
ngun… và rất thun tin cho nhiều chương trình cùng làm việc trên cùng mt
tp hp d liu.
Mt lý do nữa tin cy. Các chức năng ược xtrên nhiu b x
s hng hóc ca mt b x lý s không ảnh hưởng ến toàn b h thng.
Hệ thống a xử thông thường s dng cách a xử ối xứng, trong cách
này mi b x lý chy vi mt bn sao ca h iều hành, nhng bn sao này liên
lc vi nhau khi cn thiết. Mt s h thng s dụng a xử lý bất ối xứng, trong ó
mỗi b x lý ược giao mt công vic riêng bit. Mt b x lý chính kim soát
toàn b h thng, các b x lý khác thc hin theo lnh ca b x chính hoc
theo nhng ch th ã ược ịnh nghĩa trước. hình này theo dng quan h ch t.
B x lý chính s lp lch cho các b x lý khác.
Mt ví d v h thng x i xng là version Encore ca UNIX cho máy
tính Multimax. H thng y hàng b x lý. Ưu iểm ca nhiu tiến
trình có th thc hin cùng lúc. Mt h thống a xử lý cho phép nhiu công việc
và tài nguyên ược chia s t ng trong nhng b x lý khác nhau.
H thống a x không ng b thường xut hin trong nhng h thng lớn,
trong ó hầu hết thi gian hoạt ộng ều dành cho x lý nhp xut.
lOMoARcPSD|41967345
10
1.2.5. Hệ thống phân tán
H thng này cũng tương tự như hệ thng chia s thời gian nhưng các bộ
x không chia s b nh ng hồ, thay vào ó mỗi b x có b nh cc b
riêng. Các b x lý thông tin với nhau thông qua các ường truyn thông như
những bus tốc ộ cao hay ường dây iện thoi.
Các b x trong h phân tán thường khác nhau v kích thước chc
năng. thể bao gm máy vi tính, trm làm vic, máy mini, nhng h
thng y ln. c b x lý thường ược tham kho vi nhiu tên khác nhau như
site, node, computer v.v... tùy thuc vào trng thái làm vic ca chúng.
Các nguyên nhân phi xây dng h thng phân tán là:
* Chia sẻ tài nguyên: Một người s dng A th s dng y in laser
của người s dụng B người s dng B th truy xut nhng tp tin ca A.
Tng quát, chia s tài nguyên trong h thng phân tán cung cp một chế
chia s tp tin v trí xa, x lý thông tin trong một cơ sở d liu phân tán, in n
ti mt v trí xa, s dng nhng thiết b xa ể thc hin các thao tác.
* Tăng tốc ộ tính toán: Mt thao tác tính toán ược chia làm nhiu phn nh
cùng thc hin mt lúc. H thng phân tán cho phép phân chia vic tính toán
trên nhiu v trí khác nhau ể tính toán song song.
* An toàn: Nếu mt v trí trong h thng phân tán b hng, các v trí khác
vn tiếp tc làm vic.
* Thông tin liên lạc với nhau : nhiu lúc, chương trình cần chuyển i
d liu t v trí này sang v trí khác. Ví d trong h thống Windows, thường có
s chia s và chuyn d liu gia các ca s. Khi các v trí ược ni kết vi nhau
trong mt h thng mng, việc trao i d liu din ra rt dễ. Người s dng
th chuyn tp tin hay các E_mail cho nhau t cùng v trí hay nhng v trí khác.
1.2.6. Hệ thống xử lý thời gian thực
Hệ thống xử thời gian thực ược s dng khi những òi hi kht khe
v thi gian trên các thao tác ca b x lý hoc dòng d liệu, thường ược
lOMoARcPSD|41967345
11
dùng iều khin các thiết b trong các ng dng tn hiến (dedicated). y tính
phân tích d liu và có th chỉnh các iều khin gii quyết cho d liu nhp.
Mt h iều hành x lý thi gian thc phải ược ịnh nghĩa tốt, thi gian x
nhanh. H thng phi cho kết qu chính xác trong khong thi gian b thúc ép
nhanh nht. Có hai h thng x thi gian thc là h thng thi gian thc cng
và h thng thi gian thc mm.
H thng thi gian thc cng là công việc ược hoàn tất úng lúc. Lúc ó dữ
liệu thường ược lưu trong bộ nh ngn hn hay trong ROM. Vic x lý theo thi
gian thc s xung ột vi tt c h thng lit kê trên.
Dng th hai h thng thi gian thc mm, mi công vic một ưu
tiên riêng sẽ ược thi hành theo ưu tiên ó. một s lĩnh vực áp dng hu
hiệu phương pháp này là multimedia hay thực ti o.
1.3. Cấu trúc của hệ iều hành
1.3.1. Các thành phần của hệ thống
1.3.1.1. Quản lý tiến trình
Một chương trình không thực hiện ược c nếu như không ược CPU
thi hành. Mt tiến trình một chương trình ang ược thi hành, nhưng ý nghĩa của
còn rộng hơn. Một công vic theo mt tiến trình. Mt chương trình người
dùng chia s thi gian là mt tiến trình, mt công vic ca h thống như soopling
xuất ra máy in cũng là một tiến trình.
Mt tiến trình phi s dụng tài nguyên như thời gian s dng CPU, b nh,
tp tin, các thiết b nhp xuất hoàn tt công vic ca nó. Các tài nguyên này
ược cung cp khi tiến trình ược to hay trong quá trình thi hành. Khi tiến trình
ược to, nó s dng rt nhiu tài nguyên vt lun lý cũng như một s khi
to d liu nhp. Ví d, kho sát tiến trình hin th trng thái ca tp tin lên màn
hình. Đầu vào ca tiến trình là tên tp tin, tiến trình s thc hin nhng ch th
thích hp, thc hin li gi h thống nhận ược nhng thông tin mong mun và
hin thlên màn hình. Khi tiến trình kết thúc, h iều hành s tái to li các tài
nguyên có th ược dùng li.
lOMoARcPSD| 41967345
12
Mt tiến trình hoạt ng (active) hoàn toàn - ngược li vi mt tp tin
trên ĩa là thụ ng (passive)-vi mt b ếm chương trình cho biết lnh kế tiếp ược
thi hành. Việc thi hành ược thc hiện theo chế tun t, CPU s thi hành t
lệnh ầu ến lnh cui.
Mt tiến trình ược coi một ơn vị làm vic ca h thng. Mt h thng
có th nhiu tiến trình cùng lúc, trong ó một s tiến trình ca h iều hành,
mt s tiến trình là của người s dng các tiến trình này có th din ra ồng thi.
Vai trò của hệ iều hành trong việc quản lý tiến trình là:
* To và hy các tiến trình của người s dng và ca h thng.
* Ngưng và thực hin li mt tiến trình.
* Cung cấp cơ chế ng b tiến trình.
* Cung cp cách thông tin gia các tiến trình.
* Cung cấp cơ chế kim soát deadlock (khái nim này s ược trình
bày trong chương II).
1.3.1.2. Quản lý bộ nhớ chính
Trong h thng máy tính hiện i, bộ nhớ chính trung tâm ca các thao
tác, x lý. B nh chính th xem như một mng kiu byte hay kiu word. Mi
phn t ều a chỉ. Đó nơi lưu dữ liệu ược CPU truy xut mt cách nhanh
chóng so vi các thiết b nhp/xuất. CPU ọc nhng ch th t b nh chính. Các
thiết b nhp/xuất cài ặt chế DMA (xem chương IV) cũng c ghi d liu
trong b nh chính. Thông thường b nh chính cha các thiết b CPU
th nh v trc tiếp. d CPU truy xut d liu t ĩa, những d liệu y ược
chuyn vào b nh qua li gi h thng nhp/xut.
Một chương trình muốn thi hành trước hết phải ược ánh x thành a ch
tuyệt ối và np vào b nh chính. Khi chương trình thi hành, hệ thng truy xut
các ch th và d liu của chương trình trong bộ nh chính. Ngay c khi tiến trình
kết thúc, d liu vn còn trong b nh cho ến khi mt tiến trình khác ược ghi
chng lên.
lOMoARcPSD| 41967345
13
Để tối ưu hóa quá trình hoạt ng ca CPU tốc ca máy tính, mt s
tiến trình ược lưu giữ trong b nh. Có rt nhiu kế hoch qun tr b nh do có
nhiu ng dng b nh khác nhau và hiu qu ca các thut toán ph thuc vào
tùy tình hung c th. La chn mt thut toán cho mt h thng ược t trước
ph thuc vào nhiu yếu tố, ặc bit là phn cng ca h thng.
Hệ iều hành có những vai trò như sau trong việc quản lý bộ nhớ chính:
* Lưu giữ thông tin v các v trí trong b nh ã ược s dng ai
s dng.
* Quyết ịnh tiến trình nào ược np vào b nh chính, khi b nh ã
th dùng ược.
* Cp phát và thu hi b nh khi cn thiết.
1.3.1.3. Quản lý bộ nhớ phụ
Mc tiêu chính ca h thng y tính thi hành chương trình. Những
chương trình với d liu truy xut ca chúng phải ược t trong b nh chính
trong suốt quá trình thi hành. Nhưng bộ nh chính quá nh có th lưu giữ mi
d liệu chương trình, ngoài ra dữ liu s mất khi không còn ược cung cp
năng lượng. H thng máy tính ngày nay cung cp hệ thống u trữ phụ. Đa số
các máy tính ều dùng ĩa lưu trữ c chương trình dữ liu. Hu như tất c
chương trình: chương trình dịch, hp ng, th tc, trình son tho, nh dạng... ều
ược lưu trữ trên ĩa cho tới khi ược thc hin, np vào trong b nh chính
cũng sử dụng ĩa ể cha d liu và kết qu x lý. Vì vy mt b qun lý h thống
ĩa rất quan trng cho h thngy tính.
Vai trò của hệ iều hành trong việc quản lý ĩa:
* Qun lý vùng trống trên ĩa.
* Định v lưu trữ.
* Lp lịch cho ĩa.
h thống ĩa ược s dng thường xuyên, nên nó phải ược dùng hiu qu.
Tốc ộ ca toàn b h thng tu thuc rt nhiu vào tốc ộ truy xut ĩa.
lOMoARcPSD|41967345
14
1.3.1.4. Quản lý hệ thống nhập xuất
Mt trong nhng mc tiêu ca h iều hành là che dấu những ặc thù ca các
thiết b phn cứng ối với người s dng, thay vào ó là một lp thân thin hơn,
người s dụng thao tác hơn.
Một hệ thống nhập/xuất bao gồm:
* H thng buffer caching.
* Giao tiếp
1.4. Lịch sử phát triển các hệ iều hành
1.4.1. Thế hệ 1 (1945 – 1955)
Vào khong gia thp niên 1940, Howard Aiken Havard John von
Neumann Princeton ã thành công trong việc xây dng y tính dùng ng chân
không. Nhng máy này rt ln với hơn 10000 ng chân không nhưng chậm hơn
nhiều so vi máy r nht ngày nay.
Mỗi máy ược mt nhóm thc hin tt c t thiết kế, xây dng lp trình,
thao tác ến qun . Lp trình bng ngôn ngy tuyệt ối, thường là bng cách
dùng bảng iều khiển ể thc hin các chức năng cơ bn. Ngôn ng lp trình chưa
ược biết ến và h iều hành cũng chưa nghe ến.
Vào u thp niên 1950, phiếu c l ra i th viết chương trình trên
phiếu thay cho dùng bảng iều khin.
1.4.2. Thế hệ 2 (1955 – 1965)
S ra i ca thiết b bán dn vào gia thập niên 1950 làm thayi bc tranh
tng th. Máy tính tr nên tin cậy hơn. ược sn xut cung cp cho các
khách hàng. Lần u tiên có s phân chia rõ ràng giữa người thiết kế, người xây
dựng, người vận hành, người lập trình, và người bo trì.
Để thc hin mt công vic (một chương trình hay một tp hp các chương
trình), lập trình viên trước hết viết chương trình trên giấy (bng hp ng hay
FORTRAN) sau ó ục l trên phiếu và cuối cùng ưa phiếu vào máy.
Sau khi thc hin xong nó s xut kết qu ra máy in.
lOMoARcPSD|41967345
15
Hệ thống xử lý theo lô ra ời, nó lưu các yêu cầu cn thc hiện lên băng từ,
và h thng s c và thi hành lần lượt. Sau ó, nó sẽ ghi kết qu lên băng t xut
và cuối cùng người s dng s em băng từ xuất i in.
Hệ thống xử lý theo lô hoạt ộng dưới s iều khin ca một chương trình ặc
bit là tin thân ca h iều hành sau này. Ngôn ng lp trình s dng trong giai
oạn này ch yếu là FORTRAN và hp ng.
1.4.3. Thế hệ 3 (1965 – 1980)
Trong giai oạn này, y tính ược s dng rng rãi trong khoa hc cũng
như trong thương mại. Máy IBM 360 là máy tính ầu tiên s dng mch tích hp
(IC). T ó kích thước giá c ca các h thng y giảm áng kể y tính
càng ph biến hơn. Các thiết b ngoi vi dành cho máy xut hin ngày càng nhiều
và thao tác iều khin bắt ầu phc tp.
H iều hành ra ời nhằm iu phi, kim soát hoạt ộng và gii quyết các yêu
cu tranh chp thiế bị. Chương trình hệ iều hành dài c triu dòng hp ng do
hàng ngàn lp trình viên thc hin.
Sau ó, h iều hành ra i khái nim a chương. CPU không phi ch thc
hin các thao tác nhp xut. B nh ược chia làm nhiu phn, mi phn có mt
công vic (job) khác nhau, khi mt công vic ch thc hin nhp xut CPU s
x lý các công vic còn li. Tuy nhiên khi nhiu công vic cùng xut hin
trong b nh, vấn ề là phi có một cơ chế bo v tránh các công vic ảnh hưởng
ến nhau. H iều hành cũng cài ặt thuc tính spool.
Giai oạn y cũng ánh dấu s ra ời ca hệ iều hành chia xẻ thời gian như
CTSS của MIT. Đồng thi các h iều hành lớn ra ời như MULTICS, UNIX
h thống các máy mini cũng xuất hiện như DEC PDP-1.
1.4.4. Thế hệ 4 (1980 - )
Giai oạn y ánh dấu s ra i của máy tính nhân, c bit h thng
IBM PC vi h iều hành MS-DOS Windows sau này. Bên cạnh ó s phát
trin mnh ca các h iều hành ta Unix trên nhiu h máy khác nhau như Linux.
lOMoARcPSD|41967345
16
Ngoài ra, từ u thập niên 90 cũng ánh dấu s phát trin mnh m ca hệ iều hành
mạnghệ iều hành phân tán.
Chương 2 CÁC MÔ HÌNH XỬ LÝ ĐỒNG HÀNH
Hu hết các h iều hành hiện ại ều cho phép người dùng thi hành nhiu
công việc ng thi trên cùng mt y tính. Nhu cu x ng hành
(concurrency) này xut phát t âu? h iều hành cn phi t chc h tr như
thế nào cho các môi trường a nhiệm (multitask) nthế? Đó nội dung chính
trong chương này.
2.1. Nhu cầu xử lý ồng hành
2 ng lc chính khiến cho các h iều hành hiện ại thường h tr môi
trường a nhiệm (multitask) trong ó chấp nhn nhiu tác v thc hin ng thi
trên cùng mt máy tính:
2.1.1. Tăng hiệu suất sử dụng CPU
Phn ln các tác v (job) khi thi hành u tri qua nhiu chu k x lý (s
dng CPU) chu k nhp xut (s dng các thiết b nhp xut) xen k như sau:
CPU
IO
CPU
IO
CPU
Nếu ch có 1 tiến trình duy nht trong h thng, thì vào c chu k IO ca
tác v, CPU s hoàn toàn nhàn rỗi. Ý tưởng tăng cường s lượng tác v trong
h thống tn dng CPU: nếu tác v 1 x IO, thì th s dng CPU
thc hin tác v 2...
CPU
IO
CPU
IO
CPU
Tác v 1
CPU
IO
CPU
IO
Tác v 2
lOMoARcPSD|41967345
17
2.1.2. Tăng tốc ộ xử lý
Mt s bài toán bn cht x song song nếu ược xây dng thành nhiu
module hoạt ộng ồng thi thì s tiết kiệm ược thi gian x lý.
d: Xét bài toán tính giá tr biu thc kq = a*b + c*d . Nếu tiến hành
tính ồng thi (a*b) và (c*d) thì thi gian x lý s ngắn hơn là thực hin tun t.
Trong các trường hợp ó, cần mt hình x ng hành thích hp.
Trên máy tính có cu hình nhiu CPU, h tr x lý song song
(multiprocessing) tht sự, iều y s giúp tăng hiệu qu thi hành ca h thng
áng kể.
2.2. Khái niệm tiến trình (Process) và mô hình a tiến trình
(Multiprocess)
Để h tr s a chương, máy tính phải kh năng thực hin nhiu tác v
ng thời. Nhưng việc iều khin nhiu hoạt ng song song cấp phn cng
rất khó khăn. Vì thế, các nhà thiết kế h iều hành ề xut mt mô hình song song
giả lập bng cách chuyển ổi b x qua li giữa các chương trình ể duy trì hoạt
ng ca nhiều chương trình cùng lúc, iều này to cm giác nhiu hoạt ộng
ược thc hiện ồng thi.
Trong mô hình này, tt c các phn mm trong h thống ược t chc thành
mt s nhng tiến trình (process). Tiến trình một chương trình ang x lý, s
hu mt con tr lnh, tp các thanh ghi các biến. Để hoàn thành tác v ca
mình, mt tiến trình có th cần ến mt s tài nguyên như CPU, b nh chính,
các tp tin và thiết b nhp/xut.
Cn phân bit hai khái nim chương trìnhtiến trình. Một chương trình
là mt thc th th ng, chứa ựng các ch th iều khiển máy tính ể tiến hành mt
tác v nào ó; khi cho thc hin các ch th y, chương trình chuyển thành tiến
trình, mt thc th hoạt ng, vi con tr lệnh xác nh ch th kế tiếp s thi hành,
kèm theo tp các tài nguyên phc v cho hoạt ộng ca tiến trình.
V mt ý nim, có th xem như mỗi tiến trình s hu mt b x lý o cho
riêng nó, nhưng trong thực tế, chmt b x tht s ược chuyển ổi qua li
lOMoARcPSD|41967345
18
gia các tiến trình. S chuyển ổi nhanh chóng y ược gi sự a chương
(multiprogramming). H iều hành chu trách nhim s dng mt thut toán iều
phối quyết ịnh thời iểm cn dng hoạt ng ca tiến trình ang x phc v
mt tiến trình khác, và la chn tiến trình tiếp theo s ược phc v. B phn thc
hin chức năng này của h iều hành ược gi là bộ iều phối (scheduler).
Hình 2.1. (a) Đa chương với 4 chương trình
(b) Mô hình khái niệm với 4 chương ộc lập
(c) Tại một thời iểm chỉ có một chương trình hoạt ộng
2.3. Khái niệm tiểu trình (Thread) và mô hình a tiểu trình
Trong hầu hết các hệ iều hành, mỗi tiến trình có một không gian ịa chỉ
chỉ một dòng xử . Tuy nhiên, nhiều tình huống người sử dụng mong
muốn có nhiều dòng xử cùng chia sẻ một không gian ịa chỉ, và các dòng xử lý
này hoạt ộng song song tương tự như các tiến trình phân biệt (ngoại trừ việc chia
sẻ không gian ịa chỉ).
Ví d : Mt server qun lý tp tin thnh thong phi t khóa ch các thao
tác truy xuất ĩa hoàn tất. Nếu server có nhiu dòng x lý, h thng th x lý
các yêu cu mi trong khi mt dòng x b khoá. Như vậy vic thc hiện
chương trình sẽ hiu qu hơn. Điều y không th ạt ược bng cách to hai
tiến trình server riêng bit cn phi chia s cùng một vùng m, do vy bt buc
phi chia s không gian ịa ch.
lOMoARcPSD|41967345
19
Chính các tình huống tương tự, người ta cn một chế x lý mi
cho phép có nhiu dòng x lý trong cùng mt tiến trình.
Ngày nay ã có nhiều h iều hành cung cp một chế như thế và gi tiểu
trình (threads).
2.3.1. Nguyên lý chung
Một tiểu trình một ơn vị xử cơ bản trong hệ thống. Mỗi tiểu trình xử
tuần tự oạn code của nó, sở hữu một con trỏ lệnh, tập các thanh ghi một
vùng nhớ stack riêng. Các tiểu trình chia sẻ CPU với nhau giống như cách chia
sẻ giữa các tiến trình: một tiểu trình xử trong khi các tiểu trình khác chờ ến
lượt. Một tiểu trình cũng có thể tạo lập các tiến trình con, nhận các trạng thái
khác nhau như một tiến trình thật sự. Một tiến trình thể sở hữu nhiều tiểu
trình.
Các tiến trình to thành nhng thc th c lp. Mi tiến trình mt tp
tài nguyên và một môi trường riêng (mt con tr lnh, mt Stack, các thanh ghi
không gian a ch). Các tiến trình hoàn toàn c lp vi nhau, ch th liên
lạc thông qua các cơ chế thông tin gia các tiến trình mà h iều hành cung cấp.
Ngược li, các tiu trình trong cùng mt tiến trình li chia s mt không gian ịa
ch chung, iều này có nghĩa là các tiểu trình có th chia s các biến toàn cc ca
tiến trình. Mt tiu trình th truy xuất ến c các stack ca nhng tiu trình
khác trong cùng tiến trình. Cu trúc y không ề ngh một cơ chế bo v nào, và
iều y cũng không thật cn thiết vì các tiu trình trong cùng mt tiến trình thuc
v cùng mt s hu ch ã tạo ra chúng trong ý ịnh cho phép chúng hp tác vi
nhau.
lOMoARcPSD|41967345
20
Hình 2.2. Các tiu trình trong cùng mt tiu trình
2.3.2. Phân bổ thông tin lưu trữ
Cu trúc mô t tiến trình và tiu trình
2.3.3. Kernel thread và user thread
Khái nim tin trình có th ược cài t trong kernel ca H iều hành, khi ó
ơn vị cơ sở s dụng CPU ể x lý tiu trình, H iều hành s phân phi CPU cho
các tiu trình trong h thống. Tuy nhiên i vi mt s h iều hành, khái nim tiu
trình ch ược h tr như một ối tượng người dùng, các thao tác tiểu trình ược
cung cp kèm theo do mt b thư viện x trong chế người dùng không c
quyn (user mode). Lúc này H iều hành s ch biết ến khái nim tiến trình, do
vy cần có chế liên kết các tiu trình cùng mt tiến trình vi tiến trình cha
trong kernel_ ối tượng này ôi lúc ược gi là LWP (lightweight process).
lOMoARcPSD|41967345
21
Hình 2.3.
2.4. Tóm tắt
Tiến trình là một chương trình ang hoạt ộng.
Để s dng hiu qu CPU, s a chương cần ược ưa vào hệ thng
S a chương ược t chc bằng cách lưu trữ nhiu tiến trình trong b nh
ti mt thời iểm, và iều phi CPU qua li gia các tiến trình trong h thng.
Mô hình a tiểu trình cho phép mi tiến trình có th tiến hành nhiu dòng
x lý ồng thi trong cùng một không gian ịa ch nhm thc hin tác v hiu qủa
hơn trong mt s trường hp.
* Củng cố bài học
Các câu hi cn tr lời ược sau bài hc này:
1. Ti sao các h iều hành hiện ại h tr môi trường a nhiệm?
2. Phân bit multitask, multiprogramming và multiprocessing?
3. Khái nim tiến trình ược xây dng nhm mục ích gì?
4. S khác bit, mi quan h gia tiến trình và tiu trình?
lOMoARcPSD|41967345
22
* Bài tập
Bài 1. Nhiu h iều hành không cho phép x lýng hành. Tho lun v
các phc tp phát sinh khi h iều hành cho phép a nhiệm?
Bài 2. Tìm mt s ng dng thích hp với mô hình a tiến trình; và mt
s ng dng thích hp với mô hình a tiểu trình.
lOMoARcPSD|41967345
23
Chương 3 QUẢN LÝ TIẾN TRÌNH
Chương y trin khai các ni dung v chức năng quản tiến trình ca H
iều hành: làm thế nào phân chia CPU cho các tiến trình? Theo vết x ca
tiến trình? Các thao tác trên tiến trình?
3.1. Tổ chức quản lý tiến trình
3.1.1. Các trạng thái của tiến trình
Trng thái ca tiến trình ti mt thời iểm ược xác nh bi hoạt ng hin
thi ca tiến trình ti thời iểm ó. Trong quá trình sống, mt tiến trình thay i
trng thái do nhiều nguyên nhân như: phi ch mt s kiện nào ó xảy ra, hay ợi
mt thao tác nhp/xut hoàn tt, buc phi dng hoạt ộng do ã hết thi gian x
Ti mt thời iểm, mt tiến trình th nhn trong mt các trng thái sau
ây:
* Mới tạo: tiến trình ang ược to lp.
* Running: các ch th ca tiến trình ang ược x lý.
* Blocked: tiến trình ch ược cp phát mt tài nguyên, hay ch mt
s kin xy ra.
* Ready: tiến trình ch ược cấp phát CPU ể x lý.
* Kết thúc: tiến trình hoàn tt x lý.
lOMoARcPSD|41967345
24
Hình 3.1. Sơ ồ chuyn trng thái gia các tiến trình
Ti mt thời iểm, ch có mt tiến trình có th nhn trng thái running trên
mt b x bt kỳ. Trong khi ó, nhiều tiến trình có th trng thái blocked hay
ready.
Các cung chuyn tiếp trong sơ trng thái biu din sáu s chuyn trng
thái có th xảy ra trong các iều kin sau:
* Tiến trình mi tạo ược ưa vào hệ thng.
* B iều phi cp phát cho tiến trình mt khong thi gian s dng
CPU.
* Tiến trình kết thúc.
* Tiến trình yêu cu một tài ngun nhưng chưa ược áp ng tài
nguyên chưa sẵn sàng ể cp phát ti thời iểm ó ; hoc tiến trình phi ch mt
s kin hay thao tác nhp/xut.
* B iều phi chn mt tiến trình khác ể cho x lý.
* Tài nguyên tiến trình yêu cu tr nên sẵn sàng ể cp phát; hay
s kin hoc thao tác nhp/xut tiến trình ang ợi hoàn tt.
3.1.2. Chế ộ xử lý của tiến trình
Để m bo h thng hoạt ộng úng n, h iều hành cn phải ược bo v khi
s xâm phm ca các tiến trình. Bn thân các tiến trình và d liu cũng cần ược
bo v tránh các ảnh ng sai lc ln nhau. Mt cách tiếp cận gii quyết vn
lOMoARcPSD|41967345
25
phân bit hai chế x cho các tiến trình: chế không ặc quyền chế
ặc quyền nho s tr giúp của cơ chế phn cng. Tp lnh của CPU ược phân
chia thành các lệnh c quyn và lnh không c quyền. Cơ chế phn cng ch cho
phép các lệnh c quyền ược thc hin trong chế c quyền. Thông thường ch
h iều hành hoạt ng trong chế c quyn, các tiến trình của người dùng hoạt
ng trong chế không c quyn, không thc hin ưc các lệnh c quyền nguy
cơ ảnh hưởng ến h thống. Như vậy h iều hành ưc bo v. Khi mt tiến trình
người dùng gọi ến mt li gi h thng, tiến trình ca h iều hành x lý li gi
này s hoạt ộng trong chế c quyn, sau khi hoàn tt thì tr quyn iều khin v
cho tiến trình người dùng trong chế không ặc quyn.
Hình 3.2. Hai chế x
3.1.3. Cấu trúc dữ liệu khối quản lý tiến trình
H iều hành qun lý các tiến trình trong h thng thông qua khi qun lý
tiến trình (process control block - PCB). PCB là mt vùng nh lưu trữ các thông
tin mô t cho tiến trình, vi các thành phn ch yếu bao gm:
* Định danh của tiến trình (1): giúp phân bit các tiến trình.
* Trạng thái tiến trình (2): xác nh hoạt ng hin hành ca tiến trình.
* Ngữ cảnh của tiến trình (3): t các tài ngun tiến trình ang
trong quá trình, hoặc phc v cho hoạt ng hin ti, hoặc làm sở phc hi
hoạt ộng cho tiến trình, bao gm các thông tin v:
- Trạng thái CPU: bao gm ni dung các thanh ghi, quan trng nht là con
tr lệnh IP lưu trữ a ch câu lnh kế tiếp tiến trình s x lý. Các thông tin này
lOMoARcPSD|41967345
26
cần ược lưu trữ khi xy ra mt ngt, nhm th cho phép phc hi hot ng
ca tiến trình úng như trước khi b ngt.
- Bộ xử : dùng cho máy có cu hình nhiều CPU, xác ịnh s hiu CPU mà
tiến trình ang sử dng.
- Bộ nhớ chính: danh sách các khi nh ược cp cho tiến trình.
- Tài nguyên sử dụng: danh sách các tài mguyên h thng tiến trình ang
sử dng.
- Tài nguyên tạo lập: danh sách các tài nguyên ược tiến trình to lp.
* Thông tin giao tiếp (4): phn ánh các thông tin v quan h ca tiến trình
vi các tiến trình khác trong h thng :
- Tiến trình cha: tiến trình to lp tiến trình này.
- Tiến trình con: các tiến trình do tiến trình này to lp .
- Độ ưu tiên: giúp b iều phối có thông tin la chn tiến trình ược
cp CPU.
* Thông tin thống kê (5): ây là những thông tin thng v hoạt ng ca
tiến trình, như thời gian ã sử dng CPU,thi gian ch. Các thông tin yth
có ích cho công việc ánh giá tình hình hệ thng và d oán các tình huống tương
lai.
lOMoARcPSD|41967345
27
Hình 3.3. Khi mô t tiến trình
3.1.4. Thao tác trên tiến trình
H iều hành cung cp các thao tác ch yếu sau ây trên một tiến trình:
- To lp tiến trình (create)
- Kết thúc tiến trình (destroy)
- Tm dng tiến trình (suspend)
- Tái kích hot tiến trình (resume)
- Thay ổi ộ ưu tiên tiến trình
3.1.4.1. Tạo lập tiến trình
Trong quá trình x , mt tiến trình th to lp nhiu tiến trình mi
bng cách s dng mt li gi h thống tương ng. Tiến trình gi li gi h
thống to tiến trình mi s ược gi là tiến trình cha, tiến trình ược to gi
lOMoARcPSD|41967345
28
tiến trình con. Mi tiến trình con ến lượt li th to các tiến trình mới…,
quá trình này tiếp tc s to ra mt cây tiến trình.
Hình 3.4. Một cây tiến trình trong hệ thống UNIX
Các công vic h iều hành cn thc hin khi to lp tiến trình bao gm:
- Định danh cho tiến trình mi phát sinh
- Đưa tiến trình vào danh sách qun lý ca h thng
- Xác ịnh ộ ưu tiên cho tiến trình
- To PCB cho tiến trình
- Cấp phát các tài nguyên ban ầu cho tiến trình
Khi mt tiến trình to lp mt tiến trình con, tiến trình con th s ược
h iều hành trc tiếp cp phát tài nguyên hoặc ược tiến trình cha cho thừa hưởng
mt s tài nguyên ban ầu.
Khi mt tiến trình to tiến trình mi, tiến trình ban u th x lý theo
mt trong hai kh năng sau:
- Tiến trình cha tiếp tc x lý ồng hành vi tiến trình con.
- Tiến trình cha ch ến khi mt tiến trình con nào ó, hoặc tt c các
tiến trình con kết thúc x lý.
Các h iều hành khác nhau có th chn la các cài ặt khác nhau ể thc hin
thao tác to lp mt tiến trình.
lOMoARcPSD|41967345
29
3.1.4.2. Kết thúc tiến trình
Mt tiến trình kết thúc x lý khi nó hoàn tt ch th cui cùng và s dng
mt li gi h thống ể yêu cu h iều hành hy b nó. Đôi khi một tiến trình có
th yêu cu h iều hành kết thúc x lý ca mt tiến trình khác. Khi mt tiến trình
kết thúc, h iều hành thc hin các công vic:
- Thu hi các tài nguyên h thống ã cấp phát cho tiến trình
- Hy tiến trình khi tt c các danh sách qun lý ca h thng
- Hy b PCB ca tiến trình
Hu hết các h iều hành không cho phép các tiến trình con tiếp tc tn ti
nếu tiến trình cha ã kết thúc. Trong nhng h thng như thế, h iều hành s t
ng phát sinh mt lot các thao tác kết thúc tiến trình con.
3.1.5. Cấp phát tài nguyên cho tiến trình
Khi có nhiều người s dụngng thi làm vic trong h thng, h iều hành
cn phi cp phát các tài nguyên theo yêu cu cho mỗi người s dng. Do tài
nguyên h thống thường rt gii hn khi không th chia s, nên hiếm khi
tt c các yêu cu tài nguyên ng thời ều ược tha mãn. Vì thế cn phi nghiên
cu một phương pháp ể chia s mt s tài nguyên hu hn gia nhiu tiến trình
người dùng ng thi. H iều hành qun lý nhiu loi tài nguyên khác nhau (CPU,
b nh chính, các thiết b ngoi vi…), vi mi loi cn một chế cp phát
các chiến lược cp phát hiu qu. Mỗi tài nguyên ược biu din thông qua
mt cu trúc d liu, khác nhau v chi tiết cho tng loi tài nguyên, nhưng
bản chứa ựng các thông tin sau:
* Định danh tài nguyên
* Trạng thái tài nguyên: ây các thông tin tả chi tiết trng thái tài
nguyên : phn nào của tài nguyên ã cấp phát cho tiến trình, phn nào còn có th
s dng ?
* Hàng ợi trên một tài nguyên: danh sách các tiến trình ang chờ ược cấp
phát tài nguyên tương ứng.
lOMoARcPSD|41967345
30
* Bộ cấp phát: là oạn code ảm nhim vic cp phát một tài nguyên ặc thù.
Mt s tài nguyên òi hỏi các gii thuật c biệt (như CPU, bộ nh chính, h thng
tp tin), trong khi những tài nguyên khác (như các thiết b nhp/xut) có th cn
các gii thut cp phát và gii phóng tổng quát hơn.
Hình 3.5. Khối quản lý tài nguyên Các
mc tiêu ca k thut cp phát:
* Bảo m mt s lượng hp l các tiến trình truy xuất ng thời ến các tài
nguyên không chia s ược.
* Cp phát tài nguyên cho tiến trình có yêu cu trong mt khong thi gian
trì hoãn có th chp nhận ược.
* Tối ưu hóa sự s dng tài nguyên.
Đểth thõa mãn các mc tiêu k trên, cn phi gii quyết các vấn ny
sinh khi có nhiu tiến trình ồng thi yêu cu mt tài nguyên không th chia s.
3.2. Điều phối tiến trình
Trong môi trường a nhiệm, th xy ra tình hung nhiu tiến trình ng
thi sẵn sàng x lý. Mc tiêu ca các h phân chia thi gian (timesharing)
lOMoARcPSD|41967345
31
chuyển ổi CPU qua li gia các tiến trình một cách thường xuyên nhiều người
s dng có th tương tác cùng lúc với từng chương trình trong quá trình x lý.
Để thc hiện ược mc tiêu y, h iều hành phi la chn tiến trình ược
x lý tiếp theo. B iều phi s s dng mt gii thuật iều phi thích hợp thc
hin nhim v này. Mt thành phn khác ca h iều hành cũng tim ẩn trong
công tác iều phi bộ phân phối (dispatcher). B phân phi s chu trách nhim
chuyển ổi ng cnh và trao CPU cho tiến trình ược chn bi b iều phối ể x lý.
3.2.1. Giới thiệu
3.2.1.1. Mục tiêu iều phối
B iều phi không cung cấp chế, ưa ra các quyết nh. Các h iều
hành xây dng nhiu chiến lược khác nhau ể thc hin việc iều phi, nhưng tựu
chung cần ạt ược các mc tiêu sau:
a) Sự công bằng ( Fairness): Các tiến trình chia s CPU mt cách
công bng,
không có tiến trình nào phi ch i vô hạn ể ược cp phát CPU.
b) Tính hiệu quả (Efficiency): H thng phi tn dụng ược CPU
100%
thi gian.
c) Thời gian áp ứng hợp lý (Response time): Cc tiu hoá thi gian
hi
áp cho các tương tác của người s dng
d) Thời gian lưu lại trong hệ thống (Turnaround Time): Cc tiu
hóa thi
gian hoàn tt các tác v x lý theo lô.
e) Thông lượng tối a (Throughput): Cực i hóa s công việc ược x
lý trong một ơn vị thi gian. Tuy nhiên thường không th tha mãn tt c
các mc tiêu k trên bn thân chúng s mâu thun vi nhau ch
có th dung hòa chúng mức ộ nào ó.
3.2.1.2. Các ặc iểm của tiến trình
lOMoARcPSD| 41967345
32
Điều phi hoạt ng ca các tiến trình mt vấn rt phc tạp, òi hỏi h
iều hành khi gii quyết phi xem xét nhiu yếu t khác nhau th t ược
nhng mục tiêu ra. Mt s c tính ca tiến trình cần ược quan tâm như tiêu
chuẩn iều phi:
a) Tính hướng xuất / nhập của tiến trình (I/O-boundedness):
Khi mt tiến trình nhận ược CPU, ch yếu ch s dụng CPU ến khi phát
sinh mt yêu cu nhp xut. Hoạt ộng ca các tiến trình như thế thường bao gm
nhiều lượt s dng CPU, mỗi lượt trong mt thi gian khá ngn.
b) Tính hướng xử lý của tiến trình (CPU-boundedness):
Khi mt tiến trình nhận ược CPU, có khuynh hướng s dng CPU ến
khi hết thi gian dành cho nó? Hoạt ng ca các tiến trình như thế thường bao
gm mt s ít lượt s dng CPU, nhưng mỗi lượt trong mt thời gian ủ dài.
c) Tiến trình tương tác hay xử lý theo lô:
Người s dng theo kiểu tương tác thường yêu cầu ược hồi áp tức thời ối
vi các yêu cu ca h, trong khi các tiến trình ca tác v ược x lý theo lô nói
chung có th trì hoãn trong mt thi gian chp nhận ược.
d) Độ ưu tiên của tiến trình:
Các tiến trình th ược phân cp theo mt s tiêu chuẩn ánh giá nào ó,
một cách hp lý, các tiến trình quan trọng hơn (có ộ ưu tiên cao hơn) cn ược ưu
tiên hơn.
e) Thời gian ã sử dụng CPU của tiến trình:
Mt s quan iểm ưu tiên chọn nhng tiến trình ã sử dng CPU nhiu thi
gian nht hy vng chúng s cn ít thi gian nhất hoàn tt ri khi h thng.
Tuy nhiên cũng có quan iểm cho rng các tiến trình nhận ược CPU trong ít thi
gian là nhng tiến trình ã phải ch lâu nht, do vậy ưu tiên chọn chúng.
f) Thời gian còn lại tiến trình cần ể hoàn tất:
Có th gim thiu thi gian ch i trung bình ca các tiến trình bng cách cho
các tiến trình cn ít thi gian nhất ể hoàn tất ược thc hiện trước.
lOMoARcPSD| 41967345
33
Tuy nhiên áng tiếc là rt hiếm khi biết ược tiến trình cn bao nhiêu thi gian nữa
kết thúc x lý.
3.2.1.3. Điều phối không ộc quyền và iều phối ộc quyền
(preemptive/nopreemptive)
Thuật toán iều phi cn xem xét quyết nh thời iểm chuyển i CPU gia
các tiến trình. H iều hành th thc hiện chế iều phi theo nguyên ộc
quyền hoc không ộc quyền.
* Điều phối ộc quyền: Nguyên lý iều phi ộc quyền cho phép mt tiến trình
khi nhận ược CPU s quyền c chiếm CPU ến khi hoàn tt x lý hoc t
nguyn giải phóng CPU. Khi ó quyết ịnh iều phi CPU s xy ra trong các tình
hung sau:
- Khi tiến trình chuyn t trạng thái ang xử lý (running) sang trng
thái b khóa blocked ( ví d ch mt thao tác nhp xut hay ch mt tiến trình
con kết thúc…).
- Khi tiến trình kết thúc.
Các gii thuật c quyền thường ơn giản d cài t. Tuy nhiên chúng
thường không thích hp vi các h thng tng quát nhiều người dùng, vì nếu cho
phép mt tiến trình quyn x bao lâu tùy ý, nghĩa tiến trình này
th gi CPU mt thời gian không xác ịnh, có th ngăn cản nhng tiến trình còn
li trong h thng có một cơ hội ể x lý.
* Điều phối không ộc quyền: Ngược với nguyên lý c quyn, iều phi theo
nguyên lý không ộc quyền cho phép tm dng hoạt ng ca mt tiến trình ang
sẵn sàng x lý. Khi mt tiến trình nhận ược CPU, vẫn ược s dụng CPU ến
khi hoàn tt hoc t nguyn giải phóng CPU, nhưng một tiến trình khác có ộ ưu
tiên có thể dành quyn s dng CPU ca tiến trình ban ầu. Như vậy là tiến trình
có th b tm dng hoạt ộng bt c lúc nào mà không ược báo trước, ể tiến trình
khác x lý. Các quyết ịnh iều phi xy ra khi:
lOMoARcPSD|41967345
34
- Khi tiến trình chuyn t trạng thái ang xử (running) sang trng thái b
khóa blocked ( ví d ch mt thao tác nhp xut hay ch mt tiến trình con kết
thúc…).
- Khi tiến trình chuyn t trạng thái ang xử (running) sang trng thái
ready (ví d xy ra mt ngt).
- Khi tiến trình chuyn t trng thái ch (blocked) sang trng thái ready (ví
d mt thao tác nhp/xut hoàn tt).
- Khi tiến trình kết thúc.
Các thuật toán iều phi theo nguyên tắc không c quyền ngăn cản ược tình
trng mt tiến trình c chiếm CPU, nhưng việc tm dng mt tiến trình th
dẫn ến các mâu thun trong truy xuất, òi hỏi phi s dng mt phương pháp ng
b hóa thích hợp ể gii quyết.
Trong các h thng s dụng nguyên lý iều phối c quyn có th xy ra tình
trng các tác v cn thi gian x lý ngn phi ch tác v x vi thi gian rt
dài hoàn tt. Nguyên lý iều phối ộc quyn thường ch thích hp vi các h x
theo lô.
Đối vi các h thống tương tác (time sharing), các hệ thi gian thc (real
time), cn phi s dụng nguyên lý iều phối không ộc quyền ể các tiến trình quan
trọng hội hồi áp kp thi. Tuy nhiên thc hiện iều phi theo nguyên
không ộc quyền òi hỏi những cơ chế phc tp trong vic phân ịnh ưu tiên,
phát sinh thêm chi phí khi chuyển ổi CPU qua li gia các tiến trình.
3.2.2. Tổ chức iều phối
3.2.2.1. Các danh sách sử dụng trong quá trình iều phối
H iều hành s dng hai loại danh sách thc hiện iều phi các tiến trình
danh sách sẵn sàng (ready list)danh sách chờ ợi (waiting list).
Khi mt tiến trình bắt ầu i vào hệ thống, ược chèn vào danh sách các
tác v (job list). Danh sách y bao gm tt c các tiến trình ca h thng. Nhưng
chỉ các tiến trình ang thường trú trong b nh chính và trng thái sn sàng tiếp
nhận CPU ể hoạt ộng mới ược ưa vào danh sách sẵn sàng.
lOMoARcPSD|41967345
35
B iều phi s chn mt tiến trình trong danh sách sn sàng cp CPU
cho tiến trình ó. Tiến trình ược cp CPU s thc hin x lý, th chuyn
sang trng thái ch khi xy ra các s kiện như i mt thao tác nhp/xut hoàn
tt, yêu cầu tài nguyên chưa ược thỏa mãn, ược yêu cu tm dng... Khi ó tiến
trình s ược chuyn sang mt danh sách ch i.
H iều hành ch s dng mt danh sách sn sàng cho toàn h thng, nhưng
mỗi mt tài nguyên (thiết b ngoi vi) mt danh sách ch i riêng bao gm
các tiến trình ang chờ ược cấp phát tài nguyên ó.
Hình 3.6. Các danh sách iều phối
Quá trình x lý ca mt tiến trình tri qua nhng chu k chuyn ổi qua li
gia danh sách sn sàng và danh sách ch ợi. Sơ dưới âytả s iều phi các
tiến trình da trên các danh sách ca h thng.
Thoạt u tiến trình mới ược t trong danh sách các tiến trình sn sàng (ready
list), nó s ợi trong danh sách này cho ến khi ược chọn ể cp phát CPU và bắt ầu
x lý. Sau ó có thể xy ra mt trong các tình hung sau:
- Tiến trình phát sinh mt yêu cu mt tài nguyên h thống chưa thể áp
ứng, khi ó tiến trình s ược chuyn sang danh sách các tiến trình ang ch tài
nguyên tương ứng.
- Tiến trình th b bt buc tm dng x do mt ngt xảy ra, khi ó
tiến trình ược ưa trở li vào danh sách sẵn sàng ể ch ược cp CPU cho lượt tiếp
theo.
lOMoARcPSD|41967345
36
Hình 3.7. Sơ ồ chuyển ổi giữa các danh sách iều phối
Trong trường hợp u tiên, tiến trình cui cùng s chuyn t trng thái
blocked sang trng thái ready lại ược ưa trở vào danh sách sn sàng. Tiến
trình lp li chu k y cho ến khi hoàn tt tác v thì ược h thng hy b khi
mọi danh sách iều phi.
3.2.2.2. Các cấp ộ iều phối
Thc ra công việc iều phối ược h iều hành thc hin hai mức ộ:
iều phối tác vụ (job scheduling) iều phối tiến trình (process scheduling). a)
Điều phối tác vụ
Quyết nh la chn c v nào ược ưa vào hệ thng, np nhng tiến trình
ca tác v ó vào bộ nh chính ể thc hin. Chức năng iều phi tác v quyết ịnh
mức a nhiệm ca h thng (s lượng tiến trình trong b nh chính). Khi h
thng to lp mt tiến trình, hay mt tiến trình kết thúc x thì chức năng
iều phi tác v mới ược kích hot. Vì mức ộ a chương tương ối ổn ịnh nên chức
năng iều phi tác v có tn sut hoạt ộng thp .
Để h thng hoạt ng tt, b iều phi tác v cn bit tính cht ca tiến trình
ớng nhập xuất (I/O bounded) hay hướng xử ( CPU bounded). Mt tiến
trình ược gi hướng nhập xuất nếu nó ch yếu ch s dụng CPU thc hin
các thao tác nhp xuất. Ngược li mt tiến trình ược gi hướng xử nếu
ch yếu ch s dụng CPU ể thc hiện các thao tác tính toán. Để cân bng hoạt
ng ca CPU các thiết b ngoi vi, b iều phi tác v nên la chn các tiến
lOMoARcPSD|41967345
37
trình ể np vào b nh sao cho h thng là s pha trn hp lý gia các tiến trình
hướng nhập xuất và các tiến trình hướng xử lý
b) Điều phối tiến trình
Chn mt tiến trình trng thái sn sàng (ã ược np vào b nh chính, và
tài nguyên hoạt ng) và cp phát CPU cho tiến trình ó thực hin. B iều
phi tiến trình có tn sut hoạt ng cao, sau mi ln xy ra ngt (do ng h báo
gi, do các thiết b ngoại vi...), thường 1 ln trong khong 100ms. Do vậy
nâng cao hiu sut ca h thng, cn phải tăng tốc x lý ca b iều phi tiến
trình. Chức năng iều phi tiến trình mt trong chc năng bản, quan trng
nht ca h iều hành.
Trong nhiu h iều hành,th không có b iều phi tác v hoc tách bit
rất ít i vi b iều phi tiến trình. Mt vài h iều hành lại ưa ra một cấp iều
phi trung gian kết hp c hai cấp ộ iều phi tác v và tiến trình.
Hình 3.8. Cấp ộ iều phi trung gian
3.2.3. Các chiến lược iều phối
3.2.3.1. Chiến lược FIFO
* Nguyên tắc: CPU ược cp phát cho tiến trình ầu tiên trong danh sách sn
sàng yêu cu, tiến trình ược ưa vào h thng sm nhất. Đây thuật toán
iều phi theo nguyên tắc c quyn. Một khi CPU ược cp phát cho tiến trình,
CPU ch ược tiến trình t nguyn gii phóng khi kết thúc x lý hay khi mt
yêu cu nhp/xut.
lOMoARcPSD|41967345
38
Hình 3.9. Điều phối FIFO
d:
Tiến trình
Thời iểm vào RL
Thi gian x
P1
0
24
P2
1
3
P3
2
3
Th t cp phát CPU cho các tiến trình là:
P1
P2
P3
0
‘24
27 30
Thi gian ch ợi ược x lý là 0 i vi P1, (24 -1) vi P2 (24+3-2) vi
P3. Thi gian ch trung bình là (0+23+25)/3 = 16 milisecondes.
* Thảo luận: Thi gian ch trung bình không ạt cc tiu, và biến ổi áng kể
i vi các giá tr v thi gian yêu cu x lý th t khác nhau ca các tiến trình
trong danh sách sn sàng. th xy ra hiện tượng tích y thời gian ch, khi
các tt c các tiến trình (có th yêu cu thi gian ngn) phi ch i mt tiến
trình có yêu cu thi gian dài kết thúc x lý.
Gii thuật nàyc bit không phù hp vi các h phân chia thi gian, trong
các h này, cn cho phép mi tiến trình ược cấp phát CPU ều n trong tng
khong thi gian.
3.2.3.2. Chiến lược phân phối xoay vòng (Round Robin)
lOMoARcPSD|41967345
39
* Nguyên tắc: Danh sách sẵn sàng ược x lý như mt danh sách vòng, b
iều phi lần lượt cp phát cho tng tiến trình trong danh sách mt khong thi
gian s dng CPU gi là quantum. Đây một gii thuật iều phi không c
quyn: khi mt tiến trình s dụng CPU ến hết thi gian quantum dành cho nó,
h iều hành thu hi CPU và cp cho tiến trình kế tiếp trong danh sách. Nếu tiến
trình b khóa hay kết thúc trước khi s dng hết thi gian quantum, h iều hành
cũng lập tc cp phát CPU cho tiến trình khác. Khi tiến trình tiêu th hết thời
gian CPU dành cho nó mà chưa hoàn tất, tiến trình ược ưa trở li vào cui danh
sách sẵn sàng ể ợi ược cấp CPU trong lượt kế tiếp.
* Ví d:
Hình 3.10. Điều phi Round Robin
lOMoARcPSD| 41967345
40
Tiến trình
Thời iểm vào RL
Thi gian x
P1
0
24
P2
1
3
P3
2
3
Nếu s dng quantum là 4 milisecondes, th t cp phát CPU s là:
P1
P2
P3
P1
P1
P1
P1
P1
0
‘4
7
10
14
18
22
26 30
Thi gian ch i trung bình s là (0+6+3+5)/3 = 4.66 milisecondes.
Nếu có n tiến trìh trong danh sách sn sàng và s dng quantum q, thì mi
tiến trình s ược cp phát CPU 1/n trong tng khong thi gian q. Mi tiến trình
s không phải ợi quá (n-1)q ơn vị thời gian trước khi nhn ược CPU cho lượt kế
tiếp.
* Thảo luận: Vấn áng quan tâm i vi gii thuật RR dài ca quantum.
Nếu thời lượng quantum quá s phát sinh quá nhiu s chuyển i gia các
tiến trình khiến cho vic s dng CPU kém hiu qủa. Nhưng nếu s dng
quantum quá ln s làm tăng thời gian hồi áp và giảm kh năng tương tác ca h
thng.
3.2.3.3. Điều phối với ộ ưu tiên
* Nguyên tắc: Mi tiến trình ược gán cho một ưu tiên tương ng, tiến
trình có ộ ưu tiên cao nhất s ược chọn cấp phát CPU ầu tiên. Độ ưu tiên th
ược ịnh nghĩa nội ti hay nh vào các yếu t bên ngoài. Độ ưu tiên nội ti s
dụng các ại lượng th o lường tính toán ưu tiên của tiến trình, d các
gii hn thi gian, nhu cu b nhớ… Độ ưu tiên cũng thể ược gán t bên
ngoài da vào các tiêu chun do h iều hành như tầm quan trng ca tiến trình,
loại người s dng s hu tiến trình…
lOMoARcPSD| 41967345
41
Gii thuật iều phi với ưu tiên thể theo nguyên tắc c quyn hay
không c quyn. Khi mt tiến trình ược ưa vào danh sách các tiến trình sẵn sàng,
ưu tiên của ược so sánh với ưu tiên của tiến trình hin hành ang xử lý.
Gii thuật iều phi với ộ ưu tiên và không ộc quyn s thu hi CPU t tiến trình
hin hành ể cp phát cho tiến trình mi nếu ộ ưu tiên của tiến trình này cao hơn
tiến trình hin hành. Mt gii thuật ộc quyn s ch ơn gin chèn tiến trình mi
vào danh sách sn sàng, tiến trình hin hành vn tiếp tc x lý hết thi gian
dành cho nó.
Ví dụ: ( ộ ưu tiên 1 > ộ ưu tiên 2> ộ ưu tiên 3)
Tiến trình
Thời iểm vào RL
Độ ưu tiên
Thi gian x
P1
0
3
24
P2
1
1
3
P3
2
2
3
S dng thut giải ộc quyn, th t cấp phát CPU như sau :
P1
P2
P3
0
‘24
27 30
S dng thut giải không ộc quyn, th t cấp phát CPU như sau :
P1
P2
P3
P1
0
‘1
4
7 30
* Thảo luận: Tình trng "ói CPU" (starvation) mt vấn chính yếu ca
các gii thut s dụng ưu tiên. Các giải thut này th các tiến trình
ưu tiên thấp ch i CPU hn. Để ngăn cản các tiến trình ưu tiên cao
chiếm dng CPU thi hn, b iều phi s gim dần ưu tiên ca c tiến trình
này sau mi ngắt ồng h. Nếu ộ ưu tiên của tiến trình này gim xung thấp hơn
lOMoARcPSD| 41967345
42
tiến trình ưu tiên cao thứ nhì, s xy ra s chuyn i quyn s dng CPU.
Quá trình này gi là s "lão hóa" (aging) tiến trình.
3.2.3.4. Chiến lược công việc ngắn nhất (Shortest-job-first SJF)
* Nguyên tắc: Đây là một trường hợp c bit ca gii thuật iều phi với
ưu tiên. Trong giải thut này, ưu tiên p ược gán cho mi tiến trình là nghịch ảo
ca thi gian x t tiến trình yêu cu : p = 1/t. Khi CPU ược t do, s
ược cp phát cho tiến trình yêu cu ít thi gian nhất kết thúc - tiến trình ngn
nht. Gii thuật này cũng có thể c quyền hay không ộc quyn. S chn la xy
ra khi mt tiến trình mới ược ưa vào danh ch sn sàng trong khi mt tiến
trình khác ang x . Tiến trình mi th s hu mt yêu cu thi gian s dng
CPU cho ln tiếp theo (CPU-burst) ngn hơn thi gian còn li mà tiến trình hin
hành cn x lý. Gii thuật SJF không c quyn s dng hoạt ng ca tiến trình
hin hành, trong khi gii thuật c quyn s cho phép tiến trình hin hành tiếp tc
x lý.
Ví d:
Tiến trình
Thời iểm vào RL
Thi gian x
P1
0
6
P2
1
8
P3
2
4
P4
3
2
S dng thut giải SJF ộc quyn, th t cấp phát CPU như sau:
P1
P4
P3
P2
0
6
8
12 20
S dng thut giải SJF không ộc quyn, th t cấp phát CPU như sau:
P1
P4
P1
P3
P2
lOMoARcPSD|41967345
43
0
3
5
8
12 20
* Thảo luận: Gii thut y cho phép ạt ược thi gian ch trung bình cc
tiểu. Khó khăn thực s ca gii thut SJF không th biết ược thi gian yêu cu
x còn li ca tiến trình ? Ch có th d oán giá trị này theo cách tiếp cn sau :
gi tn dài ca thi gian x lý ln th n,
n+1
giá tr d oán cho ln x
tiếp theo. Vi hy vng giá tr d oán sẽ gn ging vi các giá tr trước ó, có thể
s dng công thc:
n+1 = tn + (1- ) n
Trong công thc y,tn chứa ng thông tin gn nht;
n
chứa ng các
thông tin quá kh ược tích lũy. Tham số ( 0 1) kim soát trng s ca
hin ti gn hay quá kh ảnh hưởng ến công thc d ón.
3.2.3.5. Chiến lược iều phối với nhiều mức ộ ưu tiên
* Nguyên tắc: Ý tưởng chính ca gii thut phân lp các tiến trình tùy
theo ưu tiên của chúng cách thức iều phi thích hp cho tng nhóm. Danh
sách sẵn sàng ược phân tách thành các danh sách riêng bit theo cấp ộ ưu
tiên, mi danh sách bao gm các tiến trình có cùng ộ ưu tiên và ược áp dng
mt gii thuật iều phi thích hợp ể iều phi. Ngoài ra, còn có mt gii thut iều
phi giữa các nhóm, thường gii thut này là gii thuật không ộc quyn
và s dụng ộ ưu tiên cố nh. Mt tiến trình thuc v danh sách cấp ưu tiên i
s ch ược cp phát CPU khi các danh sách cấp ưu tiên lớn hơn i ã
trng.
lOMoARcPSD|41967345
44
Hình 3.11. Điều phối nhiều cấp ưu tiên
* Thảo luận: Thông thường, mt tiến trình s ược gán vĩnh viễn vi mt
danh sách cấp ưu tiên i khi ược ưa vào hệ thng. Các tiến trình không di
chuyn gia các danh sách. Cách t chc này s làm giảm chi phí iều phi, nhưng
lại thiếu linh ng và có th dẫn ến tình trạng " ói CPU" cho các tiến trình thuc
v những danh sách ưu tiên thấp. Do vy, th xây dng gii thuật iều
phi nhiu cấp ưu tiên xoay vòng. Giải thut này s chuyn dn mt tiến trình
t danh sách có ộ ưu tiên cao xuống danh sách có ưu tiên thấp hơn sau mỗi ln
s dụng CPU. Cũng vậy, mt tiến trình ch quá lâu trong các danh sách có ộ ưu
tiên thấp cũng thể ược chuyn dn lên các danh sách ưu tiên cao hơn.
Khi xây dựng mt gii thuật iều phi nhiu cấp ưu tiên và xoay vòng cần quyết
nh các tham s:
- S lượng các cấp ưu tiên.
- Gii thuật iều phi cho tng danh sách ng vi mt cấp ưu tiên.
- Phương pháp xác ịnh thời iểm di chuyn mt tiến trình lên danh sách
ưu tiên cao hơn.
- Phương pháp xác ịnh thời iểm di chuyn mt tiến trình lên danh sách
ưu tiên thấp hơn.
- Phương pháp sử dụng xác ịnh mt tiến trình mới ược ưa vào hệ thng
s thuc danh sách ng với ộ tiên nào.
lOMoARcPSD|41967345
45
Hình 3.12 Điều phối Multilevel Feedback
3.2.3.6. Chiến lược iều phối Xổ số (Lottery)
* Nguyên tắc: Ý tưởng chính ca gii thut phát hành mt s s
phân phi cho các tiến trình trong h thống. Khi ến thời iểm ra quyết nh iều phi,
s tiến hành chn 1 "trúng gii", tiến trình nào s hu này s ược nhn
CPU.
* Thảo luận: Gii thut Lottery cung cp mt giải pháp ơn giản nhưng bảo
m tính công bng cho thuật toán iều phi vi chi phí thấp cp nht ưu tiên
cho các tiến trình:
3.3. Tóm tắt
- Trong sut chu trình sng, tiến trình chuyển ổi qua li gia các trng thái
ready, running và blocked.
- B iều phi ca h iều hành chu trách nhim áp dng mt gii thut iều
phi thích hợp ể chn tiến trình thích hợp ược s dng CPU, và b phân phi s
chuyn giao CPU cho tiến trình này.
- Các gii thuật iều phi thông dng: FIFO, RoundRobin, iều phi vi
ưu tiên, SJF, Multilevel Feedback.
lOMoARcPSD|41967345
46
* Câu hỏi củng cố bài học
Các câu hi cn tr lời ược sau bài hc này:
1. Thông tin lưu trữ trong PCB và TCB?
2. T chức iều phi tiến trình?
3. Phân tích ưu, khuyết ca các chiến lược iều phi?
* Bài tập
Bài 1. Xét tp các tiến trình sau (vi thi gian yêu cầu CPU và ưu tiên
kèm theo):
Tiến trình
Thời iểm vào RL
Thi gian CPU
Độ ưu tiên
P
1
0
10
3
P
2
1
1
1
P
3
2
2
3
P
4
3
1
4
P
5
4
5
2
Gi s các tiến trình cùng ược ưa vào hệ thng ti thời iểm 0
a) Cho biết kết qu iều phi hoạt ng ca các tiến trình trên theo
thut toán FIFO; SJF; iều phối theo ưu tiên c quyền ( ưu tiên 1 > 2
> ...); và RR (quantum=2).
b) Cho biết thời gian lưu lại trong h thng (turnaround time) ca
tng
tiến trình trong tng thuật toán iều phi câu a.
c) Cho biết thi gian ch trong h thng (waiting time) ca tng tiến
trình trong tng thuật toán iều phi câu a.
d )Thuật toán iều phi nào trong các thut toán câu a cho thi gian
ch trung bình là cc tiu?
lOMoARcPSD|41967345
47
Bài 2. Gi s có các tiến trình sau trong h thng:
Tiến trình
Thời iểm vào RL
Thi gian CPU
P
1
0.0
8
P
2
0.4
4
P
3
1.0
1
S dng nguyên tắc iều phối ộc quyền và các thông tin có ược ti thi iểm
ra quyết ịnh ể tr li các câu hỏi sau ây:
a) Cho biết thời gian lưu lại trung bình trong h thng (turnaround
time)
ca các tiến trình trong thuật toán iều phi FIFO.
b) Cho biết thời gian lưu lại trung bình trong h thng (turnaround
time)
ca các tiến trình trong thuật toán iều phi SJF.
c) Thut toán SJF d nh ci tiến s thc hin ca h thng, nhưng
lưu ý chúng ta phi chọn iều phi P
1
ti thời iểm 0 vì không biết rng s
hai tiến trình ngắn hơn vào hệ thống sau ó. Th tính thời gian lưu lại trung
bình trong thng nếu CPU nhàn rỗi trong 1 ơn vị thời gian ầu tiên
sau ó sử dụng SJF iều phối. Lưu ý P
1
P
2
s phi ch trong sut thi
gian nhàn ri này, do vy thi gian ch của chúng tăng lên. Thuật toán iều
phối này ược biết ến như iều phi da trên thông tin v tương lai.
Bài 3. Phân bit s khác nhau trong cách tiếp cận ưu tiên cho tiến
trình ngn trong các thuật toán iều phi sau :
a) FIFO.
b) RR
c) Điều phi với ộ ưu tiên a cấp
lOMoARcPSD|41967345
48
Bài 4. Cho biết hai ưu iểm chính của mô hình a tiểu trình
so với a tiến trình. Mô t mt ng dng thích hp v mô hình a tiểu
trình và mt ng dng khác không thích hp.
Bài 5. t các x h iều hành phi thc hin khi
chuyển ổi ng cnh gia:
a) Các tiến trình
b) Các tiu trình
Bài 6. Xác ịnh thời lượng quantum qmt nhim v khó khăn. Giả s
chi phí trung bình cho mt ln chuyển i ng cnh s, thi gian trung bình
mt tiến trình hướng nhp xut s dụng CPU trước khi phát sinh mt yêu cu
nhp xut t ( t>>s). Tho luận các tác ộng ến s thc hin ca h thng khi
chn q theo các quy tc sau:
a) q bất ịnh
b) q lớn hơn 0 1 ít
c) q = s
d) s < q < t
e) q = t
f) q > t
Bài 7. Gi s mt h iều hành áp dng gii thuật iều phi multilevel
feedback vi 5 mức ưu tiên (giảm dn). Thời lượng quantum dành cho hàng i
cp 1 0,5s. Mỗi hàng i cp thấp hơn sẽ thời lượng quantum dài gp ôi hàng
i ng vi mức ưu tiên cao hơn . Mt tiến trình khi vào h thng s ược ưa
vào hàng i mc cao nht, chuyn dn xuống các hàng i bên dưới sau mỗi
lượt s dng CPU. Mt tiến trình ch th b thu hi CPU khi ã sử dng hết
thời lượng quantum dành cho nó. H thng có th thc hin các tác v x lý theo
lô hoặc tương tác, và mỗi tác v li có th hướng xhay hướng nhp xut.
a) Gii thích ti sao h thng này hoạt ộng không hiu qu?
b) Cn phải thayi (ti thiểu) như thế nào ể h thống iều phi các tác
lOMoARcPSD|41967345
49
v vi nhng bn cht khác biệt như thế tốt hơn?
Chương 4 LIÊN LẠC GIỮA CÁC TIẾN TRÌNH & VẤN ĐỀ
ĐỒNG BỘ HOÁ
Các tiến trình trên nguyên tắc hoàn toàn ộc lập, nhưng thực tế thể
như thế không? Chương này sẽ giới thiệu nội dung về lý do các tiến trình có nhu
cầu liên lạc, các cơ chế hỗ trợ việc liên lạc này cũng như những vấn ề ặt ra khi
các tiến trình trao ổi thông tin với nhau.
4.1. Liên lạc giữa các tiến trình
4.1.1. Nhu cầu liên lạc giữa các tiến trình
Trong môi trường a nhiệm, mt tiến trình không ơn c trong h thng,
có th ảnh hưởng ến các tiến trình khác, hoc b các tiến trình khác tác ộng. Nói
cách khác, các tiến trình nhng thc th c lp, nhưng chúng vn có nhu cu
liên lc với nhau ể:
- Chia sẻ thông tin: nhiu tiến trình có th cùng quan tâm ến nhng d liệu
nào ó, do vậy h iều hành cn cung cp một môi trường cho phép s truy cập
ng thời ến các d liu chung.
- Hợp tác hoàn thành tác vụ: ôi khi ạt ược mt s x lý nhanh chóng,
người ta phân chia mt tác v thành các công vic nh th tiến hành song
song. Thưng thì các công vic nh này cn hp tác với nhau cùng hoàn thành
tác v ban u, ví d d liu kết xut ca tiến trình này li d liu nhp cho tiến
trình khác Trong các trường hợp ó, hệ iều hành cn cung cấp cơ chế các tiến
trình có th trao ổi thông tin vi nhau.
4.1.2. Các vấn ề nảy sinh trong việc liên lạc giữa các tiến trình
Do mi tiến trình s hu một không gian a ch riêng bit, nên các tiến trình
không th liên lc trc tiếp d dàng mà phi nh vào các cơ chế do h iều hành
cung cp. Khi cung cấp chế liên lc cho các tiến trình, h iều hành thường
phi tìm gii pháp cho các vấn ề chính yếu sau:
lOMoARcPSD|41967345
50
- Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming): tiến
trình có cn phi biết tiến trình nào ang trao i hay chia s thông tin vi nó? Mi
liên kết ược gọi tường minh khi ược thiết lp ràng, trc tiếp gia các tiến
trình, tim n khi các tiến trình liên lc vi nhau thông qua mt quy ước
ngầm nào ó.
- Liên lạc theo chế ồng bộ hay không ồng bộ (blocking / nonblocking):
khi mt tiến trình trao ổi thông tin vi mt tiến trình khác, các tiến trình cn
phải i cho thao tác liên lc hoàn tt ri mi tiếp tc các x khác? Các tiến
trình liên lc theo chế ng b s ch nhau hoàn tt vic liên lc, còn các tiến
trình liên lạc theo cơ chế nonblocking thì không.
- Liên lạc giữa các tiến trình trong hệ thống tập trung hệ thống phân
tán: chế liên lc gia các tiến trình trong cùng mt máy tính s khác bit
vi vic liên lc gia các tiến trình gia nhng máy tính khác nhau?
Hu hết các h iều hành ưa ra nhiều cơ chế liên lc khác nhau, mỗi cơ chế
có những ặc tính riêng, và thích hp trong mt hoàn cnh chuyên bit.
4.2. Các cơ chế thông tin liên lạc
4.2.1. Tín hiệu (Signal)
* Giới thiệu: Tín hiu một chế phn mềm tương tự như các
ngắt cứng tác ộng ến các tiến trình. Mt tín hiệu ược s dụng thông báo cho
tiến trình v mt s kiện nào ó xảy ra. nhiu tín hiệu ược ịnh nghĩa, mỗi
mt tín hiu có một ý nghĩa tương ứng vi mt s kiện ặc trưng.
* Ví d : Mt s tín hiu ca UNIX
Tín hiệu
Mô tả
SIGINT
Người dùng nhấn phím DEL ể ngt x lý tiến trình
SIGQUIT
Yêu cu thoát x
lOMoARcPSD| 41967345
51
SIGILL
Tiến trình x lý mt ch th bt hp l
SIGKILL
Yêu cu kết thúc mt tiến trình
SIGFPT
Li floating point xy ra (chia cho 0)
SIGPIPE
Tiến trình ghi d liu vào pipe mà không có reader
SIGSEGV
Tiến trình truy xuất ến một ịa ch bt hp l
SIGCLD
Tiến trình con kết thúc
SIGUSR1
Tín hiu 1 do người dùng ịnh nghĩa
SIGUSR2
Tín hiệu 2 do người dùng ịnh nghĩa
Mi tiến trình s hu mt bng biu din các tín hiu khác nhau. Vi mi
tín hiu s tương ứng mt trình xn hiu (signal handler) quy nh các x
lý ca tiến trình khi nhận ược tín hiệu tương ứng.
Các tín hiệu ược gởi i bởi:
- Phn cng (ví d li do các phép tính s hc).
- Ht nhân h iều hành gởi ến mt tiến trình (ví d lưu ý tiến trình
khi có mt thiết b nhp/xut t do).
- Mt tiến trình gởi ến mt tiến trình khác (ví d tiến trình cha yêu
cu mt tiến trình con kết thúc).
lOMoARcPSD|41967345
52
- Người dùng (ví d nhn phím Ctl-C ể ngt x lý ca tiến trình)
Khi mt tiến trình nhn mt tín hiu, th x s theo mt trong các
cách sau:
- B qua tín hiu.
- X lý tín hiu theo kiu mặc ịnh.
- Tiếp nhn tín hiu và x lý theo cách ặc bit ca tiến trình.
Hình 4.1. Liên lc bng tín hiu
* Thảo luận: Liên lc bng n hiu mang tính cht không ồng bộ, nghĩa
mt tiến trình nhn tín hiu không th xác ịnh trước thời iểm nhn tính hiệu. Hơn
nữa các tiến trình không th kiểm tra ược s kiện tương ứng vi tín hiu có tht
s xy ra ? Cui cùng, các tiến trình ch có th thông báo cho nhau v mt biến
c nào ó, mà không trao ổi d liệu theo cơ chế này ược.
4.2.2. Pipe
* Giới thiệu: Mt pipe là mt kênh liên lc trc tiếp gia hai tiến trình:
d liu xut ca tiến trình y ược chuyển ến làm d liu nhp cho tiến trình kia
dưới dng mt dòng các byte.
Khi một pipe ược thiết lp gia hai tiến trình, mt trong chúng s ghi d
liu vào pipe tiến trình kia s c d liu t pipe. Th t d liu truyn qua
pipe ược bo toàn theo ngun tc FIFO. Một pipe kích thước gii hn
(thường là 4096 ký t)
lOMoARcPSD|41967345
53
Hình 4.2. Liên lc qua pipe
Mt tiến trình ch có th s dng mt pipe do nó to ra hay kế tha t tiến
trình cha. H iều hành cung cp các li gi h thng read/write cho các tiến trình
thc hiện thao tác ọc/ghi d liu trong pipe. H iều hành cũng chịu trách nhiệm
ng b hóa vic truy xut pipe trong các tình hung:
- Tiến trình ọc pipe s b khóa nếu pipe trng, nó s phải ợi ến khi pipe có
d liệu ể truy xut.
- Tiến trình ghi pipe s b khóa nếu pipe y, s phải ợi ến khi pipe
ch trống ể cha d liu.
* Thảo luận: Liên lc bng pipe một chế liên lc một chiều
(unidirectional), nghĩa là một tiến trình kết ni vi mt pipe chth thc hin
một trong hai thao tác ọc hoặc ghi, nhưng không thể thc hin c hai. Mt s h
iều hành cho phép thiết lp hai pipe gia mt cp tiến trình to liên lc hai
chiu. Trong nhng h thống ó, nguy xy ra tình trng tắc nghẽn
(deadlock): mt pipe b gii hn v kích thước, do vy nếu c hai pipe ni kết
hai tiến trình ều y (hoặc u trng) và c hai tiến trình ều muốn ghi (hayc) d
liu vào pipe (mi tiến trình ghi d liu vào mt pipe), chúng s cùng b khóa và
ch ln nhau mãi mãi.
Cơ chế này cho phép truyn d liu vi cách thc không cu trúc.
Ngoài ra, mt gii hn ca hình thc liên lc này ch cho phép kết ni
hai tiến trình có quan h cha-con, và trên cùng mt máy tính.
4.2.3. Vùng nhớ chia sẻ
* Giới thiệu: Cách tiếp cn của cơ chế này là cho nhiu tiến trình cùng truy
xuất ến mt vùng nh chung gi là vùng nhớ chia sẻ (shared memory). Không
có bt k hành vi truyn d liu nào cn phi thc hin ây, dữ liu ch ơn giản
ược ặt vào mt vùng nh mà nhiu tiến trình có th cùng truy cập ược.
lOMoARcPSD|41967345
54
Với phương thức này, các tiến trình chia s mt vùng nh vt lý thông qua
trung gian không gian ịa ch ca chúng. Mt vùng nh chia s tn tại c lp vi
các tiến trình, khi mt tiến trình mun truy xuất ến vùng nh y, tiến trình
phi kết gn vùng nh chung ó vào không gian a ch riêng ca tng tiến trình,
và thao tác trên ó như một vùng nh riêng ca mình.
Hình 4.3. Liên lc qua vùng nh chia s
* Thảo luận: Đây phương pháp nhanh nhất trao ổi d liu gia các tiến
trình. Nhưng phương thức này cũng làm phát sinh các khó khăn trong việc bảo
m s toàn vn d liu (coherence), ví d : làm sao biết ược d liu mà mt tiến
trình truy xut d liu mi nht tiến trình khác ã ghi? Làm thế nào ngăn
cản hai tiến trình cùng ồng thighi d liu vào vùng nh chung? ràng vùng
nh chia s cần ược bo v bng những cơ chế ng b hóa thích hp.
Mt khuyết iểm của phương pháp liên lc này không th áp dng hiu
qu trong các h phân tán, ể trao ổi thông tin gia các máy tính khác nhau.
4.2.4. Trao ổi thông iệp (Message)
* Giới thiệu: H iều hành còn cung cp một chế liên lc gia các tiến
trình không thông qua vic chia s mt tài nguyên chung, mà thông qua vic gởi
thông iệp. Để h tr chế liên lc bằng thông iệp, h iều hành cung cp các
hàm IPC chuẩn (Interprocess communication), cơ bản là hai hàm:
- Send (message): gi một thông iệp
- Receive (message): nhn một thông iệp
Nếu hai tiến trình P Q mun liên lc vi nhau, cn phi thiết lp mt
mi liên kết gia hai tiến trình, sau ó P, Q sử dng các hàm IPC thích hợp ể trao
ổi thông iệp, cui cùng khi s liên lc chm dt mi liên kết gia hai tiến trình
lOMoARcPSD|41967345
55
s b hy. Có nhiu cách thức ể thc hin s liên kết gia hai tiến trình và cài ặt
các theo tác send /receive tương ng: liên lc trc tiếp hay gián tiếp, liên lạc ồng
b hoặc không ồng bộ, kích thước thông iệp là c nh hay khôngNếu các tiến
trình liên lc theo kiu liên kết tường minh, các hàm Send và Receive s ược cài
t vi tham s:
- Send (destination, message) : gi một thông iệp ến destination
- Receive (source, message) : nhn một thông iệp t source
* Thảo luận: Đơn vị truyn thông tin trong cơ chế trao ổi thông iệp là một
thông iệp, do ó các tiến trình có th trao ổi d liu dng có cu trúc.
4.2.5. Sockets
* Giới thiệu: Mt socket mt thiết b truyn thông hai chiều tương tự
như tập tin, chúng ta có th c hay ghi lên nó, tuy nhiên mi socket là mt thành
phn trong mt mi nối nào ó giữa các máy trên mng máy tính và các thao tác
c/ghi chính là s trao ổi d liu gia các ng dng trên nhiu máy khác nhau.
S dng socket có th mô phỏng hai phương thức liên lc trong thc tế:
liên lạc thư tín (socket óng vai trò bưu cục) và liên lạc iện thoại (socket óng vai
trò tổng ài).
Các thuc tính ca socket:
- Domaine: ịnh nghĩa dạng thức a ch các nghi thc s dng.
Có nhiu domaines, ví d UNIX, INTERNET, XEROX_NS, ...
- Type: ịnh nghĩa các ặc iểm liên lc:
a) Sự tin cậy
b) Sự bảo toàn thứ tự dữ liệu
c) Lặp lại dữ liệu
d) Chế ộ nối kết
e) Bảo toàn giới hạn thông iệp
f) Khả năng gửi thông iệp khẩn
lOMoARcPSD|41967345
56
Để thc hin liên lc bng socket, cn tiến hành các thao tác:
- To lp hay m mt socket
- Gn kết mt socket vi một ịa ch
- Liên lc: có hai kiu liên lc tùy thuc vào chế ni kết:
a) Liên lạc trong chế ộ không liên kết: liên lc theo hình thc hp
thư:
- Hai tiến trình liên lc vi nhau không kết ni trc tiếp - Mỗi
thông iệp phải kèm theo ịa ch người nhn.
Hình thc liên lạc này có ặc iểm ược:
- Người gi không chc chắn thông iệp ca học ược gởi ến người
nhn,
- Một thông iệp có th ược gi nhiu ln;
- Hai thông iệp ượ gi theo mt th t nào ó thể ến tay người
nhn theo mt th t khác.
Mt tiến trình sau khi ã mở mt socket th s dụng liên lc vi
nhiu tiến trình khác nhau nh s hai primitive sendreceive.
b) Liên lạc trong chế ộ nối kết:
Mt liên kết ược thành lp gia hai tiến trình. Trước khi mi liên kết y
ược thiết lp, mt trong hai tiến trình phải ợi có mt tiến trình khác yêu cu kết
ni. Có th s dụng socket liên lc theo hình client-serveur. Trong hình
này, server s dng li gi h thng listen accept ni kết với client, sau ó,
client và server có th trao ổi thông tin bng cách s dng các primitive send và
receive. - Hy mt socket Ví d :
Trong nghi thc truyn thông TCP, mi mi ni giữa hai máy nh ược xác
nh bi mt port, khái nim port ây không phải là mt cng giao tiếp trên thiết
b vt lý mà ch là mt khái nim logic trong cách nhìn của người lp trình, mỗi
port ược tương ứng vi mt s nguyên dương.
lOMoARcPSD|41967345
57
Hình 4.4. Các socket và port trong mối nối TCP.
Hình 4.4 minh ha mt cách giao tiếp gia hai máy tính trong nghi thc
truyn thông TCP. Máy A to ra mt socket kết buc (bind) socket ny vi
mt port X (tc là mt s nguyên dương có ý nghĩa cục b trong máy A), trong
khi ó máy B tạo mt socket khác và móc vào (connect) port X trong máy A.
* Thảo luận: chế socket th s dụng chun hoá mi liên lc gia
các tiến trình vn không liên h vi nhau, th hoạt ng trong nhng h
thng khác nhau.
4.3. Nhu cầu ồng bộ hóa (synchronisation)
Trong mt h thng cho phép các tiến trình liên lc vi nhau, bao gi h
iều hành cũng cần cung cp kèm theo những chế ng b hóa bảo m hoạt
ng ca các tiến trình ồng hành không tác ng sai lệch ến nhau vì các lý do sau
ây:
4.3.1. Yêu cầu ộc quyền truy xuất (Mutual exclusion)
Các tài nguyên trong h thống ược phân thành hai loi: tài nguyên có th
chia s cho phép nhiu tiến trình ng thi truy xut, và tài nguyên không th chia
s ch chp nhn mt ( hay mt s lượng hn chế) tiến trình s dng ti mt thời
iểm. Tính không th chia s của tài nguyên thường ngun gc t một trong
hai nguyên nhân sau ây:
- Đặc tính cu to phn cng ca tài nguyên không cho phép chia
s.
- Nếu nhiu tiến trình s dụng tài ngun ồng thời, có nguy cơ xảy
ra các kết qu không d oán ược do hoạt ng ca các tiến trình trên tài nguyên
ảnh hưởng ln nhau.
lOMoARcPSD|41967345
58
Để gii quyết vấn , cn bảo ảm tiến trình c quyn truy xut tài ngun,
nghĩa là hệ thng phi kim soát sao cho ti mt thời iểm, chmt tiến trình
ược quyn truy xut mt tài nguyên không th chia s.
4.3.2. Yêu cu phi hp (Synchronization)
Nhìn chung, mối tương quan về tốc thc hin ca hai tiến trình trong h
thng là không th biết trước, vì iều này ph thuc vào nhiu yếu t ng như tần
sut xy ra các ngt ca tng tiến trình, thi gian tiến trình ược cp phát b x
lý… Có thể nói rng các tiến trình hoạt ộng không ng b vi nhau. Nhưng
nhng tình hung các tiến trình cn hp tác trong vic hoàn thành tác vụ, khi ó
cần phải ng b hóa hoạt ng ca các tiến trình, d mt tiến trình ch th
x lý nếu mt tiến trình khác ã kết thúc mt công việc nào ó…
4.3.3. Bài toán ồng bộ hoá
4.3.3.1. Vấn ề tranh oạt iều khiển (race condition)
Gi s hai tiến trình P
1
P
2
thc hin công vic ca các kế toán,
cùng chia s mt vùng nh chung lưu trữ biến taikhoan phn ánh thông tin
v tài khon. Mi tiến trình mun rút mt khon tin tienrut t tài khon:
if (taikhoan - tienrut >=0)
taikhoan = taikhoan - tienrut; else
error(« khong the rut tien ! »);
Gi s trong tài khon hin còn 800, P
1
mun rút 500 và P
2
mun rút 400.
Nếu xy ra tình huống như sau:
- Sau khi ã kiểm tra iều kin (taikhoan - tienrut >=0) và nhn
kết qu300, P
1
hết thi gian x lý mà h thng cho phép, h iều hành cp phát
CPU cho P
2
.
- P
2
kiểm tra cùng iều kin trên, nhận ược kết qu 400 (do P
1
vn chưa
rút tiền) và rút 400. Giá tr ca taikhoan ược cp nht li là 400.
- Khi P
1
ược tái kích hot tiếp tc x lý, s không kim tra lại iều
kin (taikhoan - tienrut >=0)-ã kiểm tra trong lượt x lý trước-
lOMoARcPSD| 41967345
59
thc hin rút tin. Giá tr ca taikhoan s lại ược cp nht thành -100. Tình
hung li xy ra.
Các tình huống tương tự như thế (có th xy ra khi nhiều hơn hai tiến
trình c và ghi d liu trên cùng mt vùng nh chung, và kết qu ph thuc vào
s iều phi tiến trình ca h thng) ược gi là các tình huống tranh oạt iều khin
(race condition) .
4.3.3.2. Miền găng (critical section)
Để ngăn chặn các tình hung li có th ny sinh khi các tiến trình truy xuất
ng thi mt tài nguyên không th chia s, cn phải áp t mt s truy xuất c
quyền trên tài nguyên ó: khi mt tiến trình ang sử dng tài nguyên, thì nhng
tiến trình khác không ược truy xuất ến tài nguyên.
Đoạn chương trình trong ó có khả năng xảy ra các mâu thun truy xut trên
tài nguyên chung ược gi miền găng (critical section). Trong d trên, oạn
mã:
if (taikhoan - tienrut >=0) taikhoan
= taikhoan - tienrut; ca mi tiến trình
to thành mt min găng.
Có th gii quyết vấn ề mâu thun truy xut nếu có th bảo m ti mt thời
iểm ch có duy nht mt tiến trình ược x lý lnh trong miền găng.
Một phương pháp giải quyết tt bài toán miền găng cần thõa mãn 4 iu kin
sau:
- Không có hai tiến trình cùng trong miền găng cùng lúc.
- Không gi thiết nào t ra cho s liên h v tốc ca các tiến trình,
cũng như về s lượng b x lý trong h thng.
- Mt tiến trình tm dng bên ngoài miền găng không ược ngăn cản các
tiến trình khác vào min găng.
- Không có tiến trình nào phi ch vô hạn ể ược vào miền găng.
4.4. Tóm tắt
lOMoARcPSD|41967345
60
- Mt s tiến trình trong h thng có nhu cầu trao ổi thông tin phi hp
hoạt ộng, do mi tiến trình có một không gian ịa ch c lp nên viêc liên lc ch
có th thc hiện thông qua các cơ chế do h iều hành cung cp.
- Mt s cơ chế trao ổi thông tin gia các tiến trình:
+ Tín hiệu: thông báo s xy ra ca mt s kin.
+ Pipe: truyn d liu không cu trúc.
+ Vùng nhớ chia sẻ: cho phép nhiu tiến trình truy cập ến cùng mt vùng
nh.
+ Trao ổi thông iệp: truyn d liu có cu trúc, th vn dng trong các
h phân tán
+ Socket : chun hoán vic liên lc gia các h thng khác bit
- Khi các tiến trình trao i thông tin, chia s tài nguyên chung, cn phi
ng b hoá hoạt ộng ca chúng ch yếu do yêu cầu ộc quyn truy xut hoc phi
hp hoạt ộng.
- Miền găng oạn lệnh trong chương trình khả năng phát sinh mâu
thun truy xuất. Để không xy ra mâu thun truy xut, cần ảm bo ti mt thời
iểm ch có mt tiến trình ược vào miền găng.
* Củng cố bài học
Các câu hi cn tr lời ược sau bài hc này:
1. Các cơ chế trao ổi thông tin : tình hung s dụng, ưu, khuyết?
2. Các yêu cầu ồng b hoá?
* Bài tập
Phân tích các bài toán sau ây và xác nh nhng yêu cầu ng b hoá, miền
găng:
Bài 1. Bài toán To phân t H
2
O
Đồng b hoạt ộng ca mt phòng thí nghim s dng nhiu tiến trình ồng
hành sau ể to các phân t H
2
O:
lOMoARcPSD|41967345
61
MakeH() // Mi tiến tr nh MakeH to 1 nguyŒn t H {
Make-Hydro();
}
MakeO() // Mi tiến tr nh MakeO to 1 nguyŒn t O {
Make-Oxy();
}
MakeWater() /* Tiến tr nh MakeWater hot ng ng h nh vi
cÆc tiến tr nh MakeH, MakeO, ch 2 H và 1 O to H
2
O */
{ wh
ile (T)
Make-Water(); //To 1 ph n t H
2
O
}
Bài 2. Bài toán Cây cầu cũ
Để tránh sụp ổ, người ta ch có cho phép tối a 3 xe lưu thông ồng thi qua
mt cây cu rất cũ. Hãy y dựng th tc ArriveBridge(int direction)
ExitBridge() kim soát giao thông trên cu sao cho:
- Ti mi thời iểm, ch cho phép tối a 3 xe lưu thông trên cu.
- Ti mi thời iểm, ch cho phép tối a 3 xe lưu thông cùng hướng
trên cu.
Mi chiếc xe khi ến ầu cu s gi ArriveBridge(direction) kim tra iều
kin lên cầu, và khi ã qua cầu ược s gi ExitBridge() báo hiu kết thúc.
Gi s hoạt ộng ca mi chiếc xe ược mô t bng mt tiến trình Car() sau
ây:
Car(int direction) /* direction xác nh hưng di chuyn ca
mi chiếc xe.*/
{
RuntoBridge(); // Đi v ph a cu
ArriveBridge(direction);
PassBridge(); // Qua cu
Exit Bridge();
RunfromBridge(); // Đã qua cu
}
lOMoARcPSD|41967345
62
Bài 3. Bài toán Qua sông
Để vượt qua sông, các nhân viên Microsof các Linux hacker cùng s
dng mt bến sông và phi chia s mt s thuyền ặc bit. Mi chiếc thuyn này
ch cho phép ch 1 lần 4 người, và phải 4 người mi khi hành ược. Để bảo
m an toàn cho c 2 phía, cn tuân th các lut sau:
a. Không chp nhn 3 nhân viên Microsoft và 1 Linux hacker trên cùng
mt chiếc thuyn.
b. Ngược li, không chp nhn 3 Linux hacker và 1 nhân viên Microsoft
trên cùng mt chiếc thuyn.
c. Tt c các trường hp kết hợp khác ều hp pháp.
d. Thuyn ch khởihành khi ã có ủ 4 hành khách.
Cn xây dng 2 th tc HackerArrives()EmployeeArrives() ược gọi
tương ứng bi 1 hacker hoc 1 nhân viên khi h ến b sông ể kim tra iều kin
cho phép h xung thuyn không? Các th tc y s sp xếp những người
thích hp th lên thuyn. Những người ã ược lên thuyn khi thuyền chưa y
s phi ch ến khi người th 4 xung thuyn mi th khi hành qua sông.
(Không quan m ến s lương thuyền hay vic thuyn qua sông ri tr lại… Xem
như luôn có thuyền ể sp xếp theo các yêu cu hp l).
Gi s hoạt ng ca mỗi hacker ược t bng mt tiến trình Hacker()
sau ây:
Hacker()
{
RuntoRiver(); // Đi ến b s ng
HackerArrives (); // Kim tra iu kin xung thuyn
CrossRiver(); // Khi h nh qua s ng
}
v hot ng ca mi nhân viên ưc m t bng mt tiến
tr nh Employee() sau ây:
Employee()
{
lOMoARcPSD|41967345
63
RuntoRiver(); // Đi ến b s ng
EmployeeArrives (); // Kim tra iu kin xung thuyn
CrossRiver(); // Khi h nh qua s ng }
Chương 5 CÁC GIẢI PHÁP ĐỒNG BỘ HOÁ
Chương này s gii thiu các gii pháp c th x bài toán ng b hoá.
Có nhiu giải pháp ể thc hin vic truy xut miền găng, các giải pháp y ược
phân bit thành hai lp tùy theo cách tiếp cn trong x lý ca tiến trình b khóa:
các gii pháp "busy waiting" và các gii pháp "sleep and wakeup".
5.1. Giải pháp “busy waiting”
5.1.1. Các giải pháp phần mềm
5.1.1.1. Sử dụng các biến cờ hiệu
* Tiếp cn: các tiến trình chia s mt biến chung óng vai trò "cht ca"
(lock), biến này ược khởi ộng là 0. Mt tiến trình mun vào miền găng trước tiên
phi kim tra giá tr ca biến lock. Nếu lock = 0, tiến trình ặt li giá tr cho lock
= 1 và i vào miền găng. Nếu lock ang nhận giá tr 1, tiến trình phi chn ngoài
miền găng cho ến khi lock có giá tr 0. Như vậy giá tr 0 ca lock mang ý nghĩa
không có tiến trình nào ang trong miền găng, lock=1 khi có mt tiến trình
ang ở trong miền găng.
while (TRUE) { while (lock == 1); // wait lock =
1; critical-section (); lock = 0;
Noncritical-section ();
}
lOMoARcPSD|41967345
64
Hình 5.1. Cấu trúc một chương trình
sử dụng biến khóa ể ồng bộ
* Tho lun: Gii pháp này có th vi phạm iều kin th nht: hai tiến trình
có th cùng trong miền găng tại mt thời iểm. Gi s mt tiến trình nhn thy
lock = 0 và chun b vào miền găng, nhưng trước khi nó có th t li giá tr cho
lock là 1, b tm dừng mt tiến trình khác hoạt ộng. Tiến trình th hai này
thy lock vn là 0 thì vào miền găng và t li lock = 1. Sau ó tiến trình th nhất
ược tái kích hot, gán lock = 1 ln na ri vào min ng. Như vậy ti thời
iểm ó cả hai tiến trình ều trong miền găng.
5.1.1.2. Sử dụng việc kiểm tra luân phiên
* Tiếp cận: Đây mt giải pháp ngh cho hai tiến trình. Hai tiến trình
này s dng chung biến turn (phn ánh phiên tiến trình nào ược vào min găng),
ược khởi ng vi gtr 0. Nếu turn = 0, tiến trình A ược vào min găng. Nếu
turn = 1, tiến trình A i vào một vòng lp ch ến khi turn nhn giá tr 0. Khi tiến
trình A ri khi miền găng, t giá tr turn v 1 cho phép tiến trình B i vào
miền găng.
while (TRUE) { while (turn != 0); //wait
critical-section (); turn = 1;
Noncritical-section ();
}
(a) Cu trúc tiến trình A
while (TRUE) { while (turn != 1); // wait
critical-section (); turn = 0;
Noncritical-section ();
}
(b) Cu trúc tiến trình B
Hình 5.2. Cấu trúc các tiến trình trong giải pháp kiểm tra
luân phiên
lOMoARcPSD| 41967345
65
* Tho lun: Gii pháp này da trên vic thc hin s kim tra nghiêm nhặt
ến lượt tiến trình nào ược vào miền găng. Do ó thể ngăn chặn ược tình
trng hai tiến trình cùng vào miền găng, nhưng lại th vi phm iều kin th
ba: mt tiến trình th b ngăn chặn vào miền găng bởi mt tiến trình khác
không trong miền găng. Giả s tiến trình B ra khi miền găng rất nhanh chóng.
C hai tiến trình ều ngoài miền găng, và turn = 0. Tiến trình A vào miền găng
ra khỏi nhanh chóng, t li giá tr ca turn 1, ri li x lý oạn lnh ngoài
miền găng lần nữa. Sau ó, tiến trình A li kết thúc nhanh chóng oạn lnh ngoài
miền găng của nó và mun vào miền găng một ln na. Tuy nhiên lúc này B vn
còn mãi x oạn lnh ngoài miền găng của mình, turn li mang giá tr 1.
Như vậy, gii pháp y không giá tr khi s khác bit ln v tốc thc
hin ca hai tiến trình, nó vi phm c iều kin th hai.
5.1.1.3. Giải pháp của Peterson
* Tiếp cn: Peterson ưa ra một gii pháp kết hợp ý tưởng ca c hai gii
pháp k trên. Các tiến trình chia s hai biến chung :
int turn; // ến phiŒn ai
int interesse[2]; // khi ng l FALSE
Nếu interesse[i] = TRUE nghĩa tiến trình Pi mun vào miền găng.
Khởi u, interesse[0]=interesse[1]=FALSE và giá tr của est ược khởi ng 0
hay 1. Để th vào ược miền găng, trước tiên tiến trình Pi t giá tr
interesse[i]=TRUE ( xác nh rng tiến trình mun vào miền găng), sau ó t
turn=j ( ề ngh th tiến trình khác vào miền găng). Nếu tiến trình Pj không quan
tâm ến vic vào miền găng (interesse[j]=FALSE), thì Pi th vào min găng,
nếu không, Pi phi ch ến khi interesse[j]=FALSE. Khi tiến trình Pi ri khi
miền găng, nó ặt li giá tr cho interesse[i]= FALSE.
lOMoARcPSD|41967345
66
while (TRUE) {
int j = 1-i; // j là tiến trình còn li
interesse[i]= TRUE; turn =
j;
while(turn == j &&interesse[j]==TRUE);
critical-section ();
interesse[i] = FALSE;
Noncritical-section ();
}
Hình 5.3. Cu trúc tiến trình Pi trong gii pháp Peterson
* Tho lun: giải pháp này ngăn chặn ược tình trng mâu thun truy xut:
mi tiến trình Pi ch có th vào miền găng khi interesse[j]=FALSE hoc turn =
i. Nếu c hai tiến trình u mun vào miền găng thì interesse[i] = interesse[j]
=TRUE nhưng giá trị ca turn ch có th hoc là 0 hoc là 1, do vy ch có mt
tiến trình ược vào miền găng.
5.1.2. Các giải pháp phần cứng
5.1.2.1. Cấm ngắt
* Tiếp cn: cho phép tiến trình cm tt c các ngắt trước khi vào min găng,
và phục hi ngt khi ra khi miền găng. Khi ó, ngắt ng h cũng không xy ra,
do vy h thng không th tm dng hoạt ộng ca tiến trình ang xử cp phát
CPU cho tiến trình khác, nh ó tiến trình hin hành yên tâm thao tác trên miền
găng mà không sợ b tiến trình nào khác tranh chp.
* Tho lun: giải pháp này không ược ưa chuộng vì rt thiếu thn trng khi
cho phép tiến trình người dùng ược phép thc hin lnh cm ngắt. Hơn na, nếu
h thng nhiu b x lý, lnh cm ngt chtác dng trên b x lý ang xử
tiến trình, còn các tiến trình hoạt ng trên các b x khác vn th truy
xuất ến miền găng.
5.1.2.2. Chỉ thị TSL (Test-and-Set)
lOMoARcPSD|41967345
67
* Tiếp cận: ây một giải pháp òi hỏi s tr giúp của chế phn cng.
Nhiu máy tính cung cp mt ch th c bit cho phép kim tra cp nht ni
dung mt vùng nh trong mt thao tác không th phân chia, gi ch th Test-
and-Set Lock (TSL) và ược ịnh nghĩa như sau:
Test-and-Setlock(boolean target)
{
Test-and-Setlock = target; target
= TRUE;
}
Nếu có hai ch th TSL x lý ng thi (trên hai b x lý khác nhau), chúng
s ược x tun t. Có th cài t gii pháp truy xuất c quyn vi TSL bng
cách s dng thêm mt biến lock, ược khi gán là FALSE. Tiến trình phi kim
tra giá tr ca biến lock trước khi vào miền găng, nếu lock = FALSE, tiến trình
có th vào miền găng.
while (TRUE) {
while (Test-and-Setlock(lock)); critical-section
(); lock = FALSE;
Noncritical-section ();
}
Hình 5.4. Cấu trúc một chương trình trong giải pháp TSL
* Tho lun: cũng giống như các giải pháp phn cng khác, ch th TSL
gim nh công vic lập trình ể gii quyết vấn ể, nhưng lại không d dàng cài t
ch th TSL sao cho ược x mt cách không th phân chia, nht trên máy
vi cu hình nhiu b x lý.
Tt c các giải pháp trên âyu phi thc hin mt vòng lặp ể kim tra liệu
nó có ược phép vào miềnng, nếu iều kiện chưa cho phép, tiến trình phi ch
tiếp tc trong vòng lp kim tra này. Các gii pháp buc tiến trình phi liên tc
kiểm tra iều kiện ể phát hin thời iểm thích hợp ược vào miền găng như thế ược
gi các gii pháp "busy waiting". Lưu ý rng vic kiểm tra như thế tiêu th rt
lOMoARcPSD|41967345
68
nhiu thi gian s dng CPU, do vy tiến trình ang chờ vn chiếm dụng CPU.
Xu hướng gii quyết vấn ề ng b hoá là nên tránh các gii pháp "busy waiting".
5.2. Các giải pháp “SLEEP and WAKEUP”
Để loi b các bt tin ca gii pháp "busy waiting", chúng ta th tiếp
cận theo hướng cho mt tiến trình chưa iều kin vào miền găng chuyển sang
trng thái blocked, t b quyn s dụng CPU. Để thc hiện iều này, cn phi s
dng các th tc do h iều hành cung cấp ể thay ổi trng thái tiến trình. Hai th
tục cơ bản SLEEPWAKEUP thường ược s dụng ể phc v mục ích này.
SLEEP mt li gi h thng tác dng tm dng hoạt ng ca tiến
trình (blocked) gi nó và ch ến khi ược mt tiến trình khác "ánh thc". Li gi
h thng WAKEUP nhn mt tham s duy nht: tiến trình s ược tái kích hoạt
( ặt v trng thái ready).
Ý tưởng s dụng SLEEP và WAKEUP như sau: khi mt tiến trình chưa ủ
iều kin vào miền găng, gọi SLEEP t khóa ến khi mt tiến trình khác
gi WAKEUP gii phóng cho nó. Mt tiến trình gi WAKEUP khi ra khi miền
găng ánh thức mt tiến trình ang chờ, tạo hội cho tiến trình này vào miền
găng:
int busy; // 1 nếu min găng ang b chiếm, nếu kh ng l 0
int blocked; // ếm s ng tiến trình ang b kh a while
(TRUE) { if (busy){ blocked = blocked + 1;
sleep();
} else busy =
1; critical-section ();
busy = 0; if(blocked){
wakeup(process);
blocked = blocked - 1;
}
Noncritical-section ();
}
Hình 5.5. Cấu trúc chương trình trong giải pháp SLEEP and WAKEUP
lOMoARcPSD|41967345
69
Khi s dng SLEEP và WAKEUP cn hết sc cn thn, nếu không mun
xy ra tình trng mâu thun truy xut trong mt vài tình huống c biệt như sau:
gi s tiến trình A vào miền găng, và trước khi ri khi miền găng thì tiến
trình B ược kích hot. Tiến trình B th vào miền găng nhưng nhận thấy A ang
trong ó, do vậy B tăng giá trị biến blocked chun b gi SLEEP t khoá.
Tuy nhiên trước khi B có th thc hin SLEEP, tiến trình A li ược tái kích hot
và ra khi miền găng. Khi ra khỏi miền găng A nhận thy có mt tiến trình ang
chờ (blocked=1) nên gi WAKEUP và gim giá tr ca blocked. Khi ó tín hiệu
WAKEUP s lc mt do tiến trình B chưa thật s « ng » nhn tín hiệu ánh
thức. Khi tiến trình B ược tiếp tc x, nó mi goi SLEEPt khó vĩnh viễn.
Vấn ề ghi nhận ược là tình trng li này xy ra do vic kiểm tra tư cách vào
miền găng và việc gi SLEEP hay WAKEUP là những hành ộng tách bi, có th
b ngt na chng trong quá trình x lý, do ó có khi tín hiệu WAKEUP gởi ến
mt tiến trình chưa bị khóa s lc mt.
Để tránh nhng tình huống tương tự, h iều hành cung cp những chế
ng b hóa dựa trên ý tưởng ca chiến lược "SLEEP and WAKEUP" nhưng ược
xây dng bao hàm c phương tin kiểm tra iều kin vào min găng giúp sử dng
an toàn.
5.2.1. Semaphore
* Tiếp cận: Được Dijkstra xut vào 1965, mt semaphore s là mt biến
có các thuc tính sau:
- Mt giá tr nguyên dương e(s).
- Một hàng i f(s) lưu danh sách các tiến trình ang bị khóa (ch)
trên semaphore s.
- Ch có hai thao tác ược ịnh nghĩa trên semaphore.
Down(s): gim giá tr ca semaphore s i 1 ơn vị nếu semaphore tr e(s)
> 0, và tiếp tc x . Ngược li, nếu e(s) 0, tiến trình phi ch ến khi e(s) >0.
Up(s): tăng giá trị ca semaphore s lên 1 ơn vị. Nếu mt hoc nhiu
tiến trình ang chờ trên semaphore s, b khóa bi thao tác Down, thì h thng s
lOMoARcPSD|41967345
70
chn mt trong các tiến trình này kết thúc thao tác Down cho tiếp tc x
lý.
Hình 5.6. Semaphore s
* Cài ặt: Gi p là tiến trình thc hin thao tác Down(s) hay Up(s).
Down(s):
e(s) = e(s) - 1; if
e(s) < 0
{ status(P)=
blocked;
enter(P,f(s)); }
Up(s): e(s) = e(s)
+ 1; if s 0 {
exit(Q,f(s)); //Q l tiến trình ang ch trŒn s
status (Q) = ready; enter(Q,ready-list);
}
Lưu ý cài ặt này có th ưa ến mt giá tr âm cho semaphore, khi ó trị tuyt
i ca semaphore cho biết s tiến trình ang chờ trên semaphore.
Điều quan trng là các thao tác này cn thc hin mt cách không b phân
chia, không b ngt na chừng, nghĩa không một tiến trình nào ược phép
truy xuất ến semaphore nếu tiến trình ang thao tác trên semaphore này chưa kết
thúc x lý hay chuyn sang trng thái blocked.
S dng: có th dùng semaphore ể gii quyết vấn ề truy xuất c quyn hay
t chc phi hp gia các tiến trình.
- Tchức truy xuất ộc quyền với Semaphores: khái nim semaphore cho
phép bảo m nhiu tiến trình cùng truy xuất ến miền găng mà không có sự mâu
thun truy xut. n tiến trình cùng s dng mt semaphore s, e(s) ược khi gán
lOMoARcPSD|41967345
71
1. Để thc hiện ng b hóa, tt c các tiến trình cn phi áp dng cùng cấu trúc
chương trình sau ây:
while (TRUE)
{ Down(s)
critical-section
(); Up(s)
Noncriticalsection
();
}
Hình 5.7. Cu trúc một chương trình
trong gii pháp semaphore
- Tổ chức ồng bộ hóa với Semaphores: vi semaphore th ng b hóa
hoạt ộng ca hai tiến trình trong tình hung mt tiến trình phải ợi mt tiến trình
khác hoàn tất thao tác nào ó mới th bắt u hay tiếp tc x lý. Hai tiến trình
chia s mt semaphore s, khi gán e(s) 0. C hai tiến trình có cấu trúc như sau:
P1:
while (TRUE)
{ job1();
Up(s); // ánh thc
P2 } P2: while
(TRUE) { Down(s);
// ch P1 job2();
}
Hình 5.8. Cấu trúc chương trình trong giải pháp semaphore
* Tho lun: Nh có thc hin mt các không th phân chia, semaphore ã
giải quyết ược vấn ề tín hiệu " ánh thức" b tht lc. Tuy nhiên, nếu lp trình viên
tình t các primitive Down Up sai v trí, th t trong chương trình, thì
tiến trình có th b khóa vĩnh vin.
Ví d :
while (TRUE) {
Down(s) critical-section
();
lOMoARcPSD|41967345
72
Noncritical-section ();
}
Tiến trình trên ây quên gọi Up(s), kết qu khi ra khi miền găng
s không cho tiến trình khác vào miền găng.
thế vic s dụng úng cách semaphore ng b hóa ph thuc hoàn toàn
vào lập trình viên và òi hỏi lp trình viên phi hết sc thn trng.
5.2.2. Monitors
* Tiếp cận: Để th d viết úng các chương trình ng b hóa hơn,
Hoare(1974) và Brinch & Hansen (1975) ã ề ngh một cơ chế cao hơn ược cung
cp bi ngôn ng lp trình, là monitor. Monitor là mt cấu trúc ặc bit bao gm
các th tc, các biến và cu trúc d liu có các thuc tính sau:
- Các biến cu trúc d liu bên trong monitor ch th ược thao tác
bi các th tục ịnh nghĩa bên trong monitor ó. (encapsulation).
- Ti mt thời iểm, ch mt tiến trình duy nhất ược hoạt ộng bên trong
mt monitor (mutual exclusive).
- Trong mt monitor, th ịnh nghĩa các biến iều kiện hai thao tác kèm
theo là Wait Signal như sau: gi c biến iều kiện ược nh nghĩa trong
monitor:
+ Wait(c): chuyn trng thái tiến trình gi sang blocked, và ặt tiến trình
này vào hàng ợi trên biến iều kin c.
+ Signal(c): nếu có mt tiến trình ang bị khóa trong ng i ca c, tái
kích hot tiến trình ó, và tiến trình gi s ri khi monitor.
lOMoARcPSD|41967345
73
Hình 5.9. Monitor và các biến iều kin
* Cài t: trình biên dch chu trách nhim thc hin vic truy xuất
c quyền ến d liệu trong monitor. Để thc hiện iều này, mt semaphore nh
phân thường ược s dng. Mi monitor một hàng i toàn cục lưu các tiến
trình ang chờ ược vào monitor, ngoài ra, mi biến iều kin c cũng gn vi một
hàng ợi f(c) và hai thao tác trên ó ược ịnh nghĩa như sau:
Wait(c) :
status(P)= blocked;
enter(P,f(c));
Signal(c) :
if (f(c) != NULL){
exit(Q,f(c)); //Q l tiến tr nh ch trŒn c
statusQ) = ready; enter(Q,ready-list);
}
* S dng: Vi mi nhóm tài nguyên cn chia s, có th ịnh nghĩa
một monitor trong ó c t tt c các thao tác trên tài nguyên này vi mt s iều
kiện nào ó.:
monitor <tŒn monitor > condition <danh sÆch cÆc biến
iu kin>;
<dØclaration de variables>;
lOMoARcPSD|41967345
74
procedure Action
1
(); {
} ....
procedure Action
n
();
{
} end monitor;
Hình 5.10. Cu trúc mt monitor
Các tiến trình mun s dng tài ngun chung này ch th thao tác
thông qua các th tục bên trong monitor ược gn kết vi tài nguyên:
while (TRUE) { Noncritical-section ();
<monitor>.Actioni; //critical-section();
Noncritical-section ();
}
Hình 5.11. Cu trúc tiến trình Pi
trong gii
pháp monitor
* Tho lun: Vi monitor, vic truy xuất c quyền ược bảo m bi trình
biên dch không do lp trình viên, do vậy nguy thực hiện ng b hóa sai
gim rt nhiu. Tuy nhiên giải pháp monitor òi hỏi phi mt ngôn ng lập
trình ịnh nghĩa khái niệm monitor, và các ngôn ng như thế chưa có nhiu.
5.2.3. Trao ổi thông iệp
* Tiếp cn: gii pháp này dựa trên cơ sở trao ổi thông iệp vi hai primitive
Send và Receive ể thc hin s ng b hóa:
- Send(destination, message): gi một thông iệp ến mt tiến
trình hay gi vào hộp thư.
- Receive(source, message): nhn một thông iệp t mt tiến trình
hay t bt k mt tiến trình nào, tiến trình gi s ch nếu không có thông iệp nào
nhn.
* S dng: nhiu cách thức thc hin vic truy xuất c quyn bằng
chế trao ổi thông iệp. Đây một hình ơn giản: mt tiến trình kim soát
vic s dng tài nguyên nhiu tiến trình khác yêu cu tài nguyên này. Tiến
trình có yêu cu tài nguyên s gi một thông iệp ến tiến trình kim soát và sau ó
chuyển sang trạng thái blocked cho ến khi nhận ược mt thông iệp chp nhn
cho truy xut t tiến trình kim soát tài nguyên. Khi s dng xong tài nguyên,
lOMoARcPSD|41967345
75
tiến trình gi một thông iệp khác ến tiến trình kim soát báo kết thúc truy xut.
V phn tiến trình kim soát, khi nhận ược thông iệp yêu cu tài nguyên, s
ch ến khi tài nguyên sẵn sàng ể cp phát thì gi một thông iệp ến tiến trình ang
bị khóa trên tài nguyên ó ể ánh thức tiến trình này.
while (TRUE) {
Send(process controler, request message); Receive(process
controler, accept message); critical-section ();
Send(process controler, end message);
Noncritical-section ();
}
Hình 3.16. Cu trúc tiến trình yêu cu tài
nguyên trong gii pháp message
Tho lun: Các primitive semaphore monitor th gii quyết ược
vấn truy xuất c quyn trên các máy tính mt hoc nhiu b x lý chia s
mt vùng nh chung. Nhưng các primitive không hữu dng trong các h thng
phân tán, khi mi b x s hu mt b nh riêng bit liên lc thông qua
mng. Trong nhng h thống phân tán như thế, cơ chế trao ổi thông iệp t ra hu
hiệu và ược dùng ể gii quyết bài toán ồng b hóa.
5.3. Vấn ề ồng bộ hoá
5.3.1. Vấn ề Người sản xuất – Người tiêu thụ (Producer - Consumer)
* Vấn : hai tiến trình cùng chia s mt b ệm có kích thước gii hn. Mt
trong hai tiến trình óng vai trò người sn xut to ra d liệu t d liu vào
b m - và tiến trình kia óng vai trò người tiêu th ly d liu t b m ra x
lý.
lOMoARcPSD|41967345
76
Hình 5.12 Producer và Consumer
Để ng b a hoạt ộng ca hai tiến trình sn xut tiêu th cn tuân th các
quy ịnh sau:
- Tiến trình sn xuất (producer) không ược ghi d liu vào b ệm ã y
(synchronisation).
- Tiến trình tiêu th (consumer) không ược ọc d liu t b ệm ang trng
(synchronisation).
- Hai tiến trình sn xut và tiêu th không ược thao tác trên b m
cùng lúc (exclusion mutuelle).
Giải pháp:
5.3.1.1. Semaphore
S dng ba semaphore: full, ếm s ch ã dữ liu trong b m; empty,
ếm s ch còn trng trong b m; mutex, kim tra vic Producer Consumer
không truy xuất ồng thời ến b m.
BufferSize = 3; // s ch trong b m
semaphore mutex = 1; // kim soÆt truy xut c quyn
semaphore empty = BufferSize; // s ch trng
semaphore full = 0; // s ch y
Producer() { int item; while (TRUE)
{ produce_item(&item); // to
d liu mi down(&empty);
// gim s ch trng down(&mutex);
// bÆo hiu v o min găng
enter_item(item); // t d liu v
lOMoARcPSD| 41967345
77
o b m up(&mutex); //
ra khi min găng up(&full);
// tăng s ch y
}
}
Consumer()
{ int
item;
while (TRUE) {
down(&full);
// gim s ch y
down(&mutex);
// bÆo hiu v o min găng
remove_item(&item);
// ly d liu t b m
up(&mutex);
// ra khi min găng
up(&empty);
// tăng s ch trng
consume_item(item);
}
}
// x l d liu
5.3.1.2. Monitor
Định nghĩa một monitor ProducerConsumer vi hai th tc enter
remove thao tác trên b m. X ca các th tc y ph thuc vào các biến
iều kin fullempty.
monitor ProducerConsumer
condition full, empty;
int count; procedure
enter();
{
if (count == N)
wait(full); // nếu b m y, phi ch
enter_item(item); // t d liu v o b m count
++; // tăng s ch y if (count == 1)
// nếu b m kh ng trng signal(empty); //
th k ch hot Consumer
}
procedure remove();
{
if (count == 0)
wait(empty)
// nếu b m trng, ch
remove_item(&item);
// ly d liu t b m
count --;
// gim s ch y
lOMoARcPSD| 41967345
78
if (count == N-1)
// nếu b m không y
signal(full);
} count
= 0;
// th k ch hot Producer
end monitor;
Producer();
{
while (TRUE)
{
produce_item(&item);
ProducerConsumer.enter;
}
}
Consumer();
{
while (TRUE)
{
ProducerConsumer.remove;
consume_item(item);
}
}
5.3.1.3. Trao ổi thông iệp
Thông iệp empty hàm ý mt ch trng trong b m. Tiến trình Consumer
bắt u công vic bng cách gởi 4 thông iệp empty ng Producer. Tiến trình
Producer to ra mt d liu mi và ch ến khi nhn ược mt thông iệp empty thì
gửi ngược li cho Consumer một thông iệp cha d liu. Tiến trình Consumer
ch nhận thông iệp cha d liu, sau khi x lý xong d liu này, Consumer
s li gi một thông iệp empty ến Producer, ...
BufferSize = 4;
Producteur()
{ int
item;
message m; // thông ip
while (TRUE)
{ produce_item(&item);
receive(consumer,&m);
// ch thông ip empty
lOMoARcPSD|41967345
79
create_message(&m, item);
// to thông ip d liu
send(consumer,&m);
Consumer
}
}
// gi d liu ến
Consumer()
{ int
item;
message m;
for(0
to N)
send(producer, &m); // gi N thông ip empty
while (TRUE) {
receive(producer, &m); // ch thông ip d liu
remove_item(&m,&item);// ly d liu t thông ip
send(producer, &m); // gi thông ip empty
consumer_item(item); // x l d liu
}
}
5.3.2. Mô hình Readers-Writers
* Vấn ề: Nhiu tiến trình ồng thi s dng một cơ sở d liu. Các tiến trình
ch cn ly ni dung của sở d liệu ược gi các tiến trình Reader, nhưng
một s tiến trình khác li có nhu cu sửa ổi, cp nht d liệu trong cơ s d liệu
chung này, chúng ược gi là các tiến trình Writer. Các quy ịnh ng b hóa vic
truy xuất cơ sỡ d liu cn tuân th là:
- Không cho phép mt tiến trình Writer cp nht d liệu trong sở d
liu khi các tiến trình Reader khác ang truy xuất nội dung cơ sở d liu..
(synchronisation)
- Ti mt thời iểm , ch cho phép mt tiến trình Writer ược sửa i ni dung
cơ sở d liu. (mutuelle exclusion).
* Giải pháp:
5.3.2.1. Semaphore
lOMoARcPSD| 41967345
80
S dng mt biến chung rc ghi nh s lượng các tiến trình Reader mun
truy xuất sở d liệu. Hai semaphore cũng ược s dng: mutex, kim soát s
truy cập ến rc; db, kim tra s truy xuất ộc quyền ến cơ sở d liu.
semaphore mutex = 1; // Kim tra truy xut rc
semaphore db = 1; // Kim tra truy xut cơ s d liu
int rc; // S ng tiến tr nh Reader
Reader()
{
while (TRUE) {
down(&mutex); // gi nh quyn truy xut rc rc
= rc + 1; // thŒm một tiến tr nh Reader if (rc
== 1) // nếu Reader ầu tiŒn th down(&db);
// cm Writer truy xut d liu up(&mutex); //
chm dt truy xut rc read_database(); // c d
liu down(&mutex); // gi nh quyn truy xut rc
rc = rc - 1; // bt mt tiến tr nh Reader if
(rc == 0) // nếu l Reader cui cøng th up(&db);
// cho phØp Writer truy xut db
up(&mutex); // chm dt truy xut rc
use_data_read();
}
}
Writer()
{
while (TRUE)
{ create_data();
down(&db); // gi nh quyn truy xut db
write_database(); // cp nht d liu
up(&db); // chm dt truy xut db
}
}
5.3.2.2. Monitor
S dng mt biến chung rc ghi nh s lượng các tiến trình Reader mun
truy xuất sở d liu. Mt tiến trình Writer phi chuyn sang trng thái ch
nếu rc > 0. KHi ra khi miền găng, tiến trình Reader cui cùng s ánh thc tiến
trình Writer ang bị khóa.
lOMoARcPSD| 41967345
81
monitor ReaderWriter
condition OKWrite, OKRead;
int rc = 0;
Boolean busy = false;
procedure BeginRead()
{
if (busy) // nếu db ang bn, ch
wait(OKRead); rc++; // thŒm
mt Reader signal(OKRead);
}
procedure FinishRead()
{
rc--; // bt mt Reader
if (rc == 0) // nếu l Reader cui cøng
signal(OKWrite); // th cho phØp Writer
}
procedure BeginWrite()
{
// truy xut db
if (busy || rc != 0)
// nếu db ang bn, hay mt
wait(OKWrite);
busy = true;
}
procedure FinishWrite()
{
busy = false;
If (OKRead.Queue)
signal(OKRead);
else
signal(OKWrite);
}
Reader()
{
// Reader ang c db,ch
while (TRUE)
{
ReaderWriter.BeginRead();
Read_database();
ReaderWriter.FinishRead();
}
}
lOMoARcPSD|41967345
82
Writer()
{
while (TRUE)
{
create_data(&info);
ReaderWriter.BeginWrite();
Write_database();
ReaderWriter.FinishWrite();
}
}
5.3.2.3. Trao ổi thông iệp
Cn có mt tiến trình server iều khin vic truy xuất cơ sở d liu.
Các tiến trình Writer Reader gửi các thông ip yêu cu truy xuất ến
server và nhn t server các thông iệp hồi áp tương ứng.
Reader()
{
while (TRUE) { send
(server, RequestRead);
receive (server, value);
print(value); }
}
Writer()
{
while (TRUE)
{ create_data(&value);
send (server, RequestWrite,value);
receive (server,OKWrite); }
}
5.4. Tắc nghẽn (Deadlock)
5.4.1. Định nghĩa
Mt tp hp các tiến trình ược ịnh nghĩa trong tình trng tắc nghẽn khi
mi tiến trình trong tp hợp ều ch i mt s kin mà ch có mt tiến trình khác
trong tp hp mi có th phát sinh ược.
Nói cách khác, mi tiến trình trong tp hợp u ch ược cp phát mt tài
nguyên hiện ang bị mt tiến trình khác cũng trng thái blocked chiếm giữ. Như
lOMoARcPSD|41967345
83
vậy không có tiến trình nào có th tiếp tc x , cũng như giải phóng tài ngun
cho tiến trình khác s dng, tt c các tiến trình trong tp hợp u b khóa vĩnh
viễn.
Vấn ề Bữa ăn tối của các triết gia: 5 nhà triết hc cùng ngồi ăn tối vi món
spaghetti ni tiếng. Mi nhà triết hc cn dùng 2 cái dĩa th ăn spaghetti.
Nhưng trên bàn chỉtng cng 5 cái dĩa xen k với 5 cái ĩa. Mi nhà triết hc
s suy ngm các triết của mình ến khi cm thấy ói thì dự nh lần lượt cm 1
cái dĩa bên trái 1 cái dĩa bên phải ăn. Nếu c 5 nhà triết học ều cm cái dĩa
bên trái cùng lúc, thì s không ai ược cái dĩa bên phải th bắt ầu thưởng
thc spaghetti. Đây chính là tình trạng tắc nghẽn.
Hình 5.13. Bữa ăn tối ca các triết gia
5.4.2. Điều kiện xuất hiện tắc nghẽn
Coffman, Elphick và Shoshani ã ưa ra 4 iều kin cn th làm xut hin
tc nghn:
* s dng tài nguyên không th chia s (Mutual exclusion): Mi thi
iểm, mt tài nguyên không th chia s ược h thng cp phát ch cho mt tiến
trình , khi tiến trình s dng xong tài nguyên này, h thng mi thu hi cp
phát tài nguyên cho tiến trình khác.
lOMoARcPSD|41967345
84
* S chiếm gi yêu cu thêm tài nguyên (Wait for): Các tiến trình tiếp
tc chiếm gi c tài nguyên ã cấp phát cho nó trong khi ch ược cp phát thêm
mt s tài nguyên mi.
* Không thu hi tài nguyên t tiến trình ang giữ chúng (No preemption):
Tài nguyên không th ược thu hi t tiến trình ang chiếm gi chúng trước khi
tiến trình này s dng chúng xong.
* Tn ti mt chu k trong ồ th cp phát tài nguyên ( Circular wait): có ít
nht hai tiến trình ch i ln nhau : tiến trình này ch ược cp phát tài nguyên
ang bị tiến trình kia chiếm gi và ngược li.
Khi 4 iều kin y, tc nghn s xy ra. Nếu thiếu mt trong 4 iều kin
trên thì không có tc nghn.
5.4.3. Đồ thị cấp phát tài nguyên
th s dng một th hình hóa vic cấp phát tài nguyên. Đồ th
này có 2 loi nút: các tiến trình ược biu din bng hình tròn, và mi tài ngun
ược hin th bng hình vuông
Hình 5.14 Đồ th cp phát tài nguyên
5.4.4. Các phương pháp xử lý tắc nghẽn
Ch yếu có ba hương tiếp cận ể x lý tc nghn:
lOMoARcPSD|41967345
85
- S dng mt nghi thức (protocol) ể bảo ảm rng h thng không bao gi
xy ra tc nghn.
- Cho phép xy ra tc nghn và tìm cách sa cha tc nghn.
- Hoàn toàn b qua vic x tc nghẽn, xem như h thng không bao gi
xy ra tc nghn.
5.4.5. Ngăn chặn tắc nghẽn
Để tc nghn không xy ra, cn bảo ảm ti thiu một trong 4 iều kin cn
không xy ra:
* Tài nguyên không th chia s: Nhìn chung gần như không thể tránh ược
iều kin này vì bn cht tài nguyên gần như cố nh. Tuy nhiêni vi mt s tài
nguyên v kết xuất, người ta có th dùng các cơ chế spooling ể biến i thành tài
nguyên có th chia s.
* S chiếm giu cu thêm tài nguyên: Phi bảo ảm rng mi khi tiến
trình yêu cu thêm mt tài nguyên thì nó không chiếm gi các tài nguyên khác.
Có th áp ặt một trong hai cơ chế truy xut sau:
- Tiến trình phi yêu cu tt c các tài nguyên cn thiết trước khi bắt ầu x
lý.
=> Phương pháp này có khó khăn là tiến trình khó có th ước lượng chính
xác tài nguyên cn s dng th nhu cu ph thuc vào quá trình x lý.
Ngoài ra nếu tiến trình chiếm gi sẵn các tài nguyên chưa cần s dng ngay thì
vic s dng tài nguyên s kém hiu qu.
- Khi tiến trình yêu cu mt tài nguyên mi b t chi, phi gii
phóng các tài nguyên ang chiếm giữ, sau ó lại ược cp phát tr li cùng ln vi
tài nguyên mi.
=> Phương pháp này m phát sinh các khó khăn trong việc bo v tính
toàn vn d liu ca h thng.
* Không thu hi tài nguyên: Cho phép h thống ược thu hi tài nguyên t
các tiến trình b khoá cp phát tr li cho tiến trình khi thoát khi tình trng
lOMoARcPSD|41967345
86
b khóa. Tuy nhiên vi mt s loi tài ngun, vic thu hi s rt khó khăn vì vi
phạm s toàn vn d liu .
* Tn ti mt chu k: tránh to chu k trong th bng cách cp phát tài
nguyên theo mt s phân cấp như sau:
gi R = {R
1
, R
2
,...,Rm} là tp các loi tài nguyên.
Các loại tài nguyên ược phân cp t 1-N.
Ví d : F( ĩa) = 2, F(máy in) = 12
Các tiến trình khi yêu cu tài nguyên phi tuân th quynh: khi tiến trình
ang chiếm gi tài nguyên Ri thì ch th yêu cu các tài nguyên Rj nếu F(Rj)
> F(Ri).
5.4.6. Tránh tắc nghẽn
Ngăn cản tc nghn mt mi bn tâm ln khi s dng tài nguyên. Tránh
tc nghn là loi b tt c các hội có th dẫn ến tc nghn trong tương lai. Cần
phi s dng những cơ chế phc tạp ể thc hiện ý ịnh này.
* Một số khái niệm cơ sở:
- Trạng thái an toàn: Trng thái A là an toàn nếu h thng có th tha mãn
các nhu cầu tài nguyên (cho ến tối a) của mi tiến trình theo mt th t nào ó mà
vẫn ngăn chặn ược tc nghn.
- Một chuỗi cấp phát an toàn: Mt th t ca các tiến trình <P
1
, P
2
,...,Pn>
là an toàn ối vi tình trng cp phát hin hành nếu vi mi tiến trình Pi nhu cu
tài ngun ca Pi có th ược tha mãn vi các tài nguyên còn t do ca h thng,
cng với các tài nguyên ang bị chiếm gi bi các tiến trình Pj khác, vi j<i.
Mt trng thái an toàn không th trng thái tc nghẽn. Ngược li mt
trng thái không an toàn có th dẫn ến tình trng tc nghn.
* Chiến lược cấp phát:
Ch tha mãn yêu cu tài nguyên ca tiến trình khi trng thái kết qu là an
toàn.
lOMoARcPSD| 41967345
87
* Giải thuật xác ịnh trạng thái an toàn
Cn s dng cÆc cu trœc d liu sau:
int Available[NumResources];
/* Available[r]= s ng cÆc th hin c n t do ca t i
nguyŒn r*/ int Max[NumProcs, NumResources];
/*Max[p,r]= nhu cu ti a ca tiến tr nh p v t i nguyŒn r*/
int Allocation[NumProcs, NumResources];
/* Allocation[p,r] = s ng t i nguyŒn r thc s cp phÆt
cho p*/ int Need[NumProcs, NumResources];
/* Need[p,r] = Max[p,r] - Allocation[p,r]*/
1.Gi s c cÆc mng int Work[NumProcs,
NumResources] = Available; int
Finish[NumProcs] = false;
2.T m i sao cho
Finish[i] == false
Need[i] <= Work[i]
Nếu không có i như thế, ến bưc 4.
3.Work = Work + Allocation[i];
Finish[i] = true;
Đến bưc 2
4.Nếu Finish[i] == true vi mi i, th h thng trng thÆi
an to n.
* V d: Gi s t nh trng hin h nh ca h thng ưc
m t như sau:
Max
Allocation
Available
R1
R2
R3
R1
R2
R3
R1
R2
R3
P1
3
2
2
1
0
0
P2
6
1
3
2
1
1
P3
3
1
4
2
1
1
P4
4
2
2
0
0
2
lOMoARcPSD| 41967345
88
Nếu tiến trình P2 yêu cu 4 cho R1, 1 cho R3. Hãy cho biết yêu cu y có
th áp ng mà bảo ảm không xy ra tình trng deadlock hay không? Nhn thấy
Available[1] =4, Available[3] =2 ủ thõa mãn yêu cu ca P2, ta có:
Need
Allocation
Availabl
e
R1
R2
R3
R1
R2
R3
R1
R2
R3
P1
2
2
2
1
0
0
P2
0
0
1
6
1
2
P3
1
0
3
2
1
1
P4
4
2
0
0
0
2
Need
Allocation
Available
R1
R2
R3
R1
R2
R3
R1
R2
R3
P1
2
2
2
1
0
0
P2
0
0
0
0
0
0
P3
1
0
3
2
1
1
P4
4
2
0
0
0
2
Need
Allocation
Available
R1
R2
R3
R1
R2
R3
R1
R2
R3
P1
0
0
0
0
0
0
P2
0
0
0
0
0
0
lOMoARcPSD| 41967345
89
P3
1
0
3
2
1
1
P4
4
2
0
0
0
2
Need
Allocation
Available
R1
R2
R3
R1
R2
R3
R1
R2
R3
P1
0
0
0
0
0
0
P2
0
0
0
0
0
0
P3
0
0
0
0
0
0
P4
4
2
0
0
0
2
Need
Allocation
Available
R1
R2
R3
R1
R2
R3
R1
R2
R3
P1
0
0
0
0
0
0
P2
0
0
0
0
0
0
P3
0
0
0
0
0
0
P4
0
0
0
0
0
0
Trng thái kết qu là an toàn, có th cp phát.
* Giải thuật yêu cầu tài nguyên
Gi s tiến trình Pi yêu cu k th hin ca tài nguyên r.
1. Nếu k <= Need[i], ến bước 2
Ngược li, xy ra tình hung li
2. Nếu k <= Available[i], ến bước 3 Ngược li, Pi phi ch
lOMoARcPSD|41967345
90
3. Gi s h thống ã cấp phát cho Pi các tài nguyên yêu cu
và cp nht tình trng h thống như sau:
Available[i] = Available[i] - k;
Allocation[i]= Allocation[i]+ k;
Need[i] = Need[i] - k;
Nếu trng thái kết qu an toàn, lúc y các tài nguyên trên s ược cp
phát tht s cho Pi.
Ngược li, Pi phi ch.
5.4.7. Phát hiện tắc nghẽn
Cn s dng cÆc cu trœc d liu sau:
int Available[NumResources];
// Available[r]= s ng cÆc th hin c n t do ca t i
nguyŒn r int Allocation[NumProcs, NumResources];
// Allocation[p,r] = s ng t i nguyŒn r thc s cp phÆt
cho p int Request[NumProcs, NumResources];
// Request[p,r] = s ng t i nguyŒn r tiến tr nh p yŒu
cu thŒm
* Gii thut phÆt hin tc nghn
1. int Work[NumResources] = Available; int
Finish[NumProcs]; for (i = 0; i < NumProcs;
i++)
Finish[i] = (Allocation[i] == 0);
2. T m i sao cho
Finish[i] == false
Request[i] <= Work
Nếu không có i như thế, ến bưc 4.
3. Work = Work + Allocation[i];
Finish[i] = true;
Đến bưc 2
lOMoARcPSD|41967345
91
4. Nếu Finish[i] == true vi mi i, th h
thng kh ng c tc nghn
Nếu Finish[i] == false vi mt s giÆ tr i, th cÆc
tiến tr nh m Finish[i] == false s trong t nh
trng tc nghn.
5.4.8. Hiệu chỉnh tắc nghẽn
Khi ã phát hiện ược tc nghn, hai la chọn chính hiu chnh tc
nghn:
* Đình chỉ hoạt ộng của các tiến trình liên quan:
Cách tiếp cn y da trên vic thu hi li các tài nguyên ca nhng tiến
trình b kết thúc. Có th s dng một trong hai phương pháp sau:
- Đình chỉ tt c các tiến trình trong tình trng tc nghn.
- Đình chỉ tng tiến trình liên quan cho ến khi không còn chu trình
gây tc nghn: chọn ược tiến trình thích hp b ình chỉ, phi da vào các
yếu t như ộ ưu tiên, thời gian ã xử lý, s lượng tài nguyên ang chiếm gi, s
lượng tài nguyên yêu cu...
* Thu hồi tài nguyên:
th hiu chnh tc nghn bng cách thu hi mt s tài nguyên t các
tiến trình cp phát các tài nguyên y cho nhng tiến trình khác cho ến khi
loi b ược chu trình tc nghn. Cn gii quyết 3 vấn ề sau:
- Chn la mt nn nhân: tiến trình nào s b thu hi tài nguyên? thu
hi nhng tài nguyên nào?
- Tr li trạng thái trước tc nghn: khi thu hi tài nguyên ca mt tiến
trình, cn phi phc hi trng thái ca tiến trình tr li trng thái gn nhất trước
ó mà không xảy ra tc nghn.
- Tình trng ói tài nguyên” : làm sao bảo m rng không mt tiến trình
luôn luôn b thu hi tài nguyên?
lOMoARcPSD|41967345
92
5.5. Tóm tắt
- Các giải pháp ng b hoá do lp trình viên xây dựng không ược ưa
chung phi tiêu th CPU trong thi gian ch vào miền găng (“busy waiting”),
và khó m rộng. Thay vào ó, lập trình viên có th s dụng các cơ chế ng b do
h iều hành hay trình biên dch tr giúp như semaphore, monitor, trao ổi thông
iệp.
- Tc nghn là tình trng xy ra trong mt tp các tiến trình nếu có hai hay
nhiều hơn các tiến trình ch i vô hn mt s kin ch có th ược phát sinh bi
mt tiến trình cũng ang chờ khác trong tp các tiến trình này.
- Có 3 hướng tiếp cn chính trong x lý tc nghn:
+ Phòng tránh tắc nghẽn: tuân th mt vài nghi thc bảo m h thng
không bao gi lâm vào trng thái tc nghn.
+ Phát hiện tắc nghẽn: khi tc nghn xy ra, phát hin các tiến trình liên
quan và tìm cách phc hi.
+ Bỏ qua tắc nghẽn: xem như hệ thng không bao gi lâm vào trng thái
tc nghn.
* Củng cố bài học
1. Phân bit nhóm gii pháp busy waiting và Sleep&Wakeup.
2. Phân bit cách s dụng semaphore, monitor và message ể ng b
hoá.
3. hình gii quyết nhu cầu c quyn truy xut hình gia
quyết nhu cu phi hp hoạt ộng.
* Bài tập
Bài 1. Xét gii pháp phn mm do Dekker ngh t chc truy xt c
quyn cho hai tiến trình . Hai tiến trình P
0
, P
1
chia s các biến sau:
var flag : array [0..1] of boolean; (khi ng l false)
turn : 0..1;
Cu trúc mt tiến trình Pi (i =0 hay 1, và j là tiến trình còn li) như sau:
lOMoARcPSD|41967345
93
repeat flag[i] :=
true; while flag[j]
do if turn = j
then begin
flag[i]:= false;
while turn = j do ;
flag[i]:= true;
end;
critical_section();
turn:= j; flag[i]:=
false;
non_critical_section();
until false;
Gii pháp này có phi là mt giải pháp úng thỏa mãn 4 yêu cu không?
Bài 2. Xét gii pháp phn mềm do Eisenberg và McGuire ngh t
chc truy xất ộc quyn cho N tiến trình. Các tiến trình chia s các biến sau:
var flag : array [0..N-1] of (idle, want-in, in-cs);
turn : 0..N-1;
Tt c các phn t ca mng flag ược khởi ng là idle, turn ược khi gán
mt trong nhng giá tr t 0..N-1
Cu trúc mt tiến trình Pi như sau:
repeat repeat flag[i] := want-in; j := turn; while j<>i
do if flag[j]<> idle then j:= turn else j:= j+1 mod n;
flag[i]:= in-cs; j:=0; while ( j<N) and ( j = i or
flag[j] <> in-cs) do j:=j+1; until ( j>=N) and ( turn =i
or flag[turn] = idle); turn := i; critical_section();
j:= turn + 1 mod N; while (flag[j]= idle) do j := j+1
mod N; turn := j; flag[i]:= idle;
non_critical_section(); until false;
Gii pháp này có phi là mt giải pháp úng thỏa mãn 4 yêu cu không?
Bài 3. Xét giải pháp ồng b hoá sau:
while (TRUE) { int j = 1-i;
flag[i]= TRUE; turn = i; while
(turn == j && flag[j]==TRUE);
critical-section (); flag[i] =
FALSE;
Noncritical-section ();
}
lOMoARcPSD| 41967345
94
Đây có phải là mt gii pháp bảo ảm ược ộc quyn truy xut không?
Bài 4. Gi s mt máy tính không ch th TSL, nhưng chỉ
th Swap kh năng hoán i ni dung ca hai t nh ch bng mt thao
tác không th phân chia:
procedure Swap() var a,b: boolean);
var temp : boolean; begin temp :=
a; a:= b; b:= temp; end;
S dng ch thy có th t chc truy xuất c quyn không? Nếu có xây
dng cấu trúc chương trình tương ứng.
Bài 5. Chng t rng nếu các primitive Down Up trên
semaphore không thc hin mt cách không th phân chia, thì s truy xuất
c quyn s b vi phm.
Bài 6. S dụng semaphore ể cài ặt cơ chế monitor.
Bài 7. Xét hai tiến trình sau :
process A
{ while (TRUE)
na = na +1;
}
process B
{ while (TRUE) nb
= nb +1;
}
a) Đồng b hoá x lý ca hai tiến trình trên, s dng hai semaphore tng
quát, sao cho ti bt k thời iểm nào cũng có nb < na <= nb +10
b) Nếu giảm iều kin chna <= nb +10, gii pháp ca bn s ược
sa chữa như thế nào?
c) Gii pháp ca bạn có còn úng nếu có nhiu tiến trình loi A và B
cùng thc hin?
lOMoARcPSD| 41967345
95
Bài 8. Biến X ược chia s bi hai tiến trình cùng thc hiện
oạn code sau:
do X = X +1; if
( X == 20) X = 0;
while ( TRUE );
Bắt u vi giá tr X = 0, chng t rng giá tr X th vượt quá 20. Cn
sa chữa oạn chương trình trên như thế nào ể bảo ảm X không vượt quá 20
?
Bài 9. Xét hai tiến trình x lý oạn chương trình sau:
process P
1
{ A
1
; A
2
} process P
2
{ B
1
; B
2
}
Đồng b hoá hoạt ng ca hai tiến trình này sao cho c A
1
và B
1
u hoàn
tất trước khi A
2
hay B
2
bắt ầu.
Bài 10. Tng quát hoá câu hi 8) cho các tiến trình x
oạn chương
trình sau:
process P
1
{ for ( i = 1; i <= 100; i ++) Ai } process
P
2
{ for ( j = 1; j <= 100; j ++) Bj }
Đồng b hoá hoạt ng ca hai tiến trình này sao cho c vi k bt k ( 2
k 100), Ak
ch có th bắt ầu khi B
(k-1)
ã kết thúc, và Bk
ch có th bt u khi
A
(k-1)
ã kết thúc.
Bài 11. S dụng semaphore viết lại chương trình sau
theo mô hình x lýng hành:
w := x1 * x2
v := x3 * x4
y := v * x5
z := v * x6
y := w * y
lOMoARcPSD|41967345
96
z := w * z
ans := y + z
Bài 12. Xây dng mt gii pháp (s dụng semaphore )
gii quyết vấn ề Readers_Writers trong ó:
a) Readers ược ưu tiên (khi không ai truy xuất database, Reader
ược ưu tiên truy cập database ngay, Writer phải i tt c các Reader truy xut
xong mới ược vào database).
b) Writers ược ưu tiên (khi không ai truy xuất database, Writer
ược ưu tiên truy cập database ngay, Reader phải i tt c các Write truy xut
xong mới ược vào database).
c) Công bng cho Reader, Writer (khi không ai truy xut databas,
Writer hoặc Reader có cơ hội ngang nhau ể truy cp database)
Bài 13. Dining Philosophers: Gi s hành vi ca mt triết gia th i trong
bữa ăn tối ược mô t như sau :
#define N 5
void philosopher( int i) { while (TRUE)
{ think(); // Suy nghĩ take_fork(i); //
ly nĩa bên trái take_fork((i+1)%N); //
ly nĩa bên phi eat(); // yum-yum,
spaghetti
put_fork(i); // t nĩa bên trái lên bàn li put_fork((i+1)%N);
// t nĩa bên phi lŒn b n li
}
}
a) Lưu ý trên bàn chỉ5 cái dĩa, nếu 2 triết gia cùng mun
ly mt cái dĩa, thì ch một người ược quyn ly cái dĩa ó. Sử dng semaphore
t chức c quyn truy xuất ến các cái dĩa cho oạn chương trình trên (Gi ý: dùng
mi semaphore phn ánh tình trng s dng ca mi cái dĩa)
b) Liu gii pháp ca câu a mt gii pháp tt cho bài toán
Dining philosopher? Nếu không, cho biết các tình hung li s xảy ra, và ề ngh
phương pháp cải tiến.
Bài 14. Xét mt giải pháp úng cho bài toán Dining philosophers:
lOMoARcPSD| 41967345
97
#define N
5
#define LEFT
(i-1)%N
#define RIGHT
(i+1)%N
#define THINKING
0
#define HUNGRY 1
#define EATING 2
int state[N];
semaphore mutex = 1; semaphore
s[N];
void philosopher( int i) // i : xÆc nh triết gia n o (0..N-
1) {
while (TRUE)
{ thinhk(); // Suy nghĩ
take_forks(i); // yŒu cu ến khi có 2 nĩa eat();
// yum-yum, spaghetti
put_forks(i); // t c 2 nĩa lên bàn li
} }
void take_forks ( int i) // i : xác nh triết gia n o (0..N-
1) {
while (TRUE)
{ down(mutex); // v o min găng
state[i] = HUNGRY; // ghi nhn triết gia i ã ói
test(i); // c gng ly 2 nĩa up(mutex); // ra
khi min găng down(s[i]); // ch nếu không có
2 nĩa
}
} }
void put_forks ( int i) // i : xác nh triết gia n o (0..N1)
{
while (TRUE)
{ down(mutex); // v o min găng
state[i] = THINKING; // ghi nhn triết gia i ăn xong
test(LEFT); // kim tra ngưi bên trái ã có th ăn?
test(RIGHT); // kim tra ngưi bŒn phi ã có th ăn?
up(mutex); // ra khi min găng
} }
void test ( int i) // i : xác nh triết gia n o (0..N-1)
{
if(state[i]==HUNGRY && state[LEFT]!=EATING &&
state[RIGHT]!= EATING
lOMoARcPSD| 41967345
98
{ state[i] = EATING;
up(s[i]);
} }
a) Ti sao phải ặt state[i] = HUNGRY trong take_forks?
b) Gi s trong put_forks, lệnh gán state[i] = THINKING ược thc
hin sau hai lệnh test(LEFT), test(RIGHT). Điều này ảnh hưởng thế nào ến
gii pháp cho 3 triết gia? Cho 100 triết gia?
Bài 15. Xây dng gii pháp monitor cho bài toán Dining
Philosophers.
Bài 16. Baber problem: Mt ca hiu ct tóc có mt th,
mt ghế ct tóc và N ghế cho khách i. Nếu khôngkhách hàng, anh
th ct tóc s ngi vào ghế ct tóc và ng thiếp i. Khi một khách hàng
vào tim, anh ta phải ánh thức người th. Nếu mt khách hàng vào
tiệm khi người th ang bận ct tóc cho kh1ch hàng khác, người mi
vào s phi ngi ch nếu có ghế i trng, hoc ri khi tim nếu ã có
N người i. Xây dng mt gii pháp vi semaphore thc hiện ng
b hoá hoạt ộng ca th và khách hàng trong ca hiu ct tóc này.
/* Semaphore to protect critical sections */
Semaphore mutex = 1;
/* Semaphore for the number of waiting customers.
* This lets the barber go to sleep when there are no
customers */
Semaphore customers = 0;
/* Number of waiting customers in the barber shop */
/* Just used to turn away customers when there are too many
already. */ int waiting_customers = 0
/* Semaphore on which to wait for a haircut */
Semaphore haircut = 0;
/* Customer calls this function to try to get their hair
cut
* it returns true if the hair gets cut. */ int
customer()
{
/* protect access to shared variables with semaphore mutex
*/ wait( mutex );
lOMoARcPSD| 41967345
99
/* Make sure there is an empty chair */
if( waiting_customers >=
5 ){ signal( mutex ); return 0;
}
/* there is now a new waiting customer */
waiting_customers += 1; signal( mutex );
/* Wake the barber if the shop was empty */
signal( customers );
/* Wait for a haircut from the barber */
wait( haircut ); return 1;
}
/* Barber loops within this function */ void
barber()
{
while( 1 ){
/* Go to sleep if there are no customers */
wait( customers );
// protect access to shared variables with semaphore mutex
wait( mutex );
/* take customer out of a chair */
waiting_customers -= 1;
signal( mutex );
/* cut hair of the current customer */
cut_hair();
/* Let the customer go. */
signal( haircut );
}
}
Bài 17. Gii quyết bài toán Baber trong trường hp tim có nhiu th.
Bài 18. Xét trng thái h thng:
Max
Allocation
Availabl
e
R1
R2
R3
R1
R2
R3
R1
R2
R3
P1
3
2
2
1
0
0
P2
6
1
3
2
1
1
P3
3
1
4
2
1
1
lOMoARcPSD|41967345
100
P4
4
2
2
0
0
2
Nếu tiến trình P2 yêu cu 4 cho R1, 1 cho R3. hãy cho biết yêu cu này
th áp ứng mà bảo ảm không xy ra tình trng deadlock hay không?
Bài 19. Xét trng thái h thng:
Max
Allocation
Available
A
B
C
D
A
B
C
D
A
B
C
D
P1
0
0
1
2
0
0
1
2
P2
1
7
5
0
1
0
0
0
P3
2
3
5
6
1
3
5
4
P4
0
6
5
2
0
6
3
2
P5
0
6
5
6
0
0
1
4
a) Cho biết ni dung ca bng Need?
b) H thông có trng thái an toàn không?
c) Nếu tiến trình P2 có yêu cu tài nguyên ( 0,4,2,0), yêu cầu này
ược áp ứng tc thi không?
Chương 6 QUẢN LÝ BỘ NHỚ
Chương này sẽ gii thiu nhng vấn cn quan tâm khi thiết kế module
qun lý b nh ca H iều hành. Mt s mô hình t chc b nh cũng ược phân
lOMoARcPSD|41967345
101
tích ưu, khuyết iểm ể có th hiểu ược cách thc cp phát và thu hi b nh diễn
ra như thế nào.
B nh chính thiết b lưu trữ duy nhất thông qua ó CPU thể trao i
thông tin với môi trường ngoài, do vy nhu cu t chc, qun lý b nh mt
trong nhng nhim v trọng tâm hàng ầu ca h iều hành. B nh chính ược t
chức như một mng mt chiu các t nh (word), mi t nh mt a ch. Việc
trao i thông tin với môi trường ngoài ược thc hin thông qua các thao tác c
hoc ghi d liu vào một ịa ch c th nào ó trong bộ nh.
Hu hết các h iều hành hiện ại ều cho phép chế a nhiệm nhm nâng cao
hiu sut s dng CPU. Tuy nhiên k thut này li làm ny sinh nhu cu chia s
b nh gia các tiến trình khác nhau. Vấn ề nm chỗ: “bộ nhớ thì hữu hạn và
các yêu cầu bộ nhớ thì vô hạn.
H iều hành chu trách nhim cp phát vùng nh cho các tiến trình có yêu
cầu. Để thc hin tt nhim v này, h iều hành cn phi xem xét nhiu khía
cnh:
- Sự ơng ứng giữa ịa chỉ logic ịa chỉ vật (physic): làm cách nào
chuyển ổi một a ch logic (symbolic) trong chương trình thành một a ch thc
(vt lý) trong b nh chính?
- Quản lý bộ nhớ vật lý: làm cách nào m rng b nh có sn nhm lưu
trữ ược nhiu tiến trình ồng thi?
- Chia sẻ thông tin: làm thế nào cho phép hai tiến trình th chia s
thông tin trong b nh?
- Bảo vệ: làm thế nào ngăn chặn các tiến trình xâm phạm ến vùng nh
ược cp phát cho tiến trình khác?
Các gii pháp qun lý b nh ph thuc rt nhiu vào c tính phn cng
tri qua nhiều giai oạn ci tiến tr thành nhng gip pháp khá thỏa áng như
hiện nay.
lOMoARcPSD|41967345
102
6.1. Bối cảnh
Thông thường, một chương trình ược lưu trữ trên ĩa như một tp tin nh
phân có th x lý. Để thc hiện chương trình, cn nạp chương trình o b nh
chính, to lp tiến trình tương ứng ể x lý.
Hàng ợi nhập hệ thống tp hợp các chương trình trên ĩa ang chờ ược
np vào b nh tiến hành x lý.
Các a ch trong chương trình nguồn a ch tượng trưng, thế, mt
chương trình phải tri qua nhiều giai oạn x lý chuyển ổi các a ch y thành
các ịa ch tuyệt ối trong b nh chính.
Có th thc hin kết buc các ch thd liu với các ịa ch b nh vào
mt trong nhng thời iểm sau:
- Thời iểm biên dịch: nếu ti thời iểm biên dch, th biết v trí tiến
trình s thường trú trong b nh, trình biên dch th phát sinh ngay vi
các a ch tuyệt i. Tuy nhiên, nếu v sau s thay i v trí thường trú lúc u
ca chương trình, cần phi biên dch lại chương trình.
- Thời iểm nạp: nếu ti thời iểm biên dịch, chưa thể biết v trí mà tiến trình
s thường trú trong b nh, trình biên dch cần phát sinh tương i
(translatable). S liên kết a ch ược trì hoãn ến thời iểm chương trình ược np
vào b nhớ, lúc này các ịa ch tương ối s ược chuyển thành ịa ch tuyệt ối do ã
biết v trí bắt ầu lưu trữ tiến trình. Khi có s thayi v trí lưu trữ, ch cn np lại
chương trình ể tính toán lại các ịa ch tuyệt ối, mà không cn biên dch li.
Thời iểm xử : nếu có nhu cu di chuyn tiến trình t vùng nh này sang
vùng nh khác trong quá trình tiến trình x lý, thì thời iểm kết buộc a ch phải
trì hoãn ến tn thời iểm x lý. Để thc hin kết buộc a ch vào thi iểm x lý,
cn s dụng cơ chế phn cứng ặc bit.
6.2. Không gian ịa chỉ và không gian vật lý
Mt trong những hướng tiếp cn trung tâm nhm t chc qun lý b nh
mt cách hiu qủa là ưa ra khái niệm không gian a ch ược y dng trên không
lOMoARcPSD|41967345
103
gian nh vt lý, vic tách ri hai không gian y giúp h iều hành d dàng xây
dựng các cơ chế và chiến lược qun lý b nh hu hiu:
- Địa chỉ logic (còn gi là ịa chỉ ảo), là tt c c ịa ch do b x to ra.
- Địa chỉ vật : a ch thc tế mà trình qun lý b nh nhìn thy và thao
tác.
- Không gian ịa chỉ: tp hp tt c các a ch o phát sinh bi mt chương
trình.
- Không gian vật lý: là tp hp tt c các a ch vật lý tương ng vi các a
ch o.
Địa ch ảo a ch vật lý như nhau trong phương thức kết buộc a ch
vào thời iểm biên dch cũng như vào thời iểm nạp. Nhưng sự khác bit giữa
a ch ảo và ịa ch vật lý trong phương thức kết buc vào thời iểm x lý.
MMU (memory-management unit) một chế phn cứng ược s dụng
thc hin chuyển ổi ịa ch ảo thành ịa ch vt lý vào thời iểm x lý.
Chương trình của người s dng ch thao tác trên các ịa ch o, không bao
gi nhìn thy các ịa ch vt lý. Địa ch tht s ng vi v trí ca d liu trong
nh ch ược xác ịnh khi thc hin truy xuất ến d liu.
6.3. Cấp phát liên tục
6.3.1. Mô hình Linker_Loader
* Ý tưởng: Tiến trình ược np vào mt vùng nh liên tục lớn
cha toàn b tiến trình. Ti thời iểm biên dịch các a ch bên trong tiến trình
vn a ch tương i. Ti thời iểm np, H iều hành s tr v a ch bắt u np
tiến trình, và tính toán ể chuyn các ịa ch tương ối v a ch tuyệt ối trong b
nh vt lý theo công thc
ịa chỉ vật lý = ịa chỉ bắt ầu + ịa chỉ tương ối.
lOMoARcPSD|41967345
104
* Thảo luận:
- Thời iểm kết buc a ch thời iểm np, do vy sau khi np không th
dch chuyn tiến trình trong b nh.
- Không có kh năng kiểm soát ịa ch các tiến trình truy cp, do vy không
có s bo v.
6.3.2. Mô hình Base &Bound
* Ý tưởng: Tiến trình ược np vào mt vùng nh liên tục lớn
cha toàn b tiến trình. Ti thời iểm biên dịch các a ch bên trong tiến trình
vn là a ch tương ối. Tuy nhiên b túc vào cu trúc phn cng ca máy tính
mt thanh ghi sở (base register) mt thanh ghi gii hn (bound register).
Khi mt tiến trình ược cp phát vùng nh, np vào thanh ghi cơ sở a ch bắt
u của phân vùng ược cp phát cho tiến trình, np vào thanh ghi gii hn
kích thước ca tiến trình. Sau ó, mỗi a ch b nh ược phát sinh s t ng ược
cng với a ch cha trong thanh ghi sở cho ra a ch tuyệt i trong b
nhớ, các a ch cũng ược i chiếu vi thanh ghi gii hạn bo m tiến trình
không truy xut ngoài phạm vi phân vùng ược cp cho nó.
lOMoARcPSD|41967345
105
Hình 6.1. Hai thanh ghi hỗ trợ chuyển ổi ịa chỉ
* Thảo luận:
- Một ưu iểm ca vic s dng thanh ghi sở th di chuyn các
chương trình trong bộ nh sau khi chúng bt ầu ược x , mi khi tiến trình ược
di chuyển ến mt v trí mi, ch cn np li giá tr cho thanh ghi cơ sở, các ịa ch
tuyệt i s ược phát sinh li không cn cp nhật các a ch tương ối trong
chương trình.
- Có hiện tượng phân mnh ngoi vi (external fragmentation): khi các tiến
trình lần lượt vào và ra khi h thng, dn dn xut hin các khe h gia các tiến
trình. Đâycác khe hở ược tạo ra do kích thước ca tiến trình mi ược np nh
hơn kích thước vùng nh mới ược gii phóng bi mt tiến trình ã kết thúc và ra
khi h thng. Hiện tượng này th dẫn ến tình hung tng vùng nh trống
tho mãn yêu cầu, nhưng các vùng nhớ này li không liên tc. Người ta có th
áp dng k thuật dn b nhớ” (memory compaction) kết hp các mnh b nh
nh ri rc thành mt vùng nh ln liên tc. Tuy nhiên, k thuật này òi hỏi nhiu
lOMoARcPSD|41967345
106
thi gian x, ngoài ra, s kết buộc ịa ch phi thc hin vào thời iểm x,
các tiến trình có th b di chuyn trong quá trình dn b nh.
Hình 6.2. Phân mnh ngoi vi
- Vấn nảy sinh khi kích thước ca tiến trình tăng trưởng trong quá trình
x lý không còn vùng nh trng gn k m rng vùng nh cho tiến trình.
Có hai cách gii quyết:
+ Di chuyn tiến trình : di chuyn tiến trình ến mt vùng nh khác lớn
tha mãn nhu cầu tăng trưởng kích thước ca tiến trình.
+ Cấp phát vùng nhớ cho tiến trình: cp phát d phòng cho tiến trình
mt vùng nh lớn hơn yêu cầu ban ầu ca tiến trình.
Mt tiến trình cần ược np vào b nh x lý. Trong các phương
thc t chức trên ây, một tiến trình luôn ược lưu trữ trong b nh sut quá trình
x lý ca nó. Tuy nhiên, trong trường hp tiến trình b khóa, hoc tiến trình s
dng hết thi gian CPU dành cho nó, th ược chuyn tm thi ra b nh
ph và sau này ược np tr li vào b nh chính ể tiếp tc x lý.
Các cách t chc b nh trên ây u phi chịu ng nh trng b
nh b phân mảnh vì chúngu tiếp cn theo kiu cp phát mt vùng nh liên tc
cho tiến trình. Như ã thảo lun, có th s dng k thut dn b nh loi b s
phân mnh ngoại vi, nhưng chi phí thực hin rt cao. Mt gii pháp khác hu
lOMoARcPSD|41967345
107
hiệu hơn là cho phép không gian a ch vt lý ca tiến trình không liên tục, nghĩa
th cp phát cho tiến trình nhng vùng nh t do bt k, không cn liên tc.
6.4. Cấp phát không liên tục
6.4.1. Phân oạn (Segmentation)
* Ý tưởng: quan niệm không gian ịa ch là mt tp các phân oạn
(segments) các phân oạn nhng phn b nh kích thước khác nhau
liên hệ logic với nhau. Mỗi phân oạn có mt tên gi (s hiệu phân oạn) và một ộ
dài. Người dùng s thiết lp mỗi a ch vi hai gtr: <số hiệu phân oạn, offset>.
Hình 6.3. Mô hình phân oạn bộ nhớ
* Cơ chế MMU trong kỹ thuật phân oạn:
Cn phi xây dng mt ánh x chuyển ổi các a ch 2 chiều ược người
dùng ịnh nghĩa thành a ch vt lý mt chiu. S chuyển ổi y ược thc hin
qua mt bảng phân oạn. Mi thành phn trong bảng phân oạn bao gm mt
thanh ghi cơ sở và mt thanh ghi giới hạn. Thanh ghi cơ sở lưu trữ a ch vật lý
nơi bắt ầu phân oạn trong b nh, trong khi thanh ghi gii hn c t chiu dài
của phân oạn.
* Chuyển ổi ịa chỉ:
lOMoARcPSD|41967345
108
Mỗi ịa ch o là mt b <s,d> :
- Số hiệu phân oạn s: ược s dụng như chỉ mục ến bảng phân oạn
- Địa chỉ tương ối d: giá tr trong khong t 0 ến gii hn chiu dài của
phân oạn. Nếu a ch tương i hp l, s ược cng vi giá tr cha trong thanh
ghi cơ sở phát sinh ịa ch vật lý tương ứng.
Hình 6.4. Cơ chế phần cứng hổ trợ kĩ thuật phân oạn
Hình 6.5. Hệ thống phân oạn
lOMoARcPSD|41967345
109
* Cài ặt bảng phân oạn:
th s dụng các thanh ghi lưu trữ bảng phân oạn nếu s lượng phân
oạn nhỏ. Trong trường hợp chương trình bao gm qnhiều phân oạn, bảng phân
oạn phải ược lưu trong bộ nh chính. Vit qung bng phân oạn thông qua
thanh ghi sở của bảng phân oạn (STBR) ch ến a ch bắt u ca bảng phân
oạn. s lượng phân oạn s dng trong một chương trình biến ng, cn s dng
thêm mt thanh ghi ặc tả kích thước bảng phân oạn (STLR).
Vi một ịa ch logic <s,d>, trước tiên s hiệu phân oạn s ược kim tra tính
hp l (s <STLR). Kế tiếp, cng giá tr s với STBR ể có ược ịa ch a ch ca
phn t th s trong bảng phân oạn (STBR+s). Điạ ch vt lý cui cùng là
(STBR+s + d).
Hình 6.6. Sử dụng STBR, STLR và bảng phân oạn
* Bảo vệ: Một ưu iểm ặc bit của cơ chế phân oạn là kh năng c t
thuc tính bo v cho mỗi phân oạn. mỗi phân oạn biu din cho mt phn
của chương trình với mục ích ược người dùng xác ịnh, người s dng có th
biết ược một phân oạn chứa ng nhng gì bên trong, do vy h th c t
các thuc tính bo v thích hp cho từng phân oạn.
chế phn cng ph trách chuyn ổi ịa ch b nh s kim tra c bit bo
v ược gán vi mi phn t trong bảng phân oạn ngăn chặn các thao c truy
xut bt hp l ến phân oạn tương ứng.
lOMoARcPSD|41967345
110
* Chia sẻ phân oạn: Một ưu iểm khác ca k thut phân oạn là kh
năng chia sẻ mức phân oạn. Nh kh năng này, các tiến trình có th chia
s vi nhau tng phần chương trình (d các th tc, hàm), không nht thiết
phi chia s toàn b chương trình như trường hp phân trang. Mi tiến trình
có mt bng phân on riêng, một phân oạn ược chia s khi các phn t trong
bảng phân oạn ca hai tiến trình khác nhau cùng ch ến mt v trí vt lý duy
nht.
Hình 6.7. Chia sẻ code trong hệ phân oạn
* Thảo luận:
- Phi gii quyết vấn ề cấp phát ng: Làm thế nào ể tha mãn mt yêu cu
vùng nh kích thước N ? Cn phi chn vùng nh nào trong danh sách vùng nh
t do ể cp phát ? Như vậy cn phi ghi nh hin trng b nh có th cp phát
úng. Có hai phương pháp quản lý ch yếu:
+ Quản bằng một bảng các bit: B nh ược chia thành các ơn vị cp
phát, mỗi ơn vị ược phn ánh bng mt bit trong bng các bit, mt bit nhn giá
tr 0 nếu ơn vị b nh tương ứng ang tự do, và nhn giá tr 1 nếu ơn vị tương ứng
ã ược cp phát cho mt tiến trình. Khi cn np mt tiến trình có kích thước k ơn
lOMoARcPSD|41967345
111
vị, cn phi tìm trong bng các bit mt y con k bit nhn giá tr 0. Đây một
giải pháp ơn giản, nhưng thực hin chậm nên ít ược s dng.
Hình 6.8. Qun lý b nh bng bng các bit
+ Quản bằng danh sách: T chc một danh sách các phân oạn ã cấp
phát và phân oạn t do, một phân oạn có thmt tiến trình (P) hay vùng nh
trng gia hai tiến trình (H).
Hình 6.9. Qun lý b nh bng danh sách
Các thut toán thông dng chn một phân oạn t do trong danh sách
cp phát cho tiến trình là:
First-fit: cấp phát phân oạn t do ầu tiên ủ ln.
Best-fit: cấp phát phân oạn t do nh nhất nhưng lớn tha mãn nhu cu.
Worst-fit: cấp phát phân oạn t do ln nht.
- Trong h thng s dng k thuật phân on, hiện tượng phân mnh ngoi
vi li xut hin khi các khi nh t do ều quá nhỏ, không cha một phân oạn.
lOMoARcPSD|41967345
112
6.4.2. Phân trang (Paging)
* Ý tưởng:
Phân b nh vt thành các khối (block) kích thước c nh bng
nhau, gi khung trang (page frame). Không gian a ch cũng ược chia thành
các khối cùng kích thước với khung trang, ược gi trang (page). Khi
cn np mt tiến trình x , các trang ca tiến trình s ược np vào nhng
khung trang còn trng. Mt tiến trình kích thước N trang s yêu cu N khung
trang t do.
Hình 6.10. Mô hình b nh phân trang
* Cơ chế MMU trong kỹ thuật phân trang:
chế phn cng h tr thc hin chuyển ổi a ch trong chế phân trang
là bng trang (pages table). Mi phn t trong bng trang cho biết cáca ch bắt
u ca v trí lưu trữ trang tương ng trong b nh vt (s hiu khung trang
trong b nh vật lý ang chứa trang).
* Chuyển ổi ịa chỉ:
Mỗi ịa ch phát sinh bởi CPU ược chia thành hai phn:
- Số hiệu trang (p): s dng như chỉ mục ến phn t tương ng trong bng
trang.
- Địa chỉ tương ối trong trang (d): kết hp với ịa ch bắt ầu ca trang tạo
ra ịa ch vt lý mà trình qun lý b nh s dng.
lOMoARcPSD|41967345
113
Kích thước ca trang do phn cứng qui ịnh. Để d phân tích a ch o thành
s hiệu trang a ch tương ối, kích thước ca mt trang thông thường một
lũy thừa ca 2 (biến i trong phm vi 512 bytes và 8192 bytes). Nếu kích thước
của không gian ịa ch2
m
và kích thước trang là 2
n
, thì m-n bits cao của ịa ch
o s biu din s hiu trang, và n bits thp cho biết ịa ch tương ối trong trang.
Hình 6.11. Cơ chế phần cứng hỗ trợ phân trang
* Cài ặt bảng trang:
Trong trường hợp ơn giản nht, bng trang mt tập các thanh ghi ược s
dụng ể cài ặt bng trang. Tuy nhiên vic s dng thanh ghi ch phù hp vi các
bảng trang kích thước nh, nếu bảng trang kích thước ln, nó phải ược lưu
trữ trong b nh chính, s dng một thanh ghi lưu ịa ch bắt ầu lưu trữ bng
trang (PTBR).
Theo cách t chc này, mi truy xuất ến d liu hay ch th ều òi hi hai
ln truy xut b nh: mt cho truy xuất ến bng trang mt cho bn thân d
liu.
lOMoARcPSD|41967345
114
Hình 6.12. Mô hình b nh phân trang
Hình 6.13. Sử dụng thanh ghi cơ sở trỏ ến bảng trang
th tránh bt vic truy xut b nh hai ln bng cách s dng
thêm mt vùng nh c bit, vi tốc ộ truy xut nhanh và cho phép tìm kiếm song
song, vùng nh cache nh này thường ược gi b nh kết hp (TLBs). Mi
thanh ghi trong b nh kết hp gm mt t khóa mt giá trị, khi ưa ến b nh
kết hp một ối tượng cần m, ối tượng này s ược so sánh cùng lúc vi các t
khóa trong b nh kết hợp ể tìm ra phn t tương ứng. Nh c tính này mà vic
lOMoARcPSD|41967345
115
tìm kiếm trên b nh kết hợp ược thc hin rt nhanh, nhưng chi phí phn cng
li cao.
Trong k thuật phân trang, TLBs ược s dụng lưu trữ các trang b nh
ược truy cp gn hin ti nht. Khi CPU phát sinh một a ch, s hiu trang của
a ch s ược so sánh vi các phn t trong TLBs, nếu có trang tương ứng trong
TLBs, thì s xác ịnh ược ngay s hiệu khung trang tương ng, nếu không mi
cn thc hin thao tác tìm kiếm trong bng trang.
Hình 6.14. Bng trang vi TLBs
* Tổ chức bảng trang:
Mi h iều hành có một phương pháp riêng t chc lưu trữ bng trang.
Đa số các h iều hành cp cho mi tiến trình mt bng trang. Tuy nhiên phương
pháp này không thể chp nhận ược nếu h iều hành cho phép qun lý một không
gian a ch dung lượng quá (2
32
, 2
64
): trong các h thống như thế, bn thân
bảng trang òi hỏi mt vùng nh quá ln! Có hai gii pháp cho vấn ề này:
- Phân trang a cấp: Phân chia bng trang thành các phn nh, bn thân
bảng trang cũng sẽ ược phân trang.
lOMoARcPSD|41967345
116
Hình 6.15. Bng trang nh cp
- Bảng trang nghịch ảo:
S dng duy nht mt bảng trang nghịch ảo cho tt c các tiến trình. Mi
phn t trong bảng trang nghịch ảo phn ánh mt khung trang trong b nh bao
gồm a ch logic ca một trang ang ược lưu trữ trong b nh vt ti khung
trang y, cùng vi thông tin v tiến trình ang ược s hu trang. Mi a ch ảo
khi ó là một b ba <idp, p, d >.
Trong ó: idp nh danh ca tiến trình, p s hiệu trang d a ch
tương ối trong trang.
Mi phn t trong bng trang nghịch o mt cp <idp, p >. Khi mt
tham khảo ến b nh ược phát sinh, mt phần a ch ảo <idp, p > ược ưa ến
cho trình qun lý b nh tìm phn t tương ng trong bng trang nghịch o,
nếu tìm thấy, a ch vt <i,d> s ược phát sinh. Trong các trường hợp khác,
xem như tham khảo b nh ã truy xuất một ịa ch bt hp l.
lOMoARcPSD|41967345
117
Hình 6.16. Bng trang nghịch ảo
* Bảo vệ:
Cơ chế bo v trong h thống phân trang ược thc hin vi các bit bo v
ược gn vi mỗi khung trang. Thông thường, các bit này ược lưu trong bng
trang, vì mi truy xuất ến b nh u phi tham khảo ến bảng trang ể phát sinh ịa
ch vật lý, khi ó, hệ thng có th kim tra các thao tác truy xut trên khung trang
tương ứng có hp l vi thuc tính bo v ca nó không.
Ngoài ra, mt bit ph trội ược thêm vào trong cu trúc mt phn t ca
bng trang: bit hp l - bt hp l (valid-invalid).
- Hợp lệ: trang tương ứng thuc v không gian ịa ch ca tiến trình.
- Bất hợp lệ: trang tương ng không nằm trong không gian a ch
ca tiến trình, iều này có nghĩa tiến trình ã truy xuất ến một ịa ch không ược
phép.
Hình 6.17 Cấu trúc một phần tử trong bảng trang
* Chia sẻ bộ nhớ trong cơ chế phân trang:
lOMoARcPSD|41967345
118
Một ưu iểm của chế phân trang cho phép chia s các trang gia các
tiến trình. Trong trường hp này, s chia s ược thc hin bng cách ánh x
nhiều ịa ch logic vào một a ch vt lý duy nht. th áp dng k thut y
cho phép có tiến trình chia s mt vùng code chung: nếu có nhiu tiến trình ca
cùng một chương trình, chỉ cần lưu trữ một oạn code của chương trình y trong
b nh, các tiến trình sth cùng truy xuất ến các trang chứa code chung y.
Lưu ý th chia s một oạn code, oạn code y phi có thuc tính reenterable
(cho phép mt bn sao của chương trình ược s dụng ng thi bi nhiu tác v).
Hình 6.18. Chia sẻ các trang trong hệ phân trang
* Thảo luận:
- K thut phân trang loi b ược hiện tượng phân mnh ngoi vi: Mi
khung trang u th ược cp phát cho mt tiến trình nào ó yêu cầu. Tuy
nhiên hiện tượng phân mnh ni vi vn th xảy ra khi kích thước ca tiến
trình không úng bằng bi s của kích thước một trang, khi ó, trang cuối cùng s
không ược s dng hết.
- Mt khía cnh tích cc rt quan trng khác ca k thut phân trang là s
phân bit rch ròi góc nhìn của người dùng ca b phn qun lý b nh vt
lý:
lOMoARcPSD|41967345
119
+ Góc nhìn của người sử dụng: mt tiến trình của người dùng nhìn thy
b nh như một không gian liên tục, ồng nht và ch cha duy nht bn thân
tiến trình này.
+ Góc nhìn của bộ nhớ vật lý: mt tiến trình của người s dụng ược lưu
trữ phân tán khp b nh vt lý, trong b nh vật lý ng thời cũng chứa nhng
tiến trình khác.
- Phn cứng m nhim vic chuyển ổi a ch logic thành a ch vt lý. S
chuyển ổi này là trong suốt ối với người s dng.
- Để lưu trữ các thông tin chi tiết v quá trình cp phát b nh, h iều hành
s dng mt bng khung trang, mà mi phn t mô t tình trng ca mt khung
trang vt lý: t do hay ược cp phát cho mt tiến trình nào ó.
Lưu ý rằng s phân trang không phản ánh úng cách thức người
s dng cm nhn v b nhớ. Người s dng nhìn thy b nh như một tp các
ối tượng của chương trình (segments, các thư viện...) và mt tập các ối tượng d
liu (biến toàn cc, stack, vùng nh chia s...). Vấn t ra cn tìm mt cách
thc biu din b nh sao cho th cung cấp cho người dùng mt cách nhìn
gn với quan iểm logic ca h hơn và ó là kỹ thuật phân oạn.
K thuật phân oạn thỏa mãn ược nhu cu th hin cu trúc logic
ca chương trình nhưng nó dẫn ến tình hung phi cp phát các khi nh có kích
thước khác nhau cho các phân oạn trong b nh vật lý. Điều này làm rc ri vấn
hơn rất nhiu so vi vic cấp phát các trang có kích thước tĩnh. Mt gii pháp
dung hoà kết hp c hai k thuật phân trang phân oạn: chúng ta tiến hành
phân trang các phân oạn.
6.4.3. Phân oạn kết hợp phân trang (Paged segmentation)
* Ý tưởng: Không gian a ch mt tập c phân oạn, mỗi phân oạn
ược chia thành nhiu trang. Khi mt tiến trình ược ưa vào h thng, h iều
hành s cp phát cho tiến trình các trang cn thiết chứa các phân oạn
ca tiến trình.
* Cơ chế MMU trong kỹ thuật phân oạn kết hợp phân trang:
lOMoARcPSD|41967345
120
Để h tr k thuật phân oạn, cn có mt bảng phân oạn, nhưng giờ ây mỗi
phân oạn cn có mt bảng trang phân bit.
* Chuyển ổi ịa chỉ:
Mỗi ịa ch logic là mt b ba: <s,p,d>
- Số hiệu phân oạn (s): s dụng như chỉ mục ến phn t tương ng trong
bảng phân oạn.
- Số hiệu trang (p): s dụng như chỉ mục ến phn t tương ng trong bng
trang của phân oạn.
- Địa chỉ ơng ối trong trang (d): kết hp với ịa ch bt ầu ca trang tạo
ra ịa ch vt lý mà trình qun lý b nh s dng.
Hình 6.19. Mô hình phân oạn kết hợp phân trang
lOMoARcPSD|41967345
121
Hình 6.20. Cơ chế phn cng ca s phân oạn kết hp phân trang
Tt c các hình t chc b nh trên ây ều khuynh hướng cp phát
cho tiến trình toàn b các trang yêu cầu trước khi tht s x lý. Vì b nh vật lý
có kích thước rt gii hạn, iều này dẫn ến hai iểm bt tin sau:
- Kích thước tiến trình b gii hn bởi kích thước ca b nh vt lý.
- Khó có th bo trì nhiu tiến trình cùng lúc trong b nhớ, và như vậy khó
nâng cao mức ộ a chương của h thng.
6.5. Tóm tắt
- Có nhiu cách tiếp cận khác nhau ể t chc quãn lý b nh, nhưng ều có
iểm chung mong ạt ến các mc tiêu sau :
+ Có th áp ứng ược ầy ủ các nhu cu b nh của chương trình với mt b
nh vt lý gii hn.
+ Quá trình chuyển ổi a ch, t chc cp phát b nh trong sut vi
người dùng, và có kh năng tái ịnh v.
+ Tn dng hiu qu b nh (ít vùng nh không s dụng ược) +
B nh ược bo v tt.
lOMoARcPSD|41967345
122
+ Có kh năng chia sẻ b nh gia các tiến trình.
- Mt s cách tiếp cn t chc b nh chính:
+ Cấp phát liên tục: th cp phát các vùng nh liên tc cho các tiến
trình trong những phân vùng kích thước c nh hay biến ộng. Điểm yếu ca
cách tiếp cận này kích thước các chương trình thể dược x b gii hn
bởi các kích thước ca khi nh liên tc th s dng. Các hiện tượng phân
mnh ngoi vi, nội vi ều có th xut hin
+ Cấp phát không liên tục: th cp phát các vùng nh không liên tc
cho mt tiến trình. Hai k thuật thường ược áp dng là phân trang và phân oạn.
K thut phân trang cho phép loi b hiện tượng phân mnh ngoi vi, k thuật
phân oạn loi b hiện tượng phân mnh nội vi, nhưng phải gii quyết vấn cấp
phát ộng.
* Củng cố bài học
Các câu hỏi cần trả lời ược sau bài học này:
1. Nhim v qun b nh bao gm các công vic nào? Giai oạn
nào do h iều hành thc hiện, giai oạn nào cn s tr giúp ca phn cng?
2. Các khái nim: Phân mnh ni vi, Phân mnh ngoi vi, Bài toán
cp phát ộng, Đi ch logic, Đi ch physic
3. Phân tích ưu khuyết ca các mô hình t chc b nh.
* Bài tập
Bài 1. Gii thích s khác bit giữa a ch logic a ch physic
(vt lý)?
Bài 2. Gii thích s khác bit gia hiện tượng phân mnh ni vi
và ngoi vi?
Bài 3. Gi s b nh chính ược phân thành các phân vùng kích
thước là 600K, 500K, 200K, 300K ( theo th t ), cho biết các tiến trình có kích
thước 212K, 417K, 112K và 426K (theo th t) s ược cp phát b nh như thế
nào, nếu s dng:
lOMoARcPSD| 41967345
123
a) Thut toán First fit
b) Thut toán Best fit
c) Thut toán Worst fit
Thut toán nào cho phép s dng b nh hiu qa nhất trong trường hp
trên?
Bài 4. Xét mt h thống trong ó một chương trình khi ược
np vào b nh s phân biệt hoàn toàn phân oạn code và phân oạn
data. Gi s CPU s xác ịnh ược khi nào cn truy xut lnh hay d
liu, phi truy xut âu. Khi ó mỗi chương trình s ược cung
cp 2 b thanh ghi base-limit: mt cho phân oạn code, và một cho
phân oạn data. B thanh ghi base-limit ca phân oạn code t ộng
ược ặt thuc tính readonly. Tho luận các ưu và khuyết iểm ca h
thng này.
Bài 5. Tại sao kích thước trang luôn là lũy thừa ca 2?
Bài 6. Xét một không gian ịa ch có 8 trang, mỗi trang có
kích thước 1K. Ánh x vào b nh vt lý có 32 khung trang.
a) Địa ch logic gm bao nhiêu bit?
b) Địa ch physic gm bao nhiêu bit?
Bài 7. Ti sao trong h thng s dng k thut phân trang,
mt tiến trình không th truy xuất ến vùng nh không ược cp cho
nó? Làm cách nào h iều hành có th cho phép s truy xut này xy
ra? H iều hành có nên cho phép iều ó không? Ti sao?
Bài 8. Xét mt h thng s dng k thut phân trang, vi
bng trang ược lưu trữ trong b nh chính.
a) Nếu thi gian cho mt ln truy xut b nh bình thường
200nanoseconds, thì mt bao nhiêu thi gian cho mt thao tác truy xut b nh
trong h thng này?
lOMoARcPSD| 41967345
124
b) Nếu s dng TLBs vi hit-ratio (t l tìm thy) là 75%, thời gian
tìm trong TLBs xem như bằng 0, tính thi gian truy xut b nh trong h thng
(effective memory reference time)
Bài 9. Nếu cho phép hai phn t trong bảng trang cùng lưu trữ
mt s hiu khung trang trong b nh thì s có hiu qa gì? Gii thích làm cách
nào hiu qa này có th ược s dụng gim thi gian cn khi sao chép mt khi
lượng ln vùng nh t v trí này sang v trí khác. Khi ó nếu sa ni dung mt
trang thì s tác ộng ến trang còn li thế nào?
Bài 10. Vì sao ôi lúc ngưi ta kết hp hai k thut phân trang
phân oạn?
Bài 11. t chế cho phép một phân oạn có th thuc v
không gian iạ ch ca hai tiến trình.
Bài 12. Gii thích vì sao chia s mt module trong k thuật phân
oạn li d hơn trong kỹ thut phân trang?
Bài 13. Xét bảng phân oạn sau ây:
Segment
Base
Length
0
219
600
1
2300
14
2
90
100
3
1327
580
4
1952
96
Cho biết ịa ch vật lý tương ứng với các ịa ch logique sau ây:
a. 0,430
b. 1,10
c. 2,500
d. 3,400
lOMoARcPSD|41967345
125
e. 4,112
Chương 7 BỘ NHỚ ẢO
B nh o mt k thut hiện ại giúp cho người dùng ược gii phóng
hoàn toàn khi mi bn tâm v gii hn b nhớ. Ý tưởng, ưu im và nhng vấn
liên quan ến vic t chc b nh o s ược trình y trong ni dung chương
này.
7.1. Giới thiệu
Nếu t toàn th không gian a ch vào b nh vt thì kích thước của
chương trình bị gii hn bởi kích thước b nh vt lý.
Thc tế, trong nhiều trường hp, chúng ta không cn phi np toàn b
chương trình vào bộ nh vt lý cùng mt lúc, vì ti mt thời iểm ch có mt ch
th ca tiến trình ược x lý. dụ, các chương trình u một oạn code x
lỗi, nhưng oạn code y hầu như rất ít khi ược s dng hiếm khi xy ra lỗi,
trong trường hp này, không cn thiết phi nạp oạn code x lý li t u.
T nhn xét trên, mt giải pháp ược xut cho phép thc hin mt
chương trình chỉ ược np tng phn vào b nh vật lý. Ý tưởng chính ca gii
pháp này là ti mi thời im ch lưu trữ trong b nh vt lý các ch th và d liu
của chương trình cần thiết cho vic thi hành ti thời iểm ó. Khi cần ến các ch th
khác, nhng ch th mi s ược np vào b nh, ti v trí trước ó b chiếm gi bi
các ch th nay không còn cần ến na. Vi gii pháp này, mt chương trình
th lớn hơn kích thước ca vùng nh cp phát cho nó.
Một cách thc hiện ý tưởng ca giải pháp trên ây sử dng k thut
overlay. K thuật overlay không òi hỏi bt k s tr giúp c bit nào ca h iều
hành, nhưng trái lại, lp trình viên phi biết cách lp trình theo cu trúc overlay,
và iều này òi hỏi khá nhiu công sc.
Để gii phóng lp trình viên khỏi các suy về gii hn ca b nh,
cũng không tăng thêm khó khăn cho công việc lp trình ca họ, người ta nghĩ ến
các k thut t ng, cho phép x lý một chương trình có kích thước ln ch vi
lOMoARcPSD|41967345
126
mt vùng nh kích thước nh. Giải pháp ược tìm thy vi khái nim bộ nhớ
ảo (virtual memory).
7.1.1. Định nghĩa
B nh o mt k thut cho phép x lý mt tiến trình không ược np
toàn b vào b nh vt lý. B nh o mô hình hoá b nh như một bảng lưu trữ
rt lớn và ồng nht, tách bit hn khái niệm không gian ịa ch và không gian vật
lý. Người s dng ch nhìn thy làm việc trong không gian a ch o, vic
chuyển i sang không gian vt do h iều hành thc hin vi s tr giúp ca
các cơ chế phn cng c th.
* Thảo luận:
- Cn kết hp k thut swapping n chuyn các phn của chương trình vào-
ra gia b nh chính và b nh ph khi cn thiết.
- Nh vic tách bit b nh o và b nh vt lý, có th t chc mt b nh
ảo có kích thước lớn hơn bộ nh vt lý.
- B nh o cho phép gim nh công vic ca lp trình viên h không
cn bận tâm ến gii hn ca vùng nh vật lý, cũng như không cần t chc chương
trình theo cấu trúc overlays.
Hình 7.1. Bộ nhớ ảo
7.1.2. Cài ặt bộ nhớ ảo
B nh ảo thường ược thc hin vi k thut phân trang theo yêu cầu
lOMoARcPSD|41967345
127
(demand paging). Cũng có thể s dng k thut phân oạn theo yêu cầu (demand
segmentation) cài t b nh o, tuy nhiên vic cp phát thay thế các phân
oạn phc tp hơn thao tác trên trang, kích thước không bng nhau của các oạn.
* Phân trang theo yêu cầu (demand paging)
Mt h thng phân trang theo yêu cu h thng s dng k thut phân
trang kết hp vi k thut swapping. Mt tiến trình ược xem như một tp các
trang, thường trú trên b nh ph (thường là ĩa). Khi cần x lý, tiến trình s ược
np vào b nh chính. Nhưng thay vì nạp toàn b chương trình, chỉ nhng trang
cn thiết trong thời iểm hin ti mới ược np vào b nhớ. Như vy mt trang ch
ược np vào b nh chính khi có yêu cu.
Vi hình này, cn cung cp một chế phn cng giúp phân bit các
trang ang ở trong b nh chính và các trang trên ĩa. Có thể s dng li bit valid-
invalid nhưng với ng nghĩa mi:
- valid: trang tương ứng là hp l và ang ở trong b nh chính.
- invalid: hoc trang bt hp l (không thuc v không gian ịa ch
ca tiến trình) hoc trang hp l nhưng ang ược lưu trên bộ nh ph.
Mt phn t trong bng trang m t cho mt trang không nm trong b nh
chính, s ược ánh dấu invalid và chứa ịa ch ca trang trên b nh ph.
* Cơ chế phần cứng:
chế phn cng h tr k thut phân trang theo yêu cu s kết hp
của cơ chế h tr k thut phân trang và k thut swapping:
- Bảng trang: Cu trúc bng trang phi cho phép phn ánh tình trng ca
một trang là ang nằm trong b nh chính hay b nh ph.
- Bộ nhớ phụ: B nh ph lưu trữ những trang không ược np vào b nh
chính. B nh ph thường ược s dụng là ĩa, vùng không gian ĩa dùng lưu
trữ tm các trang trong k thuật swapping ược gi là không gian swapping.
lOMoARcPSD|41967345
128
Bảng 7.2. Bảng trang với một số trang trên bộ nhớ phụ
* Lỗi trang:
Truy xuất ến một trang ược ánh dấu bt hp l s làm phát sinh mt lỗi
trang (page fault). Khi dò tìm trong bảng trang ể ly các thông tin cn thiết cho
vic chuyển ổi a ch, nếu nhn thy trang ang ược yêu cu truy xut bt hp
lệ, chế phn cng s phát sinh mt ngắt báo cho h iều hành. H iều hành
s x lý li trang như sau:
- Kim tra truy xuất ến b nh là hp l hay bt hp l.
- Nếu truy xut bt hp l: kết thúc tiến trình.
- Ngược lại: ến bước 3.
- Tìm v trí cha trang mun truy xuất trên ĩa.
- Tìm mt khung trang trng trong b nh chính:
+ Nếu tìm thy: ến bước 5.
+ Nếu không còn khung trang trng, chn mt khung trang nn nhân
chuyển trang nn nhân” ra b nh ph (lưu nội dung của trang ang chiếm gi
khung trang này lên ĩa), cập nht bảng trang tương ứng rồi ến bước 5.
- Chuyn trang mun truy xut t b nh ph vào b nh chính :
np trang cn truy xut vào khung trang trống ã chọn (hay va mi làm
trng); cp nht ni dung bng trang, bảng khung trang tương ứng.
lOMoARcPSD|41967345
129
- Tái kích hot tiến trình người s dng.
Hình 7.3. Các giai oạn x lý li trang
7.2. Thay thế trang
Khi xy ra mt li trang, cn phi mang trang vng mt vào b nh. Nếu
không mt khung trang nào trng, h iều hành cn thc hin công vic thay
thế trang chn một trang ang nm trong b nh mà không ược s dng ti thời
iểm hin ti chuyn ra không gian swapping trên ĩa gii phóng mt khung
trang dành ch np trang cn truy xut vào b nh.
Như vậy nếu không có khung trang trng, thì mi khi xy ra li trang cn
phi thc hin hai thao tác chuyn trang: chuyn mt trang ra b nh ph và np
mt trang khác vào b nh chính. Có th gim bt s ln chuyn trang bng cách
s dng thêm mt bit cập nhật (dirty bit). Bit này ược gn vi mi trang ể phn
ánh tình trng trang b cp nht hay không: giá tr ca bit ược chế phn
cứng t 1 mi ln mt t ược ghi vào trang, ghi nhn ni dung trang
b sửai. Khi cn thay thế mt trang, nếu bit cp nht có giá tr1 thì trang cần
ược lưu lại trên ĩa, ngược li, nếu bit cp nht là 0, nghĩa là trang không b thay
i, thì không cần lưu trữ trang tr lại ĩa.
s hiu trang
valid-invalid bit
dirty bit
Hình 7.4. Cấu trúc một phần tử trong bảng trang
lOMoARcPSD|41967345
130
S thay thế trang cn thiết cho k thut phân trang theo yêu cu. Nh cơ
chế này, h thng có th hoàn toàn tách ri b nh o và b nh vt lý, cung cp
cho lp trình viên mt b nh o rt ln trên mt b nh vt lý có thhơn rất
nhiu ln.
7.2.1. S thi hành phân trang theo yêu cu
Vic áp dng k thut phân trang theo yêu cu có th ảnh hưởng mnh ến
tình hình hoạt ộng ca h thng.
Gi s pxác sut xy ra mt li trang (0 p 1): p
= 0 : không có li trang nào
p = 1 : mi truy xut s phát sinh mt li trang
Thi gian tht s cần ể thc hin mt truy xut b nh (TEA) là:
TEA = (1-p)ma + p (tdp) [+ swap out ] + swap in + tái kích hot
Trong công thc này, ma là thi gian truy xut b nh, tdp thi gian x lý
li trang.
Có th thy rằng, ể duy trì mt mức ộ chp nhận ược s chm tr trong
hoạt ng ca h thng do phân trang, cn phi duy trì tỷ lệ phát sinh lỗi trang
thp.
Hơn nữa, ể cài ặt k thut phân trang theo yêu cu, cn phi gii quyết hai
vấn chính yếu: xây dng mt thuật toán cấp phát khung trang, thuật toán
thay thế trang.
7.2.2. Các thuật toán thay thế trang
Vấn ề chính khi thay thế trang là chn la mt trang nn nhân chuyn
ra b nh ph. Có nhiu thut toán thay thế trang khác nhau, nhưng tất c cùng
chung mt mc tiêu: chn trang nn nhântrang mà sau khi thay thế sy
ra ít li trang nht.
Có th ánh giá hiệu qa ca mt thut toán bng cách x trên mt chuỗi
các ịa chỉ cần truy xuất và tính toán s lượng li trang phát sinh.
lOMoARcPSD| 41967345
131
Ví d: Gi s theo vết x lý ca mt tiến trình và nhn thy tiến trình thc
hin truy xuất các ịa ch theo th t sau:
0100, 0432, 0101, 0162, 0102, 0103, 0104, 0101, 0611, 0102, 0103, 0104,
0101, 0610, 0102, 0103, 0104, 0101, 0609, 0102, 0105
Nếu kích thước ca mt trang 100 bytes, th viết li chuỗi truy
xuất trên giản lược hơn như sau:
1, 4, 1, 6, 1, 6, 1, 6, 1
Để xác nh s các li trang xy ra khi s dng mt thut toán thay thế trang
nào ó trên một chui truy xut c th, còn cn phi biết s lượng khung trang s
dng trong h thng.
Để minh ho các thut toán thay thế trang s trình bày, chui truy xut ược
s dng là:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
7.2.2.1. Thuật toán FIFO
- Tiếp cn: Ghi nhn thời iểm một trang ược mang vào b nh chính. Khi
cn thay thế trang, trang trong b nh lâu nht s ược chn - Ví d : s dng 3
khung trang, ban ầu c 3 ều trng
7
0
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
1
7
7
7
2
2
2
2
4
4
4
0
0
0
0
0
0
0
7
7
7
0
0
0
0
3
3
3
2
2
2
2
2
1
1
1
1
1
0
0
1
1
1
1
0
0
0
3
3
3
3
3
2
2
2
2
2
1
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Ghi chú: * : có li trang -
Tho lun:
lOMoARcPSD| 41967345
132
+ Để áp dng thut toán FIFO, thc tế không nht thiết phi ghi nhn thời
iểm mỗi trang ược np vào b nh, ch cn t chc qun lý các trang trong
b nh trong một danh sách FIFO, khi ó trang ầu danh sách s ược chọn thay
thế.
+ Thut toán thay thế trang FIFO d hiu, d cài t. Tuy nhiên khi thc
hin không phải lúc nào cũng có kết qa tt : trang ược chọn ể thay thế có th
trang chc nhiu d liu cn thiết, thường xuyên ược s dụng nên ược np sm,
do vy khi b chuyn ra b nh ph s nhanh chóng gây ra li trang.
+ S lượng li trang xy ra s tăng lên khi số lượng khung trang s dng
tăng. Hiện tượng này gi là nghịch lý Belady.
Ví d: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
S dng 3 khung trang, s có 9 li trang phát sinh
1
2
3
4
1
2
5
1
2
3
4
5
1
1
1
4
4
4
5
5
5
5
5
5
2
2
2
1
1
1
1
1
3
3
3
3
3
3
2
2
2
2
2
4
4
*
*
*
*
*
*
*
*
*
S dng 4 khung trang, s có 10 li trang phát sinh
1
2
3
4
1
2
5
1
2
3
4
5
1
1
1
1
1
1
5
5
5
5
4
4
2
2
2
2
2
2
1
1
1
1
5
3
3
3
3
3
3
2
2
2
2
4
4
4
4
4
4
3
3
3
lOMoARcPSD| 41967345
133
*
*
*
*
*
*
*
*
*
*
7.2.2.2. Thuật toán tối ưu
- Tiếp cn: Thay thế trang s lâu ược s dng nhất trong tương lai.
- Ví d: s dng 3 khung trang, khởi ầu ều trng
7
0
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
1
7
7
7
2
2
2
2
2
2
2
2
2
2
2
2
2
2
7
7
7
0
0
0
0
0
0
4
4
4
0
0
0
0
0
0
0
0
0
0
1
1
1
3
3
3
3
3
3
3
3
1
1
1
1
1
1
1
*
*
*
*
*
*
*
*
*
- Tho lun:
Thut toán y bảo m s lượng li trang phát sinh thp nht, nó cũng
không gánh chu nghịch lý Belady, tuy nhiên, ây là một thut toán không kh thi
trong thc tế, vì không th biết trước chui truy xut ca tiến trình.
7.2.2.3. Thuật toán “Lâu nhất chưa sử dụng” (Least-recently-used LRU)
- Tiếp cn: Vi mi trang, ghi nhn thời iểm cuối cùng trang ược
truy cp, trang ược chọn ể thay thế strang lâu nhất chưa ược truy xut.
- Ví d: s dng 3 khung trang, khởi ầu ều trng
7
0
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
1
7
7
7
2
2
2
2
4
4
4
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
3
3
3
3
3
3
0
0
0
0
0
1
1
1
3
3
3
2
2
2
2
2
2
2
2
2
7
7
7
*
*
*
*
*
*
*
*
*
*
*
*
- Tho lun:
lOMoARcPSD|41967345
134
+ Thut toán FIFO s dng thời iểm nạp chn trang thay thế, thut toán
tối ưu lại dùng thời iểm trang sẽ ược s dng, vì thời iểm này không th xác ịnh
trước nên thut toán LRU phi dùng thời iểm cui cùng trang ược truy xut
dùng quá kh gần ể d oán tương lai.
+ Thuật toán này òi hỏi phải ược chế phn cng h tr xác nh mt
th t cho các trang theo thời iểm truy xut cui cùng. th cài t theo mt
trong hai cách:
Sử dụng bộ ếm:
Thêm vào cu trúc ca mi phn t trong bng trang một trường ghi nhn
thời iểm truy xut mi nht, thêm vào cu trúc ca CPU mt b ếm. Mi
ln có s truy xut b nh, giá tr của counter tăng lên 1.
Mi ln thc hin truy xuất ến mt trang, giá tr của counter ược ghi nhận
vào trường thời iểm truy xut mi nht ca phn t tương ng vi trang trong
bng trang.
Thay thế trang có giá tr trường thời im truy xut mi nht là nh nht.
Sử dụng stack:
T chc một stack lưu trữ các s hiu trang.
Mi khi thc hin mt truy xuất ến mt trang, s hiu ca trang s ược
xóa khi v trí hiện hành trong stack và ưa lên ầu stack.
Trang nh stack trang ược truy xut gn nht, trang áy stack là
trang lâu nhất chưa ược s dng.
7.2.2.4. Các thuật toán xấp xỉ LRU
Có ít h thống ược cung cấp các h tr phn cứng ể i ặt ược thut toán
LRU tht s. Tuy nhiên, nhiu h thống ược trang b thêm mt bit tham khảo
(reference):
- Mt reference bit, ược khởi gán là 0, ược gn vi mt phn t trong bng
trang.
lOMoARcPSD| 41967345
135
- Reference bit ca một trang ược phn cứng t giá tr 1 mi ln trang tương
ứng ược truy cập, và ược phn cng gán tr v 0 sau tng chu k quy ịnh trước.
- Sau tng chu k quy ịnh trước, kim tra giá tr ca các reference bit,
th xác ịnh ược trang nào ã ược truy xuất ến và trang nào không, sau khi ã kiểm
tra xong, các reference bit ược phn cng gán tr v 0.
- Vi reference bit, có th biết ược trang nào ã ược truy xuất, nhưng không
biết ược th t truy xuất. Thông tin không ầy ủ này dẫn ến nhiu thut toán xp
x LRU khác nhau.
s hiu trang
valid-invalid bit
dirty bit
reference bit bit
Hình 7.5. Cấu trúc một phần tử trong bảng trang
a) Thuật toán với các reference bit phụ trợ
* Tiếp cn: th thu thp thêm nhiu thông tin v th t truy xuất hơn
bằng cách lưu tr các reference bits sau tng khong thời gian ều ặn:
- Vi mi trang, s dng thêm 8 bit lch s (history) trong bng trang
- Sau tng khong thi gian nhất ịnh (thường 100 millisecondes), mt
ngắt ồng h ược phát sinh, và quyền iều khiển ược chuyn cho h iều hành. H
iều hành t reference bit ca mi trang vào bit cao nht trong 8 bit ph tr ca
trang ó bằng cách ẩy các bit khác sang phi 1 v trí, b luôn bit thp nht.
- Như vậy 8 bit thêm vào này s u tr tình hình truy xuất ến trang trong
8 chu k cui cùng.
- Nếu giá tr của 8 bit là 00000000, thì trang tương ứng ã không ược dùng
ến sut 8 chu k cuối cùng, ngược li nếu nó ược dùng ến ít nht 1 ln trong mi
chu k, thì 8 bit ph tr s 11111111. Mt trang 8 bit ph tr giá tr
11000100 s ược truy xut gn thời iểm hin tại hơn trang 8 bit ph tr
01110111.
- Nếu xét 8 bit ph tr này như một s nguyên không du, thì trang LRU
là trang có s ph tr nh nht.
lOMoARcPSD|41967345
136
* Ví d:
0
0
1
0
0
0
1
1
1
0
HR =11000100
HR =11100010
HR =01110001
* Tho lun: S lượng các bit lch s th thay i tùy theo phn
cng, và phải ược chn sao cho vic cp nht là nhanh nht có th.
b) Thuật toán “cơ hội thứ hai”
* Tiếp cn: S dng mt reference bit duy nht. Thuật toán sở vn
FIFO, tuy nhiên khi chọn ược mt trang theo tiêu chun FIFO, kim tra reference
bit của trang ó :
- Nếu giá tr ca reference bit là 0, thay thế trang ã chọn.
- Ngược li, cho trang này một hội th hai, và chn trang FIFO tiếp
theo.
- Khi một trang ược cho hội th hai, giá tr ca reference bit ược t li
là 0, và thời iểm vào Ready List ược cp nht li là thời im hin ti.
- Một trang ã ược cho hội th hai s không b thay thế trước khi h
thống ã thay thế hết những trang khác. Hơn nữa, nếu trang thường xuyên ược s
dng, reference bit ca nó s duy trì ược giá tr 1, trang hầu như không bao
gi b thay thế.
* Tho lun:
Có th cài ặt thut toán “cơ hội th haivi mt xâu vòng.
lOMoARcPSD|41967345
137
Hình 7.6. Thuật toán thay thế trang <<cơ hội thứ hai >>
c) Thuật toán “cơ hội thứ hai”nâng cao (Not Recently Used - NRU) *
Tiếp cn: xem các reference bit và dirty bit như một cp có th t.
- Vi hai bit này, có th có 4 t hp to thành 4 lp sau:
(0,0) không truy xut, không sửa ổi: ây là trang tốt nhất ể thay thế.
(0,1) không truy xut gần ây, nhưng ã bị sửa ổi: trưng hp này không tht
tt, vì trang cần ược lưu trữ lại trước khi thay thế.
(1,0) ược truy xut gần ây, nhưng không bị sửa i: trang th nhanh chóng
ược tiếp tục ược s dng.
(1,1) ược truy xut gần ây, và bị sửa ổi: trang có th nhanh chóng ược tiếp
tục ược s dụng, và trước khi thay thế cn phải ược lưu trữ li.
- Lớp 1 có ộ ưu tiên thấp nht, và lớp 4 có ộ ưu tiên cao nhất.
lOMoARcPSD| 41967345
138
- Mt trang s thuc v mt trong bn lp trên, tu vào reference
bit và dirty bit của trang ó.
- Trang ược chọn ể thay thế là trang u tiên tìm thy trong lớp có ộ
ưu tiên thấp nht và khác rng.
d) Các thuật toán thống kê
* Tiếp cn: s dng mt biến ếm lưu trữ s ln truy xuất ến mt trang, và
phát trin hai thut toán sau :
- Thuật toán LFU: thay thế trang giá tr biến ếm nh nhất, nghĩa là trang
ít ược s dng nht.
- Thuật toán MFU: thay thế trang có gtr biến ếm ln nhất, nghĩa trang
ược s dng nhiu nht (most frequently used).
7.3. Cấp phát khung trang
Vấn ề t ra là làm thế nào ể cp phát mt vùng nh t do có kích thước c
nh cho các tiến trình khác nhau?
Trong trường hợp ơn giản nht ca b nh o h ơn nhiệm, th cp
phát cho tiến trình duy nht của người dùng tt c các khung trang trng.
Vấn ny sinh khi kết hp k thut phân trang theo yêu cu vi s a
chương: cần phi duy trì nhiu tiến trình trong b nh cùng lúc, vy mi tiến
trình s ược cp bao nhiêu khung trang.
* Số khung trang tối thiểu:
Vi mi tiến trình, cn phi cp phát mt s khung trang ti thiểu nào ó
tiến trình có th hoạt ng. S khung trang ti thiểu này ược quy nh bi kiến trúc
ca ca mt ch th.Khi mt li trang xảy ra trước khi ch th hin hành hoàn tt,
ch th ó cần ược tái khởi ộng, lúc ó cần các khung trang np tt c các
trang mà mt ch th duy nht có th truy xut.
S khung trang ti thiểu ược qui nh bi kiến trúc máy tính, trong khi s
khung trang tối a ược xác ịnh bởi dung lượng b nh vt lý có th s dng.
lOMoARcPSD| 41967345
139
* Các thuật toán cấp phát khung trang Có hai hướng tiếp
cn:
- Cấp phát cố ịnh:
- Cấp phát công bằng: nếu có m khung trang n tiến trình, mi tiến trình
ược cp m /n khung trang.
- Cấp phát theo tỷ lệ: y vào kích thước ca tiến trình cp phát s khung
trang:
si = kích thước ca b nh o cho tiến trình pi
S = si
m = s lượng tng cng khung trang có th s dng
Cp phát ai khung trang cho tiến trình pi
: ai = (si / S) m
- Cấp phát theo ưu tiên: s dụng ý tưởng cp phát theo t lệ, nhưng nhưng
số lượng khung trang cp cho tiến trình ph thuc vào ưu tiên của tiến trình,
hơn là phụ thuộc kích thước tiến trình:
Nếu tiến trình pi phát sinh mt li trang, chn mt trong các khung trang
của thay thế, hoc chn mt khung trang ca tiến trình khác với ưu tiên
thấp hơn ể thay thế.
* Thay thế trang toàn cục hay cục bộ
Có th phân các thut toán thay thế trang thành hai lp chính:
- Thay thế toàn cc: khi li trang xy ra vi mt tiến trình , chn trang nạn
nhân” t tp tt c các khung trang trong h thng, bt k khung trang ó ang ược
cp phát cho mt tiến trình khác.
- Thay thế cc b: yêu cu ch ược chn trang thay thế trong tp các khung
trang ược cp cho tiến trình phát sinh li trang.
Mt khuyết iểm ca thut toán thay thế toàn cc là các tiến trình không th
kiểm soát ược t l phát sinh li trang ca mình. thế, tuy thut toán thay thế
lOMoARcPSD|41967345
140
toàn cc nhìn chung cho phép h thng có nhiu kh năng x lý hơn, nhưng nó
có thể dn h thống ến tình trng trì trệ toàn bộ (thrashing).
7.3.1. Trì trệ toàn bộ hệ thống (Thrashing)
Nếu mt tiến trình không các khung trang cha nhng trang cn
thiết cho x lý, thì s thường xuyên phát sinh c li trang, thế phi
dùng ến rt nhiu thi gian s dụng CPU thc hin thay thế trang. Mt hoạt
ộng phân trang như thế ược gi sự trì trệ (thrashing). Mt tiến trình lâm vào
trng thái trì tr nếu nó s dng nhiu thời gian ể thay thế trang hơn là ể x lý.
Hiện tượng trì tr y ảnh hưởng nghiêm trọng ến hoạt ng h thng, xét
tình hung sau:
- H iều hành giám sát vic s dng CPU.
- Nếu hiu sut s dng CPU quá thp, h iều hành s nâng mức a chương
bằng cách ưa thêm một tiến trình mi vào h thng.
- H thng th s dng thut toán thay thế toàn cục chn các trang nn
nhân thuc mt tiến trình bt k ch np tiến trình mi, th s thay thế
c các trang ca tiến trình ang xử lý hin hành.
- Khi có nhiu tiến trình trong h thống hơn, thì một tiến trình s ược cấp
ít khung trang hơn, và do ó phát sinh nhiều lỗi trang hơn.
- Khi các tiến trình phát sinh nhiu li trang, chúng phi tri qua nhiu thi
gian ch các thao tác thay thế trang hoàn tất, lúc ó hiệu sut s dng CPU li
gim.
- H iều hành li quay tr lại bước 1...
Theo kch bản trên ây, hệ thng s lâm vào tình trng lun qun ca vic
giải phóng các trang ể cp phát thêm khung trang cho mt tiến trình, và các tiến
trình khác li thiếu khung trang... và các tiến trình không th tiếp tc x lý. Đây
chính nh trng trì trệ toàn bộ h thng. Khi tình trng trì tr này xy ra, h
thng gần như mất kh năng xử lý, tốc phát sinh lỗi trang tăng cao khủng khiếp,
không công vic nào th kết thúc tt c các tiến trình u bn rn vi vic
phân trang.
lOMoARcPSD|41967345
141
Để ngăn cản tình trng trì tr này xy ra, cn phi cp cho tiến trình các
khung trang cn thiết hoạt ng. Vấn cn gii quyết làm sao biết ược tiến
trình cn bao nhiêu trang?
hình cục bộ ( Locality): Theo lý thuyết cc b, thì khi mt tiến trình x
lý, nó có khuynh hướng di chuyn t nhóm trang cc b y ến nhóm trang cc
b khác. Mt nhóm trang cc b là mt tập các trang ang ược tiến trình dùng ến
trong mt khong thi gian. Một chương trình thường bao gm nhiu nhóm trang
cc b khác nhau và chúng có th giao nhau.
7.3.1.1. Mô hình “tập làm việc” (working set)
* Tiếp cận:
Mô hình working set ặt cơ sở trên lý thuyết cc b. Mô hình y s dng
mt tham s , ể ịnh nghĩa một ca s cho working set. Gi s kho sát ơn vị
thi gian (ln truy xut trang) cui cùng, tập các trang ược tiến trình truy xuất ến
trong ln truy cp cuối cùng này ược gi working set ca tiến trình ti thời
iểm hin ti. Nếu một trang ang ược tiến trình truy xuất ến, s nm trong
working set, nếu không ược s dng na , s b loi ra khi working set
ca tiến trình sau ơn vị thi gian k t ln truy xut cuối cùng ến nó. Như vậy
working set chính là mt s xp x ca khái nim nhóm trang cc b.
Hình 7.7. Mô hình working set
Mt thuc tính rt quan trng của working set kích thước ca nó. Nếu
tính toán ch thước working set, WSSi, cho mi tiến trình trong h thng, thì
th xem như:
D = WSSi
vi D là tng s khung trang yêu cu cho toàn h thng. Mi tiến trình s
dng c trang trong working set của nó, nghĩa tiến trình i yêu cu WSSi khung
lOMoARcPSD|41967345
142
trang. Nếu tng s trang yêu cầu vượt quá tng s trang có th s dng trong h
thng (D > m), thì s xy ra tình trng trì tr toàn b.
lOMoARcPSD| 41967345
143
* Sử dụng:
H iều hành giám sát working set ca mi tiến trình cp phát cho tiến
trình ti thiểu các khung trang chứa working set của nó. Như vậy mt tiến
trình mi ch th ược np vào h thống khi khung trang t do cho working
set ca nó. Nếu tng s khung trang yêu cu ca các tiến trình trong h thống
vượt quá các khung trang có th s dng, h iều hành chn mt tiến trình ể tm
dng, gii phóng bt các khung trang cho các tiến trình khác hoàn tt.
* Thảo luận:
- Chiến lược working set ã loại tr ược tình trng trì tr trong khi vn m
bo mức a chương của h thng cao nht th, cho phép s dng tối ưu
CPU.
- Điểm khó khăn của mô hình này là theo vết ca các working set ca tiến
trình trong tng thời iểm. th xp x hình working set vi mt ngt ng
h sau tng chu k nhất ịnh và mt reference bit:
+ Phát sinh mt ngt ng h sau tng T ln truy xut b nh.
+ Khi xy ra mt ngắt ồng h, kim tra các trang có reference bit là 1, các
trang này ược xem như thuộc v working set.
- Mt h thng s dng k thut phân trang theo yêu cu thun y (mt
trang không bao gi ược nạp trước khi có yêu cu truy xuất) ể l một ặc iểm khá
bt li: mt s lượng ln li trang xy ra khi khởi ộng tiến trình. Tình trng này
là hu qu của khuynh hướng ạt ti việc ưa nhóm trang cục bo b nh. Tình
trạng y cũng có th xy ra khi mt tiến trình b chuyn tm thi ra b nh phụ,
khi ược tái kích hot, tt c các trang ca tiến trình ã ược chuyển lên ĩa phải ược
mang tr li vào b nh, và mt lot li trang li xảy ra. Để ngăn cản tình hình
li trang xy ra quá nhiu ti thời iểm khi ng tiến trình, th s dng k thut
tin phân trang (prepaging): np vào b nh mt ln tt c các trang trong
working set ca tiến trình.
lOMoARcPSD|41967345
144
7.3.2. Tn sut xy ra li trang
* Tiếp cận: Tn sut li trang rt cao khiến nh trng trì tr h thng
th xy ra.
- Khi tn sut li trang quá cao, tiến trình cn thêm mt s khung trang.
- Khi tn sut li trang quá thp, tiến trình th s hu nhiu khung trang
hơn mức cn thiết.
th thiết lp mt giá tr chn trên chn dưới cho tn sut xy ra li
trang, trc tiếp ước lượng kim soát tn sut lỗi trang ngăn chặn tình
trang trì tr xy ra:
- Nếu tn sut lỗi trang vượt quá chn trên, cp cho tiến trình thêm mt
khung trang.
- Nếu tn sut li trang thấp hơn chặn dưới, thu hi bt mt khung trang
t tiến trình.
7.4. Tóm tắt
- Các k thut h tr các mô hình t chc b nh hiện ại :
+ Swapping: s dng thêm b nh ph lưu tr tm các tiến trình ang b
khóa, nh vy th tăng mức a chương của h thng vi cu hình máy
dung lượng b nh chính thp.
+ Bộ nhớ ảo: s dng k thut phân trang theo yêu cu, kết hp thêm k
thuật swapping m rng b nh chính. Tách biệt không gian a ch không
gian vt lý, nh ó thể x các chương trình kích thước lớn hơn b nh
vt lý tht s
- Khi cài t b nh o, phi s dng mt thut toán thay thế trang thích hợp
chn các trang b chuyn tm thi ra b nh ph, dành ch trong b nh chính
cho trang mi. Các thut toán thay thế thường s dng FIFO, LRU và các
thut toán xp x LRU, các thut toán thng kê NFU, MFU...
- Khi mức ộ a chương tăng cao ến mt chng mực nào ó, hệ thng có th
lâm vào tình trng trì tr do tt c các tiến trình u thiếu khung trang. Có th áp
lOMoARcPSD|41967345
145
dụng mô hình working set ể dành cho mi tiến trình ủ các khung trang cn thiết
ti mt thời iểm, t ó có thể ngăn chặn tình trng trì tr xy ra.
* Củng cố bài học:
Các câu hi cn tr lời ược sau bài hc này:
1. B nh o là gì?
2. S thật ằng sau o giác: gii hn ca b nh o? Chi phí thc hin?
3. Các vấn ề ca b nh o: thay thế trang, cp phát khung trang ?
4. Mô hình working set: khái nim, cách tính trong thc tế, s dng?
* Bài tập:
Bài 1. Khi nào thì xy ra li trang? t x lý ca h iều hành khi
li trang.
Bài 2. Gi smt chui truy xut b nh chiu dài p vi n s hiu
trang khác nhau xut hin trong chui. Gi s h thng s dng m khung trang
(khởi ộng trng). Vi mt thut toán thay thế trang bt k:
- Cho biết s lượng ti thiu các li trang xy ra?
- Cho biết s lượng tối a các lỗi trang xy ra?
Bài 3. Mt máy tính 32-bita ch, s dng mt bng trang nh cp. Địa
ch ảo ược phân b như sau: 9 bit dành cho bng trang cp 1, 11 bit cho bng
trang cp 2, cho offset. Cho biết kích thước mt trang trong h thng, a
ch o có bao nhiêu trang?
Bài 4. Gi s a ch o 32-bit ược phân tách thành 4 trường
a,b,c,d. 3 trường ầu tiên ược dùng cho bng trang tam cấp, trường
th 4 dành cho offset. S lượng trang ph thuc vào c kích
thước 4 trường này không? Nếu không, những trường nào ảnh
hưởng ến s lượng trang, và những trường nào không?
Bài 5. Mt máy tính 48-bit a ch o, 32-bit a ch
vt lý. Kích thước mt trang 8K. Có bao nhiêu phn t trong mt
bng trang (thông thường)? Trong bng trang nghịch ảo?
lOMoARcPSD| 41967345
146
Bài 6. Mt máy tính cung cấp cho người dùng một không
gian a ch o 2
32
bytes. Máy tính này có b nh vt lý 2
18
bytes. B
nh ảo ược thc hin vi k thuật phân trang, kích thước trang
4096 bytes. Mt tiến trình ca người dùng phát sinh a ch o
11123456. Gii thích cách h thng chuyển i a ch ảo này thành
a ch vật lý tương ng. Phân bit các thao tác phn mm phn
cng.
Bài 7. Gi s mt h thng s dng k thut phân trang
theo yêu cu. Bảng trang ược lưu trữ trong các thanh ghi. Để x
mt li trang tn 8 miliseconds nếu có sn mt khung trang trng,
hoc trang b thay thế không b sửa i ni dung, tn 20
miliseconds nếu trang b thay thế b sửai ni dung. Mi truy xut
b nh tn 100nanoseconds. Gi s trang b thay thếxác sut b
s i 70%. T l phát sinh li trang phải bao nhiêu th
duy trì thi gian truy xut b nh (effective acess time) không vượt
quá 200nanoseconds?
Bài 8. Xét các thut toán thay thế trang sau ây. Xếp th t
chúng da theo t l phát sinh li trang ca chúng. Phân bit các
thut toán chịu ng nghch lý Belady và c thut toán không b
nghch lý này ảnh hưởng.
a)LRU
b)FIFO
c)Chiến lưc thay thế ti ưu
d)Cơ hi th hai
Bài 9. Mt máy tính có 4 khung trang. Thời iểm np, thời
iểm truy cp cui cùng, c reference bit (R), modify (M) ca
mi trang trong b nh ược cho trong bng sau :
Trang
Np
Truy cp cui
R
M
0
126
279
0
0
1
230
260
1
0
lOMoARcPSD|41967345
147
2
120
272
1
1
3
160
280
1
1
Trang nào s ược chn thay thế theo:
a) Thut toán NRU; b) thut toán FIFO; c) thut toán LRU; d) thut toán
"cơ hội th 2".
Bài 10. Xét mng hai chiu A:
var A: array [1 ..100, 1..100] of integer;
Với A[1][1] ược lưu trữ ti v trí 200, trong b nh t chc theo k thut
phân trang với kích thước trang là 200. Mt tiến trình trong trang 0 (chiếm v trí
t 0 ến 199) s thao tác ma trn này; như vy mi ch th s ược np t trang 0.
Vi 3 khung trang, có bao nhiêu li trang s phát sinh khi thc hin vòng lặp sau
ây khởi ng mng, s dng thut toán thay thế LRU, gi s khung trang 1
cha tiến trình, hai khung trang còn lại ược khởi ộng trng thái trng:
a. for j:= 1 to 100 do for
i :=1 to 100 do A[i][j]:= 0; b.
for i :=1 to 100 do for j:=1 to
100 do A[i][j]:= 0;
Bài 11. Xét chui truy xut b nh sau:
1, 2 , 3 , 4 , 2 , 1 , 5 , 6 , 2 , 1 , 2 , 3 , 7 , 6 , 3 , 2 , 1 , 2 , 3 , 6
bao nhiêu li trang xy ra khi s dng các thut toán thay thế sau ây,
gi s có 1, 2, 3, 4, 5, 6, 7 khung trang?
a) LRU
b) FIFO
c) Chiến lược tối ưu
Bài 12. Trong mt h thng s dng k thut phân trang theo yêu cu,
xét hai oạn chương trình sau ây:
lOMoARcPSD|41967345
148
const N = 1024*1024 var A,B :
array [1..N] of integer;
[Program 1]
for i:=1 to N do
A[i]:=i; for
i:=1 to N do
B[A[i]]:=random(N);
[Program 2] for
i:=1 to N do A[i]:=
random(N); for i:=1
to N do
B[A[i]]:=i;
Bài 13. Gi s có một máy tính ồ chơi sử dng 7-bit ịa ch. Kích thước
mt trang 8 bytes, và h thng s dng mt bng trang nh cp, dùng 2-bit làm
ch mục ến bng trang cp 1 , 2-bit làm ch mục ến bng trang cp 2. Xét mt
tiến trình s dụng các ịa ch trong nhng phm vi sau : 0..15, 21..29, 94..106, và
115..127.
a) V chi tiết toàn b bng trang cho tiến trình này
b) Phi cp phát cho tiến trình bao nhiêu khung trang, gi s tt c u
nm trong b nh chính?
c) Bao nhiêu bytes ng vi các vùng phân mnh ni vi trong tiến trình
này?
d) Cn bao nhiêu b nh cho bng trang ca tiến trình này?
Bài 14. Gi s mt máy tính s dng 16-bit a ch. B nh o ược
thc hin vi k thuật phân oạn kết hợp phân trang, ch thước tối a ca một
phân oạn 4096 bytes. B nh vật lý ược phân thành các khung trang kích
thước 512 bytes.
lOMoARcPSD|41967345
149
a) Th hiện cách ịa ch ảo ược phân tích ể phn ánh segment, page,
offset
b) Xét mt tiến trình s dng các miền a ch sau, xác nh s hiu
segment và s hiệu page tương ứng trong segment mà chương trình truy cập ến:
350..1039, 3046..3904, 7100..9450, 33056..39200, 61230..63500
c) Bao nhiêu bytes ng vi các vùng phân mnh ni vi trong tiến
trình
này?
d) Cn bao nhiêu b nh cho bảng phân oạn bng trang ca tiến
trình
này?
lOMoARcPSD|41967345
150
Chương 8 HỆ THỐNG QUẢN LÝ TẬP TIN
Trong hu hết các ng dng, tp tin thành phn ch yếu. Cho mc
tiêu ca ng dụng cũng phải bao gm phát sinh s dng thông tin.
Thông thường u vào ca các ng dng là tập tin ầu ra cũng tập tin cho vic
truy xut của người s dụng và các chương trình khác sau này. Chương này gii
thiu nhng khái niệm và cơ chế ca h thng qun lý tp tin thông qua các nội
dung như sau:
- Các khái niệm cơ bản
- Mô hình t chc và qun lý các tp tin
Bài hc này giúp chúng ta hiểu ược tp tin là gì, cách thc t chc qun
lý tập tin như thếo, t ó giúp chúng ta hiểu ược các cơ chế i ặt h thng tp
tin trên các h iều hành.
Bài hc này òi hỏi nhng kiến thc v: các thao c vi tp tin, mt s tính
cht ca tp tin góc người s dng nhng kiến thc v cu trúc d liệu
cũng như về kiến trúc máy tính phn cu trúc và t chức lưu trữ của ĩa.
8.1. Các khái niệm cơ bản
8.1.1. Bộ nhớ ngoài
Máy tính phải sử dụng thiết bị khả năng lưu trữ trong thời gian dài
(long-term) vì:
Phi cha những lượng thông tin rt ln (gi vé máy bay, ngân hàng...).
Thông tin phải ược lưu giữ mt thời gian dài trước khi x lý.
Nhiu tiến trình có th truy cp thông tin cùng lúc.
Gii pháp là s dng các thiết b lưu trữ bên ngoài gi là b nh ngoài.
8.1.2. Tập tin và thư mục
- Tập tin:
lOMoARcPSD|41967345
151
Tập tin là ơn vị lưu tr thông tin ca b nh ngoài. Các tiến trình th c
hay to mi tp tin nếu cn thiết. Thông tin trên tp tin là vng bn không b ảnh
hưởng bi các x lý to hay kết thúc các tiến trình, ch mất i khi user tht s
mun xóa. Tập tin ược qun lý bi h iều hành.
- Thư mục:
Để lưu trữ dãy các tp tin, h thng qun lý tp tin cung cp thư mục,
trong nhiu h thng có th coi như là tập tin.
8.1.3. Hệ thống quản lý tập tin
Các tập tin ược qun lý bi h iều hành với cơ chế gi là h thng qun lý
tp tin. Bao gm: cách hin th, các yếu t cu thành tập tin, cách t tên, cách
truy xut, cách s dng và bo v tp tin, các thao tác trên tp tin.
Cách t chức thư mục, các ặc tính và các thao tác trên thư mục.
8.2. Mô hình tổ chức và quản lý các tập tin
8.2.1. Mô hình a,Tp
tin:
* Tên tập tin:
Tp tin một chế trừu tượng qun mỗi ối tượng phi mt
tên. Khi tiến trình to mt tp tin, nó s t mt tên, khi tiến trình kết thúc tp tin
vn tn ti và có th ược truy xut bi các tiến trình khác vi tên tp tin ó.
Cách ặt tên tp tin ca mi h iều hành là khác nhau, a số các h iều hành
cho phép s dng 8 ch cái t tên tập tin như ctdl, caycb, tamhghau v.v…,
thường thường thì các ký t s và ký t c biệt cũng ược s dụng như baitap2,
H thng tp tin thhay không phân bit ch thường ch hoa. Ví
d: UNIX phân bit ch thường và hoa còn MS-DOS thì không phân bit.
Nhiu h thng tp tin h tr tên tp tin gm 2 phần ược phân cách bi
dấu ‘.’ phần sau ược gi phn m rng. d: vidu.txt. Trong MSDOS
tên tp tin có t 1 ến 8 ký tư, phần m rng có t 1 ến 3 t. Trong UNIX
th có nhiều phân cách như prog.c.Z.
lOMoARcPSD|41967345
152
Mt s kiu m rộng thông thường là:
.bak, .bas, .bin, .c, .dat, .doc, .ftn, .hlp, .lib, .obj, .pas, .tex, .txt.
Trên thc tế phn m rng có hu ích trong mt s trường hp, ví d như
có nhng trình dch C ch nhn biết các tp tin có phn m rng là .C
* Cấu trúc của tập tin:
Gm 3 loi:
- y tun t các byte không cu trúc : h iu hành không biết ni dung
ca tp tin: MS-DOS và UNIX s dng loi này.
- y các record có chiu dài c nh.
- Cu trúc cây: gm cây ca nhng record, không cn thiết có cùng ộ dài,
mi record có một trường khóa giúp cho vic tìm kiếm nhanh hơn.
lOMoARcPSD|41967345
153
* Kiểu tập tin :
Nếu h iều hành nhn biết ược loi tp tin, nó có th thao tác mt cách hp
trên tập tin ó. Các hệ iều hành h tr cho nhiu loi tp tin khác nhau bao gm
các kiểu như : tập tin thường, thư mục, tp tin có ký t c bit, tp tin khi.
- Tập tin thường: tp tin text hay tp tin nh phân cha thông tin ca
người s dng.
- Thư mục: là nhng tp tin h thống dùng ể lưu giữ cu trúc ca h thng
tp tin.
- Tập tin tự ặc biệt: liên quan ến nhp xut thông qua các thiết b
nhp xut tun t như màn hình, máy in, mạng.
- Tập tin khối: dùng ể truy xut trên thiết b ĩa.
- Tập tin thường ược chia làm hai loi tập tin văn bản tp tin nh phân.
Tập tin văn bản chứa các dòng văn bản cui dòng ký hiu enter. Mi
dòng có ộ dài th khác nhau. Ưu iểm ca kiu tp tin nàyth hin th,
in hay son tho vi một editor thông thường. Đa số các chương trình dùng tập
tin văn bản ể nhp xuất, cũng dễ dàng làm ầu vào ầu ra cho chế pipeline.
Tập tin nhị phân có cu trúc khác tập tin văn bản. Mc dù v mt k thut ,
tp tin nh phân gm dãy các byte, nhưng hệ iều hành ch thc thi tp tin ó nếu
cấu trúc úng. dụ mt mt tp tin nh phân thi hành ược ca UNIX.
Thường thường nó bao gồm năm thành phần: header, text, data, relocation bits,
symbol table. Header bắt ầu bi byte nhn din cho biết ó tập tin thi hành. Sau
ó là 16 bit cho biết kích thước các thành phn ca tp tin, a ch bắt ầu thc hin
mt s bit c. Sau header d liu text ca tp tin. ược np vào b
nh và ịnh v li bi nhng bit relocation. Bng symbol ược dùng ể debug.
Mt d khác tp tin nh phân kiu archive. chứa các thư viện ã ược
dịch nhưng chưa ược liên kết. Bao gm mt header cho biết tên, ngày tạo, người
s hu, mã bo vệ, và kích thước…
lOMoARcPSD|41967345
154
Hình 8.1. Cu trúc tp tin nh phân trong UNIX
* Truy xuất tập tin:
Tập tin lưu trữ các thông tin. Khi tập tin ược s dng, các thông tin y
ược ưa vào bộ nh ca máy tính. nhiều cách truy xut chúng. Mt s h
thng cung cp ch một phương pháp truy xuất, mt s h thng khác, như IBM
chẳng hn cho phép nhiu cách truy xut.
Kiu truy xut tập tin ơn giản nht là truy xut tun t. Tiến trình ọc tt c
các byte trong tp tin theo th t t u. Các trình son tho hay trình biên dịch
cũng truy xuất tp tin theo cách y. Hai thao tác ch yếu trên tp tin ọc
ghi. Thao tác c s c mt mu tin tiếp theo trên tp tin t ng tăng con trỏ
tập tin. Thao tác ghi cũng tương tự như vậy. Tp tin có th t khi ng li t v
trí u tiên trong mt s h thng tp tin cho phép di chuyn con tr tập tin i
tới hoặc i lui n mẫu tin.
lOMoARcPSD|41967345
155
Truy xut kiu này thun li cho các loại băng từ và cũng là cách truy xut
khá thông dng. Truy xut tun t cn thiết cho nhiu ng dng. hai cách
truy xut. Cách truy xut th nhất thao tác c bắt u v trí u tp tin, cách th
hai một thao tác ặc bit gi SEEK cung cp v trí hin thi làm v trí bắt ầu.
Sau ó tập tin ược ọc tun t t v trí bắt ầu.
Hình 8.2. Truy xut tun t trên tp tin
Mt kiu truy xut khác truy xut trc tiếp. Mt tp tin cu trúc
các mẫu tin logic kích thước bằng nhau, cho phép chương trình c hoc
ghi nhanh chóng mà không cn theo th t. Kiu truy xut này da trên mô hình
của ĩa. Đĩa cho phép truy xuất ngu nhiên bt k khi d liu nào ca tp tin.
Truy xut trc tiếp ược s dụng trong trường hp phi truy xut mt khi lượng
thông tin lớn như trong sở d liu chng hn. Ngoài ra còn mt s cách
truy xut khác d trên kiu truy xuất này như truy xuất theo ch mc...
* Thuộc tính tập tin:
Ngoài tên và d liu, h iều hành cung cp thêm mt s thông tin cho tp
tin gi là thuc tính.
Các thuc tính thông dng trong mt s h thng tp tin:
Tên thuộc tính
Ý nghĩa
Bo v
Ai có th truy xuất ược và bng cách nào
Mt khu
Mt khu cn thiết ể truy xut tp tin
Người to
Id của người to tp tin
Người s hu
Người s hu hin ti
Ch c
0 là ọc ghi, 1 là ch c
lOMoARcPSD| 41967345
156
Aån
0 là bình thường, 1 là không hin th khi lit kê
H thng
0 là bình thường, 1 là tp tin h thng
Lưu trữ
0 ã uợc backup, 1 cn backup
ASCII/binary
0 là tập tin văn bản, 1 là tp tin nh phân
Truy xut ngu nhiên
0 truy xut tun t, 1 là truy xut ngu nhiên
Temp
0 là bình thường, 1 là b xóa khi tiến trình kết
thúc
Khóa
0 là không khóa, khác 0 là khóa
Độ dài ca record
S byte trong mt record
V trí khóa
Offset ca khóa trong mi record
Gi to
Ngày và gi to tp tin
Thi gian truy cp cui cùng
Ngày và gi truy xut tp tin gn nht
Thời gian thay ổi cui cùng
Ngày và gi thay ổi tp tin gn nht
Kích thước hin thi
S byte ca tp tin
Kích thước tối a.
S byte tối a của tp tin
Bảng 8.1. Một số thuộc tính thông dụng của tập tin b, Thư
mục:
* Hệ thống thư mục theo cấp bậc:
Một thư mục thường thường cha mt s entry, mi entry cho mt tp tin.
Mi entry cha tên tp tin, thuộc tính và ịa ch trên ĩa lưu dữ liu hoc mt entry
ch cha tên tp tin mt con tr, tr ti mt cấu trúc, trên ó thuc tính
v trí lưu trữ ca tp tin.
Khi mt tập tin ược m, h iều hành m trên thư mục ca cho ti khi
tìm thy tên ca tập tin ược mở. Sau ó sẽ xác nh thuộc tính cũng như a ch
lưu trữ trên ĩa ưa vào một bng trong b nh. Nhng truy xut sau ó thực hin
trong b nh chính.
lOMoARcPSD|41967345
157
S lượng thư mục trên mi h thng là khác nhau. Thiết kế ơn giản nht là
h thng ch có thư mục ơn (còn gọi là thư mục mt cp), cha tt c các tp tin
ca tt c người dùng, cách y d t chc và khai thác nhưng cũng dễ gây ra
khó khăn khi nhiều người s dng s nhiu tp tin trùng tên. Ngay c
trong trường hp ch một người s dng, nếu nhiu tp tin thì việc t tên
cho mt tp tin mi không trùng lp là mt vấn ề khó.
Cách th hai là có một thư mục gốc và trong ó có nhiều thư mục con, trong
mỗi thư mục con cha tp tin của người s dng (còn gọi thư mục hai cấp),
cách này tránh ược trường hợp xung ột tên nhưng cũng còn khó khăn với người
dùng nhiu tập tin. Người s dng luôn mun nhóm các ng dng li mt
cách logic.
T ó, hệ thống thư mục theo cp bc (còn gọi cây thư mục) ược hình
thành vi mô hình một thư mục có th cha tp tin hoc một thư mục con và c
tiếp tục như vậy hình thành y thư mục như trong các hệ iều hành DOS,
Windows, v. v...
Ngoài ra, trong mt s h iều hành nhiều người dùng, h thng còn y
dng các hình thc khác ca cấu trúc thư mục như cấu trúc thư mục theo th
có chu trình và cấu trúc thư mục theo ồ th tng quát. Các cu trúc này cho phép
các người dùng trong h thng th liên kết với nhau thông qua các thư mc
chia s.
lOMoARcPSD|41967345
158
Hình 8.3. Hai dạng cấu trúc thư mục
Hình 8.4. Hệ thống thư mục theo cấp bậc.
* Đường dẫn:
Khi mt h thng tập tin ược t chc thành mt cây thư mục, hai cách
xác ịnh mt tên tp tin. Cách th nht là ường dẫn tuyệt ối, mi tp tin ược
gán một ường dn t thư mục gốc ến tp tin. Ví d:
lOMoARcPSD|41967345
159
/usr/ast/mailbox.
Dng th hai ường dẫn tương ối, dạng này liên quan ến mt khái
nim là thư mục hiện hành hay thư mục làm việc. Người s dng có th quy ịnh
một thư mục là thư mục hin hành. Khi ó ường dn không bắt ầu t thư mục gốc
mà liên quan ến thư mục hin hành. Ví d, nếu thư mục hin hành là /usr/ast thì
tp tin với ường dn tuyệt i /usr/ast/mailbox th ược dùng ơn giản mailbox.
Trong phn ln h thng, mi tiến trình một thư mục hin hành riêng,
khi mt tiến trình thay ổi thư mục làm vic và kết thúc, khôngs thay i li
trên h thng tập tin. Nhưng nếu một hàm thư viện thay ổi ường dn sau ó
không ổi li thì sảnh hưởng ến tiến trình.
Hu hết các h iều hành u h tr h thống thư mục theo cp bc vi hai
entry c bit cho mỗi thư mục "." "..". "." ch thư mục hin hành, ".." ch
thư mục cha.
8.2.2. Các chức năng
* Tập tin:
- Tạo: Mt tập tin ược tạo chưa có dữ liu. Mc tiêu ca chức năng này
thông báo cho biết rng tập tin ã tồn ti và thiết lp mt s thuc tính.
- Xóa: Khi mt tp tin không còn cn thiết nữa, ược xóa tăng dung
lượng ĩa. Một s h iều hành t ng xtp tin sau mt khong thi gian n ngày.
- Mở: Trước khi s dng mt tp tin, tiến trình phi m nó. Mc tiêu ca
m cho phép h thng thiết lp mt s thuộc tính a ch ĩa trong bộ nh
tăng tốc ộ truy xut.
- Đóng: Khi chm dt truy xut, thuộc nh a ch trên ĩa không cần dùng
na, tập tin ược óng lại ể gii phóng vùng nh. Mt s h thng hn chế tối a số
tp tin m trong mt tiến trình.
- Đọc: Đọc d liu t tp tin ti v trí hin thi của ầu ọc, i gi s cho
biết cn bao nhiêu d liu và v trí của buffer lưu trữ nó.
lOMoARcPSD| 41967345
160
- Ghi: Ghi d liu lên tp tin t v trí hin thi của ầu c. Nếu cui tập
tin,kích thước tp tin s tăng lên, nếu ang ở gia tp tin, d liu s b ghi chng
lên.
- Thêm: Gn giống như WRITE nhưng dữ liệu luôn ược ghi vào cui tp
tin.
- Tìm: Dùng ể truy xut tp tin ngu nhiên. Khi xut hin li gi h thng,
v trí con tr ang v trí hiện hành ược di chuyn ti v trí cn thiết. Sau ó dữ
liu s ược ọc ghi ti v trí này.
- Lấy thuộc tính: Ly thuc tính ca tp tin cho tiến trình
- Thiết lập thuộc tính: Thay i thuc tính ca tp tin sau mt thi gian s
dng.
- Đổi tên: Thay ổi tên ca tập tin ã tồn ti.
* Thư mục:
- Tạo: Một thư mục ược to, nó rng, ngoi tr "." và ".." ược t t ng bi
h thng.
- Xóa: Xoá một thư mục, ch có thư mục rng mi b xóa, tư mục cha "."
và ".." coi như là thư mục rng.
- Mở thư mục: Tmục th ược c. d lit tt c tp tin trong
một thư mục, chương trình liệt m thư mục và c ra tên ca tt c tp tin chứa
trong ó. Trước khi thư mục ược ọc, nó phải ược m ra trước.
- Đóng thư mục: Khi một thư mục ã ược ọc xong, phải óng thư mục gii
phóng vùng nh.
- Đọc thư mục: Lnh này tr v entry tiếp theo trong thư mục ã mở. Thông
thường th ọc thư mục bng li gi h thng READ, lệnh ọc thư mc luôn
luôn tr v một entry dưới dng chun .
- Đổi tên: Cũng như tập tin, thư mục cũng có thể ược ổi tên.
lOMoARcPSD|41967345
161
- Liên kết: K thut này cho phép mt tp tin có th xut hin trong nhiu
thư mục khác nhau. Khi yêu cu, mt liên kết s ược to gia tp tin một
ường dẫn ược cung cp.
- Bỏ liên kết: Nếu tp tin ch còn liên kết vi một thư mục, nó s b loi b
hoàn toàn khi h thng, nếu nhiu thì nó b gim ch s liên kết.
* Câu hỏi kiểm tra kiến thức:
1. Tập tin gì? Thư mục là gì? Ti sao phi qun lý tập tin thư
mục?
2. Tp tin những ặc tính gì? Những c tính nào quan trng? Ti
sao?
3. Nêu các chức năng của tập tin và thư mục.
lOMoARcPSD|41967345
162
Chương 9 CÁC PHƯƠNG PHÁP CÀI ĐẶT HỆ THỐNG QUẢN LÝ
TẬP TIN
Người s dụng thì quan tâm ến cách t tên tp tin, các thao tác trên tập tin,
cây thư mục... Nhưng ối người cài ặt thì quan tâm ến tập tin và thư mục ược lưu
trữ như thế nào, vùng nh trên ĩa ược quản lý như thế nào làm sao cho toàn
b h thng làm vic hu hiu và tin cy. H thng tp tin ược cài ặt trên ĩa. Để
gia tăng hiu qu trong vic truy xut, mỗi ơn vị d liệu ược truy xut gi mt
khi. Mt khi d liu bao gm mt hoc nhiu sector. B phn t chc tp tin
qun vic lưu trữ tp tin trên nhng khi vt lý bng cách s dng các bng
cu trúc. Chương này sẽ gii thiu các phương pháp t chc qun tp tin
trên b nh ph thông qua các nội dung như sau: - Bng quản lý thư mục, tp
tin
- Bng phân phi vùng nh
- Tp tin chia s
- Quản lý ĩa
- Độ an toàn ca h thng tp tin
Bài hc này giúp chúng ta nắm ặc iểm cũng như ưu và khuyết iểm của các
phương pháp tổ chc qun lý tập tin trên ĩa và một s vấn ề liên quan khác nh
ó có thể hiểu ược cách các h iều hành c th qun lý tp tin như thế nào.
Bài học này òi hỏi nhng kiến thc v: mô hình t chc các tp tin thư
mục cũng và một s cu trúc d liu.
lOMoARcPSD|41967345
163
9.1. Bảng quản lý thư mục, tập tin
9.1.1. Khái niệm
Trước khi tập tin ược ọc, tp tin phải ược m, m tp tin h thng phi
biết ường dẫn do người s dng cung cấp ược nh v trong cu trúc ầu vào thư
mục (directory entry). Directory entry cung cp các thông tin cn thiết tìm kiếm
các khi. Tu thuc vào mi h thống, thông tin là a ch trên ĩa của toàn b tp
tin, s hiu ca khối ầu tiên, hoc là s I-node.
9.1.2. Cài ặt
Bảng này thường ược cài t phần u của ĩa. Bảng dãy các phn t
kích thước xác ịnh, mi phn t ược gi là mt entry. Mi entry s lưu thông tin
v tên, thuc tính, v trí lưu trữ... ca mt tập tin hay thư mục.
Ví d quản lý thư mục trong CP/M:
Hình 9.1. (thiếu ni dung)
9.2. Bảng phân phối vùng nhớ
9.2.1. Khái niệm
Bảng này thường ược s dng phi hp vi bng quản lý thư mục tp tin,
mc tiêu là cho biết v trí khi vt lý ca mt tập tin hay thư mục nào ó nói khác
i là lưu giữ dãy các khối trên ĩa cấp phát cho tập tin lưu dữ liu hay thư mục. Có
mt s phương pháp ược cài ặt.
9.2.2 Các phương pháp
* Định vị liên tiếp
Lưu trữ tp tin trên dãy các khi liên tiếp.
lOMoARcPSD|41967345
164
Phương pháp y 2 ưu iểm: th nht, d dàng cài t; th hai, d dàng
thao tác toàn b tp tin ược c t ĩa bằng thao tác ơn giản không cần nh v li.
Phương pháp này cũng có 2 khuyết iểm: không linh ộng tr khi biết trước
kích thước tối a của tp tin; s phân mảnh trên ĩa, gây lãng phí lớn.
* Định vị bằng danh sách liên kết:
Hình 9.2. Định v bng danh sách liên kết
Mi khối ều ược cp phát, không b lãng phí trong trường hp phân mnh
và directory entry ch cn chứa ịa ch ca khối ầu tiên.
Tuy nhiên khi d liu b thu hp li và truy xut ngu nhiên s chm.
Danh sách liên kết sử dụng index:
lOMoARcPSD|41967345
165
Hình 9.3. Bng ch mc ca danh sách
Tương tự như hai nhưng thay dùng con trỏ thì dùng mt bng index. Khi
ó toàn b khi ch cha d liu. Truy xut ngu nhiên s d dàng hơn. Kích thước
tập tin ược m rộng hơn. Hạn chế là bn này b gii hn bi kích thước b nh.
* I-nodes
Mt I-node bao gm hai phn. Phn th nht là thuc tính ca tp tin. Phần
này lưu trữ các thông tin liên quan ến tập tin như kiểu, người s hu, kích thước,
v.v... Phn th hai chứa ịa ch ca khi d liu. Phn này chia làm hai phn nh.
Phn nh th nht bao gm 10 phn t, mi phn t chứa ịa ch khi d liu ca
tp tin. Phn t th 11 chứa a ch gián tiếp cp 1 (single indirect), chứa a ch
ca mt khi, trong khối ó chứa mt bng th t 2
10
ến 2
32
phn t mi
phn t mi chứa a ch ca khi d liu. Phn t th 12 chứa a ch gián tiếp
cp 2 (double indirect), chứa a ch ca bng các khi single indirect. Phn t
th 13 chứa a ch gián tiếp cp 3 (double indirect), chứa a ch ca bng các khi
double indirect.
lOMoARcPSD|41967345
166
Cách t chức y tương ối linh ộng. Phương pháp y hiệu qu trong
trường hp s dụng ể quán lý nhng h thng tp tin ln. H iều hành s dụng
phương pháp này là Unix (Ví dụ: BSD Unix)
Hình 9.4. Cu trúc ca I-node
9.3. Tập tin chia sẻ
Khi có nhiều người s dng cùng làm vic trong một ề án, h cn chia sẻ
các tp tin. Cách chia s thông thường tp tin xut hiện trong các thư mục
như nhau nghĩa là một tp tin có th liên kết vi nhiều thư mục khác nhau.
Để cài ặt ược, khối ĩa không ược liệt kê trong thư mục mà ược thay thế
bng mt cu trúc d liệu, thư mục s tr ti cu trúc này. Mt cách khác là h
thng to mt tp tin mi có kiu LINK, tp tin mi này ch chứa ường dn ca
tập tin ược liên kết, khi cn truy xut s da trên tập tin LINK ể xác ịnh tp tin
cn truy xuất, phương pháp này gọi là liên kết hình thc. Mổi phương pháp ều có
những ưu và khuyết iểm riêng.
lOMoARcPSD|41967345
167
phương pháp thứ nht h thng biết ược bao nhiêu thư mục liên kết
vi tp tin nh vào ch s liên kết. phương pháp thứ hai khi loi b liên kết
hình thc, tp tin không b ảnh hưởng.
Hình 9.5.Cu trúc qun lý tp tin chia s
9.4. Quản lý ĩa (bộ nhớ ngoài)
Tập tin ược lưu trữ trên ĩa, do ó việc quản trị ĩa là hết sức quan trọng trong
việc cài ặt hệ thống tập tin. Có hai phương pháp lưu trữ: một là chứa tuần tự
trên n byte liên tiếp, hai là tập tin ược chia làm thành từng khối. Cách thứ nhất
không hiệu quả khi truy xuất những tập tin có kích thước lớn, do ó hầu hết các
hệ thống tập tin ều dùng khối có kích thước cố ịnh.
9.4.1. Kích thước khối
Mt vấn ặt ra kích thước khi phi bằng bao nhiêu. Điều y ph thuc
vào t chc ca ĩa như số sector, s track, s cylinder. Nếu dùng mt cylinder
cho mt khi cho mt tp tin thì theo tính toán s lãng phí ến 97% dung lượng
lOMoARcPSD|41967345
168
ĩa. Nên thông thường mi tập tin thường ược lưu trên một s khi. Ví d một ĩa
32768 byte trên một track, thi gian quay là 16.67 msec, thi gian m kiếm
trung bình 30 msec thì thi gian tính bằng msec c mt khối kích thước k
byte là:
30 + 8.3 + (k/32768) x 16.67
T ó thống kê ược kích thước khi thích hp phi < 2K .
Thông thường kích thưóc khối là 512, 1K hay 2K.
9.4.2. Lưu giữa các khối trống
hai phương pháp: Mt là: s dng danh sách liên kết ca khối ĩa. Mi
khi cha mt s các ịa chc khi trng. Ví d mt khối có kích thước 1 K có
th lưu trữ ược 511 a ch 16 bit. Một ĩa 20M cần khong 40 khi; Hai là, s dng
bitmap. Một ĩa n khối s ược ánh x thành n bit vi giá tr 1 là còn trng, giá tr
0 ã lưu dữ liệu. Như vậy một ĩa 20M cần 20K bit lưu trữ nghĩa chỉ
khong 3 khối. Phương pháp thứ hai này thường ược s dụng hơn.
Hình 9.6. Hai phương pháp lưu giữ khối trống
lOMoARcPSD|41967345
169
9.5. Độ an toàn của hệ thống tập tin
Mt h thng tp tin b hng còn nguy hiểm hơn máy tính bị hngnhững
hư hỏng trên thiết b s ít chi phí hơn là h thng tp tin vì nó ảnh hưởng ến các
phn mềm trên ó. Hơn nữa h thng tp tin không th chng lại ược nhng
hỏng do phn cng gây ra, vì vy chúng phi ược cài ặt mt s chức năng ể bo
v.
9.5.1. Quản lý khối bị hỏng
Đĩa thường nhng khi b hng trong quá trình s dụng c biệt i với ĩa
cứng vì khó kiểm tra ược hết tt c.
Có hai gii pháp: phn mm và phn cng.
Phn cng dùng một sector trên ĩa ể lưu giữ danh sách các khi b hng.
Khi b kim soát tc hin lần u tiên, c nhng khi b hng dùng mt
khi thừa ể lưu giữ. T ó không cho truy cập nhng khi hng na.
Phn mm h thng tp tin xây dng mt tp tin cha các khi hng.
K thut này loi tr chúng ra khi danh sách các khi trống, do ó sẽ không
ược cp phát cho tp tin.
9.5.2. Backup
Mc dù có các chiến lưọc qun lý các khi hỏng, nhưng một công vic hết
sc quan trng là phi backup tập tin thường xuyên.
Tập tin trên ĩa mềm ược backup bng cách chép li toàn b qua một ĩa khác.
D liu trên ĩa cứng nh thì ược backup trên các băng từ.
Đối với các ĩa cứng ln, việc backup thường ược tiến hành ngay trên nó.
Mt chiến lược d cài ặt nhưng lãng phí một nữa ĩa là chia ĩa cứng làm hai phn
mt phn d liu và mt phn là backup. Mi ti, d liu t phn d liu s ược
chép sang phn backup.
lOMoARcPSD|41967345
170
Hình 9.7. Backup
9.5.3. Tính không ổi của hệ thống tập tin
Mt vấn na v an toàn tính không ổi. Khi truy xut mt tp tin,
trong quá trình thc hin, nếu xy ra nhng s c làm h thng ngng hoạt
ộng t ngột, lúc ó hàng loạt thông tin chưa ược cp nhật lên ĩa. vy mi lân
khởi ộng, h thng s thc hin vic kim tra trên hai phn khi và tp tin. Vic
kim tra thc hin, khi phát hin ra li s tiến hành sa cha cho các trường hp
c th:
lOMoARcPSD|41967345
171
Hình 9.8 Trạng thái của hệ thống tập tin
Chương 10 GIỚI THIỆU MỘT SỐ HỆ THỐNG TẬP TIN
Chương này giới thiệu các phương pháp tổ chức quản tập tin của một
số hệ iều hành sau:
lOMoARcPSD|41967345
172
- MS-DOS
- Windows 95
- Windows NT
- Unix
Bài hc này giúp chúng ta hiểu ược cách mt s h iều hành thông dng
qun lý tập tin như thế nào.
Bài học này òi hỏi nhng kiến thc t hai bài học trước.
10.1. MS-DOS
10.1.1. Đặc iểm
H thng tp tin ca MS-DOS bt ngun t h thng tp tin ca h iều
hành CP/M. Nó có những ặc iểm như sau:
- H thống cây thư mục.
- Khái niệm thư mục hin hành.
- Đường dẫn tương ối và ường dn tuyệt ối.
- Thư mục "." và "..".
- Có tp tin thiết b và tp tin khi.
- Tên tp tin 8+3.
- Đường dn \.
- Không phân bit ch thường và ch hoa.
- Không có khái niệm người s hu.
- Không có khái nim nhóm và bo v.
- Không có liên kết.
- Không có mount h thng tp tin.
- Có thuc tính ca tp tin.
lOMoARcPSD|41967345
173
10.1.2. Cài ặt
Cài ặt trên ĩa mềm cũng tương tự như trên ĩa cứng, những trên ĩa cng phc
tạp hơn. Phần này khảo sát trên ĩa cứng. Lúc ó, hệ iều hành MSDOS ược cài t
trên một partition. Sector ầu tiên ca partitionbootsector.
Sau bootsector FAT (File Allocation Table), lưu giữ tt c không gian
trên ĩa theo phương pháp danh sách liên kết có ch mục. Thông thường có t hai
FAT tr lên ể phòng h. Mi entry ca FAT qun lý mt khi (còn gi là cluster
ược ánh số bắt ầu t 2) trên ĩa. Kích thước khối ược lưu trong bootsector thông
thường t 1 ến 8 sector. hai loi FAT FAT 12 và FAT 16. FAT 12 th
quản lý ược 4096 khi còn FAT 16 có th qun lý 64 K khi trên mt partition.
lOMoARcPSD|41967345
174
Hình 10.1. FAT trong MS-DOS
Giá tr trong mi phn t (entry) có ý nghĩa như sau :
0
Cluster còn trng
(0)002 - (F)FEF
Cluster cha d liu ca các tp tin
(F)FF0 - (F)FF6
Dành riêng, không dùng
(F)FF7
Cluster hng
(F)FF8 - (F)FFF
Cluster cui cùng ca chui
mt ánh x mt mt gia entrykhi ngoi tr hai entry u tiên, dùng
cho ĩa.
lOMoARcPSD|41967345
175
Khi h thng m mt tp tin, MS-DOS tìm trong bng mô t tp tin trong
PSP, sau ó kiểm tra tên tp tin xem có phi là con, lpt, ... tiếp theo kim tra các
ường dẫn ể xác ịnh v trí trong bảng thư mục.
Tên tp tin (8bytes)
Phn m rng (3bytes)
Thuc tính (1 byte) A-D-
V-S-H-R
Dành riêng (10bytes)
Gi (2bytes)
Ngày (2bytes)
Khối ầu tiên (2bytes)
Kích thước tp tin (4bytes)
Bảng 10.1 Mt entry ca thư mục trong MS-DOS
Bảng thư mục nm ngay sau FAT, và mỗi entry là 32 byte. Mười mt byte
u tiên mô t tênphn m rng (không lưu tr du chm phân cách). Sau ó
byte thuộc tính, vi giá tr :
1: Tp tin ch c
2: Tp tin n
4: Tp tin h thng
8: Nhãn ĩa
16: Thư mục con
32: Tập tin chưa backup
Byte thuc tính có th ược ọc ghi trong quá trình s dng. Tiếp theo là 10
byte trng dàng riêng s dụng sau này. Sau ó là 4 byte lưu trữ gi, ngày vi 6 bit
cho giây, 4 bit cho gi, 5 bit cho ngày, 4 bit cho tháng 7 bit cho năm (từ 1980).
Hai byte kế tiếp cha s hiu ca khối u tiên (khi trong MSDOS còn ược gi
là cluster) và bốn byte sau cùng lưu trữ kích thước ca tp tin.
Ví dụ:
lOMoARcPSD|41967345
176
Trên ĩa 1.44Mb, ược format dưới h iều hành MS-DOS gm 2880
sector:
- Sector u tiên bootsector, bao gm bng tham s vt lý của ĩa
chương trình khởi ộng ca h iều hành (nếu có).
- 18 sector tiếp theoFAT (FAT12), gm 2 bng, mi bng 9 sector. Ba
bytes ầu tiên của FAT lưu số hiu loại ĩa.(240, 255, 255).
- 14 sector kế tiếp cha bảng thư mục còn gi root directory entry
table(RDET)
- Các sector còn lại dùng ể lưu dữ liu (1 cluser = 1 sector).
10.2. Windows95
10.2.1. Bộ quản lý cài ặt hệ thống tập tin (IFS)
H thng tp tin ca Windows 95 32-bit cho phép nhng h thng
tp tin khác s dụng ược trên h thống này. cũng làm cho máy tính nhanh
hơn và linh hoạt hơn, nghĩa là bạn có nhiều vùng hơn cô lp x lý các vấn
.
B qun lý IFS qun lý các thao tác bên trong ca h thng tập tin ược cài
t. Các thành phn ca IFS bao gm IFSHLP.SYS và IFSMGR.VXD.
Hình 10.2. Cấu trúc của bộ quản lý hệ thống thông tin ược cài ặt
lOMoARcPSD|41967345
177
Trong Windows 95, h thng tp tin mt thành phn ca ring 0 ca h
iều hành. Sau ây là các bước cài ặt ca h thng tp tin trong Windows 95:
- VFAT- Bảng ịnh v file o cho truy cp file 32-bit. -
CDFS- h thng tp tin ca CD-ROM (thay thế MSCDEX) -
B ịnh hướng li-S dng cho truy xut mng.
Người s dụng cũng có thể cài t h thng tp tin khác. Ví d h thng tập
tin cài ặt trên h thng Windows 95 có th xtrên nhng h thng tp tin trên
nhng h iều hành khác như Macintosh hay UNIX.
B qun lý IFS qun lý vn chuyn nhp xut tp tin cho chế bo v ca
b ịnh hướng li, mode bo v ca server, VFAT, CDFS, và h thng tp tin ca
MS-DOS. Nhng h thng khác có th ược thêm vào trong tương lai.
10.2.2. VFAT
VFAT h thng tp tin FAT MS-DOS o 32 bit cung cp truy xut 32
bit cho Windows 95. VFAT.VXD driver iều khin quá trình o hóa s dng
mã 32 bit cho tt c các truy xut tp tin.
lOMoARcPSD|41967345
178
Hình 10.3. Tổ chức VFAT
VFAT ch cung cp truy xut o cho những volume ĩa cứng các thành
phn truy xuất ĩa 32 bit ược cài t. Nhng dng volume khác s cài t h thng
tp tin cho chính nó. Ví d h thng tp tin ca CD-ROM là CDFS.
VFAT ảo hóa ĩa sử dụng 32 bit truy xut tp tin. Ngoài ra
nhng chức năng sau :
- Đăng ký driver.
- Gi và lập hàng ợi cho yêu cu nhp/xut
- Gi những thông báo ến driver khi cn thiết.
- Cung cp nhng dch v cho driver nh v b nh hoàn tt
yêu cu nhp/xut.
Theo dõi volume luôn hin hu khi mt thiết b thông tin th ược
loi b. trách nhim m bo rằng thông tin úng với thiết b cũng như
kim tra và báo cáo nhng thông tin không thích hợp ược loi b hay chèn vào.
Nó thực hiện theo hai cách :
- Đối với ĩa không bảo v, theo dõi volume s ghi mt ID duy nht
vào u FAT của ĩa. ID này khác với s serial ca volume.
- Trên ĩa bảo vệ, theo dõi volume lưu trữ nhãn ĩa, số serial
khi tham s ca BIOS.
Bộ iều khiển mô tả kiểu (TSD)
TSD làm vic vi nhng thiết b ược mô t. Ví dụ, ĩa mềm và cng là mt
kiểu iều khiển nhưng ĩa CD kiểu khác. TSD lam cho các yêu cu nhp/xut có
hiu lc, chuyển ổi nhng yêu cu logic thành yêu cu vt lý, và thông báo khi
yêu cầu ã hoàn tất. th xem TSD như một. b dch gia b iều khin vt
và b qun tr nhp/xut.
lOMoARcPSD|41967345
179
10.2.3. VCACHE
Vcache là vùng b nh mode bo v ược s dng bi các b iều khin h
thng tp tin chế bo v (ngoi tr CDFS): VFAT, VREDIR, NWREDIR.
VCACHE ược cài ặt tương tự như Win 3.11. Bộ iều khin này thay thế cho phn
mm SMARTDrive disk cache 16-bit mode thc ca MSDOS Win3.1. Đặc
iểm ca VCACHE thuật toán thông minh hơn SMARTDrive trong u trữ
thông tin nhp xut t b iều khin ĩa.VCACHE cũng quản vùng lưu trữ
cho CDFS và NWREDIR 32-bit.
Vic s dng VCACHE là ph thuc vi thiết b. Ví d VCACHE dùng
truy xuất ĩa cứng khác vi VCACE truy xut CD-ROM. Tt c b iều khin h
thng tp tin ca Windows 95 tr CDFS u s dng mode bo v c buffer.
CDFS cung cấp cơ chế riêng. VFAT dùng VCACHE ể gim bt vic ghi.
B iều khin cổng ược thiết kế cung cp nhng truy xut cho adapter.
10.2.4. SCSI
Trong Windows 95, lp SCSI là trung gian gia lp TSD và b iều khin
cng. Có ba lớp SCSI ược mô t dưới ây:
lOMoARcPSD|41967345
180
B dch SCSI làm vic vi tt c nhng thiết b SCSI như ĩa cứng, CDROM.
B dch chu trách nhim xây dng khi t lnh SCSI cho nhng lp ca
thiết b SCSI và thc hin tìm li cp thiết b.
* Bộ quản trị SCSI:
B qun tr SCSI qun lý vic giao tiếp gia b dch SCSI và b iều khin
miniport. B iều khin cng SCSI khởi ng b iều khin mimiport, chuyển i
dng yêu cu nhp/xut, thc hin nhng thao tác giao tiếp vi b iều khin
miniport. Khi liên kết vi nó, b qun tr SCSI cung cp cùng chc năng như
Windows 95 chuẩn hoc b iều khiển Fast Disk cũng như quan tâm ến nhng
lp cấp cao hơn.
* Bộ iều khiển miniport:
Làm vic vi tp hp những adapter SCSI ược t. B iều khin ph
thuc vào nhng th tc lớp bên dưới khởi ng adapter, qun lý ngt, chuyn
nhng yêu cu nhp/xut cho thiết b, thc hin nhng khôi phc li mc
adapter. Khi kết hp vi b qun lý SCSI, cung cp cùng nhng chc năng
như bộ iều khin cng chun ca Windows 95.
Hình 10.4. Kiến trúc ASPI
B ánh x chương trình giao tiếp SCSI cao cp (ASPI) ca Windows 95
là APIX.VXD, cung cp h tr mode bo v cho nhng thiết b và chương trình
lOMoARcPSD|41967345
181
cn giao tiếp ASPI. B qun lý ASPI cung cp nhng giao tiếp gia b iều khin
thiết b và adapter chun và thiết b SCSI ược ni trên adapter ch.
B iều khin ASPI gi b qun tr ASPI. B qun tr ASPI chuyn li gi cho
CDB (Command Descriptor Khi) gi ti nhng thành phn SCSI. B qun tr
ASPI cn thiết cho những trường hp sau ây :
- Nhiu adapter ch.
- Đĩa cứng SCSI vi SCSI ID khác 0 hay 1.
- SCSI tape, máy in, máy v, máy quét.
10.2.5. CDFS
Hình 10.5. Kiến trúc của CDFS
CDFS thay thế cho VFAT trong iều khin thiết b CD-ROM. Chức năng
của CDFS tương tự như VFAT cho ĩa cứng. Các thành phần khác ều tương thích
vi version ca CD-ROM. Mt yêu cu nhp/xut tp tin trên CD-ROM ược
thc hin bi mt trong bn cách sau
- B iều khin IDE h tr mode bo v : ESDI_506.PDR.
- B iều khin SCSI h tr b iều khin miniport mode bo v.
lOMoARcPSD|41967345
182
- B iều khiển ưu tiên hỗ tr nhng b iều khin mode bo v
ược lit kê trong tp tin ADAPTER.INF.
- B iều khin thiết b CD-ROM mode thc s dng FAT MS-
DOS và MSCDEX như hệ thng tp tin m rng CD-ROM cho FAT.
CDFS s dng b lưu trữ chia s vi VCACHE.
Hỗ trợ tên tập tin dài: (LFN)
Windows 95 cho phép ặt tên tp tin dài không còn b gii hn bi 8.3 na.
Tuy nhiên, mi ln to(LFN), một tên 8.3 ược t ng gán cho nó.
Mt LFN th ti 256 t bao gm luôn c khong trắng. Đường
dn có th lên ến 260 ký t. Vic gán tên 8.3 cho LFN theo quy tc sau :
- B tt c nhng ký t c bit sau : \ ? : * “ < > |
- Ly 6 ký t u tiên ca LFN thêm du ~ và mt s bắt ầu t 1 ến 9, nếu
không ủ thì ch ly 5 ký t vi s t 10 ến 99 v.v...
- Đối vi phn m rng, s dng 3 ký t hp l u tiên sau du chm cui
cùng. Nếu không có du chm thì không có phn m rng.
Khi sao chép tập tin dưới MS-DOS, LFN s mất i, chỉ còn li tên 8.3
thôi. Nếu tập tin ược tạo dưới MS-DOS thì LFN cũng chính tên ó. Cũng
th s dng LFN trong ng dng MS-DOS nhưng khi ó, tên tập tin phi ược t
trong nháy kép. LFN s dng vùng dành riêng của FAT. Chương trình dùng phn
dành riêng của FAT ể tìm kiếm thông tin LFN.
10.3. WINDOWNS NT
H iều hành WindowsNT h tr nhiu loi h thng tp tin bao gm FAT
trên MS-DOS Windows95 OS/2. Tuy nhiên cũng hệ thng tập tin
riêng, ó là NTFS.
10.3.1. Đặc iểm của NTFS
NTFS là mt h thng tp tin mạnh và linh ộng, những ặc iểm ni bt là:
- Kh năng phục hi
lOMoARcPSD|41967345
183
- An toàn
- Quản lý ược ĩa dung lượng lớn và kích thước tp tin ln.
- Qun lý hiu qu.
10.3.2. Cấu trúc tập tin và volume của NTFS
NTFS s dng nhng khái nim sau: Sector, cluster, volume
Cluster ơn vị nh v bản trong NTFS. Kích thước tp tin tối a trong
NTFS là 2
32
cluster, tương ương 2
48
bytes. S tương ng gia kích thước volume
và cluster như hình sau:
Hình 10.6. Windows NTFS Partition và kích thước cluster.
Cu trúc volume ca NTFS :
Hình 10.7. Tng quan volume NTFS
Bao gm bn vùng. Vùng th nht là các sector khởi ộng ca partition (có
th ến 16 sectors) bao gm các thông tin v cu trúc ca volume, cu trúc ca h
thng tập tin cũng như những thông tin ngun khởi ng. Vùng tiếp theo
bng Master File (MFT) lưu các thông tin về tt c tập tin thư mục trên
volume NTFS này cũng như thông tin về các vùng trng. Sau vùng MFT vùng
các tp tin h thng có kích khong 1Mb bao gm:
- MFT2 : bn sao ca MFT
- Log file: thông tin v các giao tác dùng cho vic phc hi.
lOMoARcPSD|41967345
184
- Cluster bitmap: biu diễn thông tin lưu trữ ca các cluster
- Bảng ịnh nghĩa thuộc tính: ịnh nghĩa các kiểu thuc tính h tr
cho volume ó.
MFT ược t chc thành nhiu dòng. Mi dòng mô t cho mt tp tin hoc
một thư mục trên volume. Nếu kích thước tp tin nh thì toàn b ni dung ca
tập tin ược lưu trong dòng này. mỗi dòng cũng lưu những thuc tính cho tập tin
hay thư mục mà nó qun lý.
Kiểu thuộc tính
Mô tả
Thông tin chun
Bao gm các thuc tính truy xut (ch ọc, ọc/ghi,...),
nhãn thi gian, ch s liên kết
Danh sách thuc
tính
s dng khi tt c thuộc tính vượt quá 1 dòng ca MFT
Tên tp tin
Mô t an toàn
thông tin v người s hu và truy cp
D liu
Ch mc gc
dùng cho thư mục
Ch mục ịnh v
dùng cho thư mục
thông tin volume
như tên version và tên volume
Bitmap
hin trng các dòng trong MFT
Hình 10.2. Các kiểu thuộc tính của tập tin và thư mục của Windows NTFS
10.4. UNIX
10.4.1. Hệ thống tập tin của Unix
Mt tập tin ược m vi li gi h thng OPEN, vi tham s u tiên cho
biết ường dn tên tp tin , tham s th hai cho biết tập tin ược m c, ghi
hay vừa ọc va ghi. H thng kim tra xem tp tin có tn ti không. Nếu có, nó
kim tra bit quyền xem có ược quyn truy cp không, nếu h thng s tr v
mt s dương nhỏ gi biến mô t tập tin cho nơi gọi. Nếu không nó s tr v
1.
lOMoARcPSD|41967345
185
Khi mt tiến trình bắt u, nó luôn ba giá tr ca biến mô t tp tin: 0 cho
nhp chun, 1 cho xut chun 2 cho li chun. Tập tin ược m u tiên s
giá tr 3 sau ó 4 Khi tập tin óng, biến t tập tin cũng ược gii
phóng.
Có hai cách t tên tp tin trong UNIX. Cách th nhất là dùng ường dn
tuyệt i, tập tin ược truy cp t thư mục gc. Th hai dùng khái nim thư mục
làm việc hay thư mục hiện hành trong ường dẫn tương ối.
UNIX cung cấp c tính LINK, cho phép nhiều người s dng cùng dùng
chung mt tp tin, hay còn gi là chia s tp tin. Ví d như hình sau, fred lisa
cùng làm vic trong cùng một ề án, h cn truy cp tp tin ln nhau. Gi s fred
cn truy cp tp tin x ca lisa, anh ta s to mt entry mới trong thư mc của anh
ta và sau ó có thể dùng x với nghĩa là /usr/lisa/x.
Hình 10.8. Liên kết trong UNIX
Ngoài ra UNIX cho phép một ĩa thể ược mount thành mt thành phn
ca h thống cây thư mục ca một ĩa khác.
lOMoARcPSD|41967345
186
Hình 10.9. Mount trong UNIX
Một c tính thú v khác ca h thng tp tin ca UNIX là khóa (locking).
Trong mt s ng dng, mt s tiến trình có th s dng cùng mt tp tin cùng
lúc. hai loi khóa chia s hay loi tr. Nếu tập tin ã chứa khóa chia s thì
th t thêm mt khóa chia x nữa, nhưng không thể t mt khoá loi tr nhưng
nếu ã ược ặt khóa loi tr thì không th t thêm khóa na. Vùng khóa có th ược
ghi chng.
10.4.2. Cài ặt hệ thống tập tin của Unix
H thng tp tin của UNIX thông thường ược cài ặt trên ĩa như ở hình sau:
Hình 10.10. Tổ chức hệ thống tập tin của UNIX Khối
0 thường cha mã khởi ộng ca h thng.
Khi 1 gi khối c biệt (super block), u gi các thông tin quan trng
v toàn b h thng tp tin, bao gm:
- Kích thước ca toàn b h thng tp tin.
- Địa ch ca khi d liệu ầu tiên.
lOMoARcPSD| 41967345
187
- S lượng và danh sách các khi còn trng.
- S lượng và danh sách các I-node còn trng.
- Ngày super block ược cp nht cui cùng.
- Tên ca h thng tp tin.
Nếu khi này b hng, h thng tp tin s không truy cập ược. rt nhiu
trình ng dng s dụng thông tin lưu trữ trong super block. Vì vy mt bn sao
super block ca h thng tp tin gốc ược ặt trong RAM ể tăng tốc truy xuất ĩa.
Việc cp nht super block s ược thc hin ngay trong RAM sau ó mới ghi
xuống ĩa.
Sau khối ặc bit là các I-node, ược ánh số t mt cho ti tối a. Mỗi I-node
có ộ dài là 64 byte mô t cho mt tp tin duy nht (cha thuc tính và ịa ch
khối lưu trữ trên ĩa của tp tin).
Sau phn I-node là các khi d liu. Tt c tập tin thư mục ều ược lưu
trữ ây.
Mt entry của directory 16 byte, trong ó 14 byte là tên của tp tin 2
byte là ịa ch ca I-node. Để m mt tập tin trong thư mục làm vic, h thng ch
ọc thư mục, so sánh tên ược tìm thy trong mỗi entry cho ến khi tìm ược, t ó
xác ịnh ược ch s I-node và ưa vào bộ nh truy xut.
Tập tin ược tạo hay tăng kích thước bng cách s dng thêm các khi t
danh sách các khi còn trống. Ngược li, khối ược gii phóng s tr v danh sách
khi trng khi xóa tp tin. Super block s chứa a ch ca 50 khi trng. Trong ó
a ch cui cùng chứa a ch ca mt khi chứa ịa ch ca 50 khi trng kế tiếp
c tiếp tục như thế. Unix s dng khi trng trong super block trước. Khi
khi trng cuối cùng trong super block ược s dng, 50 khi trng kế tiếp s ược
ọc vào trong super block. Ngược li, khi mt khối ược gii phóng, ịa ch ca nó
s ược thêm vào danh sách của super block. Khi ã ủ 50 ịa ch trong super block,
khi trng kế tiếp s ược dùng lưu trữ 50 a ch khi trống ang t trong super
block thay cho super block.
* Bài tập
lOMoARcPSD|41967345
188
Bài 1:
Cho dãy byte của FAT12 như sau (bắt ầu t u):
240
255
255
0
64
0
9
112
255
255
143
0
255
255
255
Cho biết nhng phn t nào ca FAT giá tr c biệt, ý nghĩa của
phn t ó.
Nếu sa li phn t 5 FF0 thì y byte ca FAT12 y ni dung
như thế nào ?
Bài 2:
Biết giá trị(dưới dng thp phân) trong mt buffer (mi phn t 1
byte) lưu nội dung của FAT12 như sau (bắt ầu t phn t 0):
240
255
255
255
79
0
5
240
255
247
255
255
Cho biết giá tr ca tng phn t trong FAT (dưới dng s thp phân)
Bài 3:
Chép 1 tp tin kích thưc là 3220 bytes lên một ĩa 1.44Mb còn trống
nhưng bị hng sector logic 33. Cho biết giá tr tng byte ca Fat (thp
phân) t byte 0 ến byte 14 .
Bài 4:
Gi s một ĩa mềm có 2 side, mi side có 128 track, mi track có 18
sector. Thư mục gc ca ĩa có tối a là 251 tập tin (hoặc thư mục).
lOMoARcPSD|41967345
189
Một cluster = 2 sector. Đĩa sử dng Fat 12. Hi mun truy xut cluster 10
thì phải ọc nhng sector nào ?
Bài 5:
Hin trng ca FAT12 RDET (mi entry ch gm tên tp tin
cluster ầu tiên) ca một ĩa như sau :
240
255
255
247
79
0
6
0
0
255
159
0
10
240
255
255
127
255
VD TXT 3 LT DOC 7 THO DAT 8
Cho biết hin trng ca FAT12 RDET sau khi xoá tp tin vd.txt
chép vào tập tin bt.cpp kích thước 1025 bytes ( gi s 1 cluster = 1
sector)
Bài 6:
Mt tập tin ược lưu trên ĩa tại nhng khi theo th t sau :
20, 32, 34, 39, 52, 63, 75, 29, 37, 38, 47, 49, 56, 68, 79, 81, 92, 106,
157, 159, 160, 162, 163, 267, 269, 271, 277, 278, 279, 380, 381, 482, 489,
490, 499.
V I_node ca tp tin này, gi s mi khi ch chứa ược 3 phn t.
NHÀ XUẤT BẢN ĐẠI HỌC THÁI NGUYÊN
Địa ch: Phường Tân Thnh - Thành ph Thái Nguyên - Tnh Thái
Nguyên
Điện thoi: 0280 3840023; Fax: 0280 3840017
Website: nxb.tnu.edu.vn * E-mail: nxb.dhtn@gmail.com
NÔNG MINH NGỌC (Chủ biên), NGUYỄN VĂN HUY
GIÁO TRÌNH
lOMoARcPSD|41967345
190
NGUYÊN LÝ H ĐIỀU HÀNH
Chịu trách nhiệm xuất bản:
PGS.TS. NGUYỄN ĐC HNH
Giám ốc - Tng biên tp
Biên tập:
TRỊNH THANH ĐIỆP
Thiết kế bìa:
NGUYỄN VĂN HƯNG
Trình bày:
NGUYN TH THÙY DƯƠNG
Sửa bản in:
PHẠM VĂN VŨ
ISBN: 978-604-915-375-4
In 500 cun, kh 17 x 24 cm, ti Công ty TNHH In và Thương mại Trường Xuân
(Địa ch: Khu X1, Phm Hùng, T Liêm, Ni). Giy phép xut bn s
19282016/CXBIPH/01-67/ĐHTN. Quyết nh xut bn s: 104/QĐ-NXBĐHTN. In
xong và nộp lưu chiểu quý II năm 2016.
| 1/190

Preview text:

lOMoARcPSD| 41967345
NÔNG MINH NGỌC (Chủ biên), NGUYỄN VĂN HUY GIÁO TRÌNH
NGUYÊN LÝ HỆ ĐIỀU HÀNH
NHÀ XUẤT BẢN ĐẠI HỌC THÁI NGUYÊN NĂM 2016 lOMoARcPSD| 41967345 01 - 67 MÃ SỐ: ĐHTN - 2016 2 lOMoARcPSD| 41967345 MỤC LỤC
Chương 1. TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ............................................ 5
1.1. Khái niệm về hệ iều hành ...................................................................... 5
1.2. Phân loại hệ iều hành ............................................................................ 7
1.3. Cấu trúc của hệ iều hành ..................................................................... 11
1.4. Lịch sử phát triển các hệ iều hành ....................................................... 14
Chương 2. CÁC MÔ HÌNH XỬ LÝ ĐỒNG HÀNH .................................... 16
2.1. Nhu cầu xử lý ồng hành ...................................................................... 16
2.2. Khái niệm tiến trình (Process) và mô hình a tiến trình
(Multiprocess) .............................................................................................. 17
2.3. Khái niệm tiểu trình (Thread) và mô hình a tiểu trình ........................ 18
2.4. Tóm tắt .................................................................................................. 21
Chương 3. QUẢN LÝ TIẾN TRÌNH ............................................................. 23
3.1. Tổ chức quản lý tiến trình ..................................................................... 23
3.2. Điều phối tiến trình ............................................................................... 30
3.3. Tóm tắt .................................................................................................. 45
Chương 4. LIÊN LẠC GIỮA CÁC TIẾN TRÌNH & VẤN ĐỀ ĐỒNG BỘ
HOÁ .................................................................................................................. 49
4.1. Liên lạc giữa các tiến trình .................................................................... 49
4.2. Các cơ chế thông tin liên lạc ................................................................. 50
4.3. Nhu cầu ồng bộ hóa (synchronisation) ............................................... 57
4.4. Tóm tắt .................................................................................................. 60
Chương 5. CÁC GIẢI PHÁP ĐỒNG BỘ HOÁ ........................................... 63
5.1. Giải pháp “Busy waiting” ..................................................................... 64
5.2. Các giải pháp “SLEEP and WAKEUP” ............................................... 68
5.3. Vấn ề ồng bộ hoá .............................................................................. 76
5.4. Tắc nghẽn (Deadlock) ........................................................................... 83 3 lOMoARcPSD| 41967345
5.5. Tóm tắt .................................................................................................. 93
Chương 6. QUẢN LÝ BỘ NHỚ ................................................................... 104
6.1. Bối cảnh .............................................................................................. 105
6.2. Không gian ịa chỉ và không gian vật lý ............................................ 106
6.3. Cấp phát liên tục ................................................................................. 106
6.4. Cấp phát không liên tục ...................................................................... 110
6.5. Tóm tắt ................................................................................................ 124
Chương 7. BỘ NHỚ ẢO ............................................................................... 128
7.1. Giới thiệu ............................................................................................ 128
7.2. Thay thế trang ..................................................................................... 132
7.3. Cấp phát khung trang .......................................................................... 141
7.4. Tóm tắt ................................................................................................ 147
Chương 8. HỆ THỐNG QUẢN LÝ TẬP TIN ............................................ 153
8.1. Các khái niệm cơ bản .......................................................................... 153
8.2. Mô hình tổ chức và quản lý các tập tin ............................................... 154
Chương 9. CÁC PHƯƠNG PHÁP CÀI ĐẶT HỆ THỐNG QUẢN LÝ TẬP TIN
.................................................................................................................. 165
9.1. Bảng quản lý thư mục, tập tin ............................................................. 165
9.2. Bảng phân phối vùng nhớ ................................................................... 167
9.3. Tập tin chia sẻ ..................................................................................... 169
9.4. Quản lý ĩa .......................................................................................... 171
9.5. Độ an toàn của hệ thống tập tin ........................................................... 172
Chương 10. GIỚI THIỆU MỘT SỐ HỆ THỐNG TẬP TIN .................... 175
10.1. MS-DOS ............................................................................................ 175
10.2. Windows95 ....................................................................................... 179
10.3. WINDOWNS NT .............................................................................. 185
10.4. UNIX ................................................................................................. 187 4 lOMoARcPSD| 41967345
Chương 1 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH
Chương I cung cấp một cái nhìn tổng quát về những nguyên lý cơ bản của
hệ iều hành. Bắt ầu từ việc xem xét mục tiêu và các chức năng của hệ iều này,
sau ó ến việc khảo sát các dạng khác nhau cũng như xem xét quá trình phát triển
qua từng giai oạn của chúng. Các phần này ược trình bày trong các nội dung sau:
* Khái niệm về hệ iều hành
* Phân loại hệ iều hành
* Cấu trúc của hệ iều hành
* Lịch sử phát triển của hệ iều hành
Chương I giúp ta hiểu ược hệ iều hành là gì? có cấu trúc ra sao? hệ iều
hành ược phân loại theo những tiêu chuẩn nào? quá trình phát triển của hệ iều
hành phụ thuộc vào những yếu tố nào?. Chương I òi hỏi những kiến thức cơ bản về kiến trúc máy tính.
1.1. Khái niệm về hệ iều hành
Hệ iều hành là một chương trình hay một hệ chương trình hoạt ộng giữa
người sử dụng (user) và phần cứng của máy tính. Mục tiêu của hệ iều hành là
cung cấp môi trường ể người sử dụng có thể thi hành các chương trình giúp cho
máy tính dễ sử dụng hơn, thuận lợi hơn và hiệu quả hơn.
Hệ iều hành là một phần quan trọng của hầu hết các hệ thống máy tính.
Một hệ thống máy tính thường ược chia làm bốn phần chính: Phần cứng, Hệ iều
hành, các Chương trình ứng dụng và Người sử dụng.
Phần cứng bao gồm CPU, bộ nhớ, các thiết bị nhập xuất, ây là những tài
nguyên của máy tính. Chương trình ứng dụng như các chương trình dịch, hệ
thống cơ sở dữ liệu, các trò chơi, và các chương trình thương mại. Các chương
trình này sử dụng tài nguyên của máy tính ể giải quyết các yêu cầu của người sử 5 lOMoARcPSD| 41967345
dụng. Hệ iều hành iều khiển và phối hợp việc sử dụng phần cứng cho những ứng
dụng khác nhau của nhiều người sử dụng khác nhau. Hệ iều hành cung cấp một
môi trường mà các chương trình có thể làm việc hữu hiệu trên ó.
Hình 1.1. Mô hình trừu tượng của hệ thống máy tính
Hệ iều hành ược coi là bộ phân phối tài nguyên của máy tính bao gồm: thời
gian sử dụng CPU, vùng bộ nhớ, vùng lưu trữ tập tin, thiết bị nhập xuất v.v…
do các chương trình yêu cầu nhằm giải quyết những vấn ề do người dùng ặt ra.
Hệ iều hành cũng hoạt ộng như một bộ quản lý các tài nguyên và phân phối
chúng cho các chương trình và người sử dụng khi cần thiết. Do có rất nhiều yêu
cầu, hệ iều hành phải giải quyết vấn ề tranh chấp và phải quyết ịnh cấp phát tài
nguyên cho những yêu cầu theo thứ tự nào ể hoạt ộng của máy tính là hiệu quả
nhất. Một hệ iều hành cũng có thể ược coi như là một chương trình kiểm soát
việc sử dụng máy tính, ặc biệt là các thiết bị nhập xuất.
Tuy nhiên, nhìn chung chưa có ịnh nghĩa nào là hoàn hảo về hệ iều hành.
Hệ iều hành tồn tại ể giải quyết các vấn ề sử dụng hệ thống máy tính. Mục tiêu
cơ bản của nó là giúp cho việc thi hành các chương trình dễ dàng hơn. Mục tiêu
thứ hai là hỗ trợ cho các thao tác trên hệ thống máy tính hiệu quả hơn. Mục tiêu
này ặc biệt quan trọng trong những hệ thống nhiều người dùng và trong những
hệ thống lớn (phần cứng + quy mô sử dụng). Tuy nhiên hai mục tiêu này cũng 6 lOMoARcPSD| 41967345
có phần tương phản vì vậy lý thuyết về hệ iều hành tập trung vào việc tối ưu hóa
việc sử dụng tài nguyên của máy tính.
1.2. Phân loại hệ iều hành
1.2.1. Hệ thống xử lý theo lô
* Bộ giám sát thường trực:
Khi một công việc chấm dứt, hệ thống sẽ thực hiện công việc kế tiếp mà
không cần sự can thiệp của người lập trình, do ó thời gian thực hiện sẽ mau hơn.
Một chương trình, còn gọi là bộ giám sát thường trực ược thiết kế ể giám sát việc
thực hiện dãy các công việc một cách tự ộng, chương trình này luôn luôn thường trú trong bộ nhớ chính.
Hệ iều hành theo lô thực hiện các công việc lần lượt theo những chỉ thị ịnh trước.
* CPU và thao tác nhập xuất:
CPU thường hay nhàn rỗi do tốc ộ làm việc của các thiết bị nhập xuất
(thường là thiết bị cơ) chậm hơn rất nhiều lần so với các thiết bị iện tử. Cho dù
là một CPU chậm nhất, nó cũng nhanh hơn rất nhiều lần so với thiết bị nhập xuất.
Do ó phải có các phương pháp ể ồng bộ hóa việc hoạt ộng của CPU và thao tác nhập xuất. * Xử lý off_line:
Xử lý off_line là thay vì CPU phải ọc trực tiếp từ thiết bị nhập và xuất ra
thiết bị xuất, hệ thống dùng một bộ lưu trữ trung gian. CPU chỉ thao thác với bộ
phận này. Việc ọc hay xuất ều ến và từ bộ lưu trữ trung gian. * Spooling:
Spool (simultaneous peripheral operation on-line) là ồng bộ hóa các thao
tác bên ngoài on-line. Cơ chế này cho phép xử lý của CPU là on-line, sử dụng ĩa
ể lưu các dữ liệu nhập cũng như xuất. 7 lOMoARcPSD| 41967345
1.2.2. Hệ thống xử lý theo lô a chương
Khi có nhiều công việc cùng truy xuất lên thiết bị, vấn ề lập lịch cho các
công việc là cần thiết. Khía cạnh quan trọng nhất trong việc lập lịch là khả năng
a chương. Đa chương (multiprogram) gia tăng khai thác CPU bằng cách tổ chức
các công việc sao cho CPU luôn luôn phải trong tình trạng làm việc.
Ý tưởng như sau: hệ iều hành lưu giữ một phần của các công việc ở nơi
lưu trữ trong bộ nhớ. CPU sẽ lần lượt thực hiện các phần công việc này. Khi ang
thực hiện, nếu có yêu cầu truy xuất thiết bị thì CPU không nghỉ mà thực hiện
tiếp công việc thứ hai…
Với hệ a chương trình, hệ iều hành ra quyết ịnh cho người sử dụng vì vậy,
hệ iều hành a nhiệm rất tinh vi. Hệ phải xử lý các vấn ề lập lịch cho công việc,
lập lịch cho bộ nhớ và cho cả CPU.
1.2.3. Hệ thống chia sẻ thời gian
Hệ thống chia sẻ thời gian là một mở rộng logic của hệ a chương. Hệ thống
này còn ược gọi là hệ thống a nhiệm (multitasking). Nhiều công việc cùng ược
thực hiện thông qua cơ chế chuyển ổi của CPU như hệ a chương nhưng thời gian
mỗi lần chuyển ổi diễn ra rất nhanh.
Hệ thống chia sẻ ược phát triển ể cung cấp việc sử dụng bên trong của một
máy tính có giá trị hơn. Hệ iều hành chia sẻ thời gian dùng lập lịch CPU và a
chương ể cung cấp cho mỗi người sử dụng một phần nhỏ trong máy tính chia sẻ.
Một chương trình khi thi hành ược gọi là một tiến trình. Trong quá trình thi hành
của một tiến trình, nó phải thực hiện các thao tác nhập xuất và trong khoảng thời
gian ó CPU sẽ thi hành một tiến trình khác. Hệ iều hành chia sẻ cho phép nhiều
người sử dụng chia sẻ máy tính một cách ồng bộ do thời gian chuyển ổi nhanh
nên họ có cảm giác là các tiến trình ang ược thi hành cùng lúc.
Hệ iều hành chia sẻ phức tạp hơn hệ iều hành a chương. Nó phải có các
chức năng: quản trị và bảo vệ bộ nhớ, sử dụng bộ nhớ ảo. Nó cũng cung cấp hệ
thống tập tin truy xuất on-line…
Hệ iều hành chia sẻ là kiểu của các hệ iều hành hiện ại ngày nay. 8 lOMoARcPSD| 41967345
1.2.4. Hệ thống song song
Ngoài các hệ thống chỉ có một bộ xử lý còn có các hệ thống có nhiều bộ
xử lý cùng chia sẻ hệ thống ường truyền dữ liệu, ồng hồ, bộ nhớ và các thiết bị
ngoại vi. Các bộ xử lý này liên lạc bên trong với nhau
Có nhiều nguyên nhân xây dựng dạng hệ thống này. Với sự gia tăng số
lượng bộ xử lý, công việc ược thực hiện nhanh chóng hơn, Nhưng không phải
theo úng tỉ lệ thời gian, nghĩa là có n bộ xử lý không có nghĩa là sẽ thực hiện nhanh hơn n lần.
Hệ thống với máy nhiều bộ xử lý sẽ tối ưu hơn hệ thống có nhiều máy có
một bộ xử lý vì các bộ xử lý chia sẻ các thiết bị ngoại vi, hệ thống lưu trữ,
nguồn… và rất thuận tiện cho nhiều chương trình cùng làm việc trên cùng một tập hợp dữ liệu.
Một lý do nữa là ộ tin cậy. Các chức năng ược xử lý trên nhiều bộ xử lý và
sự hỏng hóc của một bộ xử lý sẽ không ảnh hưởng ến toàn bộ hệ thống.
Hệ thống a xử lý thông thường sử dụng cách a xử lý ối xứng, trong cách
này mỗi bộ xử lý chạy với một bản sao của hệ iều hành, những bản sao này liên
lạc với nhau khi cần thiết. Một số hệ thống sử dụng a xử lý bất ối xứng, trong ó
mỗi bộ xử lý ược giao một công việc riêng biệt. Một bộ xử lý chính kiểm soát
toàn bộ hệ thống, các bộ xử lý khác thực hiện theo lệnh của bộ xử lý chính hoặc
theo những chỉ thị ã ược ịnh nghĩa trước. Mô hình này theo dạng quan hệ chủ tớ.
Bộ xử lý chính sẽ lập lịch cho các bộ xử lý khác.
Một ví dụ về hệ thống xử lý ối xứng là version Encore của UNIX cho máy
tính Multimax. Hệ thống này có hàng tá bộ xử lý. Ưu iểm của nó là nhiều tiến
trình có thể thực hiện cùng lúc. Một hệ thống a xử lý cho phép nhiều công việc
và tài nguyên ược chia sẻ tự ộng trong những bộ xử lý khác nhau.
Hệ thống a xử lý không ồng bộ thường xuất hiện trong những hệ thống lớn,
trong ó hầu hết thời gian hoạt ộng ều dành cho xử lý nhập xuất. 9 lOMoARcPSD| 41967345
1.2.5. Hệ thống phân tán
Hệ thống này cũng tương tự như hệ thống chia sẻ thời gian nhưng các bộ
xử lý không chia sẻ bộ nhớ và ồng hồ, thay vào ó mỗi bộ xử lý có bộ nhớ cục bộ
riêng. Các bộ xử lý thông tin với nhau thông qua các ường truyền thông như
những bus tốc ộ cao hay ường dây iện thoại.
Các bộ xử lý trong hệ phân tán thường khác nhau về kích thước và chức
năng. Nó có thể bao gồm máy vi tính, trạm làm việc, máy mini, và những hệ
thống máy lớn. Các bộ xử lý thường ược tham khảo với nhiều tên khác nhau như
site, node, computer v.v... tùy thuộc vào trạng thái làm việc của chúng.
Các nguyên nhân phải xây dựng hệ thống phân tán là:
* Chia sẻ tài nguyên: Một người sử dụng A có thể sử dụng máy in laser
của người sử dụng B và người sử dụng B có thể truy xuất những tập tin của A.
Tổng quát, chia sẻ tài nguyên trong hệ thống phân tán cung cấp một cơ chế ể
chia sẻ tập tin ở vị trí xa, xử lý thông tin trong một cơ sở dữ liệu phân tán, in ấn
tại một vị trí xa, sử dụng những thiết bị ở xa ể thực hiện các thao tác.
* Tăng tốc ộ tính toán: Một thao tác tính toán ược chia làm nhiều phần nhỏ
cùng thực hiện một lúc. Hệ thống phân tán cho phép phân chia việc tính toán
trên nhiều vị trí khác nhau ể tính toán song song.
* An toàn: Nếu một vị trí trong hệ thống phân tán bị hỏng, các vị trí khác
vẫn tiếp tục làm việc.
* Thông tin liên lạc với nhau : Có nhiều lúc, chương trình cần chuyển ổi
dữ liệu từ vị trí này sang vị trí khác. Ví dụ trong hệ thống Windows, thường có
sự chia sẻ và chuyển dữ liệu giữa các cửa sổ. Khi các vị trí ược nối kết với nhau
trong một hệ thống mạng, việc trao ổi dữ liệu diễn ra rất dễ. Người sử dụng có
thể chuyển tập tin hay các E_mail cho nhau từ cùng vị trí hay những vị trí khác.
1.2.6. Hệ thống xử lý thời gian thực
Hệ thống xử lý thời gian thực ược sử dụng khi có những òi hỏi khắt khe
về thời gian trên các thao tác của bộ xử lý hoặc dòng dữ liệu, nó thường ược 10 lOMoARcPSD| 41967345
dùng iều khiển các thiết bị trong các ứng dụng tận hiến (dedicated). Máy tính
phân tích dữ liệu và có thể chỉnh các iều khiển giải quyết cho dữ liệu nhập.
Một hệ iều hành xử lý thời gian thực phải ược ịnh nghĩa tốt, thời gian xử
lý nhanh. Hệ thống phải cho kết quả chính xác trong khoảng thời gian bị thúc ép
nhanh nhất. Có hai hệ thống xử lý thời gian thực là hệ thống thời gian thực cứng
và hệ thống thời gian thực mềm.
Hệ thống thời gian thực cứng là công việc ược hoàn tất úng lúc. Lúc ó dữ
liệu thường ược lưu trong bộ nhớ ngắn hạn hay trong ROM. Việc xử lý theo thời
gian thực sẽ xung ột với tất cả hệ thống liệt kê ở trên.
Dạng thứ hai là hệ thống thời gian thực mềm, mỗi công việc có một ộ ưu
tiên riêng và sẽ ược thi hành theo ộ ưu tiên ó. Có một số lĩnh vực áp dụng hữu
hiệu phương pháp này là multimedia hay thực tại ảo.
1.3. Cấu trúc của hệ iều hành
1.3.1. Các thành phần của hệ thống
1.3.1.1. Quản lý tiến trình
Một chương trình không thực hiện ược gì cả nếu như nó không ược CPU
thi hành. Một tiến trình là một chương trình ang ược thi hành, nhưng ý nghĩa của
nó còn rộng hơn. Một công việc theo lô là một tiến trình. Một chương trình người
dùng chia sẻ thời gian là một tiến trình, một công việc của hệ thống như soopling
xuất ra máy in cũng là một tiến trình.
Một tiến trình phải sử dụng tài nguyên như thời gian sử dụng CPU, bộ nhớ,
tập tin, các thiết bị nhập xuất ể hoàn tất công việc của nó. Các tài nguyên này
ược cung cấp khi tiến trình ược tạo hay trong quá trình thi hành. Khi tiến trình
ược tạo, nó sử dụng rất nhiều tài nguyên vật lý và luận lý cũng như một số khởi
tạo dữ liệu nhập. Ví dụ, khảo sát tiến trình hiển thị trạng thái của tập tin lên màn
hình. Đầu vào của tiến trình là tên tập tin, và tiến trình sẽ thực hiện những chỉ thị
thích hợp, thực hiện lời gọi hệ thống ể nhận ược những thông tin mong muốn và
hiển thị nó lên màn hình. Khi tiến trình kết thúc, hệ iều hành sẽ tái tạo lại các tài
nguyên có thể ược dùng lại. 11 lOMoAR cPSD| 41967345
Một tiến trình là hoạt ộng (active) hoàn toàn - ngược lại với một tập tin
trên ĩa là thụ ộng (passive)-với một bộ ếm chương trình cho biết lệnh kế tiếp ược
thi hành. Việc thi hành ược thực hiện theo cơ chế tuần tự, CPU sẽ thi hành từ
lệnh ầu ến lệnh cuối.
Một tiến trình ược coi là một ơn vị làm việc của hệ thống. Một hệ thống
có thể có nhiều tiến trình cùng lúc, trong ó một số tiến trình là của hệ iều hành,
một số tiến trình là của người sử dụng các tiến trình này có thể diễn ra ồng thời.
Vai trò của hệ iều hành trong việc quản lý tiến trình là:
* Tạo và hủy các tiến trình của người sử dụng và của hệ thống.
* Ngưng và thực hiện lại một tiến trình.
* Cung cấp cơ chế ồng bộ tiến trình.
* Cung cấp cách thông tin giữa các tiến trình.
* Cung cấp cơ chế kiểm soát deadlock (khái niệm này sẽ ược trình bày trong chương II).
1.3.1.2. Quản lý bộ nhớ chính
Trong hệ thống máy tính hiện ại, bộ nhớ chính là trung tâm của các thao
tác, xử lý. Bộ nhớ chính có thể xem như một mảng kiểu byte hay kiểu word. Mỗi
phần tử ều có ịa chỉ. Đó là nơi lưu dữ liệu ược CPU truy xuất một cách nhanh
chóng so với các thiết bị nhập/xuất. CPU ọc những chỉ thị từ bộ nhớ chính. Các
thiết bị nhập/xuất cài ặt cơ chế DMA (xem chương IV) cũng ọc và ghi dữ liệu
trong bộ nhớ chính. Thông thường bộ nhớ chính chứa các thiết bị mà CPU có
thể ịnh vị trực tiếp. Ví dụ CPU truy xuất dữ liệu từ ĩa, những dữ liệu này ược
chuyển vào bộ nhớ qua lời gọi hệ thống nhập/xuất.
Một chương trình muốn thi hành trước hết phải ược ánh xạ thành ịa chỉ
tuyệt ối và nạp vào bộ nhớ chính. Khi chương trình thi hành, hệ thống truy xuất
các chỉ thị và dữ liệu của chương trình trong bộ nhớ chính. Ngay cả khi tiến trình
kết thúc, dữ liệu vẫn còn trong bộ nhớ cho ến khi một tiến trình khác ược ghi chồng lên. 12 lOMoAR cPSD| 41967345
Để tối ưu hóa quá trình hoạt ộng của CPU và tốc ộ của máy tính, một số
tiến trình ược lưu giữ trong bộ nhớ. Có rất nhiều kế hoạch quản trị bộ nhớ do có
nhiều ứng dụng bộ nhớ khác nhau và hiệu quả của các thuật toán phụ thuộc vào
tùy tình huống cụ thể. Lựa chọn một thuật toán cho một hệ thống ược mô tả trước
phụ thuộc vào nhiều yếu tố, ặc biệt là phần cứng của hệ thống.
Hệ iều hành có những vai trò như sau trong việc quản lý bộ nhớ chính:
* Lưu giữ thông tin về các vị trí trong bộ nhớ ã ược sử dụng và ai sử dụng.
* Quyết ịnh tiến trình nào ược nạp vào bộ nhớ chính, khi bộ nhớ ã có thể dùng ược.
* Cấp phát và thu hồi bộ nhớ khi cần thiết.
1.3.1.3. Quản lý bộ nhớ phụ
Mục tiêu chính của hệ thống máy tính là thi hành chương trình. Những
chương trình với dữ liệu truy xuất của chúng phải ược ặt trong bộ nhớ chính
trong suốt quá trình thi hành. Nhưng bộ nhớ chính quá nhỏ ể có thể lưu giữ mọi
dữ liệu và chương trình, ngoài ra dữ liệu sẽ mất khi không còn ược cung cấp
năng lượng. Hệ thống máy tính ngày nay cung cấp hệ thống lưu trữ phụ. Đa số
các máy tính ều dùng ĩa ể lưu trữ cả chương trình và dữ liệu. Hầu như tất cả
chương trình: chương trình dịch, hợp ngữ, thủ tục, trình soạn thảo, ịnh dạng... ều
ược lưu trữ trên ĩa cho tới khi nó ược thực hiện, nạp vào trong bộ nhớ chính và
cũng sử dụng ĩa ể chứa dữ liệu và kết quả xử lý. Vì vậy một bộ quản lý hệ thống
ĩa rất quan trọng cho hệ thống máy tính.
Vai trò của hệ iều hành trong việc quản lý ĩa:
* Quản lý vùng trống trên ĩa. * Định vị lưu trữ. * Lập lịch cho ĩa.
Vì hệ thống ĩa ược sử dụng thường xuyên, nên nó phải ược dùng hiệu quả.
Tốc ộ của toàn bộ hệ thống tuỳ thuộc rất nhiều vào tốc ộ truy xuất ĩa. 13 lOMoARcPSD| 41967345
1.3.1.4. Quản lý hệ thống nhập xuất
Một trong những mục tiêu của hệ iều hành là che dấu những ặc thù của các
thiết bị phần cứng ối với người sử dụng, thay vào ó là một lớp thân thiện hơn,
người sử dụng thao tác hơn.
Một hệ thống nhập/xuất bao gồm:
* Hệ thống buffer caching. * Giao tiếp
1.4. Lịch sử phát triển các hệ iều hành
1.4.1. Thế hệ 1 (1945 – 1955)
Vào khoảng giữa thập niên 1940, Howard Aiken ở Havard và John von
Neumann ở Princeton ã thành công trong việc xây dựng máy tính dùng ống chân
không. Những máy này rất lớn với hơn 10000 ống chân không nhưng chậm hơn
nhiều so với máy rẻ nhất ngày nay.
Mỗi máy ược một nhóm thực hiện tất cả từ thiết kế, xây dựng lập trình,
thao tác ến quản lý. Lập trình bằng ngôn ngữ máy tuyệt ối, thường là bằng cách
dùng bảng iều khiển ể thực hiện các chức năng cơ bản. Ngôn ngữ lập trình chưa
ược biết ến và hệ iều hành cũng chưa nghe ến.
Vào ầu thập niên 1950, phiếu ục lổ ra ời và có thể viết chương trình trên
phiếu thay cho dùng bảng iều khiển.
1.4.2. Thế hệ 2 (1955 – 1965)
Sự ra ời của thiết bị bán dẫn vào giữa thập niên 1950 làm thay ổi bức tranh
tổng thể. Máy tính trở nên ủ tin cậy hơn. Nó ược sản xuất và cung cấp cho các
khách hàng. Lần ầu tiên có sự phân chia rõ ràng giữa người thiết kế, người xây
dựng, người vận hành, người lập trình, và người bảo trì.
Để thực hiện một công việc (một chương trình hay một tập hợp các chương
trình), lập trình viên trước hết viết chương trình trên giấy (bằng hợp ngữ hay
FORTRAN) sau ó ục lỗ trên phiếu và cuối cùng ưa phiếu vào máy.
Sau khi thực hiện xong nó sẽ xuất kết quả ra máy in. 14 lOMoARcPSD| 41967345
Hệ thống xử lý theo lô ra ời, nó lưu các yêu cầu cần thực hiện lên băng từ,
và hệ thống sẽ ọc và thi hành lần lượt. Sau ó, nó sẽ ghi kết quả lên băng từ xuất
và cuối cùng người sử dụng sẽ em băng từ xuất i in.
Hệ thống xử lý theo lô hoạt ộng dưới sự iều khiển của một chương trình ặc
biệt là tiền thân của hệ iều hành sau này. Ngôn ngữ lập trình sử dụng trong giai
oạn này chủ yếu là FORTRAN và hợp ngữ.
1.4.3. Thế hệ 3 (1965 – 1980)
Trong giai oạn này, máy tính ược sử dụng rộng rãi trong khoa học cũng
như trong thương mại. Máy IBM 360 là máy tính ầu tiên sử dụng mạch tích hợp
(IC). Từ ó kích thước và giá cả của các hệ thống máy giảm áng kể và máy tính
càng phổ biến hơn. Các thiết bị ngoại vi dành cho máy xuất hiện ngày càng nhiều
và thao tác iều khiển bắt ầu phức tạp.
Hệ iều hành ra ời nhằm iều phối, kiểm soát hoạt ộng và giải quyết các yêu
cầu tranh chấp thiế bị. Chương trình hệ iều hành dài cả triệu dòng hợp ngữ và do
hàng ngàn lập trình viên thực hiện.
Sau ó, hệ iều hành ra ời khái niệm a chương. CPU không phải chờ thực
hiện các thao tác nhập xuất. Bộ nhớ ược chia làm nhiều phần, mỗi phần có một
công việc (job) khác nhau, khi một công việc chờ thực hiện nhập xuất CPU sẽ
xử lý các công việc còn lại. Tuy nhiên khi có nhiều công việc cùng xuất hiện
trong bộ nhớ, vấn ề là phải có một cơ chế bảo vệ tránh các công việc ảnh hưởng
ến nhau. Hệ iều hành cũng cài ặt thuộc tính spool.
Giai oạn này cũng ánh dấu sự ra ời của hệ iều hành chia xẻ thời gian như
CTSS của MIT. Đồng thời các hệ iều hành lớn ra ời như MULTICS, UNIX và
hệ thống các máy mini cũng xuất hiện như DEC PDP-1.
1.4.4. Thế hệ 4 (1980 - )
Giai oạn này ánh dấu sự ra ời của máy tính cá nhân, ặc biệt là hệ thống
IBM PC với hệ iều hành MS-DOS và Windows sau này. Bên cạnh ó là sự phát
triển mạnh của các hệ iều hành tựa Unix trên nhiều hệ máy khác nhau như Linux. 15 lOMoARcPSD| 41967345
Ngoài ra, từ ầu thập niên 90 cũng ánh dấu sự phát triển mạnh mẽ của hệ iều hành
mạng
hệ iều hành phân tán.
Chương 2 CÁC MÔ HÌNH XỬ LÝ ĐỒNG HÀNH
Hầu hết các hệ iều hành hiện ại ều cho phép người dùng thi hành nhiều
công việc ồng thời trên cùng một máy tính. Nhu cầu xử lý ồng hành
(concurrency) này xuất phát từ âu? và hệ iều hành cần phải tổ chức hỗ trợ như
thế nào cho các môi trường a nhiệm (multitask) như thế? Đó là nội dung chính trong chương này.
2.1. Nhu cầu xử lý ồng hành
Có 2 ộng lực chính khiến cho các hệ iều hành hiện ại thường hỗ trợ môi
trường a nhiệm (multitask) trong ó chấp nhận nhiều tác vụ thực hiện ồng thời trên cùng một máy tính:
2.1.1. Tăng hiệu suất sử dụng CPU
Phần lớn các tác vụ (job) khi thi hành ều trải qua nhiều chu kỳ xử lý (sử
dụng CPU) và chu kỳ nhập xuất (sử dụng các thiết bị nhập xuất) xen kẽ như sau: CPU IO CPU IO CPU
Nếu chỉ có 1 tiến trình duy nhất trong hệ thống, thì vào các chu kỳ IO của
tác vụ, CPU sẽ hoàn toàn nhàn rỗi. Ý tưởng tăng cường số lượng tác vụ trong
hệ thống là ể tận dụng CPU: nếu tác vụ 1 xử lý IO, thì có thể sử dụng CPU ể thực hiện tác vụ 2... CPU IO CPU IO CPU Tác vụ 1 CPU IO CPU IO Tác vụ 2 16 lOMoARcPSD| 41967345
2.1.2. Tăng tốc ộ xử lý
Một số bài toán có bản chất xử lý song song nếu ược xây dựng thành nhiều
module hoạt ộng ồng thời thì sẽ tiết kiệm ược thời gian xử lý.
Ví dụ: Xét bài toán tính giá trị biểu thức kq = a*b + c*d . Nếu tiến hành
tính ồng thời (a*b) và (c*d) thì thời gian xử lý sẽ ngắn hơn là thực hiện tuần tự.
Trong các trường hợp ó, cần có một mô hình xử lý ồng hành thích hợp.
Trên máy tính có cấu hình nhiều CPU, hỗ trợ xử lý song song
(multiprocessing) thật sự, iều này sẽ giúp tăng hiệu quả thi hành của hệ thống áng kể.
2.2. Khái niệm tiến trình (Process) và mô hình a tiến trình (Multiprocess)
Để hỗ trợ sự a chương, máy tính phải có khả năng thực hiện nhiều tác vụ
ồng thời. Nhưng việc iều khiển nhiều hoạt ộng song song ở cấp ộ phần cứng là
rất khó khăn. Vì thế, các nhà thiết kế hệ iều hành ề xuất một mô hình song song
giả lập
bằng cách chuyển ổi bộ xử lý qua lại giữa các chương trình ể duy trì hoạt
ộng của nhiều chương trình cùng lúc, iều này tạo cảm giác có nhiều hoạt ộng
ược thực hiện ồng thời.
Trong mô hình này, tất cả các phần mềm trong hệ thống ược tổ chức thành
một số những tiến trình (process). Tiến trình là một chương trình ang xử lý, sỡ
hữu một con trỏ lệnh, tập các thanh ghi và các biến. Để hoàn thành tác vụ của
mình, một tiến trình có thể cần ến một số tài nguyên – như CPU, bộ nhớ chính,
các tập tin và thiết bị nhập/xuất.
Cần phân biệt hai khái niệm chương trìnhtiến trình. Một chương trình
là một thực thể thụ ộng, chứa ựng các chỉ thị iều khiển máy tính ể tiến hành một
tác vụ nào ó; khi cho thực hiện các chỉ thị này, chương trình chuyển thành tiến
trình, là một thực thể hoạt ộng, với con trỏ lệnh xác ịnh chỉ thị kế tiếp sẽ thi hành,
kèm theo tập các tài nguyên phục vụ cho hoạt ộng của tiến trình.
Về mặt ý niệm, có thể xem như mỗi tiến trình sở hữu một bộ xử lý ảo cho
riêng nó, nhưng trong thực tế, chỉ có một bộ xử lý thật sự ược chuyển ổi qua lại 17 lOMoARcPSD| 41967345
giữa các tiến trình. Sự chuyển ổi nhanh chóng này ược gọi là sự a chương
(multiprogramming). Hệ iều hành chịu trách nhiệm sử dụng một thuật toán iều
phối ể quyết ịnh thời iểm cần dừng hoạt ộng của tiến trình ang xử lý ể phục vụ
một tiến trình khác, và lựa chọn tiến trình tiếp theo sẽ ược phục vụ. Bộ phận thực
hiện chức năng này của hệ iều hành ược gọi là bộ iều phối (scheduler).
Hình 2.1. (a) Đa chương với 4 chương trình
(b) Mô hình khái niệm với 4 chương ộc lập
(c) Tại một thời iểm chỉ có một chương trình hoạt ộng
2.3. Khái niệm tiểu trình (Thread) và mô hình a tiểu trình
Trong hầu hết các hệ iều hành, mỗi tiến trình có một không gian ịa chỉ và
chỉ có một dòng xử lý. Tuy nhiên, có nhiều tình huống người sử dụng mong
muốn có nhiều dòng xử lý cùng chia sẻ một không gian ịa chỉ, và các dòng xử lý
này hoạt ộng song song tương tự như các tiến trình phân biệt (ngoại trừ việc chia sẻ không gian ịa chỉ).
Ví dụ : Một server quản lý tập tin thỉnh thoảng phải tự khóa ể chờ các thao
tác truy xuất ĩa hoàn tất. Nếu server có nhiều dòng xử lý, hệ thống có thể xử lý
các yêu cầu mới trong khi một dòng xử lý bị khoá. Như vậy việc thực hiện
chương trình sẽ có hiệu quả hơn. Điều này không thể ạt ược bằng cách tạo hai
tiến trình server riêng biệt vì cần phải chia sẻ cùng một vùng ệm, do vậy bắt buộc
phải chia sẻ không gian ịa chỉ. 18 lOMoARcPSD| 41967345
Chính vì các tình huống tương tự, người ta cần có một cơ chế xử lý mới
cho phép có nhiều dòng xử lý trong cùng một tiến trình.
Ngày nay ã có nhiều hệ iều hành cung cấp một cơ chế như thế và gọi là tiểu
trình (threads).
2.3.1. Nguyên lý chung
Một tiểu trình là một ơn vị xử lý cơ bản trong hệ thống. Mỗi tiểu trình xử
lý tuần tự oạn code của nó, sở hữu một con trỏ lệnh, tập các thanh ghi và một
vùng nhớ stack riêng. Các tiểu trình chia sẻ CPU với nhau giống như cách chia
sẻ giữa các tiến trình: một tiểu trình xử lý trong khi các tiểu trình khác chờ ến
lượt. Một tiểu trình cũng có thể tạo lập các tiến trình con, và nhận các trạng thái
khác nhau như một tiến trình thật sự. Một tiến trình có thể sở hữu nhiều tiểu
trình.
Các tiến trình tạo thành những thực thể ộc lập. Mỗi tiến trình có một tập
tài nguyên và một môi trường riêng (một con trỏ lệnh, một Stack, các thanh ghi
và không gian ịa chỉ). Các tiến trình hoàn toàn ộc lập với nhau, chỉ có thể liên
lạc thông qua các cơ chế thông tin giữa các tiến trình mà hệ iều hành cung cấp.
Ngược lại, các tiểu trình trong cùng một tiến trình lại chia sẻ một không gian ịa
chỉ chung, iều này có nghĩa là các tiểu trình có thể chia sẻ các biến toàn cục của
tiến trình. Một tiểu trình có thể truy xuất ến cả các stack của những tiểu trình
khác trong cùng tiến trình. Cấu trúc này không ề nghị một cơ chế bảo vệ nào, và
iều này cũng không thật cần thiết vì các tiểu trình trong cùng một tiến trình thuộc
về cùng một sỡ hữu chủ ã tạo ra chúng trong ý ịnh cho phép chúng hợp tác với nhau. 19 lOMoARcPSD| 41967345
Hình 2.2. Các tiểu trình trong cùng một tiểu trình
2.3.2. Phân bổ thông tin lưu trữ
Cấu trúc mô tả tiến trình và tiểu trình
2.3.3. Kernel thread và user thread
Khái niệm tiển trình có thể ược cài ặt trong kernel của Hệ iều hành, khi ó
ơn vị cơ sở sử dụng CPU ể xử lý là tiểu trình, Hệ iều hành sẽ phân phối CPU cho
các tiểu trình trong hệ thống. Tuy nhiên ối với một số hệ iều hành, khái niệm tiểu
trình chỉ ược hỗ trợ như một ối tượng người dùng, các thao tác tiểu trình ược
cung cấp kèm theo do một bộ thư viện xử lý trong chế ộ người dùng không ặc
quyền (user mode). Lúc này Hệ iều hành sẽ chỉ biết ến khái niệm tiến trình, do
vậy cần có cơ chế ể liên kết các tiểu trình cùng một tiến trình với tiến trình cha
trong kernel_ ối tượng này ôi lúc ược gọi là LWP (lightweight process). 20 lOMoARcPSD| 41967345 Hình 2.3. 2.4. Tóm tắt
Tiến trình là một chương trình ang hoạt ộng.
Để sử dụng hiệu quả CPU, sự a chương cần ược ưa vào hệ thống
Sự a chương ược tổ chức bằng cách lưu trữ nhiều tiến trình trong bộ nhớ
tại một thời iểm, và iều phối CPU qua lại giữa các tiến trình trong hệ thống.
Mô hình a tiểu trình cho phép mỗi tiến trình có thể tiến hành nhiều dòng
xử lý ồng thời trong cùng một không gian ịa chỉ nhằm thực hiện tác vụ hiệu qủa
hơn trong một số trường hợp.
* Củng cố bài học
Các câu hỏi cần trả lời ược sau bài học này:
1. Tại sao các hệ iều hành hiện ại hỗ trợ môi trường a nhiệm?
2. Phân biệt multitask, multiprogramming và multiprocessing?
3. Khái niệm tiến trình ược xây dựng nhằm mục ích gì?
4. Sự khác biệt, mối quan hệ giữa tiến trình và tiểu trình? 21 lOMoARcPSD| 41967345 * Bài tập
Bài 1. Nhiều hệ iều hành không cho phép xử lý ồng hành. Thảo luận về
các phức tạp phát sinh khi hệ iều hành cho phép a nhiệm?
Bài 2. Tìm một số ứng dụng thích hợp với mô hình a tiến trình; và một
số ứng dụng thích hợp với mô hình a tiểu trình. 22 lOMoARcPSD| 41967345
Chương 3 QUẢN LÝ TIẾN TRÌNH
Chương này triển khai các nội dung về chức năng quản lý tiến trình của Hệ
iều hành: làm thế nào ể phân chia CPU cho các tiến trình? Theo vết xử lý của
tiến trình? Các thao tác trên tiến trình?
3.1. Tổ chức quản lý tiến trình
3.1.1. Các trạng thái của tiến trình
Trạng thái của tiến trình tại một thời iểm ược xác ịnh bởi hoạt ộng hiện
thời của tiến trình tại thời iểm ó. Trong quá trình sống, một tiến trình thay ổi
trạng thái do nhiều nguyên nhân như: phải chờ một sự kiện nào ó xảy ra, hay ợi
một thao tác nhập/xuất hoàn tất, buộc phải dừng hoạt ộng do ã hết thời gian xử lý…
Tại một thời iểm, một tiến trình có thể nhận trong một các trạng thái sau ây:
* Mới tạo: tiến trình ang ược tạo lập.
* Running: các chỉ thị của tiến trình ang ược xử lý.
* Blocked: tiến trình chờ ược cấp phát một tài nguyên, hay chờ một sự kiện xảy ra.
* Ready: tiến trình chờ ược cấp phát CPU ể xử lý.
* Kết thúc: tiến trình hoàn tất xử lý. 23 lOMoARcPSD| 41967345
Hình 3.1. Sơ ồ chuyển trạng thái giữa các tiến trình
Tại một thời iểm, chỉ có một tiến trình có thể nhận trạng thái running trên
một bộ xử lý bất kỳ. Trong khi ó, nhiều tiến trình có thể ở trạng thái blocked hay ready.
Các cung chuyển tiếp trong sơ ồ trạng thái biểu diễn sáu sự chuyển trạng
thái có thể xảy ra trong các iều kiện sau: *
Tiến trình mới tạo ược ưa vào hệ thống. *
Bộ iều phối cấp phát cho tiến trình một khoảng thời gian sử dụng CPU. * Tiến trình kết thúc. *
Tiến trình yêu cầu một tài nguyên nhưng chưa ược áp ứng vì tài
nguyên chưa sẵn sàng ể cấp phát tại thời iểm ó ; hoặc tiến trình phải chờ một
sự kiện hay thao tác nhập/xuất. *
Bộ iều phối chọn một tiến trình khác ể cho xử lý. *
Tài nguyên mà tiến trình yêu cầu trở nên sẵn sàng ể cấp phát; hay
sự kiện hoặc thao tác nhập/xuất tiến trình ang ợi hoàn tất.
3.1.2. Chế ộ xử lý của tiến trình
Để ảm bảo hệ thống hoạt ộng úng ắn, hệ iều hành cần phải ược bảo vệ khỏi
sự xâm phạm của các tiến trình. Bản thân các tiến trình và dữ liệu cũng cần ược
bảo vệ ể tránh các ảnh hưởng sai lạc lẫn nhau. Một cách tiếp cận ể giải quyết vấn 24 lOMoARcPSD| 41967345
ề là phân biệt hai chế ộ xử lý cho các tiến trình: chế ộ không ặc quyềnchế ộ
ặc quyền
nhờ vào sự trợ giúp của cơ chế phần cứng. Tập lệnh của CPU ược phân
chia thành các lệnh ặc quyền và lệnh không ặc quyền. Cơ chế phần cứng chỉ cho
phép các lệnh ặc quyền ược thực hiện trong chế ộ ặc quyền. Thông thường chỉ
có hệ iều hành hoạt ộng trong chế ộ ặc quyền, các tiến trình của người dùng hoạt
ộng trong chế ộ không ặc quyền, không thực hiện ược các lệnh ặc quyền có nguy
cơ ảnh hưởng ến hệ thống. Như vậy hệ iều hành ược bảo vệ. Khi một tiến trình
người dùng gọi ến một lời gọi hệ thống, tiến trình của hệ iều hành xử lý lời gọi
này sẽ hoạt ộng trong chế ộ ặc quyền, sau khi hoàn tất thì trả quyền iều khiển về
cho tiến trình người dùng trong chế ộ không ặc quyền.
Hình 3.2. Hai chế ộ xử lý
3.1.3. Cấu trúc dữ liệu khối quản lý tiến trình
Hệ iều hành quản lý các tiến trình trong hệ thống thông qua khối quản lý
tiến trình (process control block - PCB). PCB là một vùng nhớ lưu trữ các thông
tin mô tả cho tiến trình, với các thành phần chủ yếu bao gồm: *
Định danh của tiến trình (1): giúp phân biệt các tiến trình. *
Trạng thái tiến trình (2): xác ịnh hoạt ộng hiện hành của tiến trình. *
Ngữ cảnh của tiến trình (3): mô tả các tài nguyên tiến trình ang
trong quá trình, hoặc ể phục vụ cho hoạt ộng hiện tại, hoặc ể làm cơ sở phục hồi
hoạt ộng cho tiến trình, bao gồm các thông tin về:
- Trạng thái CPU: bao gồm nội dung các thanh ghi, quan trọng nhất là con
trỏ lệnh IP lưu trữ ịa chỉ câu lệnh kế tiếp tiến trình sẽ xử lý. Các thông tin này 25 lOMoARcPSD| 41967345
cần ược lưu trữ khi xảy ra một ngắt, nhằm có thể cho phép phục hồi hoạt ộng
của tiến trình úng như trước khi bị ngắt.
- Bộ xử lý: dùng cho máy có cấu hình nhiều CPU, xác ịnh số hiệu CPU mà
tiến trình ang sử dụng.
- Bộ nhớ chính: danh sách các khối nhớ ược cấp cho tiến trình.
- Tài nguyên sử dụng: danh sách các tài mguyên hệ thống mà tiến trình ang sử dụng.
- Tài nguyên tạo lập: danh sách các tài nguyên ược tiến trình tạo lập.
* Thông tin giao tiếp (4): phản ánh các thông tin về quan hệ của tiến trình
với các tiến trình khác trong hệ thống :
- Tiến trình cha: tiến trình tạo lập tiến trình này.
- Tiến trình con: các tiến trình do tiến trình này tạo lập .
- Độ ưu tiên: giúp bộ iều phối có thông tin ể lựa chọn tiến trình ược cấp CPU.
* Thông tin thống kê (5): ây là những thông tin thống kê về hoạt ộng của
tiến trình, như thời gian ã sử dụng CPU,thời gian chờ. Các thông tin này có thể
có ích cho công việc ánh giá tình hình hệ thống và dự oán các tình huống tương lai. 26 lOMoARcPSD| 41967345
Hình 3.3. Khối mô tả tiến trình
3.1.4. Thao tác trên tiến trình
Hệ iều hành cung cấp các thao tác chủ yếu sau ây trên một tiến trình:
- Tạo lập tiến trình (create)
- Kết thúc tiến trình (destroy)
- Tạm dừng tiến trình (suspend)
- Tái kích hoạt tiến trình (resume)
- Thay ổi ộ ưu tiên tiến trình
3.1.4.1. Tạo lập tiến trình
Trong quá trình xử lý, một tiến trình có thể tạo lập nhiều tiến trình mới
bằng cách sử dụng một lời gọi hệ thống tương ứng. Tiến trình gọi lời gọi hệ
thống ể tạo tiến trình mới sẽ ược gọi là tiến trình cha, tiến trình ược tạo gọi là 27 lOMoARcPSD| 41967345
tiến trình con. Mỗi tiến trình con ến lượt nó lại có thể tạo các tiến trình mới…,
quá trình này tiếp tục sẽ tạo ra một cây tiến trình.
Hình 3.4. Một cây tiến trình trong hệ thống UNIX
Các công việc hệ iều hành cần thực hiện khi tạo lập tiến trình bao gồm:
- Định danh cho tiến trình mới phát sinh
- Đưa tiến trình vào danh sách quản lý của hệ thống
- Xác ịnh ộ ưu tiên cho tiến trình - Tạo PCB cho tiến trình
- Cấp phát các tài nguyên ban ầu cho tiến trình
Khi một tiến trình tạo lập một tiến trình con, tiến trình con có thể sẽ ược
hệ iều hành trực tiếp cấp phát tài nguyên hoặc ược tiến trình cha cho thừa hưởng
một số tài nguyên ban ầu.
Khi một tiến trình tạo tiến trình mới, tiến trình ban ầu có thể xử lý theo
một trong hai khả năng sau:
- Tiến trình cha tiếp tục xử lý ồng hành với tiến trình con.
- Tiến trình cha chờ ến khi một tiến trình con nào ó, hoặc tất cả các
tiến trình con kết thúc xử lý.
Các hệ iều hành khác nhau có thể chọn lựa các cài ặt khác nhau ể thực hiện
thao tác tạo lập một tiến trình. 28 lOMoARcPSD| 41967345
3.1.4.2. Kết thúc tiến trình
Một tiến trình kết thúc xử lý khi nó hoàn tất chỉ thị cuối cùng và sử dụng
một lời gọi hệ thống ể yêu cầu hệ iều hành hủy bỏ nó. Đôi khi một tiến trình có
thể yêu cầu hệ iều hành kết thúc xử lý của một tiến trình khác. Khi một tiến trình
kết thúc, hệ iều hành thực hiện các công việc:
- Thu hồi các tài nguyên hệ thống ã cấp phát cho tiến trình
- Hủy tiến trình khỏi tất cả các danh sách quản lý của hệ thống
- Hủy bỏ PCB của tiến trình
Hầu hết các hệ iều hành không cho phép các tiến trình con tiếp tục tồn tại
nếu tiến trình cha ã kết thúc. Trong những hệ thống như thế, hệ iều hành sẽ tự
ộng phát sinh một loạt các thao tác kết thúc tiến trình con.
3.1.5. Cấp phát tài nguyên cho tiến trình
Khi có nhiều người sử dụng ồng thời làm việc trong hệ thống, hệ iều hành
cần phải cấp phát các tài nguyên theo yêu cầu cho mỗi người sử dụng. Do tài
nguyên hệ thống thường rất giới hạn và có khi không thể chia sẻ, nên hiếm khi
tất cả các yêu cầu tài nguyên ồng thời ều ược thỏa mãn. Vì thế cần phải nghiên
cứu một phương pháp ể chia sẻ một số tài nguyên hữu hạn giữa nhiều tiến trình
người dùng ồng thời. Hệ iều hành quản lý nhiều loại tài nguyên khác nhau (CPU,
bộ nhớ chính, các thiết bị ngoại vi…), với mỗi loại cần có một cơ chế cấp phát
và các chiến lược cấp phát hiệu quả. Mỗi tài nguyên ược biểu diễn thông qua
một cấu trúc dữ liệu, khác nhau về chi tiết cho từng loại tài nguyên, nhưng cơ
bản chứa ựng các thông tin sau:
* Định danh tài nguyên
* Trạng thái tài nguyên: ây là các thông tin mô tả chi tiết trạng thái tài
nguyên : phần nào của tài nguyên ã cấp phát cho tiến trình, phần nào còn có thể sử dụng ?
* Hàng ợi trên một tài nguyên: danh sách các tiến trình ang chờ ược cấp
phát tài nguyên tương ứng. 29 lOMoARcPSD| 41967345
* Bộ cấp phát: là oạn code ảm nhiệm việc cấp phát một tài nguyên ặc thù.
Một số tài nguyên òi hỏi các giải thuật ặc biệt (như CPU, bộ nhớ chính, hệ thống
tập tin), trong khi những tài nguyên khác (như các thiết bị nhập/xuất) có thể cần
các giải thuật cấp phát và giải phóng tổng quát hơn.
Hình 3.5. Khối quản lý tài nguyên Các
mục tiêu của kỹ thuật cấp phát:
* Bảo ảm một số lượng hợp lệ các tiến trình truy xuất ồng thời ến các tài
nguyên không chia sẻ ược.
* Cấp phát tài nguyên cho tiến trình có yêu cầu trong một khoảng thời gian
trì hoãn có thể chấp nhận ược.
* Tối ưu hóa sự sử dụng tài nguyên.
Để có thể thõa mãn các mục tiêu kể trên, cần phải giải quyết các vấn ề nảy
sinh khi có nhiều tiến trình ồng thời yêu cầu một tài nguyên không thể chia sẻ.
3.2. Điều phối tiến trình
Trong môi trường a nhiệm, có thể xảy ra tình huống nhiều tiến trình ồng
thời sẵn sàng ể xử lý. Mục tiêu của các hệ phân chia thời gian (timesharing) là 30 lOMoARcPSD| 41967345
chuyển ổi CPU qua lại giữa các tiến trình một cách thường xuyên ể nhiều người
sử dụng có thể tương tác cùng lúc với từng chương trình trong quá trình xử lý.
Để thực hiện ược mục tiêu này, hệ iều hành phải lựa chọn tiến trình ược
xử lý tiếp theo. Bộ iều phối sẽ sử dụng một giải thuật iều phối thích hợp ể thực
hiện nhiệm vụ này. Một thành phần khác của hệ iều hành cũng tiềm ẩn trong
công tác iều phối là bộ phân phối (dispatcher). Bộ phân phối sẽ chịu trách nhiệm
chuyển ổi ngữ cảnh và trao CPU cho tiến trình ược chọn bởi bộ iều phối ể xử lý.
3.2.1. Giới thiệu
3.2.1.1. Mục tiêu iều phối
Bộ iều phối không cung cấp cơ chế, mà ưa ra các quyết ịnh. Các hệ iều
hành xây dựng nhiều chiến lược khác nhau ể thực hiện việc iều phối, nhưng tựu
chung cần ạt ược các mục tiêu sau:
a) Sự công bằng ( Fairness): Các tiến trình chia sẻ CPU một cách công bằng,
không có tiến trình nào phải chờ ợi vô hạn ể ược cấp phát CPU.
b) Tính hiệu quả (Efficiency): Hệ thống phải tận dụng ược CPU 100% thời gian.
c) Thời gian áp ứng hợp lý (Response time): Cực tiểu hoá thời gian hồi
áp cho các tương tác của người sử dụng
d) Thời gian lưu lại trong hệ thống (Turnaround Time): Cực tiểu hóa thời
gian hoàn tất các tác vụ xử lý theo lô.
e) Thông lượng tối a (Throughput): Cực ại hóa số công việc ược xử
lý trong một ơn vị thời gian. Tuy nhiên thường không thể thỏa mãn tất cả
các mục tiêu kể trên vì bản thân chúng có sự mâu thuẫn với nhau mà chỉ
có thể dung hòa chúng ở mức ộ nào ó.
3.2.1.2. Các ặc iểm của tiến trình 31 lOMoAR cPSD| 41967345
Điều phối hoạt ộng của các tiến trình là một vấn ề rất phức tạp, òi hỏi hệ
iều hành khi giải quyết phải xem xét nhiều yếu tố khác nhau ể có thể ạt ược
những mục tiêu ề ra. Một số ặc tính của tiến trình cần ược quan tâm như tiêu chuẩn iều phối:
a) Tính hướng xuất / nhập của tiến trình (I/O-boundedness):
Khi một tiến trình nhận ược CPU, chủ yếu nó chỉ sử dụng CPU ến khi phát
sinh một yêu cầu nhập xuất. Hoạt ộng của các tiến trình như thế thường bao gồm
nhiều lượt sử dụng CPU, mỗi lượt trong một thời gian khá ngắn.
b) Tính hướng xử lý của tiến trình (CPU-boundedness):
Khi một tiến trình nhận ược CPU, nó có khuynh hướng sử dụng CPU ến
khi hết thời gian dành cho nó? Hoạt ộng của các tiến trình như thế thường bao
gồm một số ít lượt sử dụng CPU, nhưng mỗi lượt trong một thời gian ủ dài.
c) Tiến trình tương tác hay xử lý theo lô:
Người sử dụng theo kiểu tương tác thường yêu cầu ược hồi áp tức thời ối
với các yêu cầu của họ, trong khi các tiến trình của tác vụ ược xử lý theo lô nói
chung có thể trì hoãn trong một thời gian chấp nhận ược.
d) Độ ưu tiên của tiến trình:
Các tiến trình có thể ược phân cấp theo một số tiêu chuẩn ánh giá nào ó,
một cách hợp lý, các tiến trình quan trọng hơn (có ộ ưu tiên cao hơn) cần ược ưu tiên hơn.
e) Thời gian ã sử dụng CPU của tiến trình:
Một số quan iểm ưu tiên chọn những tiến trình ã sử dụng CPU nhiều thời
gian nhất vì hy vọng chúng sẽ cần ít thời gian nhất ể hoàn tất và rời khỏi hệ thống.
Tuy nhiên cũng có quan iểm cho rằng các tiến trình nhận ược CPU trong ít thời
gian là những tiến trình ã phải chờ lâu nhất, do vậy ưu tiên chọn chúng.
f) Thời gian còn lại tiến trình cần ể hoàn tất:
Có thể giảm thiểu thời gian chờ ợi trung bình của các tiến trình bằng cách cho
các tiến trình cần ít thời gian nhất ể hoàn tất ược thực hiện trước. 32 lOMoAR cPSD| 41967345
Tuy nhiên áng tiếc là rất hiếm khi biết ược tiến trình cần bao nhiêu thời gian nữa ể kết thúc xử lý.
3.2.1.3. Điều phối không ộc quyền và iều phối ộc quyền
(preemptive/nopreemptive)
Thuật toán iều phối cần xem xét và quyết ịnh thời iểm chuyển ổi CPU giữa
các tiến trình. Hệ iều hành có thể thực hiện cơ chế iều phối theo nguyên lý ộc
quyền
hoặc không ộc quyền.
* Điều phối ộc quyền: Nguyên lý iều phối ộc quyền cho phép một tiến trình
khi nhận ược CPU sẽ có quyền ộc chiếm CPU ến khi hoàn tất xử lý hoặc tự
nguyện giải phóng CPU. Khi ó quyết ịnh iều phối CPU sẽ xảy ra trong các tình huống sau: -
Khi tiến trình chuyển từ trạng thái ang xử lý (running) sang trạng
thái bị khóa blocked ( ví dụ chờ một thao tác nhập xuất hay chờ một tiến trình con kết thúc…). -
Khi tiến trình kết thúc.
Các giải thuật ộc quyền thường ơn giản và dễ cài ặt. Tuy nhiên chúng
thường không thích hợp với các hệ thống tổng quát nhiều người dùng, vì nếu cho
phép một tiến trình có quyền xử lý bao lâu tùy ý, có nghĩa là tiến trình này có
thể giữ CPU một thời gian không xác ịnh, có thể ngăn cản những tiến trình còn
lại trong hệ thống có một cơ hội ể xử lý.
* Điều phối không ộc quyền: Ngược với nguyên lý ộc quyền, iều phối theo
nguyên lý không ộc quyền cho phép tạm dừng hoạt ộng của một tiến trình ang
sẵn sàng xử lý. Khi một tiến trình nhận ược CPU, nó vẫn ược sử dụng CPU ến
khi hoàn tất hoặc tự nguyện giải phóng CPU, nhưng một tiến trình khác có ộ ưu
tiên có thể dành quyền sử dụng CPU của tiến trình ban ầu. Như vậy là tiến trình
có thể bị tạm dừng hoạt ộng bất cứ lúc nào mà không ược báo trước, ể tiến trình
khác xử lý. Các quyết ịnh iều phối xảy ra khi: 33 lOMoARcPSD| 41967345
- Khi tiến trình chuyển từ trạng thái ang xử lý (running) sang trạng thái bị
khóa blocked ( ví dụ chờ một thao tác nhập xuất hay chờ một tiến trình con kết thúc…).
- Khi tiến trình chuyển từ trạng thái ang xử lý (running) sang trạng thái
ready (ví dụ xảy ra một ngắt).
- Khi tiến trình chuyển từ trạng thái chờ (blocked) sang trạng thái ready (ví
dụ một thao tác nhập/xuất hoàn tất).
- Khi tiến trình kết thúc.
Các thuật toán iều phối theo nguyên tắc không ộc quyền ngăn cản ược tình
trạng một tiến trình ộc chiếm CPU, nhưng việc tạm dừng một tiến trình có thể
dẫn ến các mâu thuẫn trong truy xuất, òi hỏi phải sử dụng một phương pháp ồng
bộ hóa thích hợp ể giải quyết.
Trong các hệ thống sử dụng nguyên lý iều phối ộc quyền có thể xảy ra tình
trạng các tác vụ cần thời gian xử lý ngắn phải chờ tác vụ xử lý với thời gian rất
dài hoàn tất. Nguyên lý iều phối ộc quyền thường chỉ thích hợp với các hệ xử lý theo lô.
Đối với các hệ thống tương tác (time sharing), các hệ thời gian thực (real
time), cần phải sử dụng nguyên lý iều phối không ộc quyền ể các tiến trình quan
trọng có cơ hội hồi áp kịp thời. Tuy nhiên thực hiện iều phối theo nguyên lý
không ộc quyền òi hỏi những cơ chế phức tạp trong việc phân ịnh ộ ưu tiên, và
phát sinh thêm chi phí khi chuyển ổi CPU qua lại giữa các tiến trình.
3.2.2. Tổ chức iều phối
3.2.2.1. Các danh sách sử dụng trong quá trình iều phối
Hệ iều hành sử dụng hai loại danh sách ể thực hiện iều phối các tiến trình
danh sách sẵn sàng (ready list)danh sách chờ ợi (waiting list).
Khi một tiến trình bắt ầu i vào hệ thống, nó ược chèn vào danh sách các
tác vụ (job list). Danh sách này bao gồm tất cả các tiến trình của hệ thống. Nhưng
chỉ các tiến trình ang thường trú trong bộ nhớ chính và ở trạng thái sẵn sàng tiếp
nhận CPU ể hoạt ộng mới ược ưa vào danh sách sẵn sàng. 34 lOMoARcPSD| 41967345
Bộ iều phối sẽ chọn một tiến trình trong danh sách sẵn sàng và cấp CPU
cho tiến trình ó. Tiến trình ược cấp CPU sẽ thực hiện xử lý, và có thể chuyển
sang trạng thái chờ khi xảy ra các sự kiện như ợi một thao tác nhập/xuất hoàn
tất, yêu cầu tài nguyên chưa ược thỏa mãn, ược yêu cầu tạm dừng... Khi ó tiến
trình sẽ ược chuyển sang một danh sách chờ ợi.
Hệ iều hành chỉ sử dụng một danh sách sẵn sàng cho toàn hệ thống, nhưng
mỗi một tài nguyên (thiết bị ngoại vi) có một danh sách chờ ợi riêng bao gồm
các tiến trình ang chờ ược cấp phát tài nguyên ó.
Hình 3.6. Các danh sách iều phối
Quá trình xử lý của một tiến trình trải qua những chu kỳ chuyển ổi qua lại
giữa danh sách sẵn sàng và danh sách chờ ợi. Sơ ồ dưới ây mô tả sự iều phối các
tiến trình dựa trên các danh sách của hệ thống.
Thoạt ầu tiến trình mới ược ặt trong danh sách các tiến trình sẵn sàng (ready
list), nó sẽ ợi trong danh sách này cho ến khi ược chọn ể cấp phát CPU và bắt ầu
xử lý. Sau ó có thể xảy ra một trong các tình huống sau:
- Tiến trình phát sinh một yêu cầu một tài nguyên mà hệ thống chưa thể áp
ứng, khi ó tiến trình sẽ ược chuyển sang danh sách các tiến trình ang chờ tài nguyên tương ứng.
- Tiến trình có thể bị bắt buộc tạm dừng xử lý do một ngắt xảy ra, khi ó
tiến trình ược ưa trở lại vào danh sách sẵn sàng ể chờ ược cấp CPU cho lượt tiếp theo. 35 lOMoARcPSD| 41967345
Hình 3.7. Sơ ồ chuyển ổi giữa các danh sách iều phối
Trong trường hợp ầu tiên, tiến trình cuối cùng sẽ chuyển từ trạng thái
blocked sang trạng thái ready và lại ược ưa trở vào danh sách sẵn sàng. Tiến
trình lặp lại chu kỳ này cho ến khi hoàn tất tác vụ thì ược hệ thống hủy bỏ khỏi
mọi danh sách iều phối.
3.2.2.2. Các cấp ộ iều phối
Thực ra công việc iều phối ược hệ iều hành thực hiện ở hai mức ộ:
iều phối tác vụ (job scheduling) iều phối tiến trình (process scheduling). a)
Điều phối tác vụ
Quyết ịnh lựa chọn tác vụ nào ược ưa vào hệ thống, và nạp những tiến trình
của tác vụ ó vào bộ nhớ chính ể thực hiện. Chức năng iều phối tác vụ quyết ịnh
mức ộ a nhiệm của hệ thống (số lượng tiến trình trong bộ nhớ chính). Khi hệ
thống tạo lập một tiến trình, hay có một tiến trình kết thúc xử lý thì chức năng
iều phối tác vụ mới ược kích hoạt. Vì mức ộ a chương tương ối ổn ịnh nên chức
năng iều phối tác vụ có tần suất hoạt ộng thấp .
Để hệ thống hoạt ộng tốt, bộ iều phối tác vụ cần biệt tính chất của tiến trình
hướng nhập xuất (I/O bounded) hay hướng xử lý ( CPU bounded). Một tiến
trình ược gọi là hướng nhập xuất nếu nó chủ yếu nó chỉ sử dụng CPU ể thực hiện
các thao tác nhập xuất. Ngược lại một tiến trình ược gọi là hướng xử lý nếu nó
chủ yếu nó chỉ sử dụng CPU ể thực hiện các thao tác tính toán. Để cân bằng hoạt
ộng của CPU và các thiết bị ngoại vi, bộ iều phối tác vụ nên lựa chọn các tiến 36 lOMoARcPSD| 41967345
trình ể nạp vào bộ nhớ sao cho hệ thống là sự pha trộn hợp lý giữa các tiến trình
hướng nhập xuất và các tiến trình hướng xử lý
b) Điều phối tiến trình
Chọn một tiến trình ở trạng thái sẵn sàng (ã ược nạp vào bộ nhớ chính, và
có ủ tài nguyên ể hoạt ộng) và cấp phát CPU cho tiến trình ó thực hiện. Bộ iều
phối tiến trình có tần suất hoạt ộng cao, sau mỗi lần xảy ra ngắt (do ồng hồ báo
giờ, do các thiết bị ngoại vi...), thường là 1 lần trong khoảng 100ms. Do vậy ể
nâng cao hiệu suất của hệ thống, cần phải tăng tốc ộ xử lý của bộ iều phối tiến
trình. Chức năng iều phối tiến trình là một trong chức năng cơ bản, quan trọng
nhất của hệ iều hành.
Trong nhiều hệ iều hành, có thể không có bộ iều phối tác vụ hoặc tách biệt
rất ít ối với bộ iều phối tiến trình. Một vài hệ iều hành lại ưa ra một cấp ộ iều
phối trung gian kết hợp cả hai cấp ộ iều phối tác vụ và tiến trình.
Hình 3.8. Cấp ộ iều phối trung gian
3.2.3. Các chiến lược iều phối
3.2.3.1. Chiến lược FIFO
* Nguyên tắc: CPU ược cấp phát cho tiến trình ầu tiên trong danh sách sẵn
sàng có yêu cầu, là tiến trình ược ưa vào hệ thống sớm nhất. Đây là thuật toán
iều phối theo nguyên tắc ộc quyền. Một khi CPU ược cấp phát cho tiến trình,
CPU chỉ ược tiến trình tự nguyện giải phóng khi kết thúc xử lý hay khi có một yêu cầu nhập/xuất. 37 lOMoARcPSD| 41967345
Hình 3.9. Điều phối FIFO Ví dụ: Tiến trình Thời iểm vào RL Thời gian xử lý P1 0 24 P2 1 3 P3 2 3
Thứ tự cấp phát CPU cho các tiến trình là: P1 P2 P3 0 ‘24 27 30
Thời gian chờ ợi ược xử lý là 0 ối với P1, (24 -1) với P2 và (24+3-2) với
P3. Thời gian chờ trung bình là (0+23+25)/3 = 16 milisecondes.
* Thảo luận: Thời gian chờ trung bình không ạt cực tiểu, và biến ổi áng kể
ối với các giá trị về thời gian yêu cầu xử lý và thứ tự khác nhau của các tiến trình
trong danh sách sẵn sàng. Có thể xảy ra hiện tượng tích lũy thời gian chờ, khi
các tất cả các tiến trình (có thể có yêu cầu thời gian ngắn) phải chờ ợi một tiến
trình có yêu cầu thời gian dài kết thúc xử lý.
Giải thuật này ặc biệt không phù hợp với các hệ phân chia thời gian, trong
các hệ này, cần cho phép mỗi tiến trình ược cấp phát CPU ều ặn trong từng khoảng thời gian.
3.2.3.2. Chiến lược phân phối xoay vòng (Round Robin) 38 lOMoARcPSD| 41967345
* Nguyên tắc: Danh sách sẵn sàng ược xử lý như một danh sách vòng, bộ
iều phối lần lượt cấp phát cho từng tiến trình trong danh sách một khoảng thời
gian sử dụng CPU gọi là quantum. Đây là một giải thuật iều phối không ộc
quyền: khi một tiến trình sử dụng CPU ến hết thời gian quantum dành cho nó,
hệ iều hành thu hồi CPU và cấp cho tiến trình kế tiếp trong danh sách. Nếu tiến
trình bị khóa hay kết thúc trước khi sử dụng hết thời gian quantum, hệ iều hành
cũng lập tức cấp phát CPU cho tiến trình khác. Khi tiến trình tiêu thụ hết thời
gian CPU dành cho nó mà chưa hoàn tất, tiến trình ược ưa trở lại vào cuối danh
sách sẵn sàng ể ợi ược cấp CPU trong lượt kế tiếp. * Ví dụ:
Hình 3.10. Điều phối Round Robin 39 lOMoAR cPSD| 41967345 Tiến trình Thời iểm vào RL Thời gian xử lý P1 0 24 P2 1 3 P3 2 3
Nếu sử dụng quantum là 4 milisecondes, thứ tự cấp phát CPU sẽ là: P1 P2 P3 P1 P1 P1 P1 P1 0 ‘4 7 10 14 18 22 26 30
Thời gian chờ ợi trung bình sẽ là (0+6+3+5)/3 = 4.66 milisecondes.
Nếu có n tiến trìh trong danh sách sẵn sàng và sử dụng quantum q, thì mỗi
tiến trình sẽ ược cấp phát CPU 1/n trong từng khoảng thời gian q. Mỗi tiến trình
sẽ không phải ợi quá (n-1)q ơn vị thời gian trước khi nhận ược CPU cho lượt kế tiếp.
* Thảo luận: Vấn ề áng quan tâm ối với giải thuật RR là ộ dài của quantum.
Nếu thời lượng quantum quá bé sẽ phát sinh quá nhiều sự chuyển ổi giữa các
tiến trình và khiến cho việc sử dụng CPU kém hiệu qủa. Nhưng nếu sử dụng
quantum quá lớn sẽ làm tăng thời gian hồi áp và giảm khả năng tương tác của hệ thống.
3.2.3.3. Điều phối với ộ ưu tiên
* Nguyên tắc: Mỗi tiến trình ược gán cho một ộ ưu tiên tương ứng, tiến
trình có ộ ưu tiên cao nhất sẽ ược chọn ể cấp phát CPU ầu tiên. Độ ưu tiên có thể
ược ịnh nghĩa nội tại hay nhờ vào các yếu tố bên ngoài. Độ ưu tiên nội tại sử
dụng các ại lượng có thể o lường ể tính toán ộ ưu tiên của tiến trình, ví dụ các
giới hạn thời gian, nhu cầu bộ nhớ… Độ ưu tiên cũng có thể ược gán từ bên
ngoài dựa vào các tiêu chuẩn do hệ iều hành như tầm quan trọng của tiến trình,
loại người sử dụng sở hữu tiến trình… 40 lOMoAR cPSD| 41967345
Giải thuật iều phối với ộ ưu tiên có thể theo nguyên tắc ộc quyền hay
không ộc quyền. Khi một tiến trình ược ưa vào danh sách các tiến trình sẵn sàng,
ộ ưu tiên của nó ược so sánh với ộ ưu tiên của tiến trình hiện hành ang xử lý.
Giải thuật iều phối với ộ ưu tiên và không ộc quyền sẽ thu hồi CPU từ tiến trình
hiện hành ể cấp phát cho tiến trình mới nếu ộ ưu tiên của tiến trình này cao hơn
tiến trình hiện hành. Một giải thuật ộc quyền sẽ chỉ ơn giản chèn tiến trình mới
vào danh sách sẵn sàng, và tiến trình hiện hành vẫn tiếp tục xử lý hết thời gian dành cho nó.
Ví dụ: ( ộ ưu tiên 1 > ộ ưu tiên 2> ộ ưu tiên 3) Tiến trình Thời iểm vào RL Độ ưu tiên Thời gian xử lý P1 0 3 24 P2 1 1 3 P3 2 2 3
Sử dụng thuật giải ộc quyền, thứ tự cấp phát CPU như sau : P1 P2 P3 0 ‘24 27 30
Sử dụng thuật giải không ộc quyền, thứ tự cấp phát CPU như sau : P1 P2 P3 P1 0 ‘1 4 7 30
* Thảo luận: Tình trạng "ói CPU" (starvation) là một vấn ề chính yếu của
các giải thuật sử dụng ộ ưu tiên. Các giải thuật này có thể ể các tiến trình có ộ
ưu tiên thấp chờ ọi CPU vô hạn. Để ngăn cản các tiến trình có ộ ưu tiên cao
chiếm dụng CPU vô thời hạn, bộ iều phối sẽ giảm dần ộ ưu tiên của các tiến trình
này sau mỗi ngắt ồng hồ. Nếu ộ ưu tiên của tiến trình này giảm xuống thấp hơn 41 lOMoAR cPSD| 41967345
tiến trình có ộ ưu tiên cao thứ nhì, sẽ xảy ra sự chuyển ổi quyền sử dụng CPU.
Quá trình này gọi là sự "lão hóa" (aging) tiến trình.
3.2.3.4. Chiến lược công việc ngắn nhất (Shortest-job-first SJF)
* Nguyên tắc: Đây là một trường hợp ặc biệt của giải thuật iều phối với ộ
ưu tiên. Trong giải thuật này, ộ ưu tiên p ược gán cho mỗi tiến trình là nghịch ảo
của thời gian xử lý t mà tiến trình yêu cầu : p = 1/t. Khi CPU ược tự do, nó sẽ
ược cấp phát cho tiến trình yêu cầu ít thời gian nhất ể kết thúc - tiến trình ngắn
nhất. Giải thuật này cũng có thể ộc quyền hay không ộc quyền. Sự chọn lựa xảy
ra khi có một tiến trình mới ược ưa vào danh sách sẵn sàng trong khi một tiến
trình khác ang xử lý. Tiến trình mới có thể sỡ hữu một yêu cầu thời gian sử dụng
CPU cho lần tiếp theo (CPU-burst) ngắn hơn thời gian còn lại mà tiến trình hiện
hành cần xử lý. Giải thuật SJF không ộc quyền sẽ dừng hoạt ộng của tiến trình
hiện hành, trong khi giải thuật ộc quyền sẽ cho phép tiến trình hiện hành tiếp tục xử lý. Ví dụ: Tiến trình Thời iểm vào RL Thời gian xử lý P1 0 6 P2 1 8 P3 2 4 P4 3 2
Sử dụng thuật giải SJF ộc quyền, thứ tự cấp phát CPU như sau: P1 P4 P3 P2 0 6 8 12 20
Sử dụng thuật giải SJF không ộc quyền, thứ tự cấp phát CPU như sau: P1 P4 P1 P3 P2 42 lOMoARcPSD| 41967345 0 3 5 8 12 20
* Thảo luận: Giải thuật này cho phép ạt ược thời gian chờ trung bình cực
tiểu. Khó khăn thực sự của giải thuật SJF là không thể biết ược thời gian yêu cầu
xử lý còn lại của tiến trình ? Chỉ có thể dự oán giá trị này theo cách tiếp cận sau :
gọi tn là ộ dài của thời gian xử lý lần thứ n, n+1 là giá trị dự oán cho lần xử lý
tiếp theo. Với hy vọng giá trị dự oán sẽ gần giống với các giá trị trước ó, có thể sử dụng công thức: n+1 = tn + (1- ) n
Trong công thức này,tn chứa ựng thông tin gần nhất; n chứa ựng các
thông tin quá khứ ược tích lũy. Tham số ( 0 1) kiểm soát trọng số của
hiện tại gần hay quá khứ ảnh hưởng ến công thức dự ón.
3.2.3.5. Chiến lược iều phối với nhiều mức ộ ưu tiên
* Nguyên tắc: Ý tưởng chính của giải thuật là phân lớp các tiến trình tùy
theo ộ ưu tiên của chúng ể có cách thức iều phối thích hợp cho từng nhóm. Danh
sách sẵn sàng ược phân tách thành các danh sách riêng biệt theo cấp ộ ưu
tiên, mỗi danh sách bao gồm các tiến trình có cùng ộ ưu tiên và ược áp dụng
một giải thuật iều phối thích hợp ể iều phối. Ngoài ra, còn có một giải thuật iều
phối giữa các nhóm, thường giải thuật này là giải thuật không ộc quyền
và sử dụng ộ ưu tiên cố ịnh. Một tiến trình thuộc về danh sách ở cấp ưu tiên i
sẽ chỉ ược cấp phát CPU khi các danh sách ở cấp ưu tiên lớn hơn i ã trống. 43 lOMoARcPSD| 41967345
Hình 3.11. Điều phối nhiều cấp ưu tiên
* Thảo luận: Thông thường, một tiến trình sẽ ược gán vĩnh viễn với một
danh sách ở cấp ưu tiên i khi nó ược ưa vào hệ thống. Các tiến trình không di
chuyển giữa các danh sách. Cách tổ chức này sẽ làm giảm chi phí iều phối, nhưng
lại thiếu linh ộng và có thể dẫn ến tình trạng " ói CPU" cho các tiến trình thuộc
về những danh sách có ộ ưu tiên thấp. Do vậy, có thể xây dựng giải thuật iều
phối nhiều cấp ưu tiên và xoay vòng. Giải thuật này sẽ chuyển dần một tiến trình
từ danh sách có ộ ưu tiên cao xuống danh sách có ộ ưu tiên thấp hơn sau mỗi lần
sử dụng CPU. Cũng vậy, một tiến trình chờ quá lâu trong các danh sách có ộ ưu
tiên thấp cũng có thể ược chuyển dần lên các danh sách có ộ ưu tiên cao hơn.
Khi xây dựng một giải thuật iều phối nhiều cấp ưu tiên và xoay vòng cần quyết ịnh các tham số:
- Số lượng các cấp ưu tiên.
- Giải thuật iều phối cho từng danh sách ứng với một cấp ưu tiên.
- Phương pháp xác ịnh thời iểm di chuyển một tiến trình lên danh sách có ộ ưu tiên cao hơn.
- Phương pháp xác ịnh thời iểm di chuyển một tiến trình lên danh sách có ộ ưu tiên thấp hơn.
- Phương pháp sử dụng ể xác ịnh một tiến trình mới ược ưa vào hệ thống
sẽ thuộc danh sách ứng với ộ tiên nào. 44 lOMoARcPSD| 41967345
Hình 3.12 Điều phối Multilevel Feedback
3.2.3.6. Chiến lược iều phối Xổ số (Lottery)
* Nguyên tắc: Ý tưởng chính của giải thuật là phát hành một số vé số và
phân phối cho các tiến trình trong hệ thống. Khi ến thời iểm ra quyết ịnh iều phối,
sẽ tiến hành chọn 1 vé "trúng giải", tiến trình nào sỡ hữu vé này sẽ ược nhận CPU.
* Thảo luận: Giải thuật Lottery cung cấp một giải pháp ơn giản nhưng bảo
ảm tính công bằng cho thuật toán iều phối với chi phí thấp ể cập nhật ộ ưu tiên cho các tiến trình:
3.3. Tóm tắt
- Trong suốt chu trình sống, tiến trình chuyển ổi qua lại giữa các trạng thái ready, running và blocked.
- Bộ iều phối của hệ iều hành chịu trách nhiệm áp dụng một giải thuật iều
phối thích hợp ể chọn tiến trình thích hợp ược sử dụng CPU, và bộ phân phối sẽ
chuyển giao CPU cho tiến trình này.
- Các giải thuật iều phối thông dụng: FIFO, RoundRobin, iều phối với ộ
ưu tiên, SJF, Multilevel Feedback. 45 lOMoARcPSD| 41967345
* Câu hỏi củng cố bài học
Các câu hỏi cần trả lời ược sau bài học này:
1. Thông tin lưu trữ trong PCB và TCB?
2. Tổ chức iều phối tiến trình?
3. Phân tích ưu, khuyết của các chiến lược iều phối? * Bài tập
Bài 1. Xét tập các tiến trình sau (với thời gian yêu cầu CPU và ộ ưu tiên kèm theo): Tiến trình Thời iểm vào RL Thời gian CPU Độ ưu tiên P1 0 10 3 P2 1 1 1 P3 2 2 3 P4 3 1 4 P5 4 5 2
Giả sử các tiến trình cùng ược ưa vào hệ thống tại thời iểm 0
a) Cho biết kết quả iều phối hoạt ộng của các tiến trình trên theo
thuật toán FIFO; SJF; iều phối theo ộ ưu tiên ộc quyền ( ộ ưu tiên 1 > 2
> ...); và RR (quantum=2).
b) Cho biết thời gian lưu lại trong hệ thống (turnaround time) của từng
tiến trình trong từng thuật toán iều phối ở câu a.
c) Cho biết thời gian chờ trong hệ thống (waiting time) của từng tiến
trình trong từng thuật toán iều phối ở câu a.
d )Thuật toán iều phối nào trong các thuật toán ở câu a cho thời gian
chờ trung bình là cực tiểu? 46 lOMoARcPSD| 41967345
Bài 2. Giả sử có các tiến trình sau trong hệ thống: Tiến trình Thời iểm vào RL Thời gian CPU P1 0.0 8 P2 0.4 4 P3 1.0 1
Sử dụng nguyên tắc iều phối ộc quyền và các thông tin có ược tại thời iểm
ra quyết ịnh ể trả lời các câu hỏi sau ây:
a) Cho biết thời gian lưu lại trung bình trong hệ thống (turnaround time)
của các tiến trình trong thuật toán iều phối FIFO.
b) Cho biết thời gian lưu lại trung bình trong hệ thống (turnaround time)
của các tiến trình trong thuật toán iều phối SJF.
c) Thuật toán SJF dự ịnh cải tiến sự thực hiện của hệ thống, nhưng
lưu ý chúng ta phải chọn iều phối P1 tại thời iểm 0 vì không biết rằng sẽ có
hai tiến trình ngắn hơn vào hệ thống sau ó. Thử tính thời gian lưu lại trung
bình trong ệ thống nếu ể CPU nhàn rỗi trong 1 ơn vị thời gian ầu tiên và
sau ó sử dụng SJF ể iều phối. Lưu ý P1 và P2 sẽ phải chờ trong suốt thời
gian nhàn rỗi này, do vậy thời gian chờ của chúng tăng lên. Thuật toán iều
phối này ược biết ến như iều phối dựa trên thông tin về tương lai.
Bài 3. Phân biệt sự khác nhau trong cách tiếp cận ể ưu tiên cho tiến
trình ngắn trong các thuật toán iều phối sau : a) FIFO. b) RR
c) Điều phối với ộ ưu tiên a cấp 47 lOMoARcPSD| 41967345
Bài 4. Cho biết hai ưu iểm chính của mô hình a tiểu trình
so với a tiến trình. Mô tả một ứng dụng thích hợp vớ mô hình a tiểu
trình và một ứng dụng khác không thích hợp.
Bài 5. Mô tả các xử lý hệ iều hành phải thực hiện khi
chuyển ổi ngữ cảnh giữa: a) Các tiến trình b) Các tiểu trình
Bài 6. Xác ịnh thời lượng quantum q là một nhiệm vụ khó khăn. Giả sử
chi phí trung bình cho một lần chuyển ổi ngữ cảnh là s, và thời gian trung bình
một tiến trình hướng nhập xuất sử dụng CPU trước khi phát sinh một yêu cầu
nhập xuất là t ( t>>s). Thảo luận các tác ộng ến sự thực hiện của hệ thống khi
chọn q theo các quy tắc sau: a) q bất ịnh b) q lớn hơn 0 1 ít c) q = s d) s < q < t e) q = t f) q > t
Bài 7. Giả sử một hệ iều hành áp dụng giải thuật iều phối multilevel
feedback với 5 mức ưu tiên (giảm dần). Thời lượng quantum dành cho hàng ợi
cấp 1 là 0,5s. Mỗi hàng ợi cấp thấp hơn sẽ có thời lượng quantum dài gấp ôi hàng
ợi ứng với mức ưu tiên cao hơn nó. Một tiến trình khi vào hệ thống sẽ ược ưa
vào hàng ợi mức cao nhất, và chuyển dần xuống các hàng ợi bên dưới sau mỗi
lượt sử dụng CPU. Một tiến trình chỉ có thể bị thu hồi CPU khi ã sử dụng hết
thời lượng quantum dành cho nó. Hệ thống có thể thực hiện các tác vụ xử lý theo
lô hoặc tương tác, và mỗi tác vụ lại có thể hướng xử lý hay hướng nhập xuất.
a) Giải thích tại sao hệ thống này hoạt ộng không hiệu quả?
b) Cần phải thay ổi (tối thiểu) như thế nào ể hệ thống iều phối các tác 48 lOMoARcPSD| 41967345
vụ với những bản chất khác biệt như thế tốt hơn?
Chương 4 LIÊN LẠC GIỮA CÁC TIẾN TRÌNH & VẤN ĐỀ ĐỒNG BỘ HOÁ
Các tiến trình trên nguyên tắc là hoàn toàn ộc lập, nhưng thực tế có thể
như thế không? Chương này sẽ giới thiệu nội dung về lý do các tiến trình có nhu
cầu liên lạc, các cơ chế hỗ trợ việc liên lạc này cũng như những vấn ề ặt ra khi
các tiến trình trao ổi thông tin với nhau.

4.1. Liên lạc giữa các tiến trình
4.1.1. Nhu cầu liên lạc giữa các tiến trình
Trong môi trường a nhiệm, một tiến trình không ơn ộc trong hệ thống, mà
có thể ảnh hưởng ến các tiến trình khác, hoặc bị các tiến trình khác tác ộng. Nói
cách khác, các tiến trình là những thực thể ộc lập, nhưng chúng vẫn có nhu cầu liên lạc với nhau ể:
- Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm ến những dữ liệu
nào ó, do vậy hệ iều hành cần cung cấp một môi trường cho phép sự truy cập
ồng thời ến các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: ôi khi ể ạt ược một sự xử lý nhanh chóng,
người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song
song. Thường thì các công việc nhỏ này cần hợp tác với nhau ể cùng hoàn thành
tác vụ ban ầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến
trình khác… Trong các trường hợp ó, hệ iều hành cần cung cấp cơ chế ể các tiến
trình có thể trao ổi thông tin với nhau.
4.1.2. Các vấn ề nảy sinh trong việc liên lạc giữa các tiến trình
Do mỗi tiến trình sỡ hữu một không gian ịa chỉ riêng biệt, nên các tiến trình
không thể liên lạc trực tiếp dễ dàng mà phải nhờ vào các cơ chế do hệ iều hành
cung cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ iều hành thường
phải tìm giải pháp cho các vấn ề chính yếu sau: 49 lOMoARcPSD| 41967345
- Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming): tiến
trình có cần phải biết tiến trình nào ang trao ổi hay chia sẻ thông tin với nó? Mối
liên kết ược gọi là tường minh khi ược thiết lập rõ ràng, trực tiếp giữa các tiến
trình, và là tiềm ẩn khi các tiến trình liên lạc với nhau thông qua một quy ước ngầm nào ó.
- Liên lạc theo chế ộ ồng bộ hay không ồng bộ (blocking / nonblocking):
khi một tiến trình trao ổi thông tin với một tiến trình khác, các tiến trình có cần
phải ợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác? Các tiến
trình liên lạc theo cơ chế ồng bộ sẽ chờ nhau hoàn tất việc liên lạc, còn các tiến
trình liên lạc theo cơ chế nonblocking thì không.
- Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân
tán: cơ chế liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt
với việc liên lạc giữa các tiến trình giữa những máy tính khác nhau?
Hầu hết các hệ iều hành ưa ra nhiều cơ chế liên lạc khác nhau, mỗi cơ chế
có những ặc tính riêng, và thích hợp trong một hoàn cảnh chuyên biệt.
4.2. Các cơ chế thông tin liên lạc
4.2.1. Tín hiệu (Signal) *
Giới thiệu: Tín hiệu là một cơ chế phần mềm tương tự như các
ngắt cứng tác ộng ến các tiến trình. Một tín hiệu ược sử dụng ể thông báo cho
tiến trình về một sự kiện nào ó xảy ra. Có nhiều tín hiệu ược ịnh nghĩa, mỗi
một tín hiệu có một ý nghĩa tương ứng với một sự kiện ặc trưng. *
Ví dụ : Một số tín hiệu của UNIX Tín hiệu Mô tả SIGINT
Người dùng nhấn phím DEL ể ngắt xử lý tiến trình SIGQUIT Yêu cầu thoát xử lý 50 lOMoAR cPSD| 41967345 SIGILL
Tiến trình xử lý một chỉ thị bất hợp lệ SIGKILL
Yêu cầu kết thúc một tiến trình SIGFPT
Lỗi floating – point xảy ra (chia cho 0) SIGPIPE
Tiến trình ghi dữ liệu vào pipe mà không có reader SIGSEGV
Tiến trình truy xuất ến một ịa chỉ bất hợp lệ SIGCLD Tiến trình con kết thúc SIGUSR1
Tín hiệu 1 do người dùng ịnh nghĩa SIGUSR2
Tín hiệu 2 do người dùng ịnh nghĩa
Mỗi tiến trình sỡ hữu một bảng biễu diễn các tín hiệu khác nhau. Với mỗi
tín hiệu sẽ có tương ứng một trình xử lý tín hiệu (signal handler) quy ịnh các xử
lý của tiến trình khi nhận ược tín hiệu tương ứng.
Các tín hiệu ược gởi i bởi:
- Phần cứng (ví dụ lỗi do các phép tính số học).
- Hạt nhân hệ iều hành gởi ến một tiến trình (ví dụ lưu ý tiến trình
khi có một thiết bị nhập/xuất tự do).
- Một tiến trình gởi ến một tiến trình khác (ví dụ tiến trình cha yêu
cầu một tiến trình con kết thúc). 51 lOMoARcPSD| 41967345
- Người dùng (ví dụ nhấn phím Ctl-C ể ngắt xử lý của tiến trình)
Khi một tiến trình nhận một tín hiệu, nó có thể xử sự theo một trong các cách sau:
- Bỏ qua tín hiệu.
- Xử lý tín hiệu theo kiểu mặc ịnh.
- Tiếp nhận tín hiệu và xử lý theo cách ặc biệt của tiến trình.
Hình 4.1. Liên lạc bằng tín hiệu
* Thảo luận: Liên lạc bằng tín hiệu mang tính chất không ồng bộ, nghĩa là
một tiến trình nhận tín hiệu không thể xác ịnh trước thời iểm nhận tính hiệu. Hơn
nữa các tiến trình không thể kiểm tra ược sự kiện tương ứng với tín hiệu có thật
sự xảy ra ? Cuối cùng, các tiến trình chỉ có thể thông báo cho nhau về một biến
cố nào ó, mà không trao ổi dữ liệu theo cơ chế này ược. 4.2.2. Pipe
* Giới thiệu: Một pipe là một kênh liên lạc trực tiếp giữa hai tiến trình:
dữ liệu xuất của tiến trình này ược chuyển ến làm dữ liệu nhập cho tiến trình kia
dưới dạng một dòng các byte.
Khi một pipe ược thiết lập giữa hai tiến trình, một trong chúng sẽ ghi dữ
liệu vào pipe và tiến trình kia sẽ ọc dữ liệu từ pipe. Thứ tự dữ liệu truyền qua
pipe ược bảo toàn theo nguyên tắc FIFO. Một pipe có kích thước giới hạn (thường là 4096 ký tự) 52 lOMoARcPSD| 41967345
Hình 4.2. Liên lạc qua pipe
Một tiến trình chỉ có thể sử dụng một pipe do nó tạo ra hay kế thừa từ tiến
trình cha. Hệ iều hành cung cấp các lời gọi hệ thống read/write cho các tiến trình
thực hiện thao tác ọc/ghi dữ liệu trong pipe. Hệ iều hành cũng chịu trách nhiệm
ồng bộ hóa việc truy xuất pipe trong các tình huống:
- Tiến trình ọc pipe sẽ bị khóa nếu pipe trống, nó sẽ phải ợi ến khi pipe có dữ liệu ể truy xuất.
- Tiến trình ghi pipe sẽ bị khóa nếu pipe ầy, nó sẽ phải ợi ến khi pipe có
chỗ trống ể chứa dữ liệu.
* Thảo luận: Liên lạc bằng pipe là một cơ chế liên lạc một chiều
(unidirectional), nghĩa là một tiến trình kết nối với một pipe chỉ có thể thực hiện
một trong hai thao tác ọc hoặc ghi, nhưng không thể thực hiện cả hai. Một số hệ
iều hành cho phép thiết lập hai pipe giữa một cặp tiến trình ể tạo liên lạc hai
chiều. Trong những hệ thống ó, có nguy cơ xảy ra tình trạng tắc nghẽn
(deadlock): một pipe bị giới hạn về kích thước, do vậy nếu cả hai pipe nối kết
hai tiến trình ều ầy (hoặc ều trống) và cả hai tiến trình ều muốn ghi (hay ọc) dữ
liệu vào pipe (mỗi tiến trình ghi dữ liệu vào một pipe), chúng sẽ cùng bị khóa và chờ lẫn nhau mãi mãi.
Cơ chế này cho phép truyền dữ liệu với cách thức không cấu trúc.
Ngoài ra, một giới hạn của hình thức liên lạc này là chỉ cho phép kết nối
hai tiến trình có quan hệ cha-con, và trên cùng một máy tính.
4.2.3. Vùng nhớ chia sẻ
* Giới thiệu: Cách tiếp cận của cơ chế này là cho nhiều tiến trình cùng truy
xuất ến một vùng nhớ chung gọi là vùng nhớ chia sẻ (shared memory). Không
có bất kỳ hành vi truyền dữ liệu nào cần phải thực hiện ở ây, dữ liệu chỉ ơn giản
ược ặt vào một vùng nhớ mà nhiều tiến trình có thể cùng truy cập ược. 53 lOMoARcPSD| 41967345
Với phương thức này, các tiến trình chia sẻ một vùng nhớ vật lý thông qua
trung gian không gian ịa chỉ của chúng. Một vùng nhớ chia sẻ tồn tại ộc lập với
các tiến trình, và khi một tiến trình muốn truy xuất ến vùng nhớ này, tiến trình
phải kết gắn vùng nhớ chung ó vào không gian ịa chỉ riêng của từng tiến trình,
và thao tác trên ó như một vùng nhớ riêng của mình.
Hình 4.3. Liên lạc qua vùng nhớ chia sẻ
* Thảo luận: Đây là phương pháp nhanh nhất ể trao ổi dữ liệu giữa các tiến
trình. Nhưng phương thức này cũng làm phát sinh các khó khăn trong việc bảo
ảm sự toàn vẹn dữ liệu (coherence), ví dụ : làm sao biết ược dữ liệu mà một tiến
trình truy xuất là dữ liệu mới nhất mà tiến trình khác ã ghi? Làm thế nào ngăn
cản hai tiến trình cùng ồng thờighi dữ liệu vào vùng nhớ chung? Rõ ràng vùng
nhớ chia sẻ cần ược bảo vệ bằng những cơ chế ồng bộ hóa thích hợp.
Một khuyết iểm của phương pháp liên lạc này là không thể áp dụng hiệu
quả trong các hệ phân tán, ể trao ổi thông tin giữa các máy tính khác nhau.
4.2.4. Trao ổi thông iệp (Message)
* Giới thiệu: Hệ iều hành còn cung cấp một cơ chế liên lạc giữa các tiến
trình không thông qua việc chia sẻ một tài nguyên chung, mà thông qua việc gởi
thông iệp. Để hỗ trợ cơ chế liên lạc bằng thông iệp, hệ iều hành cung cấp các
hàm IPC chuẩn (Interprocess communication), cơ bản là hai hàm:
- Send (message): gởi một thông iệp
- Receive (message): nhận một thông iệp
Nếu hai tiến trình P và Q muốn liên lạc với nhau, cần phải thiết lập một
mối liên kết giữa hai tiến trình, sau ó P, Q sử dụng các hàm IPC thích hợp ể trao
ổi thông iệp, cuối cùng khi sự liên lạc chấm dứt mối liên kết giữa hai tiến trình 54 lOMoARcPSD| 41967345
sẽ bị hủy. Có nhiều cách thức ể thực hiện sự liên kết giữa hai tiến trình và cài ặt
các theo tác send /receive tương ứng: liên lạc trực tiếp hay gián tiếp, liên lạc ồng
bộ hoặc không ồng bộ, kích thước thông iệp là cố ịnh hay không… Nếu các tiến
trình liên lạc theo kiểu liên kết tường minh, các hàm Send và Receive sẽ ược cài ặt với tham số:
- Send (destination, message) : gởi một thông iệp ến destination
- Receive (source, message) : nhận một thông iệp từ source
* Thảo luận: Đơn vị truyền thông tin trong cơ chế trao ổi thông iệp là một
thông iệp, do ó các tiến trình có thể trao ổi dữ liệu ở dạng có cấu trúc. 4.2.5. Sockets
* Giới thiệu: Một socket là một thiết bị truyền thông hai chiều tương tự
như tập tin, chúng ta có thể ọc hay ghi lên nó, tuy nhiên mỗi socket là một thành
phần trong một mối nối nào ó giữa các máy trên mạng máy tính và các thao tác
ọc/ghi chính là sự trao ổi dữ liệu giữa các ứng dụng trên nhiều máy khác nhau.
Sử dụng socket có thể mô phỏng hai phương thức liên lạc trong thực tế:
liên lạc thư tín (socket óng vai trò bưu cục) và liên lạc iện thoại (socket óng vai trò tổng ài).
Các thuộc tính của socket: -
Domaine: ịnh nghĩa dạng thức ịa chỉ và các nghi thức sử dụng.
Có nhiều domaines, ví dụ UNIX, INTERNET, XEROX_NS, ... -
Type: ịnh nghĩa các ặc iểm liên lạc: a) Sự tin cậy
b) Sự bảo toàn thứ tự dữ liệu
c) Lặp lại dữ liệu
d) Chế ộ nối kết
e) Bảo toàn giới hạn thông iệp
f) Khả năng gửi thông iệp khẩn 55 lOMoARcPSD| 41967345
Để thực hiện liên lạc bằng socket, cần tiến hành các thao tác:
- Tạo lập hay mở một socket
- Gắn kết một socket với một ịa chỉ
- Liên lạc: có hai kiểu liên lạc tùy thuộc vào chế ộ nối kết:
a) Liên lạc trong chế ộ không liên kết: liên lạc theo hình thức hộp thư: -
Hai tiến trình liên lạc với nhau không kết nối trực tiếp - Mỗi
thông iệp phải kèm theo ịa chỉ người nhận.
Hình thức liên lạc này có ặc iểm ược: -
Người gởi không chắc chắn thông iệp của học ược gởi ến người nhận, -
Một thông iệp có thể ược gởi nhiều lần; -
Hai thông iệp ượ gởi theo một thứ tự nào ó có thể ến tay người
nhận theo một thứ tự khác.
Một tiến trình sau khi ã mở một socket có thể sử dụng nó ể liên lạc với
nhiều tiến trình khác nhau nhờ sử hai primitive sendreceive.
b) Liên lạc trong chế ộ nối kết:
Một liên kết ược thành lập giữa hai tiến trình. Trước khi mối liên kết này
ược thiết lập, một trong hai tiến trình phải ợi có một tiến trình khác yêu cầu kết
nối. Có thể sử dụng socket ể liên lạc theo mô hình client-serveur. Trong mô hình
này, server sử dụng lời gọi hệ thống listen và accept ể nối kết với client, sau ó,
client và server có thể trao ổi thông tin bằng cách sử dụng các primitive send và
receive. - Hủy một socket Ví dụ :
Trong nghi thức truyền thông TCP, mỗi mối nối giữa hai máy tính ược xác
ịnh bởi một port, khái niệm port ở ây không phải là một cổng giao tiếp trên thiết
bị vật lý mà chỉ là một khái niệm logic trong cách nhìn của người lập trình, mỗi
port ược tương ứng với một số nguyên dương. 56 lOMoARcPSD| 41967345
Hình 4.4. Các socket và port trong mối nối TCP.
Hình 4.4 minh họa một cách giao tiếp giữa hai máy tính trong nghi thức
truyền thông TCP. Máy A tạo ra một socket và kết buộc (bind) socket nầy với
một port X (tức là một số nguyên dương có ý nghĩa cục bộ trong máy A), trong
khi ó máy B tạo một socket khác và móc vào (connect) port X trong máy A.
* Thảo luận: Cơ chế socket có thể sử dụng ể chuẩn hoá mối liên lạc giữa
các tiến trình vốn không liên hệ với nhau, và có thể hoạt ộng trong những hệ thống khác nhau.
4.3. Nhu cầu ồng bộ hóa (synchronisation)
Trong một hệ thống cho phép các tiến trình liên lạc với nhau, bao giờ hệ
iều hành cũng cần cung cấp kèm theo những cơ chế ồng bộ hóa ể bảo ảm hoạt
ộng của các tiến trình ồng hành không tác ộng sai lệch ến nhau vì các lý do sau ây:
4.3.1. Yêu cầu ộc quyền truy xuất (Mutual exclusion)
Các tài nguyên trong hệ thống ược phân thành hai loại: tài nguyên có thể
chia sẻ cho phép nhiều tiến trình ồng thời truy xuất, và tài nguyên không thể chia
sẻ chỉ chấp nhận một ( hay một số lượng hạn chế) tiến trình sử dụng tại một thời
iểm. Tính không thể chia sẻ của tài nguyên thường có nguồn gốc từ một trong hai nguyên nhân sau ây: -
Đặc tính cấu tạo phần cứng của tài nguyên không cho phép chia sẻ. -
Nếu nhiều tiến trình sử dụng tài nguyên ồng thời, có nguy cơ xảy
ra các kết quả không dự oán ược do hoạt ộng của các tiến trình trên tài nguyên ảnh hưởng lẫn nhau. 57 lOMoARcPSD| 41967345
Để giải quyết vấn ề, cần bảo ảm tiến trình ộc quyền truy xuất tài nguyên,
nghĩa là hệ thống phải kiểm soát sao cho tại một thời iểm, chỉ có một tiến trình
ược quyền truy xuất một tài nguyên không thể chia sẻ.
4.3.2. Yêu cầu phối hợp (Synchronization)
Nhìn chung, mối tương quan về tốc ộ thực hiện của hai tiến trình trong hệ
thống là không thể biết trước, vì iều này phụ thuộc vào nhiều yếu tố ộng như tần
suất xảy ra các ngắt của từng tiến trình, thời gian tiến trình ược cấp phát bộ xử
lý… Có thể nói rằng các tiến trình hoạt ộng không ồng bộ với nhau. Nhưng có
những tình huống các tiến trình cần hợp tác trong việc hoàn thành tác vụ, khi ó
cần phải ồng bộ hóa hoạt ộng của các tiến trình, ví dụ một tiến trình chỉ có thể
xử lý nếu một tiến trình khác ã kết thúc một công việc nào ó…
4.3.3. Bài toán ồng bộ hoá
4.3.3.1. Vấn ề tranh oạt iều khiển (race condition)
Giả sử có hai tiến trình P1 và P2 thực hiện công việc của các kế toán, và
cùng chia sẻ một vùng nhớ chung lưu trữ biến taikhoan phản ánh thông tin
về tài khoản. Mỗi tiến trình muốn rút một khoản tiền tienrut từ tài khoản:
if (taikhoan - tienrut >=0)
taikhoan = taikhoan - tienrut; else
error(« khong the rut tien ! »);
Giả sử trong tài khoản hiện còn 800, P1 muốn rút 500 và P2 muốn rút 400.
Nếu xảy ra tình huống như sau:
- Sau khi ã kiểm tra iều kiện (taikhoan - tienrut >=0) và nhận
kết quả là 300, P1 hết thời gian xử lý mà hệ thống cho phép, hệ iều hành cấp phát CPU cho P2.
- P2 kiểm tra cùng iều kiện trên, nhận ược kết quả là 400 (do P1 vẫn chưa
rút tiền) và rút 400. Giá trị của taikhoan ược cập nhật lại là 400.
- Khi P1 ược tái kích hoạt và tiếp tục xử lý, nó sẽ không kiểm tra lại iều
kiện (taikhoan - tienrut >=0)-vì ã kiểm tra trong lượt xử lý trước- 58 lOMoAR cPSD| 41967345
mà thực hiện rút tiền. Giá trị của taikhoan sẽ lại ược cập nhật thành -100. Tình huống lỗi xảy ra.
Các tình huống tương tự như thế (có thể xảy ra khi có nhiều hơn hai tiến
trình ọc và ghi dữ liệu trên cùng một vùng nhớ chung, và kết quả phụ thuộc vào
sự iều phối tiến trình của hệ thống) ược gọi là các tình huống tranh oạt iều khiển (race condition) .
4.3.3.2. Miền găng (critical section)
Để ngăn chặn các tình huống lỗi có thể nảy sinh khi các tiến trình truy xuất
ồng thời một tài nguyên không thể chia sẻ, cần phải áp ặt một sự truy xuất ộc
quyền trên tài nguyên ó: khi một tiến trình ang sử dụng tài nguyên, thì những
tiến trình khác không ược truy xuất ến tài nguyên.
Đoạn chương trình trong ó có khả năng xảy ra các mâu thuẫn truy xuất trên
tài nguyên chung ược gọi là miền găng (critical section). Trong ví dụ trên, oạn mã:
if (taikhoan - tienrut >=0) taikhoan
= taikhoan - tienrut; của mỗi tiến trình
tạo thành một miền găng.
Có thể giải quyết vấn ề mâu thuẫn truy xuất nếu có thể bảo ảm tại một thời
iểm chỉ có duy nhất một tiến trình ược xử lý lệnh trong miền găng.
Một phương pháp giải quyết tốt bài toán miền găng cần thõa mãn 4 iều kiện sau:
- Không có hai tiến trình cùng ở trong miền găng cùng lúc.
- Không có giả thiết nào ặt ra cho sự liên hệ về tốc ộ của các tiến trình,
cũng như về số lượng bộ xử lý trong hệ thống.
- Một tiến trình tạm dừng bên ngoài miền găng không ược ngăn cản các
tiến trình khác vào miền găng.
- Không có tiến trình nào phải chờ vô hạn ể ược vào miền găng. 4.4. Tóm tắt 59 lOMoARcPSD| 41967345
- Một số tiến trình trong hệ thống có nhu cầu trao ổi thông tin ể phối hợp
hoạt ộng, do mỗi tiến trình có một không gian ịa chỉ ộc lập nên viêc liên lạc chỉ
có thể thực hiện thông qua các cơ chế do hệ iều hành cung cấp.
- Một số cơ chế trao ổi thông tin giữa các tiến trình:
+ Tín hiệu: thông báo sự xảy ra của một sự kiện.
+ Pipe: truyền dữ liệu không cấu trúc.
+ Vùng nhớ chia sẻ: cho phép nhiều tiến trình truy cập ến cùng một vùng nhớ.
+ Trao ổi thông iệp: truyền dữ liệu có cấu trúc, có thể vận dụng trong các hệ phân tán
+ Socket : chuẩn hoán việc liên lạc giữa các hệ thống khác biệt
- Khi các tiến trình trao ổi thông tin, chia sẻ tài nguyên chung, cần phải
ồng bộ hoá hoạt ộng của chúng chủ yếu do yêu cầu ộc quyền truy xuất hoặc phối hợp hoạt ộng.
- Miền găng là oạn lệnh trong chương trình có khả năng phát sinh mâu
thuẫn truy xuất. Để không xảy ra mâu thuẫn truy xuất, cần ảm bảo tại một thời
iểm chỉ có một tiến trình ược vào miền găng.
* Củng cố bài học
Các câu hỏi cần trả lời ược sau bài học này:
1. Các cơ chế trao ổi thông tin : tình huống sử dụng, ưu, khuyết?
2. Các yêu cầu ồng bộ hoá? * Bài tập
Phân tích các bài toán sau ây và xác ịnh những yêu cầu ồng bộ hoá, miền găng:
Bài 1. Bài toán Tạo phân tử H2O
Đồng bộ hoạt ộng của một phòng thí nghiệm sử dụng nhiều tiến trình ồng
hành sau ể tạo các phân tử H2O: 60 lOMoARcPSD| 41967345
MakeH() // Mỗi tiến tr nh MakeH tạo 1 nguyŒn tử H { Make-Hydro(); }
MakeO() // Mỗi tiến tr nh MakeO tạo 1 nguyŒn tử O { Make-Oxy(); }
MakeWater() /* Tiến tr nh MakeWater hoạt ộng ồng h nh với
cÆc tiến tr nh MakeH, MakeO, chờ có ủ 2 H và 1 O ể tạo H2O */ { wh ile (T)
Make-Water(); //Tạo 1 ph n tử H2O }
Bài 2. Bài toán Cây cầu cũ
Để tránh sụp ổ, người ta chỉ có cho phép tối a 3 xe lưu thông ồng thời qua
một cây cầu rất cũ. Hãy xây dựng thủ tục ArriveBridge(int direction)
ExitBridge() kiểm soát giao thông trên cầu sao cho: -
Tại mỗi thời iểm, chỉ cho phép tối a 3 xe lưu thông trên cầu. -
Tại mỗi thời iểm, chỉ cho phép tối a 3 xe lưu thông cùng hướng trên cầu.
Mỗi chiếc xe khi ến ầu cầu sẽ gọi ArriveBridge(direction) ể kiểm tra iều
kiện lên cầu, và khi ã qua cầu ược sẽ gọi ExitBridge() ể báo hiệu kết thúc.
Giả sử hoạt ộng của mỗi chiếc xe ược mô tả bằng một tiến trình Car() sau ây:
Car(int direction) /* direction xác ịnh hướng di chuyển của mỗi chiếc xe.*/ {
RuntoBridge(); // Đi về ph a cầu
ArriveBridge(direction); PassBridge(); // Qua cầu Exit Bridge();
RunfromBridge(); // Đã qua cầu } 61 lOMoARcPSD| 41967345
Bài 3. Bài toán Qua sông
Để vượt qua sông, các nhân viên Microsof và các Linux hacker cùng sử
dụng một bến sông và phải chia sẻ một số thuyền ặc biệt. Mỗi chiếc thuyền này
chỉ cho phép chở 1 lần 4 người, và phải có ủ 4 người mới khởi hành ược. Để bảo
ảm an toàn cho cả 2 phía, cần tuân thủ các luật sau:
a. Không chấp nhận 3 nhân viên Microsoft và 1 Linux hacker trên cùng một chiếc thuyền.
b. Ngược lại, không chấp nhận 3 Linux hacker và 1 nhân viên Microsoft
trên cùng một chiếc thuyền.
c. Tất cả các trường hợp kết hợp khác ều hợp pháp.
d. Thuyền chỉ khởihành khi ã có ủ 4 hành khách.
Cần xây dựng 2 thủ tục HackerArrives()EmployeeArrives() ược gọi
tương ứng bởi 1 hacker hoặc 1 nhân viên khi họ ến bờ sông ể kiểm tra iều kiện
có cho phép họ xuống thuyền không? Các thủ tục này sẽ sắp xếp những người
thích hợp có thể lên thuyền. Những người ã ược lên thuyền khi thuyền chưa ầy
sẽ phải chờ ến khi người thứ 4 xuống thuyền mới có thể khởi hành qua sông.
(Không quan tâm ến số lương thuyền hay việc thuyền qua sông rồi trở lại… Xem
như luôn có thuyền ể sắp xếp theo các yêu cầu hợp lệ).
Giả sử hoạt ộng của mỗi hacker ược mô tả bằng một tiến trình Hacker() sau ây: Hacker() {
RuntoRiver(); // Đi ến bờ s ng
HackerArrives (); // Kiểm tra iều kiện xuống thuyền
CrossRiver(); // Khởi h nh qua s ng }
v hoạt ộng của mỗi nhân viên ược m tả bằng một tiến
tr nh Employee() sau ây: Employee() { 62 lOMoARcPSD| 41967345
RuntoRiver(); // Đi ến bờ s ng
EmployeeArrives (); // Kiểm tra iều kiện xuống thuyền
CrossRiver(); // Khởi h nh qua s ng }
Chương 5 CÁC GIẢI PHÁP ĐỒNG BỘ HOÁ
Chương này sẽ giới thiệu các giải pháp cụ thể ể xử lý bài toán ồng bộ hoá.
Có nhiều giải pháp ể thực hiện việc truy xuất miền găng, các giải pháp này ược
phân biệt thành hai lớp tùy theo cách tiếp cận trong xử lý của tiến trình bị khóa:
các giải pháp "busy waiting" và các giải pháp "sleep and wakeup".
5.1. Giải pháp “busy waiting”
5.1.1. Các giải pháp phần mềm
5.1.1.1. Sử dụng các biến cờ hiệu
* Tiếp cận: các tiến trình chia sẻ một biến chung óng vai trò "chốt cửa"
(lock), biến này ược khởi ộng là 0. Một tiến trình muốn vào miền găng trước tiên
phải kiểm tra giá trị của biến lock. Nếu lock = 0, tiến trình ặt lại giá trị cho lock
= 1 và i vào miền găng. Nếu lock ang nhận giá trị 1, tiến trình phải chờ bên ngoài
miền găng cho ến khi lock có giá trị 0. Như vậy giá trị 0 của lock mang ý nghĩa
là không có tiến trình nào ang ở trong miền găng, và lock=1 khi có một tiến trình ang ở trong miền găng.
while (TRUE) { while (lock == 1); // wait lock =
1; critical-section (); lock = 0; Noncritical-section (); } 63 lOMoARcPSD| 41967345
Hình 5.1. Cấu trúc một chương trình
sử dụng biến khóa ể ồng bộ
* Thảo luận: Giải pháp này có thể vi phạm iều kiện thứ nhất: hai tiến trình
có thể cùng ở trong miền găng tại một thời iểm. Giả sử một tiến trình nhận thấy
lock = 0 và chuẩn bị vào miền găng, nhưng trước khi nó có thể ặt lại giá trị cho
lock là 1, nó bị tạm dừng ể một tiến trình khác hoạt ộng. Tiến trình thứ hai này
thấy lock vẫn là 0 thì vào miền găng và ặt lại lock = 1. Sau ó tiến trình thứ nhất
ược tái kích hoạt, nó gán lock = 1 lần nữa rồi vào miền găng. Như vậy tại thời
iểm ó cả hai tiến trình ều ở trong miền găng.
5.1.1.2. Sử dụng việc kiểm tra luân phiên
* Tiếp cận: Đây là một giải pháp ề nghị cho hai tiến trình. Hai tiến trình
này sử dụng chung biến turn (phản ánh phiên tiến trình nào ược vào miền găng),
ược khởi ộng với giá trị 0. Nếu turn = 0, tiến trình A ược vào miền găng. Nếu
turn = 1, tiến trình A i vào một vòng lặp chờ ến khi turn nhận giá trị 0. Khi tiến
trình A rời khỏi miền găng, nó ặt giá trị turn về 1 ể cho phép tiến trình B i vào miền găng.
while (TRUE) { while (turn != 0); //wait
critical-section (); turn = 1; Noncritical-section (); }
(a) Cấu trúc tiến trình A
while (TRUE) { while (turn != 1); // wait
critical-section (); turn = 0; Noncritical-section (); }
(b) Cấu trúc tiến trình B
Hình 5.2. Cấu trúc các tiến trình trong giải pháp kiểm tra luân phiên 64 lOMoAR cPSD| 41967345
* Thảo luận: Giải pháp này dựa trên việc thực hiện sự kiểm tra nghiêm nhặt
ến lượt tiến trình nào ược vào miền găng. Do ó nó có thể ngăn chặn ược tình
trạng hai tiến trình cùng vào miền găng, nhưng lại có thể vi phạm iều kiện thứ
ba: một tiến trình có thể bị ngăn chặn vào miền găng bởi một tiến trình khác
không ở trong miền găng. Giả sử tiến trình B ra khỏi miền găng rất nhanh chóng.
Cả hai tiến trình ều ở ngoài miền găng, và turn = 0. Tiến trình A vào miền găng
và ra khỏi nhanh chóng, ặt lại giá trị của turn là 1, rồi lại xử lý oạn lệnh ngoài
miền găng lần nữa. Sau ó, tiến trình A lại kết thúc nhanh chóng oạn lệnh ngoài
miền găng của nó và muốn vào miền găng một lần nữa. Tuy nhiên lúc này B vẫn
còn mãi xử lý oạn lệnh ngoài miền găng của mình, và turn lại mang giá trị 1.
Như vậy, giải pháp này không có giá trị khi có sự khác biệt lớn về tốc ộ thực
hiện của hai tiến trình, nó vi phạm cả iều kiện thứ hai.
5.1.1.3. Giải pháp của Peterson
* Tiếp cận: Peterson ưa ra một giải pháp kết hợp ý tưởng của cả hai giải
pháp kể trên. Các tiến trình chia sẻ hai biến chung : int turn; // ến phiŒn ai
int interesse[2]; // khởi ộng l FALSE
Nếu interesse[i] = TRUE có nghĩa là tiến trình Pi muốn vào miền găng.
Khởi ầu, interesse[0]=interesse[1]=FALSE và giá trị của est ược khởi ộng là 0
hay 1. Để có thể vào ược miền găng, trước tiên tiến trình Pi ặt giá trị
interesse[i]=TRUE ( xác ịnh rằng tiến trình muốn vào miền găng), sau ó ặt
turn=j ( ề nghị thử tiến trình khác vào miền găng). Nếu tiến trình Pj không quan
tâm ến việc vào miền găng (interesse[j]=FALSE), thì Pi có thể vào miền găng,
nếu không, Pi phải chờ ến khi interesse[j]=FALSE. Khi tiến trình Pi rời khỏi
miền găng, nó ặt lại giá trị cho interesse[i]= FALSE. 65 lOMoARcPSD| 41967345 while (TRUE) {
int j = 1-i; // j là tiến trình còn lại interesse[i]= TRUE; turn = j;
while(turn == j &&interesse[j]==TRUE); critical-section ();
interesse[i] = FALSE; Noncritical-section (); }
Hình 5.3. Cấu trúc tiến trình Pi trong giải pháp Peterson
* Thảo luận: giải pháp này ngăn chặn ược tình trạng mâu thuẫn truy xuất:
mỗi tiến trình Pi chỉ có thể vào miền găng khi interesse[j]=FALSE hoặc turn =
i. Nếu cả hai tiến trình ều muốn vào miền găng thì interesse[i] = interesse[j]
=TRUE nhưng giá trị của turn chỉ có thể hoặc là 0 hoặc là 1, do vậy chỉ có một
tiến trình ược vào miền găng.
5.1.2. Các giải pháp phần cứng 5.1.2.1. Cấm ngắt
* Tiếp cận: cho phép tiến trình cấm tất cả các ngắt trước khi vào miền găng,
và phục hồi ngắt khi ra khỏi miền găng. Khi ó, ngắt ồng hồ cũng không xảy ra,
do vậy hệ thống không thể tạm dừng hoạt ộng của tiến trình ang xử lý ể cấp phát
CPU cho tiến trình khác, nhờ ó tiến trình hiện hành yên tâm thao tác trên miền
găng mà không sợ bị tiến trình nào khác tranh chấp.
* Thảo luận: giải pháp này không ược ưa chuộng vì rất thiếu thận trọng khi
cho phép tiến trình người dùng ược phép thực hiện lệnh cấm ngắt. Hơn nữa, nếu
hệ thống có nhiều bộ xử lý, lệnh cấm ngắt chỉ có tác dụng trên bộ xử lý ang xử
lý tiến trình, còn các tiến trình hoạt ộng trên các bộ xử lý khác vẫn có thể truy xuất ến miền găng.
5.1.2.2. Chỉ thị TSL (Test-and-Set) 66 lOMoARcPSD| 41967345
* Tiếp cận: ây là một giải pháp òi hỏi sự trợ giúp của cơ chế phần cứng.
Nhiều máy tính cung cấp một chỉ thị ặc biệt cho phép kiểm tra và cập nhật nội
dung một vùng nhớ trong một thao tác không thể phân chia, gọi là chỉ thị Test-
and-Set Lock (TSL) và ược ịnh nghĩa như sau:
Test-and-Setlock(boolean target) {
Test-and-Setlock = target; target = TRUE; }
Nếu có hai chỉ thị TSL xử lý ồng thời (trên hai bộ xử lý khác nhau), chúng
sẽ ược xử lý tuần tự. Có thể cài ặt giải pháp truy xuất ộc quyền với TSL bằng
cách sử dụng thêm một biến lock, ược khởi gán là FALSE. Tiến trình phải kiểm
tra giá trị của biến lock trước khi vào miền găng, nếu lock = FALSE, tiến trình có thể vào miền găng. while (TRUE) {
while (Test-and-Setlock(lock)); critical-section
(); lock = FALSE; Noncritical-section (); }
Hình 5.4. Cấu trúc một chương trình trong giải pháp TSL
* Thảo luận: cũng giống như các giải pháp phần cứng khác, chỉ thị TSL
giảm nhẹ công việc lập trình ể giải quyết vấn ể, nhưng lại không dễ dàng ể cài ặt
chỉ thị TSL sao cho ược xử lý một cách không thể phân chia, nhất là trên máy
với cấu hình nhiều bộ xử lý.
Tất cả các giải pháp trên ây ều phải thực hiện một vòng lặp ể kiểm tra liệu
nó có ược phép vào miền găng, nếu iều kiện chưa cho phép, tiến trình phải chờ
tiếp tục trong vòng lặp kiểm tra này. Các giải pháp buộc tiến trình phải liên tục
kiểm tra iều kiện ể phát hiện thời iểm thích hợp ược vào miền găng như thế ược
gọi các giải pháp "busy waiting". Lưu ý rằng việc kiểm tra như thế tiêu thụ rất 67 lOMoARcPSD| 41967345
nhiều thời gian sử dụng CPU, do vậy tiến trình ang chờ vẫn chiếm dụng CPU.
Xu hướng giải quyết vấn ề ồng bộ hoá là nên tránh các giải pháp "busy waiting".
5.2. Các giải pháp “SLEEP and WAKEUP”
Để loại bỏ các bất tiện của giải pháp "busy waiting", chúng ta có thể tiếp
cận theo hướng cho một tiến trình chưa ủ iều kiện vào miền găng chuyển sang
trạng thái blocked, từ bỏ quyền sử dụng CPU. Để thực hiện iều này, cần phải sử
dụng các thủ tục do hệ iều hành cung cấp ể thay ổi trạng thái tiến trình. Hai thủ
tục cơ bản SLEEPWAKEUP thường ược sử dụng ể phục vụ mục ích này.
SLEEP là một lời gọi hệ thống có tác dụng tạm dừng hoạt ộng của tiến
trình (blocked) gọi nó và chờ ến khi ược một tiến trình khác "ánh thức". Lời gọi
hệ thống WAKEUP nhận một tham số duy nhất: tiến trình sẽ ược tái kích hoạt
( ặt về trạng thái ready).
Ý tưởng sử dụng SLEEP và WAKEUP như sau: khi một tiến trình chưa ủ
iều kiện vào miền găng, nó gọi SLEEP ể tự khóa ến khi có một tiến trình khác
gọi WAKEUP ể giải phóng cho nó. Một tiến trình gọi WAKEUP khi ra khỏi miền
găng ể ánh thức một tiến trình ang chờ, tạo cơ hội cho tiến trình này vào miền găng:
int busy; // 1 nếu miền găng ang bị chiếm, nếu kh ng l 0
int blocked; // ếm số lượng tiến trình ang bị kh a while
(TRUE) { if (busy){ blocked = blocked + 1; sleep(); } else busy = 1; critical-section ();
busy = 0; if(blocked){ wakeup(process); blocked = blocked - 1; } Noncritical-section (); }
Hình 5.5. Cấu trúc chương trình trong giải pháp SLEEP and WAKEUP 68 lOMoARcPSD| 41967345
Khi sử dụng SLEEP và WAKEUP cần hết sức cẩn thận, nếu không muốn
xảy ra tình trạng mâu thuẫn truy xuất trong một vài tình huống ặc biệt như sau:
giả sử tiến trình A vào miền găng, và trước khi nó rời khỏi miền găng thì tiến
trình B ược kích hoạt. Tiến trình B thử vào miền găng nhưng nó nhận thấy A ang
ở trong ó, do vậy B tăng giá trị biến blocked và chuẩn bị gọi SLEEP ể tự khoá.
Tuy nhiên trước khi B có thể thực hiện SLEEP, tiến trình A lại ược tái kích hoạt
và ra khỏi miền găng. Khi ra khỏi miền găng A nhận thấy có một tiến trình ang
chờ (blocked=1) nên gọi WAKEUP và giảm giá trị của blocked. Khi ó tín hiệu
WAKEUP sẽ lạc mất do tiến trình B chưa thật sự « ngủ » ể nhận tín hiệu ánh
thức. Khi tiến trình B ược tiếp tục xử lý, nó mới goi SLEEP và tự khó vĩnh viễn.
Vấn ề ghi nhận ược là tình trạng lỗi này xảy ra do việc kiểm tra tư cách vào
miền găng và việc gọi SLEEP hay WAKEUP là những hành ộng tách biệ, có thể
bị ngắt nửa chừng trong quá trình xử lý, do ó có khi tín hiệu WAKEUP gởi ến
một tiến trình chưa bị khóa sẽ lạc mất.
Để tránh những tình huống tương tự, hệ iều hành cung cấp những cơ chế
ồng bộ hóa dựa trên ý tưởng của chiến lược "SLEEP and WAKEUP" nhưng ược
xây dựng bao hàm cả phương tiện kiểm tra iều kiện vào miền găng giúp sử dụng an toàn.
5.2.1. Semaphore
* Tiếp cận: Được Dijkstra ề xuất vào 1965, một semaphore s là một biến có các thuộc tính sau:
- Một giá trị nguyên dương e(s).
- Một hàng ợi f(s) lưu danh sách các tiến trình ang bị khóa (chờ) trên semaphore s.
- Chỉ có hai thao tác ược ịnh nghĩa trên semaphore.
Down(s): giảm giá trị của semaphore s i 1 ơn vị nếu semaphore có trị e(s)
> 0, và tiếp tục xử lý. Ngược lại, nếu e(s) 0, tiến trình phải chờ ến khi e(s) >0.
Up(s): tăng giá trị của semaphore s lên 1 ơn vị. Nếu có một hoặc nhiều
tiến trình ang chờ trên semaphore s, bị khóa bởi thao tác Down, thì hệ thống sẽ 69 lOMoARcPSD| 41967345
chọn một trong các tiến trình này ể kết thúc thao tác Down và cho tiếp tục xử lý.
Hình 5.6. Semaphore s
* Cài ặt: Gọi p là tiến trình thực hiện thao tác Down(s) hay Up(s). Down(s): e(s) = e(s) - 1; if e(s) < 0 { status(P)= blocked; enter(P,f(s)); } Up(s): e(s) = e(s) + 1; if s 0 {
exit(Q,f(s)); //Q l tiến trình ang chờ trŒn s
status (Q) = ready; enter(Q,ready-list); }
Lưu ý cài ặt này có thể ưa ến một giá trị âm cho semaphore, khi ó trị tuyệt
ối của semaphore cho biết số tiến trình ang chờ trên semaphore.
Điều quan trọng là các thao tác này cần thực hiện một cách không bị phân
chia, không bị ngắt nữa chừng, có nghĩa là không một tiến trình nào ược phép
truy xuất ến semaphore nếu tiến trình ang thao tác trên semaphore này chưa kết
thúc xử lý hay chuyển sang trạng thái blocked.
Sử dụng: có thể dùng semaphore ể giải quyết vấn ề truy xuất ộc quyền hay
tổ chức phối hợp giữa các tiến trình.
- Tổ chức truy xuất ộc quyền với Semaphores: khái niệm semaphore cho
phép bảo ảm nhiều tiến trình cùng truy xuất ến miền găng mà không có sự mâu
thuẫn truy xuất. n tiến trình cùng sử dụng một semaphore s, e(s) ược khởi gán là 70 lOMoARcPSD| 41967345
1. Để thực hiện ồng bộ hóa, tất cả các tiến trình cần phải áp dụng cùng cấu trúc chương trình sau ây: while (TRUE) { Down(s) critical-section (); Up(s) Noncriticalsection (); }
Hình 5.7. Cấu trúc một chương trình
trong giải pháp semaphore
- Tổ chức ồng bộ hóa với Semaphores: với semaphore có thể ồng bộ hóa
hoạt ộng của hai tiến trình trong tình huống một tiến trình phải ợi một tiến trình
khác hoàn tất thao tác nào ó mới có thể bắt ầu hay tiếp tục xử lý. Hai tiến trình
chia sẻ một semaphore s, khởi gán e(s) là 0. Cả hai tiến trình có cấu trúc như sau: P1: while (TRUE) { job1(); Up(s); // ánh thức P2 } P2: while (TRUE) { Down(s); // chờ P1 job2(); }
Hình 5.8. Cấu trúc chương trình trong giải pháp semaphore
* Thảo luận: Nhờ có thực hiện một các không thể phân chia, semaphore ã
giải quyết ược vấn ề tín hiệu " ánh thức" bị thất lạc. Tuy nhiên, nếu lập trình viên
vô tình ặt các primitive Down và Up sai vị trí, thứ tự trong chương trình, thì
tiến trình có thể bị khóa vĩnh viễn. Ví dụ : while (TRUE) {
Down(s) critical-section (); 71 lOMoARcPSD| 41967345 Noncritical-section (); }
Tiến trình trên ây quên gọi Up(s), và kết quả là khi ra khỏi miền găng nó
sẽ không cho tiến trình khác vào miền găng.
Vì thế việc sử dụng úng cách semaphore ể ồng bộ hóa phụ thuộc hoàn toàn
vào lập trình viên và òi hỏi lập trình viên phải hết sức thận trọng. 5.2.2. Monitors
* Tiếp cận: Để có thể dễ viết úng các chương trình ồng bộ hóa hơn,
Hoare(1974) và Brinch & Hansen (1975) ã ề nghị một cơ chế cao hơn ược cung
cấp bởi ngôn ngữ lập trình, là monitor. Monitor là một cấu trúc ặc biệt bao gồm
các thủ tục, các biến và cấu trúc dữ liệu có các thuộc tính sau:
- Các biến và cấu trúc dữ liệu bên trong monitor chỉ có thể ược thao tác
bởi các thủ tục ịnh nghĩa bên trong monitor ó. (encapsulation).
- Tại một thời iểm, chỉ có một tiến trình duy nhất ược hoạt ộng bên trong
một monitor (mutual exclusive).
- Trong một monitor, có thể ịnh nghĩa các biến iều kiện và hai thao tác kèm
theo là Wait Signal như sau: gọi c là biến iều kiện ược ịnh nghĩa trong monitor:
+ Wait(c): chuyển trạng thái tiến trình gọi sang blocked, và ặt tiến trình
này vào hàng ợi trên biến iều kiện c.
+ Signal(c): nếu có một tiến trình ang bị khóa trong hàng ợi của c, tái
kích hoạt tiến trình ó, và tiến trình gọi sẽ rời khỏi monitor. 72 lOMoARcPSD| 41967345
Hình 5.9. Monitor và các biến iều kiện *
Cài ặt: trình biên dịch chịu trách nhiệm thực hiện việc truy xuất
ộc quyền ến dữ liệu trong monitor. Để thực hiện iều này, một semaphore nhị
phân thường ược sử dụng. Mỗi monitor có một hàng ợi toàn cục lưu các tiến
trình ang chờ ược vào monitor, ngoài ra, mỗi biến iều kiện c cũng gắn với một
hàng ợi f(c) và hai thao tác trên ó ược ịnh nghĩa như sau: Wait(c) : status(P)= blocked; enter(P,f(c)); Signal(c) : if (f(c) != NULL){
exit(Q,f(c)); //Q l tiến tr nh chờ trŒn c
statusQ) = ready; enter(Q,ready-list); } *
Sử dụng: Với mỗi nhóm tài nguyên cần chia sẻ, có thể ịnh nghĩa
một monitor trong ó ặc tả tất cả các thao tác trên tài nguyên này với một số iều kiện nào ó.:
monitor condition iều kiện>; ; 73 lOMoARcPSD| 41967345
procedure Action1(); { } .... procedure Actionn(); { } end monitor;
Hình 5.10. Cấu trúc một monitor
Các tiến trình muốn sử dụng tài nguyên chung này chỉ có thể thao tác
thông qua các thủ tục bên trong monitor ược gắn kết với tài nguyên:
while (TRUE) { Noncritical-section ();
.Actioni; //critical-section(); Noncritical-section (); }
Hình 5.11. Cấu trúc tiến trình Pi trong giải pháp monitor
* Thảo luận: Với monitor, việc truy xuất ộc quyền ược bảo ảm bởi trình
biên dịch mà không do lập trình viên, do vậy nguy cơ thực hiện ồng bộ hóa sai
giảm rất nhiều. Tuy nhiên giải pháp monitor òi hỏi phải có một ngôn ngữ lập
trình ịnh nghĩa khái niệm monitor, và các ngôn ngữ như thế chưa có nhiều.
5.2.3. Trao ổi thông iệp
* Tiếp cận: giải pháp này dựa trên cơ sở trao ổi thông iệp với hai primitive
Send và Receive ể thực hiện sự ồng bộ hóa:
- Send(destination, message): gửi một thông iệp ến một tiến
trình hay gửi vào hộp thư.
- Receive(source, message): nhận một thông iệp từ một tiến trình
hay từ bất kỳ một tiến trình nào, tiến trình gọi sẽ chờ nếu không có thông iệp nào ể nhận.
* Sử dụng: Có nhiều cách thức ể thực hiện việc truy xuất ộc quyền bằng
cơ chế trao ổi thông iệp. Đây là một mô hình ơn giản: một tiến trình kiểm soát
việc sử dụng tài nguyên và nhiều tiến trình khác yêu cầu tài nguyên này. Tiến
trình có yêu cầu tài nguyên sẽ gửi một thông iệp ến tiến trình kiểm soát và sau ó
chuyển sang trạng thái blocked cho ến khi nhận ược một thông iệp chấp nhận
cho truy xuất từ tiến trình kiểm soát tài nguyên. Khi sử dụng xong tài nguyên, 74 lOMoARcPSD| 41967345
tiến trình gởi một thông iệp khác ến tiến trình kiểm soát ể báo kết thúc truy xuất.
Về phần tiến trình kiểm soát, khi nhận ược thông iệp yêu cầu tài nguyên, nó sẽ
chờ ến khi tài nguyên sẵn sàng ể cấp phát thì gởi một thông iệp ến tiến trình ang
bị khóa trên tài nguyên ó ể ánh thức tiến trình này. while (TRUE) {
Send(process controler, request message); Receive(process
controler, accept message); critical-section ();
Send(process controler, end message); Noncritical-section (); }
Hình 3.16. Cấu trúc tiến trình yêu cầu tài
nguyên trong giải pháp message
Thảo luận: Các primitive semaphore và monitor có thể giải quyết ược
vấn ề truy xuất ộc quyền trên các máy tính có một hoặc nhiều bộ xử lý chia sẻ
một vùng nhớ chung. Nhưng các primitive không hữu dụng trong các hệ thống
phân tán, khi mà mỗi bộ xử lý sở hữu một bộ nhớ riêng biệt và liên lạc thông qua
mạng. Trong những hệ thống phân tán như thế, cơ chế trao ổi thông iệp tỏ ra hữu
hiệu và ược dùng ể giải quyết bài toán ồng bộ hóa.
5.3. Vấn ề ồng bộ hoá
5.3.1. Vấn ề Người sản xuất – Người tiêu thụ (Producer - Consumer)
* Vấn ề: hai tiến trình cùng chia sẻ một bộ ệm có kích thước giới hạn. Một
trong hai tiến trình óng vai trò người sản xuất – tạo ra dữ liệu và ặt dữ liệu vào
bộ ệm - và tiến trình kia óng vai trò người tiêu thụ – lấy dữ liệu từ bộ ệm ra ể xử lý. 75 lOMoARcPSD| 41967345
Hình 5.12 Producer và Consumer
Để ồng bộ hóa hoạt ộng của hai tiến trình sản xuất tiêu thụ cần tuân thủ các quy ịnh sau:
- Tiến trình sản xuất (producer) không ược ghi dữ liệu vào bộ ệm ã ầy (synchronisation).
- Tiến trình tiêu thụ (consumer) không ược ọc dữ liệu từ bộ ệm ang trống (synchronisation).
- Hai tiến trình sản xuất và tiêu thụ không ược thao tác trên bộ ệm
cùng lúc (exclusion mutuelle). Giải pháp: 5.3.1.1. Semaphore
Sử dụng ba semaphore: full, ếm số chỗ ã có dữ liệu trong bộ ệm; empty,
ếm số chỗ còn trống trong bộ ệm; và mutex, kiểm tra việc Producer và Consumer
không truy xuất ồng thời ến bộ ệm. BufferSize = 3; // số chỗ trong bộ ệm
semaphore mutex = 1; // kiểm soÆt truy xuất ộc quyền
semaphore empty = BufferSize; // số chỗ trống
semaphore full = 0; // số chỗ ầy
Producer() { int item; while (TRUE)
{ produce_item(&item); // tạo
dữ liệu mới down(&empty);
// giảm số chỗ trống down(&mutex);
// bÆo hiệu v o miền găng
enter_item(item); // ặt dữ liệu v 76 lOMoAR cPSD| 41967345
o bộ ệm up(&mutex); //
ra khỏi miền găng up(&full); // tăng số chỗ ầy } } Consumer() { int item; while (TRUE) { down(&full); // giảm số chỗ ầy down(&mutex);
// bÆo hiệu v o miền găng remove_item(&item);
// lấy dữ liệu từ bộ ệm up(&mutex); // ra khỏi miền găng up(&empty); // tăng số chỗ trống consume_item(item); // xử l dữ liệu } } 5.3.1.2. Monitor
Định nghĩa một monitor ProducerConsumer với hai thủ tục enter
remove thao tác trên bộ ệm. Xử lý của các thủ tục này phụ thuộc vào các biến
iều kiện fullempty.
monitor ProducerConsumer condition full, empty;
int count; procedure enter(); { if (count == N)
wait(full); // nếu bộ ệm ầy, phải chờ
enter_item(item); // ặt dữ liệu v o bộ ệm count
++; // tăng số chỗ ầy if (count == 1)
// nếu bộ ệm kh ng trống signal(empty); // th k ch hoạt Consumer } procedure remove(); { if (count == 0) wait(empty)
// nếu bộ ệm trống, chờ remove_item(&item);
// lấy dữ liệu từ bộ ệm count --; // giảm số chỗ ầy 77 lOMoAR cPSD| 41967345 if (count == N-1)
// nếu bộ ệm không ầy signal(full); // th k ch hoạt Producer } count = 0; end monitor; Producer(); { while (TRUE) { produce_item(&item); ProducerConsumer.enter; } } Consumer(); { while (TRUE) { ProducerConsumer.remove; consume_item(item); } }
5.3.1.3. Trao ổi thông iệp
Thông iệp empty hàm ý có một chỗ trống trong bộ ệm. Tiến trình Consumer
bắt ầu công việc bằng cách gởi 4 thông iệp empty ấng Producer. Tiến trình
Producer tạo ra một dữ liệu mới và chờ ến khi nhận ược một thông iệp empty thì
gửi ngược lại cho Consumer một thông iệp chứa dữ liệu. Tiến trình Consumer
chờ nhận thông iệp chứa dữ liệu, và sau khi xử lý xong dữ liệu này, Consumer
sẽ lại gửi một thông iệp empty ến Producer, ... BufferSize = 4; Producteur() { int item;
message m; // thông iệp while (TRUE) { produce_item(&item); receive(consumer,&m);
// chờ thông iệp empty 78 lOMoARcPSD| 41967345
create_message(&m, item);
// tạo thông iệp dữ liệu send(consumer,&m); // gởi dữ liệu ến Consumer } } Consumer() { int item; message m; for(0 to N)
send(producer, &m); // gởi N thông iệp empty while (TRUE) {
receive(producer, &m); // chờ thông iệp dữ liệu
remove_item(&m,&item);// lấy dữ liệu từ thông iệp
send(producer, &m); // gởi thông iệp empty
consumer_item(item); // xử l dữ liệu } }
5.3.2. Mô hình Readers-Writers
* Vấn ề: Nhiều tiến trình ồng thời sử dụng một cơ sở dữ liệu. Các tiến trình
chỉ cần lấy nội dung của cơ sở dữ liệu ược gọi là các tiến trình Reader, nhưng
một số tiến trình khác lại có nhu cầu sửa ổi, cập nhật dữ liệu trong cơ sở dữ liệu
chung này, chúng ược gọi là các tiến trình Writer. Các quy ịnh ồng bộ hóa việc
truy xuất cơ sỡ dữ liệu cần tuân thủ là:
- Không cho phép một tiến trình Writer cập nhật dữ liệu trong cơ sở dữ
liệu khi các tiến trình Reader khác ang truy xuất nội dung cơ sở dữ liệu.. (synchronisation)
- Tại một thời iểm , chỉ cho phép một tiến trình Writer ược sửa ổi nội dung
cơ sở dữ liệu. (mutuelle exclusion).
* Giải pháp: 5.3.2.1. Semaphore 79 lOMoAR cPSD| 41967345
Sử dụng một biến chung rc ể ghi nhớ số lượng các tiến trình Reader muốn
truy xuất cơ sở dữ liệu. Hai semaphore cũng ược sử dụng: mutex, kiểm soát sự
truy cập ến rc; db, kiểm tra sự truy xuất ộc quyền ến cơ sở dữ liệu.
semaphore mutex = 1; // Kiểm tra truy xuất rc
semaphore db = 1; // Kiểm tra truy xuất cơ sở dữ liệu
int rc; // Số lượng tiến tr nh Reader Reader() { while (TRUE) {
down(&mutex); // gi nh quyền truy xuất rc rc
= rc + 1; // thŒm một tiến tr nh Reader if (rc
== 1) // nếu là Reader ầu tiŒn th down(&db);
// cấm Writer truy xuất dữ liệu up(&mutex); //
chấm dứt truy xuất rc read_database(); // ọc dữ
liệu down(&mutex); // gi nh quyền truy xuất rc
rc = rc - 1; // bớt một tiến tr nh Reader if
(rc == 0) // nếu l Reader cuối cøng th up(&db);
// cho phØp Writer truy xuất db up(&mutex);
// chấm dứt truy xuất rc use_data_read(); } } Writer() { while (TRUE) { create_data();
down(&db); // gi nh quyền truy xuất db
write_database(); // cập nhật dữ liệu
up(&db); // chấm dứt truy xuất db } } 5.3.2.2. Monitor
Sử dụng một biến chung rc ể ghi nhớ số lượng các tiến trình Reader muốn
truy xuất cơ sở dữ liệu. Một tiến trình Writer phải chuyển sang trạng thái chờ
nếu rc > 0. KHi ra khỏi miền găng, tiến trình Reader cuối cùng sẽ ánh thức tiến trình Writer ang bị khóa. 80 lOMoAR cPSD| 41967345 monitor ReaderWriter
condition OKWrite, OKRead; int rc = 0; Boolean busy = false; procedure BeginRead() { if (busy) // nếu db ang bận, chờ wait(OKRead); rc++; // thŒm một Reader signal(OKRead); }
procedure FinishRead() { rc--; // bớt một Reader if (rc == 0)
// nếu l Reader cuối cøng
signal(OKWrite); // th cho phØp Writer // truy xuất db }
procedure BeginWrite() { if (busy || rc != 0)
// nếu db ang bận, hay một wait(OKWrite); // Reader ang ọc db,chờ busy = true; }
procedure FinishWrite() { busy = false; If (OKRead.Queue) signal(OKRead); else signal(OKWrite); } Reader() { while (TRUE) { ReaderWriter.BeginRead(); Read_database(); ReaderWriter.FinishRead(); } } 81 lOMoARcPSD| 41967345 Writer() { while (TRUE) { create_data(&info); ReaderWriter.BeginWrite(); Write_database(); ReaderWriter.FinishWrite(); } }
5.3.2.3. Trao ổi thông iệp
Cần có một tiến trình server iều khiển việc truy xuất cơ sở dữ liệu.
Các tiến trình Writer và Reader gửi các thông iệp yêu cầu truy xuất ến
server và nhận từ server các thông iệp hồi áp tương ứng. Reader() { while (TRUE) { send (server, RequestRead); receive (server, value); print(value); } } Writer() { while (TRUE) { create_data(&value);
send (server, RequestWrite,value); receive (server,OKWrite); } }
5.4. Tắc nghẽn (Deadlock)
5.4.1. Định nghĩa
Một tập hợp các tiến trình ược ịnh nghĩa ở trong tình trạng tắc nghẽn khi
mỗi tiến trình trong tập hợp ều chờ ợi một sự kiện mà chỉ có một tiến trình khác
trong tập hợp mới có thể phát sinh ược.
Nói cách khác, mỗi tiến trình trong tập hợp ều chờ ược cấp phát một tài
nguyên hiện ang bị một tiến trình khác cũng ở trạng thái blocked chiếm giữ. Như 82 lOMoARcPSD| 41967345
vậy không có tiến trình nào có thể tiếp tục xử lý, cũng như giải phóng tài nguyên
cho tiến trình khác sử dụng, tất cả các tiến trình trong tập hợp ều bị khóa vĩnh viễn.
Vấn ề Bữa ăn tối của các triết gia: 5 nhà triết học cùng ngồi ăn tối với món
spaghetti nổi tiếng. Mỗi nhà triết học cần dùng 2 cái dĩa ể có thể ăn spaghetti.
Nhưng trên bàn chỉ có tổng cộng 5 cái dĩa ể xen kẽ với 5 cái ĩa. Mỗi nhà triết học
sẽ suy ngẫm các triết lý của mình ến khi cảm thấy ói thì dự ịnh lần lượt cầm 1
cái dĩa bên trái và 1 cái dĩa bên phải ể ăn. Nếu cả 5 nhà triết học ều cầm cái dĩa
bên trái cùng lúc, thì sẽ không có ai có ược cái dĩa bên phải ể có thể bắt ầu thưởng
thức spaghetti. Đây chính là tình trạng tắc nghẽn.
Hình 5.13. Bữa ăn tối của các triết gia
5.4.2. Điều kiện xuất hiện tắc nghẽn
Coffman, Elphick và Shoshani ã ưa ra 4 iều kiện cần có thể làm xuất hiện tắc nghẽn:
* Có sử dụng tài nguyên không thể chia sẻ (Mutual exclusion): Mỗi thời
iểm, một tài nguyên không thể chia sẻ ược hệ thống cấp phát chỉ cho một tiến
trình , khi tiến trình sử dụng xong tài nguyên này, hệ thống mới thu hồi và cấp
phát tài nguyên cho tiến trình khác. 83 lOMoARcPSD| 41967345
* Sự chiếm giữ và yêu cầu thêm tài nguyên (Wait for): Các tiến trình tiếp
tục chiếm giữ các tài nguyên ã cấp phát cho nó trong khi chờ ược cấp phát thêm
một số tài nguyên mới.
* Không thu hồi tài nguyên từ tiến trình ang giữ chúng (No preemption):
Tài nguyên không thể ược thu hồi từ tiến trình ang chiếm giữ chúng trước khi
tiến trình này sử dụng chúng xong.
* Tồn tại một chu kỳ trong ồ thị cấp phát tài nguyên ( Circular wait): có ít
nhất hai tiến trình chờ ợi lẫn nhau : tiến trình này chờ ược cấp phát tài nguyên
ang bị tiến trình kia chiếm giữ và ngược lại.
Khi có ủ 4 iều kiện này, tắc nghẽn sẽ xảy ra. Nếu thiếu một trong 4 iều kiện
trên thì không có tắc nghẽn.
5.4.3. Đồ thị cấp phát tài nguyên
Có thể sử dụng một ồ thị ể mô hình hóa việc cấp phát tài nguyên. Đồ thị
này có 2 loại nút: các tiến trình ược biễu diễn bằng hình tròn, và mỗi tài nguyên
ược hiển thị bằng hình vuông
Hình 5.14 Đồ thị cấp phát tài nguyên
5.4.4. Các phương pháp xử lý tắc nghẽn
Chủ yếu có ba hương tiếp cận ể xử lý tắc nghẽn: 84 lOMoARcPSD| 41967345
- Sử dụng một nghi thức (protocol) ể bảo ảm rằng hệ thống không bao giờ xảy ra tắc nghẽn.
- Cho phép xảy ra tắc nghẽn và tìm cách sữa chữa tắc nghẽn.
- Hoàn toàn bỏ qua việc xử lý tắc nghẽn, xem như hệ thống không bao giờ xảy ra tắc nghẽn.
5.4.5. Ngăn chặn tắc nghẽn
Để tắc nghẽn không xảy ra, cần bảo ảm tối thiểu một trong 4 iều kiện cần không xảy ra:
* Tài nguyên không thể chia sẻ: Nhìn chung gần như không thể tránh ược
iều kiện này vì bản chất tài nguyên gần như cố ịnh. Tuy nhiên ối với một số tài
nguyên về kết xuất, người ta có thể dùng các cơ chế spooling ể biến ổi thành tài nguyên có thể chia sẻ.
* Sự chiếm giữ và yêu cầu thêm tài nguyên: Phải bảo ảm rằng mỗi khi tiến
trình yêu cầu thêm một tài nguyên thì nó không chiếm giữ các tài nguyên khác.
Có thể áp ặt một trong hai cơ chế truy xuất sau:
- Tiến trình phải yêu cầu tất cả các tài nguyên cần thiết trước khi bắt ầu xử lý.
=> Phương pháp này có khó khăn là tiến trình khó có thể ước lượng chính
xác tài nguyên cần sử dụng vì có thể nhu cầu phụ thuộc vào quá trình xử lý.
Ngoài ra nếu tiến trình chiếm giữ sẵn các tài nguyên chưa cần sử dụng ngay thì
việc sử dụng tài nguyên sẽ kém hiệu quả.
- Khi tiến trình yêu cầu một tài nguyên mới và bị từ chối, nó phải giải
phóng các tài nguyên ang chiếm giữ, sau ó lại ược cấp phát trở lại cùng lần với tài nguyên mới.
=> Phương pháp này làm phát sinh các khó khăn trong việc bảo vệ tính
toàn vẹn dữ liệu của hệ thống.
* Không thu hồi tài nguyên: Cho phép hệ thống ược thu hồi tài nguyên từ
các tiến trình bị khoá và cấp phát trở lại cho tiến trình khi nó thoát khỏi tình trạng 85 lOMoARcPSD| 41967345
bị khóa. Tuy nhiên với một số loại tài nguyên, việc thu hồi sẽ rất khó khăn vì vi
phạm sự toàn vẹn dữ liệu .
* Tồn tại một chu kỳ: tránh tạo chu kỳ trong ồ thị bằng cách cấp phát tài
nguyên theo một sự phân cấp như sau:
gọi R = {R1, R2,...,Rm} là tập các loại tài nguyên.
Các loại tài nguyên ược phân cấp từ 1-N.
Ví dụ : F( ĩa) = 2, F(máy in) = 12
Các tiến trình khi yêu cầu tài nguyên phải tuân thủ quy ịnh: khi tiến trình
ang chiếm giữ tài nguyên Ri thì chỉ có thể yêu cầu các tài nguyên Rj nếu F(Rj) > F(Ri).
5.4.6. Tránh tắc nghẽn
Ngăn cản tắc nghẽn là một mối bận tâm lớn khi sử dụng tài nguyên. Tránh
tắc nghẽn là loại bỏ tất cả các cơ hội có thể dẫn ến tắc nghẽn trong tương lai. Cần
phải sử dụng những cơ chế phức tạp ể thực hiện ý ịnh này.
* Một số khái niệm cơ sở:
- Trạng thái an toàn: Trạng thái A là an toàn nếu hệ thống có thể thỏa mãn
các nhu cầu tài nguyên (cho ến tối a) của mỗi tiến trình theo một thứ tự nào ó mà
vẫn ngăn chặn ược tắc nghẽn.
- Một chuỗi cấp phát an toàn: Một thứ tự của các tiến trình
là an toàn ối với tình trạng cấp phát hiện hành nếu với mỗi tiến trình Pi nhu cầu
tài nguyên của Pi có thể ược thỏa mãn với các tài nguyên còn tự do của hệ thống,
cộng với các tài nguyên ang bị chiếm giữ bởi các tiến trình Pj khác, với jMột trạng thái an toàn không thể là trạng thái tắc nghẽn. Ngược lại một
trạng thái không an toàn có thể dẫn ến tình trạng tắc nghẽn.
* Chiến lược cấp phát:
Chỉ thỏa mãn yêu cầu tài nguyên của tiến trình khi trạng thái kết quả là an toàn. 86 lOMoAR cPSD| 41967345
* Giải thuật xác ịnh trạng thái an toàn
Cần sử dụng cÆc cấu trœc dữ liệu sau:
int Available[NumResources];
/* Available[r]= số lượng cÆc thể hiện c n tự do của t i
nguyŒn r*/ int Max[NumProcs, NumResources];
/*Max[p,r]= nhu cầu tối a của tiến tr nh p về t i nguyŒn r*/
int Allocation[NumProcs, NumResources];
/* Allocation[p,r] = số lượng t i nguyŒn r thực sự cấp phÆt
cho p*/ int Need[NumProcs, NumResources];
/* Need[p,r] = Max[p,r] - Allocation[p,r]*/
1.Giả sử c cÆc mảng int Work[NumProcs,
NumResources] = Available; int Finish[NumProcs] = false; 2.T m i sao cho Finish[i] == false Need[i] <= Work[i]
Nếu không có i như thế, ến bước 4.
3.Work = Work + Allocation[i]; Finish[i] = true; Đến bước 2
4.Nếu Finish[i] == true với mọi i, th hệ thống ở trạng thÆi an to n.
* V dụ: Giả sử t nh trạng hiện h nh của hệ thống ược m tả như sau: Max Allocation Available R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 3 2 2 1 0 0 P2 6 1 3 2 1 1 P3 3 1 4 2 1 1 P4 4 2 2 0 0 2 87 lOMoAR cPSD| 41967345
Nếu tiến trình P2 yêu cầu 4 cho R1, 1 cho R3. Hãy cho biết yêu cầu này có
thể áp ứng mà bảo ảm không xảy ra tình trạng deadlock hay không? Nhận thấy
Available[1] =4, Available[3] =2 ủ ể thõa mãn yêu cầu của P2, ta có: Need Allocation Availabl e R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 2 2 2 1 0 0 P2 0 0 1 6 1 2 P3 1 0 3 2 1 1 P4 4 2 0 0 0 2 Need Allocation Available R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 2 2 2 1 0 0 P2 0 0 0 0 0 0 P3 1 0 3 2 1 1 P4 4 2 0 0 0 2 Need Allocation Available R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 0 0 0 0 0 0 P2 0 0 0 0 0 0 88 lOMoAR cPSD| 41967345 P3 1 0 3 2 1 1 P4 4 2 0 0 0 2 Need Allocation Available R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 0 0 0 0 0 0 P2 0 0 0 0 0 0 P3 0 0 0 0 0 0 P4 4 2 0 0 0 2 Need Allocation Available R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 0 0 0 0 0 0 P2 0 0 0 0 0 0 P3 0 0 0 0 0 0 P4 0 0 0 0 0 0
Trạng thái kết quả là an toàn, có thể cấp phát.
* Giải thuật yêu cầu tài nguyên
Giả sử tiến trình Pi yêu cầu k thể hiện của tài nguyên r. 1.
Nếu k <= Need[i], ến bước 2
Ngược lại, xảy ra tình huống lỗi 2.
Nếu k <= Available[i], ến bước 3 Ngược lại, Pi phải chờ 89 lOMoARcPSD| 41967345 3.
Giả sử hệ thống ã cấp phát cho Pi các tài nguyên mà nó yêu cầu
và cập nhật tình trạng hệ thống như sau:
Available[i] = Available[i] - k;
Allocation[i]= Allocation[i]+ k; Need[i] = Need[i] - k;
Nếu trạng thái kết quả là an toàn, lúc này các tài nguyên trên sẽ ược cấp phát thật sự cho Pi.
Ngược lại, Pi phải chờ.
5.4.7. Phát hiện tắc nghẽn
Cần sử dụng cÆc cấu trœc dữ liệu sau:
int Available[NumResources];
// Available[r]= số lượng cÆc thể hiện c n tự do của t i
nguyŒn r int Allocation[NumProcs, NumResources];
// Allocation[p,r] = số lượng t i nguyŒn r thực sự cấp phÆt
cho p int Request[NumProcs, NumResources];
// Request[p,r] = số lượng t i nguyŒn r tiến tr nh p yŒu cầu thŒm
* Giải thuật phÆt hiện tắc nghẽn
1. int Work[NumResources] = Available; int
Finish[NumProcs]; for (i = 0; i < NumProcs; i++)
Finish[i] = (Allocation[i] == 0); 2. T m i sao cho Finish[i] == false Request[i] <= Work
Nếu không có i như thế, ến bước 4.
3. Work = Work + Allocation[i]; Finish[i] = true; Đến bước 2 90 lOMoARcPSD| 41967345
4. Nếu Finish[i] == true với mọi i, th hệ thống kh ng c tắc nghẽn
Nếu Finish[i] == false với một số giÆ trị i, th cÆc
tiến tr nh m Finish[i] == false sẽ ở trong t nh trạng tắc nghẽn.
5.4.8. Hiệu chỉnh tắc nghẽn
Khi ã phát hiện ược tắc nghẽn, có hai lựa chọn chính ể hiệu chỉnh tắc nghẽn:
* Đình chỉ hoạt ộng của các tiến trình liên quan:
Cách tiếp cận này dựa trên việc thu hồi lại các tài nguyên của những tiến
trình bị kết thúc. Có thể sử dụng một trong hai phương pháp sau: -
Đình chỉ tất cả các tiến trình trong tình trạng tắc nghẽn. -
Đình chỉ từng tiến trình liên quan cho ến khi không còn chu trình
gây tắc nghẽn: ể chọn ược tiến trình thích hợp bị ình chỉ, phải dựa vào các
yếu tố như ộ ưu tiên, thời gian ã xử lý, số lượng tài nguyên ang chiếm giữ, số
lượng tài nguyên yêu cầu...
* Thu hồi tài nguyên:
Có thể hiệu chỉnh tắc nghẽn bằng cách thu hồi một số tài nguyên từ các
tiến trình và cấp phát các tài nguyên này cho những tiến trình khác cho ến khi
loại bỏ ược chu trình tắc nghẽn. Cần giải quyết 3 vấn ề sau:
- Chọn lựa một nạn nhân: tiến trình nào sẽ bị thu hồi tài nguyên? và thu
hồi những tài nguyên nào?
- Trở lại trạng thái trước tắc nghẽn: khi thu hồi tài nguyên của một tiến
trình, cần phải phục hồi trạng thái của tiến trình trở lại trạng thái gần nhất trước
ó mà không xảy ra tắc nghẽn.
- Tình trạng “ ói tài nguyên” : làm sao bảo ảm rằng không có một tiến trình
luôn luôn bị thu hồi tài nguyên? 91 lOMoARcPSD| 41967345
5.5. Tóm tắt
- Các giải pháp ồng bộ hoá do lập trình viên xây dựng không ược ưa
chuộng vì phải tiêu thụ CPU trong thời gian chờ vào miền găng (“busy waiting”),
và khó mở rộng. Thay vào ó, lập trình viên có thể sử dụng các cơ chế ồng bộ do
hệ iều hành hay trình biên dịch trợ giúp như semaphore, monitor, trao ổi thông iệp.
- Tắc nghẽn là tình trạng xảy ra trong một tập các tiến trình nếu có hai hay
nhiều hơn các tiến trình chờ ợi vô hạn một sự kiện chỉ có thể ược phát sinh bởi
một tiến trình cũng ang chờ khác trong tập các tiến trình này.
- Có 3 hướng tiếp cận chính trong xử lý tắc nghẽn:
+ Phòng tránh tắc nghẽn: tuân thủ một vài nghi thức bảo ảm hệ thống
không bao giờ lâm vào trạng thái tắc nghẽn.
+ Phát hiện tắc nghẽn: khi có tắc nghẽn xảy ra, phát hiện các tiến trình liên
quan và tìm cách phục hồi.
+ Bỏ qua tắc nghẽn: xem như hệ thống không bao giờ lâm vào trạng thái tắc nghẽn.
* Củng cố bài học 1.
Phân biệt nhóm giải pháp busy waiting và Sleep&Wakeup. 2.
Phân biệt cách sử dụng semaphore, monitor và message ể ồng bộ hoá. 3.
Mô hình giải quyết nhu cầu ộc quyền truy xuất và mô hình giaỉ
quyết nhu cầu phối hợp hoạt ộng. * Bài tập
Bài 1. Xét giải pháp phần mềm do Dekker ề nghị ể tổ chức truy xất ộc
quyền cho hai tiến trình . Hai tiến trình P0, P1 chia sẻ các biến sau:
var flag : array [0..1] of boolean; (khởi ộng l false) turn : 0..1;
Cấu trúc một tiến trình Pi (i =0 hay 1, và j là tiến trình còn lại) như sau: 92 lOMoARcPSD| 41967345 repeat flag[i] := true; while flag[j] do if turn = j then begin flag[i]:= false; while turn = j do ; flag[i]:= true; end; critical_section(); turn:= j; flag[i]:= false; non_critical_section(); until false;
Giải pháp này có phải là một giải pháp úng thỏa mãn 4 yêu cầu không?
Bài 2. Xét giải pháp phần mềm do Eisenberg và McGuire ề nghị ể tổ
chức truy xất ộc quyền cho N tiến trình. Các tiến trình chia sẻ các biến sau:
var flag : array [0..N-1] of (idle, want-in, in-cs); turn : 0..N-1;
Tất cả các phần tử của mảng flag ược khởi ộng là idle, turn ược khởi gán
một trong những giá trị từ 0..N-1
Cấu trúc một tiến trình Pi như sau:
repeat repeat flag[i] := want-in; j := turn; while j<>i
do if flag[j]<> idle then j:= turn else j:= j+1 mod n;
flag[i]:= in-cs; j:=0; while ( jflag[j] <> in-cs) do j:=j+1; until ( j>=N) and ( turn =i
or flag[turn] = idle); turn := i; critical_section();
j:= turn + 1 mod N; while (flag[j]= idle) do j := j+1
mod N; turn := j; flag[i]:= idle;
non_critical_section(); until false;
Giải pháp này có phải là một giải pháp úng thỏa mãn 4 yêu cầu không?
Bài 3. Xét giải pháp ồng bộ hoá sau: while (TRUE) { int j = 1-i;
flag[i]= TRUE; turn = i; while
(turn == j && flag[j]==TRUE);
critical-section (); flag[i] = FALSE; Noncritical-section (); } 93 lOMoAR cPSD| 41967345
Đây có phải là một giải pháp bảo ảm ược ộc quyền truy xuất không?
Bài 4. Giả sử một máy tính không có chỉ thị TSL, nhưng có chỉ
thị Swap có khả năng hoán ổi nội dung của hai từ nhớ chỉ bằng một thao tác không thể phân chia:
procedure Swap() var a,b: boolean);
var temp : boolean; begin temp := a; a:= b; b:= temp; end;
Sử dụng chỉ thị này có thể tổ chức truy xuất ộc quyền không? Nếu có xây
dựng cấu trúc chương trình tương ứng.
Bài 5. Chứng tỏ rằng nếu các primitive Down và Up trên
semaphore không thực hiện một cách không thể phân chia, thì sự truy xuất
ộc quyền sẽ bị vi phạm.
Bài 6. Sử dụng semaphore ể cài ặt cơ chế monitor.
Bài 7. Xét hai tiến trình sau : process A { while (TRUE) na = na +1; } process B { while (TRUE) nb = nb +1; }
a) Đồng bộ hoá xử lý của hai tiến trình trên, sử dụng hai semaphore tổng
quát, sao cho tại bất kỳ thời iểm nào cũng có nb < na <= nb +10
b) Nếu giảm iều kiện chỉ là na <= nb +10, giải pháp của bạn sẽ ược sửa chữa như thế nào?
c) Giải pháp của bạn có còn úng nếu có nhiều tiến trình loại A và B cùng thực hiện? 94 lOMoAR cPSD| 41967345
Bài 8. Biến X ược chia sẻ bởi hai tiến trình cùng thực hiện oạn code sau: do X = X +1; if ( X == 20) X = 0; while ( TRUE );
Bắt ầu với giá trị X = 0, chứng tỏ rằng giá trị X có thể vượt quá 20. Cần
sửa chữa oạn chương trình trên như thế nào ể bảo ảm X không vượt quá 20 ?
Bài 9. Xét hai tiến trình xử lý oạn chương trình sau:
process P1 { A1 ; A2 } process P2 { B1 ; B2 }
Đồng bộ hoá hoạt ộng của hai tiến trình này sao cho cả A1 và B1 ều hoàn
tất trước khi A2 hay B2 bắt ầu.
Bài 10. Tổng quát hoá câu hỏi 8) cho các tiến trình xử lý oạn chương trình sau:
process P1 { for ( i = 1; i <= 100; i ++) Ai } process
P2 { for ( j = 1; j <= 100; j ++) Bj }
Đồng bộ hoá hoạt ộng của hai tiến trình này sao cho cả với k bất kỳ ( 2
k 100), Ak chỉ có thể bắt ầu khi B(k-1) ã kết thúc, và Bk chỉ có thể bắt ầu khi A(k-1) ã kết thúc.
Bài 11. Sử dụng semaphore ể viết lại chương trình sau
theo mô hình xử lý ồng hành: w := x1 * x2 v := x3 * x4 y := v * x5 z := v * x6 y := w * y 95 lOMoARcPSD| 41967345 z := w * z ans := y + z
Bài 12. Xây dựng một giải pháp (sử dụng semaphore ) ể
giải quyết vấn ề Readers_Writers trong ó: a)
Readers ược ưu tiên (khi không có ai truy xuất database, Reader
ược ưu tiên truy cập database ngay, Writer phải ợi tất cả các Reader truy xuất
xong mới ược vào database). b)
Writers ược ưu tiên (khi không có ai truy xuất database, Writer
ược ưu tiên truy cập database ngay, Reader phải ợi tất cả các Write truy xuất
xong mới ược vào database). c)
Công bằng cho Reader, Writer (khi không có ai truy xuất databas,
Writer hoặc Reader có cơ hội ngang nhau ể truy cập database)
Bài 13. Dining Philosophers: Giả sử hành vi của một triết gia thứ i trong
bữa ăn tối ược mô tả như sau : #define N 5
void philosopher( int i) { while (TRUE)
{ think(); // Suy nghĩ take_fork(i); //
lấy nĩa bên trái take_fork((i+1)%N); //
lấy nĩa bên phải eat(); // yum-yum, spaghetti
put_fork(i); // ặt nĩa bên trái lên bàn lại put_fork((i+1)%N);
// ặt nĩa bên phải lŒn b n lại } } a)
Lưu ý là trên bàn chỉ có 5 cái dĩa, và nếu có 2 triết gia cùng muốn
lấy một cái dĩa, thì chỉ một người ược quyền lấy cái dĩa ó. Sử dụng semaphore ể
tổ chức ộc quyền truy xuất ến các cái dĩa cho oạn chương trình trên (Gợi ý: dùng
mỗi semaphore phản ánh tình trạng sử dụng của mỗi cái dĩa) b)
Liệu giải pháp của câu a có là một giải pháp tốt cho bài toán
Dining philosopher? Nếu không, cho biết các tình huống lỗi sẽ xảy ra, và ề nghị phương pháp cải tiến.
Bài 14. Xét một giải pháp úng cho bài toán Dining philosophers: 96 lOMoAR cPSD| 41967345 #define N 5 #define LEFT (i-1)%N #define RIGHT (i+1)%N #define THINKING 0 #define HUNGRY 1 #define EATING 2 int state[N];
semaphore mutex = 1; semaphore s[N];
void philosopher( int i) // i : xÆc ịnh triết gia n o (0..N- 1) { while (TRUE) { thinhk(); // Suy nghĩ
take_forks(i); // yŒu cầu ến khi có ủ 2 nĩa eat(); // yum-yum, spaghetti
put_forks(i); // ặt cả 2 nĩa lên bàn lại } }
void take_forks ( int i) // i : xác ịnh triết gia n o (0..N- 1) { while (TRUE)
{ down(mutex); // v o miền găng
state[i] = HUNGRY; // ghi nhận triết gia i ã ói
test(i); // cố gắng lấy 2 nĩa up(mutex); // ra
khỏi miền găng down(s[i]); // chờ nếu không có ủ 2 nĩa } } }
void put_forks ( int i) // i : xác ịnh triết gia n o (0..N1) { while (TRUE)
{ down(mutex); // v o miền găng
state[i] = THINKING; // ghi nhận triết gia i ăn xong
test(LEFT); // kiểm tra người bên trái ã có thể ăn?
test(RIGHT); // kiểm tra người bŒn phải ã có thể ăn?
up(mutex); // ra khỏi miền găng } }
void test ( int i) // i : xác ịnh triết gia n o (0..N-1) {
if(state[i]==HUNGRY && state[LEFT]!=EATING && state[RIGHT]!= EATING 97 lOMoAR cPSD| 41967345 { state[i] = EATING; up(s[i]); } } a)
Tại sao phải ặt state[i] = HUNGRY trong take_forks? b)
Giả sử trong put_forks, lệnh gán state[i] = THINKING ược thực
hiện sau hai lệnh test(LEFT), test(RIGHT). Điều này ảnh hưởng thế nào ến
giải pháp cho 3 triết gia? Cho 100 triết gia?
Bài 15. Xây dựng giải pháp monitor cho bài toán Dining Philosophers.
Bài 16. Baber problem: Một cửa hiệu cắt tóc có một thợ,
một ghế cắt tóc và N ghế cho khách ợi. Nếu không có khách hàng, anh
thợ cắt tóc sẽ ngồi vào ghế cắt tóc và ngủ thiếp i. Khi một khách hàng
vào tiệm, anh ta phải ánh thức người thợ. Nếu một khách hàng vào
tiệm khi người thợ ang bận cắt tóc cho kh1ch hàng khác, người mới
vào sẽ phải ngồi chờ nếu có ghế ợi trống, hoặc rời khỏi tiệm nếu ã có
N người ợi. Xây dựng một giải pháp với semaphore ể thực hiện ồng
bộ hoá hoạt ộng của thợ và khách hàng trong cửa hiệu cắt tóc này.
/* Semaphore to protect critical sections */ Semaphore mutex = 1;
/* Semaphore for the number of waiting customers. *
This lets the barber go to sleep when there are no customers */ Semaphore customers = 0;
/* Number of waiting customers in the barber shop */
/* Just used to turn away customers when there are too many
already. */ int waiting_customers = 0
/* Semaphore on which to wait for a haircut */ Semaphore haircut = 0;
/* Customer calls this function to try to get their hair cut *
it returns true if the hair gets cut. */ int customer() {
/* protect access to shared variables with semaphore mutex */ wait( mutex ); 98 lOMoAR cPSD| 41967345
/* Make sure there is an empty chair */ if( waiting_customers >=
5 ){ signal( mutex ); return 0; }
/* there is now a new waiting customer */
waiting_customers += 1; signal( mutex );
/* Wake the barber if the shop was empty */ signal( customers );
/* Wait for a haircut from the barber */ wait( haircut ); return 1; }
/* Barber loops within this function */ void barber() { while( 1 ){
/* Go to sleep if there are no customers */ wait( customers );
// protect access to shared variables with semaphore mutex wait( mutex );
/* take customer out of a chair */ waiting_customers -= 1; signal( mutex );
/* cut hair of the current customer */ cut_hair(); /* Let the customer go. */ signal( haircut ); } }
Bài 17. Giải quyết bài toán Baber trong trường hợp tiệm có nhiều thợ.
Bài 18. Xét trạng thái hệ thống: Max Allocation Availabl e R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 3 2 2 1 0 0 P2 6 1 3 2 1 1 P3 3 1 4 2 1 1 99 lOMoARcPSD| 41967345 P4 4 2 2 0 0 2
Nếu tiến trình P2 yêu cầu 4 cho R1, 1 cho R3. hãy cho biết yêu cầu này có
thể áp ứng mà bảo ảm không xảy ra tình trạng deadlock hay không?
Bài 19. Xét trạng thái hệ thống: Max Allocation Available A B C D A B C D A B C D P1 0 0 1 2 0 0 1 2 P2 1 7 5 0 1 0 0 0 P3 2 3 5 6 1 3 5 4 P4 0 6 5 2 0 6 3 2 P5 0 6 5 6 0 0 1 4
a) Cho biết nội dung của bảng Need?
b) Hệ thông có ở trạng thái an toàn không?
c) Nếu tiến trình P2 có yêu cầu tài nguyên ( 0,4,2,0), yêu cầu này có
ược áp ứng tức thời không?
Chương 6 QUẢN LÝ BỘ NHỚ
Chương này sẽ giới thiệu những vấn ề cần quan tâm khi thiết kế module
quản lý bộ nhớ của Hệ iều hành. Một số mô hình tổ chức bộ nhớ cũng ược phân 100 lOMoARcPSD| 41967345
tích ưu, khuyết iểm ể có thể hiểu ược cách thức cấp phát và thu hồi bộ nhớ diễn ra như thế nào.
Bộ nhớ chính là thiết bị lưu trữ duy nhất thông qua ó CPU có thể trao ổi
thông tin với môi trường ngoài, do vậy nhu cầu tổ chức, quản lý bộ nhớ là một
trong những nhiệm vụ trọng tâm hàng ầu của hệ iều hành. Bộ nhớ chính ược tổ
chức như một mảng một chiều các từ nhớ (word), mỗi từ nhớ có một ịa chỉ. Việc
trao ổi thông tin với môi trường ngoài ược thực hiện thông qua các thao tác ọc
hoặc ghi dữ liệu vào một ịa chỉ cụ thể nào ó trong bộ nhớ.
Hầu hết các hệ iều hành hiện ại ều cho phép chế ộ a nhiệm nhằm nâng cao
hiệu suất sử dụng CPU. Tuy nhiên kỹ thuật này lại làm nảy sinh nhu cầu chia sẻ
bộ nhớ giữa các tiến trình khác nhau. Vấn ề nằm ở chỗ: “bộ nhớ thì hữu hạn và
các yêu cầu bộ nhớ thì vô hạn
”.
Hệ iều hành chịu trách nhiệm cấp phát vùng nhớ cho các tiến trình có yêu
cầu. Để thực hiện tốt nhiệm vụ này, hệ iều hành cần phải xem xét nhiều khía cạnh:
- Sự tương ứng giữa ịa chỉ logic và ịa chỉ vật lý (physic): làm cách nào ể
chuyển ổi một ịa chỉ logic (symbolic) trong chương trình thành một ịa chỉ thực
(vật lý) trong bộ nhớ chính?
- Quản lý bộ nhớ vật lý: làm cách nào ể mở rộng bộ nhớ có sẵn nhằm lưu
trữ ược nhiều tiến trình ồng thời?
- Chia sẻ thông tin: làm thế nào ể cho phép hai tiến trình có thể chia sẻ thông tin trong bộ nhớ?
- Bảo vệ: làm thế nào ể ngăn chặn các tiến trình xâm phạm ến vùng nhớ
ược cấp phát cho tiến trình khác?
Các giải pháp quản lý bộ nhớ phụ thuộc rất nhiều vào ặc tính phần cứng và
trải qua nhiều giai oạn cải tiến ể trở thành những giảp pháp khá thỏa áng như hiện nay. 101 lOMoARcPSD| 41967345
6.1. Bối cảnh
Thông thường, một chương trình ược lưu trữ trên ĩa như một tập tin nhị
phân có thể xử lý. Để thực hiện chương trình, cần nạp chương trình vào bộ nhớ
chính, tạo lập tiến trình tương ứng ể xử lý.
Hàng ợi nhập hệ thống là tập hợp các chương trình trên ĩa ang chờ ược
nạp vào bộ nhớ ể tiến hành xử lý.
Các ịa chỉ trong chương trình nguồn là ịa chỉ tượng trưng, vì thế, một
chương trình phải trải qua nhiều giai oạn xử lý ể chuyển ổi các ịa chỉ này thành
các ịa chỉ tuyệt ối trong bộ nhớ chính.
Có thể thực hiện kết buộc các chỉ thị và dữ liệu với các ịa chỉ bộ nhớ vào
một trong những thời iểm sau:
- Thời iểm biên dịch: nếu tại thời iểm biên dịch, có thể biết vị trí mà tiến
trình sẽ thường trú trong bộ nhớ, trình biên dịch có thể phát sinh ngay mã với
các ịa chỉ tuyệt ối. Tuy nhiên, nếu về sau có sự thay ổi vị trí thường trú lúc ầu
của chương trình, cần phải biên dịch lại chương trình.
- Thời iểm nạp: nếu tại thời iểm biên dịch, chưa thể biết vị trí mà tiến trình
sẽ thường trú trong bộ nhớ, trình biên dịch cần phát sinh mã tương ối
(translatable). Sự liên kết ịa chỉ ược trì hoãn ến thời iểm chương trình ược nạp
vào bộ nhớ, lúc này các ịa chỉ tương ối sẽ ược chuyển thành ịa chỉ tuyệt ối do ã
biết vị trí bắt ầu lưu trữ tiến trình. Khi có sự thay ổi vị trí lưu trữ, chỉ cần nạp lại
chương trình ể tính toán lại các ịa chỉ tuyệt ối, mà không cần biên dịch lại.
Thời iểm xử lý: nếu có nhu cầu di chuyển tiến trình từ vùng nhớ này sang
vùng nhớ khác trong quá trình tiến trình xử lý, thì thời iểm kết buộc ịa chỉ phải
trì hoãn ến tận thời iểm xử lý. Để thực hiện kết buộc ịa chỉ vào thời iểm xử lý,
cần sử dụng cơ chế phần cứng ặc biệt.
6.2. Không gian ịa chỉ và không gian vật lý
Một trong những hướng tiếp cận trung tâm nhằm tổ chức quản lý bộ nhớ
một cách hiệu qủa là ưa ra khái niệm không gian ịa chỉ ược xây dựng trên không 102 lOMoARcPSD| 41967345
gian nhớ vật lý, việc tách rời hai không gian này giúp hệ iều hành dễ dàng xây
dựng các cơ chế và chiến lược quản lý bộ nhớ hữu hiệu:
- Địa chỉ logic (còn gọi là ịa chỉ ảo), là tất cả các ịa chỉ do bộ xử lý tạo ra.
- Địa chỉ vật lý: là ịa chỉ thực tế mà trình quản lý bộ nhớ nhìn thấy và thao tác.
- Không gian ịa chỉ: là tập hợp tất cả các ịa chỉ ảo phát sinh bởi một chương trình.
- Không gian vật lý: là tập hợp tất cả các ịa chỉ vật lý tương ứng với các ịa chỉ ảo.
Địa chỉ ảo và ịa chỉ vật lý là như nhau trong phương thức kết buộc ịa chỉ
vào thời iểm biên dịch cũng như vào thời iểm nạp. Nhưng có sự khác biệt giữa
ịa chỉ ảo và ịa chỉ vật lý trong phương thức kết buộc vào thời iểm xử lý.
MMU (memory-management unit) là một cơ chế phần cứng ược sử dụng
ể thực hiện chuyển ổi ịa chỉ ảo thành ịa chỉ vật lý vào thời iểm xử lý.
Chương trình của người sử dụng chỉ thao tác trên các ịa chỉ ảo, không bao
giờ nhìn thấy các ịa chỉ vật lý. Địa chỉ thật sự ứng với vị trí của dữ liệu trong bô
nhớ chỉ ược xác ịnh khi thực hiện truy xuất ến dữ liệu.
6.3. Cấp phát liên tục
6.3.1. Mô hình Linker_Loader *
Ý tưởng: Tiến trình ược nạp vào một vùng nhớ liên tục ủ lớn ể
chứa toàn bộ tiến trình. Tại thời iểm biên dịch các ịa chỉ bên trong tiến trình
vẫn là ịa chỉ tương ối. Tại thời iểm nạp, Hệ iều hành sẽ trả về ịa chỉ bắt ầu nạp
tiến trình, và tính toán ể chuyển các ịa chỉ tương ối về ịa chỉ tuyệt ối trong bộ
nhớ vật lý theo công thức
ịa chỉ vật lý = ịa chỉ bắt ầu + ịa chỉ tương ối. 103 lOMoARcPSD| 41967345 * Thảo luận:
- Thời iểm kết buộc ịa chỉ là thời iểm nạp, do vậy sau khi nạp không thể
dịch chuyển tiến trình trong bộ nhớ.
- Không có khả năng kiểm soát ịa chỉ các tiến trình truy cập, do vậy không có sự bảo vệ.
6.3.2. Mô hình Base &Bound *
Ý tưởng: Tiến trình ược nạp vào một vùng nhớ liên tục ủ lớn ể
chứa toàn bộ tiến trình. Tại thời iểm biên dịch các ịa chỉ bên trong tiến trình
vẫn là ịa chỉ tương ối. Tuy nhiên bổ túc vào cấu trúc phần cứng của máy tính
một thanh ghi cơ sở (base register) và một thanh ghi giới hạn (bound register).
Khi một tiến trình ược cấp phát vùng nhớ, nạp vào thanh ghi cơ sở ịa chỉ bắt
ầu của phân vùng ược cấp phát cho tiến trình, và nạp vào thanh ghi giới hạn
kích thước của tiến trình. Sau ó, mỗi ịa chỉ bộ nhớ ược phát sinh sẽ tự ộng ược
cộng với ịa chỉ chứa trong thanh ghi cơ sở ể cho ra ịa chỉ tuyệt ối trong bộ
nhớ, các ịa chỉ cũng ược ối chiếu với thanh ghi giới hạn ể bảo ảm tiến trình
không truy xuất ngoài phạm vi phân vùng ược cấp cho nó. 104 lOMoARcPSD| 41967345
Hình 6.1. Hai thanh ghi hỗ trợ chuyển ổi ịa chỉ * Thảo luận:
- Một ưu iểm của việc sử dụng thanh ghi cơ sở là có thể di chuyển các
chương trình trong bộ nhớ sau khi chúng bắt ầu ược xử lý, mỗi khi tiến trình ược
di chuyển ến một vị trí mới, chỉ cần nạp lại giá trị cho thanh ghi cơ sở, các ịa chỉ
tuyệt ối sẽ ược phát sinh lại mà không cần cập nhật các ịa chỉ tương ối trong chương trình.
- Có hiện tượng phân mảnh ngoại vi (external fragmentation): khi các tiến
trình lần lượt vào và ra khỏi hệ thống, dần dần xuất hiện các khe hở giữa các tiến
trình. Đây là các khe hở ược tạo ra do kích thước của tiến trình mới ược nạp nhỏ
hơn kích thước vùng nhớ mới ược giải phóng bởi một tiến trình ã kết thúc và ra
khỏi hệ thống. Hiện tượng này có thể dẫn ến tình huống tổng vùng nhớ trống ủ
ể thoả mãn yêu cầu, nhưng các vùng nhớ này lại không liên tục. Người ta có thể
áp dụng kỹ thuật “dồn bộ nhớ” (memory compaction) ể kết hợp các mảnh bộ nhớ
nhỏ rời rạc thành một vùng nhớ lớn liên tục. Tuy nhiên, kỹ thuật này òi hỏi nhiều 105 lOMoARcPSD| 41967345
thời gian xử lý, ngoài ra, sự kết buộc ịa chỉ phải thực hiện vào thời iểm xử lý, vì
các tiến trình có thể bị di chuyển trong quá trình dồn bộ nhớ.
Hình 6.2. Phân mảnh ngoại vi
- Vấn ề nảy sinh khi kích thước của tiến trình tăng trưởng trong quá trình
xử lý mà không còn vùng nhớ trống gần kề ể mở rộng vùng nhớ cho tiến trình. Có hai cách giải quyết:
+ Di chuyển tiến trình : di chuyển tiến trình ến một vùng nhớ khác ủ lớn
ể thỏa mãn nhu cầu tăng trưởng kích thước của tiến trình.
+ Cấp phát dư vùng nhớ cho tiến trình: cấp phát dự phòng cho tiến trình
một vùng nhớ lớn hơn yêu cầu ban ầu của tiến trình.
Một tiến trình cần ược nạp vào bộ nhớ ể xử lý. Trong các phương
thức tổ chức trên ây, một tiến trình luôn ược lưu trữ trong bộ nhớ suốt quá trình
xử lý của nó. Tuy nhiên, trong trường hợp tiến trình bị khóa, hoặc tiến trình sử
dụng hết thời gian CPU dành cho nó, nó có thể ược chuyển tạm thời ra bộ nhớ
phụ và sau này ược nạp trở lại vào bộ nhớ chính ể tiếp tục xử lý.
Các cách tổ chức bộ nhớ trên ây ều phải chịu ựng tình trạng bộ
nhớ bị phân mảnh vì chúng ều tiếp cận theo kiểu cấp phát một vùng nhớ liên tục
cho tiến trình. Như ã thảo luận, có thể sử dụng kỹ thuật dồn bộ nhớ ể loại bỏ sự
phân mảnh ngoại vi, nhưng chi phí thực hiện rất cao. Một giải pháp khác hữu 106 lOMoARcPSD| 41967345
hiệu hơn là cho phép không gian ịa chỉ vật lý của tiến trình không liên tục, nghĩa
là có thể cấp phát cho tiến trình những vùng nhớ tự do bất kỳ, không cần liên tục.
6.4. Cấp phát không liên tục
6.4.1. Phân oạn (Segmentation)
* Ý tưởng: quan niệm không gian ịa chỉ là một tập các phân oạn
(segments) – các phân oạn là những phần bộ nhớ kích thước khác nhau và có
liên hệ logic với nhau
. Mỗi phân oạn có một tên gọi (số hiệu phân oạn) và một ộ
dài. Người dùng sẽ thiết lập mỗi ịa chỉ với hai giá trị: , offset>.
Hình 6.3. Mô hình phân oạn bộ nhớ
* Cơ chế MMU trong kỹ thuật phân oạn:
Cần phải xây dựng một ánh xạ ể chuyển ổi các ịa chỉ 2 chiều ược người
dùng ịnh nghĩa thành ịa chỉ vật lý một chiều. Sự chuyển ổi này ược thực hiện
qua một bảng phân oạn. Mỗi thành phần trong bảng phân oạn bao gồm một
thanh ghi cơ sở và một thanh ghi giới hạn. Thanh ghi cơ sở lưu trữ ịa chỉ vật lý
nơi bắt ầu phân oạn trong bộ nhớ, trong khi thanh ghi giới hạn ặc tả chiều dài của phân oạn.
* Chuyển ổi ịa chỉ: 107 lOMoARcPSD| 41967345
Mỗi ịa chỉ ảo là một bộ :
- Số hiệu phân oạn s: ược sử dụng như chỉ mục ến bảng phân oạn
- Địa chỉ tương ối d: có giá trị trong khoảng từ 0 ến giới hạn chiều dài của
phân oạn. Nếu ịa chỉ tương ối hợp lệ, nó sẽ ược cộng với giá trị chứa trong thanh
ghi cơ sở ể phát sinh ịa chỉ vật lý tương ứng.
Hình 6.4. Cơ chế phần cứng hổ trợ kĩ thuật phân oạn
Hình 6.5. Hệ thống phân oạn 108 lOMoARcPSD| 41967345 *
Cài ặt bảng phân oạn:
Có thể sử dụng các thanh ghi ể lưu trữ bảng phân oạn nếu số lượng phân
oạn nhỏ. Trong trường hợp chương trình bao gồm quá nhiều phân oạn, bảng phân
oạn phải ược lưu trong bộ nhớ chính. Việt quảng lý bảng phân oạn thông qua
thanh ghi cơ sở của bảng phân oạn (STBR) chỉ ến ịa chỉ bắt ầu của bảng phân
oạn. Vì số lượng phân oạn sử dụng trong một chương trình biến ộng, cần sử dụng
thêm một thanh ghi ặc tả kích thước bảng phân oạn (STLR).
Với một ịa chỉ logic <s,d>, trước tiên số hiệu phân oạn s ược kiểm tra tính
hợp lệ (s phần tử thứ s trong bảng phân oạn (STBR+s). Điạ chỉ vật lý cuối cùng là (STBR+s + d).
Hình 6.6. Sử dụng STBR, STLR và bảng phân oạn *
Bảo vệ: Một ưu iểm ặc biệt của cơ chế phân oạn là khả năng ặc tả
thuộc tính bảo vệ cho mỗi phân oạn. Vì mỗi phân oạn biểu diễn cho một phần
của chương trình với mục ích ược người dùng xác ịnh, người sử dụng có thể
biết ược một phân oạn chứa ựng những gì bên trong, do vậy họ có thể ặc tả
các thuộc tính bảo vệ thích hợp cho từng phân oạn.
Cơ chế phần cứng phụ trách chuyển ổi ịa chỉ bộ nhớ sẽ kiểm tra các bit bảo
vệ ược gán với mỗi phần tử trong bảng phân oạn ể ngăn chặn các thao tác truy
xuất bất hợp lệ ến phân oạn tương ứng. 109 lOMoARcPSD| 41967345 *
Chia sẻ phân oạn: Một ưu iểm khác của kỹ thuật phân oạn là khả
năng chia sẻ ở mức ộ phân oạn. Nhờ khả năng này, các tiến trình có thể chia
sẻ với nhau từng phần chương trình (ví dụ các thủ tục, hàm), không nhất thiết
phải chia sẻ toàn bộ chương trình như trường hợp phân trang. Mỗi tiến trình
có một bảng phân oạn riêng, một phân oạn ược chia sẻ khi các phần tử trong
bảng phân oạn của hai tiến trình khác nhau cùng chỉ ến một vị trí vật lý duy nhất.
Hình 6.7. Chia sẻ code trong hệ phân oạn * Thảo luận:
- Phải giải quyết vấn ề cấp phát ộng: Làm thế nào ể thỏa mãn một yêu cầu
vùng nhớ kích thước N ? Cần phải chọn vùng nhớ nào trong danh sách vùng nhớ
tự do ể cấp phát ? Như vậy cần phải ghi nhớ hiện trạng bộ nhớ ể có thể cấp phát
úng. Có hai phương pháp quản lý chủ yếu:
+ Quản lý bằng một bảng các bit: Bộ nhớ ược chia thành các ơn vị cấp
phát, mỗi ơn vị ược phản ánh bằng một bit trong bảng các bit, một bit nhận giá
trị 0 nếu ơn vị bộ nhớ tương ứng ang tự do, và nhận giá trị 1 nếu ơn vị tương ứng
ã ược cấp phát cho một tiến trình. Khi cần nạp một tiến trình có kích thước k ơn 110 lOMoARcPSD| 41967345
vị, cần phải tìm trong bảng các bit một dãy con k bit nhận giá trị 0. Đây là một
giải pháp ơn giản, nhưng thực hiện chậm nên ít ược sử dụng.
Hình 6.8. Quản lý bộ nhớ bằng bảng các bit
+ Quản lý bằng danh sách: Tổ chức một danh sách các phân oạn ã cấp
phát và phân oạn tự do, một phân oạn có thể là một tiến trình (P) hay vùng nhớ
trống giữa hai tiến trình (H).
Hình 6.9. Quản lý bộ nhớ bằng danh sách
Các thuật toán thông dụng ể chọn một phân oạn tự do trong danh sách ể
cấp phát cho tiến trình là:
First-fit: cấp phát phân oạn tự do ầu tiên ủ lớn.
Best-fit: cấp phát phân oạn tự do nhỏ nhất nhưng ủ lớn ể thỏa mãn nhu cầu.
Worst-fit: cấp phát phân oạn tự do lớn nhất.
- Trong hệ thống sử dụng kỹ thuật phân oạn, hiện tượng phân mảnh ngoại
vi lại xuất hiện khi các khối nhớ tự do ều quá nhỏ, không ủ ể chứa một phân oạn. 111 lOMoARcPSD| 41967345
6.4.2. Phân trang (Paging) * Ý tưởng:
Phân bộ nhớ vật lý thành các khối (block) có kích thước cố ịnh và bằng
nhau, gọi là khung trang (page frame). Không gian ịa chỉ cũng ược chia thành
các khối có cùng kích thước với khung trang, và ược gọi là trang (page). Khi
cần nạp một tiến trình ể xử lý, các trang của tiến trình sẽ ược nạp vào những
khung trang còn trống. Một tiến trình kích thước N trang sẽ yêu cầu N khung trang tự do.
Hình 6.10. Mô hình bộ nhớ phân trang
* Cơ chế MMU trong kỹ thuật phân trang:
Cơ chế phần cứng hỗ trợ thực hiện chuyển ổi ịa chỉ trong cơ chế phân trang
là bảng trang (pages table). Mỗi phần tử trong bảng trang cho biết các ịa chỉ bắt
ầu của vị trí lưu trữ trang tương ứng trong bộ nhớ vật lý (số hiệu khung trang
trong bộ nhớ vật lý ang chứa trang).
* Chuyển ổi ịa chỉ:
Mỗi ịa chỉ phát sinh bởi CPU ược chia thành hai phần:
- Số hiệu trang (p): sử dụng như chỉ mục ến phần tử tương ứng trong bảng trang.
- Địa chỉ tương ối trong trang (d): kết hợp với ịa chỉ bắt ầu của trang ể tạo
ra ịa chỉ vật lý mà trình quản lý bộ nhớ sử dụng. 112 lOMoARcPSD| 41967345
Kích thước của trang do phần cứng qui ịnh. Để dễ phân tích ịa chỉ ảo thành
số hiệu trang và ịa chỉ tương ối, kích thước của một trang thông thường là một
lũy thừa của 2 (biến ổi trong phạm vi 512 bytes và 8192 bytes). Nếu kích thước
của không gian ịa chỉ là 2m và kích thước trang là 2 n, thì m-n bits cao của ịa chỉ
ảo sẽ biễu diễn số hiệu trang, và n bits thấp cho biết ịa chỉ tương ối trong trang.
Hình 6.11. Cơ chế phần cứng hỗ trợ phân trang
* Cài ặt bảng trang:
Trong trường hợp ơn giản nhất, bảng trang một tập các thanh ghi ược sử
dụng ể cài ặt bảng trang. Tuy nhiên việc sử dụng thanh ghi chỉ phù hợp với các
bảng trang có kích thước nhỏ, nếu bảng trang có kích thước lớn, nó phải ược lưu
trữ trong bộ nhớ chính, và sử dụng một thanh ghi ể lưu ịa chỉ bắt ầu lưu trữ bảng trang (PTBR).
Theo cách tổ chức này, mỗi truy xuất ến dữ liệu hay chỉ thị ều òi hỏi hai
lần truy xuất bộ nhớ: một cho truy xuất ến bảng trang và một cho bản thân dữ liệu. 113 lOMoARcPSD| 41967345
Hình 6.12. Mô hình bộ nhớ phân trang
Hình 6.13. Sử dụng thanh ghi cơ sở trỏ ến bảng trang
Có thể né tránh bớt việc truy xuất bộ nhớ hai lần bằng cách sử dụng
thêm một vùng nhớ ặc biệt, với tốc ộ truy xuất nhanh và cho phép tìm kiếm song
song, vùng nhớ cache nhỏ này thường ược gọi là bộ nhớ kết hợp (TLBs). Mỗi
thanh ghi trong bộ nhớ kết hợp gồm một từ khóa và một giá trị, khi ưa ến bộ nhớ
kết hợp một ối tượng cần tìm, ối tượng này sẽ ược so sánh cùng lúc với các từ
khóa trong bộ nhớ kết hợp ể tìm ra phần tử tương ứng. Nhờ ặc tính này mà việc 114 lOMoARcPSD| 41967345
tìm kiếm trên bộ nhớ kết hợp ược thực hiện rất nhanh, nhưng chi phí phần cứng lại cao.
Trong kỹ thuật phân trang, TLBs ược sử dụng ể lưu trữ các trang bộ nhớ
ược truy cập gần hiện tại nhất. Khi CPU phát sinh một ịa chỉ, số hiệu trang của
ịa chỉ sẽ ược so sánh với các phần tử trong TLBs, nếu có trang tương ứng trong
TLBs, thì sẽ xác ịnh ược ngay số hiệu khung trang tương ứng, nếu không mới
cần thực hiện thao tác tìm kiếm trong bảng trang.
Hình 6.14. Bảng trang với TLBs
* Tổ chức bảng trang:
Mỗi hệ iều hành có một phương pháp riêng ể tổ chức lưu trữ bảng trang.
Đa số các hệ iều hành cấp cho mỗi tiến trình một bảng trang. Tuy nhiên phương
pháp này không thể chấp nhận ược nếu hệ iều hành cho phép quản lý một không
gian ịa chỉ có dung lượng quá (232, 264): trong các hệ thống như thế, bản thân
bảng trang òi hỏi một vùng nhớ quá lớn! Có hai giải pháp cho vấn ề này:
- Phân trang a cấp: Phân chia bảng trang thành các phần nhỏ, bản thân
bảng trang cũng sẽ ược phân trang. 115 lOMoARcPSD| 41967345
Hình 6.15. Bảng trang nhị cấp
- Bảng trang nghịch ảo:
Sử dụng duy nhất một bảng trang nghịch ảo cho tất cả các tiến trình. Mỗi
phần tử trong bảng trang nghịch ảo phản ánh một khung trang trong bộ nhớ bao
gồm ịa chỉ logic của một trang ang ược lưu trữ trong bộ nhớ vật lý tại khung
trang này, cùng với thông tin về tiến trình ang ược sỡ hữu trang. Mỗi ịa chỉ ảo
khi ó là một bộ ba .
Trong ó: idp là ịnh danh của tiến trình, p là số hiệu trang và d là ịa chỉ tương ối trong trang.
Mỗi phần tử trong bảng trang nghịch ảo là một cặp . Khi một
tham khảo ến bộ nhớ ược phát sinh, một phần ịa chỉ ảo là ược ưa ến
cho trình quản lý bộ nhớ ể tìm phần tử tương ứng trong bảng trang nghịch ảo,
nếu tìm thấy, ịa chỉ vật lý sẽ ược phát sinh. Trong các trường hợp khác,
xem như tham khảo bộ nhớ ã truy xuất một ịa chỉ bất hợp lệ. 116 lOMoARcPSD| 41967345
Hình 6.16. Bảng trang nghịch ảo * Bảo vệ:
Cơ chế bảo vệ trong hệ thống phân trang ược thực hiện với các bit bảo vệ
ược gắn với mỗi khung trang. Thông thường, các bit này ược lưu trong bảng
trang, vì mỗi truy xuất ến bộ nhớ ều phải tham khảo ến bảng trang ể phát sinh ịa
chỉ vật lý, khi ó, hệ thống có thể kiểm tra các thao tác truy xuất trên khung trang
tương ứng có hợp lệ với thuộc tính bảo vệ của nó không.
Ngoài ra, một bit phụ trội ược thêm vào trong cấu trúc một phần tử của
bảng trang: bit hợp lệ - bất hợp lệ (valid-invalid). -
Hợp lệ: trang tương ứng thuộc về không gian ịa chỉ của tiến trình. -
Bất hợp lệ: trang tương ứng không nằm trong không gian ịa chỉ
của tiến trình, iều này có nghĩa tiến trình ã truy xuất ến một ịa chỉ không ược phép.
Hình 6.17 Cấu trúc một phần tử trong bảng trang
* Chia sẻ bộ nhớ trong cơ chế phân trang: 117 lOMoARcPSD| 41967345
Một ưu iểm của cơ chế phân trang là cho phép chia sẻ các trang giữa các
tiến trình. Trong trường hợp này, sự chia sẻ ược thực hiện bằng cách ánh xạ
nhiều ịa chỉ logic vào một ịa chỉ vật lý duy nhất. Có thể áp dụng kỹ thuật này ể
cho phép có tiến trình chia sẻ một vùng code chung: nếu có nhiều tiến trình của
cùng một chương trình, chỉ cần lưu trữ một oạn code của chương trình này trong
bộ nhớ, các tiến trình sẽ có thể cùng truy xuất ến các trang chứa code chung này.
Lưu ý ể có thể chia sẻ một oạn code, oạn code này phải có thuộc tính reenterable
(cho phép một bản sao của chương trình ược sử dụng ồng thời bởi nhiều tác vụ).
Hình 6.18. Chia sẻ các trang trong hệ phân trang * Thảo luận:
- Kỹ thuật phân trang loại bỏ ược hiện tượng phân mảnh ngoại vi: Mỗi
khung trang ều có thể ược cấp phát cho một tiến trình nào ó có yêu cầu. Tuy
nhiên hiện tượng phân mảnh nội vi vẫn có thể xảy ra khi kích thước của tiến
trình không úng bằng bội số của kích thước một trang, khi ó, trang cuối cùng sẽ
không ược sử dụng hết.
- Một khía cạnh tích cực rất quan trọng khác của kỹ thuật phân trang là sự
phân biệt rạch ròi góc nhìn của người dùng và của bộ phận quản lý bộ nhớ vật lý: 118 lOMoARcPSD| 41967345
+ Góc nhìn của người sử dụng: một tiến trình của người dùng nhìn thấy
bộ nhớ như là một không gian liên tục, ồng nhất và chỉ chứa duy nhất bản thân tiến trình này.
+ Góc nhìn của bộ nhớ vật lý: một tiến trình của người sử dụng ược lưu
trữ phân tán khắp bộ nhớ vật lý, trong bộ nhớ vật lý ồng thời cũng chứa những tiến trình khác.
- Phần cứng ảm nhiệm việc chuyển ổi ịa chỉ logic thành ịa chỉ vật lý. Sự
chuyển ổi này là trong suốt ối với người sử dụng.
- Để lưu trữ các thông tin chi tiết về quá trình cấp phát bộ nhớ, hệ iều hành
sử dụng một bảng khung trang, mà mỗi phần tử mô tả tình trạng của một khung
trang vật lý: tự do hay ược cấp phát cho một tiến trình nào ó.
Lưu ý rằng sự phân trang không phản ánh úng cách thức người
sử dụng cảm nhận về bộ nhớ. Người sử dụng nhìn thấy bộ nhớ như một tập các
ối tượng của chương trình (segments, các thư viện...) và một tập các ối tượng dữ
liệu (biến toàn cục, stack, vùng nhớ chia sẻ...). Vấn ề ặt ra là cần tìm một cách
thức biểu diễn bộ nhớ sao cho có thể cung cấp cho người dùng một cách nhìn
gần với quan iểm logic của họ hơn và ó là kỹ thuật phân oạn.
Kỹ thuật phân oạn thỏa mãn ược nhu cầu thể hiện cấu trúc logic
của chương trình nhưng nó dẫn ến tình huống phải cấp phát các khối nhớ có kích
thước khác nhau cho các phân oạn trong bộ nhớ vật lý. Điều này làm rắc rối vấn
ề hơn rất nhiều so với việc cấp phát các trang có kích thước tĩnh. Một giải pháp
dung hoà là kết hợp cả hai kỹ thuật phân trang và phân oạn: chúng ta tiến hành
phân trang các phân oạn.
6.4.3. Phân oạn kết hợp phân trang (Paged segmentation)
* Ý tưởng: Không gian ịa chỉ là một tập các phân oạn, mỗi phân oạn
ược chia thành nhiều trang. Khi một tiến trình ược ưa vào hệ thống, hệ iều
hành sẽ cấp phát cho tiến trình các trang cần thiết ể chứa ủ các phân oạn của tiến trình.
* Cơ chế MMU trong kỹ thuật phân oạn kết hợp phân trang: 119 lOMoARcPSD| 41967345
Để hỗ trợ kỹ thuật phân oạn, cần có một bảng phân oạn, nhưng giờ ây mỗi
phân oạn cần có một bảng trang phân biệt.
* Chuyển ổi ịa chỉ:
Mỗi ịa chỉ logic là một bộ ba:
- Số hiệu phân oạn (s): sử dụng như chỉ mục ến phần tử tương ứng trong bảng phân oạn.
- Số hiệu trang (p): sử dụng như chỉ mục ến phần tử tương ứng trong bảng trang của phân oạn.
- Địa chỉ tương ối trong trang (d): kết hợp với ịa chỉ bắt ầu của trang ể tạo
ra ịa chỉ vật lý mà trình quản lý bộ nhớ sử dụng.
Hình 6.19. Mô hình phân oạn kết hợp phân trang 120 lOMoARcPSD| 41967345
Hình 6.20. Cơ chế phần cứng của sự phân oạn kết hợp phân trang
Tất cả các mô hình tổ chức bộ nhớ trên ây ều có khuynh hướng cấp phát
cho tiến trình toàn bộ các trang yêu cầu trước khi thật sự xử lý. Vì bộ nhớ vật lý
có kích thước rất giới hạn, iều này dẫn ến hai iểm bất tiện sau:
- Kích thước tiến trình bị giới hạn bởi kích thước của bộ nhớ vật lý.
- Khó có thể bảo trì nhiều tiến trình cùng lúc trong bộ nhớ, và như vậy khó
nâng cao mức ộ a chương của hệ thống. 6.5. Tóm tắt
- Có nhiều cách tiếp cận khác nhau ể tổ chức quãn lý bộ nhớ, nhưng ều có
iểm chung mong ạt ến các mục tiêu sau :
+ Có thể áp ứng ược ầy ủ các nhu cầu bộ nhớ của chương trình với một bộ nhớ vật lý giới hạn.
+ Quá trình chuyển ổi ịa chỉ, tổ chức cấp phát bộ nhớ là trong suốt với
người dùng, và có khả năng tái ịnh vị.
+ Tận dụng hiệu quả bộ nhớ (ít có vùng nhớ không sử dụng ược) +
Bộ nhớ ược bảo vệ tốt. 121 lOMoARcPSD| 41967345
+ Có khả năng chia sẻ bộ nhớ giữa các tiến trình.
- Một số cách tiếp cận tổ chức bộ nhớ chính:
+ Cấp phát liên tục: Có thể cấp phát các vùng nhớ liên tục cho các tiến
trình trong những phân vùng có kích thước cố ịnh hay biến ộng. Điểm yếu của
cách tiếp cận này là kích thước các chương trình có thể dược xử lý bị giới hạn
bởi các kích thước của khối nhớ liên tục có thể sử dụng. Các hiện tượng phân
mảnh ngoại vi, nội vi ều có thể xuất hiện
+ Cấp phát không liên tục: Có thể cấp phát các vùng nhớ không liên tục
cho một tiến trình. Hai kỹ thuật thường ược áp dụng là phân trang và phân oạn.
Kỹ thuật phân trang cho phép loại bỏ hiện tượng phân mảnh ngoại vi, kỹ thuật
phân oạn loại bỏ hiện tượng phân mảnh nội vi, nhưng phải giải quyết vấn ề cấp phát ộng.
* Củng cố bài học
Các câu hỏi cần trả lời ược sau bài học này: 1.
Nhiệm vụ quản lý bộ nhớ bao gồm các công việc nào? Giai oạn
nào do hệ iều hành thực hiện, giai oạn nào cần sự trợ giúp của phần cứng? 2.
Các khái niệm: Phân mảnh nội vi, Phân mảnh ngoại vi, Bài toán
cấp phát ộng, Điạ chỉ logic, Điạ chỉ physic 3.
Phân tích ưu khuyết của các mô hình tổ chức bộ nhớ. * Bài tập
Bài 1. Giải thích sự khác biệt giữa ịa chỉ logic và ịa chỉ physic (vật lý)?
Bài 2. Giải thích sự khác biệt giữa hiện tượng phân mảnh nội vi và ngoại vi?
Bài 3. Giả sử bộ nhớ chính ược phân thành các phân vùng có kích
thước là 600K, 500K, 200K, 300K ( theo thứ tự ), cho biết các tiến trình có kích
thước 212K, 417K, 112K và 426K (theo thứ tự) sẽ ược cấp phát bộ nhớ như thế nào, nếu sử dụng: 122 lOMoAR cPSD| 41967345 a) Thuật toán First fit b) Thuật toán Best fit c) Thuật toán Worst fit
Thuật toán nào cho phép sử dụng bộ nhớ hiệu qủa nhất trong trường hợp trên?
Bài 4. Xét một hệ thống trong ó một chương trình khi ược
nạp vào bộ nhớ sẽ phân biệt hoàn toàn phân oạn code và phân oạn
data. Giả sử CPU sẽ xác ịnh ược khi nào cần truy xuất lệnh hay dữ
liệu, và phải truy xuất ở âu. Khi ó mỗi chương trình sẽ ược cung
cấp 2 bộ thanh ghi base-limit: một cho phân oạn code, và một cho
phân oạn data. Bộ thanh ghi base-limit của phân oạn code tự ộng
ược ặt thuộc tính readonly. Thảo luận các ưu và khuyết iểm của hệ thống này.
Bài 5. Tại sao kích thước trang luôn là lũy thừa của 2?
Bài 6. Xét một không gian ịa chỉ có 8 trang, mỗi trang có
kích thước 1K. Ánh xạ vào bộ nhớ vật lý có 32 khung trang.
a) Địa chỉ logic gồm bao nhiêu bit?
b) Địa chỉ physic gồm bao nhiêu bit?
Bài 7. Tại sao trong hệ thống sử dụng kỹ thuật phân trang,
một tiến trình không thể truy xuất ến vùng nhớ không ược cấp cho
nó? Làm cách nào hệ iều hành có thể cho phép sự truy xuất này xảy
ra? Hệ iều hành có nên cho phép iều ó không? Tại sao?
Bài 8. Xét một hệ thống sử dụng kỹ thuật phân trang, với
bảng trang ược lưu trữ trong bộ nhớ chính. a)
Nếu thời gian cho một lần truy xuất bộ nhớ bình thường là
200nanoseconds, thì mất bao nhiêu thời gian cho một thao tác truy xuất bộ nhớ trong hệ thống này? 123 lOMoAR cPSD| 41967345 b)
Nếu sử dụng TLBs với hit-ratio (tỉ lệ tìm thấy) là 75%, thời gian
ể tìm trong TLBs xem như bằng 0, tính thời gian truy xuất bộ nhớ trong hệ thống
(effective memory reference time)
Bài 9. Nếu cho phép hai phần tử trong bảng trang cùng lưu trữ
một số hiệu khung trang trong bộ nhớ thì sẽ có hiệu qủa gì? Giải thích làm cách
nào hiệu qủa này có thể ược sử dụng ể giảm thời gian cần khi sao chép một khối
lượng lớn vùng nhớ từ vị trí này sang vị trí khác. Khi ó nếu sửa nội dung một
trang thì sẽ tác ộng ến trang còn lại thế nào?
Bài 10. Vì sao ôi lúc người ta kết hợp hai kỹ thuật phân trang và phân oạn?
Bài 11. Mô tả cơ chế cho phép một phân oạn có thể thuộc về
không gian iạ chỉ của hai tiến trình.
Bài 12. Giải thích vì sao chia sẻ một module trong kỹ thuật phân
oạn lại dễ hơn trong kỹ thuật phân trang?
Bài 13. Xét bảng phân oạn sau ây: Segment Base Length 0 219 600 1 2300 14 2 90 100 3 1327 580 4 1952 96
Cho biết ịa chỉ vật lý tương ứng với các ịa chỉ logique sau ây: a. 0,430 b. 1,10 c. 2,500 d. 3,400 124 lOMoARcPSD| 41967345 e. 4,112
Chương 7 BỘ NHỚ ẢO
Bộ nhớ ảo là một kỹ thuật hiện ại giúp cho người dùng ược giải phóng
hoàn toàn khỏi mối bận tâm về giới hạn bộ nhớ. Ý tưởng, ưu iểm và những vấn
ề liên quan ến việc tổ chức bộ nhớ ảo sẽ ược trình bày trong nội dung chương này. 7.1. Giới thiệu
Nếu ặt toàn thể không gian ịa chỉ vào bộ nhớ vật lý thì kích thước của
chương trình bị giới hạn bởi kích thước bộ nhớ vật lý.
Thực tế, trong nhiều trường hợp, chúng ta không cần phải nạp toàn bộ
chương trình vào bộ nhớ vật lý cùng một lúc, vì tại một thời iểm chỉ có một chỉ
thị của tiến trình ược xử lý. Ví dụ, các chương trình ều có một oạn code xử lý
lỗi, nhưng oạn code này hầu như rất ít khi ược sử dụng vì hiếm khi xảy ra lỗi,
trong trường hợp này, không cần thiết phải nạp oạn code xử lý lỗi từ ầu.
Từ nhận xét trên, một giải pháp ược ề xuất là cho phép thực hiện một
chương trình chỉ ược nạp từng phần vào bộ nhớ vật lý. Ý tưởng chính của giải
pháp này là tại mỗi thời iểm chỉ lưu trữ trong bộ nhớ vật lý các chỉ thị và dữ liệu
của chương trình cần thiết cho việc thi hành tại thời iểm ó. Khi cần ến các chỉ thị
khác, những chỉ thị mới sẽ ược nạp vào bộ nhớ, tại vị trí trước ó bị chiếm giữ bởi
các chỉ thị nay không còn cần ến nữa. Với giải pháp này, một chương trình có
thể lớn hơn kích thước của vùng nhớ cấp phát cho nó.
Một cách ể thực hiện ý tưởng của giải pháp trên ây là sử dụng kỹ thuật
overlay. Kỹ thuật overlay không òi hỏi bất kỳ sự trợ giúp ặc biệt nào của hệ iều
hành, nhưng trái lại, lập trình viên phải biết cách lập trình theo cấu trúc overlay,
và iều này òi hỏi khá nhiều công sức.
Để giải phóng lập trình viên khỏi các suy tư về giới hạn của bộ nhớ, mà
cũng không tăng thêm khó khăn cho công việc lập trình của họ, người ta nghĩ ến
các kỹ thuật tự ộng, cho phép xử lý một chương trình có kích thước lớn chỉ với 125 lOMoARcPSD| 41967345
một vùng nhớ có kích thước nhỏ. Giải pháp ược tìm thấy với khái niệm bộ nhớ ảo (virtual memory). 7.1.1. Định nghĩa
Bộ nhớ ảo là một kỹ thuật cho phép xử lý một tiến trình không ược nạp
toàn bộ vào bộ nhớ vật lý. Bộ nhớ ảo mô hình hoá bộ nhớ như một bảng lưu trữ
rất lớn và ồng nhất, tách biệt hẳn khái niệm không gian ịa chỉ và không gian vật
lý. Người sử dụng chỉ nhìn thấy và làm việc trong không gian ịa chỉ ảo, việc
chuyển ổi sang không gian vật lý do hệ iều hành thực hiện với sự trợ giúp của
các cơ chế phần cứng cụ thể. * Thảo luận:
- Cần kết hợp kỹ thuật swapping ển chuyển các phần của chương trình vào-
ra giữa bộ nhớ chính và bộ nhớ phụ khi cần thiết.
- Nhờ việc tách biệt bộ nhớ ảo và bộ nhớ vật lý, có thể tổ chức một bộ nhớ
ảo có kích thước lớn hơn bộ nhớ vật lý.
- Bộ nhớ ảo cho phép giảm nhẹ công việc của lập trình viên vì họ không
cần bận tâm ến giới hạn của vùng nhớ vật lý, cũng như không cần tổ chức chương
trình theo cấu trúc overlays.
Hình 7.1. Bộ nhớ ảo
7.1.2. Cài ặt bộ nhớ ảo
Bộ nhớ ảo thường ược thực hiện với kỹ thuật phân trang theo yêu cầu 126 lOMoARcPSD| 41967345
(demand paging). Cũng có thể sử dụng kỹ thuật phân oạn theo yêu cầu (demand
segmentation) ể cài ặt bộ nhớ ảo, tuy nhiên việc cấp phát và thay thế các phân
oạn phức tạp hơn thao tác trên trang, vì kích thước không bằng nhau của các oạn.
* Phân trang theo yêu cầu (demand paging)
Một hệ thống phân trang theo yêu cầu là hệ thống sử dụng kỹ thuật phân
trang kết hợp với kỹ thuật swapping. Một tiến trình ược xem như một tập các
trang, thường trú trên bộ nhớ phụ (thường là ĩa). Khi cần xử lý, tiến trình sẽ ược
nạp vào bộ nhớ chính. Nhưng thay vì nạp toàn bộ chương trình, chỉ những trang
cần thiết trong thời iểm hiện tại mới ược nạp vào bộ nhớ. Như vậy một trang chỉ
ược nạp vào bộ nhớ chính khi có yêu cầu.
Với mô hình này, cần cung cấp một cơ chế phần cứng giúp phân biệt các
trang ang ở trong bộ nhớ chính và các trang trên ĩa. Có thể sử dụng lại bit valid-
invalid nhưng với ngữ nghĩa mới: -
valid: trang tương ứng là hợp lệ và ang ở trong bộ nhớ chính. -
invalid: hoặc trang bất hợp lệ (không thuộc về không gian ịa chỉ
của tiến trình) hoặc trang hợp lệ nhưng ang ược lưu trên bộ nhớ phụ.
Một phần tử trong bảng trang mộ tả cho một trang không nằm trong bộ nhớ
chính, sẽ ược ánh dấu invalid và chứa ịa chỉ của trang trên bộ nhớ phụ.
* Cơ chế phần cứng:
Cơ chế phần cứng hỗ trợ kỹ thuật phân trang theo yêu cầu là sự kết hợp
của cơ chế hỗ trợ kỹ thuật phân trang và kỹ thuật swapping:
- Bảng trang: Cấu trúc bảng trang phải cho phép phản ánh tình trạng của
một trang là ang nằm trong bộ nhớ chính hay bộ nhớ phụ.
- Bộ nhớ phụ: Bộ nhớ phụ lưu trữ những trang không ược nạp vào bộ nhớ
chính. Bộ nhớ phụ thường ược sử dụng là ĩa, và vùng không gian ĩa dùng ể lưu
trữ tạm các trang trong kỹ thuật swapping ược gọi là không gian swapping. 127 lOMoARcPSD| 41967345
Bảng 7.2. Bảng trang với một số trang trên bộ nhớ phụ * Lỗi trang:
Truy xuất ến một trang ược ánh dấu bất hợp lệ sẽ làm phát sinh một lỗi
trang (page fault). Khi dò tìm trong bảng trang ể lấy các thông tin cần thiết cho
việc chuyển ổi ịa chỉ, nếu nhận thấy trang ang ược yêu cầu truy xuất là bất hợp
lệ, cơ chế phần cứng sẽ phát sinh một ngắt ể báo cho hệ iều hành. Hệ iều hành
sẽ xử lý lỗi trang như sau:
- Kiểm tra truy xuất ến bộ nhớ là hợp lệ hay bất hợp lệ.
- Nếu truy xuất bất hợp lệ: kết thúc tiến trình.
- Ngược lại: ến bước 3.
- Tìm vị trí chứa trang muốn truy xuất trên ĩa.
- Tìm một khung trang trống trong bộ nhớ chính:
+ Nếu tìm thấy: ến bước 5.
+ Nếu không còn khung trang trống, chọn một khung trang “nạn nhân” và
chuyển trang “nạn nhân” ra bộ nhớ phụ (lưu nội dung của trang ang chiếm giữ
khung trang này lên ĩa), cập nhật bảng trang tương ứng rồi ến bước 5.
- Chuyển trang muốn truy xuất từ bộ nhớ phụ vào bộ nhớ chính :
nạp trang cần truy xuất vào khung trang trống ã chọn (hay vừa mới làm
trống); cập nhật nội dung bảng trang, bảng khung trang tương ứng. 128 lOMoARcPSD| 41967345
- Tái kích hoạt tiến trình người sử dụng.
Hình 7.3. Các giai oạn xử lý lỗi trang 7.2. Thay thế trang
Khi xảy ra một lỗi trang, cần phải mang trang vắng mặt vào bộ nhớ. Nếu
không có một khung trang nào trống, hệ iều hành cần thực hiện công việc thay
thế trang
– chọn một trang ang nằm trong bộ nhớ mà không ược sử dụng tại thời
iểm hiện tại và chuyển nó ra không gian swapping trên ĩa ể giải phóng một khung
trang dành chỗ nạp trang cần truy xuất vào bộ nhớ.
Như vậy nếu không có khung trang trống, thì mỗi khi xảy ra lỗi trang cần
phải thực hiện hai thao tác chuyển trang: chuyển một trang ra bộ nhớ phụ và nạp
một trang khác vào bộ nhớ chính. Có thể giảm bớt số lần chuyển trang bằng cách
sử dụng thêm một bit cập nhật (dirty bit). Bit này ược gắn với mỗi trang ể phản
ánh tình trạng trang có bị cập nhật hay không: giá trị của bit ược cơ chế phần
cứng ặt là 1 mỗi lần có một từ ược ghi vào trang, ể ghi nhận nội dung trang có
bị sửa ổi. Khi cần thay thế một trang, nếu bit cập nhật có giá trị là 1 thì trang cần
ược lưu lại trên ĩa, ngược lại, nếu bit cập nhật là 0, nghĩa là trang không bị thay
ổi, thì không cần lưu trữ trang trở lại ĩa. số hiệu trang valid-invalid bit dirty bit
Hình 7.4. Cấu trúc một phần tử trong bảng trang 129 lOMoARcPSD| 41967345
Sự thay thế trang là cần thiết cho kỹ thuật phân trang theo yêu cầu. Nhờ cơ
chế này, hệ thống có thể hoàn toàn tách rời bộ nhớ ảo và bộ nhớ vật lý, cung cấp
cho lập trình viên một bộ nhớ ảo rất lớn trên một bộ nhớ vật lý có thể bé hơn rất nhiều lần.
7.2.1. Sự thi hành phân trang theo yêu cầu
Việc áp dụng kỹ thuật phân trang theo yêu cầu có thể ảnh hưởng mạnh ến
tình hình hoạt ộng của hệ thống.
Giả sử p là xác suất xảy ra một lỗi trang (0 p 1): p
= 0 : không có lỗi trang nào
p = 1 : mỗi truy xuất sẽ phát sinh một lỗi trang
Thời gian thật sự cần ể thực hiện một truy xuất bộ nhớ (TEA) là:
TEA = (1-p)ma + p (tdp) [+ swap out ] + swap in + tái kích hoạt
Trong công thức này, ma là thời gian truy xuất bộ nhớ, tdp thời gian xử lý lỗi trang.
Có thể thấy rằng, ể duy trì ở một mức ộ chấp nhận ược sự chậm trễ trong
hoạt ộng của hệ thống do phân trang, cần phải duy trì tỷ lệ phát sinh lỗi trang thấp.
Hơn nữa, ể cài ặt kỹ thuật phân trang theo yêu cầu, cần phải giải quyết hai
vấn ề chính yếu: xây dựng một thuật toán cấp phát khung trang, và thuật toán thay thế trang.
7.2.2. Các thuật toán thay thế trang
Vấn ề chính khi thay thế trang là chọn lựa một trang “nạn nhân” ể chuyển
ra bộ nhớ phụ. Có nhiều thuật toán thay thế trang khác nhau, nhưng tất cả cùng
chung một mục tiêu: chọn trang “nạn nhân” là trang mà sau khi thay thế sẽ gây ra ít lỗi trang nhất.
Có thể ánh giá hiệu qủa của một thuật toán bằng cách xử lý trên một chuỗi
các ịa chỉ cần truy xuất và tính toán số lượng lỗi trang phát sinh. 130 lOMoAR cPSD| 41967345
Ví dụ: Giả sử theo vết xử lý của một tiến trình và nhận thấy tiến trình thực
hiện truy xuất các ịa chỉ theo thứ tự sau:
0100, 0432, 0101, 0162, 0102, 0103, 0104, 0101, 0611, 0102, 0103, 0104,
0101, 0610, 0102, 0103, 0104, 0101, 0609, 0102, 0105
Nếu có kích thước của một trang là 100 bytes, có thể viết lại chuỗi truy
xuất trên giản lược hơn như sau: 1, 4, 1, 6, 1, 6, 1, 6, 1
Để xác ịnh số các lỗi trang xảy ra khi sử dụng một thuật toán thay thế trang
nào ó trên một chuỗi truy xuất cụ thể, còn cần phải biết số lượng khung trang sử dụng trong hệ thống.
Để minh hoạ các thuật toán thay thế trang sẽ trình bày, chuỗi truy xuất ược sử dụng là:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
7.2.2.1. Thuật toán FIFO
- Tiếp cận: Ghi nhận thời iểm một trang ược mang vào bộ nhớ chính. Khi
cần thay thế trang, trang ở trong bộ nhớ lâu nhất sẽ ược chọn - Ví dụ : sử dụng 3
khung trang, ban ầu cả 3 ều trống
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 2 4 4 4 0 0 0 0 0 0 0 7 7 7
0 0 0 0 3 3 3 2 2 2 2 2 1 1 1 1 1 0 0
1 1 1 1 0 0 0 3 3 3 3 3 2 2 2 2 2 1 * * * * * * * * * * * * * * *
Ghi chú: * : có lỗi trang - Thảo luận: 131 lOMoAR cPSD| 41967345
+ Để áp dụng thuật toán FIFO, thực tế không nhất thiết phải ghi nhận thời
iểm mỗi trang ược nạp vào bộ nhớ, mà chỉ cần tổ chức quản lý các trang trong
bộ nhớ trong một danh sách FIFO, khi ó trang ầu danh sách sẽ ược chọn ể thay thế.
+ Thuật toán thay thế trang FIFO dễ hiểu, dễ cài ặt. Tuy nhiên khi thực
hiện không phải lúc nào cũng có kết qủa tốt : trang ược chọn ể thay thế có thể là
trang chức nhiều dữ liệu cần thiết, thường xuyên ược sử dụng nên ược nạp sớm,
do vậy khi bị chuyển ra bộ nhớ phụ sẽ nhanh chóng gây ra lỗi trang.
+ Số lượng lỗi trang xảy ra sẽ tăng lên khi số lượng khung trang sử dụng
tăng. Hiện tượng này gọi là nghịch lý Belady.
Ví dụ: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
Sử dụng 3 khung trang, sẽ có 9 lỗi trang phát sinh 1 2 3 4 1 2 5 1 2 3 4 5 1 1 1 4 4 4 5 5 5 5 5 5 2 2 2 1 1 1 1 1 3 3 3 3 3 3 2 2 2 2 2 4 4 * * * * * * * * *
Sử dụng 4 khung trang, sẽ có 10 lỗi trang phát sinh 1 2 3 4 1 2 5 1 2 3 4 5 1 1 1 1 1 1 5 5 5 5 4 4 2 2 2 2 2 2 1 1 1 1 5 3 3 3 3 3 3 2 2 2 2 4 4 4 4 4 4 3 3 3 132 lOMoAR cPSD| 41967345 * * * * * * * * * *
7.2.2.2. Thuật toán tối ưu
- Tiếp cận: Thay thế trang sẽ lâu ược sử dụng nhất trong tương lai.
- Ví dụ: sử dụng 3 khung trang, khởi ầu ều trống
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7
0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0
1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 * * * * * * * * * - Thảo luận:
Thuật toán này bảo ảm số lượng lỗi trang phát sinh là thấp nhất, nó cũng
không gánh chịu nghịch lý Belady, tuy nhiên, ây là một thuật toán không khả thi
trong thực tế, vì không thể biết trước chuỗi truy xuất của tiến trình.
7.2.2.3. Thuật toán “Lâu nhất chưa sử dụng” (Least-recently-used LRU)
- Tiếp cận: Với mỗi trang, ghi nhận thời iểm cuối cùng trang ược
truy cập, trang ược chọn ể thay thế sẽ là trang lâu nhất chưa ược truy xuất.
- Ví dụ: sử dụng 3 khung trang, khởi ầu ều trống
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 2 4 4 4 0 0 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0
1 1 1 3 3 3 2 2 2 2 2 2 2 2 2 7 7 7 * * * * * * * * * * * * - Thảo luận: 133 lOMoARcPSD| 41967345
+ Thuật toán FIFO sử dụng thời iểm nạp ể chọn trang thay thế, thuật toán
tối ưu lại dùng thời iểm trang sẽ ược sử dụng, vì thời iểm này không thể xác ịnh
trước nên thuật toán LRU phải dùng thời iểm cuối cùng trang ược truy xuất –
dùng quá khứ gần ể dự oán tương lai.
+ Thuật toán này òi hỏi phải ược cơ chế phần cứng hỗ trợ ể xác ịnh một
thứ tự cho các trang theo thời iểm truy xuất cuối cùng. Có thể cài ặt theo một trong hai cách:
Sử dụng bộ ếm:
Thêm vào cấu trúc của mỗi phần tử trong bảng trang một trường ghi nhận
thời iểm truy xuất mới nhất, và thêm vào cấu trúc của CPU một bộ ếm. Mỗi
lần có sự truy xuất bộ nhớ, giá trị của counter tăng lên 1.
Mỗi lần thực hiện truy xuất ến một trang, giá trị của counter ược ghi nhận
vào trường thời iểm truy xuất mới nhất của phần tử tương ứng với trang trong bảng trang.
Thay thế trang có giá trị trường thời iểm truy xuất mới nhất là nhỏ nhất. Sử dụng stack:
Tổ chức một stack lưu trữ các số hiệu trang.
Mỗi khi thực hiện một truy xuất ến một trang, số hiệu của trang sẽ ược
xóa khỏi vị trí hiện hành trong stack và ưa lên ầu stack.
Trang ở ỉnh stack là trang ược truy xuất gần nhất, và trang ở áy stack là
trang lâu nhất chưa ược sử dụng.
7.2.2.4. Các thuật toán xấp xỉ LRU
Có ít hệ thống ược cung cấp ủ các hỗ trợ phần cứng ể cài ặt ược thuật toán
LRU thật sự. Tuy nhiên, nhiều hệ thống ược trang bị thêm một bit tham khảo (reference):
- Một reference bit, ược khởi gán là 0, ược gắn với một phần tử trong bảng trang. 134 lOMoAR cPSD| 41967345
- Reference bit của một trang ược phần cứng ặt giá trị 1 mỗi lần trang tương
ứng ược truy cập, và ược phần cứng gán trở về 0 sau từng chu kỳ quy ịnh trước.
- Sau từng chu kỳ quy ịnh trước, kiểm tra giá trị của các reference bit, có
thể xác ịnh ược trang nào ã ược truy xuất ến và trang nào không, sau khi ã kiểm
tra xong, các reference bit ược phần cứng gán trở về 0.
- Với reference bit, có thể biết ược trang nào ã ược truy xuất, nhưng không
biết ược thứ tự truy xuất. Thông tin không ầy ủ này dẫn ến nhiều thuật toán xấp xỉ LRU khác nhau. số hiệu trang valid-invalid bit dirty bit reference bit bit
Hình 7.5. Cấu trúc một phần tử trong bảng trang
a) Thuật toán với các reference bit phụ trợ
* Tiếp cận: Có thể thu thập thêm nhiều thông tin về thứ tự truy xuất hơn
bằng cách lưu trữ các reference bits sau từng khoảng thời gian ều ặn:
- Với mỗi trang, sử dụng thêm 8 bit lịch sử (history) trong bảng trang
- Sau từng khoảng thời gian nhất ịnh (thường là 100 millisecondes), một
ngắt ồng hồ ược phát sinh, và quyền iều khiển ược chuyển cho hệ iều hành. Hệ
iều hành ặt reference bit của mỗi trang vào bit cao nhất trong 8 bit phụ trợ của
trang ó bằng cách ẩy các bit khác sang phải 1 vị trí, bỏ luôn bit thấp nhất.
- Như vậy 8 bit thêm vào này sẽ lưu trữ tình hình truy xuất ến trang trong 8 chu kỳ cuối cùng.
- Nếu giá trị của 8 bit là 00000000, thì trang tương ứng ã không ược dùng
ến suốt 8 chu kỳ cuối cùng, ngược lại nếu nó ược dùng ến ít nhất 1 lần trong mỗi
chu kỳ, thì 8 bit phụ trợ sẽ là 11111111. Một trang mà 8 bit phụ trợ có giá trị
11000100 sẽ ược truy xuất gần thời iểm hiện tại hơn trang có 8 bit phụ trợ là 01110111.
- Nếu xét 8 bit phụ trợ này như một số nguyên không dấu, thì trang LRU
là trang có số phụ trợ nhỏ nhất. 135 lOMoARcPSD| 41967345 * Ví dụ: 0 0 1 0 0 0 1 1 1 0 HR =11000100 HR =11100010 HR =01110001 *
Thảo luận: Số lượng các bit lịch sử có thể thay ổi tùy theo phần
cứng, và phải ược chọn sao cho việc cập nhật là nhanh nhất có thể.
b) Thuật toán “cơ hội thứ hai”
* Tiếp cận: Sử dụng một reference bit duy nhất. Thuật toán cơ sở vẫn là
FIFO, tuy nhiên khi chọn ược một trang theo tiêu chuẩn FIFO, kiểm tra reference bit của trang ó :
- Nếu giá trị của reference bit là 0, thay thế trang ã chọn.
- Ngược lại, cho trang này một cơ hội thứ hai, và chọn trang FIFO tiếp theo.
- Khi một trang ược cho cơ hội thứ hai, giá trị của reference bit ược ặt lại
là 0, và thời iểm vào Ready List ược cập nhật lại là thời iểm hiện tại.
- Một trang ã ược cho cơ hội thứ hai sẽ không bị thay thế trước khi hệ
thống ã thay thế hết những trang khác. Hơn nữa, nếu trang thường xuyên ược sử
dụng, reference bit của nó sẽ duy trì ược giá trị 1, và trang hầu như không bao giờ bị thay thế. * Thảo luận:
Có thể cài ặt thuật toán “cơ hội thứ hai” với một xâu vòng. 136 lOMoARcPSD| 41967345
Hình 7.6. Thuật toán thay thế trang <>
c) Thuật toán “cơ hội thứ hai”nâng cao (Not Recently Used - NRU) *
Tiếp cận: xem các reference bit và dirty bit như một cặp có thứ tự. -
Với hai bit này, có thể có 4 tổ hợp tạo thành 4 lớp sau:
(0,0) không truy xuất, không sửa ổi: ây là trang tốt nhất ể thay thế.
(0,1) không truy xuất gần ây, nhưng ã bị sửa ổi: trường hợp này không thật
tốt, vì trang cần ược lưu trữ lại trước khi thay thế.
(1,0) ược truy xuất gần ây, nhưng không bị sửa ổi: trang có thể nhanh chóng
ược tiếp tục ược sử dụng.
(1,1) ược truy xuất gần ây, và bị sửa ổi: trang có thể nhanh chóng ược tiếp
tục ược sử dụng, và trước khi thay thế cần phải ược lưu trữ lại. -
Lớp 1 có ộ ưu tiên thấp nhất, và lớp 4 có ộ ưu tiên cao nhất. 137 lOMoAR cPSD| 41967345 -
Một trang sẽ thuộc về một trong bốn lớp trên, tuỳ vào reference
bit và dirty bit của trang ó. -
Trang ược chọn ể thay thế là trang ầu tiên tìm thấy trong lớp có ộ
ưu tiên thấp nhất và khác rỗng.
d) Các thuật toán thống kê
* Tiếp cận: sử dụng một biến ếm lưu trữ số lần truy xuất ến một trang, và
phát triển hai thuật toán sau :
- Thuật toán LFU: thay thế trang có giá trị biến ếm nhỏ nhất, nghĩa là trang
ít ược sử dụng nhất.
- Thuật toán MFU: thay thế trang có giá trị biến ếm lớn nhất, nghĩa là trang
ược sử dụng nhiều nhất (most frequently used).
7.3. Cấp phát khung trang
Vấn ề ặt ra là làm thế nào ể cấp phát một vùng nhớ tự do có kích thước cố
ịnh cho các tiến trình khác nhau?
Trong trường hợp ơn giản nhất của bộ nhớ ảo là hệ ơn nhiệm, có thể cấp
phát cho tiến trình duy nhất của người dùng tất cả các khung trang trống.
Vấn ề nảy sinh khi kết hợp kỹ thuật phân trang theo yêu cầu với sự a
chương: cần phải duy trì nhiều tiến trình trong bộ nhớ cùng lúc, vậy mỗi tiến
trình sẽ ược cấp bao nhiêu khung trang.
* Số khung trang tối thiểu:
Với mỗi tiến trình, cần phải cấp phát một số khung trang tối thiểu nào ó ể
tiến trình có thể hoạt ộng. Số khung trang tối thiểu này ược quy ịnh bởi kiến trúc
của của một chỉ thị.Khi một lỗi trang xảy ra trước khi chỉ thị hiện hành hoàn tất,
chỉ thị ó cần ược tái khởi ộng, lúc ó cần có ủ các khung trang ể nạp tất cả các
trang mà một chỉ thị duy nhất có thể truy xuất.
Số khung trang tối thiểu ược qui ịnh bởi kiến trúc máy tính, trong khi số
khung trang tối a ược xác ịnh bởi dung lượng bộ nhớ vật lý có thể sử dụng. 138 lOMoAR cPSD| 41967345
* Các thuật toán cấp phát khung trang Có hai hướng tiếp cận:
- Cấp phát cố ịnh:
- Cấp phát công bằng: nếu có m khung trang và n tiến trình, mỗi tiến trình
ược cấp m /n khung trang.
- Cấp phát theo tỷ lệ: tùy vào kích thước của tiến trình ể cấp phát số khung trang:
si = kích thước của bộ nhớ ảo cho tiến trình pi S = si
m = số lượng tổng cộng khung trang có thể sử dụng
Cấp phát ai khung trang cho tiến trình pi : ai = (si / S) m
- Cấp phát theo ộ ưu tiên: sử dụng ý tưởng cấp phát theo tỷ lệ, nhưng nhưng
số lượng khung trang cấp cho tiến trình phụ thuộc vào ộ ưu tiên của tiến trình,
hơn là phụ thuộc kích thước tiến trình:
Nếu tiến trình pi phát sinh một lỗi trang, chọn một trong các khung trang
của nó ể thay thế, hoặc chọn một khung trang của tiến trình khác với ộ ưu tiên thấp hơn ể thay thế.
* Thay thế trang toàn cục hay cục bộ
Có thể phân các thuật toán thay thế trang thành hai lớp chính:
- Thay thế toàn cục: khi lỗi trang xảy ra với một tiến trình , chọn trang “nạn
nhân” từ tập tất cả các khung trang trong hệ thống, bất kể khung trang ó ang ược
cấp phát cho một tiến trình khác.
- Thay thế cục bộ: yêu cầu chỉ ược chọn trang thay thế trong tập các khung
trang ược cấp cho tiến trình phát sinh lỗi trang.
Một khuyết iểm của thuật toán thay thế toàn cục là các tiến trình không thể
kiểm soát ược tỷ lệ phát sinh lỗi trang của mình. Vì thế, tuy thuật toán thay thế 139 lOMoARcPSD| 41967345
toàn cục nhìn chung cho phép hệ thống có nhiều khả năng xử lý hơn, nhưng nó
có thể dẫn hệ thống ến tình trạng trì trệ toàn bộ (thrashing).
7.3.1. Trì trệ toàn bộ hệ thống (Thrashing)
Nếu một tiến trình không có ủ các khung trang ể chứa những trang cần
thiết cho xử lý, thì nó sẽ thường xuyên phát sinh các lỗi trang, và vì thế phải
dùng ến rất nhiều thời gian sử dụng CPU ể thực hiện thay thế trang. Một hoạt
ộng phân trang như thế ược gọi là sự trì trệ (thrashing). Một tiến trình lâm vào
trạng thái trì trệ nếu nó sử dụng nhiều thời gian ể thay thế trang hơn là ể xử lý.
Hiện tượng trì trệ này ảnh hưởng nghiêm trọng ến hoạt ộng hệ thống, xét tình huống sau:
- Hệ iều hành giám sát việc sử dụng CPU.
- Nếu hiệu suất sử dụng CPU quá thấp, hệ iều hành sẽ nâng mức ộ a chương
bằng cách ưa thêm một tiến trình mới vào hệ thống.
- Hệ thống có thể sử dụng thuật toán thay thế toàn cục ể chọn các trang nạn
nhân thuộc một tiến trình bất kỳ ể có chỗ nạp tiến trình mới, có thể sẽ thay thế
cả các trang của tiến trình ang xử lý hiện hành.
- Khi có nhiều tiến trình trong hệ thống hơn, thì một tiến trình sẽ ược cấp
ít khung trang hơn, và do ó phát sinh nhiều lỗi trang hơn.
- Khi các tiến trình phát sinh nhiều lỗi trang, chúng phải trải qua nhiều thời
gian chờ các thao tác thay thế trang hoàn tất, lúc ó hiệu suất sử dụng CPU lại giảm.
- Hệ iều hành lại quay trở lại bước 1...
Theo kịch bản trên ây, hệ thống sẽ lâm vào tình trạng luẩn quẩn của việc
giải phóng các trang ể cấp phát thêm khung trang cho một tiến trình, và các tiến
trình khác lại thiếu khung trang... và các tiến trình không thể tiếp tục xử lý. Đây
chính là tình trạng trì trệ toàn bộ hệ thống. Khi tình trạng trì trệ này xảy ra, hệ
thống gần như mất khả năng xử lý, tốc ộ phát sinh lỗi trang tăng cao khủng khiếp,
không công việc nào có thể kết thúc vì tất cả các tiến trình ều bận rộn với việc phân trang. 140 lOMoARcPSD| 41967345
Để ngăn cản tình trạng trì trệ này xảy ra, cần phải cấp cho tiến trình các
khung trang cần thiết ể hoạt ộng. Vấn ề cần giải quyết là làm sao biết ược tiến
trình cần bao nhiêu trang?
Mô hình cục bộ ( Locality): Theo lý thuyết cục bộ, thì khi một tiến trình xử
lý, nó có khuynh hướng di chuyển từ nhóm trang cục bộ này ến nhóm trang cục
bộ khác. Một nhóm trang cục bộ là một tập các trang ang ược tiến trình dùng ến
trong một khoảng thời gian. Một chương trình thường bao gồm nhiều nhóm trang
cục bộ khác nhau và chúng có thể giao nhau.
7.3.1.1. Mô hình “tập làm việc” (working set) * Tiếp cận:
Mô hình working set ặt cơ sở trên lý thuyết cục bộ. Mô hình này sử dụng
một tham số , ể ịnh nghĩa một cửa sổ cho working set. Giả sử khảo sát ơn vị
thời gian (lần truy xuất trang) cuối cùng, tập các trang ược tiến trình truy xuất ến
trong lần truy cập cuối cùng này ược gọi là working set của tiến trình tại thời
iểm hiện tại. Nếu một trang ang ược tiến trình truy xuất ến, nó sẽ nằm trong
working set, nếu nó không ược sử dụng nữa , nó sẽ bị loại ra khỏi working set
của tiến trình sau ơn vị thời gian kể từ lần truy xuất cuối cùng ến nó. Như vậy
working set chính là một sự xấp xỉ của khái niệm nhóm trang cục bộ.
Hình 7.7. Mô hình working set
Một thuộc tính rất quan trọng của working set là kích thước của nó. Nếu
tính toán kích thước working set, WSSi, cho mỗi tiến trình trong hệ thống, thì có thể xem như: D = WSSi
với D là tổng số khung trang yêu cầu cho toàn hệ thống. Mỗi tiến trình sử
dụng các trang trong working set của nó, nghĩa là tiến trình i yêu cầu WSSi khung 141 lOMoARcPSD| 41967345
trang. Nếu tổng số trang yêu cầu vượt quá tổng số trang có thể sử dụng trong hệ
thống (D > m), thì sẽ xảy ra tình trạng trì trệ toàn bộ. 142 lOMoAR cPSD| 41967345 * Sử dụng:
Hệ iều hành giám sát working set của mỗi tiến trình và cấp phát cho tiến
trình tối thiểu các khung trang ể chứa ủ working set của nó. Như vậy một tiến
trình mới chỉ có thể ược nạp vào hệ thống khi có ủ khung trang tự do cho working
set của nó. Nếu tổng số khung trang yêu cầu của các tiến trình trong hệ thống
vượt quá các khung trang có thể sử dụng, hệ iều hành chọn một tiến trình ể tạm
dừng, giải phóng bớt các khung trang cho các tiến trình khác hoàn tất. * Thảo luận:
- Chiến lược working set ã loại trừ ược tình trạng trì trệ trong khi vẫn ảm
bảo mức ộ a chương của hệ thống là cao nhất có thể, cho phép sử dụng tối ưu CPU.
- Điểm khó khăn của mô hình này là theo vết của các working set của tiến
trình trong từng thời iểm. Có thể xấp xỉ mô hình working set với một ngắt ồng
hồ sau từng chu kỳ nhất ịnh và một reference bit:
+ Phát sinh một ngắt ồng hồ sau từng T lần truy xuất bộ nhớ.
+ Khi xảy ra một ngắt ồng hồ, kiểm tra các trang có reference bit là 1, các
trang này ược xem như thuộc về working set.
- Một hệ thống sử dụng kỹ thuật phân trang theo yêu cầu thuần túy (một
trang không bao giờ ược nạp trước khi có yêu cầu truy xuất) ể lộ một ặc iểm khá
bất lợi: một số lượng lớn lỗi trang xảy ra khi khởi ộng tiến trình. Tình trạng này
là hậu quả của khuynh hướng ạt tới việc ưa nhóm trang cục bộ vào bộ nhớ. Tình
trạng này cũng có thể xảy ra khi một tiến trình bị chuyển tạm thời ra bộ nhớ phụ,
khi ược tái kích hoạt, tất cả các trang của tiến trình ã ược chuyển lên ĩa phải ược
mang trở lại vào bộ nhớ, và một loạt lỗi trang lại xảy ra. Để ngăn cản tình hình
lỗi trang xảy ra quá nhiều tại thời iểm khởi ộng tiến trình, có thể sử dụng kỹ thuật
tiền phân trang (prepaging): nạp vào bộ nhớ một lần tất cả các trang trong
working set của tiến trình. 143 lOMoARcPSD| 41967345
7.3.2. Tần suất xảy ra lỗi trang
* Tiếp cận: Tần suất lỗi trang rất cao khiến tình trạng trì trệ hệ thống có thể xảy ra.
- Khi tần suất lỗi trang quá cao, tiến trình cần thêm một số khung trang.
- Khi tần suất lỗi trang quá thấp, tiến trình có thể sỡ hữu nhiều khung trang hơn mức cần thiết.
Có thể thiết lập một giá trị chặn trên và chặn dưới cho tần suất xảy ra lỗi
trang, và trực tiếp ước lượng và kiểm soát tần suất lỗi trang ể ngăn chặn tình trang trì trệ xảy ra:
- Nếu tần suất lỗi trang vượt quá chặn trên, cấp cho tiến trình thêm một khung trang.
- Nếu tần suất lỗi trang thấp hơn chặn dưới, thu hồi bớt một khung trang từ tiến trình.
7.4. Tóm tắt
- Các kỹ thuật hỗ trợ các mô hình tổ chức bộ nhớ hiện ại :
+ Swapping: sử dụng thêm bộ nhớ phụ ể lưu trữ tạm các tiến trình ang bị
khóa, nhờ vậy có thể tăng mức ộ a chương của hệ thống với cấu hình máy có
dung lượng bộ nhớ chính thấp.
+ Bộ nhớ ảo: sử dụng kỹ thuật phân trang theo yêu cầu, kết hợp thêm kỹ
thuật swapping ể mở rộng bộ nhớ chính. Tách biệt không gian ịa chỉ và không
gian vật lý, nhờ ó có thể xử lý các chương trình có kích thước lớn hơn bộ nhớ vật lý thật sự
- Khi cài ặt bộ nhớ ảo, phải sử dụng một thuật toán thay thế trang thích hợp
ể chọn các trang bị chuyển tạm thời ra bộ nhớ phụ, dành chỗ trong bộ nhớ chính
cho trang mới. Các thuật toán thay thế thường sử dụng là FIFO, LRU và các
thuật toán xấp xỉ LRU, các thuật toán thống kê NFU, MFU...
- Khi mức ộ a chương tăng cao ến một chừng mực nào ó, hệ thống có thể
lâm vào tình trạng trì trệ do tất cả các tiến trình ều thiếu khung trang. Có thể áp 144 lOMoARcPSD| 41967345
dụng mô hình working set ể dành cho mỗi tiến trình ủ các khung trang cần thiết
tại một thời iểm, từ ó có thể ngăn chặn tình trạng trì trệ xảy ra.
* Củng cố bài học:
Các câu hỏi cần trả lời ược sau bài học này: 1. Bộ nhớ ảo là gì?
2. Sự thật ằng sau ảo giác: giới hạn của bộ nhớ ảo? Chi phí thực hiện?
3. Các vấn ề của bộ nhớ ảo: thay thế trang, cấp phát khung trang ?
4. Mô hình working set: khái niệm, cách tính trong thực tế, sử dụng? * Bài tập:
Bài 1. Khi nào thì xảy ra lỗi trang? Mô tả xử lý của hệ iều hành khi có lỗi trang.
Bài 2. Giả sử có một chuỗi truy xuất bộ nhớ có chiều dài p với n số hiệu
trang khác nhau xuất hiện trong chuỗi. Giả sử hệ thống sử dụng m khung trang
(khởi ộng trống). Với một thuật toán thay thế trang bất kỳ:
- Cho biết số lượng tối thiểu các lỗi trang xảy ra?
- Cho biết số lượng tối a các lỗi trang xảy ra?
Bài 3. Một máy tính 32-bit ịa chỉ, sử dụng một bảng trang nhị cấp. Địa
chỉ ảo ược phân bổ như sau: 9 bit dành cho bảng trang cấp 1, 11 bit cho bảng
trang cấp 2, và cho offset. Cho biết kích thước một trang trong hệ thống, và ịa
chỉ ảo có bao nhiêu trang?
Bài 4. Giả sử ịa chỉ ảo 32-bit ược phân tách thành 4 trường
a,b,c,d. 3 trường ầu tiên ược dùng cho bảng trang tam cấp, trường
thứ 4 dành cho offset. Số lượng trang có phụ thuộc vào cả kích
thước 4 trường này không? Nếu không, những trường nào ảnh
hưởng ến số lượng trang, và những trường nào không?
Bài 5. Một máy tính có 48-bit ịa chỉ ảo, và 32-bit ịa chỉ
vật lý. Kích thước một trang là 8K. Có bao nhiêu phần tử trong một
bảng trang (thông thường)? Trong bảng trang nghịch ảo? 145 lOMoAR cPSD| 41967345
Bài 6. Một máy tính cung cấp cho người dùng một không
gian ịa chỉ ảo 232 bytes. Máy tính này có bộ nhớ vật lý 218 bytes. Bộ
nhớ ảo ược thực hiện với kỹ thuật phân trang, kích thước trang là
4096 bytes. Một tiến trình của người dùng phát sinh ịa chỉ ảo
11123456. Giải thích cách hệ thống chuyển ổi ịa chỉ ảo này thành
ịa chỉ vật lý tương ứng. Phân biệt các thao tác phần mềm và phần cứng.
Bài 7. Giả sử có một hệ thống sử dụng kỹ thuật phân trang
theo yêu cầu. Bảng trang ược lưu trữ trong các thanh ghi. Để xử lý
một lỗi trang tốn 8 miliseconds nếu có sẵn một khung trang trống,
hoặc trang bị thay thế không bị sửa ổi nội dung, và tốn 20
miliseconds nếu trang bị thay thế bị sửa ổi nội dung. Mỗi truy xuất
bộ nhớ tốn 100nanoseconds. Giả sử trang bị thay thế có xác suất bị
sử ổi là 70%. Tỷ lệ phát sinh lỗi trang phải là bao nhiêu ể có thể
duy trì thời gian truy xuất bộ nhớ (effective acess time) không vượt quá 200nanoseconds?
Bài 8. Xét các thuật toán thay thế trang sau ây. Xếp thứ tự
chúng dựa theo tỷ lệ phát sinh lỗi trang của chúng. Phân biệt các
thuật toán chịu ựng nghịch lý Belady và các thuật toán không bị
nghịch lý này ảnh hưởng. a)LRU b)FIFO
c)Chiến lược thay thế tối ưu d)Cơ hội thứ hai
Bài 9. Một máy tính có 4 khung trang. Thời iểm nạp, thời
iểm truy cập cuối cùng, và các reference bit (R), modify (M) của
mỗi trang trong bộ nhớ ược cho trong bảng sau : Trang Nạp Truy cập cuối R M 0 126 279 0 0 1 230 260 1 0 146 lOMoARcPSD| 41967345 2 120 272 1 1 3 160 280 1 1
Trang nào sẽ ược chọn thay thế theo:
a) Thuật toán NRU; b) thuật toán FIFO; c) thuật toán LRU; d) thuật toán "cơ hội thứ 2".
Bài 10. Xét mảng hai chiều A:
var A: array [1 ..100, 1..100] of integer;
Với A[1][1] ược lưu trữ tại vị trí 200, trong bộ nhớ tổ chức theo kỹ thuật
phân trang với kích thước trang là 200. Một tiến trình trong trang 0 (chiếm vị trí
từ 0 ến 199) sẽ thao tác ma trận này; như vậy mỗi chỉ thị sẽ ược nạp từ trang 0.
Với 3 khung trang, có bao nhiêu lỗi trang sẽ phát sinh khi thực hiện vòng lặp sau
ây ể khởi ộng mảng, sử dụng thuật toán thay thế LRU, và giả sử khung trang 1
chứa tiến trình, hai khung trang còn lại ược khởi ộng ở trạng thái trống: a. for j:= 1 to 100 do for
i :=1 to 100 do A[i][j]:= 0; b.
for i :=1 to 100 do for j:=1 to 100 do A[i][j]:= 0;
Bài 11. Xét chuỗi truy xuất bộ nhớ sau:
1, 2 , 3 , 4 , 2 , 1 , 5 , 6 , 2 , 1 , 2 , 3 , 7 , 6 , 3 , 2 , 1 , 2 , 3 , 6
Có bao nhiêu lỗi trang xảy ra khi sử dụng các thuật toán thay thế sau ây,
giả sử có 1, 2, 3, 4, 5, 6, 7 khung trang? a) LRU b) FIFO c) Chiến lược tối ưu
Bài 12. Trong một hệ thống sử dụng kỹ thuật phân trang theo yêu cầu,
xét hai oạn chương trình sau ây: 147 lOMoARcPSD| 41967345 const N = 1024*1024 var A,B : array [1..N] of integer; [Program 1] for i:=1 to N do A[i]:=i; for i:=1 to N do B[A[i]]:=random(N); [Program 2] for i:=1 to N do A[i]:= random(N); for i:=1 to N do B[A[i]]:=i;
Bài 13. Giả sử có một máy tính ồ chơi sử dụng 7-bit ịa chỉ. Kích thước
một trang là 8 bytes, và hệ thống sử dụng một bảng trang nhị cấp, dùng 2-bit làm
chỉ mục ến bảng trang cấp 1 , 2-bit làm chỉ mục ến bảng trang cấp 2. Xét một
tiến trình sử dụng các ịa chỉ trong những phạm vi sau : 0..15, 21..29, 94..106, và 115..127.
a) Vẽ chi tiết toàn bộ bảng trang cho tiến trình này
b) Phải cấp phát cho tiến trình bao nhiêu khung trang, giả sử tất cả ều
nằm trong bộ nhớ chính?
c) Bao nhiêu bytes ứng với các vùng phân mảnh nội vi trong tiến trình này?
d) Cần bao nhiêu bộ nhớ cho bảng trang của tiến trình này?
Bài 14. Giả sử có một máy tính sử dụng 16-bit ịa chỉ. Bộ nhớ ảo ược
thực hiện với kỹ thuật phân oạn kết hợp phân trang, kích thước tối a của một
phân oạn là 4096 bytes. Bộ nhớ vật lý ược phân thành các khung trang có kích thước 512 bytes. 148 lOMoARcPSD| 41967345 a)
Thể hiện cách ịa chỉ ảo ược phân tích ể phản ánh segment, page, offset b)
Xét một tiến trình sử dụng các miền ịa chỉ sau, xác ịnh số hiệu
segment và số hiệu page tương ứng trong segment mà chương trình truy cập ến:
350..1039, 3046..3904, 7100..9450, 33056..39200, 61230..63500 c)
Bao nhiêu bytes ứng với các vùng phân mảnh nội vi trong tiến trình này? d)
Cần bao nhiêu bộ nhớ cho bảng phân oạn và bảng trang của tiến trình này? 149 lOMoARcPSD| 41967345
Chương 8 HỆ THỐNG QUẢN LÝ TẬP TIN
Trong hầu hết các ứng dụng, tập tin là thành phần chủ yếu. Cho dù mục
tiêu của ứng dụng là gì nó cũng phải bao gồm phát sinh và sử dụng thông tin.
Thông thường ầu vào của các ứng dụng là tập tin và ầu ra cũng là tập tin cho việc
truy xuất của người sử dụng và các chương trình khác sau này. Chương này giới
thiệu những khái niệm và cơ chế của hệ thống quản lý tập tin thông qua các nội dung như sau: - Các khái niệm cơ bản
- Mô hình tổ chức và quản lý các tập tin
Bài học này giúp chúng ta hiểu ược tập tin là gì, cách thức tổ chức và quản
lý tập tin như thế nào, từ ó giúp chúng ta hiểu ược các cơ chế cài ặt hệ thống tập
tin trên các hệ iều hành.
Bài học này òi hỏi những kiến thức về: các thao tác với tập tin, một số tính
chất của tập tin ở góc ộ người sử dụng và những kiến thức về cấu trúc dữ liệu
cũng như về kiến trúc máy tính phần cấu trúc và tổ chức lưu trữ của ĩa.
8.1. Các khái niệm cơ bản
8.1.1. Bộ nhớ ngoài
Máy tính phải sử dụng thiết bị có khả năng lưu trữ trong thời gian dài (long-term) vì:
Phải chứa những lượng thông tin rất lớn (giữ vé máy bay, ngân hàng...).
Thông tin phải ược lưu giữ một thời gian dài trước khi xử lý.
Nhiều tiến trình có thể truy cập thông tin cùng lúc.
Giải pháp là sử dụng các thiết bị lưu trữ bên ngoài gọi là bộ nhớ ngoài.
8.1.2. Tập tin và thư mục - Tập tin: 150 lOMoARcPSD| 41967345
Tập tin là ơn vị lưu trữ thông tin của bộ nhớ ngoài. Các tiến trình có thể ọc
hay tạo mới tập tin nếu cần thiết. Thông tin trên tập tin là vững bền không bị ảnh
hưởng bởi các xử lý tạo hay kết thúc các tiến trình, chỉ mất i khi user thật sự
muốn xóa. Tập tin ược quản lý bởi hệ iều hành. - Thư mục:
Để lưu trữ dãy các tập tin, hệ thống quản lý tập tin cung cấp thư mục, mà
trong nhiều hệ thống có thể coi như là tập tin.
8.1.3. Hệ thống quản lý tập tin
Các tập tin ược quản lý bởi hệ iều hành với cơ chế gọi là hệ thống quản lý
tập tin. Bao gồm: cách hiển thị, các yếu tố cấu thành tập tin, cách ặt tên, cách
truy xuất, cách sử dụng và bảo vệ tập tin, các thao tác trên tập tin.
Cách tổ chức thư mục, các ặc tính và các thao tác trên thư mục.
8.2. Mô hình tổ chức và quản lý các tập tin
8.2.1. Mô hình a,Tập tin: * Tên tập tin:
Tập tin là một cơ chế trừu tượng và ể quản lý mỗi ối tượng phải có một
tên. Khi tiến trình tạo một tập tin, nó sẽ ặt một tên, khi tiến trình kết thúc tập tin
vẫn tồn tại và có thể ược truy xuất bởi các tiến trình khác với tên tập tin ó.
Cách ặt tên tập tin của mỗi hệ iều hành là khác nhau, a số các hệ iều hành
cho phép sử dụng 8 chữ cái ể ặt tên tập tin như ctdl, caycb, tamhghau v.v…,
thường thường thì các ký tự số và ký tự ặc biệt cũng ược sử dụng như baitap2,…
Hệ thống tập tin có thể có hay không phân biệt chữ thường và chữ hoa. Ví
dụ: UNIX phân biệt chữ thường và hoa còn MS-DOS thì không phân biệt.
Nhiều hệ thống tập tin hỗ trợ tên tập tin gồm 2 phần ược phân cách bởi
dấu ‘.’ mà phần sau ược gọi là phần mở rộng. Ví dụ: vidu.txt. Trong MSDOS
tên tập tin có từ 1 ến 8 ký tư, phần mở rộng có từ 1 ến 3 ký tự. Trong UNIX có
thể có nhiều phân cách như prog.c.Z. 151 lOMoARcPSD| 41967345
Một số kiểu mở rộng thông thường là:
.bak, .bas, .bin, .c, .dat, .doc, .ftn, .hlp, .lib, .obj, .pas, .tex, .txt.
Trên thực tế phần mở rộng có hữu ích trong một số trường hợp, ví dụ như
có những trình dịch C chỉ nhận biết các tập tin có phần mở rộng là .C
* Cấu trúc của tập tin: Gồm 3 loại:
- Dãy tuần tự các byte không cấu trúc : hệ iều hành không biết nội dung
của tập tin: MS-DOS và UNIX sử dụng loại này.
- Dãy các record có chiều dài cố ịnh.
- Cấu trúc cây: gồm cây của những record, không cần thiết có cùng ộ dài,
mỗi record có một trường khóa giúp cho việc tìm kiếm nhanh hơn. 152 lOMoARcPSD| 41967345 * Kiểu tập tin :
Nếu hệ iều hành nhận biết ược loại tập tin, nó có thể thao tác một cách hợp
lý trên tập tin ó. Các hệ iều hành hỗ trợ cho nhiều loại tập tin khác nhau bao gồm
các kiểu như : tập tin thường, thư mục, tập tin có ký tự ặc biệt, tập tin khối.
- Tập tin thường: là tập tin text hay tập tin nhị phân chứa thông tin của người sử dụng.
- Thư mục: là những tập tin hệ thống dùng ể lưu giữ cấu trúc của hệ thống tập tin.
- Tập tin có ký tự ặc biệt: liên quan ến nhập xuất thông qua các thiết bị
nhập xuất tuần tự như màn hình, máy in, mạng.
- Tập tin khối: dùng ể truy xuất trên thiết bị ĩa.
- Tập tin thường ược chia làm hai loại là tập tin văn bản và tập tin nhị phân.
Tập tin văn bản chứa các dòng văn bản cuối dòng có ký hiệu enter. Mỗi
dòng có ộ dài có thể khác nhau. Ưu iểm của kiểu tập tin này là nó có thể hiển thị,
in hay soạn thảo với một editor thông thường. Đa số các chương trình dùng tập
tin văn bản ể nhập xuất, nó cũng dễ dàng làm ầu vào và ầu ra cho cơ chế pipeline.
Tập tin nhị phân có cấu trúc khác tập tin văn bản. Mặc dù về mặt kỹ thuật ,
tập tin nhị phân gồm dãy các byte, nhưng hệ iều hành chỉ thực thi tập tin ó nếu
nó có cấu trúc úng. Ví dụ một một tập tin nhị phân thi hành ược của UNIX.
Thường thường nó bao gồm năm thành phần: header, text, data, relocation bits,
symbol table. Header bắt ầu bởi byte nhận diện cho biết ó là tập tin thi hành. Sau
ó là 16 bit cho biết kích thước các thành phần của tập tin, ịa chỉ bắt ầu thực hiện
và một số bit cờ. Sau header là dữ liệu và text của tập tin. Nó ược nạp vào bộ
nhớ và ịnh vị lại bởi những bit relocation. Bảng symbol ược dùng ể debug.
Một ví dụ khác là tập tin nhị phân kiểu archive. Nó chứa các thư viện ã ược
dịch nhưng chưa ược liên kết. Bao gồm một header cho biết tên, ngày tạo, người
sở hữu, mã bảo vệ, và kích thước… 153 lOMoARcPSD| 41967345
Hình 8.1. Cấu trúc tập tin nhị phân trong UNIX
* Truy xuất tập tin:
Tập tin lưu trữ các thông tin. Khi tập tin ược sử dụng, các thông tin này
ược ưa vào bộ nhớ của máy tính. Có nhiều cách ể truy xuất chúng. Một số hệ
thống cung cấp chỉ một phương pháp truy xuất, một số hệ thống khác, như IBM
chẳng hạn cho phép nhiều cách truy xuất.
Kiểu truy xuất tập tin ơn giản nhất là truy xuất tuần tự. Tiến trình ọc tất cả
các byte trong tập tin theo thứ tự từ ầu. Các trình soạn thảo hay trình biên dịch
cũng truy xuất tập tin theo cách này. Hai thao tác chủ yếu trên tập tin là ọc và
ghi. Thao tác ọc sẽ ọc một mẫu tin tiếp theo trên tập tin và tự ộng tăng con trỏ
tập tin. Thao tác ghi cũng tương tự như vậy. Tập tin có thể tự khởi ộng lại từ vị
trí ầu tiên và trong một số hệ thống tập tin cho phép di chuyển con trỏ tập tin i
tới hoặc i lui n mẫu tin. 154 lOMoARcPSD| 41967345
Truy xuất kiểu này thuận lợi cho các loại băng từ và cũng là cách truy xuất
khá thông dụng. Truy xuất tuần tự cần thiết cho nhiều ứng dụng. Có hai cách
truy xuất. Cách truy xuất thứ nhất thao tác ọc bắt ầu ở vị trí ầu tập tin, cách thứ
hai có một thao tác ặc biệt gọi là SEEK cung cấp vị trí hiện thời làm vị trí bắt ầu.
Sau ó tập tin ược ọc tuần tự từ vị trí bắt ầu.
Hình 8.2. Truy xuất tuần tự trên tập tin
Một kiểu truy xuất khác là truy xuất trực tiếp. Một tập tin có cấu trúc là
các mẫu tin logic có kích thước bằng nhau, nó cho phép chương trình ọc hoặc
ghi nhanh chóng mà không cần theo thứ tự. Kiểu truy xuất này dựa trên mô hình
của ĩa. Đĩa cho phép truy xuất ngẫu nhiên bất kỳ khối dữ liệu nào của tập tin.
Truy xuất trực tiếp ược sử dụng trong trường hợp phải truy xuất một khối lượng
thông tin lớn như trong cơ sở dữ liệu chẳng hạn. Ngoài ra còn có một số cách
truy xuất khác dự trên kiểu truy xuất này như truy xuất theo chỉ mục...
* Thuộc tính tập tin:
Ngoài tên và dữ liệu, hệ iều hành cung cấp thêm một số thông tin cho tập tin gọi là thuộc tính.
Các thuộc tính thông dụng trong một số hệ thống tập tin: Tên thuộc tính Ý nghĩa Bảo vệ
Ai có thể truy xuất ược và bằng cách nào Mật khẩu
Mật khẩu cần thiết ể truy xuất tập tin Người tạo
Id của người tạo tập tin Người sở hữu
Người sở hữu hiện tại Chỉ ọc
0 là ọc ghi, 1 là chỉ ọc 155 lOMoAR cPSD| 41967345 Aån
0 là bình thường, 1 là không hiển thị khi liệt kê Hệ thống
0 là bình thường, 1 là tập tin hệ thống Lưu trữ
0 ã uợc backup, 1 cần backup ASCII/binary
0 là tập tin văn bản, 1 là tập tin nhị phân Truy xuất ngẫu nhiên
0 truy xuất tuần tự, 1 là truy xuất ngẫu nhiên Temp
0 là bình thường, 1 là bị xóa khi tiến trình kết thúc Khóa
0 là không khóa, khác 0 là khóa Độ dài của record Số byte trong một record Vị trí khóa
Offset của khóa trong mỗi record Giờ tạo
Ngày và giờ tạo tập tin
Thời gian truy cập cuối cùng Ngày và giờ truy xuất tập tin gần nhất
Thời gian thay ổi cuối cùng
Ngày và giờ thay ổi tập tin gần nhất Kích thước hiện thời Số byte của tập tin Kích thước tối a.
Số byte tối a của tập tin
Bảng 8.1. Một số thuộc tính thông dụng của tập tin b, Thư mục:
* Hệ thống thư mục theo cấp bậc:
Một thư mục thường thường chứa một số entry, mỗi entry cho một tập tin.
Mỗi entry chứa tên tập tin, thuộc tính và ịa chỉ trên ĩa lưu dữ liệu hoặc một entry
chỉ chứa tên tập tin và một con trỏ, trỏ tới một cấu trúc, trên ó có thuộc tính và
vị trí lưu trữ của tập tin.
Khi một tập tin ược mở, hệ iều hành tìm trên thư mục của nó cho tới khi
tìm thấy tên của tập tin ược mở. Sau ó nó sẽ xác ịnh thuộc tính cũng như ịa chỉ
lưu trữ trên ĩa và ưa vào một bảng trong bộ nhớ. Những truy xuất sau ó thực hiện trong bộ nhớ chính. 156 lOMoARcPSD| 41967345
Số lượng thư mục trên mỗi hệ thống là khác nhau. Thiết kế ơn giản nhất là
hệ thống chỉ có thư mục ơn (còn gọi là thư mục một cấp), chứa tất cả các tập tin
của tất cả người dùng, cách này dễ tổ chức và khai thác nhưng cũng dễ gây ra
khó khăn khi có nhiều người sử dụng vì sẽ có nhiều tập tin trùng tên. Ngay cả
trong trường hợp chỉ có một người sử dụng, nếu có nhiều tập tin thì việc ặt tên
cho một tập tin mới không trùng lắp là một vấn ề khó.
Cách thứ hai là có một thư mục gốc và trong ó có nhiều thư mục con, trong
mỗi thư mục con chứa tập tin của người sử dụng (còn gọi là thư mục hai cấp),
cách này tránh ược trường hợp xung ột tên nhưng cũng còn khó khăn với người
dùng có nhiều tập tin. Người sử dụng luôn muốn nhóm các ứng dụng lại một cách logic.
Từ ó, hệ thống thư mục theo cấp bậc (còn gọi là cây thư mục) ược hình
thành với mô hình một thư mục có thể chứa tập tin hoặc một thư mục con và cứ
tiếp tục như vậy hình thành cây thư mục như trong các hệ iều hành DOS, Windows, v. v...
Ngoài ra, trong một số hệ iều hành nhiều người dùng, hệ thống còn xây
dựng các hình thức khác của cấu trúc thư mục như cấu trúc thư mục theo ồ thị
có chu trình và cấu trúc thư mục theo ồ thị tổng quát. Các cấu trúc này cho phép
các người dùng trong hệ thống có thể liên kết với nhau thông qua các thư mục chia sẻ. 157 lOMoARcPSD| 41967345
Hình 8.3. Hai dạng cấu trúc thư mục
Hình 8.4. Hệ thống thư mục theo cấp bậc. * Đường dẫn:
Khi một hệ thống tập tin ược tổ chức thành một cây thư mục, có hai cách
ể xác ịnh một tên tập tin. Cách thứ nhất là ường dẫn tuyệt ối, mỗi tập tin ược gán một
ường dẫn từ thư mục gốc ến tập tin. Ví dụ: 158 lOMoARcPSD| 41967345 /usr/ast/mailbox.
Dạng thứ hai là ường dẫn tương ối, dạng này có liên quan ến một khái
niệm là thư mục hiện hành hay thư mục làm việc. Người sử dụng có thể quy ịnh
một thư mục là thư mục hiện hành. Khi ó ường dẫn không bắt ầu từ thư mục gốc
mà liên quan ến thư mục hiện hành. Ví dụ, nếu thư mục hiện hành là /usr/ast thì
tập tin với ường dẫn tuyệt ối /usr/ast/mailbox có thể ược dùng ơn giản là mailbox.
Trong phần lớn hệ thống, mỗi tiến trình có một thư mục hiện hành riêng,
khi một tiến trình thay ổi thư mục làm việc và kết thúc, không có sự thay ổi ể lại
trên hệ thống tập tin. Nhưng nếu một hàm thư viện thay ổi ường dẫn và sau ó
không ổi lại thì sẽ có ảnh hưởng ến tiến trình.
Hầu hết các hệ iều hành ều hỗ trợ hệ thống thư mục theo cấp bậc với hai
entry ặc biệt cho mỗi thư mục là "." và "..". "." chỉ thư mục hiện hành, ".." chỉ thư mục cha.
8.2.2. Các chức năng * Tập tin:
- Tạo: Một tập tin ược tạo chưa có dữ liệu. Mục tiêu của chức năng này là
thông báo cho biết rằng tập tin ã tồn tại và thiết lập một số thuộc tính.
- Xóa: Khi một tập tin không còn cần thiết nữa, nó ược xóa ể tăng dung
lượng ĩa. Một số hệ iều hành tự ộng xoá tập tin sau một khoảng thời gian n ngày.
- Mở: Trước khi sử dụng một tập tin, tiến trình phải mở nó. Mục tiêu của
mở là cho phép hệ thống thiết lập một số thuộc tính và ịa chỉ ĩa trong bộ nhớ ể tăng tốc ộ truy xuất.
- Đóng: Khi chấm dứt truy xuất, thuộc tính và ịa chỉ trên ĩa không cần dùng
nữa, tập tin ược óng lại ể giải phóng vùng nhớ. Một số hệ thống hạn chế tối a số
tập tin mở trong một tiến trình.
- Đọc: Đọc dữ liệu từ tập tin tại vị trí hiện thời của ầu ọc, nơi gọi sẽ cho
biết cần bao nhiêu dữ liệu và vị trí của buffer lưu trữ nó. 159 lOMoAR cPSD| 41967345
- Ghi: Ghi dữ liệu lên tập tin từ vị trí hiện thời của ầu ọc. Nếu là cuối tập
tin,kích thước tập tin sẽ tăng lên, nếu ang ở giữa tập tin, dữ liệu sẽ bị ghi chồng lên.
- Thêm: Gần giống như WRITE nhưng dữ liệu luôn ược ghi vào cuối tập tin.
- Tìm: Dùng ể truy xuất tập tin ngẫu nhiên. Khi xuất hiện lời gọi hệ thống,
vị trí con trỏ ang ở vị trí hiện hành ược di chuyển tới vị trí cần thiết. Sau ó dữ
liệu sẽ ược ọc ghi tại vị trí này.
- Lấy thuộc tính: Lấy thuộc tính của tập tin cho tiến trình
- Thiết lập thuộc tính: Thay ổi thuộc tính của tập tin sau một thời gian sử dụng.
- Đổi tên: Thay ổi tên của tập tin ã tồn tại. * Thư mục:
- Tạo: Một thư mục ược tạo, nó rỗng, ngoại trừ "." và ".." ược ặt tự ộng bởi hệ thống.
- Xóa: Xoá một thư mục, chỉ có thư mục rỗng mới bị xóa, tư mục chứa "."
và ".." coi như là thư mục rỗng.
- Mở thư mục: Thư mục có thể ược ọc. Ví dụ ể liệt kê tất cả tập tin trong
một thư mục, chương trình liệt kê mở thư mục và ọc ra tên của tất cả tập tin chứa
trong ó. Trước khi thư mục ược ọc, nó phải ược mở ra trước.
- Đóng thư mục: Khi một thư mục ã ược ọc xong, phải óng thư mục ể giải phóng vùng nhớ.
- Đọc thư mục: Lệnh này trả về entry tiếp theo trong thư mục ã mở. Thông
thường có thể ọc thư mục bằng lời gọi hệ thống READ, lệnh ọc thư mục luôn
luôn trả về một entry dưới dạng chuẩn .
- Đổi tên: Cũng như tập tin, thư mục cũng có thể ược ổi tên. 160 lOMoARcPSD| 41967345
- Liên kết: Kỹ thuật này cho phép một tập tin có thể xuất hiện trong nhiều
thư mục khác nhau. Khi có yêu cầu, một liên kết sẽ ược tạo giữa tập tin và một
ường dẫn ược cung cấp.
- Bỏ liên kết: Nếu tập tin chỉ còn liên kết với một thư mục, nó sẽ bị loại bỏ
hoàn toàn khỏi hệ thống, nếu nhiều thì nó bị giảm chỉ số liên kết.
* Câu hỏi kiểm tra kiến thức:
1. Tập tin là gì? Thư mục là gì? Tại sao phải quản lý tập tin và thư mục?
2. Tập tin có những ặc tính gì? Những ặc tính nào là quan trọng? Tại sao?
3. Nêu các chức năng của tập tin và thư mục. 161 lOMoARcPSD| 41967345
Chương 9 CÁC PHƯƠNG PHÁP CÀI ĐẶT HỆ THỐNG QUẢN LÝ TẬP TIN
Người sử dụng thì quan tâm ến cách ặt tên tập tin, các thao tác trên tập tin,
cây thư mục... Nhưng ối người cài ặt thì quan tâm ến tập tin và thư mục ược lưu
trữ như thế nào, vùng nhớ trên ĩa ược quản lý như thế nào và làm sao cho toàn
bộ hệ thống làm việc hữu hiệu và tin cậy. Hệ thống tập tin ược cài ặt trên ĩa. Để
gia tăng hiệu quả trong việc truy xuất, mỗi ơn vị dữ liệu ược truy xuất gọi là một
khối. Một khối dữ liệu bao gồm một hoặc nhiều sector. Bộ phận tổ chức tập tin
quản lý việc lưu trữ tập tin trên những khối vật lý bằng cách sử dụng các bảng
có cấu trúc. Chương này sẽ giới thiệu các phương pháp tổ chức quản lý tập tin
trên bộ nhớ phụ thông qua các nội dung như sau: - Bảng quản lý thư mục, tập tin
- Bảng phân phối vùng nhớ - Tập tin chia sẻ - Quản lý ĩa
- Độ an toàn của hệ thống tập tin
Bài học này giúp chúng ta nắm ặc iểm cũng như ưu và khuyết iểm của các
phương pháp tổ chức quản lý tập tin trên ĩa và một số vấn ề liên quan khác nhờ
ó có thể hiểu ược cách các hệ iều hành cụ thể quản lý tập tin như thế nào.
Bài học này òi hỏi những kiến thức về: mô hình tổ chức các tập tin và thư
mục cũng và một số cấu trúc dữ liệu. 162 lOMoARcPSD| 41967345
9.1. Bảng quản lý thư mục, tập tin
9.1.1. Khái niệm
Trước khi tập tin ược ọc, tập tin phải ược mở, ể mở tập tin hệ thống phải
biết ường dẫn do người sử dụng cung cấp và ược ịnh vị trong cấu trúc ầu vào thư
mục (directory entry). Directory entry cung cấp các thông tin cần thiết ể tìm kiếm
các khối. Tuỳ thuộc vào mỗi hệ thống, thông tin là ịa chỉ trên ĩa của toàn bộ tập
tin, số hiệu của khối ầu tiên, hoặc là số I-node.
9.1.2. Cài ặt
Bảng này thường ược cài ặt ở phần ầu của ĩa. Bảng là dãy các phần tử có
kích thước xác ịnh, mỗi phần tử ược gọi là một entry. Mỗi entry sẽ lưu thông tin
về tên, thuộc tính, vị trí lưu trữ... của một tập tin hay thư mục.
Ví dụ quản lý thư mục trong CP/M:
Hình 9.1. (thiếu nội dung)
9.2. Bảng phân phối vùng nhớ
9.2.1. Khái niệm
Bảng này thường ược sử dụng phối hợp với bảng quản lý thư mục tập tin,
mục tiêu là cho biết vị trí khối vật lý của một tập tin hay thư mục nào ó nói khác
i là lưu giữ dãy các khối trên ĩa cấp phát cho tập tin lưu dữ liệu hay thư mục. Có
một số phương pháp ược cài ặt.
9.2.2 Các phương pháp
* Định vị liên tiếp
Lưu trữ tập tin trên dãy các khối liên tiếp. 163 lOMoARcPSD| 41967345
Phương pháp này có 2 ưu iểm: thứ nhất, dễ dàng cài ặt; thứ hai, dễ dàng
thao tác vì toàn bộ tập tin ược ọc từ ĩa bằng thao tác ơn giản không cần ịnh vị lại.
Phương pháp này cũng có 2 khuyết iểm: không linh ộng trừ khi biết trước
kích thước tối a của tập tin; sự phân mảnh trên ĩa, gây lãng phí lớn.
* Định vị bằng danh sách liên kết:
Hình 9.2. Định vị bằng danh sách liên kết
Mọi khối ều ược cấp phát, không bị lãng phí trong trường hợp phân mảnh
và directory entry chỉ cần chứa ịa chỉ của khối ầu tiên.
Tuy nhiên khối dữ liệu bị thu hẹp lại và truy xuất ngẫu nhiên sẽ chậm.
Danh sách liên kết sử dụng index: 164 lOMoARcPSD| 41967345
Hình 9.3. Bảng chỉ mục của danh sách
Tương tự như hai nhưng thay vì dùng con trỏ thì dùng một bảng index. Khi
ó toàn bộ khối chỉ chứa dữ liệu. Truy xuất ngẫu nhiên sẽ dễ dàng hơn. Kích thước
tập tin ược mở rộng hơn. Hạn chế là bản này bị giới hạn bởi kích thước bộ nhớ. * I-nodes
Một I-node bao gồm hai phần. Phần thứ nhất là thuộc tính của tập tin. Phần
này lưu trữ các thông tin liên quan ến tập tin như kiểu, người sở hữu, kích thước,
v.v... Phần thứ hai chứa ịa chỉ của khối dữ liệu. Phần này chia làm hai phần nhỏ.
Phần nhỏ thứ nhất bao gồm 10 phần tử, mỗi phần tử chứa ịa chỉ khối dữ liệu của
tập tin. Phần tử thứ 11 chứa ịa chỉ gián tiếp cấp 1 (single indirect), chứa ịa chỉ
của một khối, trong khối ó chứa một bảng có thể từ 210 ến 232 phần tử mà mỗi
phần tử mới chứa ịa chỉ của khối dữ liệu. Phần tử thứ 12 chứa ịa chỉ gián tiếp
cấp 2 (double indirect), chứa ịa chỉ của bảng các khối single indirect. Phần tử
thứ 13 chứa ịa chỉ gián tiếp cấp 3 (double indirect), chứa ịa chỉ của bảng các khối double indirect. 165 lOMoARcPSD| 41967345
Cách tổ chức này tương ối linh ộng. Phương pháp này hiệu quả trong
trường hợp sử dụng ể quán lý những hệ thống tập tin lớn. Hệ iều hành sử dụng
phương pháp này là Unix (Ví dụ: BSD Unix)
Hình 9.4. Cấu trúc của I-node
9.3. Tập tin chia sẻ
Khi có nhiều người sử dụng cùng làm việc trong một ề án, họ cần chia sẻ
các tập tin. Cách chia sẻ thông thường là tập tin xuất hiện trong các thư mục là
như nhau nghĩa là một tập tin có thể liên kết với nhiều thư mục khác nhau.
Để cài ặt ược, khối ĩa không ược liệt kê trong thư mục mà ược thay thế
bằng một cấu trúc dữ liệu, thư mục sẽ trỏ tới cấu trúc này. Một cách khác là hệ
thống tạo một tập tin mới có kiểu LINK, tập tin mới này chỉ chứa ường dẫn của
tập tin ược liên kết, khi cần truy xuất sẽ dựa trên tập tin LINK ể xác ịnh tập tin
cần truy xuất, phương pháp này gọi là liên kết hình thức. Mổi phương pháp ều có
những ưu và khuyết iểm riêng. 166 lOMoARcPSD| 41967345
Ở phương pháp thứ nhất hệ thống biết ược có bao nhiêu thư mục liên kết
với tập tin nhờ vào chỉ số liên kết. Ở phương pháp thứ hai khi loại bỏ liên kết
hình thức, tập tin không bị ảnh hưởng.
Hình 9.5.Cấu trúc quản lý tập tin chia sẻ
9.4. Quản lý ĩa (bộ nhớ ngoài)
Tập tin ược lưu trữ trên ĩa, do ó việc quản trị ĩa là hết sức quan trọng trong
việc cài ặt hệ thống tập tin. Có hai phương pháp lưu trữ: một là chứa tuần tự
trên n byte liên tiếp, hai là tập tin ược chia làm thành từng khối. Cách thứ nhất
không hiệu quả khi truy xuất những tập tin có kích thước lớn, do ó hầu hết các
hệ thống tập tin ều dùng khối có kích thước cố ịnh.
9.4.1. Kích thước khối
Một vấn ề ặt ra là kích thước khối phải bằng bao nhiêu. Điều này phụ thuộc
vào tổ chức của ĩa như số sector, số track, số cylinder. Nếu dùng một cylinder
cho một khối cho một tập tin thì theo tính toán sẽ lãng phí ến 97% dung lượng 167 lOMoARcPSD| 41967345
ĩa. Nên thông thường mỗi tập tin thường ược lưu trên một số khối. Ví dụ một ĩa
có 32768 byte trên một track, thời gian quay là 16.67 msec, thời gian tìm kiếm
trung bình là 30 msec thì thời gian tính bằng msec ể ọc một khối kích thước k byte là: 30 + 8.3 + (k/32768) x 16.67
Từ ó thống kê ược kích thước khối thích hợp phải < 2K .
Thông thường kích thưóc khối là 512, 1K hay 2K.
9.4.2. Lưu giữa các khối trống
Có hai phương pháp: Một là: sử dụng danh sách liên kết của khối ĩa. Mỗi
khối chứa một số các ịa chỉ các khối trống. Ví dụ một khối có kích thước 1 K có
thể lưu trữ ược 511 ịa chỉ 16 bit. Một ĩa 20M cần khoảng 40 khối; Hai là, sử dụng
bitmap. Một ĩa n khối sẽ ược ánh xạ thành n bit với giá trị 1 là còn trống, giá trị
0 là ã lưu dữ liệu. Như vậy một ĩa 20M cần 20K bit ể lưu trữ nghĩa là chỉ có
khoảng 3 khối. Phương pháp thứ hai này thường ược sử dụng hơn.
Hình 9.6. Hai phương pháp lưu giữ khối trống 168 lOMoARcPSD| 41967345
9.5. Độ an toàn của hệ thống tập tin
Một hệ thống tập tin bị hỏng còn nguy hiểm hơn máy tính bị hỏng vì những
hư hỏng trên thiết bị sẽ ít chi phí hơn là hệ thống tập tin vì nó ảnh hưởng ến các
phần mềm trên ó. Hơn nữa hệ thống tập tin không thể chống lại ược những hư
hỏng do phần cứng gây ra, vì vậy chúng phải ược cài ặt một số chức năng ể bảo vệ.
9.5.1. Quản lý khối bị hỏng
Đĩa thường có những khối bị hỏng trong quá trình sử dụng ặc biệt ối với ĩa
cứng vì khó kiểm tra ược hết tất cả.
Có hai giải pháp: phần mềm và phần cứng.
Phần cứng là dùng một sector trên ĩa ể lưu giữ danh sách các khối bị hỏng.
Khi bộ kiểm soát tực hiện lần ầu tiên, nó ọc những khối bị hỏng và dùng một
khối thừa ể lưu giữ. Từ ó không cho truy cập những khối hỏng nữa.
Phần mềm là hệ thống tập tin xây dựng một tập tin chứa các khối hỏng.
Kỹ thuật này loại trừ chúng ra khỏi danh sách các khối trống, do ó nó sẽ không
ược cấp phát cho tập tin. 9.5.2. Backup
Mặc dù có các chiến lưọc quản lý các khối hỏng, nhưng một công việc hết
sức quan trọng là phải backup tập tin thường xuyên.
Tập tin trên ĩa mềm ược backup bằng cách chép lại toàn bộ qua một ĩa khác.
Dữ liệu trên ĩa cứng nhỏ thì ược backup trên các băng từ.
Đối với các ĩa cứng lớn, việc backup thường ược tiến hành ngay trên nó.
Một chiến lược dể cài ặt nhưng lãng phí một nữa ĩa là chia ĩa cứng làm hai phần
một phần dữ liệu và một phần là backup. Mỗi tối, dữ liệu từ phần dữ liệu sẽ ược chép sang phần backup. 169 lOMoARcPSD| 41967345
Hình 9.7. Backup
9.5.3. Tính không ổi của hệ thống tập tin
Một vấn ề nữa về ộ an toàn là tính không ổi. Khi truy xuất một tập tin,
trong quá trình thực hiện, nếu có xảy ra những sự cố làm hệ thống ngừng hoạt
ộng ột ngột, lúc ó hàng loạt thông tin chưa ược cập nhật lên ĩa. Vì vậy mỗi lân
khởi ộng, hệ thống sẽ thực hiện việc kiểm tra trên hai phần khối và tập tin. Việc
kiểm tra thực hiện, khi phát hiện ra lỗi sẽ tiến hành sữa chữa cho các trường hợp cụ thể: 170 lOMoARcPSD| 41967345
Hình 9.8 Trạng thái của hệ thống tập tin
Chương 10 GIỚI THIỆU MỘT SỐ HỆ THỐNG TẬP TIN
Chương này giới thiệu các phương pháp tổ chức quản lý tập tin của một
số hệ iều hành sau: 171 lOMoARcPSD| 41967345 - MS-DOS - Windows 95 - Windows NT - Unix
Bài học này giúp chúng ta hiểu ược cách một số hệ iều hành thông dụng
quản lý tập tin như thế nào.
Bài học này òi hỏi những kiến thức từ hai bài học trước. 10.1. MS-DOS
10.1.1. Đặc iểm
Hệ thống tập tin của MS-DOS bắt nguồn từ hệ thống tập tin của hệ iều
hành CP/M. Nó có những ặc iểm như sau:
- Hệ thống cây thư mục.
- Khái niệm thư mục hiện hành.
- Đường dẫn tương ối và ường dẫn tuyệt ối. - Thư mục "." và "..".
- Có tập tin thiết bị và tập tin khối. - Tên tập tin 8+3. - Đường dẫn \.
- Không phân biệt chữ thường và chữ hoa.
- Không có khái niệm người sở hữu.
- Không có khái niệm nhóm và bảo vệ. - Không có liên kết.
- Không có mount hệ thống tập tin.
- Có thuộc tính của tập tin. 172 lOMoARcPSD| 41967345
10.1.2. Cài ặt
Cài ặt trên ĩa mềm cũng tương tự như trên ĩa cứng, những trên ĩa cứng phức
tạp hơn. Phần này khảo sát trên ĩa cứng. Lúc ó, hệ iều hành MSDOS ược cài ặt
trên một partition. Sector ầu tiên của partitionbootsector.
Sau bootsector là FAT (File Allocation Table), lưu giữ tất cả không gian
trên ĩa theo phương pháp danh sách liên kết có chỉ mục. Thông thường có từ hai
FAT trở lên ể phòng hờ. Mỗi entry của FAT quản lý một khối (còn gọi là cluster
ược ánh số bắt ầu từ 2) trên ĩa. Kích thước khối ược lưu trong bootsector thông
thường từ 1 ến 8 sector. Có hai loại FAT là FAT 12 và FAT 16. FAT 12 có thể
quản lý ược 4096 khối còn FAT 16 có thể quản lý 64 K khối trên một partition. 173 lOMoARcPSD| 41967345
Hình 10.1. FAT trong MS-DOS
Giá trị trong mỗi phần tử (entry) có ý nghĩa như sau : 0 Cluster còn trống (0)002 - (F)FEF
Cluster chứa dữ liệu của các tập tin (F)FF0 - (F)FF6 Dành riêng, không dùng (F)FF7 Cluster hỏng (F)FF8 - (F)FFF
Cluster cuối cùng của chuỗi
Có một ánh xạ một một giữa entry và khối ngoại trừ hai entry ầu tiên, dùng cho ĩa. 174 lOMoARcPSD| 41967345
Khi hệ thống mở một tập tin, MS-DOS tìm trong bảng mô tả tập tin trong
PSP, sau ó kiểm tra tên tập tin xem có phải là con, lpt, ... tiếp theo kiểm tra các
ường dẫn ể xác ịnh vị trí trong bảng thư mục. Tên tập tin (8bytes) Phần mở rộng (3bytes) Thuộc tính (1 byte) A-D- V-S-H-R Dành riêng (10bytes) Giờ (2bytes) Ngày (2bytes) Khối ầu tiên (2bytes)
Kích thước tập tin (4bytes)
Bảng 10.1 Một entry của thư mục trong MS-DOS
Bảng thư mục nằm ngay sau FAT, và mỗi entry là 32 byte. Mười một byte
ầu tiên mô tả tên và phần mở rộng (không lưu trữ dấu chấm phân cách). Sau ó là
byte thuộc tính, với giá trị : 1: Tập tin chỉ ọc 2: Tập tin ẩn 4: Tập tin hệ thống 8: Nhãn ĩa 16: Thư mục con 32: Tập tin chưa backup
Byte thuộc tính có thể ược ọc ghi trong quá trình sử dụng. Tiếp theo là 10
byte trống dàng riêng sử dụng sau này. Sau ó là 4 byte lưu trữ giờ, ngày với 6 bit
cho giây, 4 bit cho giờ, 5 bit cho ngày, 4 bit cho tháng và 7 bit cho năm (từ 1980).
Hai byte kế tiếp chứa số hiệu của khối ầu tiên (khối trong MSDOS còn ược gọi
là cluster) và bốn byte sau cùng lưu trữ kích thước của tập tin. Ví dụ: 175 lOMoARcPSD| 41967345
Trên ĩa 1.44Mb, ược format dưới hệ iều hành MS-DOS gồm có 2880 sector:
- Sector ầu tiên là bootsector, bao gồm bảng tham số vật lý của ĩa và
chương trình khởi ộng của hệ iều hành (nếu có).
- 18 sector tiếp theo là FAT (FAT12), gồm 2 bảng, mỗi bảng 9 sector. Ba
bytes ầu tiên của FAT lưu số hiệu loại ĩa.(240, 255, 255).
- 14 sector kế tiếp chứa bảng thư mục còn gọi là root directory entry table(RDET)
- Các sector còn lại dùng ể lưu dữ liệu (1 cluser = 1 sector).
10.2. Windows95
10.2.1. Bộ quản lý cài ặt hệ thống tập tin (IFS)
Hệ thống tập tin của Windows 95 là 32-bit và cho phép những hệ thống
tập tin khác sử dụng ược trên hệ thống này. Nó cũng làm cho máy tính nhanh
hơn và linh hoạt hơn, có nghĩa là bạn có nhiều vùng hơn ể cô lập xử lý các vấn ề.
Bộ quản lý IFS quản lý các thao tác bên trong của hệ thống tập tin ược cài
ặt. Các thành phần của IFS bao gồm IFSHLP.SYS và IFSMGR.VXD.
Hình 10.2. Cấu trúc của bộ quản lý hệ thống thông tin ược cài ặt 176 lOMoARcPSD| 41967345
Trong Windows 95, hệ thống tập tin là một thành phần của ring 0 của hệ
iều hành. Sau ây là các bước cài ặt của hệ thống tập tin trong Windows 95:
- VFAT- Bảng ịnh vị file ảo cho truy cập file 32-bit. -
CDFS- hệ thống tập tin của CD-ROM (thay thế MSCDEX) -
Bộ ịnh hướng lại-Sử dụng cho truy xuất mạng.
Người sử dụng cũng có thể cài ặt hệ thống tập tin khác. Ví dụ hệ thống tập
tin cài ặt trên hệ thống Windows 95 có thể xử lý trên những hệ thống tập tin trên
những hệ iều hành khác như Macintosh hay UNIX.
Bộ quản lý IFS quản lý vận chuyển nhập xuất tập tin cho chế ộ bảo vệ của
bộ ịnh hướng lại, mode bảo vệ của server, VFAT, CDFS, và hệ thống tập tin của
MS-DOS. Những hệ thống khác có thể ược thêm vào trong tương lai. 10.2.2. VFAT
VFAT là hệ thống tập tin FAT MS-DOS ảo 32 bit cung cấp truy xuất 32
bit cho Windows 95. VFAT.VXD là driver iều khiển quá trình ảo hóa và sử dụng
mã 32 bit cho tất cả các truy xuất tập tin. 177 lOMoARcPSD| 41967345
Hình 10.3. Tổ chức VFAT
VFAT chỉ cung cấp truy xuất ảo cho những volume ĩa cứng có các thành
phần truy xuất ĩa 32 bit ược cài ặt. Những dạng volume khác sẽ có cài ặt hệ thống
tập tin cho chính nó. Ví dụ hệ thống tập tin của CD-ROM là CDFS.
VFAT ảo hóa ĩa và sử dụng mã 32 bit ể truy xuất tập tin. Ngoài ra nó có những chức năng sau : - Đăng ký driver. -
Gửi và lập hàng ợi cho yêu cầu nhập/xuất -
Gửi những thông báo ến driver khi cần thiết. -
Cung cấp những dịch vụ cho driver ể ịnh vị bộ nhớ và hoàn tất yêu cầu nhập/xuất.
Theo dõi volume luôn hiện hữu khi có một thiết bị thông tin có thể ược
loại bỏ. Nó có trách nhiệm ảm bảo rằng thông tin úng với thiết bị cũng như là
kiểm tra và báo cáo những thông tin không thích hợp ược loại bỏ hay chèn vào.
Nó thực hiện theo hai cách : -
Đối với ĩa không bảo vệ, theo dõi volume sẽ ghi một ID duy nhất
vào ầu FAT của ĩa. ID này khác với số serial của volume. -
Trên ĩa có bảo vệ, theo dõi volume lưu trữ nhãn ĩa, số serial và khối tham số của BIOS.
Bộ iều khiển mô tả kiểu (TSD)
TSD làm việc với những thiết bị ược mô tả. Ví dụ, ĩa mềm và cứng là một
kiểu iều khiển nhưng ĩa CD là kiểu khác. TSD lam cho các yêu cầu nhập/xuất có
hiệu lực, chuyển ổi những yêu cầu logic thành yêu cầu vật lý, và thông báo khi
yêu cầu ã hoàn tất. Có thể xem TSD như một. bộ dịch giữa bộ iều khiển vật lý
và bộ quản trị nhập/xuất. 178 lOMoARcPSD| 41967345 10.2.3. VCACHE
Vcache là vùng bộ nhớ mode bảo vệ ược sử dụng bởi các bộ iều khiển hệ
thống tập tin ở chế ộ bảo vệ (ngoại trừ CDFS): VFAT, VREDIR, NWREDIR.
VCACHE ược cài ặt tương tự như Win 3.11. Bộ iều khiển này thay thế cho phần
mềm SMARTDrive disk cache 16-bit ở mode thực của MSDOS và Win3.1. Đặc
iểm của VCACHE là thuật toán thông minh hơn SMARTDrive trong lưu trữ
thông tin nhập và xuất từ bộ iều khiển ĩa.VCACHE cũng quản lý vùng lưu trữ cho CDFS và NWREDIR 32-bit.
Việc sử dụng VCACHE là phụ thuộc với thiết bị. Ví dụ VCACHE dùng ể
truy xuất ĩa cứng khác với VCACE truy xuất CD-ROM. Tất cả bộ iều khiển hệ
thống tập tin của Windows 95 trừ CDFS ều sử dụng mode bảo vệ ể ọc buffer.
CDFS cung cấp cơ chế riêng. VFAT dùng VCACHE ể giảm bớt việc ghi.
Bộ iều khiển cổng ược thiết kế ể cung cấp những truy xuất cho adapter. 10.2.4. SCSI
Trong Windows 95, lớp SCSI là trung gian giữa lớp TSD và bộ iều khiển
cổng. Có ba lớp SCSI ược mô tả dưới ây: 179 lOMoARcPSD| 41967345
Bộ dịch SCSI làm việc với tất cả những thiết bị SCSI như ĩa cứng, CDROM.
Bộ dịch chịu trách nhiệm xây dựng khối mô tả lệnh SCSI cho những lớp của
thiết bị SCSI và thực hiện tìm lỗi ở cấp thiết bị.
* Bộ quản trị SCSI:
Bộ quản trị SCSI quản lý việc giao tiếp giữa bộ dịch SCSI và bộ iều khiển
miniport. Bộ iều khiển cổng SCSI khởi ộng bộ iều khiển mimiport, chuyển ổi
dạng yêu cầu nhập/xuất, thực hiện những thao tác giao tiếp với bộ iều khiển
miniport. Khi liên kết với nó, bộ quản trị SCSI cung cấp cùng chức năng như
Windows 95 chuẩn hoặc bộ iều khiển Fast Disk cũng như quan tâm ến những lớp cấp cao hơn.
* Bộ iều khiển miniport:
Làm việc với tập hợp những adapter SCSI ược mô tả. Bộ iều khiển phụ
thuộc vào những thủ tục lớp bên dưới ể khởi ộng adapter, quản lý ngắt, chuyển
những yêu cầu nhập/xuất cho thiết bị, và thực hiện những khôi phục lỗi ở mức
adapter. Khi kết hợp với bộ quản lý SCSI, nó cung cấp cùng những chức năng
như bộ iều khiển cổng chuẩn của Windows 95.
Hình 10.4. Kiến trúc ASPI
Bộ ánh xạ chương trình giao tiếp SCSI cao cấp (ASPI) của Windows 95
là APIX.VXD, cung cấp hỗ trợ mode bảo vệ cho những thiết bị và chương trình 180 lOMoARcPSD| 41967345
cần giao tiếp ASPI. Bộ quản lý ASPI cung cấp những giao tiếp giữa bộ iều khiển
thiết bị và adapter chuẩn và thiết bị SCSI ược nối trên adapter chủ.
Bộ iều khiển ASPI gọi bộ quản trị ASPI. Bộ quản trị ASPI chuyển lời gọi cho
CDB (Command Descriptor Khối) gọi tới những thành phần SCSI. Bộ quản trị
ASPI cần thiết cho những trường hợp sau ây : - Nhiều adapter chủ.
- Đĩa cứng SCSI với SCSI ID khác 0 hay 1.
- SCSI tape, máy in, máy vẽ, máy quét. 10.2.5. CDFS
Hình 10.5. Kiến trúc của CDFS
CDFS thay thế cho VFAT trong iều khiển thiết bị CD-ROM. Chức năng
của CDFS tương tự như VFAT cho ĩa cứng. Các thành phần khác ều tương thích
với version của CD-ROM. Một yêu cầu nhập/xuất tập tin trên CD-ROM ược
thực hiện bởi một trong bốn cách sau -
Bộ iều khiển IDE hỗ trợ mode bảo vệ : ESDI_506.PDR. -
Bộ iều khiển SCSI hỗ trợ bộ iều khiển miniport mode bảo vệ. 181 lOMoARcPSD| 41967345 -
Bộ iều khiển ưu tiên hỗ trợ những bộ iều khiển ở mode bảo vệ
ược liệt kê trong tập tin ADAPTER.INF. -
Bộ iều khiển thiết bị CD-ROM ở mode thực sử dụng FAT MS-
DOS và MSCDEX như hệ thống tập tin mở rộng CD-ROM cho FAT.
CDFS sử dụng bộ lưu trữ chia sẻ với VCACHE.
Hỗ trợ tên tập tin dài: (LFN)
Windows 95 cho phép ặt tên tập tin dài không còn bị giới hạn bởi 8.3 nữa.
Tuy nhiên, mỗi lần tạo(LFN), một tên 8.3 ược tự ộng gán cho nó.
Một LFN có thể có tới 256 ký tự bao gồm luôn cả khoảng trắng. Đường
dẫn có thể lên ến 260 ký tự. Việc gán tên 8.3 cho LFN theo quy tắc sau :
- Bỏ tất cả những ký tự ặc biệt sau : \ ? : * “ < > |
- Lấy 6 ký tự ầu tiên của LFN thêm dấu ~ và một số bắt ầu từ 1 ến 9, nếu
không ủ thì chỉ lấy 5 ký tự với số từ 10 ến 99 v.v...
- Đối với phần mở rộng, sử dụng 3 ký tự hợp lệ ầu tiên sau dấu chấm cuối
cùng. Nếu không có dấu chấm thì không có phần mở rộng.
Khi sao chép tập tin dưới MS-DOS, LFN sẽ mất i, chỉ còn lại tên 8.3 mà
thôi. Nếu tập tin ược tạo dưới MS-DOS thì LFN cũng chính là tên ó. Cũng có
thể sử dụng LFN trong ứng dụng MS-DOS nhưng khi ó, tên tập tin phải ược ặt
trong nháy kép. LFN sử dụng vùng dành riêng của FAT. Chương trình dùng phần
dành riêng của FAT ể tìm kiếm thông tin LFN.
10.3. WINDOWNS NT
Hệ iều hành WindowsNT hỗ trợ nhiều loại hệ thống tập tin bao gồm FAT
trên MS-DOS và Windows95 và OS/2. Tuy nhiên nó cũng có hệ thống tập tin riêng, ó là NTFS.
10.3.1. Đặc iểm của NTFS
NTFS là một hệ thống tập tin mạnh và linh ộng, những ặc iểm nổi bật là: - Khả năng phục hồi 182 lOMoARcPSD| 41967345 - An toàn
- Quản lý ược ĩa dung lượng lớn và kích thước tập tin lớn. - Quản lý hiệu quả.
10.3.2. Cấu trúc tập tin và volume của NTFS
NTFS sử dụng những khái niệm sau: Sector, cluster, volume
Cluster là ơn vị ịnh vị cơ bản trong NTFS. Kích thước tập tin tối a trong
NTFS là 232 cluster, tương ương 248 bytes. Sự tương ứng giữa kích thước volume và cluster như hình sau:
Hình 10.6. Windows NTFS Partition và kích thước cluster.
Cấu trúc volume của NTFS :
Hình 10.7. Tổng quan volume NTFS
Bao gồm bốn vùng. Vùng thứ nhất là các sector khởi ộng của partition (có
thể ến 16 sectors) bao gồm các thông tin về cấu trúc của volume, cấu trúc của hệ
thống tập tin cũng như những thông tin và mã nguồn khởi ộng. Vùng tiếp theo
là bảng Master File (MFT) lưu các thông tin về tất cả tập tin và thư mục trên
volume NTFS này cũng như thông tin về các vùng trống. Sau vùng MFT là vùng
các tập tin hệ thống có kích khoảng 1Mb bao gồm: - MFT2 : bản sao của MFT
- Log file: thông tin về các giao tác dùng cho việc phục hồi. 183 lOMoARcPSD| 41967345
- Cluster bitmap: biểu diễn thông tin lưu trữ của các cluster
- Bảng ịnh nghĩa thuộc tính: ịnh nghĩa các kiểu thuộc tính hỗ trợ cho volume ó.
MFT ược tổ chức thành nhiều dòng. Mỗi dòng mô tả cho một tập tin hoặc
một thư mục trên volume. Nếu kích thước tập tin nhỏ thì toàn bộ nội dung của
tập tin ược lưu trong dòng này. mỗi dòng cũng lưu những thuộc tính cho tập tin
hay thư mục mà nó quản lý. Kiểu thuộc tính Mô tả Thông tin chuẩn
Bao gồm các thuộc tính truy xuất (chỉ ọc, ọc/ghi,...),
nhãn thời gian, chỉ số liên kết Danh sách thuộc
sử dụng khi tất cả thuộc tính vượt quá 1 dòng của MFT tính Tên tập tin Mô tả an toàn
thông tin về người sở hữu và truy cập Dữ liệu Chỉ mục gốc dùng cho thư mục Chỉ mục ịnh vị dùng cho thư mục thông tin volume
như tên version và tên volume Bitmap
hiện trạng các dòng trong MFT
Hình 10.2. Các kiểu thuộc tính của tập tin và thư mục của Windows NTFS 10.4. UNIX
10.4.1. Hệ thống tập tin của Unix
Một tập tin ược mở với lời gọi hệ thống OPEN, với tham số ầu tiên cho
biết ường dẫn và tên tập tin , tham số thứ hai cho biết tập tin ược mở ể ọc, ghi
hay vừa ọc vừa ghi. Hệ thống kiểm tra xem tập tin có tồn tại không. Nếu có, nó
kiểm tra bit quyền ể xem có ược quyền truy cập không, nếu có hệ thống sẽ trả về
một số dương nhỏ gọi là biến mô tả tập tin cho nơi gọi. Nếu không nó sẽ trả về –1. 184 lOMoARcPSD| 41967345
Khi một tiến trình bắt ầu, nó luôn có ba giá trị của biến mô tả tập tin: 0 cho
nhập chuẩn, 1 cho xuất chuẩn và 2 cho lỗi chuẩn. Tập tin ược mở ầu tiên sẽ có
giá trị là 3 và sau ó là 4 … Khi tập tin óng, biến mô tả tập tin cũng ược giải phóng.
Có hai cách mô tả tên tập tin trong UNIX. Cách thứ nhất là dùng ường dẫn
tuyệt ối, tập tin ược truy cập từ thư mục gốc. Thứ hai là dùng khái niệm thư mục
làm việc hay thư mục hiện hành trong ường dẫn tương ối.
UNIX cung cấp ặc tính LINK, cho phép nhiều người sử dụng cùng dùng
chung một tập tin, hay còn gọi là chia sẻ tập tin. Ví dụ như hình sau, fred và lisa
cùng làm việc trong cùng một ề án, họ cần truy cập tập tin lẫn nhau. Giả sử fred
cần truy cập tập tin x của lisa, anh ta sẽ tạo một entry mới trong thư mục của anh
ta và sau ó có thể dùng x với nghĩa là /usr/lisa/x.
Hình 10.8. Liên kết trong UNIX
Ngoài ra UNIX cho phép một ĩa có thể ược mount thành một thành phần
của hệ thống cây thư mục của một ĩa khác. 185 lOMoARcPSD| 41967345
Hình 10.9. Mount trong UNIX
Một ặc tính thú vị khác của hệ thống tập tin của UNIX là khóa (locking).
Trong một số ứng dụng, một số tiến trình có thể sử dụng cùng một tập tin cùng
lúc. Có hai loại khóa là chia sẻ hay loại trừ. Nếu tập tin ã chứa khóa chia sẻ thì
có thể ặt thêm một khóa chia xẻ nữa, nhưng không thể ặt một khoá loại trừ nhưng
nếu ã ược ặt khóa loại trừ thì không thể ặt thêm khóa nữa. Vùng khóa có thể ược ghi chồng.
10.4.2. Cài ặt hệ thống tập tin của Unix
Hệ thống tập tin của UNIX thông thường ược cài ặt trên ĩa như ở hình sau:
Hình 10.10. Tổ chức hệ thống tập tin của UNIX Khối
0 thường chứa mã khởi ộng của hệ thống.
Khối 1 gọi là khối ặc biệt (super block), nó lưu giữ các thông tin quan trọng
về toàn bộ hệ thống tập tin, bao gồm:
- Kích thước của toàn bộ hệ thống tập tin.
- Địa chỉ của khối dữ liệu ầu tiên. 186 lOMoAR cPSD| 41967345
- Số lượng và danh sách các khối còn trống.
- Số lượng và danh sách các I-node còn trống.
- Ngày super block ược cập nhật cuối cùng.
- Tên của hệ thống tập tin.
Nếu khối này bị hỏng, hệ thống tập tin sẽ không truy cập ược. Có rất nhiều
trình ứng dụng sử dụng thông tin lưu trữ trong super block. Vì vậy một bản sao
super block của hệ thống tập tin gốc ược ặt trong RAM ể tăng tốc ộ truy xuất ĩa.
Việc cập nhật super block sẽ ược thực hiện ngay trong RAM và sau ó mới ghi xuống ĩa.
Sau khối ặc biệt là các I-node, ược ánh số từ một cho tới tối a. Mỗi I-node
có ộ dài là 64 byte và mô tả cho một tập tin duy nhất (chứa thuộc tính và ịa chỉ
khối lưu trữ trên ĩa của tập tin).
Sau phần I-node là các khối dữ liệu. Tất cả tập tin và thư mục ều ược lưu trữ ở ây.
Một entry của directory có 16 byte, trong ó 14 byte là tên của tập tin và 2
byte là ịa chỉ của I-node. Để mở một tập tin trong thư mục làm việc, hệ thống chỉ
ọc thư mục, so sánh tên ược tìm thấy trong mỗi entry cho ến khi tìm ược, từ ó
xác ịnh ược chỉ số I-node và ưa vào bộ nhớ ể truy xuất.
Tập tin ược tạo hay tăng kích thước bằng cách sử dụng thêm các khối từ
danh sách các khối còn trống. Ngược lại, khối ược giải phóng sẽ trả về danh sách
khối trống khi xóa tập tin. Super block sẽ chứa ịa chỉ của 50 khối trống. Trong ó
ịa chỉ cuối cùng chứa ịa chỉ của một khối chứa ịa chỉ của 50 khối trống kế tiếp
và cứ tiếp tục như thế. Unix sử dụng khối trống trong super block trước. Khi
khối trống cuối cùng trong super block ược sử dụng, 50 khối trống kế tiếp sẽ ược
ọc vào trong super block. Ngược lại, khi một khối ược giải phóng, ịa chỉ của nó
sẽ ược thêm vào danh sách của super block. Khi ã ủ 50 ịa chỉ trong super block,
khối trống kế tiếp sẽ ược dùng ể lưu trữ 50 ịa chỉ khối trống ang ặt trong super block thay cho super block. * Bài tập 187 lOMoARcPSD| 41967345 Bài 1:
Cho dãy byte của FAT12 như sau (bắt ầu từ ầu):
240 255 255 0 64 0 9 112 255 255 143 0 255 255 255
Cho biết những phần tử nào của FAT có giá trị ặc biệt, ý nghĩa của phần tử ó.
Nếu sửa lại phần tử 5 là FF0 thì dãy byte của FAT12 này có nội dung như thế nào ?
Bài 2:
Biết giá trị(dưới dạng thập phân) trong một buffer (mỗi phần tử 1
byte) lưu nội dung của FAT12 như sau (bắt ầu từ phần tử 0):
240 255 255 255 79 0 5 240 255 247 255 255
Cho biết giá trị của từng phần tử trong FAT (dưới dạng số thập phân)
Bài 3:
Chép 1 tập tin kích thước là 3220 bytes lên một ĩa 1.44Mb còn trống
nhưng bị hỏng ở sector logic 33. Cho biết giá trị từng byte của Fat (thập
phân) từ byte 0 ến byte 14 . Bài 4:
Giả sử một ĩa mềm có 2 side, mỗi side có 128 track, mỗi track có 18
sector. Thư mục gốc của ĩa có tối a là 251 tập tin (hoặc thư mục). 188 lOMoARcPSD| 41967345
Một cluster = 2 sector. Đĩa sử dụng Fat 12. Hỏi muốn truy xuất cluster 10
thì phải ọc những sector nào ? Bài 5:
Hiện trạng của FAT12 và RDET (mỗi entry chỉ gồm tên tập tin và
cluster ầu tiên) của một ĩa như sau :
240 255 255 247 79 0 6 0 0 255 159 0 10 240 255 255 127 255 VD TXT 3 LT DOC 7 THO DAT 8
Cho biết hiện trạng của FAT12 và RDET sau khi xoá tập tin vd.txt
và chép vào tập tin bt.cpp có kích thước 1025 bytes ( giả sử 1 cluster = 1 sector)
Bài 6:
Một tập tin ược lưu trên ĩa tại những khối theo thứ tự sau :
20, 32, 34, 39, 52, 63, 75, 29, 37, 38, 47, 49, 56, 68, 79, 81, 92, 106,
157, 159, 160, 162, 163, 267, 269, 271, 277, 278, 279, 380, 381, 482, 489, 490, 499.
Vẽ I_node của tập tin này, giả sử mỗi khối chỉ chứa ược 3 phần tử.
NHÀ XUẤT BẢN ĐẠI HỌC THÁI NGUYÊN
Địa chỉ: Phường Tân Thịnh - Thành phố Thái Nguyên - Tỉnh Thái Nguyên
Điện thoại: 0280 3840023; Fax: 0280 3840017
Website: nxb.tnu.edu.vn * E-mail: nxb.dhtn@gmail.com
NÔNG MINH NGỌC (Chủ biên), NGUYỄN VĂN HUY GIÁO TRÌNH 189 lOMoARcPSD| 41967345
NGUYÊN LÝ HỆ ĐIỀU HÀNH
Chịu trách nhiệm xuất bản:
PGS.TS. NGUYỄN ĐỨC HẠNH
Giám ốc - Tổng biên tập Biên tập: TRỊNH THANH ĐIỆP
Thiết kế bìa: NGUYỄN VĂN HƯNG Trình bày:
NGUYỄN THỊ THÙY DƯƠNG Sửa bản in: PHẠM VĂN VŨ
ISBN: 978-604-915-375-4
In 500 cuốn, khổ 17 x 24 cm, tại Công ty TNHH In và Thương mại Trường Xuân
(Địa chỉ: Khu X1, Phạm Hùng, Từ Liêm, Hà Nội). Giấy phép xuất bản số
19282016/CXBIPH/01-67/ĐHTN. Quyết ịnh xuất bản số: 104/QĐ-NXBĐHTN. In
xong và nộp lưu chiểu quý II năm 2016. 190