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

Caching 缓存未命中、TLB未命中和页面错误,caching,memory,operating-system,tlb,Caching,Memory,Operating System,Tlb,有人能清楚地告诉我缓存未命中、tlb未命中和页面错误之间的区别,以及它们如何影响有效内存访问时间吗 操作系统使用虚拟内存,页表将这些虚拟地址映射到物理地址。TLB用作此类映射的缓存 program >>> TLB >>> cache >>> Ram 程序在TLB中搜索页面,如果没有找到该页面,则表示TLB未命中,然后在缓存中进一步查找该页面 如果该页不在缓存中,则表示缓存未命中,并在RAM中进一步查找该页 如果页面不在RAM中,则是页面错

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

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

 program >>> TLB >>> cache >>> Ram
程序在TLB中搜索页面,如果没有找到该页面,则表示TLB未命中,然后在缓存中进一步查找该页面

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

如果页面不在RAM中,则是页面错误,程序会在辅助存储器中查找数据

所以,典型的流量是

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

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

CPU生成逻辑地址,其中包含
页码
页偏移量

页码
用于索引到
页表
,以获得相应的
页帧编号
,一旦我们有了
物理内存
(也称为主内存)的页帧,我们就可以应用
页偏移量
来获得正确的内存字

为什么使用TLB(翻译查找缓冲区)

问题是页表存储在
物理内存中,有时可能非常大,因此,为了加快逻辑地址到物理地址的转换,我们有时使用
TLB
,它是由昂贵且更快的关联内存组成的,因此不必先进入页表,我们进入
TLB
并使用
页码
索引到
TLB
,得到相应的
页码
,如果找到了,我们完全避免
页码表
(因为我们既有
页码
,也有
页码偏移量
)并形成
物理地址

TLB未命中

如果在
TLB
中找不到
页面框架编号
,则称之为
TLB未命中
,然后转到
页面表
查找相应的
页面框架编号

TLB命中率

如果我们在
TLB
中找到
page frame number
,则称为
TLB hit
,我们不需要转到page table

页面错误

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

缓存命中率

高速缓存是一种运行速度比物理内存快的小型内存,我们总是在进入物理内存之前先进入高速缓存。如果我们能够在缓存中的缓存内存中找到相应的字,它就被称为
缓存命中
,我们甚至不需要去物理内存

缓存未命中

只有在映射到
缓存时,才能在缓存中(称为
缓存未命中
)的内存中找到相应的
,类似于物理内存
页框
)之后,然后我们进入
物理内存
,完成所有的
页表
TLB
的过程

所以流程基本上是这样的

1。首先进入
缓存
,如果它是
缓存命中
,那么我们就完成了

2。如果是
缓存未命中
,请转至步骤3

3。首先转到
TLB
,如果它是
TLB命中的
,使用
物理地址转到物理内存,我们就完成了

4。如果是
TLB未命中
,则转到
页表
,获取用于形成
物理地址的页的帧号

5。如果未找到
页面
,则为
页面故障
。如果所有帧都被某个页面占用,则使用
页面替换算法之一
,否则只需将所需页面从
辅助内存
加载到
物理内存

结束注释


我所讨论的流与(更快,但不能在进程之间共享)有关,如果物理缓存(PIPT)(较慢,但可以在进程之间共享),流肯定会发生变化。缓存可以以多种方式寻址。如果您愿意深入研究,请查看和。

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

首先,将检查高速缓存是否有请求的数据项,如果有(高速缓存命中),将返回该数据项。如果没有(高速缓存未命中),将从主存加载该数据项

如果存在缓存未命中,将检查主存是否包含请求的数据项(页面命中),如果该页面不存在(页面错误),则必须将包含所需项的页面从磁盘带入主存

在处理页面错误时,将检查TLB,以查看所需页面的帧号是否在那里可用(TLB hit),否则(TLB miss)操作系统必须查阅页面表以维护页面错误

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

缓存 什么导致页面错误?是否总是因为记忆被遗忘 移动到硬盘?或者只是为了其他应用程序而四处移动

那要看情况了。如果您的系统不支持(在多道程序设计系统中,有一个或多个程序加载到主内存中准备执行),那么肯定会发生页面错误,因为内存已移动到har