2 releases
0.1.1 | Apr 13, 2024 |
---|---|
0.1.0 | Apr 13, 2024 |
#383 in Memory management
11KB
202 lines
Clock Page Replacement
A simple clock page replacement algorithm implementation.
Usage
First, you should have your type representing a page table entry on a memory implement Page
trait which requires basic access to some flag bits:
pub trait Page {
/// Check if the page is valid.
fn is_valid(&self) -> bool;
/// Check if the page is accessed.
fn is_accessed(&self) -> bool;
/// Check if the page is dirty.
fn is_dirty(&self) -> bool;
/// Set the 'A' bit.
fn set_accessed(&mut self);
/// Set the 'D' bit.
fn set_dirty(&mut self);
/// Clear the 'A' bit.
fn clear_accessed(&mut self);
/// Clear the 'D' bit.
fn clear_dirty(&mut self);
}
Then create a ClockPageReplacer
instance. Every time you allocate a physical memory page, you should call ClockPageReplacer::register
to register it to the replacer.
You don't need to unregister a page when it's evicted from the physical memory, because the replacer will automatically remove it when it becomes invalid.
When you need to replace a page, call the replace
method to get the page to replace. The page is automatically removed from the replacer.