这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战
考研倒计时:28天
存储系统
主要分为三大部分:存储器相关的知识、Cache高速缓冲存储器、虚拟存储器。
存储器相关的知识
知道存储器的分类、层次化结构(Cache-主存-辅存)、SRAM和DRAM、主存与CPU的连接(会计算位扩展、字扩展、字位扩展以及片选)、双口RAM、最后就是比较重要的多模块存储器。
先来一些需要注意的概念:
- 按存取方式分随机存储器、只读存储器、串行访问存储器。注意串行访问存储器需要按物理地址先后顺序寻址,包括顺序存取存储器(磁带)和直接存取存储器(磁盘和光盘)。
- 随机存储器存取时间和存储单元的物理位置无关,顺序存取存储器存取时间和物理位置有关。
- 存取周期 > 存取时间
- 数据传输率的M是$10^6$,二进制的用于存储容量计算。
- 主存和辅存数据调动是硬件和操作系统完成的,对应用程序员透明;主存和Cache之间是硬件主动完成的,对所有程序员透明。
- 会计算一些性能指标,效率,平均访问时间等
- 主存储器由DRAM(电容的电荷)实现,靠处理器的Cache由SRAM(MOS管)实现,DRAM需要刷新,主要有集中刷新(有死区),分散刷新(没有死区)、异步刷新。DRAM还要注意地址复用的特性。
- 双端口RAM,两个端口地址不相同时,读写操作一定不冲突。
综合例题
用16K×8位DRAM芯片构成64K×32位存储器(假设DRAM芯片为128行×128列,刷新周期为2ms),要求:
(1)画出该存储器的组成逻辑框图。
(2)设存储器读/写周期为0.5us,CPU在1us内至少要访问一次。试问采用哪种刷新方式比较合理?两次刷新的最大时间间隔是多少?对全部存储单元刷新一遍所需的实际刷新时间是多少?
(1)(64K * 32位)/(16K8位)=4 * 4=16片
4片16K * 8位的芯片采用位扩展方式连接,扩展为16K * 32位,
4组16K * 32位采用字扩展方式连接,扩展为64K * 32位的存储器
地址分配与片选逻辑
(2)假设16K * 8位的DRAM芯片采用128行128列的存储元矩阵。
- 若采用集中式刷新方式,则刷新一次所需的时间为128 * 0.5us=64us,在这期间不能进行读写操作,这显然与题中所述CPU在1us内至少要访问一次相违背,因此无法采用集中刷新方式;
- 若采用分散式刷新,则每读/写一次刷新一次,使得读/写周期增加到1us,即在1us的时间内CPU只能访存一次,也不太合理。
- 故采用异步刷新方式,即利用最大刷新间隔。假设最大刷新间隔为2ms,则两次刷新的最大时间间隔为:2ms/128行=15.6us,可取刷新周期为15us,则对全部存储单元刷新一遍所需的实际刷新时间为(15us+0.5us)*128=1.98ms
多模块存储器:单体多字存储器和多体并行存储器。
对于多体并行存储器有高位交叉编址(顺序方式)和低位交叉编址(交叉方式)。
比较爱考的是交叉方式。
存储器交叉模块数
连续存取m个字的时间:
Cache
首先是三种方式:直接映射、组相联映射、全相联
替换算法:随机算法、先进先出算法、近期最少使用LRU
写策略:全写法、写回法、写分配法、非写分配法
cache三个方面的内容需熟练掌握,具体内容不进行赘述。
考察点利用以上的信息去计算cache容量:标记项+数据项
在一个程序执行期间,设Nc表示cache完成存取的总次数,Nm表示主存完成存取的总次数,h定义为**命中率**,则有 h=Nc/(Nc+Nm)
命中率h越接近1越好
若tc表示命中时的cache访问时间,tm表示未命中时的主存访问时间,1-h表示未命中率,则cache/主存系统的**平均访问时间ta**为
ta=h*tc+(1-h) tm
ta越接近tc越好(即tc/ta→1)
设**r**=tm/tc表示主存慢于cache的倍率,e表示**访问效率**,则有:e=tc/ta=1/(h+(1-h)*r)=1/(r+(1-r)*h)
虚拟存储器
这里内容和操作系统的内容差不多,就不再赘述。
提一下虚拟存储器和Cache如何结合考察。
图片来源西红柿炒自己~
这张图很好的将操作系统和计算机组成的存储这方面的内容进行了结合。
- TLB在Cache中,Page在主存中,TLB是Cache一个很小的副本
- Cache命中 :意味着虚拟存储器访存流程进入了最后一步——执行Cache的映射操作,则所在页面必然已调入主存 → Page必然命中,而TLB是位于Cache内的Page小副本,故不一定命中
- Cache未命中,与TLB、Page是否命中无关
- TLB命中,Page必然命中
- Page命中,TLB不一定命中
- Page不命中,Cache不命中
部分内容待补充完善~
如有误,请多指正!