From 73d4390f27ef576bc62fed238f1a1c4a4da98776 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Tue, 18 Apr 2017 18:17:02 +0200 Subject: [PATCH] Create a memory manager for convenience --- src/memory/mod.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/memory/mod.rs b/src/memory/mod.rs index 631228d..22970bd 100644 --- a/src/memory/mod.rs +++ b/src/memory/mod.rs @@ -1,5 +1,6 @@ pub use self::area_frame_allocator::AreaFrameAllocator; pub use self::paging::remap_the_kernel; +pub use self::stack_allocator::Stack; use self::paging::PhysicalAddress; use multiboot2::BootInformation; @@ -100,3 +101,19 @@ pub trait FrameAllocator { fn allocate_frame(&mut self) -> Option; fn deallocate_frame(&mut self, frame: Frame); } + +pub struct MemoryController { + active_table: paging::ActivePageTable, + frame_allocator: AreaFrameAllocator, + stack_allocator: stack_allocator::StackAllocator, +} + +impl MemoryController { + pub fn alloc_stack(&mut self, size_in_pages: usize) -> Option { + let &mut MemoryController { ref mut active_table, + ref mut frame_allocator, + ref mut stack_allocator } = self; + stack_allocator.alloc_stack(active_table, frame_allocator, + size_in_pages) + } +}