首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MMU和TLB缺失

MMU和TLB缺失
EN

Stack Overflow用户
提问于 2010-07-16 04:13:28
回答 2查看 1.8K关注 0票数 0

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

好的..。假设我是一个进程,我想读取虚拟地址为vaddr的RAM中的一个字。

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

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

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

表中的地址也有同样的问题。如果我有两级寻呼的话。第一级表(指向第二级表)中条目中的地址是虚拟的还是物理的?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-07-16 04:22:13

家庭作业?

在任何情况下,这类事情在CPU的体系结构手册中都有详细的描述(您甚至还没有编写您正在讨论的CPU- x86不会在TLB未命中时生成页面错误)。

票数 3
EN

Stack Overflow用户

发布于 2020-01-02 14:07:19

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

不过,需要考虑的一般问题是:

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

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

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

  • 错误,应‘翻译’虚拟。所以保留没有任何意义。

2)如果这个地址不在TLB中,将再次导致一个页面缺省,并且我将有一个无限循环

  • 很好的尝试,但仍然是错误的想法,即使持有转换表的地址被映射,您仍然需要首先获取物理地址才能从内存中读取它们(我的意思是TLB表)。否则,您将被困在第一级TLB的虚拟到物理上,永远无法达到获得一般RAM访问的点。

顺便说一下,TLB表通常映射到虚拟地址空间中,这就是操作系统为应用程序映射/取消映射内存页的方式。

如果我使用两级分页,则为

。第一级表(指向第二级表)中条目中的地址是虚拟的还是物理的?

无论有多少层,

  • 页面遍历都是按物理地址进行的。请参见上面的。

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

  • 5最高有效位...嗯..。假设这是32b系统,所以5个最高有效值只有31…27位有效。这就得出了页面大小为2^27 = 128MB的结论。如果你只能映射32个页面,为什么还要麻烦MMU呢?关闭内存!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3259619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档