- 论坛徽章:
- 0
|
原帖由 思一克 于 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 编辑 ] |
|