一,存储系统基本概念
1.下面的图:数据只有读入主存,才能被CPU读取;右下角cache和主存的作用
金字塔右边的特点
2. 分类
3.性能指标
不写笔记了,转成回答问题
cache-主存:解决主存速度不匹配
主存-辅存:解决容量不够
存取时间=读+写;存取周期=读+写+读写之间的间隔
①为什么刷新需要0.5us:因为刷新=读+写用的时间≈存取周期
下面三种情况:
第一种:改变系统存取周期;
第二种:2ms不是他的刷新周期嘛,那就在2ms内,找个集中的时间,专门刷新前面的所有
第三种:每行刷新一次,需要的时间还是0.5us,刷新间隔的时间是:一行的位数×0.5us
②前面为什么行地址列地址要分开送?-地址线复用技术
因为它采用行列线,需要知道行地址和列地址,分别是前四位和后四位
如果同时发,就得要8根线,要不不能同时发,现在不同时发,就只需要4跟线了
③为什么要有使能信号?首先cpu给右端的寄存器发送了地址信号,等信号稳定之后,发送一个MREQ,这个时候才能真正开始,这个时候就代表信号稳定了
④多体并行存储器为什么连续存取n个存储字需要nT?
因为他是一个存储体顺序存放的,而只有一行才能同时存取,不同行必须不同时
⑤流水线的计算:
如何计算?首先前两种情况都不能完全满足
首先第一种,在三个存储体都访问完成之后,还剩下一段时间,这段时间过了之后才能访问下一个存储体,那么这个就没充分发挥流水线
第二种第一个用完之后,最后一个存储体还没读写完,因此中间这段时间就不能利用第一个存储体,因此相等是最好的情况。注意,虽然需要那么久T但是实际只需要r就可以释放这个存储体了,M3的r用过以后就可以去执行M1了
具体时间
⑥cache了
这里把这几个烂计算弄会
⑦cache是访问xx周围,什么是周围?
周围就是这个地址的那一块,什么是块,内存被分为若干块,就是为了方便存到cache中,比如1kB
⑧我不知道下面为什么22要被分成19+3,不用管那个
你知道为什么是22吗,因为主存地址是256MB,行长是64B,因此一共会有22行
到了直接映射就变成了,主存子块标记只有19位,因为那三位不用说都知道,你cache是八位,因此2的三次方,实际上你%8,对于二进制就是%2的三次方,实际上就相当于取地址的后三位,也就是20 21 22位。
那直接映射咋访存?首先找那三位,确定位置,然后验证前面额19位是否相等且有效位是1,是就找到了
组相联实际上就是自己分组,比如说你分成4组,那你就只需要2位,那就是末尾两位就是组好,00 01 10 11,那前面的主存子块标记就不用记录后面的2位,就有20位。
如何访存?首先判断那两位在哪,找到相应的组之后,在分组里在cache里面一个一个对比看有没有那个标记一样,再看看有效位是不是1就行了
一个术语:n路组相联映射:就是n个cache为1组,你就可以通过总的cache算出组的个数
cache替换算法
1.全相联
不管是哪个,都是先从头到尾填,直到填满为止,填满的时候,看替换掉哪个,方法和之前一样
2.直接映射
先把数字映射好,然后往进带,遇到冲突的就覆盖
3.n路组相联
先把数组映射到%以后的,即得到对应组,然后在组内进行FIFO之类的
cache写策略
http://t.csdnimg.cn/uiZLo
cache题目:好家伙
1.题目给二进制,你就找其中的三位或者两位
说2路,是每组两个,不是两组
2.求cache总容量=标记位+数据
标记位=有效位(1)+写策略位(写回法1位,全写法0位)+映射位(这根据采用的映射方法,总-数据位-组数/直接映射的几位)
页表块表之类的图
这东西考前肯定背
计算:就知道快表在cache中,慢表在内存中,有快表之后只访问一次内存,就是找数据那次,没有的话访问两次,一次表一次数据