1
BÀI 7 : BỘ NHỚ ẢO
Cho đến nay : Nạp toàn bộ tiến trình vào bộ nhơ rồi
thực hiện nó
Chậm, lãng phí bộ nhớ
Nếu kích thước tiến trình lớn hơn dung lương bộ nhớ
chính ?
Lưu ý : tại 1 thời điểm chỉ có một chỉ thò được thực hiện
0x1000
test.exe
0x3000
0x3000
test.exe
jump 0x2000
jump 0x5000
0x7000
OS
(base)
2
Giải pháp
Nạp từng phần chương trình khi cần thiết
Demand paging
Real memory
Real memory
Page0
RAM
DISK
#
o
f
r
e
f
e
r
e
n
c
e
s
Memory address
10% RAM
+
90% DISK
5
Thực hiện Bộ nhớ ảo
Bảng trang : thêm 1 bit valid/invalid để nhận diện
trang
đã hay chưa được nạp vào RAM
Truy xuất đến một trang chưa được nạp vào bộ
nhớ :
nhân
4
mang
trang cần
truy xuất
vào bộ nhớ
5
cập nhật
bảng trang
6
tái kích
hoạt tiến
trình
frame trống
i
7
Các câu hỏi
1. Chọn trang nạn nhân ? => Chiến lược thay thế
trang
2. Chọn trang nào để nạp ? => Chiến lược nạp
8
Chiến lược thay thế trang
FIFO: trang “già” nhất
Công bằng ?
Không xét đến tính sủ dụng !
TỐI ƯU : trang lâu sử dụng
ld init pages
ld page
ld page
ld page
init pages = ?
10
Thrashing = ảo tưởng sụp đổ !
Tất cả tiến trình đầu bận rộn xử lý lỗi trang !
IO hoạt động 100 %, CPU rảnh !
Hệ thống ngừng trệ
Real mem
P1
P2
P3
Các tiến trình trong hệ thống yêu cầu bộ nhớ nhiều
hơn khả năng cung cấp của hệ thống !
11
Nguyên nhân Thrashing
Chỉ có thể kiểm soát thrashing do nguyên nhân 3.
1. Tiến trình không tái sử dụng bộ nhớ (quá khứ !=
tương lai)
2. Tiến trình tái sử dụng bộ nhớ, nhưng với kích thươc
lớn hơn
3. Quá nhiều tiến trình trong hệ thống
12