Chinaunix
标题:
linux内核建立临时页表时到底映射了多大的内存?
[打印本页]
作者:
liujunwei1234
时间:
2010-08-08 20:28
标题:
linux内核建立临时页表时到底映射了多大的内存?
以前的教程都说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)
作者:
liujunwei1234
时间:
2010-08-09 18:51
回复
1#
liujunwei1234
为什么每次发帖都没人回答我啊!
作者:
accessory
时间:
2010-08-10 00:32
因为你已经是高手了. 新手的问题我一般都可以回答 :p
/*
* End condition: we must map up to the end + MAPPING_BEYOND_END.
*/
这里已经说了 end + MAPPING_BEYOND_END 啊. 把这2个找出来就可以了.
而且,这个END很有可能是动态算的. 比如万一内核代码本身很大,超过了8M (虽然一般是 3M多). 那么这时候也会多映射些.
作者:
etoux
时间:
2010-08-10 14:35
今天看了书上写的是8mb,两个目录项。一页是4kb,两个目录项就是4k*1k*2 = 8mb (一个目录框下有2^10个页表)。
我是新手,帮顶顺便瞎说几句。
作者:
liujunwei1234
时间:
2010-08-14 10:24
回复
1#
liujunwei1234
抽时间又看了下启动阶段的内存管理,有点弄明白了为什么要映射8M的物理内存,和大家交流下。
具体的内容见:
[url=http://blog.chinaunix.net/u3/95743/showart_2297352.html]http://blog.chinaunix.net/u3/95743/showart_2297352.html
[/url]
作者:
accessory
时间:
2010-08-14 23:26
不错。。。。。
作者:
zhangsuozhu
时间:
2010-08-25 14:13
分二步第一步是8M. 第二步是896M.
第一步的8M是为第二步的896M的页表准备空间。
作者:
liujunwei1234
时间:
2010-08-25 18:22
回复
7#
zhangsuozhu
第一步的8M是为第二步的896M准备空间说法不太确切吧,总体感觉8M就够用了,太大了也是浪费,而不仅仅就是为了896M准备空间吧,准备的话,多大不行啊,非得8M啊。
作者:
zhangsuozhu
时间:
2010-08-25 20:59
前1M不用. 第2M或3M内核用,根据不同内核的裁剪大小不同.如果只影射4M的话, 还剩不到1M的空间.
1G的大小的页表大小约1M.为了以后扩展, 所以分了8M. 即分了二个页目录项下的所有页表项.
因为建页目录分二步,所以我觉的临时页表就是为了建立内核的1G的页表准备的.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2