一些可能会用到的知识

第三部分:存储系统

 

1,存储器是层次结构的思想:

使上一层较快的存储器作为底一层存储器的高速缓存,解决了速度,容量,成本三者之间的矛盾

从上到下为寄存器、Cache、主存、外存

速度越来越慢,容量越来越大,成本越来越低

2,半导体存储器:

ROMread- only Memory):只读存储器,非易失性存储器,写入程序后不能更改,只能读取,用来存储不变的常数和程序

包括U盘,SD卡,固态硬盘都是Rom派生出的存储器,他们写的速度要比读的速度慢的多

RAMRandom- Access Memory随机访问存储器:是指可以直接按照地址随机存取,易失性存储器,分为DRAM和SRAM,

SRAM的存储元为双稳态触发器,集成度低,速度快,通常用来做Cache的材料

DRAM的存储元是栅极电容,是动态随机访问存储器,需要刷新来保持数据不变,采用地址复用技术,可以减少地址线,集成度高,价格低,通常作为内存的材料。

DRAM的三种刷新方式(以行为单位)

集中刷新,分散刷新,异步刷新

串行访问存储器:对存储单元的读写要按照物理位置的先后顺序寻址。它包括顺序存取存储器和直接存取存储器。前者的代表是磁带,后者的代表是磁盘。

3,内存最大容量:

2mar的位数✖️存储字长(MDR的长度)

4,时间局部性和空间局部性

时间局部性:是指当前访问的存储单元在不久之后可能还会用到(例如循环结构)

空间局部性:是指与当前访问的存储单元临近的存储单元在接下来很可能会被访问(如数组这种数据结构)

5,主存与CPU的连接:

分为字扩展和位扩展(或字位同时扩展)

字扩展时:数据线的连接方式相同,将CPU的高位地址经过译码器来充当芯片的片选

位扩展时:地址线完全相同,CPU通过同一个地址能够同时访问同一组芯片的对应相同的存储单元。

6,双端口RAM

每一个端口有自己独立的地址线,控制线和数据线,可以提高CPU访问存储器的速度

7,多模块存储器:

每一个模块具有自己独立的MAR和MDR,分为高位交叉编址和地位交叉编址,顾名思义:

高位交叉编址的高位作为模块号,低位作为模块内部地址

地位交叉编址低位作为模块号,高位作为内部地址,能够实现流水存取。(因为读取存储器之后,存储器需要一段时间来恢复,所以存取周期要比存取时间大的多,在这段恢复的时间中,如果为高位交叉编址,因为读取的下一条指令或者数据很可能与他处于同一个模块中,所以要等待到存储器完全恢复才能够进行下一次存取)但如果是低位交叉编址,连续的数据或者程序被放在不同的模块中,这样在第一个存储器的恢复时间里CPU可以直接读取下一个模块的数据。如何实现流水?设存储周期为T,存取时间为r,如果模块号N=T/r,即可实现流水存取。

8,高速缓冲存储器Cache

(1)为什么要有cache? 

因为要缓和CPU与内存之间的速度矛盾,引入了Cache,将当前CPU经常用到的数据放入cache中,之后获得物理地址之后会先查看cache中是否有,再查看内存,如果cache命中,就读取cache存储单元的内容,如果不命中,再去内存中寻找,并将数据所在的整个数据块都存入cache行中(这里运用了局部性原理)以减少访存的时间。

(2)cache与主存地址的映射关系

如何映射?即如何决定物理块存入哪一行cache,并且CPU如何用物理地址对cache进行查找?

将主存和cache划分为大小一样的存储块,cache中称做cache行,主存中称做主存块。

直接映射:将主存块号对cache行号进行模运算取余数,将该主存块存入以余数为序号对应唯一的cache行;此时cache的内存标记最小。

全相联:将内存块存入任意一行cache(替换算法对cache的所有行都有效);内存地址除了块内地址外都作为内存tag(标记)存入cache中

组相联:将cache行分为几个组,再存入内存块时,用内存块号N对组的数量M进行模运算取余数,将内存块存入对应的组的任意一行中,并将内存地址中粗了块内地址和组号之外的部分作为内存tag存入内存中。

(3)cache的替换算法:

RAND、FIFO、LRU(记录未被访问次数)、LFU(记录访问次数)

后两种:如果参与替换算法的cache算法有行2n行那么需要n位作为替换算法的计数器

(4)cache中需要存储的内容

cache数据+有效位+[换算法位]+[脏位]

(5)cache的写策略:

命中时:

1⃣️写回法:只更改cache中的数据,在该cache被替换时再写回内存

2⃣️全写法:cache和内存同时改(需要写缓冲:缓和CPU与内存的速度矛盾)

写不命中时:

1⃣️写分配法:调该块入cache,更改cache

2⃣️非写分配法:只写入主存,不调入cache

总结:写回法和写分配法搭配使用,并且一般用于cache与内存之间;全写法和非写分派法搭配,用于各级cache之间。

 

稳扎稳打才能取得最后的胜利