Hệ Điều Hành
C6: MEMORY MANAGERMENT
Quản Lý Bộ Nhớ
Khái niệm cơ sở
Nhiệm cụ của quản lý bộ nhớ
Overlay và swapping
Mô hình quản lý bộ nhớ đơn giản
• Fixed partitioning
• Dynamic partitioning
• Cơ chế phân trang (paging)
• Cơ chế phân đoạn (segmentation)
Khái niệm cơ sở
Quản lý bộ nhớ là công việc của hệ điều hành với sự hỗ trợ của phần cứng nhằm phân
phối, sắp xếp các process trong bộ nhớ sao cho hiệu quả.
Mục tiêu cần đạt được là nạp càng nhiều process vào bộ nhớ càng tốt (gia tăng mức độ đa
chương)
Trong hầu hết các hệ thống, kernel sẽ chiếm một phần cố đònh của bộ nhớ; phần còn lại
phân phối cho các process.
Các yêu cầu đối với việc quản lý bộ nhớ
• Cấp phát bộ nhớ cho các process
• Tái đònh vò (relocation): khi swapping,…
• Bảo vệ: phải 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
• Kết gán đòa chỉ nhớ luận lý của user vào đòa chỉ thực
Nhiệm vụ của quản lý bộ nhớ
Trong các hệ thống đơn chương trình (uniprogramming), trên bộ nhớ chính ngồi hệ điều
hành, chỉ có một chương trình đang thực hiện.
Trong các hệ thống đa chương (multiprogramming) trên bộ nhớ chính ngồi hệ điều hành, có
thể có nhiều tiến trình đang hoạt động.
Do đó nhiệm vụ quản lý bộ nhớ của hệ điều hành trong hệ thống đa chương trình sẽ phức tạp
hơn nhiều so với trong hệ thống đơn chương trình.
nhớ chính và bộ nhớ phụ.
• Bộ nhớ chính cung cấp một tốc độ truy cập dữ liệu cao, nhưng dữ liệu trên nó phải được làm
tươi thường xun và khơng thể tồn tại lâu dài trên nó.
• Bộ nhớ phụ có tốc độ truy xuất chậm và rẻ tiền hơn so với bộ nhớ chính nhưng nó khơng cần
làm tươi thường xun.
Cơ chế overlay
Tại mỗi thời điểm, chỉ giữ lại 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.
Cơ chế này rất hữu dụng khi kích thước một process lớn hơn không gian bộ nhớ cấp cho
process đó.
Cơ chế này được điều khiển bởi người sử dụng (thông qua sự hỗ trợ của các thư viện lập
trình) chứ không cần sự hỗ trợ của hệ điều hành
Cơ chế swapping
Một process có thể tạm thời bò swap ra khỏi bộ nhớ chính và lưu trên một hệ thống lưu trữ
phụ. Sau đó, process có thể được nạp lại vào bộ nhớ để tiếp tục quá trình thực thi.
Swapping policy: hai ví dụ
• 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 cơ chế đònh thời theo độ ưu tiên (priority-based scheduling)
o 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 mới đến được nạp vào bộ nhớ để thực thi
Hiện nay, ít hệ thống sử dụng cơ chế swapping trên
2
Minh họa cơ chế swapping
Kỹ thuật cấp phát bộ nhớ (nạp chương trình vào bộ nhớ chính)
Trong chương này, mô hình quản lý bộ nhớ là một mô hình đơn giản, không có bộ nhớ ảo.
Một process phải được nạp hoàn toàn vào bộ nhớ thì mới được thực thi (ngoại trừ khi sử
dụng cơ chế overlay).
Các cơ chế quản lý bộ nhớ sau đây rất ít (hầu như không còn) được dùng trong các hệ
thống hiện đại
• Phân vùng cố đònh (fixed partitioning)
hơn kích thước của một partition nhưng không phải là bội số của kích thước một partition
thì dễ xảy ra hiện tượng phân mảnh bên trong (internal fragmentation) bộ nhớ, gây lãng phí
bộ nhớ.
Ví dụ, nếu có 3 không gian trống kích thước 30K nằm rãi rác trên bộ nhớ, thì cũng sẽ không
nạp được một modun chương trình có kích thước 12K, hiện tượng này được gọi là hiện tượng phân
mảnh bên trong.
Phân vùng cố định với kích thước partition không bằng nhau:
Có hai cách để lựa chọn khi đưa một tiến trình vào partition:
Mỗi phân vùng có một hàng đợi tương ứng.
• Khi cần được nạp vào bộ nhớ nó sẽ được đưa đến hàng đợi của phân vùng có kích
thước vừa đủ để chứa nó, để vào/để đợi được vào phân vùng.
• Tuy nhiên các tiếp cận này kém linh động vì có thể có một phân vùng đang trống,
trong khi có nhiều tiến trình đang phải đợi để được nạp vào các phân vùng khác, điều này
gây lãng phí trong việc sử dụng bộ nhớ.
Dùng một hàng đợi chung cho tất cả các phân vùng:
• Các tiến trình muốn được nạp vào phân vùng nhưng chưa được vào sẽ được đưa vào
hàng đợi chung này.
• Nếu có một phân vùng trống thì hệ thống sẽ xem xét để đưa một tiến trình có kích
thước vừa đủ vào phân vùng trống đó.
• Cách tiếp cận này linh động hơn so với việc sử dụng nhiều hàng đợi như ở trên
• Tuy nhiên việc chọn tiến trình để đưa vào phân vùng là một việc làm khá phức tạp vì
nó phải dựa vào nhiều yếu tố như: độ ưu tiên, trạng thái hiện tại, các mối quan hệ của tiến
trình,
Kỹ thuật cấp phát bộ nhớ (nạp chương trình vào bộ nhớ chính)
Cả hai loại này còn một số hạn chế sau đây:
• Số lượng các tiến trình có thể hoạt động trong hệ thống tại một thời điểm phụ thuộc
vào số lượng các phân vùng cố định trên bộ nhớ.
• Nếu kích thước của tiến trình nhỏ hơn kích thước của một phân vùng thì có thể dẫn
đến hiện tượng phân mảnh nội vi gây lãng phí trong việc sử dụng bộ nhớ.
• Sự phân vùng cố định ít được sử dụng trong các hệ điều hành hiện nay.
Best-fit: chọn khối nhớ có kích thước vừa đúng bằng kích thước của tiến trình cần được nạp
vào bộ nhớ.
First-fit: trong trường hợp này hệ điều hành sẽ bắt đầu quét qua các khối nhớ trống bắt đầu từ
khối nhớ trống đầu tiên trong bộ nhớ, và sẽ chọn khối nhớ trống đầu tiên có kích thước đủ lớn để nạp
tiến trình.
Next-fit: tương tự như First-fit nhưng ở đây hệ điều hành bắt đầu quét từ khối nhớ trống kế
sau khối nhớ vừa được cấp phát và chọn khối nhớ trống kế tiếp đủ lớn để nạp tiến trình.
6
Cơ chế phân trang (paging)
Cơ chế phân trang 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ớ vật lý đượ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
16MB.
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ý
mà một chương trình bất kỳ có thể sinh ra.
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) để ánh xạ đòa chỉ luận lý
thành đòa chỉ vật lý
Mỗi process có một bảng phân trang, được quản lý bằng một con trỏ lưu giữ trong PCB. Công
việc thiết lập bảng phân trang cho process là một phần của chuyển ngữ cảnh
Cơ chế phân trang khiến bộ nhớ bò phân mảnh nội, tuy nhiên lại khắc phục được phân
mảnh ngoại.
Bảo vệ bộ nhớ
Việc bảo vệ bộ nhớ được hiện thực bằng cách gắn với frame các bit bảo vệ (protection
bits) được giữ trong bảng phân trang. Các bit này biểu thò các thuộc tính sau
• 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