IV. CẤP PHÁT BỘ NHỚ LIÊN TỤC Ý tưởng:
➢Mỗi tiến trình được nạp vào một vùng nhớ liên tục đủ lớn để chứa toàn bộ tiến trình.
➢Ưu điểm: việc chuyển đổi địa chỉ logic thành địa chỉ vật lý và ngược lại chỉ cần dựa vào một công thức đơn giản
<địa chỉ vật lý> = <địa chỉ bắt đầu> + <địa chỉ logic>
➢Nhược điểm: cấp phát liên tục có nhược điểm lớn nhất là không sử dụng hiệu quả bộ nhớ do hiện tượng phân mảnh bộ nhớ.
HIỆN TƯỢNG PHÂN MẢNH BỘ NHỚ
➢Không thể nạp được một tiến trình nào đó do không có một vùng nhớ trống liên tục đủ lớn trong khi tổng kích thước các vùng nhớ trống đủ để thỏa mãn yêu cầu.
HIỆN TƯỢNG PHÂN MẢNH BỘ 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.
▪ Dùng kết khối (compacting), nếu có thể, để 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.
▪ 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.
HIỆN TƯỢNG PHÂN MẢNH BỘ NHỚ
OS sẽ cấp phát hẳn khối18,464 bytes cho process
dư ra 2 bytes không dùng!
HIỆN TƯỢNG PHÂN MẢNH BỘ NHỚ
➢Ví dụ: nếu bộ nhớ có ba vùng nhớ trống liên tục với kích thước 1MB, 3MB, 5MB thì không thể nào nạp một chương trình có kích thước 6MB mặc dù tổng kích thước bộ nhớ trống là 9MB.
IV. CẤP PHÁT BỘ NHỚ LIÊN TỤC
➢Để giải quyết vấn đề phân mảnh bộ nhớ:
▪ Đề ra chiến lược cấp phát hợp lý
▪ Tái định vị các tiến trình
▪ Sử dụng kỹ thuật hoán vị (swapping)
▪ Sử dụng kỹ thuật phủ lấp (overlay)
FIXED PARTITION
➢Chia bộ nhớ thành nhiều 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 của partition thì được nạp vào partition đó.
➢Nếu chương trình có kích thước lớn hơn partition thì phải dùng cơ chế overlay.
➢Nhận xét: dễ bị phân mảnh nội => không hiệu quả
CHIẾN LƯỢC PLACEMENT
➢Partition có kích thước bằng nhau:
▪ Còn một partition trống => process được nạp vào partition đó.
▪ Không còn partition trống nhưng trong đó có process đang bị blocked =>
swap process đó ra bộ nhớ phụ nhường chỗ cho process mới.
CHIẾN LƯỢC PLACEMENT
➢Partition có kích thước khác nhau:
▪ Gán mỗi process vào partition có
kích thước nhỏ nhất, phù hợp với nó.
▪ Có hàng đợi cho mỗi partition.
▪ Giảm thiểu phân mảnh nội.
▪ Vấn đề: có thể có hàng đợi full, một số hàng đợi empty.
CHIẾN LƯỢC PLACEMENT
➢Partition có kích thước không bằng nhau:
▪ Chỉ có một hàng đợi chung cho các partition.
▪ Khi cần nạp process vào bộ nhớ => chọn partition có bộ nhớ còn trống nhỏ nhất.
DYNAMIC PARTITION
◼ Số lượng 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
➢Dùng để quyết định cấp phát khối bộ nhớ nào còn trống cho process.
➢Chiến lược placement:
▪ Best-fit: chọn khối nhớ trống nhỏ nhất vừa đủ để cấp phá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
ĐỀ RA CHIẾN LƯỢC CẤP PHÁT HỢP LÝ
CHIẾN LƯỢC PLACEMENT
ĐỀ RA CHIẾN LƯỢC CẤP PHÁT HỢP LÝ
➢Chọn vùng nhớ trống nào để cấp phát cho một tiến trình khi có nhu cầu.
▪ First-fit: Cấp phát vùng nhớ trống liên tục đầu tiên đủ lớn.
▪ Best-fit: Cấp phát vùng nhớ trống liên tục nhỏ nhất đủ lớn. Chiến lược này tạo ra lỗ trống nhỏ nhất còn thừa lại => phải tìm kiếm trên toàn bộ danh sách các vùng trống.
▪ 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: cấp phát vùng nhớ trống liên tục lớn nhất đủ lớn => phải tìm kiếm trên toàn bộ danh sách.
First-fit tốt hơn về tốc độ và Best-fit tối ưu hóa việc sử dụng bộ nhớ.
TÁI ĐỊNH VỊ CÁC TIẾN TRÌNH
➢Kết hợp các mảnh bộ nhớ trống nhỏ rời rạc thành một vùng nhớ trống lớn liên tục.
➢Đòi hỏi nhiều thời gian xử lý, ngoài ra sự kết buộc địa chỉ phải thực hiện vào thời điểm xử lý vì các tiến trình có thể bị di chuyển trong quá trình dồn bộ nhớ.
TÁI ĐỊNH VỊ CÁC TIẾN TRÌNH
TÁI ĐỊNH VỊ CÁC TIẾN TRÌNH
KỸ THUẬT HOÁN VỊ (SWAPPING)
➢Cơ chế: 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.
➢Chính sách:
▪ Round Robin
▪ Roll out, Roll in: Dùng theo độ ưu tiên (process có độ ưu tiên thấp sẽ bị swap out ra thay thế cho process có độ ưu tiên cao hơn).
Hiện nay, ít hệ thống sử dụng cơ chế swapping trên.
KỸ THUẬT HOÁN VỊ (SWAPPING)
KỸ THUẬT PHỦ LẤP (OVERLAY)
➢Cơ chế: Chia chương trình (process) thành nhiều phần nhỏ hơn bộ nhớ, mỗi phần là một 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 ích 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.
KỸ THUẬT PHỦ LẤP (OVERLAY)
Giả sử bộ nhớ chính được cấp phát các phân vùng có kích thước là 600K, 500K, 200K, 300K (theo thứ tự), sau khi thực thi xong, các tiến trình có kích thước 212K, 417K, 112K, 426K (theo thứ tự) sẽ được cấp phát bộ nhớ như thế nào, nếu sử dụng: Thuật toán First fit, Best fit, Next fit, Worst fit? Thuật toán nào cho phép sử dụng bộ nhớ hiệu quả nhất trong trường hợp trên
BÀI TẬP