- Đọc/Ghi ngày, tháng, năm
b/ Sử dụng danh sách liên kết: mỗi nút của danh sách liên kết lưu thơng tin một vùng nhớ chứa tiến trình (P) hay vùng nhớ trống giữa hai tiến trình (H).
4.2.1.2 Mơ hình Base & Limit
Giống như mơ hình Linker-Loader nhưng phần cứng cần cung cấp hai thanh ghi, một thanh ghi nền (base register) và một thanh ghi giới hạn (limit register). Khi một tiến trình được cấp phát vùng nhớ, hệđiều hành cất vào thanh ghi nền địa chỉ bắt đầu của vùng nhớ cấp phát cho tiến trình, và cất vào thanh ghi giới hạn kích thước của tiến trình.
Hình 4.5: một ví dụ về mơ hình base&limit
Khi tiến trình thực thi, mỗi địa chỉảo (địa chỉảo cũng chính là địa chỉ tương đối) sẽđược MMU so sánh với thanh ghi giới hạn để bảo đảm tiến trình khơng truy xuất ngồi phạm vi vùng nhớ được cấp cho nĩ. Sau đĩ địa chỉ ảo được cộng với giá trị trong thanh ghi nền để cho ra địa chỉ tuyệt đối trong bộ nhớ. JUMP 0X5000 HĐH Bộ nhớ vật lý JUMP 0X2000 P.EXE 0X3000 (base) 0X6000 (bound) 0X3000 0X0000
Hình 4.6: cơ chế MMU trong mơ hình base&limit
Nhận xét:
+ Cĩ thể di chuyển các chương trình trong bộ nhớ vì do tiến trình được nạp ở dạng địa chỉảo, khi tiến trình được di chuyển đến một vị trí mới, hệđiều hành chỉ cần nạp lại giá trị cho thanh ghi nền, và việc chuyển đổi địa chỉđược MMU thực hiện vào thời điểm xử lý.
+ Cĩ thể cĩ hiện tượng phân mảnh ngoại vi (external fragmentation ): tổng vùng nhớ trống đủđể thoả mãn yêu cầu, nhưng các vùng nhớ này lại khơng liên tục nên khơng đủđể cấp cho một tiến trình khác. Cĩ thể áp dụng kỹ thuật “dồn bộ nhớ “ (memory compaction ) để kết hợp các mảnh bộ nhớ nhỏ rời rạc thành một vùng nhớ lớn liên tục, tuy nhiên kỹ thuật này địi hỏi nhiều thời gian xử lý. Ví dụ về sự phân mảnh ngoại vi của bộ nhớ, các tiến trình liên tục vào ra bộ nhớ, sau một thời gian sẽđể lại các vùng nhớ nhỏ mà khơng thể chứa bất kỳ tiến trình nào.
Hình 4.7: một ví dụ về sự phân mảnh ngoại vi trong mơ hình cấp phát liên tục
* Vấn đề nảy sinh khi kích thước của tiến trình tăng trưởng trong qúa trình xử lý mà khơng cịn vùng nhớ trống gần kềđể mở rộng vùng nhớ cho tiến trình. Cĩ hai cách giải quyết:
+ Dời chỗ tiến trình: di chuyển tiến trình đến một vùng nhớ khác đủ lớn để thỏa mãn nhu cầu tăng trưởng của tiến trình. + Cấp phát dư vùng nhớ cho tiến trình : cấp phát dự phịng cho tiến trình một vùng nhớ lớn hơn yêu cầu ban đầu của tiến trình. D D D D D C C E E E B B B B B B B A A A A A A F OS OS OS OS OS OS OS OS
Hình 4.8: dành chỗ trống để tiến trình cĩ thể phát triển trong mơ hình cấp phát liên tục
+ Tiến trình luơn được lưu trữ trong bộ nhớ suốt quá trình xử lý của nĩ nên tính đa chương của hệ điều hành sẽ bị hạn chế bởi kích thước bộ nhớ và kích thước của các tiến trình trong bộ nhớ. Cách giải quyết là khi tiến trình bị khĩa (đợi tài nguyên, đợi một sự kiện,…) hoặc tiến trình sử dụng hết thời gian CPU dành cho nĩ, nĩ cĩ thểđược chuyển tạm thời ra bộ nhớ phụ (đĩa,…) và sau này được nạp trở lại vào bộ nhớ chính để tiếp tục xử lý (kỹ thuật swapping).
Để tránh tình trạng bộ nhớ bị phân mảnh vì do phải cấp phát một vùng nhớ liên tục cho tiến trình, hệđiều hành cĩ thể cấp phát cho tiến trình những vùng nhớ tự do bất kỳ, khơng cần liên tục.