MMU和TLB错过了

时间:2010-07-15 20:13:28

标签: operating-system paging memory-address tlb

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

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

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

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

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

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

感谢。

2 个答案:

答案 0 :(得分:3)

作业?

在任何情况下,CPU的架构手册中都详细描述了这些内容(你甚至没有写过你正在谈论的CPU - x86在TLB未命中时不会产生页面错误。)

答案 1 :(得分:0)

如@zvrba指出的,

行为是由CPU实现定义的,因此这个问题本身是无法回答的。

一般要考虑的事项:

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

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

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

  • 错误,虚拟应该被“翻译”。因此,保留毫无意义。

2)如果该地址不在TLB中,将再次导致页面错误,并且我将发生无限循环

  • 可以尝试,但仍要考虑错误,即使映射了包含转换表的地址,您仍然需要首先获取物理地址才能从内存中读取它们(TLB表,我的意思是)。否则,您将无法获得第一层TLB的虚拟到物理功能,而无法到达获取一般RAM的起点。
    顺便说一下, TLB表通常映射到虚拟地址空间 >,这就是操作系统为应用程序映射/取消映射内存页面的方式。

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

  • 页面漫游是通过物理地址进行的,无论那里有多少层。往上看。

我有一个带有虚拟内存的系统,该内存具有一个杠杆分页...因此,CPU提供了MMU vaddr,MMU在TLB中检查是否有(假设)最多5个条目vaddr的有效位

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