Tin học văn phòng - Chapter 7: Bộ nhớ thực
Các hệ thống hiện đại đều hỗ trợ không gian địa chỉ ảo
rất lớn (232 đến 264), ở đây giả sử là 232
? Giả sử kích thước trang nhớ là 4 K (= 212) ô nhớ
? không gian địa chỉ ảo sẽ gồm 232/212 = 220 = 1 M page
? bảng phân trang sẽ có 1 M mục
? Giả sử mỗi mục của bảng phân trang gồm 4 byte thì mỗi process
cần 4 MB cho bảng phân trang, và 100 quá trình sẽ cần
? Một giải pháp là, thay vì dùng một bảng phân trang duy
nhất cho mỗi process, “paging” bảng phân trang này, và
chỉ sinh những bảng phân trang cần thiết ? bảng phân
trang 2 mức (two-level page table)
25 trang |
Chia sẻ: huyhoang44 | Lượt xem: 669 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Tin học văn phòng - Chapter 7: Bộ nhớ thực, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
11
Chapter 7: Bộ Nhớ Thực
Các kiểu địa chỉ nhớ
Chuyển đổi địa chỉ nhớ
Overlay và swapping
Vấn đề cấp phát bộ nhớ liên tục (contiguous memory
allocation)
Giải pháp fixed partitioning
Giải pháp dynamic partitioning
2
Quản lý bộ nhớ
Kernel chiếm một vùng cố định của bộ nhớ, vùng còn lại
dành để cấp phát cho các process
Cấp phát vùng nhớ cho các process sao cho hệ thốâng
hoạt động hiệu quả
Vd: Nạp càng nhiều process vào bộ nhớ càng tốt để gia tăng
mức độ multiprogramming
Quản lý bộ nhớ
Cấp phát vùng nhớ cho các process
Bảo vệ: kiểm tra truy xuất bộ nhớ có hợp lệ không
Chia sẻ: cho phép các process chia sẻ vùng nhớ chung
Chuyển đổi địa chỉ luận lý sang địa chỉ vật lý
3
Các kiểu địa chỉ nhớ (1/2)
Địa chỉ vật lý -- physical (memory) address -- là địa chỉ
mà CPU, hay MMU (nếu có), gửi đến bộ nhớ chính
Địa chỉ luận lý (logical address) là địa chỉ mà một quá
trình sinh ra
Các địa chỉ sinh bởi trình biên dịch (compiler) là
tương đối hay khả tái định vị (relocatable): compiler giả thiết
không gian địa chỉ của đơn vị biên dịch (compilation unit) bắt đầu
từ địa chỉ 0
hoặc
tuyệt đối: kết quả biên dịch có thể nạp được ngay vào bộ nhớ để
thực thi; ít được dùng
24
Các kiểu địa chỉ nhớ (2/2)
Khi một lệnh được thực thi, các địa chỉ luận lý phải được
chuyển đổi thành địa chỉ vật lý
Sự chuyển đổi này thường có sự hỗ trợ của phần cứng để đạt
hiệu năng cao
5
Từ mã nguồn đến file thực thi được
Linker: kết hợp các object module thành một file thực thi được
tái định vị địa chỉ tương đối và phân giải các external reference
kết hợp các object module thành một load module (file nhị phân khả thực
thi)
System
library
System
library
static linking
dynamic linking
6
Thực hiện (static) linking
Linker chuyển đổi địa chỉ tương đối sang địa chỉ tuyệt đối
Module A
CALL B
Return
length L
Module B
CALL C
Return
length M
Module C
Return
length N
0
L - 1
Module A
JMP “L”
Return
Module B
JMP “L+M”
Return
Module C
Return
L
L M - 1
L M
L M N - 1
relocatable
object modules
load module
0
L - 1
0
M - 1
0
N - 1
37
Chuyển đổi địa chỉ
Chuyển đổi địa chỉ: quá trình ánh xạ một địa chỉ từ không
gian địa chỉ này sang không gian địa chỉ khác
Biểu diễn địa chỉ nhớ
Trong source code: symbolic (các biến, hằng, pointer)
Thời điểm biên dịch: thường là địa chỉ tương đối
Ví dụ: a ở vị trí 14 byte so với vị trí bắt đầu của module
Thời điểm linking/loading: có thể là địa chỉ tuyệt đối
0
250
2000
2250
relative address
physical memory
symbolic address
int i;
goto p1;
p1
8
Sinh địa chỉ tuyệt đối vào thời điểm biên dịch
Symbolic
addresses
Absolute
addresses
Physical memory
addresses
PROGRAM
JUMP i
LOAD j
DATA
i
j
Source code
1024
JUMP 1424
LOAD 2224
1424
2224
Absolute load module
Compile Load
1024
JUMP 1424
LOAD 2224
1424
2224
Process image
9
Chuẩn bị sinh địa chỉ vật lý (1)
Vào thời điểm biên dịch
Compiler sinh địa chỉ tuyệt đối
Cần thông tin cho biết load module sẽ được nạp ở đâu
Không cần linker
Loader rất đơn giản
Hiếm được dùng (MSDOS .COM files)
410
Chuẩn bị sinh địa chỉ vật lý (2)
Vào thời điểm link-edit
Compiler
Sinh địa chỉ tương đối (a.k.a. relocatable) cho mỗi đơn vị biên
dịch
Tham chiếu đến địa chỉ ngoài
Linkage editor
Chuyển đổi địa chỉ relocatable sang địa chỉ tuyệt đối
Phân giải các tham chiếu đến địa chỉ ngoài
Cần thông tin cho biết linked program sẽ được nạp ở đâu
Loader vẫn còn rất đơn giản
Yêu cầu về phần cứng thấp
Một chương trình chỉ có thể được nạp tại nơi đã được đặc tả và
không thể dịch chuyển sau khi được nạp
Không còn được dùng nhiều
11
Chuẩn bị sinh địa chỉ vật lý (3)
Vào thời điểm nạp
Tương tự thời điểm link-edit, nhưng không giữ cố định địa chỉ bắt
đầu
Chương trình có thể được nạp ở bất cứ đâu
Chương trình có thể dịch chuyển nhưng không tách được
Chỉ cần phần cứng đơn giản: các thanh ghi base/limit
Loader thiết lập trị cho các thanh ghi base/limit
Không còn được dùng phổ biến
12
Sinh địa chỉ vật lý
Vào thời điểm thực thi
Địa chỉ được chuyển đổi động trong khi thực thi
Cần có phần cứng để chuyển đổi địa chỉ ảo sang địa chỉ vật lý
được nhanh
“Phân trang” (“paging”)
“Phân đoạn” (“segmentation”)
Rất phổ biến hiện nay
513
Sử dụng vùng nhớ bớt phí phạm
Các kỹ thuật hỗ trợ sử dụng vùng nhớ bớt phí phạm:
Dynamic linking
Dynamic loading
Overlay
Swapping
14
Dynamic linking (1)
Trong dynamic linking
Việc link một load module L đến một module ngoài
(external module) được thực hiện sau khi đã tạo xong L
MS Windows: module ngoài là các file .dll
Unix: module ngoài là các file .so (shared library)
Load module chứa các stub tham chiếu (refer) đến các
routine của external module
Khi process gọi routine lần đầu, stub sẽ nạp routine vào bộ nhớ
(nếu routine chưa được nạp trước đó), thay thế địa chỉ mình bằng
địa chỉ routine, và gọi routine để thực thi
Các lần gọi routine sau sẽ xảy ra bình thường, không tốn
overhead
15
Dynamic linking (2)
Nhắc lại static linking
main:
...
call printf
printf:
...
ret
0x08048000
program
copy từ libc
616
Dynamic linking (3)
main:
...
call printf
0x40001234
printf:
...
ret
0x08048000
program
libc
printf:
call GOT[5]
...
[5]: dlfixup
...
PLT
(r/o code)
GOT
(r/w data)
dlfixup:
GOT[5] = &printf
call printf
Fig from M. Rosenblum
17
Ưu điểm của dynamic linking
Chương trình thực thi có thể gọi phiên bản mới (ví dụ
phiên bản đã sửa lỗi) của external module mà không
cần được sửa đổi và/hay biên dịch lại
Chia sẻ mã (code sharing): chỉ cần nạp external module
vào bộ nhớ một lần
Các process sử dụng dynamic link với external module này chia
sẻ vùng mã của external module tiết kiệm không gian nhớ và
không gian đĩa
18
Dynamic linking
Các external module thường là thư viện cung cấp các
tiện ích (như libc)
Stub cần sự hỗ trợ của OS
Kiểm tra xem routine đã được nạp vào bộ nhớ chưa
719
Dynamic loading (1)
Chỉ khi nào cần được gọi đến thì một thủ tục mới được
nạp vào bộ nhớ chính
Các thủ tục không được gọi đến sẽ không chiếm chỗ trong bộ
nhớ
Rất hiệu quả khi chương trình có khối lượng lớn mã có
tần suất sử dụng thấp (ví dụ các thủ tục xử lý lỗi)
Chính quá trình tự điều khiển dynamic loading
Hệ điều hành cung cấp một số thủ tục thư viện hỗ trợ
20
Dynamic loading (2)
Các thủ tục để người dùng thực hiện dynamic loading
trong UNIX:
dlopen() – Open một file thư viện
dlsym() – Dò tìm một ký hiệu trong file thư viện
dlclose() – Close một file thư viện
21
Dynamic loading – Ví dụ
822
Kỹ thuật overlay (1/2)
Chỉ giữ trong bộ nhớ những lệnh hoặc dữ liệu cần thiết,
giải phóng các lệnh/dữ liệu chưa hoặc không cần dùng
đến
Kỹ thuật này rất hữu dụng khi kích thước một process
lớn hơn kích thước vùng nhớ cấp cho nó
Quá trình tự điều khiển việc overlay (có sự hỗ trợ của
thư viện lập trình)
Có thể được xem là tiền thân của kỹ thuật “bộ nhớ ảo”
23
Pass 1 70K
Pass 2 80K
Symbol table 20K
Common routines 30K
Assembler
Total memory
available = 150KB
Kỹ thuật overlay (2/2)
symbol
table
20K
common
routines
30K
overlay
driver
10K
pass 1 pass 2
80K70K
Đơn vị: byte
nạp và thực thi
24
Swapping
Cơ chế: di chuyển một process khỏi bộ nhớ chính và lưu
trên bộ nhớ phụ (swap out). Khi thích hợp, nạp process
vào bộ nhớ (swap in) để có thể tiếp tục thực thi
Chính sách:
Round-robin: swap out P1 (vừa tiêu thụ hết quantum của nó),
swap in P2 , thực thi P3 ,
Roll out, roll in: dùng trong định thời theo độ ưu tiên (priority-
based scheduling)
Process có độ ưu tiên thấp hơn sẽ bị swap out nhường chỗ
cho process có độ ưu tiên cao hơn vừa đến
925
Swapping -- Cơ chế
26
Vấn đề cấp phát bộ nhớ liên tục
Trong phần còn lại của chương này, mô hình quản lý bộ
nhớ là một mô hình đơn giản [không dùng “bộ nhớ ảo”]
Một process phải được nạp hoàn toàn và liên tục vào bộ nhớ
(ngoại trừ khi dùng kỹ thuật overlay)
Sẽ thảo luận các giải pháp cấp phát bộ nhớ sau
Phân chia cố định (fixed partitioning)
Phân chia động (dynamic partitioning)
27
Hiện tượng phân mảnh
Phân mảnh ngoại (external fragmentation)
Vùng nhớ còn trống đủ lớn để thỏa mãn một yêu cầu cấp phát,
nhưng lại không liên tục
Có thể dùng kết khối (compacting) để gom lại thành vùng nhớ
liên tục
Phân mảnh nội (internal fragmentation)
Vùng nhớ được cấp phát lớn hơn vùng nhớ yêu cầu
Ví dụ: cấp một khoảng trống 18.464 byte cho một process yêu cầu
18.462 byte
Thường xảy ra khi bộ nhớ thực được chia thành các khối kích
thước cố định (fixed-sized block) và các process được cấp phát
theo đơn vị khối
10
28
Phân mảnh nội
operating
system
(used)
yêu cầu kế tiếp là
18.462 byte
hole kích thước
18.464 byte
Để tránh overhead quản lý chỉ 2 byte, OS
sẽ cấp phát hẳn khối 18.464 byte cho
process dư ra 2 byte không dùng
29
Fixed partitioning (1)
Khi khởi động hệ thống,
bộ nhớ chính được chia
thành nhiều phần cố định
rời nhau, gọi là các
partition, có kích thước
bằng nhau hoặc khác
nhau
Process nào có kích
thước nhỏ hơn hoặc bằng
kích thước partition thì có
thể được nạp vào
partition đó
30
Giải pháp fixed partitioning (2)
Nếu process có kích thước lớn hơn partition thì phải
dùng kỹ thuật overlay
Không hiệu quả do bị phân mảnh nội: một chương trình
dù lớn hay nhỏ đều được cấp phát trọn một partition
11
31
Chiến lược placement khi fixed partitioning (1/3)
Trường hợp các partition có kích thước bằng nhau
Nếu còn partition trống process mới sẽ được nạp vào partition
đó
Nếu không còn partition trống, nhưng có process đang bị
blocked swap out process đó ra bộ nhớ phụ, dành partition
cho process mới
32
Chiến lược placement khi fixed partitioning (2/3)
Trường hợp các partition
có kích thước không bằng
nhau
Giải pháp 1
Gán mỗi process vào
partition nhỏ nhất (trống
hay không trống) đủ
chứa nó [best fit]
Có hàng đợi cho mỗi
partition
Điểm yếu của giải pháp 1:
có thể có một số hàng đợi
trống (vì không có process
với kích thước tương ứng)
và một số hàng đợi dài
33
Chiến lược placement khi fixed partitioning (3/3)
Trường hợp các partition
có kích thước không bằng
nhau
Giải pháp 2
Khi cần nạp một
process vào bộ nhớ
chính chọn partition
nhỏ nhất còn trống và
đủ chứa nó [best fit]
Chỉ có một hàng đợi
chung cho mọi partition
12
34
Giải pháp dynamic partitioning
Số lượng và vị trí partition không cố định và partition có thể có kích
thước khác nhau
Mỗi process được cấp phát chính xác dung lượng bộ nhớ cần thiết
Gây ra hiện tượng phân mảnh ngoại
35
Chiến lược placement khi dynamic partitioning
Quyết định cấp phát khối bộ
nhớ trống nào cho một process
Mục tiêu: giảm chi phí
compaction
Các chiến lược placement
Best-fit: chọn khối nhớ trống
nhỏ nhất
First-fit: chọn khối nhớ trống
phù hợp đầu tiên kể từ đầu bộ
nhớ
Next-fit: chọn khối nhớ trống
phù hợp đầu tiên kể từ vị trí
cấp phát cuối cùng
Worst-fit: chọn khối nhớ trống
lớn nhất
36
Nhận xét
Cả hai giải pháp fixed và dynamic partitioning hầu như
không còn được dùng trong các hệ thống hiện đại
13
37
Chapter 7
Cơ chế phân trang (paging)
Cơ chế phân đoạn (segmentation)
Segmentation with paging
38
Cơ chế phân trang (1/3)
Cơ chế phân trang (paging) cho phép không gian địa chỉ
vật lý (physical address space) của một process có thể
không liên tục nhau
Bộ nhớ thực được chia thành các khối cố định và có kích
thước bằng nhau gọi là frame
Thông thường kích thước của frame là lũy thừa của 2, từ khoảng
512 byte đến 16 MB
Nhắc lại, bộ nhớ luận lý (logical memory) hay không gian
địa chỉ luận lý là tập mọi địa chỉ luận lý của quá trình
– Địa chỉ luận lý có thể được quá trình sinh ra bằng cách dùng
indexing, base register, segment register,
39
Cơ chế phân trang (2/3)
Bộ nhớ luận lý cũng được chia thành các khối cố định có
cùng kích thước gọi là trang nhớ (page)
Frame và trang nhớ có kích thước bằng nhau
Hệ điều hành phải thiết lập một bảng phân trang (page
table) để chuyển đổi (translate) địa chỉ luận lý thành địa
chỉ thực
Mỗi process được cấp phát một bảng phân trang
Thiết lập bảng phân trang cho process là một phần của chuyển
ngữ cảnh
Kỹ thuật phân trang khiến bộ nhớ có thể bị phân mảnh
nội, nhưng khắc phục được phân mảnh ngoại
14
40
Cơ chế phân trang (3/3)
logical memory
1
4
3
5
0
1
2
3
page table
page 0
page 2
physical memory
frame
number
0
1
2
3
page 14
5 page 3
page
number
0
1
2
3
41
Chuyển đổi địa chỉ trong paging
Địa chỉ luận lý gồm có:
Page number, p, là chỉ mục (index) vào bảng phân trang. Mỗi
mục (entry) trong bảng phân trang chứa chỉ số frame, gọi là số
frame cho gọn, chứa trang tương ứng trong bộ nhớ thực
Page offset, d, được kết hợp với địa chỉ nền (base address) của
frame để cho địa chỉ thực
Nếu kích thước của không gian địa chỉ ảo là 2m và kích
thước của trang là 2n ô nhớ (byte hay word tùy theo kiến trúc máy)
Bảng phân trang sẽ có tổng cộng 2m/2n = 2m - n mục
p d
page number page offset
m - n bit
(định vị từ 0 2m - n - 1)
n bit
(định vị từ 0 2n - 1)
42
Paging hardware
Nếu kích thước của bộ nhớ
thực là 2l (byte), thì mỗi mục
của bảng phân trang có l - n
bit để chứa frame number
frame number frame offset
f, l - n bit d, n bit
CPU p d f d
f
p
page table
logical
address
physical
address
physical
memory
f 0000
f 1111
f frame
15
43
Chuyển đổi địa chỉ nhớ trong paging
Ví dụ:
44
Hiện thực bảng phân trang (1)
Bảng phân trang được giữ trong bộ nhớ chính
Mỗi process được cấp một bảng phân trang
Thanh ghi page-table base (PTBR) trỏ đến bảng phân trang
Thanh ghi page-table length (PTLR) chứa kích thước của bảng
phân trang (có thể được dùng trong cơ chế bảo vệ bộ nhớ)
45
Hiện thực bảng phân trang (2)
Mỗi truy cập dữ liệu/lệnh cần hai thao tác truy xuất vùng
nhớ
1. Dùng page number p làm index để truy xuất mục trong bảng
phân trang nhằm lấy số frame
2. Dùng page offset d để truy xuất dữ liệu/lệnh trong frame
Do đó, thường dùng một cache phần cứng có tốc độ truy
xuất và tìm kiếm cao, gọi là thanh ghi kết hợp
(associative register) hoặc translation look-aside buffers
(TLBs)
Nguyên lý locality
16
46
TLB
TLB tìm kiếm truy xuất dữ liệu của nó với tốc độ cực
nhanh
Page number Frame number
Số mục của TLB
khoảng 8 .. 2048
Khi có chuyển ngữ
cảnh, TLB bị xóa
TLB là cache của
bảng phân trang
Ánh xạ page number
– Nếu page number có trong TLB (“hit”, trúng) lấy ngay được frame
number tiết kiệm được việc truy cập bộ nhớ để lấy frame number từ
bảng phân trang
– Ngược lại (“miss”, trật), phải lấy frame number từ bảng phân trang như
bình thường
Khi TLB đầy, thay
thế mục dùng LRU
47
Paging hardware với TLB
48
Đánh giá hiệu năng của TLB (1/2)
• Tính thời gian truy xuất hiệu dụng (Effective access time, EAT)
Thời gian tìm kiếm trong TLB:
Thời gian một chu kỳ truy xuất bộ nhớ: x
Hit ratio : tỉ số giữa số lần page number được tìm thấy
(hit) trong TLB và số lần truy xuất khởi nguồn từ CPU
0 1
Tính thời gian cần thiết để truy xuất ô nhớ:
Khi page number có trong TLB (“hit”) + x
Khi page number không có trong TLB (“miss”) + x + x
Thời gian truy xuất hiệu dụng
EAT = ( + x) + ( + 2x)(1 – )
= (2 – )x +
17
49
Đánh giá hiệu năng của TLB (2/2)
Ví dụ 1
Hit ratio = 0,8
EAT = (100 + 20) 0,8 +
(200 + 20) 0,2
= 1,2 100 + 20
= 140
Ví dụ 2
Hit ratio = 0,98
EAT = (100 + 20) 0,98 +
(200 + 20) 0,02
= 1,02 100 + 20
= 122
Giả sử (đơn vị thời gian: nano giây)
Tìm trong TLB = 20
Memory access = 100
50
Bảo vệ bộ nhớ
Việc bảo vệ bộ nhớ được hiện thực bằng cách dùng các
bit bảo vệ (protection bit) được giữ trong mỗi mục của
bảng phân trang. Các bit này biểu thị các thuộc tính của
trang như
read-only, read-write, execute-only
Ngoài ra, còn có một valid-invalid bit gắn với mỗi mục
trong bảng phân trang; trị của bit có thể là
“valid”: cho biết là trang của process, do đó là một trang hợp lệ
“invalid”: cho biết là trang không của process, do đó là một trang
bất hợp lệ
51
Bảo vệ bằng valid-invalid bit
00000
10468
12287
2 v
3 v
4 v
7 v
8 v
9 v
- i
- i
frame
number
valid-invalid
bit
0
1
2
3
4
5
6
7
0
1
2 page 0
3 page 1
4 page 2
5
6
7 page 3
8 page 4
9 page 5
...
page n
Mỗi trang nhớ có kích thước 2K = 2048 ô nhớ
Process có kích thước 10.468 phân mảnh nội ở frame 9 (chứa page
5), các địa chỉ ảo > 12287 là các địa chỉ invalid
Dùng PTLR để kiểm tra truy xuất đến bảng phân trang có nằm trong
bảng hay không
18
52
Bảng phân trang 2 mức (1/5)
Các hệ thống hiện đại đều hỗ trợ không gian địa chỉ ảo
rất lớn (232 đến 264), ở đây giả sử là 232
Giả sử kích thước trang nhớ là 4 K (= 212) ô nhớ
không gian địa chỉ ảo sẽ gồm 232/212 = 220 = 1 M page
bảng phân trang sẽ có 1 M mục
Giả sử mỗi mục của bảng phân trang gồm 4 byte thì mỗi process
cần 4 MB cho bảng phân trang, và 100 quá trình sẽ cần
Một giải pháp là, thay vì dùng một bảng phân trang duy
nhất cho mỗi process, “paging” bảng phân trang này, và
chỉ sinh những bảng phân trang cần thiết bảng phân
trang 2 mức (two-level page table)
53
Bảng phân trang 2 mức (2/5)
• Ví dụ
Một địa chỉ luận lý trên hệ thống 32-bit với trang nhớ 4K được chia
thành các phần sau:
Page number: 20 bit
Nếu mỗi mục dài 4 byte
Cần 220 4 byte = 4 MB
cho mỗi page table
Page offset: 12 bit
Bây giờ, bảng phân trang cũng được chia nhỏ nên page number
cũng được chia nhỏ thành 2 phần, vd
10-bit page number
10-bit page offset
Vì vậy, một địa chỉ luận lý sẽ như hình vẽ bên
• p1 : chỉ số của mục trong bảng phân trang mức 1 (outer-page table)
• p2 : chỉ số của mục trong bảng phân trang mức 2
page number offset
p2
page offset
dp1
10 bit10 bit 12 bit
20 bit 12 bit
54
Bảng phân trang 2 mức (3/5)
các bảng phân trang mức 2
- Có 2n1 mục trong bảng phân
trang mức 1
- Mỗi bảng phân trang mức 2 chứa
2n2 mục
n2 bitn1 bit
19
55
Bảng phân trang 2 mức (4/5)
Sơ đồ chuyển đổi địa chỉ (address-translation scheme)
cho kỹ thuật phân trang 2 mức, với 32-bit địa chỉ
page table mức 2
56
Bảng phân trang 2 mức (5/5)
Bảng phân trang 2 mức giúp
tiết kiệm bộ nhớ:
Vùng màu đỏ tương ứng với
phần không được sử dụng của
không gian địa chỉ ảo
Các mục màu đỏ được đánh
dấu là không có frame
Hình: để dễ thấy, các frame đã
được cấp sao cho text, data,
stack, nằm liên tục giống như
trong không gian địa chỉ ảo
Fig from Gottlieb
57
Bảng phân trang đa mức
Ví dụ: Không gian địa chỉ luận lý 64-bit với trang nhớ 4K
Bảng phân trang 2-mức vẫn còn quá lớn! Tương tự bảng phân
trang 2 mức, ta có bảng phân trang 3, 4,, n mức
Tiết kiệm chổ trong bộ nhớ chính bằng cách chỉ sinh các
bảng phân trang mà process cần
page number page offset page numbers page offset
page numbers page offset page numbers page offset
52 12 42 10 12
32 10 10 12 22 10 10 10 12
20
58
Bảng phân trang băm (1/2)
Nhận xét: Phí phạm vùng nhớ cho page table khi quá
trình chỉ truy cập một số lượng nhỏ các trang
Dùng kỹ thuật băm để giảm kích thước bảng phân trang
Phổ biến trong các hệ thống có địa chỉ lớn hơn 32 bit
Để giải quyết đụng độ khi lưu, mỗi mục của bảng băm
được gắn một danh sách liên kết mà mỗi phần tử là một
cặp (chỉ số trang, chỉ số frame):
Chỉ số trang được biến đổi qua hàm băm thành một hashed
value
Kế đó, cặp (chỉ số trang, chỉ số frame) sẽ được lưu vào danh
sách liên kết tại mục có chỉ số là hashed value
59
Bảng phân trang băm (2/2)
Giải thuật tìm trang: Chỉ số trang được biến đổi thành hashed
value -- chỉ số của mục cần truy cập trong bảng băm. Sau đó, trong
danh sách liên kết của mục, tìm phần tử chứa chỉ số trang để trích
ra được chỉ số frame
60
Chia sẻ các trang nhớ
Process 1
ed 1
ed 2
ed 3
data 1
ed 1
ed 2
ed 2
data 3
Process 3
3
4
6
2
0
1
2
3
3
4
6
1
0
1
2
3
Process 2
ed 1
ed 2
ed 3
data 2
3
4
6
7
0
1
2
3
0
1 data 1
2 data 3
3 ed 1
4 ed 2
5
6 ed 3
7 data 2
8
9
10
Bộ nhớ thực
21
61
Phân đoạn (1/3)
Dưới góc nhìn của user, một chương trình cấu thành từ
nhiều đơn vị luận lý gọi là đoạn (segment)
Lệnh: main program, procedure, function
Dữ liệu: local variables, global variables, common block, stack,
symbol table, arrays,
62
User view của một chương trình
Thông thường, một chương
trình được biên dịch. Trình
biên dịch sẽ tự động xây
dựng các segment
Ví dụ, trình biên dịch Pascal
sẽ tạo ra các segment
Global variables
Procedure call stack
Procedure/function code
Local variable
Trình loader sẽ gán mỗi
segment một số định
danh riêng
procedure
stack
symbol
table
function
sqrt
main program
63
Phân đoạn (2/3)
Dùng cơ chế phân đoạn (segmentation) trong quản lý bộ
nhớ có hỗ trợ user view
Không gian địa chỉ ảo là một tập các đoạn, mỗi đoạn có tên và
kích thước riêng
Một địa chỉ luận lý gồm tên đoạn và độ dời (offset) bên trong
đoạn đó (so sánh với phân trang!)
Cho phép không gian địa chỉ vật lý cấp cho process có thể
không liên tục nhau
22
64
Phân đoạn (3/3)
logical address space physical memory space
segment 1
segment 2
segment 3 segment 4
65
Hiện thực phân đoạn
Địa chỉ luận lý là một cặp
(segment number, offset)
Bảng phân đoạn (segment table): gồm nhiều mục, mỗi
mục mô tả một segment và chứa
limit, xác định kích thước của segment
base, chứa địa chỉ khởi đầu của segment trong bộ nhớ
Segment-table base register (STBR): trỏ đến vị trí bảng
phân đoạn trong bộ nhớ
Segment-table length register (STLR): số lượng segment
của chương trình
Một chỉ số segment s là hợp lệ nếu s < STLR
66
Một ví dụ về phân đoạn
procedure
stack
symbol
table
function
sqrt
main program
segment 0
segment 3
segment 1
segment 2
segment 4
procedure
stack
main
symbol table
function sqrt
limit base
0 1000 1400
1 400 6300
2 400 4300
3 1100 3200
4 1000 4700
segment
table
logical address space
physical memory space
1400
2400
3200
4300
4700
5700
6300
23
67
Phần cứng hỗ trợ phân đoạn
CPU
+
physical
memory
no
trap; addressing error
limit base
s
s d
yes
segment
table
68
Phân đoạn: Chuyển đổi địa chỉ
Ví dụ
69
Chia sẻ các đoạn
editor
data 1
segment 0 segment 1
logical address space
process P1
editor
data 2
segment 0 segment 1
logical address space
process P2
limit base
0 25286 43062
1 4425 68348
segment table
process P1
limit base
0 25286 43062
1 8850 90003
segment table
process P2
editor
data 1
data 2
physical memory
43062
72773
68348
90003
98853
24
70
Kết hợp phân trang và phân đoạn (1/2)
Kết hợp phân trang và phân đoạn nhằm tận dụng các ưu
điểm và hạn chế các khuyết điểm của chúng:
Vấn đề của phân đoạn: một đoạn có thể không nạp được vào bộ
nhớ, mặc dù đủ không gian trống, do phân mảnh ngoại
Ý tưởng giải quyết: paging đoạn, cho phép các page của đoạn
được nạp vào các frame không cần nằm liên tục nhau
71
Kết hợp phân trang và phân đoạn (2/2)
Có nhiều cách kết hợp. Một cách đơn giản là
segmentation with paging
• Mỗi process sẽ được cấp:
Một bảng phân đoạn
Nhiều bảng phân trang: mỗi đoạn có một bảng phân trang
Một địa chỉ luận lý (địa chỉ ảo) bao gồm:
segment number: là chỉ số của một mục trong bảng phân đoạn,
mục này chứa địa chỉ nền (base address) của bảng phân trang
cho đoạn đó
page number: là chỉ số của một mục trong bảng phân trang, mục
này chứa chỉ số frame trong bộ nhớ thực
offset: độ dời của vị trí ô nhớ trong frame nói trên
72
frame 0
frame 1
frame 2
frame 3
frame 4
frame 5
frame 6
Segmentation with paging (1/3)
(STE: segment table entry
PTE: page table entry)
Fig from Gottlieb
25
73
Segmentation with paging (2/3)
74
Segmentation with paging (3/3)
Segment base: địa chỉ thực của bảng phân trang của segment
present (hay valid-invalid) bit và modified bit chỉ tồn tại trong bảng
phân trang
Các thông tin bảo vệ và chia sẻ vùng nhớ thường nằm trong bảng
phân đoạn
Ví dụ: read-only/read-write bit,
Các file đính kèm theo tài liệu này:
- chuong_7_bo_nho_4634.pdf