COMPUTER SYSTEM - Phuong-Giang Nguyen ď Chuong 7 BO NHO tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập...
Trang 1Chapter 7: Bộ Nhớ Thực
Các kiểu địa chỉ nhớ
Chuyển đổi địa chỉ nhớ
Vấn đề cấp phát bộ nhớ liên tục (c ontiguous 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ý
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 đốihay 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
Trang 2Cá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)
Systemlibrary
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
Return Module B JMP “L+M”
Return Module C
Trang 3Chuyể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
2224
Process image
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ôngcần linker
Loader rất đơn giản
Hiếm được dùng (MSDOS COM files)
Trang 4Chuẩn bị sinh địa chỉ vật lý (2)
Vào thời điểm link-edit
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ôngthể dịch chuyển sau khi được nạp
Khôngcò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ônggiữ 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ôngtá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
Trang 5Sử 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:
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
Trang 6Fig 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
Trang 7Dynamic 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
Dynamic loading – Ví dụ
Trang 8Kỹ 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
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
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
Trang 9Swapping 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ànvà liên tụcvà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)
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ơnvù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
Trang 10Phâ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
Trang 11Chiế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
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ốngvà
đủ chứa nó [best fit]
Chỉ có một hàng đợi
chung cho mọi partition
Trang 12Giả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
Trang 13Chapter 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,…
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
Trang 14Cơ chế phân trang (3/3)
logical memory
1435
0123
0123page 14
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à 2mvà 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 - nmục
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 offsetf, l - n bit d, n bit
f p
page table
logical
address
physicaladdress
physicalmemory
f 00…00
f 11…11
f frame
Trang 15Chuyể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ớ)
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
Trang 16TLB
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à cachecủ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ư
Đá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 +
Trang 17Bả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ệ
Bảo vệ bằng valid-invalid bit
valid-invalidbit01234567
01
2 page 0
3 page 1
4 page 256
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
Trang 18Bả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 2204 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
p2page offset
Bảng phân trang 2 mức (3/5)
cácbảng phân trang mức 2
- Có 2n1mục trong bảng phân