免费注册 查看新帖 |

Chinaunix

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

[内核入门] Paging 疑問 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-31 16:22 |只看该作者 |倒序浏览
1. MMU  中的 page table 是存放在物理內存嘛?

2. 內核空間只有一個page table , 用戶空間每個進程都各自擁有自己的page table ?

3.
3.1進程的頁表跟內核頁表都位於內核空間?
3.2它們之前有映射關係嘛?
3.3 它們跟 硬件MM裡面的頁表有何不同?



http://www.jiancool.com/article/24732762574/

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
2 [报告]
发表于 2015-07-31 19:31 |只看该作者
1. MMU  中的 page table 是存放在物理內存嘛?


“mmu的page table”这个说法有点别扭。Page table放在内存里,但它不属于MMU硬件单元。
MMU通过访问内存里的page table来完成地址映射,当然,为了加快速度,MMU内部有各种cache,最有名的就是TLB。

2. 內核空間只有一個page table , 用戶空間每個進程都各自擁有自己的page table ?


后半句是的。从CPU的角度看,page table的入口是cr3,任何时刻只有一份页面在生效。
但是每个进程都有自己的页表,同样的虚地址映射不同的物理地址;当任务切换的时候,一个重要的操作就是更新cr3的内容。

举个极为简化的例子,假设系统中有两个进程A,B。A的页目录占用页框#1,B的页目录占用页框#2(页目录是第一级索引),两者占用不同的物理地址。
当A运行的时候,cr3指向页框#1,当B运行的时候,cr3切换到页框#2。

在10-10-12的两级分页模式下,页目录由va的最高10位索引,共2^10=1k个条目,每个条目4byte(映射2^22=4M的地址空间),正好占用1k*4=4kbyte=1page。
linux按照3G/1G的方式划分,也就是说,页目录的前3/4的条目,索引3G的用户空间,后面1/4的条目,索引1G的内核空间。

"所有进程共享内核空间"的含义,是指对进程A/B的页目录(即页框#1/#2),它们后1/4的条目内容是几乎相同的,指向同样的1G/4k/1k=256个page table(排除高端映射的部分)。

3.
3.1進程的頁表跟內核頁表都位於內核空間?


应该是的。就像前面的例子,页框#1和#2的虚地址都在3G以上。

3.2它們之前有映射關係嘛?


问题不明确?内核创建子进程的时候,会继承父进程的地址空间及页表。利用COW、缺页中断等技术,对子进程的页面进行延迟修改。
慢慢的,子进程的页表就变得跟父进程不一样了。但是,3G以上的部分,几乎还是不变的。

3.3 它們跟 硬件MM裡面的頁表有何不同?


如前所述,硬件里面应该只有映射关系的cache。其它架构是不是这样就不知道了。

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
3 [报告]
发表于 2015-07-31 19:33 |只看该作者
建议读一下ULK的第2章、第8章、第9章。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-08-19 06:20:002015亚冠之本尤德科
日期:2015-08-31 23:24:47
4 [报告]
发表于 2015-08-01 16:04 |只看该作者
二楼回答的很详细了,顶!d=====( ̄▽ ̄*)b

针对3.2我再补充一下,用户进程的映射关系是一步步建立的,创建一个新进程时,当然会复制父进程的页表,但是随着子进程不断的申请内存,它的页表会不断的被扩充。
比如malloc时会隐性的调用brk和mmap,从而引起缺页异常,更新进程页表
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP