繁体   English   中英

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

[英]cache miss, a TLB miss and page fault

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

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

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

page number用来索引到page table ,得到对应的page frame number ,一旦我们有了physical memory (也叫主存)的页框,我们就可以应用page offset来得到正确的字记忆。

为什么使用 TLB(Translation Look Aside Buffer)

问题是页表存储在physical memory ,有时可能非常大,所以为了加快逻辑地址到物理地址的转换,我们有时会使用TLB它是由昂贵且速度更快的关联内存构成的,所以代替先进入页表,进入TLB ,使用page number索引到TLB ,得到对应的page frame number ,如果找到,我们完全避开page table (因为我们有page frame numberpage offset )并形成physical address

TLB小姐

如果我们在TLB没有找到page frame number ,则称为TLB miss只有到page table中查找对应的page frame number

TLB命中

如果我们在TLB找到page frame numberTLB称为TLB hit ,我们不需要去页表。

页面错误

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

缓存命中

Cache Memory 是一种比物理内存运行速度更快的小内存,我们总是在进入物理内存之前先进入缓存。 如果我们能够在缓存内部的缓存内存中找到相应的单词,则称为cache hit ,我们甚至不需要去物理内存。

缓存未命中

只有当映射到cache memory无法在cache memory中找到相应的cache memory block (类似于物理内存page frame block )时(称为cache miss ),我们才会转到physical memory并进行所有的遍历page table过程。 page tableTLB

所以流程基本上是这样的

1.首先进入cache memory ,如果cache hit ,那么我们就完成了。

2 . 如果是cache miss ,请转到步骤 3。

3 . 首先转到TLB ,如果TLB hit ,则使用形成的physical address转到物理内存,我们就完成了。

4 . 如果它是TLB miss ,则转到page table以获取用于形成physical address页的帧号。

5 . 如果找不到该page则是page fault 。如果所有帧都被某个页面占用,则使用其中一种page replacement algorithms ,否则只需将所需的页面从secondary memory加载到physical memory帧。

尾注

我所讨论的流程与虚拟缓存(VIVT) (更快但不能在进程之间共享)有关,在物理缓存(PIPT)的情况下,流程肯定会发生变化(速度较慢但可以在进程之间共享)。 缓存可以通过多种方式寻址。 如果你愿意深入了解这个这个

此图可能有助于了解命中或未命中时会发生什么。 在此处输入图片说明

想象一个进程正在运行并且需要一个数据项 X。

首先会检查缓存中是否有请求的数据项,如果存在(缓存命中),则返回。如果不存在(缓存未命中),则从主存加载。

如果有高速缓存未命中主内存将进行检查,以查看是否有页面包含所请求的数据项目(第命中),如果这样的页面不存在(缺页),包含所需项目的页面已经被带入主从磁盘内存。

在处理页面错误时,将检查 TLB 以查看所需页面的帧号是否在那里可用( TLB 命中),否则( TLB 未命中)OS 必须查阅页表来处理页面错误。

访问这些类型的内存所需的时间:

缓存 << 主存 << 磁盘在此处输入图片说明

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

什么导致页面错误? 总是因为内存已经移到硬盘了吗? 或者只是为了其他应用程序而移动?

嗯,这取决于。 如果你的系统支持多道在多道系统也有在主内存中加载一个或多个程序就可以执行)的话,肯定已经发生页面错误,因为内存已被转移到硬盘上。

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

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

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

在此处输入图片说明

页面错误是崩溃吗? 还是与TLB未命中相同?

它们都不是崩溃,因为崩溃是不可恢复的。 但众所周知,我们可以从页面错误和 TLB 未命中中恢复,而无需中止进程执行。

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

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

程序在 TLB 中搜索页面,如果没有找到该页面,则为 TLB 未命中,然后进一步在缓存中查找该页面。

如果页面不在缓存中,那么它是缓存未命中,并进一步在 RAM 中查找页面。

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

所以,典型的流程是

Page Requested >> TLB miss >> cache miss >> page fault >> looks in secondary memory. 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM