allocpage.h

来自「南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,」· C头文件 代码 · 共 73 行

H
73
字号
#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 + =
减小字号Ctrl + -
显示快捷键?