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

Giáo trình phân tích khả năng ứng dụng chiến lược theo điều phối cung cấp processor cho bo mạch p10 doc

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

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.
Các bạn có thể tìm hiểu rõ hơn về cấu trúc của một PSP ở một tài liệu khác
viết về hệ điều hành MS_DOS.
III.5.b. Chương trình COM và EXE:
Trong phần này chúng ta xem xét đến sự hoạt động của hai loại file chương trình
EXE và COM. Các chương trình dạng COM có kích thước giới hạn trong 64 KB,
trong khi đó kích thước của chương trình dạng EXE có thể lớn ngang bằng kích
thước của RAM. Hệ điều hành có thể nạp một chương trình dạng EXE có kích
thước lớn hơn vào RAM nếu chương trình được thiết kế với cấu trúc thích hợp (cấu
trúc động chẳng hạn).


Đối với các chương trình dạng COM, cả ba đoạn của chương trình là code,
data và stack đều chứa trong cùng một đoạn 64 KB. Chương trình COM trên RAM
là hình ảnh chính xác của nó trên đĩa. Do đó ngay sau khi chương trình COM được
nạp vào bộ nhớ RAM thì tất cả các thanh ghi đoạn đều chứa cùng một giá trị, đó
chính là địa chỉ đoạn của một đoạn nhớ (64 KB) chứa các đoạn của chương trình,
trong quá trình hoạt động của chương trình giá trị các thanh ghi đoạn không thay
đổi, ngoại trừ thành ghi đoạn ES có thể thay đổi. Đối với các chương trình dạng
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
a
c
k
.
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
u
-
t
r
a
c
k
.
c
o
m
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.












Chương trình dạng EXE không bị giới hạn kích thước một segment (64 Kb)
mà nó có thể vượt quá giới hạn của 3 segment, nhờ đó mà người lập trình có thể
thiết kế được các chương trình với nhiều chức năng hơn. Tuy nhiên điều này làm
cho cấu trúc của chương trình sẽ phức tạp hơn, nó phải chứa nhiều thông tin liên



Code
PSP
SS

CS

DS

ES

100h



Code
PSP
Stack
100h

COM
EXE
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
-
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
w
e
r
w
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ỉ
đoạn bắt đầu). Địa chỉ đoạn bắt đầu thường là địa chỉ đoạn của PSP cộng với 10h.
Khi hệ điều hành nạp một chương trình EXE vào bộ nhớ nó biết được địa chỉ
các ô nhớ chứa các địa chỉ đoạn cần thay đổi cho phù hợp, hệ điều hành viết lại các
giá trị này bằng cách cộng các giá trị trong đó với địa chỉ đoạn bắt đầu. Thao tác
này có thể làm chậm tốc độ nạp các chương trình EXE. Sau khi các địa chỉ đoạn
được sửa thành các địa chỉ có hiệu lực thì hệ điều hành cố định các thanh ghi đoạn
DS và ES theo đầu của PSP (DS = ES = PSP). Do đó chương trình EXE có thể truy
cập dễ dàng đến các thông tin trong PSP.
Các bạn có thể tìm hiểu rõ hơn về cấu trúc và lợi ích của header ở một tài

liệu khác viết về các file EXE trong hệ điều hành MS_DOS.
III.5.c. Memory Control Block (MCB):
Hệ điều hành MS_DOS là hệ điều hành đơn nhiệm đa chương, nên nó cho phép
nạp nhiều hơn một chương trình vào bộ nhớ chính (RAM), mặc dù tại một thời
điểm nhất định chỉ có duy nhất một chương trình thực hiện.
Theo MS_DOS thì không gian bộ nhớ chính được chia thành 2 phần: phần
thấp nhất (640B đầu tiên) được gọi là vùng bọ nhớ quy ước (conventional area).
Phần còn lại được gọi là vùng nhớ trên (upper area). Các chương trình của người
sử dụng phải nạp vào vùng nhớ quy ước để hoạt động. Vùng nhớ quy ước được
chia thành hai phần: phần thấp nhất chứa các thành phần chính của hệ điều hành
như là bảng vector ngắt, io.sys, msdos.sys, các chương trình điều khiển thiết bị,
phần thường trực của command.com, vv. Phần còn lại của vùng quy ước được gọi
là vùng TPA (Transient Program Area), tất cả các chương trình của người sử dụng
phải được chạy tại đây. Như vậy, không phụ thuộc vào kích thước của bộ nhớ
chính, MS_DOS chỉ dành chưa đầy 640KB cho các chương trình của người sử
dụng và các khối tham số môi trường tương ứng. Vùng nhớ trên được chia thành
nhiều vùng nhỏ khác nhau như là video RAM, ROM BIOS, các điều khiển I/O, vv.
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
a
c
k
.
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
u
-
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.














Cấu trúc của một MCB đựoc mô tả ở hình dưới. Trong đó:
 Trường ID: định danh MCB, ID = ‘Z’: đây là MCB cuối cùng, ID =
‘M’: chưa phải là MCB cuối cùng.
 Trường địa chỉ PSP: đây là địa chỉ đoạn của PSP tương ứng của
chương trình. Nếu vùng nhớ được cấp là khối môi trường của một chương
trình thì trường này chỉ ra địa chỉ PSP của chính chương trình. Ngược lại nếu
vùng nhớ được cấp là một PSP thì trong đa số trường hợp trường này chỉ ra
chính vùng nhớ của chương trình.


1byte 2 byte 2 byte 11 byte

ID Địa chỉ PSP

Số lượng byte


Hình 3.17: Cấu trúc của một MCB
 Trường số lượng byte: trường này chỉ ra số lượng byte của vùng nhớ
được cấp (tính theo đơn vị paragraphe), tức là nó cho biết khoảng cách từ
một MCB thấp đến MCB kế tiếp cao hơn. Nhờ vậy mà các MCB trên bộ nhớ
được kết nối như một danh sách liên kết.
Chưa sủ dụng

Memory Control Block1

Đư
ợc quản lý bởi MCB1

Memory Co
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
F
-
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
.
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
u
-
t
r
a
c
k
.
c

o
m
Để nạp một chương trình vào bộ nhớ DOS cấp cho chương trình hai vùng
nhớ, vùng thứ nhất đủ để chứa khối tham số môi trường của chương trình, vùng thứ
hai đủ để chứa chính chương trình và PSP tương ứng của nó. Việc xác định kích
thước của chương trình dạng COM sẽ rất khó vì chương trình dạng COM được lưu
trữ trên đĩa là hoàn toàn giống như nó ở trên bộ nhớ, ngoài ra không có thêm bất cứ
thong tin nào. Đối với các chương trình dạng EXE thì dễ hơn vì kích thước của
chương trình EXE được ghi trong Header, header đứng trước mọi chương trình
EXE và được tạo ra trong qúa trình bên dịch chương trình. Thông thường khi nạp
một chương trình dạng COM vào bộ nhớ DOS sẽ cấp cho chương trình toàn bộ
không gian nhớ còn lại của bộ nhớ.
III.13. Sự phân trang/đoạn trong hệ điều hành Windown NT
Windows NT được thiết kế để cài đặt trên nhiều họ processor khác nhau, đặc biệt là
trên các processor Intel 486. Trên các hệ thống PC IBM và tương thích sử dụng
Intel 486, Windows chấp nhận kích thước của một page là 4KB, đây là cơ sở để
thực hiện chiến lược bộ nhớ ảo của Windows NT.
III.5.a. Segmentation:
Khi sự phân đoạn được sử dụng, mỗi địa chỉ ảo (trong các tài liệu 80386 được gọi
là địa chỉ logic) bao gồm 16 bít segment và 32 bít offset. Hai bít đầu tiên của
segment được sử dụng trong chiến lược bảo vệ bộ nhớ, 14 bít còn lại dùng để chỉ
đế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
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
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
a
c
k
.
c
o
m

×