嵌入式系统设计师学习笔记⑥:存储器的层次架构及Cache详解

嵌入式系统设计师学习笔记⑥:存储器的层次架构及Cache详解

存储器被组织成金字塔形的层次结构:
存储器自上而下,组成6个层次结构,依次变得更慢、访问效率更低、容量更大、每字节的造价更便宜。

如图所示:

Cache:

①功能:提高CPU数据输入输出的速率,突破所谓的“冯·诺依曼瓶颈”
②速度:在计算机的存储系统体系中,Cache是访问速度较快的层次
③原理:使用Cache改善系统性能的依据是程序的局部性原理
④组成:Cache由两部分组成:控制部分和Cache存储器部分

局部性原理:

概念:利用程序的时间局部性和空间局部性来优化系统性能,平衡处理器与存储器之间的数据存取差异,故Cache能提高存储器的平均访问速度。

时间局部性:如果一个存储项被访问后,极有可能会在一段时间间隔内被多次访问。

int i =0,sum =0;
for(i=0;i<10;i++)
{
   
	sum = sum +i;
}
在上述程序中,局部变量i和sum被访问后,
由于存在循环,因此会在短时间内被多次访问

空间局部性:如果一个存储项近期被访问到后,它在内存中相邻的内存空间也极有可能在短时间内被访问到。

int  array[10];
定义一个数组,由于数组在内存中是连续存放的,
而且对于数组的操作一般都是逐个访问进行,
因此若array[0]被访问后,数组中其他元素也极有可能会被访问到。

Cache能够减少内存的平均访问时间。

Cache的参数:

①块(Line):数据交换的最小单位
②命中(Hit):在较高层次中发现要访问的内容

命中率(Hit Rate) = 命中次数/访问次数
命中时间:访问在较高层次中数据的时间

③失效(Miss):需要在较低层次中访问块

失效率 = 1-命中率
失效损失=替换较高层次数据块的时间+将该块交付给处理器的时间

④命中时间<<(远小于)失效损失

Cache平均系统周期时间(以读操作为例:使用“Cache+主存储器”):

t3 = h*t+(1-h)xt2

h代表对Cache的访问命中率
t1表示Cache的周期时间
t2表示主存储器周期时间
系统的平均周期为t3,
(1-h)又称为失效率(未命中率)

Cache的地址映像:

概念:主存和Cache是同样大小的块组成,主存以块为单位映像到Cache中。

①通常由SRAM(静态存储器)组成。其访问速度远高于主存,接近CPU。

②其功能是提高CPU数据输入输出的速率。其理论依据是程序的局部性原理。实现基础是将主存和Cache划分成大小相同的块/页。

③装入缓存时将主存块与Cache块的映射关系存入相联存储表(硬件实现)中。

主存与Cache的映射由硬件自动实现

④CPU通过主存地址访存时先访问Cache(若命中可提升速度,所以其关键性能指标是命中率),依据主存地址关联相联存储表转换为Cache地址。如果在Cache中没有,才需要访问主存(Cache页置换,置换算***影响命中率)。

Cache地址映像的替换策略:

常见的地址映像和变化方式
直接映像和变换
组相联映像和变换
全相联映像和变换

地址映像:把主存地址空间映像到Cache地址空间。

地址变换:当程序或数据已经装入到Cache后,在实际运行过程中,把主存地址如何变成Cache地址的过程。

一、直接映像和变换
①主存储器中一块只能映像到Cache的一个特定的块中

②主存与缓存分成相同大小的数据块

③主存空间按缓存容量分成区,每一区的块数与缓存的总块数相等

④主存中某区的一块装入缓存时只能存入缓存中块号相同的位置

直接相联映射图

特点
①地址变换电路简单,访问速度快

②空间利用率低,冲突概率高

③对页面置换算法依赖度高,且Cache空间利用率低,命中率较低

二、组相联映像和变换
①主存的任意一块可以映像到Cache中的任意一块的位置上

②主存与缓存分为大小相同的数据块

③主存的某一数据块可以装入缓存的任意一块空间中

组相联映射图

特点
①空间利用率高,命中率较高

②冲突概率低

③实现复杂,速度慢,适合小容量Cache

三、全相联映像和变换
①主存和Cache按同样大小分块

②Cache分为若干组,如两块一组,主存按Cache组数分区

③每个组采用直接映射方式(组间:直接相联映射)

④组内的块则采用全相联映像方式

全相联映射图

特点
①是直接映像和组相连映像的折中方式

②实现难度和造价要比直接映像方式高

全部评论

相关推荐

xdm&nbsp;早上喝奶茶差点喷出来。事情是这样的,我们班有个哥们儿,简称&nbsp;L,去年秋招拿了字节sp,专业方向是后端。我们当时都震惊:这哥们儿平时课上从来不发言,期末小组作业基本是划水的那种,刷题平台&nbsp;commit记录我点进去看过,绿格子稀稀拉拉。但他面试一路绿灯。一面二面三面&nbsp;hr&nbsp;面,全过,给的还是sp。当时班级群里恭喜他的、问他经验的、约饭的,热闹了一周。他说自己"运气好,准备充分"。我们都信了,直到三月初他入职。入职第二周开始,班里另一个进字节的同学W(在隔壁组的)开始跟我他的不对劲。一开始是写代码慢,后来写不出来,再后来是组里&nbsp;mentor&nbsp;让他fix&nbsp;一个简单&nbsp;bug&nbsp;都搞了一下午没动静。最离谱的是上周。W&nbsp;说他们大部门搞了个新人分享会,让新人讲一下自己负责模块的设计思路。L&nbsp;上去讲了&nbsp;20分钟,全程念稿子,问答环节别人随便问一个"那你这里为什么用&nbsp;Redis&nbsp;不用&nbsp;Memcached",他直接卡&nbsp;30秒说"这个我回去再确认一下"。会后他&nbsp;mentor&nbsp;直接找&nbsp;leader&nbsp;谈,leader&nbsp;找&nbsp;hr&nbsp;谈,hr调出了他面试录像,全程对比口型和回答节奏,发现他二三面有大量时长在偷偷看屏幕外(推测开了双机位&nbsp;AI&nbsp;答题)。(这段是&nbsp;W后来转述给我的,他自己也是听他组里同事八卦来的)昨天下班前,W&nbsp;告诉我L&nbsp;被辞退了,让他自己走,不走就走仲裁但会发函到学校。L&nbsp;现在已经回学校了,朋友圈仅三天可见。我说真的,我不是个心眼小的人,但是我看到这个消息的时候真的有种"嗯,挺好"的感觉。去年秋招我投字节后端,简历挂。我准备了八个月,背&nbsp;八股&nbsp;+&nbsp;刷&nbsp;500&nbsp;题&nbsp;+项目改了三版,连面试机会都没拿到。班里这哥们儿凭着一个外挂上岸,最后还是被甩出来了。不是说作弊就一定会被发现,但是当面试拿到的&nbsp;offer远远超出真实能力的时候,迟早会有这一天。试用期三个月不是给你过家家的,是真的要写代码、要在会议上回答问题、要扛需求的。我现在反而有点同情他。同情他相信"上岸就是终点"。发出来不是为了嘲笑谁,就是想说给那些正在被身边作弊上岸的同学搞得很&nbsp;emo&nbsp;的&nbsp;uu&nbsp;们听——别急,回旋镖很长,但它一定会回来。你继续刷你的题,写你的项目,背你的八股。该是你的迟早是你的,不是你的早晚还得还回去。xdm&nbsp;共勉。
牛客12588360...:我不想评论面试方式,作弊是绝对不对的,但是你八股加刷题也不过是个做题小子,他穿帮纯粹是他菜,你也没有高明到哪里去
点赞 评论 收藏
分享
LB21:之前问她好像还什么试岗,你别逗我笑了西电✌️ 这种公司是我这种水平去的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务