【问题标题】:MMU and TLB missMMU 和 TLB 未命中
【发布时间】:2011-03-16 15:14:25
【问题描述】:

假设如下。我有一个带有虚拟内存和一个杠杆分页的系统,我有一个 MMU,TLB 是由软件控制的。

好吧..想象一下我是一个进程,我想在虚拟地址 vaddr 的 RAM 中读取一个字。

因此,CPU 提供了 MMU vaddr,MMU 检查 TLB 中是否存在(假设)5 个最高有效位 vaddr 的条目。如果它在那里...一切正常,它会计算物理地址,一切正常。

现在.. 假设它不在 TLB 中。在这种情况下,MMU 会产生中断(页面错误)。 好的..现在我在页面错误的处理程序中。

在 PBR(页基址寄存器)中,我有页表的起始地址。 我的问题在这里。这个地址是物理地址吗?我想是的,因为如果它是虚拟的,则意味着两件事: 1)必须以某种方式保留在进程的虚拟地址空间中(从未听说过类似的东西) 2)如果这个地址不在TLB中,会再次引起页面错误,我将有一个无限循环。

关于表格中地址的相同问题。如果我有两级分页。一级表中的条目中的地址(指向二级表)是虚拟的还是物理的?

谢谢。

【问题讨论】:

    标签: operating-system paging memory-address tlb


    【解决方案1】:

    家庭作业?

    无论如何,这些事情在 CPU 的架构手册中有详细描述(而且你甚至没有写出你在谈论哪个 CPU - x86 不会在 TLB 未命中时生成页面错误)。

    【讨论】:

    • 很高兴指出 TLB 未命中不一定会导致 #PF!
    • 想详细说明一下?为什么 TLB 未命中没有错误?这是正交的 - TLB 命中/未命中只是缓存翻译的问题,由硬件处理,而许多其他情况(在架构上可见,应该由操作系统处理)可能会出现错误,例如页面丢失,页面未访问等...话虽如此,回答原始问题 - 页面映射作为物理地址空间进行组织和访问,这意味着您不需要在页面遍历期间转换对它的访问。
    【解决方案2】:

    正如@zvrba 指出的那样,行为是由 CPU 实现定义的,所以这个问题本身是无法回答的。

    但要考虑的一般事项:

    在 PBR(页基址寄存器)中,我有页表的起始地址。我的问题在这里。这个地址是物理地址吗?

    • 是的,它必须是物理地址,否则 MMU 需要首先为转换表解析虚拟到物理地址。

    1) 必须以某种方式保留在进程的虚拟地址空间中

    • 错,虚拟应该被“翻译”。所以预订没有意义。

    2) 如果此地址不在 TLB 中,会再次引发页面错误,我将陷入无限循环

    • 很好的尝试但仍然是错误的想法,即使保存转换表的地址被映射,您仍然需要先获取物理地址才能读取它们(TLB 表,我的意思是)内存不足。否则,您将被困在为第一级 TLB 获得虚拟到物理的过程中,永远无法达到获得一般 RAM 访问权限的点。
      顺便说一下,TLB 表通常映射到虚拟地址空间 ,这就是操作系统为应用程序映射/取消映射内存页面的方式。

    如果我有一个两级分页。一级表中的条目中的地址(指向二级表)是虚拟的还是物理的?

    • 页面遍历是通过物理地址进行的,无论有多少级。往上看。

    我有一个带有 one 杠杆分页的虚拟内存系统...所以,CPU 提供 MMU vaddr,MMU 检查 TLB 中是否有(假设)5 的条目vaddr 的重要位

    • 5 个最高有效位...嗯...假设这是 32b 系统,所以 5 个最高有效位意味着只有位 [31..27] 有效。得出的结论是您的页面大小为 2^27 = 128MB。如果只能映射 32 个页面,为什么还要使用 MMU?保持 MMU 关闭!!!

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 2011-11-23
      • 2012-05-13
      • 2012-02-17
      • 2013-01-17
      • 2017-01-31
      • 2012-03-09
      • 2018-05-12
      相关资源
      最近更新 更多