0

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

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

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

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

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

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

谢谢。

4

2 回答 2

3

家庭作业?

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

于 2010-07-15T20:22:12.613 回答
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 关闭!!!
于 2020-01-02T06:07:19.037 回答