Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system MMU和TLB未命中_Operating System_Paging_Memory Address_Tlb - Fatal编程技术网

Operating system MMU和TLB未命中

Operating system MMU和TLB未命中,operating-system,paging,memory-address,tlb,Operating System,Paging,Memory Address,Tlb,假设如下。我有一个虚拟内存系统,有一个单级分页,我有一个MMU,TLB是由软件控制的 好的。。假设我是一个进程,我想在虚拟地址vaddr的RAM中读一个字 因此,CPU给MMU vaddr,MMU检查TLB中是否有一个条目包含(假设)vaddr的5个最高有效位。如果它在那里。。。一切正常,它计算物理地址,一切正常 现在。。假设它不在TLB中。在这种情况下,MMU会发出中断(页面错误)。 好啊现在我是页面错误的处理者 在PBR(页基址寄存器)中,我有页表的起始地址。 我的问题在这里。这个地址是物理

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

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

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

现在。。假设它不在TLB中。在这种情况下,MMU会发出中断(页面错误)。 好啊现在我是页面错误的处理者

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

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

谢谢。

作业

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


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

正如@zvrba指出的那样,行为是由CPU实现定义的,因此这个问题本身是不可回答的。

一般要考虑的事情:

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

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

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

  • 错误,虚拟应被“翻译”。所以保留是没有意义的。

2) 如果这个地址不在TLB中,将再次出现页面错误,我将有一个无限循环

  • 很好的尝试,但仍然是错误的想法,即使保存转换表的地址被映射,您仍然需要首先获取物理地址,以便从内存中读取它们(我的意思是TLB表)。否则,您将无法获得第一级TLB的虚拟到物理访问,无法获得常规RAM访问。
    顺便说一句,TLB表通常映射到虚拟地址空间,这就是操作系统映射/取消映射应用程序内存页的方式。

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

  • 页面漫游是通过物理地址进行的,不管有多少层。见上文。

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

  • 5个最高有效位。。。隐马尔可夫模型。。。假设这是32b系统,所以5个最高有效平均值位[31..27]有效。这意味着您的页面大小为2^27=128MB。如果你只能映射32页,为什么还要麻烦MMU呢???远离MMU
正如@zvrba所指出的,行为是由CPU实现定义的,因此这个问题本身是不可回答的。

一般要考虑的事情:

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

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

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

  • 错误,虚拟应被“翻译”。所以保留是没有意义的。

2) 如果这个地址不在TLB中,将再次出现页面错误,我将有一个无限循环

  • 很好的尝试,但仍然是错误的想法,即使保存转换表的地址被映射,您仍然需要首先获取物理地址,以便从内存中读取它们(我的意思是TLB表)。否则,您将无法获得第一级TLB的虚拟到物理访问,无法获得常规RAM访问。
    顺便说一句,TLB表通常映射到虚拟地址空间,这就是操作系统映射/取消映射应用程序内存页的方式。

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

  • 页面漫游是通过物理地址进行的,不管有多少层。见上文。

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

  • 5个最高有效位。。。隐马尔可夫模型。。。假设这是32b系统,所以5个最高有效平均值位[31..27]有效。这意味着您的页面大小为2^27=128MB。如果你只能映射32页,为什么还要麻烦MMU呢???远离MMU
很高兴指出TLB未命中不一定会导致PF!想详细说明一下吗?为什么TLB未命中没有故障?这是正交的-TLB命中/未命中只是缓存转换的问题,由硬件处理,而f