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