Thứ Ba, 4 tháng 3, 2014

Bộ nhớ ảo

1
BÀI 10 : 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
emacs
Timet2t1
Page0
emacs
Page1
Page2
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
Overlay

Hệ điều hành : Bộ nhớ ảo (
Virtual Memory
Virtual Memory)
P
RAM
DISK
4
Bộ nhớ ảo = “lời nói dối vó đại“

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
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ớ :
lỗi trang (page fault)
17 1
4183 0
177 1
5721 0
Disk
Mem
Frame
valid/invalid
6
Xử lý lỗi trang
Bộ nhớ vật lý
M
Bộ nhớ
ảo
nạp M
OS

Bảng trang
truy xuất
1
2
lỗi trang
3
xác đònh vò trí lưu trang
trên đóa
3’
swap out
trang nạn
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
đến nhất trong tương lai

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ứ

Dự đoán tương lai LRU = MIN ?
add
victim
AGBDCABCABCGABC
victim
Cur page
AGBDCABCABCGABC
victim
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 đổ !

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

Xem chi tiết: Bộ nhớ ảo


Không có nhận xét nào:

Đăng nhận xét