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

📄 paging.h

📁 GEEKOS是一个免费的操作系统内核
💻 H
字号:
/* * Paging (virtual memory) support * Copyright (c) 2003, Jeffrey K. Hollingsworth <hollings@cs.umd.edu> * Copyright (c) 2003,2004 David H. Hovemeyer <daveho@cs.umd.edu> * $Revision: 1.46 $ *  * This is free software.  You are permitted to use, * redistribute, and modify it as specified in the file "COPYING". */#ifndef GEEKOS_PAGING_H#define GEEKOS_PAGING_H#include <geekos/ktypes.h>#include <geekos/defs.h>#include <geekos/bootinfo.h>#include <geekos/list.h>struct Page;struct User_Context;#define NUM_PAGE_TABLE_ENTRIES	1024#define NUM_PAGE_DIR_ENTRIES	1024#define PAGE_DIRECTORY_INDEX(x)	(((x) >> 22) & 0x3ff)#define PAGE_TABLE_INDEX(x)	(((x) >> 12) & 0x3ff)#define PAGE_ALLIGNED_ADDR(x)   (((unsigned int) (x)) >> 12)#define PAGE_ADDR(x)   (PAGE_ALLIGNED_ADDR(x) << 12)/* * Bits for flags field of pde_t and pte_t. */#define VM_WRITE   1	 /* Memory is writable */#define VM_USER    2	 /* Memory is accessible to user code */#define VM_NOCACHE 8	 /* Memory should not be cached */#define VM_READ    0	 /* Memory can be read (ignored for x86) */#define VM_EXEC    0	 /* Memory can be executed (ignored for x86) *//* * Page directory entry datatype. * If marked as present, it specifies the physical address * and permissions of a page table. */typedef struct {    uint_t present:1;    uint_t flags:4;    uint_t accesed:1;    uint_t reserved:1;    uint_t largePages:1;    uint_t globalPage:1;    uint_t kernelInfo:3;    uint_t pageTableBaseAddr:20;} pde_t;/* * Page table entry datatype. * If marked as present, it specifies the physical address * and permissions of a page of memory. */typedef struct {    uint_t present:1;    uint_t flags:4;    uint_t accesed:1;    uint_t dirty:1;    uint_t pteAttribute:1;    uint_t globalPage:1;    uint_t kernelInfo:3;    uint_t pageBaseAddr:20;} pte_t;/* * Datatype representing the hardware error code * pushed onto the stack by the processor on a page fault. * The error code is stored in the "errorCode" field * of the Interrupt_State struct. */typedef struct {    uint_t protectionViolation:1;    uint_t writeFault:1;    uint_t userModeFault:1;    uint_t reservedBitFault:1;    uint_t reserved:28;} faultcode_t;/* * Bits used in the kernelInfo field of the PTE's: */#define KINFO_PAGE_ON_DISK	0x4	 /* Page not present; contents in paging file */void Init_VM(struct Boot_Info *bootInfo);void Init_Paging(void);extern void Flush_TLB(void);extern void Set_PDBR(pde_t *pageDir);extern pde_t *Get_PDBR(void);extern void Enable_Paging(pde_t *pageDir);/* * Return the address that caused a page fault. */static __inline__ ulong_t Get_Page_Fault_Address(void){    ulong_t faultAddress;    __asm__ __volatile__ (	"mov %%cr2, %0"	: "=r" (faultAddress)    );    return faultAddress;}int Find_Space_On_Paging_File(void);void Free_Space_On_Paging_File(int pagefileIndex);void Write_To_Paging_File(void *paddr, ulong_t vaddr, int pagefileIndex);void Read_From_Paging_File(void *paddr, ulong_t vaddr, int pagefileIndex);#endif

⌨️ 快捷键说明

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