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

📄 allocpage.h

📁 a linux like c++ kernel
💻 H
字号:
#ifndef _MMALLOCPAGE_H#define _MMALLOCPAGE_H#include "layout.h"#define SYSPAGE -1979struct page_t;extern page_t * pagemap;struct page_t {	int refcnt;	paddr_t paddr()	{		return pagemul(this - pagemap);	}	vaddr_t vaddr() { return ptov(paddr()); }	void * data() { return (void *)vaddr(); }};extern inline page_t * patopage(paddr_t pa){	assert(pa < nphysbyte);	return pagemap + pagediv(pa);}extern inline page_t * vatopage(vaddr_t va){	return patopage(vtop(va));}/* flags for allocpage */#define AKERN	1	/* atomic and NEVER fail */#define ADRIVER 2	/* atomic but may fail */#define AUSER	4	/* non-atomic(currently is atomic) and may fail */#define ACLEAR	8#define KERNQUOTA 	4#define DRIVERQUOTA 	12extern void allocbminit();extern void * allocbm(int size, int balign = sizeof(long));extern void freebm();extern void pagemapinit();extern int lotsfreemem();extern void * allocpage(int flags);extern void freepage(void * page);extern inline paddr_t allocphys(int flags){	vaddr_t vaddr = (vaddr_t) allocpage(flags); 	return vaddr ? vtop(vaddr) : 0;}extern inline void freephys(paddr_t paddr){	freepage((void*)ptov(paddr));}extern inline void dupphys(paddr_t paddr){#if DEBUG	int ret = patopage(paddr)->refcnt;	assert(ret != SYSPAGE);#endif	patopage(paddr)->refcnt++;}extern inline void duppage(void * page){	dupphys(vtop((vaddr_t)page));}extern int lowfreepage(int request = 0);extern void outofmem(int user);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -