điều hành được nạp tại segment có mức đặc quyền truy cập là 0.
Mức 1: là mức của phần mềm hệ thống quản lý thiết bị và cổng phần
cứng. Segment nhớ được gán mức này chứa các chương trình hệ thống của
BIOS và DOS/ Windows.
Mức 2: chứa các thủ tục thư viện, có thể chia sẻ cho nhiều chương
trình đang chạy. Chương trình của người sử dụng có thể gọi các các thủ tục
và đọc dữ liệu ở mức này nhưng không thể modify nó.
Mức 3: chương trình của người sử dụng chạy tại mức này, đây là mức
có độ ưu tiên thấp nhất.
Khi chương trình cần truy xuất vào một đoạn nhớ nào đó trên bộ nhớ thì vi
xử lý sẽ dựa vào giá trị mức ưu tiên tại RPL và DPL để quyết định có cho phép
chương trình truy xuất vào đoạn nhớ hay không. Trong trường hợp này Intel 80386
công nhận ba mức ưu tiên sau đây:
Mức ưu tiên hiện tại CPL (Current Privilege Level): là mức ưu tiên
của chương trình hay tác vụ đang chạy. CPL được lưu trữ tại bit 0 và bit 1
của các thanh ghi đoạn CS và SS. Thông thường giá trị của CPL bằng giá trị
mức ưu tiên của đoạn mã lệnh chứa chương trình đang chạy. Giá trị của CPL
có thể bị thay đổi nếu điều khiển chương trình được chuyển đến một đoạn
mã lệnh có độ ưu tiên khác.
Mức ưu tiên bộ mô tả DPL (Descriptor Privilege Level): là mức ưu
tiên của một đoạn. DPL được lưu trữ tại trường DPL của các bộ mô tả đoạn.
Nếu chương trình đang chạy tìm cách truy cập một đoạn nhớ, vi xử lý sẽ so
sánh DPL với CPL và RPL của bộ chọn đoạn.
Mức ưu tiên được yêu cầu RPL (Peqest Privilege Level): là giá trị
được ghi tại bít 0 và bít 1 trong bộ chọn đoạn. Vi xử lý sẽ so sánh RPL với
CPL để kiểm tra quyền truy cập vào một đoạn. Khi CPL có giá trị cho phép
chương trình truy cập một đoạn, nhưng giá trị trong RPL không có mức ưu
tiên tương ứng thì chương trình cũng không được phép tuy cập đoạn. Điều
này có nghĩa là nếu RPL của bộ chọn đoạn có giá trị lớn hơn CPL, thì RPL
sẽ ghi chồng lên CPL.
Khi một chương trình có yêu cầu truy cập vào một đoạn nhớ nào đó, thì bộ
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
, P
3
cần được
nạp vào bộ nhớ chính, không gian địa chỉ bộ nhớ chính gồm có 6 phân trang
(paging), còn được gọi là khung trang (frame), còn trống:
Trường hợp a, là trường hợp phân trang đơn: trong trường hợp này tất cả
4 page của tiến trình đều được nạp vào bộ nhớ. Rõ ràng sẽ là lãng phí bộ nhớ nếu
biết rằng tiến trình này chỉ cần nạp vào bộ nhớ 2 trang P
0
, P
2
3
Các page của
tiến trình
(a)
(b)
0
1
2
3
5
4
0
1
2
3
5
4
0
1
2
3
0
1
2
3
P
2
P
trang. a: nạp tất cả các page của tiến trình vào b
ộ nhớ. b: chỉ nạp
page 0 và page 2 vào bộ nhớ.
Valid/ Invalid
Frame#
Frame#
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
hoạt động được, mặc dầu trên bộ nhớ chính còn một vài frame còn trống. Rõ ràng
trong trường hợp này hệ điều hành đã tiết kiệm được không gian bộ nhớ chính và
nhớ đó mà hệ điều hành có thể nạp vào bộ nhớ nhiều tiến trình hơn và cho phép các
tiến trình này hoạt động đồng thời với nhau. Các page của tiến trình chưa được nạp
vào bộ nhớ sẽ được lưu trữ tại một không gian đặc biệt trên đĩa (thường là trên
HDD), không gian đĩa này được gọi là không gian bộ nhớ ảo, một cách chính xác
thì không gian bộ nhớ ảo này chứa tất cả các page của một tiến trình. Như vậy PCT
trở lại bộ nhớ tại một thời điểm thích hợp sau này.
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
3. Cập nhật PCT của tiến trình có page vừa bị swap out.
4. Nạp trang vừa tìm thấy ở trên (bước 1) vào frame trống ở trên (bước
2).
5. Cập nhật lại bảng trang (PCT) của tiến trình.
6. Tái kích hoạt tiến trình để tiến trình tiếp tục hoạt động.
Xử lý lỗi trang là một trong những nhiệm vụ quan trọng và phức tạp của hệ
thống và hệ điều hành. Để xử lý lỗi trang hệ thống phải tạm dừng các thao tác hiện
tại, trong trường hợp này hệ thống phải lưu lại các thông tin cần thiết như: con trỏ
lệnh, nội dung của các thanh ghi, các không gian địa chỉ bộ nhớ, …, các thông tin
này là cơ sở để hệ thống tái kích hoạt tiến trình bị tạm dừng trước đó khi nó đã
hoàn thành việc xử lý lỗi trang.
Khi xử lý lỗi trang, trong trường hợp hệ thống không còn frame trống hệ
điều hành phải chú ý đến các vấn đề sau:
Nên chọn page nào trong số các page trên bộ nhớ chính để swap out:
Về vấn đề này chúng ta đã biết hệ điều hành sẽ áp dụng một thuật toán thay page cụ
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
a
c
k
.
c
o
m
này được gọi là bít neo. Như vậy các thuật toán thay trang sẽ không xem xét đến
các page được đánh dấu neo khi cần phải đưa một trang nào đó ra đĩa.
Phải tránh được trường hợp hệ thống xảy ra hiện tượng “trì trệ hệ
thống”: Trì trệ hệ thống là hiện tượng mà hệ thống luôn ở trong tình trạng xử lý lỗi
trang, tức là đa phần thời gian xử lý của processor đều dành cho việc xử lý lỗi
trang của hệ điều hành. Hiện tượng này có thể được mô tả như sau: khi xử lý lỗi
trang trong trường hợp trên bộ nhớ chính không còn frame trống, trong trường hợp
này hệ điều hành phải chọn một page nào đó, ví dụ P
3
, để swap out nó, để lấy frame
trống đó, để nạp page vừa có yêu cầu nạp, để khắc phục lỗi trang. Nhưng khi vừa
khắc phục lỗi trang này thì hệ thống lại xảy ra lỗi trang mới do hệ thống cần truy
xuất dữ liệu ở trang P
3
, hệ điều hành lại phải khắc phục lỗi trang này, và hệ điều
hành phải swap out một page nào đó, ví dụ P
5
. Nhưng ngay sau đó hệ thống lại xảy
ra lỗi trang mới do không tìm thấy page P
5
trên bộ nhớ chính và hệ điều hành lại
phải xử lý lỗi trang, và cứ như thế có thể hệ điều hành phải kéo dài việc xử lý lỗi
trang mà không thể kết thúc được. Trong trường hợp này ta nói rằng: hệ thống đã
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
r
a
c
k
.
c
o
m
thành 1. Hệ điều hành sẽ dựa vào bít modify này để biết được một page có bị thay
đổi hay không kể từ lần nạp vào bộ nhớ gần đây nhất.
Đối với vấn đề thứ hai: hệ điều hành có thể swap in một page tại ví trí ban
đầu của nó trên đĩa, hoặc tại không gian swap của nó. Trong một số hệ điều hành
khi một tiến trình được tạo thì lập tức hệ điều hành sẽ cấp cho nó một không gian
swap trên đĩa, bất kỳ khi nào tiến trình bị swap out nó đều được swap đến không
gian swap của nó, khi tiến trình kết thúc thì không gian swap của nó sẽ được giải
phóng. Như vậy để chuẩn bị cho việc swap in sau này, khi nạp một page của tiến
trình vào bộ nhớ hệ điều hành sẽ ghi nội dung của page này vào không gian swap
của nó.
III.12. Quản lý bộ nhớ RAM của DOS
III.5.a. Program Segment Prefix (PSP):
MS_DOS dùng hàm EXEC để nạp các chương trình EXE và COM vào bộ nhớ.
EXEC phải chuẩn bị một vùng nhớ mà chương trình sẽ nạp vào, và đặt vào đầu
vùng nhớ này một cấu trúc dữ liệu được gọi là khối tiền tố chương trình PSP.
Chương trình sẽ được nạp vào ngay sau PSP, sau đó hệ điều hành sẽ khởi tạo các
thành ghi Segment và Stack để chương trình bắt đầu hoạt động. Khi chương trình
kết thúc thì hệ điều hành giải phóng cả khối nhớ cấp cho chương trình và khối nhớ
dùng làm PSP cho chương trình.
PSP dài 256 byte, chứa các thông tin cần cho cả DOS và chương trình chạy.
PSP cho biết địa chỉ đoạn của ô nhớ cuối cùng dành cho chương trình, địa chỉ đoạn
của khối biến môi trường, độ dài của dòng lệnh, các tham số dòng lệnh, vv.
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
EXE ba đoạn của chương trình là code, data và stack có thể được nạp vào ba đoạn
bộ nhớ khác nhau, và có thể một đoạn của chương trình, tuỳ theo kích thước của
nó, mà nó có thể được nạp vào nhiều hơn một đoạn bộ nhớ. Do đó ngay sau khi
chương trình được nạp vào bộ nhớ các thanh ghi đoạn đều được khởi tạo bằng các
giá trị khác nhau (có thể DS = ES), đó chính là địa chỉ đoạn của các đoạn bộ nhớ
chứa các đoạn chương trình tương ứng. Trong quá trình hoạt động của chương trình
có thể giá trị của thanh ghi CS bị thay đổi. Chương trình dạng EXE trên bộ nhớ
RAM không phải là hình ảnh trung thực của nó ở trên đĩa mà nó được mã hoá theo
một cách nào đó. Hình 3.15 sau đây minh họa cho điều này.
Một chương trình dạng COM không thể vượt quá giới hạn 64 Kb kể cả 256
byte PSP và 1 word khởi tạo stack. Mặt dù vậy nhưng khi nạp một chương trình
COM vào bộ nhớ DOS vẫn dành hết bộ nhớ còn lại cho chương trình, điều này gây
lãng phí bộ nhớ, do đó chương trình COM không thể gọi một chương trình khác
thông qua hàm EXEC, nếu trước đó chương trình không giải phóng khối nhớ thừa
mà hệ điều hành đã cấp cho chương trình. Vì chương chương trình COM được nạp
ngay sau PSP của nó trong bộ nhớ nên ngay sau khi điều khiển được chuyển cho
chương trình COM thì các thanh ghi đoạn đều hướng tới đầu PSP, thanh ghi con trỏ
lệnh (IP) nhận giá trị offset 100h và thanh ghi con trỏ stack (SP) nhận giá trị offset
FFFEh (vì stack ở vùng cao của đoạn 64 Kb và luôn được khởi tạo bởi một phần tử
2 byte). DOS không nạp chương trình COM vào một địa chỉ xác định trước và
không cho phép thực hiện một lời gọi xa (FAR) trong chương trình.
Hình 3.15:
Các thanh ghi con trỏ đoạn ngay sau khi khởi tạo
chương trình: chương trình EXE so với chương trình COM.
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
quan đến chương trình hơn, các thông tin này là cần thiết để hệ điều hành nạp
chương trình vào bộ nhớ và điều khiển việc thực hiện của chương trình. Các
chương trình EXE không được nạp vào các đoạn bộ nhớ xác định trước mà có thể
được nạp vào một vị trí bất kỳ (có địa chỉ là bội nguyên của 16). Trong chương
trình dạng EXE có thể gọi một chương trình khác thông qua hàm EXEC và có thể
thực hiện các lời gọi xa để gọi một chương trình con ở đoạn nhớ khác.
Trong giai đoạn biên dịch và liên kết chương trình, chương trình liên kết
LINK đặt vào đầu các file chương trình EXE một cấu trúc dữ liệu đặc biệt được gọi
là Header của chương trình. Header chứa nhiều thông tin liên quan đến chương
trình như kích thước header, kích thước chương trình, giá trị khởi tạo của IP và SP,
địa chỉ bắt đầu của đoạn code trong file EXE, … và đặc biệt là địa chỉ tương đối
của các đoạn. Địa chỉ đoạn thực tế trong bộ nhớ RAM nhận được bằng cách cộng
địa chỉ tương đối này với địa chỉ của đoạn mà chương trình được nạp vào (địa chỉ
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
-
t
r
a
c
k
.
c
o
m
Để quản lý các khối nhớ đã được chia trên vùng nhớ cũng như các chương
trình đã được nạp vào vùng TPA hệ điều hành MS_DOS sử dụng các khối điều
khiển bộ nhớ MCB. Mỗi MCB dài 16 byte (1 paragraphe), quản lý một vùng nhớ
nằm ngay sau nó. Khi có một chương trình cần được nạp vào bộ nhớ, tùy theo yêu
cầu bộ nhớ của chương trình mà DOS cung cấp cho chương trình một vùng nhớ,
vùng nhớ này sẽ được quản lý bởi một MCB đứng ngay trước nó. Hình 3.16 sau
đây minh họa cho điều này.
ntrol Block2
Đư
ợc quản lý bởi MCB2
MCB3 (MCB cu
ối c
ùng)
Đư
ợc quản lý bởi MCB3
Hình 3.16: Quản lý bộ nhớ bằng MCB của DOS
Kết thúc M
0000:0000
Bắt đầu
vùng TPA
Kết thúc
vùng TPA
Hệ điều hành
Hệ điều hành
Liên kết
giữa các
MCB
Click to buy NOW!
P
D
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
đến một segment cụ thể. Do đó với bộ nhớ không được phân đoạn, bộ nhớ ảo của
chương trình người sử dụng là 2
32
= 4GB. Với bộ nhớ được phân đoạn, tổng không
gian bộ nhớ ảo được nhìn bởi chương trình người sử dụng là 2
46
= 64TB. Không
gian địa chỉ vật lý 32 bít cho kích thước tối đa là 4GB. Lượng bộ nhớ ảo thực tế có
thể lớn hơn 64TB: Đối với 80386 địa chỉ ảo phụ thuộc vào processor đang sử dụng.
Một nửa không gian địa chỉ ảo (8K segment x 4GB) là không gian chung, được
chia sẻ cho tất cả các tiến trình, phần còn lại là địa chỉ cục bộ và dành riêng cho
mỗi tiến trình.
Gắn liền với mỗi đoạn là 2 dạng thức của sự bảo vệ: mức đặc quyền
(privilege level) và thuộc tính truy cập (access attribue). Có 4 mức đặc quyền, từ
được bảo vệ cao nhất đến được bảo vệ thấp nhất: level 0, level 1, level 2, level 3.
Mức đặc quyền có thể được gắn với segment dữ liệu hoặc với program segment.
Một chương trình thực hiện chỉ có thể truy cập dữ liệu trong segment khi mức đặc
quyền của nó thấp hơn hoặc bằng mức đặc quyền gắn với segment dữ liệu. Phần
cứng không bắt buộc sử dụng cấp đặc quyền nào, việc này do các nhà thiết kế hệ
điều hành quyết định. Thuộc tính truy cập của một segment dữ liệu chỉ ra có hay
không sự cho phép truy cập read/write hoặc read-only. Đối với các segment
program, thuộc tính truy cập chỉ ra có hay không truy cập read/excute hoặc read-
only.
Click to buy NOW!
P
D
F
-
X
C
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r