📄 mm.h
字号:
#define PGSIZE (4*1024) // 4K byte page#define MAXPGFRAME 1024 // handle upto 4M RAM which is 1K page frames #define MAXDIR 1024 // max num of dir's per process. each dir can cover // 1024 pages, and 1024 directories cover 4G addr space. // Each directory can cover 1024*4K byte, that is // 4M byte. Since we use only 4M Ram, only dir 0 will // be active always.#define MAXFRAME 1024 // max frames per page directory. each directory can // cover 1024 frame locations#define USER_PAGE 512 // page num where user process locates#define USER_PROCESS_LOCATION 0x200000 //virtual addr for user process#define mloc(x) ((x) & 0xfffff000) //mask out flag bits to get memory location // of directory/page table entry// following is taken from linux#define __flush_tlb() \ do { \ unsigned int tmpreg; \ __asm__ __volatile__( \ "movl %%cr3, %0; # flush TLB \n" \ "movl %0, %%cr3; \n" \ : "=r" (tmpreg) \ :: "memory"); \ } while (0)/*#define __flush_tlb_global() \ do { \ unsigned int tmpreg; \ __asm__ __volatile__( \ "movl %1, %%cr4; # turn off PGE \n" \ "movl %%cr3, %0; # flush TLB \n" \ "movl %0, %%cr3; \n" \ "movl %2, %%cr4; # turn PGE back on \n" \ : "=&r" (tmpreg) \ : "r" (mmu_cr4_features & ~X86_CR4_PGE), \ "r" (mmu_cr4_features) \ : "memory"); \ } while (0)*/struct mm_struct{ unsigned long *pgdir;};struct vm_area_struct { //VMA struct mm_struct * vm_mm; unsigned long vm_start; unsigned long vm_end; struct vm_are_struct *vm_next;};struct page{ // 32 byte descriptor for each page frame int count; // 0 means free page frame struct page *next; struct page *prev; unsigned long index; int d1,d2,d3,d4; // padding};extern struct page mem_map[];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -