缓存未命中,TLB未命中和页面错误

时间:2016-06-15 03:59:13

标签: caching memory operating-system memcached tlb

有人可以清楚地解释一下缓存未命中,tlb未命中和页面错误之间的区别,以及它们如何影响有效的内存访问时间?

5 个答案:

答案 0 :(得分:21)

让我一步一步地解释所有这些事情。

CPU生成逻辑地址,其中包含page numberpage offset

page number用于索引page table,以获取相应的page frame number,并且一旦我们拥有physical memory的页面框架(也称为主内存) ),我们可以应用page offset来获得正确的记忆词。

为什么TLB(翻译外观缓冲区)

问题是页面表存储在physical memory中,有时可能非常大,所以为了加快逻辑地址到物理地址的转换,我们有时会使用{{ 1}},由昂贵且速度更快的联想内存组成,因此我们不是先进入页面表,而是进入TLB并使用TLB索引到page number,并获取相应的TLB,如果找到,我们会完全避免page frame number(因为我们同时拥有page tablepage frame number)和表单page offset

TLB Miss

如果我们在physical address内找不到page frame number,则会将其称为TLB,然后我们会转到TLB miss寻找相应的page table

TLB点击

如果我们在page frame number中找到page frame number,其名为TLB,我们就不需要转到页面表。

Page Fault

在物理内存中不存在正在运行的程序访问的页面时发生。这意味着页面存在于辅助存储器中但尚未加载到物理存储器帧中。

缓存点击

高速缓冲存储器是一种小型存储器,其运行速度比物理存储器快,我们总是在进入物理存储器之前进行高速缓存。如果我们能够在缓存内的缓存内存中找到相应的单词,则称其为TLB hit,我们甚至不需要转到物理内存。

缓存失踪

仅在映射到cache hit无法在缓存内找到相应的cache memoryblock类似于物理内存block)内存之后(称为{{ 1}}),然后我们转到page frame并执行所有审核cache missphysical memory的过程。

所以流程基本上就是这个

1 。首先转到page table,如果是TLB,那么我们就完成了。

<强> 2 即可。如果是cache memory,请转到第3步。

第3 即可。首先转到cache hit,如果它是cache miss,使用TLB形成转到物理内存,我们就完成了。

<强> 4 即可。如果是TLB hit,请转到physical address以获取用于形成TLB miss的网页的帧编号。

<强> 5 即可。如果找不到page table,则为physical address。如果所有帧都被某个页面占用,请使用其中一个page,只需从page fault加载所需的页面即可page replacement algorithms框架。

结束注释

我讨论的流程与虚拟缓存相关(流程之间更快但不可共享),在物理缓存的情况下,流量肯定会发生变化(速度较慢但可以在进程之间共享)。可以通过多种方式处理缓存。如果您愿意深入了解,请查看thisthis

答案 1 :(得分:5)

想象一下一个进程正在运行,需要一个数据项X.

首先检查缓存内存是否有所请求的数据项,如果有(缓存命中),它将被返回。如果它不存在(缓存未命中),它将从主存储器加载。

如果存在缓存未命中,将检查主内存,以查看是否page包含所请求的数据项(页面点击)以及此页面是否存在(页面错误),包含所需项目的页面必须从磁盘进入主内存。

在处理页面错误时,将检查TLB以查看所需页面的帧编号是否可用( TLB命中)否则( TLB未命中)操作系统必须咨询用于处理页面错误的页面表。

访问这些类型记忆所需的时间:

cache&lt;&lt;主存储器&lt;&lt;磁盘 enter image description here

缓存访问需要的时间最少,因此某个级别的命中或未命中会大大改变有效访问时间。

答案 2 :(得分:5)

  

导致页面错误的原因是什么?它总是因为记忆已经存在   搬到了硬盘?或者只是转移到其他应用程序?

嗯,这取决于。如果您的系统支持multiprogramming在多道程序设计系统中,主内存中有一个或多个程序已准备好执行),那么肯定是页面由于内存已移至硬盘,因此发生了故障。

如果您的系统支持多道程序设计,则取决于您的操作系统是使用全局页面替换还是本地页面替换。如果它使用全局,则是有可能内存已被移动以用于其他应用程序。但在本地,内存已被移回硬盘。当进程发生页面错误时,本地页面替换算法会选择替换某个属于同一进程的页面。另一方面,全局替换算法可以从整个帧池中自由选择任何页面。在处理thrashing时,有关这些问题的讨论会更多。

  

我对TLB未命中和页面错误之间的区别感到困惑。

当TLB(转换后备缓冲区)中不存在将虚拟地址转换为物理地址所需的页表条目时,会发生TLB未命中。 TLB就像一个缓存,但它不存储数据,而是存储页面表条目,这样我们就可以在TLB命中的情况下完全绕过页表,如图所示。

enter image description here

  

页面错误是否崩溃?或者它与TLB未命中相同?

由于崩溃无法恢复,因此它们都不会崩溃。但众所周知,我们可以从页面错误和TLB未命中恢复,而无需中止流程执行。

答案 3 :(得分:2)

此图可能有助于查看发生命中或未命中时将发生的情况。 enter image description here

答案 4 :(得分:-1)

操作系统使用虚拟内存和页表将这些虚拟地址映射到物理地址。 TLB用作此类映射的缓存。

In [31]: a = np.array([1, 2])

In [32]: a1 = a.copy()

In [33]: a2 = np.array(a)

In [34]: a[0] = 99

In [35]: a1
Out[35]: array([1, 2])

In [36]: a2
Out[36]: array([1, 2])

程序搜索TLB中的页面,如果找不到该页面则是TLB未命中,然后进一步查找缓存中的页面。

如果页面不在缓存中,则表示缓存未命中,并进一步查找RAM中的页面。

如果页面不在RAM中,那么这是页面错误,程序会在二级存储中查找数据。

所以,典型的流程是

 program >>> TLB >>> cache >>> Ram