int m;
main () F1(int x) stack heap
Tổ chức Paging
Điạ chỉ logic : <page-number, offset>
ẹũa chổ physic : <frame-number, offset>
Chuyển đổi địa chỉ : <p,d> <f,d>
Chuyển đổi địa chỉ vào thời điểm thi hành
MMU thi hành
Sử dụng Page Tableđể lưu thông tin cấp phát BNC, làm cơ sở thực hiện ánh xạ địa chỉMỗi tiến trình có một Page Table
Page Table
Số phần tử của Page Table = Số Page trong KGĐC của chương trình Mỗi phần tử của bảng Page Table mô tả cho 1 page, và có cấu trúc :
frame: số hiệuframe trong BNC chứa page Lưu trữ Page Table ?
Cache : không đủ
BNC : Page-table base register (PTBR), Page-table length register (PTLR)
Chuyển đổi địa chỉ trong mô hình Paging
CPU
KGVL Physical
Logical addr addr
p d f d
f
Page table
Logical-to-Physical Address Translation in Paging
Nhận xét Mô hình Paging Loại bỏ
Dynamic Allocation
External Fragmentation
“Trong suốt” với LTV
Hỗ trợ Bảo vệ và Chia sẻ ở mức page Internal Fragmentation
Lưu trữ Page Table trong bộ nhớ
Toán choã
Tăng thời gian chuyển đổi địa chỉ
Lưu trữ Page Table
Giả sử hệ thống sử dụng m bit địa chỉ
Size of KGẹC = 2m
Kích thước page
Trên nguyên tắc tùy ý, thực tế chọn pagesize = 2n Tại sao ?
Soỏ trang trong KGẹC: #pages = 2m / 2n = 2m-n
Vớ duù : 32-bits ủũa chổ, pagesize = 4K
KGẹC = 232-> #pages= 232-212 = 220 = 1.000.000 pages !
#pages = #entry trong PT
Điạ chỉ logic : Page Table
Moói tieỏn trỡnh lửu 1 Page Table
Số lượng phần tử quá lớn -> Lưu BNC p d
(m-n) n
Lưu trữ Page Table : Tiết kiệm không gian
Sử dụng bảng trang đa cấp
Chia bảng trang thành các phần nhỏ, bản thân bảng trang cũng sẽ được phân trang
Chỉ lưu thường trực bảng trang cấp 1, sau đó khi cần sẽ nạp bảng trang cấp nhỏ hơn thích hợp...
Có thể loại bỏ những bảng trang chứa thông tin về miền địa chỉ không sử dụng
Sử dụng Bảng trang nghịch đảo
Mô tả KGVL thay vì mô tả KGĐC -> 1 IPT cho toàn bộ hệ thống
Bảng trang đa cấp
Bảng trang tuyến tính
Sử dụng page-number làm chỉ mục đến Page Table
Phải lưu tất cả các phần tử mô tả tất cả các trang trong KGẹC
Những page không sử dụng : lãng phí
Nạp toàn bộ PT vào BNC : tốn choã
p d 0 1 2 3 ...
p ...
7 8 9 10 11 12 13 14
f 5 16
2
9
B ảng trang đa cấp
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 0
1 2 3
13 0 1 2 3 4 5 6 7 8 9 10 11 12
12 13 14
Page Table caáp 1
Page Table caáp 2
Page Table caáp 2
Page Table caáp 2
Page Table caáp 2
Mô hình bảng trang 2 cấp
Ví dụ mô hình bảng trang 2 cấp
Một máy tính sử dụng địa chỉ 32bít với kích thước trang 4Kb.
Địa chỉ logic được chia thành 2 phần:
Soỏ hieọu trang : 20 bits.
Offset tính từ đầu mỗi trang :12 bits.
Vì bảng trang lại được phân trang nên số hiệu trang lại được chia làm 2 phần:
Soỏ hieọu trang caỏp 1.
Soỏ hieọu trang caỏp 2.
Ví dụ mô hình bảng trang 2 cấp
Vì thế, địa chỉ logic sẽ có dạng như sau:
page number page offset
pi p2 d
10 10 12
B ảng trang đa cấp 01
2 3 0 1 2 3 0 1 2 3 0 1 2 0
1 2 3
13 0 1 2 3 4 5 6 7 8 9 10 11 12
14 15 16
Page Table caáp 1
Page Table caáp 2
Page Table caáp 2
Page Table caáp 2
Page Table caáp 2 1 2 100
Bảng trang nghịch đảo (Inverted Page Table)
Sử dụng duy nhất một bảng trang nghịch đảo cho tất cả các tiến trình
Mỗi phần tử trong bảng trang nghịch đảo mô tả một frame, có cấu truùc
<page> : số hiệu page mà frame đang chứa đựng
<idp> : id của tiến trình đang được sỡ hữu trang
Mỗi địa chỉ ảo khi đó là một bộ ba <idp, p, d >
Khi một tham khảo đến bộ nhớ được phát sinh, một phần địa chỉ ảo là <idp, p > được đưa đến cho trình quản lý bộ nhớ để tìm phần tử tương ứng trong bảng trang nghịch đảo, nếu tìm thấy, địa chỉ vật lý
<i,d> sẽ được phát sinh
Kiến trúc bảng trang nghịch đảo
Lưu trữ Page table : Tiết kiệm thời gian
Mỗi truy cập BNC cần truy xuất BNC 2 lần :
Tra cứu Page Table để chuyển đổi địa chỉ Tra cưu bản thân data
Làm gì để cải thiện :
Tìm cách lưu PT trong cache
Cho pheùp tìm kieám nhanh
PT lớn, cache nhỏ : làm sao lưu đủ ?
Lửu 1 phaàn PT...
Phần nào ?
Các số hiệu trang mới truy cập gần đây nhất...
Translation Lookaside Buffer (TLB)
Vùng nhớ Cache trong CPU được sử dụng để lưu tạm thời một phần của PT được gọi là Translation Lookaside Buffer (TLB)
Cho phép tìm kiếm tốc độ cao
Kích thước giới hạn (thường không quá 64 phần tử)
Mỗi entry trong TLB chứa một số hiệu page và frame tương ứng đang chứa page
Khi chuyển đổi địa chỉ, truy xuất TLB trước, nếu không tìm thấy số hiệu page cần thiết, mới truy xuất vào PT để lấy thoâng tin frame.
Translation Lookaside Buffer
Chuyển đổi địa chỉ với Paging
CPU p d
f d
f d
TLB
Memory virtual address
physical address
p f
f PT
f
Sử dụng TBL
Bảo vệ và chia sẻ trong Segmentation và Paging Bảo vệ
Segmentation : mỗi phần tử trong ST được gắn thêm các bit bảo veọ
Mỗi segment có thể được bảo vệ tùy theo ngữ nghĩa của các đối tượng beân trong segment
Paging : mỗi phần tử trong PT được gắn thêm các bit bảo vệ
Mỗi page không nhận thức được ngữ nghĩa của các đối tượng bên trong page, nên bảo vệ chỉ áp dụng cho toàn bộ trang, không phân biệt.
Chia sẻ: Cho nhiều phần tự trong KGĐC cùng trỏ đến 1 vị trí trong KGVL
Segmentation : chia sẻ mức module chương trình Paging : chia sẻ các trang
Sharing Pages: A Text Editor
Sharing Pages: A Text Editor
ed 3 + data 1
ed 3 + data 3
ed 3 + data 2
Chia sẻ Page 2 = Chia sẻ cả code và data !
Đánh giá các mô hình chuyển đổi địa chỉ
Giả sử có:
tm : thời gian truy xuất BNC
tc : thời gian truy xuất cache
hit-ration : tỉ lệ tìm thấy một số hiệu trangp trong TLB
Công thức tính thời gian truy cập thực tế (Time Effective Acess) đến một đối tượng trong BNC
bao gồm thời gian chuyển đổi địa chỉ và thời gian truy xuất dữ liệu TEA = (time biding add + time acces memory)
Linker-Loader
TEA = tm
(data)
Base + Bound
TEA = (tc+ tc) + tm
(Base & Bound) (data)
Segmentation
TEA = tc + tm
(ST trong cache) (data)
Paging
Không sử dụng TLB :
TEA = tm + tm
(PT trong mem) (data)
Có sử dụng TLB :
TEA = hit-ratio ( tc + tm ) + (1- hit-ratio)( tc + tm + tm )
Bài giảng 7 : Bộ nhớ Ảo
VaÁn đề với Real Memory Ý tưởng Virtual Memory Thực hiện Virtual Memory
Các chiến lược của Virtual Memory
Chiến lược nạp
Chiến lược thay thế trang
Chiến lược cấp phát khung trang
Hiện tượng thrashing
Nguyeân nhaân Giải pháp
Các cấp bộ nhớ
Registers
Cache
Memory
Cho đến nay : Nạp toàn bộ tiến trình vào bộ nhớ rồi thực hiện nó...
Nếu kích thước tiến trình lớn hơn dung lương bộ nhớ chính ?
Giải pháp
Tại một thời điểm chỉ có 1 chỉ thị được thi hành
Tại sao phải nạp tất cả tiến trình vào BNC cùng 1 lúc ?
Ý tưởng
Cho phép nạp và thi hành từng phần tiến trình
Ai điều khiển việc thay đổi các phần được nạp và thi hành ?
Tại một thời điểm chỉ giữ trong BNC các chỉ thị và dữ liệu cần thiết tại thời điểm đó
Các phần khác của tiến trình nằm ở đâu ?
Giải pháp Bộ nhớ ảo (virtual memory)
Registers
Cache
Memory
Virtual Memory
Virtual Memory
Nếu có một Virtual Memory với dung lượng rất rất lớn cho LTV làm việc...
Hoan hoâ !
Ý tưởng
Tách biệt KGĐC và KGVL
LTV : mỗi tiến trình làm việc với KGĐC 2mcủa mình (địa chỉ từ 0 – (2m -1)) HĐH : chịu trách nhiệm nạpcác KGĐCvào một KGVL chung
Giải pháp của HĐH : Nạp từng phần tiến trình Phân chia KGĐC thành các phần ?
Paging/Segmentation
Mở rộng BNC để lưu trữ các phần của tiến trình chưa được nạp
Dùng BNP(disk) để mở rộng BNC
Nhận biết phần nào của KGĐC chưa được nạp ?
Bổ sung bit cờ hiệu để nhận dạng tình trạng của một page/segment là đã được nạp vào BNC hay chưa
Cơ chế chuyển đổi qua lại các phần của tiến trình giữa BNC và BNPSwapping...
Cấu trúc một phần tử trong Page Tables
Virtual Memory với cơ chế phân trang (Paging)
Phân chia KGĐC thành các page
Dùng BNP(disk) để mở rộng BNC, lưu trữ các phần của tiến trình chưa được nạp
Bổ sung bit cờ hiệu trong Page Table để nhận dạng tình trạng một page đã được nạp vào BNC hay chưa .
Lưu trữ KGĐC ở đâu ?
Sử dụng bộ nhớ phụ để lưu trữ tạm thời các trang chưa sử dụng P
RAM