我有一些关于页表的问题,尤其是在发生页面错误时。
我理解当CPU需要页面时会发生页面错误,但它不存在于RAM中,必须从交换空间中获取。页表使用虚拟地址的高阶位进行索引,还包含一个无效位,指示页面是否在内存中。
这是我不明白的。页表是否包含那些也为其设置了无效位的页面的物理地址?我的意思是,它们不存在于物理记忆中。所以,我的理解是那些设置了无效位的页面,相应的物理地址应该是空白的。我错过了什么吗?
另一个问题是为什么我们不能只为那些存在于内存中的页面提供条目。这样,页面表的大小可以变小。
另一个问题是,当操作系统在页面故障后将页面交换到RAM中时,页面所分配的帧的物理地址是否转换为虚拟地址以更新页面表?
有人可以澄清这些疑惑吗?谢谢!
答案 0 :(得分:3)
我理解当CPU需要页面时会发生页面错误,但它不存在于RAM中,必须从交换空间中获取。
触发页面错误通常是一步或两步过程。故障由页表的状态触发。
页表使用虚拟地址的高位进行索引,还包含一个无效位,指示页面是否在内存中。
位位置和使用完全取决于系统。有两个级别的无效。 (1)页面可能不会映射到逻辑地址空间; (2)页面可以被映射,但是没有对应于物理页面帧的映射(页面调出)。这两个检查可以在页面表中指示,也可以与操作系统维护的映射数据一起显示。
页表是否包含那些也为其设置了无效位的页面的物理地址?
如果页表条目指示逻辑页面到物理页面帧的有效映射,则页表条目包含该映射。
我的意思是,它们不存在于物理内存中。所以,我的理解是那些设置了无效位的页面,相应的物理地址应该是空白的。
通常情况并非如此。如果页表条目通过其控制位指示没有到物理页帧的映射,则处理器通常忽略实际的映射位。这允许操作系统使用这些位来识别页面在磁盘上的存储位置。
另一个问题是为什么我们不能只为那些存在于内存中的页面提供条目。这样,页面表的大小可以变小。
您正在描述一个INVERTED PAGE TABLE。有些系统以这种方式实现页表。但是,大多数系统都没有,它们会给操作系统带来额外的开销。
另一个问题是,当操作系统在页面故障后将页面交换到RAM中时,页面所分配的帧的物理地址是否转换为虚拟地址以更新页面表?
页面错误处理程序需要(1)分配物理页面框架; (2)将次要故事中的数据加载到页面框架中; (3)更新页表,指示逻辑页面到物理页面帧的映射; (4)重新启动导致故障的指令。