【问题标题】:Page fault and dirty pages缺页和脏页
【发布时间】:2012-11-13 00:32:31
【问题描述】:

我已经开始阅读有关 CPU 缓存的信息,我有两个问题:

1) 假设 CPU 收到页面错误并将控制权转移给内核处理程序。处理程序决定驱逐内存中标记为脏的帧。可以说 CPU 缓存用有效和修改的位写回。现在,此帧的内存内容已过时,缓存包含最新数据。内核如何强制缓存刷新?

2) 页表项 (PTE) 被标记为脏的方式如下: TLB 有一个修改位,当 CPU 修改页的内容时设置该位。该位在上下文切换时被复制回 PTE。如果我们得到一个页面错误,PTE 可能是非脏的,但 TLB 条目可能设置了修改的位(它还没有被复制回来)。这种情况如何解决?

【问题讨论】:

  • CPU 缓存的构建不会影响功能。如果它在没有它们的情况下工作,它必须与它们一起工作(除非存在竞争条件)。
  • @JanDvorak:我同意。但我想了解它是如何与他们一起工作的。

标签: caching memory-management tlb page-fault


【解决方案1】:

至于刷新缓存,这只是一个特权指令。操作系统调用指令,硬件开始刷新。有一条指令用于使所有值无效并发出立即刷新而不回写的信号,还有另一条指令告诉硬件在刷新之前将数据写回。在指令调用之后,硬件(缓存控制器和 I/O)接管。还有一些特权指令告诉硬件刷新 TLB。

我不确定您的第二个问题,因为我已经有一段时间没有学习操作系统课程了,但我的理解是,如果发生页面错误,页面将首先被带入页表。删除的任何页面都取决于可用空间以及使用的页面替换算法。在引入该页面之前,如果它正在替换的页面设置了修改位,则必须首先将其写出,以便 IO 排队。如果未修改,则立即替换该页面。 TLB 的过程相同。如果设置了修改位,则在替换该页面之前,您必须将其写回,以便 IO 排队等待。

【讨论】:

  • 感谢您的回答。您在第一段中谈到的指令的指令操作码是什么?
  • invd 为 0F 08(无回写) wbinvd 为 0F 09(有回写)
猜你喜欢
  • 2017-09-27
  • 1970-01-01
  • 2018-04-05
  • 2016-02-13
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
相关资源
最近更新 更多