免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4328 | 回复: 8
打印 上一主题 下一主题

linux内核建立临时页表时到底映射了多大的内存? [复制链接]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-08 20:28 |只看该作者 |倒序浏览
以前的教程都说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)

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
2 [报告]
发表于 2010-08-09 18:51 |只看该作者
回复 1# liujunwei1234


    为什么每次发帖都没人回答我啊!

论坛徽章:
0
3 [报告]
发表于 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多). 那么这时候也会多映射些.

论坛徽章:
0
4 [报告]
发表于 2010-08-10 14:35 |只看该作者
今天看了书上写的是8mb,两个目录项。一页是4kb,两个目录项就是4k*1k*2 = 8mb (一个目录框下有2^10个页表)。
我是新手,帮顶顺便瞎说几句。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
5 [报告]
发表于 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]

论坛徽章:
0
6 [报告]
发表于 2010-08-14 23:26 |只看该作者
不错。。。。。

论坛徽章:
0
7 [报告]
发表于 2010-08-25 14:13 |只看该作者
分二步第一步是8M.     第二步是896M.

第一步的8M是为第二步的896M的页表准备空间。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
8 [报告]
发表于 2010-08-25 18:22 |只看该作者
回复 7# zhangsuozhu


    第一步的8M是为第二步的896M准备空间说法不太确切吧,总体感觉8M就够用了,太大了也是浪费,而不仅仅就是为了896M准备空间吧,准备的话,多大不行啊,非得8M啊。

论坛徽章:
0
9 [报告]
发表于 2010-08-25 20:59 |只看该作者
前1M不用. 第2M或3M内核用,根据不同内核的裁剪大小不同.如果只影射4M的话, 还剩不到1M的空间.

1G的大小的页表大小约1M.为了以后扩展, 所以分了8M.  即分了二个页目录项下的所有页表项.

因为建页目录分二步,所以我觉的临时页表就是为了建立内核的1G的页表准备的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP