个人主页:godspeed_lucip
系列专栏:计算机组成与原理基础
(1)解释
(2)说明
比如说一个数组,当我们访问a[0][0]时,其接下来的a[0][1]、a[0][2]也很有可能被接着访问,这就是局部性原理
而对于指令也是一样,一个程序中的指令通常是被顺序存放的,CPU访问了一条指令后,对于其周围的指令是很有可能接着去访问的
(1)解释
(2)说明
对于一条循环指令来说(for(int i=1,i<10,i++)),i=1的加法,在未来的i=2的时候也要用到。这就是时间局部性
3. 基于局部性原理,可以将CPU目前访问的地址“周围”的部分数据放进Cache中,这样可以大幅提升CPU的运行速度
上述的命中率是CPU分别在Cache、主存中找数据的情况,CPU也可以同时在Cache、主存中寻找数据,此时的平均访问时间就是
Cache是取目前访问的地址的“周围”的数据,那么如何界定周围?
注意:
(1)主存块可以放在Cache的任何一块上
(2)Cache中的每块都设置了一个标记位记录该主存块的地址,对于未存放数据的Cache块标记位已全0展示
(3)但是地址位为全0的主存块实际上是有资源的,所以还需要设置一个有效位(1代表有数据,0代表无数据)
(1)前提:主存地址空间为256MB,每块行长为64kb,则:
(1)使主存地址对Cache内存块个数取余,得到的数字就是该主存块应该存放的Cache块编号
(2)设置了标记位与有效位,与全相联映射一致。
考虑到该方法需要将主存地址对Cache总块数取余,即地址的后三位实际上对应的是Cache块的编号,那么在Cache的标记位上,可以直接截取主存地址的前19位,因为后3位分别为000-111。
对于一个特定的主存块来说,假如其对应的Cache内存块没有空间,那么即使其他Cache块有空间,该主存块也不可以放到有空间的Cache块中去。
(1)将Cache块分组,主存块需要对组数进行取余,根据结果决定改主存块要放在那个Cache块组中。
(2)设定标记位与有效位
(3)标记位的改进方法与直接映射类似,对于一个块数为8的Cache,对地址位为22位的主存地址只需要保存前20位就可以了。(222/22)
实现简单,原理简单
注意:当CPU在Cache中未访问到目标数据而去主存寻找时,找到的数据要立即放入Cache中去
对于第一条,我们当然也可以使其加1,但是不加1其实也可以达到效果。
解释
CPU要对一个地址进行写操作,而且这个地址已经被调入了Cache,发生了命中的情况
为了让CPU知道Cache是否发生了写操作,还需要对每个Cache块增加一个“脏位”,该位数值为1代表已经修改,为0代表没有修改
缺点
存在数据不一致的隐患
为了增加CPU将数据写入主存的速度,可以增加一个由SRAM(速度较快)实现的缓冲队列,CPU先将数据放入缓冲队列,当CPU暂时不再进行写操作时,缓冲队列在专门的控制电路下将数据写入主存
当CPU需要对一个地址进行写操作,且这个数据不在Cache中的时候,CPU回将数据调入Cache中
低级Cache中保存的是主存的副本,而高级Cache保存的是低级Cache的副本,所以多级Cache中也存在数据同步的问题。一般来说:
计算机组成原理如一座精密的交响乐团,微观中展现着电子的舞蹈,宏观中奏响着科技的交响曲。
它拆解复杂问题为简单指令,通过微处理器的默契协作,创造出无尽可能。
存储单元如记忆的灯塔,指引信息的航程。
总线是信息的大道,连接着各个功能模块,使计算机成为无比高效的智慧之器。
在计算机组成原理的魔法指导下,世界逐渐变得更加智能、便捷、创新。
渴望挑战计算机组成与原理的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多CO的奇迹吧。我们推出了引领趋势的CO专栏:《计算机组成原理基础》 ,旨在深度探索CO的实际应用和创新。