BÀI 7 :
BỘ NHỚ ẢO
BỘ NHỚ ẢO
OS
test.exe
0x3000
jump 0x2000
0x1000
test.exe
jump
0x5000
0x7000
0x3000
(base)
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
2
Giải pháp
Real memory
Real memory
Page0
Page0
Page1
emacs
t1
emacs
t2
Nạp từng phần chương trình khi
cần thieát
Demand paging
Page2
Time
3
Cơ chế
Sử dụng bộ nhớ phụ để lưu trữ tạm
thời các trang chưa sử dụng
Ai chịu trách nhiệm chuyển đổi ?
Lập trình viên : Overlay
Hệ điều hành :DISK
Bộ nhớ ảo (Virtual
Memory)
Memory
P
RAM
4
Bộ nhớ ảo = “lời nói dối vó
đại“
# of references
Người dùng : sở hữu bộ nhớ “vô
hạn”, “riêng biệt”
Hệ điều hành : “thầm lặng” thực hiện
quá trình swapping
10% RAM
+
90% DISK
Memory address
RAM
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
Frame
17
4183
177
5721
valid/invalid
1
0
1
0
Disk
Mem
Truy xuất đến một trang chưa được
nạp vào bộ nhớ :
6
Xử lý lỗi trang
3
OS
truy
xuất
1
nạp
M
Bộ
nhớ
ảo
6
tái
kích
hoạt
tiến
trình
xác định vị trí lưu
trang trên đóa
lỗi
2
trang
3
swap out ’
trang
i
nạn
nhân
Bảng
frame
trang
5
trống
cập
nhật
Bộ nhớ
bảng
M
4
mang
trang
cần
truy 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
Tần suất lỗi trang thấp nhất
Không khả thi !
LRU :trang lâu nhất chưa
sử dụng đến trong quá
khứ
add
Công bằng ?
Không xét đến tính sủ
dụng !
TỐI ƯU : trang lâu sử dụng
đến nhất trong tương lai
victim
Dự đoán tương lai LRU = MIN ?
victim
AGBDCABCABCGABC
Cur page
victim
AGBDCABCABCGABC
Cur page
9
Chiến lược nạp
Demand paging : nạp trang được yêu cầu
Khi nào ?
Nạp sau : tần suất lỗi trang cao ? => pure
demand paging
Nạp trước : làm sao biết ? =>prepaging
ld init pages
ld page
ld page
ld page
...
init pages = ?
10
Thrashing = ảo tưởng sụp đổ !
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 !
P1
P2
P3
Real mem
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 !
11
Hệ thống ngừng trệ
Nguyên nhân Thrashing
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ớ,
với
kích
thươc
lớn thrashing
hơn
nhưng
Chỉ có
thể
kiểm
soát
do
nguyên nhân 3.
3. Quá nhiều tiến trình trong hệ
12
Giải quyết thrasing với mô hình
Working set
Working set = tập hợp các trang tiến
trình đang truy xuất tại 1 thời điểm.
Hệ điều hành :
Chỉ nạp một tiến trình khi có đủ
khung trang tự do cho working set
của nó.
Kiểm soát mức độ đa chương của
hệ thống : 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 13