很多朋友对cache的基本概念与工作原理图,Cache的基本概念与工作原理不是很了解,六月小编刚好整理了这方面的知识,今天就来带大家一探究竟
很多朋友对cache的基本概念与工作原理图,Cache的基本概念与工作原理不是很了解,六月小编刚好整理了这方面的知识,今天就来带大家一探究竟。
1.背景知识随着CPU技术的飞速发展,常用的处理器的频率越来越高。虽然处理器的速度越来越快,但是相应的内存的速度却没有得到相应的提升,这极大的限制了CPU的处理性能。我们系列文档中介绍的主角缓存技术就是用来解决这个问题的。
ARM发布Cortex-M7架构后,在微控制器领域也出现了频率高达数百兆的芯片,比如ST的STM32F7系列,恩智浦的i.MX RT系列。这些芯片中的处理器都有自己的缓存,在合理的配置下可以表现出非常强劲的数据处理性能。那么什么是缓存呢?如何利用这个新特性编写高性能的程序?有什么需要注意的吗?你可能会有这些疑问,不要着急,本系列文章将为你一一解答。
本系列文章分为三篇。第一篇是《cache 的基本概念与工作原理》,讲解关于缓存的基础知识。第二篇文章《STM32F7 Cache 介绍与实战》讲解了如何在STM32F7系列芯片上使用cache,并编写了一个程序进行性能测试。第三篇《Cache 的一致性问题与使用技巧》将介绍缓存的数据一致性以及使用缓存过程中的一些技巧。让我们从缓存的基础知识开始,了解这个强大的功能。2.计算机的分级存储系统
想要了解缓存的工作原理,就必须了解数据在计算机系统中的存储方式。当一个程序在计算机中执行时,所有的指令和数据都从内存中取出并执行。内存是计算机系统的重要组成部分,相当于计算机的仓库,用来存储各种程序及其处理的数据。因此,存储器的容量和性能应该随着处理器速度和性能的提高而提高,以保持系统性能的平衡。
然而在过去的20年里,随着时间的推移,处理器和内存在性能发展上的差异越来越大,内存在容量上的性能增长,尤其是访问延迟,已经跟不上处理器性能发展的需要。为了缩小内存和处理器的性能差距,计算机内部通常采用分级内存架构。
从上图可以看出,速度越快,容量越小,离CPU越近。CPU可以直接访问内存。外存的信息必须先拿到主存,然后才能被CPU访问。当CPU执行指令时,它需要的大部分操作数来自寄存器。当它需要从内存中读写时,它首先访问缓存,如果不在缓存中,它就访问主存,如果不在主存中,它就访问硬盘。此时,从硬盘中读取操作数并发送到主存,然后从主存发送到缓存。
使用数据时,一般只在相邻两层之间复制传输,而且总是从慢内存复制到快内存。传输的单位是定长块,需要确定定长块的大小,建立相邻两层之间的映射关系。在我们接触的嵌入式系统中,具体的访问时间和存储容量可能与上图有所不同,但不同级别之间的量级比较是一致的。3.为什么我需要缓存?
由于CPU和主存使用的半导体器件工艺不同,两者的速度差导致快CPU等待慢内存,所以要想办法提高CPU访问主存的速度。除了提高DRAM芯片本身的速度,采用并行结构技术,加快CPU访问速度的主要方法之一就是在CPU和主存之间增加一个高速缓冲区,也就是我们的主角缓存。缓存位于CPU和内存之间,可以节省CPU从外部存储器读取指令和数据的时间。
4.基本概念程序访问的局部性
对大量典型程序的分析表明,在很短的时间间隔内,程序生成的地址往往集中在很小范围的存储空间内,这种情况称为程序访问的局部性。这种局部性可以细分为时间局部性和空间局部性。时间局部性意味着被访问的存储器单元可能在短时间间隔内被再次访问。空间的局部性意味着被访问的存储单元的相邻单元可能在短时间间隔内被访问。
指令缓存(Instruction Cache)指令缓存只用于缓存指令,从外部存储器读取指令需要很长时间。如果外部存储器是闪存,CPU获取指令可能需要50-100ns。数据缓存数据缓存仅用于缓存数据。与指令缓存类似,CPU从外部SRAM或SDRAM中检索数据需要很长时间。5.工作原理
Cache是一种小容量的高速缓冲存储器,由快速SRAM组成,直接制作在CPU芯片中。速度快,几乎和CPU一个量级。在CPU和主存之间设置缓存,总是将主存中经常访问的活动程序块和数据块复制到缓存中。由于程序访问的局部性,在大多数情况下,CPU可以直接从缓存中获取指令和数据,而无需访问速度较慢的主存。
为了方便缓存和主存之间的信息交换,缓存和主存空间被划分成相等的区域。例如,主存中512字节的区域称为块,而主存块存储在缓存中的区域称为行。缓存的行有效位
系统启动时,每个缓存行都是空的,里面的信息是无效的,只有在缓存行中安装了主存块后才有效。为了说明高速缓存行中的信息是否有效,每一行都有一个有效位。通过清除一行的有效位来消除该行存储的主存的快速操作称为flushing,也就是我们常说的刷缓存。缓存中CPU的访问过程
当CPU在程序执行过程中需要从主机访问指令或写入数据时,首先检查缓存中是否有需要访问的信息,如果有,直接在缓存中读写,不访问主存。如果没有,将当前访问信息所在的主存块从主存复制到缓存中。因此,高速缓存中的内容是主存储器中某些内容的副本。下图显示了带有缓存的CPU执行内存访问操作的过程。高速缓存和主存储器之间的平均访问时间
在上图所示的访问内存的过程中,需要判断被访问的信息是否在缓存中。如果CPU访问单元的主存块在缓存中,称为缓存命中,命中的概率称为命中率p(hit rate)。如果它不在缓存中,则为未命中,其概率为未命中率。命中时,CPU直接在缓存中访问信息,花费的时间就是缓存的访问时间Tc,称为命中时间。
当它缺失时,需要从主存中读取一个主存块并发送给cache,同时将所需信息发送给CPU,所以所用时间是主存访问时间Tm和cache访问时间Tc之和。从主存读取一个主存块到缓存的时间Tm通常称为页面丢失。
CPU在缓存和主存级别的平均访问时间为:Ta=p * Tc (1-p) * (Tm Tc)=Tc (1-p) * Tm由于程序访问的局部特性,缓存的命中率可以达到很高,接近1。因此,虽然在丢失页面上花费的时间比命中时间长得多,但最终的平均访问时间仍然可以接近缓存的访问时间。缓存的映射模式
高速缓存行中的信息取自主存储器中的一个块。当将主存储器块复制到高速缓存行时,在主存储器块和高速缓存行之间必须遵循某些映射规则。这样,当CPU要访问一个主存单元时,就可以根据映射规则在缓存的相应行中寻找要访问的信息,而不是在整个缓存中寻找。根据不同的映射规则,主存块和缓存线之间有三种映射方式。
目前我们常见的CPU一般采用组连接的映射方式。组连接的映射方式充分利用了前两种映射方式,获得了优异的性能和较低的硬件实现难度。这里就不进行详细描述了,有兴趣的朋友可以通过搜索阅读相关内容了解详情。直接:每个主内存块被映射到缓存的一个固定行。完全关联:每个主内存块被映射到高速缓存的任何一行。
Set associate:每个主内存块被映射到一组固定高速缓存中的任何一行。值得注意的是,在编写高级或低级语言程序时,缓存对程序员是透明的,程序员不需要知道缓存是否存在,也不需要知道如何设置缓存,也感觉不到缓存的存在。但是对cahche的深入理解有助于写出高效的程序!
以上就是关于cache的基本概念与工作原理图,Cache的基本概念与工作原理的知识,希望能够帮助到大家!
声明本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们