Return a memory controller from memory::init

master
Philipp Oppermann 8 years ago
parent 73d4390f27
commit f1459a552c

@ -11,8 +11,7 @@ mod stack_allocator;
pub const PAGE_SIZE: usize = 4096;
pub fn init(boot_info: &BootInformation) {
pub fn init(boot_info: &BootInformation) -> MemoryController {
assert_has_not_been_called!("memory::init must be called only once");
let memory_map_tag = boot_info.memory_map_tag().expect(
@ -50,6 +49,20 @@ pub fn init(boot_info: &BootInformation) {
for page in Page::range_inclusive(heap_start_page, heap_end_page) {
active_table.map(page, paging::WRITABLE, &mut frame_allocator);
}
let stack_allocator = {
let stack_alloc_start = heap_end_page + 1;
let stack_alloc_end = stack_alloc_start + 100;
let stack_alloc_range = Page::range_inclusive(stack_alloc_start,
stack_alloc_end);
stack_allocator::StackAllocator::new(stack_alloc_range)
};
MemoryController {
active_table: active_table,
frame_allocator: frame_allocator,
stack_allocator: stack_allocator,
}
}
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]

@ -1,6 +1,6 @@
pub use self::entry::*;
pub use self::mapper::Mapper;
use core::ops::{Deref, DerefMut};
use core::ops::{Deref, DerefMut, Add};
use core::ptr::Unique;
use memory::{PAGE_SIZE, Frame, FrameAllocator};
use multiboot2::BootInformation;
@ -55,6 +55,15 @@ impl Page {
}
}
impl Add<usize> for Page {
type Output = Page;
fn add(self, rhs: usize) -> Page {
Page { number: self.number + rhs }
}
}
#[derive(Clone)]
pub struct PageIter {
start: Page,

Loading…
Cancel
Save