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

📄 mm.h

📁 南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,
💻 H
字号:
#ifndef _MM_H#define _MM_H#include <asm/pgtbl.h>#include <asm/frame.h>#include <lib/queue.h>#include <mm/allocpage.h>/* * MAX_ARG_PAGES defines the number of pages allocated for arguments * and envelope for the new program. 32 should suffice, this gives * a maximum env+arg of 128kB ! * MAX_ARGC define the maximum number of arguments and evnvelope. */#define MAXARGPAGE 32struct ustack_t {  	char * page[MAXARGPAGE];	char * sp; /* stack pointer */	int base;	int argc;	int envc;	vaddr_t vbase() { return USEREND - pagemul(MAXARGPAGE) + pagemul(base); }	int pushustr(char * str);	int pushkstr(char * str);	int pushuvec(char ** vec);	void init()	{		sp = NULL;		base = MAXARGPAGE;	}	void destroy()	{		for (; base < MAXARGPAGE; base++)			freepage(page[base]);	}};struct mm_t;struct inode_t;struct seg_t {	CHAIN(,seg_t);	mm_t * mm;	vaddr_t start, end;	int prot;	int flags;	inode_t * inode;	ulong offset;	~seg_t();	static int lt(seg_t * x, seg_t * y) { return x->start < y->start; }	int contain(vaddr_t vaddr) { return vaddr >= start && vaddr < end; }	int clone(seg_t ** result);	void nopage(vaddr_t vaddr, int u);	void wppage(vaddr_t vaddr, int u);	void unmap(vaddr_t from, vaddr_t to);};QUEUE(,seg_t);typedef Q(,seg_t) segq_t;#define PROTR        	0x1       /* page can be read */#define PROTW       	0x2       /* page can be written */#define PROTX		0x4       /* page can be executed */#define PROTNONE        0x0       /* page can not be accessed */#define PROTRW		(PROTR|PROTW)#define PROTRX		(PROTR|PROTX)#define PROTRWX		(PROTR|PROTW|PROTX)#define MAPSHARED       1         /* Share changes */#define MAPPRIVATE      2         /* Changes are private */#define MAPTYPE         0xf       /* Mask for type of mapping */#define MAPFIXED        0x10      /* Interpret addr exactly */#define MAPANON    	0x20      /* don't use a file */#define MAPUSTACK	0x40	  /* user stack */#define KSTACKMAGIC 0x1234567struct mm_t {	vaddr_t onfault; /* page fault handler */	segq_t segq;	pgtbl_t * pgtbl;	char * kstack;	int initustack(ustack_t * usatck, vaddr_t * initsp);	void dump();	seg_t * findustack();	seg_t * findbss();	seg_t * findseg(vaddr_t vaddr);	seg_t * contain(vaddr_t vaddr);	int insertseg(seg_t * seg);	int mapto(vaddr_t vaddr, paddr_t paddr, int prot);	void pagefault(regs_t * regs, vaddr_t vaddr, int u, int w, int p);	void clearfrag(vaddr_t from, vaddr_t to);	int mmap(vaddr_t from, vaddr_t to, int prot, int flags,	    inode_t * inode, ulong offset);	int anonmap(vaddr_t from, vaddr_t to, int prot, int flags)	{		return mmap(from, to, prot, flags|MAPANON, NULL, 0);	}	vaddr_t brk(vaddr_t ebss);	void unmapuspace();	int clone(mm_t ** result);	void init();	mm_t();	mm_t(vaddr_t * esp, vaddr_t * eip);	~mm_t();};/* ver stands for verify */extern int verr(void * area, int size);extern int verw(void * area, int size);extern int verrstr(const char * str);extern int verrpath(const char * path);#endif

⌨️ 快捷键说明

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