- 论坛徽章:
- 2
|
以前的教程都说linux建立了8M的临时页表,两个页目录项。今天在看linux-2.6.34的时候,没看出内核到底映射了多大的内存,希望高手指教。
下面代码中红色部分是计算到底映射多大内存的,但是具体数值是多少啊?
page_pde_offset = (__PAGE_OFFSET >> 20);
movl $pa(__brk_base), %edi
movl $pa(swapper_pg_dir), %edx /*%edx = 页目录的起始地址*/
/* #define PTE_IDENT_ATTR 0x003*/ /* PRESENT+RW */
movl $PTE_IDENT_ATTR, %eax
10:
/* #define PDE_IDENT_ATTR 0x067 */ /* PRESENT+RW+USER+DIRTY+ACCESSED */
leal PDE_IDENT_ATTR(%edi),%ecx /* Create PDE entry */
movl %ecx,(%edx) /* Store identity PDE entry */
movl %ecx,page_pde_offset(%edx) /* Store kernel PDE entry */
addl $4,%edx /*页目录项加1*/
movl $1024, %ecx
11:
stosl
addl $0x1000,%eax /* %eax中存放的是页的物理地址*/
loop 11b
/*
* End condition: we must map up to the end + MAPPING_BEYOND_END.
*/
movl $pa(_end) + MAPPING_BEYOND_END + PTE_IDENT_ATTR, %ebp
cmpl %ebp,%eax
jb 10b
addl $__PAGE_OFFSET, %edi
movl %edi, pa(_brk_end)
shrl $12, %eax
movl %eax, pa(max_pfn_mapped) |
|