const FRAME_SIZE: usize = 4096;
const TOTAL_MEMORY: usize = 1024 * 1024 * 128;
const TOTAL_FRAMES: usize = TOTAL_MEMORY / FRAME_SIZE;
static mut FRAME_BITMAP: [bool; TOTAL_FRAMES] = [false; TOTAL_FRAMES];
pub struct FrameAllocator;
impl FrameAllocator {
pub fn alloc() -> Option<usize> {
unsafe {
for (i, used) in FRAME_BITMAP.iter_mut() enumerate() {
if !*used {
*used = true;
return Some(i * FRAME_SIZE);
}
}
None
}
}
pub fn dealloc(addr: usize) {
let index = addr / FRAME_SIZE;
if index < TOTAL_FRAMES {
unsafe {
FRAME_BITMAP[index] = false;
}
}
}
}