关于cache的碎碎念

写博客意味着要考试了,边写边复习。

考的是计算机体系结构,其实和操作系统重合度有点高,在memory这方面。

讲讲cache。


一、为什么要有cache呢?

CPU在运行程序的时候需要各种各样的数据,数据都放在内存中(main memory ),CPU要什么数据,就会告诉内存,“你把第xxx块的数据放到总线上递给我吧”。

本来这样也没什么问题,可是就是太慢了。

计算机中有个叫memory wall 的东西,大概意思是 计算机发明到现在,CPU计算速度提升了几千万倍(大概),存储系统的速度却只提升了几十倍。CPU在前面跑得飞快,但是每次需要个什么存储系统内的数据,就要等存储系统慢慢找,找到了给它。

那就做个快点的呗。又有一个原理,叫什么名字我忘了,大意是说,越大的存储系统,寻址时间越大,越小的存储系统,寻址时间越短。该怎么妥协呢?于是cache就诞生了,我把常常用的东西放到一个小的存储芯片里面,不就能整体提高速度了嘛。


二、cache寻址过程

上图展示了一个简单的cache寻址过程。原来CPU只需要告诉内存,我要xxxx块,有了cache后,就直接告诉cache了。但是cache小呀,如图,右边内存有那么多,但是cache只有4块,这里就存在一个映射关系。

对于原来的一个地址 0010xx,在cache中什么位置呢,在中间两位 10的位置上。但是还有1110xx 1010xx这些地址会映射到这一块上,所以需要地址的高两位也放入cache中作为tag,以便区分是否是需要的那块地址。

拿到一个32位地址,首先把中间10位,叫index位,找出来去找到第xxxxx行的cache的地方,然后用高20位,叫tag位,去比较这一行的tag,如果相等那就说明就是这一块。

三、组关联映射

cache要是能存储的多点就好了,但是多了寻址又变慢了。于是组关联又有了。相同的index位找到一组,一组中有多行。


同样的255,同样的8位index, 每一组却有4个。只需要比较这四个中,哪个tag和地址请求相等,就得到想要的了。

四、关于替换算法

cache大小是有限的,当我需要把某一块地址放入cache中的一组,这一组的几个block都有了,那么就需要替换出某一块出去。替换哪一块又要涉及到替换算法。

LRU policy:Least Recently Used,把最近最少使用的替换出去。也就是上次使用距现在时间最长的那一块。

      在硬件实现上,用pseudo LRU 实现

五、关于写

如果cache hit

write through :把cache 和memory一起写了,简单但是费事。

write back : 只把cache写了,并且在cache中用dirty位表示此数据已经被更改过。

如果cache miss

no write allocate : 把memory写了

write allocate : 把要改的那块放入cache中,然后写。


write buffer:

写总是耗时的,可以把写交给write buffer 而不是cache本身 ,这样cache可以继续进行其他操作。


六、关于cache的性能

Average Memory Access Time= Hit Time+(Miss Rate * Miss Penalty)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值