免费注册 查看新帖 |

Chinaunix

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

[内核入门] 内核空间和用户空间的虚地址映射到物理地址 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-30 01:23 |只看该作者 |倒序浏览
本帖最后由 shihyu 于 2015-07-30 01:24 编辑

下面是书中所说
对 于 内 核 空 间 而 言 , 给 定 一 个 虚 地 址 x , 其 物 理 地 址 为 “ x - PAGE_OFFSET”,给定一个物理地址x,其虚地址为“x+ PAGE_OFFSET”

可是有些书又提到 , 页表有分内核空间和用户空间的页表 , 这样内核空间映射到物理内存是透过页表机制? 还是 虚 地 址 x - PAGE_OFFSET 即是物理地址?


Linux 内核空间和用户空间映射到物理内存是透过硬件MMU 会转换的嘛? MMU 硬件实现分页机制?

如果是用MMU 那内核代码中最后是在哪些将虚地址传给MMU 做转换成物理地址?

论坛徽章:
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-30 10:50 |只看该作者
好眼熟的问题。

其实这些说法并不矛盾。

对于特定的CPU,比如x86,保护模式下是不能绕过MMU的,这是硬件限制(其它架构CPU另说)。
内核地址也不例外。
只是它的映射关系是可以【固定、可计算、可预期的】——不像用户态的地址,不经过内核查一次页表,没办法知道main导致加载到那个物理地址。

这个固定映射关系的好处,给定虚拟地址,可以不经过页表,就能【计算出】物理地址。
注意是计算出,真正访问的时候还是要经过MMU/页表。

什么时候需要计算出物理地址呢?
比如网卡驱动做DMA,分配一段内核空间(kmalloc返回虚拟地址vp),这个地址要提交给硬件(写某个控制寄存器),
但是硬件只知道物理地址,需要把vp转换为物理地址(减少PAGE_OFFSET),再写到寄存器里。

如果不是直接映射,那好吧,就得把vp分成10-12-12几段(假设32位3级页表),
从cr3开始,一级一级的查下去,才能知道vp对应的物理内存。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
3 [报告]
发表于 2015-07-30 20:38 |只看该作者
想知道内核代码中最后是在哪些将虚地址传给MMU 做转换成物理地址?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-08-19 06:20:002015亚冠之本尤德科
日期:2015-08-31 23:24:47
4 [报告]
发表于 2015-07-30 23:08 |只看该作者
对于内核空间的低端地址来说,虚拟地址与物理地址是PAGE_OFFSET的关系。

地址转换是MMU负责完成,另外TLB会缓存一部分虚拟地址与物理地址的映射关系,用来加速地址转换。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP