Thay thế trang là một phần quan trọng của bất kỳ hệ thống MM. Về cơ bản, Thay thế trang quan tâm việc lựa chọn trang để xuất trang - tức là trao đổi ra khỏi bộ nhớ, bất cứ khi cần thiết nhiều bộ nhớ trống phát sinh. Các Thuật toán thay thế trang lý tưởng là loại bỏ các trang được yêu cầu để truy cập ở thời gian xa nhất. Việc này làm cho số lỗi trang xuất hiện ít nhất, và do thời gian trao đổi bị lãng phí là ít nhất, lần lượt cải thiện hiệu suất và tính
Hoàng An
thông suốt của hệ thống. Nhưng khi nó không thể biết các trang sẽ được truy cập ở thời gian xa nhất, thuật toán thay này không thể thực hiện.
Windows
Hệ thống được sử dụng bởi Windows trong trường hợp này nó quá tinh vi và phức tạp. Windows sử dụng nhóm nhu cầu phân trang để lấy trang và thuật toán đồng hồ cho việc thay thế trang. Trong nhóm nhu cầu phân trang, các trang được đưa vào bộ nhớ khi nó được yêu cầu. Ngoài ra, thay vì mang 1, Windows thường mang lại một cụm từ 1-8 trang, tùy thuộc vào trạng thái hiện tại của hệ thống. Hạt nhân nhận được 5 loại lỗi trang sau:
1. The page referenced is not committed. 2. A protection violation has occurred. 3. A shared page has been written. 4. The stack needs to grow.
5. The page referenced is committed but not currently mapped in. Hai lỗi đầu tiên là các lỗi không có khả năng thu hồi.
Lỗi thứ ba cho thấy một nỗ lực thay đổi lên trang chỉ được phép đọc. Sao chép trang đến một nơi khácvà tạo một trang mới có thể đọc/ghi. Đây là cách Copy-on-Write làm việc.
Lỗi thứ tư cần phải được trả lời bằng việc tìm kiếm một trang thêm. Điểm quan trọng nhất về các Paging Windows System là nó làm cho việc sử dụng nặng nề của Working Set. Tập các trang đang làm việc (Working set) được định nghĩa là số lượng bộ nhớ chính hiện đang được giao để xử lý, Working set bao gồm các trang xuất hiện trong bộ nhớ chính. Kích thước của các Working Set so le, không liên tục. Vì vậy, những khó khăn với Working Set được giảm xuống. Các thuật toán đồng hồ được sử dụng bởi Windows là cục bộ. Khi một lỗi trang xảy ra, và lỗi làm việc của tiến trình thiết lập dưới mức tối thiểu, sau đó trang được thêm vào các Working Set một cách đơn giản. Mặt khác, nếu các Working Set cao hơn mức tối thiểu, thì nó làm giảm kích thước của Working Set. Do đó các thuật toán có thể được tổng quát. Tuy nhiên, hệ thống không làm tối ưu quá tổng quát. Ví dụ: nó làm tăng các Working set của các tiến trình đang gây ra một số lượng lớn lỗi trang, và giảm các Working set cho những tiến trình không yêu cầu đủ bộ nhớ. Thay vì chỉ làm việc khi có một lỗi trang, giống như UNIX, Windows cũng có một tiến trình ngầm làm việc này, trường hợp này Balance Set Manager. Điều này được gọi mỗi 1 giây, và nó sẽ kiểm tra liệu có đủ bộ nhớ trống. Nếu không có, thì sẽ gọi Working Set Manager. Working Set Manager duy trì để giữ cho bộ nhớ trống vượt ngưỡng. Nó kiểm tra Working Set của tiến trình từ cũ và lớn đến mới và nhỏ. Và tùy thuộc vào bao nhiêu lỗi trang, mà làm tăng hoặc giảm chúng. Nếu bit tham chiếu của trang là rõ ràng, thì truy cập liên kết với các trang được tăng lên. Nếu các bit tham chiếu được thiết lập, tiến trình bộ nhớ ảo thiết lập về không. Sau khi quét, các trang truy cập cao nhất được loại bỏ từ các Working Set. Như vậy, các khía cạnh tổng quát của thuật toán đồng hồ này được quy định bởi Trình quản lý thiết làm việc này. Windows chia danh sách các trang thành bốn danh sách:
1. Modified List: Các trang bị loại khỏi Working Set, vẫn còn liên quan đến tiến trình đã gọi nó.
2. Standby List: Các trang bị loại ra khỏi Modified List, cũng còn liên quan đến tiến trình gọi nó, nhưng có 1 bản sao trên vùng Paging File ở bộ nhớ ngoài, vì vậy có thể xóa bản gốc trên RAM nếu cần.
3. Free List: Các trang bị loại khỏi Standby List vì không còn gắn với tiến trình nào nữa.
4. Zeroed List: Các trang chuyển từ Free List và được ghi lại hoàn toàn bằng mã 0
Quá trình chuyển đổi giữa các danh sách này được xử lý bằng Working Set Manager và một số các tiến trình ngầm khác như tiến trình swapper,...
Linux
Linux 2,2, Máy ảo Linux đã tập trung vào đơn giản và mức thấp. Do đó nó khá nguyên thủy và có nhiều vấn đề, đặc biệt là dưới tải nặng. Nó bị ảnh hưởng bởi hệ thống V. Tuy nhiên Riel [20] đã làm việc rất nhiều trên Máy ảo Linux và cải thiện rất nhiều cho việc phát hành Linux (thảo luận của ông với Linux sử dụng một hệ thống nhu cầu phân trang không có phân trang trước. Cho đến 2.2 phiên bản hạt nhân, Linux sử dụng thuật toán NRU để thay thế trang, nhưng do các thiếu sót của thuật toán, họ đã thay đổi nó và thực hiện tương tự LRU được sử dụng trong bản 2,4.
Sự lão hóa để có hiệu lực LRU là mang lại bằng cách tăng tuổi (một truy cập liên kết với một trang) được tham chiếu trong quá trình quét, và giảm theo cấp số nhân (chia 2) khi không tìm thấy tham chiếu. Phương pháp này xấp xỉ LRU khá tốt. Linux 2.4 phân chia các trang ảo thành 4 danh sách
1. Active list
2. Inactive-dirty list 3. Inactive-clean list 4. Free list
Danh sách 3 chứa các trang được chọn cho việc thu hồi. Thông thường, các trang hoạt động trên danh sách 1. Tuy nhiên, theo thời gian, nếu một số trang không hoạt động, thì đó độ tuổi (age) của chúng giảm dần và xuống tới 0, và lúc đó nó là một ứng cử viên cho việc thu hồi. Trang này được chuyển từ danh sách 1 vào danh sách 2. Đối với Linux 2.4, kích thước danh sách đã không hoạt động được thay đổi. Bây giờ hệ thống sẽ quyết định có bao nhiêu trang không hoạt động nên giữ trong bộ nhớ cho các trường hợp cụ thế. Sự thống nhất của bộ đệm cache và bộ nhớ cache trang cache đã được hoàn thành trong 2,4. Một tối ưu hóa hiện diện trong nhân Linux là nhận ra ngay liên tục I / O, nghĩa là giảm các ưu tiên của trang "đằng sau" và vì vậy trang đó trở thành một ứng cử viên thu hồi lại sớm hơn. Trang ngầm trong Linux là “kswapd” được kích hoạt định kì sẽ giảm dần biến đếm tuổi (age) của trang, và giải phóng bộ nhớ nếu không có hiệu lực.
Và flusing được thực hiện bởi “bdflush” daemon, đánh thức định kỳ để điền các trang bẩn vào đĩa. Flusing lấy ra từ danh sách không hoạt động,
Hoàng An
không xảy ra trong 1 kiểu nào đó, nhưng hệ thống chờ đợi đúng thời điểm, khi nhóm có thể được sử dụng, và đĩa đọc-viết có thể được giảm thiểu, do đó tối ưu hóa flushing.