⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 def_pmm.h

📁 小型操作系统,以VC为开发环境,需要boachs调试
💻 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 + -