You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
595 B
28 lines
595 B
pub use self::area_frame_allocator::AreaFrameAllocator;
|
|
use self::paging::PhysicalAddress;
|
|
|
|
mod area_frame_allocator;
|
|
mod paging;
|
|
|
|
pub const PAGE_SIZE: usize = 4096;
|
|
|
|
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
|
|
pub struct Frame {
|
|
number: usize,
|
|
}
|
|
|
|
impl Frame {
|
|
fn containing_address(address: usize) -> Frame {
|
|
Frame{ number: address / PAGE_SIZE }
|
|
}
|
|
|
|
fn start_address(&self) -> PhysicalAddress {
|
|
self.number * PAGE_SIZE
|
|
}
|
|
}
|
|
|
|
pub trait FrameAllocator {
|
|
fn allocate_frame(&mut self) -> Option<Frame>;
|
|
fn deallocate_frame(&mut self, frame: Frame);
|
|
}
|