Started abstract memory manager class
This commit is contained in:
50
src/memorymanager.hpp
Normal file
50
src/memorymanager.hpp
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#ifndef MEMORYMANAGER_H
|
||||||
|
#define MEMORYMANAGER_H
|
||||||
|
|
||||||
|
#include "systypes.h"
|
||||||
|
|
||||||
|
class MemoryManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates space for a new top-level page table, and initializes it to
|
||||||
|
* point only to the kernel's page tables.
|
||||||
|
*
|
||||||
|
* @returns the physical address of the new top-level page table
|
||||||
|
*/
|
||||||
|
virtual physaddr_t createAddressSpace() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the given top-level page table(s).
|
||||||
|
*
|
||||||
|
* @param table the top-level page table to load
|
||||||
|
*/
|
||||||
|
virtual void loadAddressSpace(physaddr_t table) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maps a single page to a single frame. Allocates a new page table if one
|
||||||
|
* does not exist for that frame.
|
||||||
|
*
|
||||||
|
* @param page the virtual address of the page to map
|
||||||
|
* @param frame the physical address of the frame to map to
|
||||||
|
* @param flags flags to apply to the entry
|
||||||
|
*
|
||||||
|
* @returns zero upon success, nonzero on failure
|
||||||
|
*/
|
||||||
|
virtual int mapPage(void* page, physaddr_t frame, int flags) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes the page table entry for the specified page. Does not deallocate
|
||||||
|
* redundant page tables or modify higher level tables; these are cleaned up
|
||||||
|
* after the owning process ends.
|
||||||
|
*
|
||||||
|
* @param page the virtual address of the page to unmap
|
||||||
|
*
|
||||||
|
* @returns zero upon success, nonzero on failure
|
||||||
|
*/
|
||||||
|
virtual int unmapPage(void* page) = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user