46bb1d3157
https://github.com/ozkl/soso + Much smaller than Linux; builds instantly + Supports graphics - No network support - Doesn't work on a cloud server (yet?)
49 lines
1.6 KiB
C
49 lines
1.6 KiB
C
#ifndef VMM_H
|
|
#define VMM_H
|
|
|
|
#include "common.h"
|
|
|
|
typedef struct Process Process;
|
|
typedef struct List List;
|
|
|
|
extern uint32 *gKernelPageDirectory;
|
|
|
|
extern uint8 gKernelPageHeapBitmap[];
|
|
|
|
|
|
#define SET_PAGEFRAME_USED(bitmap, pageIndex) bitmap[((uint32) pageIndex)/8] |= (1 << (((uint32) pageIndex)%8))
|
|
#define SET_PAGEFRAME_UNUSED(bitmap, p_addr) bitmap[((uint32) p_addr/PAGESIZE_4M)/8] &= ~(1 << (((uint32) p_addr/PAGESIZE_4M)%8))
|
|
#define IS_PAGEFRAME_USED(bitmap, pageIndex) (bitmap[((uint32) pageIndex)/8] & (1 << (((uint32) pageIndex)%8)))
|
|
|
|
#define SET_PAGEHEAP_USED(pageIndex) gKernelPageHeapBitmap[((uint32) pageIndex)/8] |= (1 << (((uint32) pageIndex)%8))
|
|
#define SET_PAGEHEAP_UNUSED(p_addr) gKernelPageHeapBitmap[((uint32) p_addr/PAGESIZE_4K)/8] &= ~(1 << (((uint32) p_addr/PAGESIZE_4K)%8))
|
|
#define IS_PAGEHEAP_USED(pageIndex) (gKernelPageHeapBitmap[((uint32) pageIndex)/8] & (1 << (((uint32) pageIndex)%8)))
|
|
|
|
char* getPageFrame4M();
|
|
void releasePageFrame4M(uint32 p_addr);
|
|
|
|
uint32 *getPdFromReservedArea4K();
|
|
void releasePdFromReservedArea4K(uint32 *);
|
|
|
|
void initializeMemory(uint32 high_mem);
|
|
|
|
uint32 *createPd();
|
|
void destroyPd(uint32 *);
|
|
uint32 *copyPd(uint32* pd);
|
|
|
|
BOOL addPageToPd(uint32* pd, char *v_addr, char *p_addr, int flags);
|
|
BOOL removePageFromPd(uint32* pd, char *v_addr, BOOL releasePageFrame);
|
|
|
|
void enablePaging();
|
|
void disablePaging();
|
|
|
|
uint32 getTotalPageCount();
|
|
uint32 getUsedPageCount();
|
|
uint32 getFreePageCount();
|
|
|
|
void initializeProcessMmap(Process* process);
|
|
void* mapMemory(Process* process, uint32 nBytes, uint32 pAddress, List* pAddressList);
|
|
BOOL unmapMemory(Process* process, uint32 nBytes, uint32 vAddress);
|
|
|
|
#endif // VMM_H
|