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

📄 paging.c

📁 一个微型操作系统源码
💻 C
字号:
/** paging.c                                   ** ** Description: **    Virtual Memory, hardware paging ** **/#include <mm.h>pagedir *PD = NULL;int setupPaging(ulong available){   uint pages, pdes, total_memory;   total_memory = available;   pages = (total_memory >> PAGE_SHIFT);   /* number of page directory entries */   pdes =  (pages>>10) + (((pages%1024) > 0) ? 1 : 0);   PD = (pagedir *)PAGING_CR3;      vmMapInit(PD,pages);   vmKernelMap(PD);   enablePaging();   return pdes;}void __inline__ make_pde(pagedir *dir, uint nr, ulong addr,uchar attrib){   dir->entry[nr].present   = 1;   dir->entry[nr].readWrite = 1;   dir->entry[nr].user      = 0;   dir->entry[nr].accessed  = 0;   dir->entry[nr].dirty     = 0;   dir->entry[nr].os_use    = attrib;   dir->entry[nr].reserved1	= 0;   dir->entry[nr].reserved2	= 0;   dir->entry[nr].address   = (ulong)addr;#ifdef DEBUG/*   if (addr>0)      kprintf("PAGE: pde %d at 0x%08lx\n", nr,(ulong)addr); */#endif}void __inline__ make_pte(pagetable *tab, uint nr, ulong addr, uchar attrib){   tab->entry[nr].present   = 1;   tab->entry[nr].readWrite = 1;   tab->entry[nr].user      = 1;   tab->entry[nr].accessed  = 0;   tab->entry[nr].dirty     = 0;   tab->entry[nr].os_use    = attrib;   tab->entry[nr].reserved1	= 0;   tab->entry[nr].reserved2	= 0;   tab->entry[nr].address   = (ulong)addr;#ifdef DEBUG/*   kprintf("PAGE: pte %d at 0x%08lx\n", nr, (ulong)addr); */#endif}void enablePaging(void){   ulong CR0 = get_CR0();   set_CR3(PAGING_CR3);   /* set most significant bit of CR0 */   set_CR0(CR0 | 0x80000000); }

⌨️ 快捷键说明

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