- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有人可以清楚地解释我缓存未命中,tlb未命中和页面错误之间的区别,它们如何影响有效的内存访问时间?
最佳答案
让我逐步解释所有这些事情。
CPU生成逻辑地址,该逻辑地址包含page number
和page offset
。page number
用于索引page table
,以获得相应的page frame number
,一旦我们有了physical memory
的页面框架(也称为主内存),就可以应用page offset
来获取正确的内存字。
为什么选择TLB(翻译后备缓冲区)
事实是,页表存储在physical memory
中,有时可以很大,为,因此为了加快逻辑地址到物理地址的转换,我们有时使用TLB
,,它由昂贵且更快的关联内存组成,因此,与其先进入页面表,不如进入TLB
并使用page number
索引到TLB
,并获取对应的page frame number
,如果找到了,我们完全避免使用page table
(因为我们同时拥有page frame number
和page offset
)和形成physical address
。
TLB 小姐
如果我们在page frame number
中找不到TLB
,则仅将其称为TLB miss
,然后转到page table
查找相应的page frame number
。
TLB热门
如果我们在page frame number
中找到了TLB
,即TLB hit
,则无需转到页表。
Page Fault
当物理内存中不存在正在运行的程序访问的页面时发生。这意味着页面存在于辅助存储器中,但尚未加载到物理存储器的框架中。
缓存命中
高速缓存内存是一种小型内存,其运行速度比物理内存快,并且我们总是在进入物理内存之前先进入高速缓存。如果我们能够在高速缓存内部的高速缓存存储器中找到相应的单词,则将其称为cache hit
,我们甚至不需要去物理内存。
缓存小姐
只有当映射到cache memory
不能找到缓存内的内存(称为block
)的对应的block
(类似于物理内存page frame
的cache miss
)之后,我们转到physical memory
并完成所有通过page table
或TLB
的过程。
所以流程基本上是这样
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
帧即可。
尾注
我讨论的流程与虚拟缓存(进程之间更快但不可共享)有关,在物理缓存(进程较慢但可以在进程之间共享)的情况下,该流程肯定会改变。缓存可以通过多种方式解决。如果您愿意深入学习,请看看this和this。
关于caching - 高速缓存未命中,TLB未命中和页面错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37825859/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 3 年前。 Improve th
作为练习,我正在尝试使用 Thread.sleep 作为计时器并使用 JMF 作为声音来使用 Java 创建一个节拍器。它运行良好,但出于某种原因,JMF 似乎只能以每分钟最多 207 拍的速度播放声
有谁知道对用户浏览器进行基准测试的快速方法?它不需要那么准确。 我开始在我们的软件平台中使用 Javascript 执行越来越多的密集型任务,我担心性能在旧浏览器上会成为一个问题,所以我想要的是我可以
我的数据看起来像每帧 1000 万个数值(实数 + 二进制)(想想数组,即数组的一行中有 1000 万个元素)并且大约有 100 帧/秒。一种时间序列。 我的挑战是: (1) 存储——数据量 (2)
在使用 Android 时,我丢失了传入 USB 数据流上的数据,而在 Windows 中读取同一设备/流时我不会丢失这些数据。 (我知道 Android 不是实时操作系统,但 Windows 也不是
在我目前正在做的一个C#项目中,我们试图计算网络上大量文件的MD5(当前pot是270万,客户端pot可能超过1000万)。随着我们处理的文件数量的增加,速度成为问题。 我们这样做的原因是为了验证文件
我一直在尝试使用 XSLT 在最有效的时间内从 XML 文档获取 CSV 数据。以下是我的示例 XML Raagu Hoskote
如果标题听起来令人困惑,我很抱歉,如果您在这段描述后有更好的想法,请随时提出建议。 简而言之,我在 Linux 上使用 PHP 以及以下假设的文件/代码: job.php: if(setting_ge
对最多 1000 万个 7 位数字进行排序。约束条件:1M RAM,高速。几秒就好。 [编辑:来自提问者的评论:输入值不同] 使用位图数据结构可以很好地解决这个问题。 这意味着我需要一个字符串,它的长
我是一名优秀的程序员,十分优秀!