第三章
半导体随机存取存储器
-
存储器的层次
-
存储器的分类
可读可写的:磁盘、内存、Cache
只能读的:实体音乐专辑通常采用 CD-ROM,实体电影采用蓝光光碟,BIOS通常写在ROM中
断电后,存储信息消失的存储器——易失性存储器(主存、Cache)
断电后,存储信息依然保持的存储器——非易失性存储器(磁盘、光盘)
RAM芯片——易失性,断电后数据消失
ROM芯片——非易失性,断电后数据不会丢失
信息读出后,原存储信息被破坏——破坏性读出(如DRAM芯片,读出数据后要进行重写)
信息读出后,原存储信息不被破坏——非破坏性读出(如SRAM芯片、磁盘、光盘)
Static Random Access Memory,即静态RAM
Dynamic Random Access Memory,即动态RAM
SRAM芯片:使用双稳态触发器存储信息
DRAM芯片:使用栅极电容存储信息
SRAM集成度低,存储容量小,SRAM它所对应的行列地址的地址位数也比较少,所以可以同时把行列地址给送出去
DRAM中,电容里面的数据只能保持2ms,2ms后数据就丢失了,所以电容需要每隔2ms刷新一次
DRAM刷新
每刷新一行需要0.5us的时间
刷新的意思就是说,在一个刷新周期内,要保证对每一行数据都刷新一次。
异步刷新就是将这个死区分散到各个部分。
主存储器与CPU的连接
低位交叉存储器
- 理解存取时间和存取周期
注意低位交叉编址的地址格式:低位表示存储体的体号,这就使得连续的多个地址存放在不同的存储体中,使得CPU可以连续的访问每一个存储体
- 低位交叉编址,就是说CPU访问了一个存储体之后,这个存储体需要经过一段恢复时间,才能允许CPU进行下一次的访问,恢复时间段内,CPU是可以去访问其他的存储体的,这也就确定了,如果一个存储器的存取周期为T,存取时间为r,那么T/r就表示当有T/r个存储体时,CPU可以一直连续不断的访问存储体
- 当存储体的个数为T/r个时,访问n个存储字,需要T+(n-1)r的时间
因为前n-1个存储字访问都需要一个存取时间r,当访问最后一个存储字的时候,除了访问这个字以外,还要加上恢复时间,所以最后一个字需要T的时间
Cache存储器
-
双端口RAM、多模块存储器提高存储器的工作速度
优化后访存的速度与CPU差距依然很大 -
空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的。
Eg:数组元素、顺序执行的指令代码 -
时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息
Eg:循环结构的指令代码 -
基于局部性原理,不难想到,可以把CPU目前访问的地址“周围”的部分数据放到Cache中
-
如何界定周围:将主存的存储空间分块,主存与Cache之间以“块”为单位进行数据交换
-
CPU与Cache之间的数据交换以字为单位
注意:每次被访问的主存块,一定会被立即调入Cache
映射方式
什么是按字编址和按字节编址
按字节编址即每个存储单元大小为1个字节(8bit)
2.按字节寻址,指的是存储空间的最小编址单位是字节,按字编址,是指存储空间的最小编址单位是字,以上题为例,总的存储器容量是一定的,按字编址和按字节编址所需要的编码数量是不同的,按字编址由于编址单位比较大(1字=32bit=4B),从而编码较少,而按字节编址由于编码单位较小(1字节=1B=8bit),从而编码较多。
替换策略
替换算法只会被应用到全相联和组相联映射中
注意:每次被访问的主存块,一定会被立即调入Cache
下面以全相联映射为例
采用LRU算法,对于Cache块,
- 注意计数器的逻辑,他记录的是这个cache块多久没有被访问了
- cache命中时,所命中这个cache块的计数器清零,同时只对那些计数器值小于它小的计数器加1,
- Cache块不命中且无空闲的时候,替换计数器值最大的Cache块
采用LFU算法
计数器用于记录这个Cache块被访问了多少次,这样的话,这个计数器可能需要很长的比特位来表示
Cache写策略(解决cache和主存数据一致性问题)
写回法:要在Cache中添加一个脏位,用于记录这个Cache块有没有被修改过。当要淘汰某个Cache块时,未被修改的块不必写回,写回是需要时间的。
全写法:
- 注意:Cache块被替换时无需写回,因为CPU直接对cache和主存的数据都进行了更新
- 当CPU对Cache写命中时,CPU必须把数据同时写入Cache和主存,而写入主存的时间是非常慢的,这时有个方法就是使用写缓冲
- 当CPU对Cache写命中时,CPU把数据同时写入Cache和些缓冲(写缓冲是STAM实现的先进先出的队列),这比直接往主存写入速度要快,CPU完成写操作后,就可以去干其他的操作,CPU在干其他事情的期间,写缓冲会在一个专门的电路控制下面将数据写入主存。
注意:如果CPU进行持续的写操作,可能会造成写缓冲饱和,这时候,CPU只能阻塞等待
对于非写分配法,如果写未命中,那么cpu会将数据直接写入主存,而不会将这个主存块调入Cache,只有在读未命中,才会将主存块调入Cache
- 按字节编址:块的大小是4*32bit=16B=24B,由于按照字节编址,一个存储单元内含有一个1B,所以一共需要4个bit来保存字块内地址;
Cache中存放的是主存块中的副本
虚拟存储器
TLB中存放的是某一些页表项的数据
TLB完成从虚拟地址–》物理地址的变换,确定了物理地址之后,才会去访问Cache
Cache存放的是主存块的存储数据