免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: augustusqing
打印 上一主题 下一主题

linux虚拟地址空间疑惑 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-09-17 12:08 |只看该作者
原帖由 思一克 于 2007-9-17 11:43 发表
To zx_wing,

交换出去了,虚地址还能通过MMU得到物理地址?得不到了。因为pgd-pmd-pte都断链了。
还有交换在磁盘上的不是物理地址对应的物理页。如果是,物理页已经被别人使用着,怎么交换进来?先把使用的 ...

嗯,我的表述确实不够严谨,上图的目的是让lz清楚不管有没有swap机制,mmu的功能是做虚拟地址到物理地址的转换,而不是虚拟地址到虚拟内存的转换。我也说了这些工作是在page fault时处理的,为了方便才这样画。好的,我严谨的表述一下。

虚拟地址到物理地址映射存在于页表中。
当这个物理地址对应的物理页在RAM中时,页表的pte项标记该页存在,并且pte的内容是物理地址(准确的说是物理页帧号)。
当该物理地址对应的物理页面不在RAM中而在swap中时,页表pte项标记该页为不存在,并且pte的内容是该页面在磁盘上的位置。

这就是实情。但我这样说lz会认为有swap机制时虚拟地址对应的是虚拟内存,也就是硬盘上的页面。这就把MMU的地址转换功能和操作系统提供的虚拟内存机制混淆在一起了。
交换出去了,MMU能不能通过虚拟地址拿到物理地址。答案当然是能拿到的。因为对于MMU来说,页面是否在RAM中对它来说是不可见的,当页面不在RAM中时,page fault的handler自然回把它调度进来,更新页表,并让MMU继续walk页表。最后MMU当然拿到了虚拟地址到物理地址的映射。

系统中很多概念功能相互联系又有区分,要表述清楚不太容易。多谢你的指正

PS:我不太明白你说的“因为pgd-pmd-pte都断链了”是什么意思?

>>还有交换在磁盘上的不是物理地址对应的物理页。如果是,物理页已经被别人使用着,怎么交换进来?先把使用的交换出去吗
我这里指的物理页并非说被交换出去的页面再次调度进来时仍然占用原来的物理地址。我的意思是指交换的时候把该物理地址对应的页面交换出去,当然该页面再次被交换进来的时候物理地址不一定就是原来那个。

[ 本帖最后由 zx_wing 于 2007-9-17 12:34 编辑 ]

论坛徽章:
0
22 [报告]
发表于 2007-09-17 12:33 |只看该作者
交换出去的物理地址(页)在交换进来后就不是那个物理地址页了。我印象是如此。

论坛徽章:
0
23 [报告]
发表于 2007-09-17 12:36 |只看该作者
原帖由 思一克 于 2007-9-17 12:33 发表
交换出去的物理地址(页)在交换进来后就不是那个物理地址页了。我印象是如此。

通常是这样。
这是个表述问题,或许我该说物理地址对应的页面,这样就好一些

论坛徽章:
0
24 [报告]
发表于 2007-09-17 12:42 |只看该作者
物理地址不就是物理页面吗(4069---》1)对应关系?


原帖由 zx_wing 于 2007-9-17 12:36 发表

通常是这样。
这是个表述问题,或许我该说物理地址对应的页面,这样就好一些

论坛徽章:
0
25 [报告]
发表于 2007-09-17 12:45 |只看该作者
原帖由 思一克 于 2007-9-17 12:42 发表
物理地址不就是物理页面吗(4069---》1)对应关系?



呵呵,物理地址以字节为单位,页面以页大小为单位,物理页面应该说是一组物理地址的集合。物理地址对应的物理页准确的说应该是:物理页帧号对应的页面(就是每个页面的基地址啦,4k的话低12bit为0)。

论坛徽章:
0
26 [报告]
发表于 2007-09-17 12:48 |只看该作者
一个物理地址在唯一一个物理页面中。是对应的。

论坛徽章:
0
27 [报告]
发表于 2007-09-17 12:54 |只看该作者
原帖由 思一克 于 2007-9-17 12:48 发表
一个物理地址在唯一一个物理页面中。是对应的。

这个是当然的。但我认为还是要把物理地址和物理页面区分开,毕竟它们两的单位不一样。可以说物理地址在物理页面中,但说物理地址就是物理页面就不准确了

论坛徽章:
0
28 [报告]
发表于 2007-09-17 13:16 |只看该作者
能有物理地址就没有page fault了。

page fault后,程序重新分配物理页。
物理页还没有影射,或被交换出去了,CPU都无法从虚拟地址直接通过页表取得物理地址,因此page_fault发生,fault程序工作来解决问题。最后CPU才得到物理地址。


交换出去了,MMU能不能通过虚拟地址拿到物理地址。答案当然是能拿到的。因为对于MMU来说,页面是否在RAM中对它来说是不可见的,当页面不在RAM 中时,page fault的handler自然回把它调度进来,更新页表,并让MMU继续walk页表。最后MMU当然拿到了虚拟地址到物理地址的映射。

论坛徽章:
0
29 [报告]
发表于 2007-09-17 13:29 |只看该作者
原帖由 思一克 于 2007-9-17 13:16 发表
能有物理地址就没有page fault了。

page fault后,程序重新分配物理页。
物理页还没有影射,或被交换出去了,CPU都无法从虚拟地址直接通过页表取得物理地址,因此page_fault发生,fault程序工作来解决问题。 ...

page fault也是MMU做地址转换过程中的一部分。对于硬件来说,fault由它产生但不由它处理,处理是操作系统的工作。所以对MMU来说它总是拿到一个虚拟地址通过页表得到物理地址,至于这其间发生了page fault,对它来说是不可见的,它只是给定输入拿到结果。就像进程执行时被中断打断并恢复一样,对进程来说这个中断是不可见的。

当然,怎么解释这些概念各有各的说法,知道实质和流程就可以了。

论坛徽章:
0
30 [报告]
发表于 2007-09-17 14:03 |只看该作者
MMU 是CPU内的物理单元。page fault是CPU外的程序。上面说的交换,影射都是内河的问题。对用户程序来说或许还勉强。

总之,交换出去的如果MMU还可以计算出物理页,那么人用脑子也能计算(根据页表)。但人是算不了了,因为物理也还没有分配呢。分配之后当然可以计算(但也未必,因为物理页分配也未必总能成功)。

所以,说交换出去的MMU还可以根据虚拟地址计算出物理地址是不合适的。如同还没有分配物理页的虚拟地址一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP