我有几个关于页表的问题,特别是在发生页面错误时。
我理解当CPU需要一个页面时会发生页面错误,但是它不存在于RAM中,必须从交换空间中获取。页表使用虚拟地址的高阶位进行索引,还包含一个无效位,该位指示页是否在内存中。
这是我不明白的。页表是否包含为其设置无效位的页面的物理地址?我是说,它们不存在于物理记忆中。因此,我的理解是,那些设置无效位的页面,相应的物理地址应该是空的。我是不是遗漏了什么?
另一个问题是,为什么我们不能只为内存中存在的页面提供条目。这样,页面表的大小就可以变得更小。
另一个问题是,当操作系统在页面故障后的页面切换到RAM中时,分配给该页的帧的物理地址是否转换为用于更新页表的虚拟地址?
有人能澄清这些疑问吗?谢谢!
发布于 2016-11-21 03:49:16
我理解当CPU需要一个页面时会发生页面错误,但是它不存在于RAM中,必须从交换空间中获取。
页面错误的触发通常是一个或两个步骤的过程。错误由页表的状态触发。
页表使用虚拟地址的高阶位进行索引,还包含一个无效位,该位指示页是否在内存中。
位位置和使用完全取决于系统。有两种程度的残疾。(1)该页不能映射到逻辑地址空间;和(2)该页可以被映射,但没有对应的映射到物理页帧(呼出)。这两项检查可以在页表中显示,也可以与操作系统维护的映射数据一起显示。
页表是否包含为其设置无效位的页面的物理地址?
如果页表项指示逻辑页到物理页帧存在有效的映射,则页表项包含该映射。
我是说,它们不存在于物理记忆中。因此,我的理解是,那些设置无效位的页面,相应的物理地址应该是空的。
一般情况并非如此。如果页表条目通过其控制位指示不存在到物理页帧的映射,则处理器通常忽略实际的映射位。这允许操作系统使用这些位数来标识页存储在磁盘上的位置。
另一个问题是,为什么我们不能只为内存中存在的页面提供条目。这样,页面表的大小就可以变得更小。
您正在描述一个倒页表。有些系统以这种方式实现页表。然而,大多数系统并没有,它们给操作系统增加了额外的开销。
另一个问题是,当操作系统在页面故障后的页面切换到RAM中时,分配给该页的帧的物理地址是否转换为用于更新页表的虚拟地址?
页面错误处理程序需要:(1)分配物理页帧;(2)将数据从次要故事加载到页面帧;(3)更新页面表,将逻辑页指示为物理页帧映射;(4)重新启动导致故障的指令。
https://stackoverflow.com/questions/40705152
复制相似问题