忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 5042 | 回复: 4

swapper_pg_dir问题 [复制链接]

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2011-11-09 10:36 |显示全部楼层
  1. 310static void __init pagetable_init (void)
  2. 311{
  3. 312        unsigned long vaddr;
  4. 313        pgd_t *pgd_base = swapper_pg_dir;
  5. 314
  6.          。。。。。。。。。。。。。。。。。
  7. 346#ifdef CONFIG_X86_PAE
  8. 347        /*
  9. 348         * Add low memory identity-mappings - SMP needs it when
  10. 349         * starting up on an AP from real-mode. In the non-PAE
  11. 350         * case we already have these mappings through head.S.
  12. 351         * All user-space mappings are explicitly cleared after
  13. 352         * SMP startup.
  14. 353         */
  15. 354        pgd_base[0] = pgd_base[USER_PTRS_PER_PGD];
  16. 355#endif
  17. 356}
复制代码
在pagetable_init函数中有这么一部分,在临时内核页表建立的过程中,swapper_pg_dir存放的是页全局目录,应该是0~4G
在最终内核页表建立的过程中仍然使用swapper_pg_dir变量,此时应该存放的是master kernel page directory,但是这段代码说
如果CONFIG_X86_PAGE,才把swapper_pg_dir设置为存放3G~4G部分的页全局目录的地址,那么如果不开PAE,RAM大小在896MB~4GB,
swapper_pg_dir存放的是0~4GB的页全局目录的地址,而不是master kernel page directory?

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2011-11-10 09:02 |显示全部楼层
顶!

论坛徽章:
0
发表于 2011-11-10 09:09 |显示全部楼层
初始化时swapper_pg_dir存放的是3G--3G+896MB的物理映射,其他的都填0.

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2011-11-10 09:26 |显示全部楼层
回复 3# flikelinux


    你这个“初始化”是指什么时候,是临时内核映射吗?如果是这个时候,那么swapper_pg_dir存放的页全局目录的地址,从0~4G
    我问的地方是建立最终内核页表的时候,看上边那个程序:
  1. pgd_t *pgd_base = swapper_pg_dir;
复制代码
此时pgd_base仍然是指向0~4G的那个页全局目录,下边这句:
  1. pgd_base[0] = pgd_base[USER_PTRS_PER_PGD];
复制代码
写着只有开PAE才表示3G~4G的master kernel page directory,否则岂不是swapper_pg_dir还是0~4G

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-11-10 21:39 |显示全部楼层
是zap_low_mappings()吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP