📄 def_pmm.h
字号:
/***************************************************************************
** File name : def_pmm.h
** Author : x.cheng
** Create date :
**
** Comments:
** 物理内存管理的常量和函数声明
**
** Revisions:
** $Log: def_pmm.h,v $
** Revision 1.4 2005/08/19 15:03:01 x.cheng
** macro for vector free indicator
**
** Revision 1.3 2005/08/04 08:38:26 x.cheng
** new page fault handling function prototype
**
** Revision 1.2 2005/07/27 15:53:47 x.cheng
** change vPm2PageInit(unsigned long ulStartMemory, unsigned long ulEndMemory)
** to vPm2PageInit(unsigned long ulMemoryEnd)
**
** Revision 1.1.1.1 2005/07/27 06:53:15 x.cheng
** add into repositories
**
**
***************************************************************************/
#ifndef __DEF_PMM_H__
#define __DEF_PMM_H__
#include "type.h"
#include "..\..\inc\debug.h"
/*当前内核默认支持的最大内存容量是16MB,当然可以修改该修改的地方获得大的内存咯*/
#define LOWEST_OF_MEMORY 0x100000 /*记住,内核是放在物理内存1MB开始的地方的 */
#define PAGING_MEMORY (7*1024*1024) /*可以分页的内存8-1MB*/
#define PAGED_PAGES (PAGING_MEMORY>>12) /*可分页的物理内存页面数目*/
//#define ADDR_MAP_PNR(addr) (((addr-KernelVirtualAddressStart)-LOWEST_OF_MEMORY)>>12) /*内存地址映射为页号*/
#define PAGE_USED 100 /*设定页面被占用的标志*/
//---------------------------------------------------------------
//将向量装换成它代表的线性地址
#define VECTOR_TO_LINEAR_ADDRESS( pucBitmap ) \
( ( (unsigned long)((pucBitmap)-g_pucMemoryBitmapStart)<<12) + KERNEL_VIRTUAL_START )
#define LINEAR_ADDRESS_TO_VECTOR( pucAddress ) \
( ( ((pucAddress)-KERNEL_VIRTUAL_START)>>12 )+g_pucMemoryBitmapStart )
//---------------------------------------------------------------
//将向量转换成它代表的物理页框号
#define VECTOR_TO_PAGE_FRAME( pucBitmap ) \
( VECTOR_TO_LINEAR_ADDRESS( pucBitmap ) - KERNEL_VIRTUAL_START )
static inline volatile void sivOutofMemory(void)
{
panic("Out of memory...");
}
/*刷新页变换告诉cache宏函数*/
#define vInvalidateCache() \
__asm__ ("movl %%eax, %%cr3" : : "a"(0))
/*复制一页内存*/
#define vCopyOnePage(From, To) \
__asm__ ("cld; rep; movsl" :: "S"(From), "D"(To), "c"(1024):"cx", "di", "si")
/************ function prototype ******************/
/*******in file pm2_paging.c**************/
unsigned long ulPm2GetOneFreePage(void);
void vPm2FreeOnePage(unsigned long ulVirtualAddress);
unsigned long ulPm2MapPageToVirtualAddress(unsigned long ulPageAddr,
unsigned long ulVirtualAddr, unsigned short uiAttr);
int iPm2DoPageFault(unsigned long ulLinearAddr);
int iPm2DoPageWriteProtect(unsigned long ulLinearAddr);
//void vPm2PageInit(unsigned long ulStartMemory, unsigned long ulEndMemory);
void vPm2PageInit(unsigned long ulMemoryEnd);
void Pm2ShowPageStatus( void );
/* in file pm3_tmp.c */
void *pvPm3GetOneFreeTmpPage();
void vPm3FreeOneTmpPage(void *pvTmpPage, bool bFreeFrame);
#endif /* end of __DEF_PMM_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -