diff --git a/src/lib.rs b/src/lib.rs index 4c9185e9..71d22294 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,6 +11,7 @@ extern crate multiboot2; #[macro_use] mod vga_buffer; +mod memory; #[no_mangle] pub extern fn rust_main(multiboot_information_address: usize) { diff --git a/src/memory/mod.rs b/src/memory/mod.rs new file mode 100644 index 00000000..553a0d59 --- /dev/null +++ b/src/memory/mod.rs @@ -0,0 +1,17 @@ +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 } + } +} + +pub trait FrameAllocator { + fn allocate_frame(&mut self) -> Option; + fn deallocate_frame(&mut self, frame: Frame); +}