memory.h

来自「一个用于学习的操作系统」· C头文件 代码 · 共 60 行

H
60
字号
/*文件名: memory.h  说明:   页级内存管理函数  作者:   marsinfan  日期:   2005/12/20*/#ifndef _memory_h_#define _memory_h_#include <fairysky/types.h>#define PAGE_SIZE 4096#define _1M_SIZE 0X00100000#define PAGE_DIR 0xC0010000     //进程0的页目录地址#define PAGE_PRESENT    0x001#define PAGE_RW        0x002#define PAGE_USER    0x004#define PAGE_PWT    0x008    /* 486 only - not used currently */#define PAGE_PCD    0x010    /* 486 only - not used currently */#define PAGE_ACCESSED    0x020#define PAGE_DIRTY    0x040#define PAGE_COW    0x200    /* implemented in software (one of the AVL bits) */#define PAGE_PRIVATE    (PAGE_PRESENT | PAGE_RW | PAGE_USER | PAGE_ACCESSED | PAGE_COW)#define PAGE_SHARED    (PAGE_PRESENT | PAGE_RW | PAGE_USER | PAGE_ACCESSED)#define PAGE_COPY    (PAGE_PRESENT | PAGE_USER | PAGE_ACCESSED | PAGE_COW)#define PAGE_READONLY    (PAGE_PRESENT | PAGE_USER | PAGE_ACCESSED)#define PAGE_TABLE    (PAGE_PRESENT | PAGE_RW | PAGE_USER | PAGE_ACCESSED)extern s32 put_page(addr_t addr);extern s32 copy_page_table(u32 to, u32 from);extern void do_wp_page(u32 addr);extern void do_no_page(u32 addr);extern int get_free_page();extern int free_page(u32 addr);#define MAX_MEM 16typedef struct mem_info {    u8 used;} MEM_INFO;extern MEM_INFO *mem_map;//用刷新cr3的方法来刷新TLB#define __flush_tlb()                            \    do {                                \        unsigned int tmpreg;                    \        __asm__ __volatile__(                    \        "movl %%cr3, %0;              \n"        \        "movl %0, %%cr3;  # flush TLB \n"        \        : "=r" (tmpreg)                    \        :: "memory");                    \        } while (0)#endif

⌨️ 快捷键说明

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