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 + -
显示快捷键?