Bất lợi của Dynamic Partitioning
Nhược điểm chính của Dynamic Partitioning là Phân mảnh bên ngoài. Mặc dù, điều này có thể được loại bỏ bằng Compaction nhưng như chúng ta đã thảo luận trước đó, compaction làm cho hệ thống hoạt động kém hiệu quả.
Các bài viết liên quan:
Chúng ta cần tìm ra một cơ chế có thể tải các tiến trình trong các phân vùng theo cách tối ưu hơn. Hãy để chúng tôi thảo luận về một cơ chế động và linh hoạt được gọi là Paging.
Khi nào cần Paging
Chúng ta hãy xem xét một tiến trình P1 có kích thước 2 MB và bộ nhớ chính được chia thành ba phân vùng. Trong số ba phân vùng, hai phân vùng là các lỗ có kích thước 1 MB mỗi phân vùng.
P1 cần dung lượng 2 MB trong bộ nhớ chính để được tải. Chúng tôi có hai lỗ, mỗi lỗ 1 MB nhưng chúng không liền nhau.
Mặc dù, có 2 MB dung lượng trống trong bộ nhớ chính dưới dạng các lỗ đó nhưng điều đó vẫn vô dụng cho đến khi nó trở nên liền nhau. Đây là một vấn đề nghiêm trọng cần giải quyết.
Chúng ta cần có một số loại cơ chế có thể lưu trữ một tiến trình tại các vị trí khác nhau của bộ nhớ.
Ý tưởng đằng sau Paging là chia quá trình trong các trang để chúng ta có thể lưu trữ chúng trong bộ nhớ ở các lỗ khác nhau. Chúng ta sẽ thảo luận về Paging với các ví dụ trong các phần tiếp theo.
Paging với ví dụ
Trong Hệ điều hành, Paging là một cơ chế lưu trữ được sử dụng để truy xuất các tiến trình từ bộ nhớ thứ cấp vào bộ nhớ chính dưới dạng các trang.
Ý tưởng chính đằng sau Paging là phân chia mỗi quy trình dưới dạng các trang. Bộ nhớ chính cũng sẽ được phân chia dưới dạng các khung.
Một trang của quy trình sẽ được lưu trữ trong một trong các khung của bộ nhớ. Các trang có thể được lưu trữ ở các vị trí khác nhau của bộ nhớ nhưng ưu tiên luôn là tìm các khung hoặc lỗ liền kề.
Các trang của quy trình chỉ được đưa vào bộ nhớ chính khi chúng được yêu cầu nếu không chúng nằm trong bộ nhớ phụ.
Hệ điều hành khác nhau xác định kích thước khung hình khác nhau. Kích thước của mỗi khung phải bằng nhau. Xem xét thực tế là các trang được ánh xạ tới các khung trong Paging, kích thước trang cần phải giống với kích thước khung.
Thí dụ
Chúng ta hãy coi kích thước bộ nhớ chính là 16 Kb và kích thước khung hình là 1 KB do đó bộ nhớ chính sẽ được chia thành tập hợp 16 khung hình, mỗi khung hình 1 KB.
Có 4 quy trình trong hệ thống là P1, P2, P3 và P4, mỗi quy trình 4 KB. Mỗi tiến trình được chia thành các trang, mỗi trang 1 KB để một trang có thể được lưu trữ trong một khung.
Ban đầu, tất cả các khung đều trống do đó các trang của quy trình sẽ được lưu trữ theo cách liền kề.
Khung, trang và ánh xạ giữa hai thứ được hiển thị trong hình dưới đây.
Chúng ta hãy xem xét rằng, P2 và P4 được chuyển sang trạng thái chờ sau một thời gian. Bây giờ, 8 khung hình trở nên trống và do đó các trang khác có thể được tải vào nơi trống đó. Quá trình P5 có kích thước 8 KB (8 trang) đang đợi bên trong hàng đợi sẵn sàng.
Thực tế là, chúng ta có 8 khung không liền kề có sẵn trong bộ nhớ và việc Paging cung cấp sự linh hoạt trong việc lưu trữ quá trình ở những nơi khác nhau. Do đó, chúng ta có thể tải các trang của quá trình P5 thay cho P2 và P4.
Đơn vị quản lý bộ nhớ
Mục đích của Bộ quản lý bộ nhớ (MMU) là chuyển đổi địa chỉ logic thành địa chỉ vật lý. Địa chỉ logic là địa chỉ do CPU tạo ra cho mọi trang trong khi địa chỉ vật lý là địa chỉ thực của khung nơi mỗi trang sẽ được lưu trữ.
Khi một trang được CPU truy cập bằng cách sử dụng địa chỉ lôgic, hệ điều hành cần lấy địa chỉ vật lý để truy cập trang đó một cách vật lý.
Địa chỉ logic có hai phần.
- Số trang
- Bù lại
Khối quản lý bộ nhớ của HĐH cần chuyển đổi số trang thành số khung.
Thí dụ
Xem xét hình ảnh trên, giả sử rằng CPU yêu cầu từ thứ 10 của trang thứ 4 của quy trình P3. Vì số trang 4 của quy trình P1 được lưu trữ ở khung số 9 nên từ thứ 10 của khung thứ 9 sẽ được trả về dưới dạng địa chỉ thực.