存储系统

7/6/2022 可恶的408

要拆线辣,吃好吃的辣

主存储器

SRAM和DRAM

Cache用SRAM和主存用DRAM分别是贵的便宜的,快的慢的,集成度低的高的,容量小的大的,功耗高的低的。都是易失性半导体存储器。ROM属于非易失性存储器。

SRAM时用双稳态触发器(六晶体管MOS)记忆信息,DRAM用三极管的上的栅极电容存储信息,需要刷新,通常电容上的信息只能维持1-2ms。

SRAM送地址行列同时送,DRAM分两次送(引脚也较少了)。

刷新分为集中刷新,一次性都刷新有死区;分散刷新,对每行的刷新分配到各个工作周期中,前半周期用于读写,后半周期用于刷新,增大了存储周期,但没有死区;异步刷新2ms除以行数,获得刷新间隔,没到这个间隔对一行进行刷新。

存储器芯片内部有存储体、I/O、地址移码、控制电路等。

算引脚数量记得读写信号和片选信号;

ROM

  1. 掩模式只读存储器Mask Read Only Memory
  2. 一次可编程只读存储器Programmable Read Only Memory
  3. 可擦除可编程只读存储器Erasable Programmable Read Only Memory
  4. Flash存储器
  5. 固态硬盘 Solid State Drives

主存组成

编制单位指具有相同地址的那些存储元件构成一个单位,可按字节,也可按字,通常采用字节编址。

为了减少DRAM芯片引脚数,采用地址引脚复用技术,行地址列地址通过相同的引脚分两次引入。

多模块存储器

一种空间并行技术

单体多姿存储器

存储器只有一个存储体,每个存储单元存储m个字,一次读出m个字。在一个读周期内能够取出m条指令,但转移指令和连续存放的操作数就不方便了

多体并行存储器

  1. 高位交叉编址

高位为体号,低位为体内地址。低位地址送到由高位确定的模块内进行译码,按顺序访问模块,不能提高存储器吞吐率

  1. 低位交叉编址

低位为体号,高位为体内地址,每个模块按“模m”编址,每个模块只能低地位地址模m与体号相等的数据。

这样就可以采取流水线的方式并行存取了,存取周期为T,传输周期为r,那么模块书m应该大于等于T/r。

主存与CPU的连接

连接原理

  1. 数据总线,位数与工作频率的乘积正比与传输速率
  2. 地址总线,位数决定寻址的最大内存空间
  3. 控制总线

扩容

  1. 位扩展法,地址端、片选端、读写控制端并联,数据端分别引出
  2. 字扩展法,地址高位为片选信号,低位为片内地址
  3. 字位同时扩展法

地址分配和片选

  1. 线选法,选择位为0的那个地方
  2. 译码片选择法

外存

平均存取时间,寻道时间(磁头移到磁道)+旋转延迟时间(磁头定位到扇区,平均为转一圈的一半)+传输时间(传输数据时间)

高速缓存

局部性原理

映射方式

  1. 直接映射

主存块号=主存地址/Cache行长

Cache行号=主存块号\%Cache行数

主存块号的低c位为装入cache的行号,其余的高m-c位位标记。

存在cache里的时标记、数据和一些辅助位,行号就不存了。

  1. 全相联映射

想放哪放哪,那就不用行号了,全都是标记。

  1. 组相联映射

将cache分组,组间使用直接映射,组内全相联映射。

在直接映射中的行号变为组号。

注意怎么算cache容量标记+辅助位+数据

替换算法

  1. RAND
  2. FIFO
  3. LRU
  4. LFU

写策略

  • 写命中
  1. 全写法(全部都写)
  2. 回写法(回去再写)
  • 写不命中
  1. 写分配法,从主存中调入cache,试图利用空间局限性
  2. 非写分配法,不调入cache

通常全写法和非写分配法合用,回写法和写分配法合用。

虚拟存储器

页式虚拟存储器

大概的访问流程

  1. 找TLB,在获取物理地址
  2. 不在TLB,访问页表,在主存,更新TLB,获取物理地址
  3. 不在页表,页表有空位,从外存调入,无空位置换,获取物理地址
  4. 有了物理地址找Cache,找到就访问
  5. 没找到,如果有个空位调入,没空位置换目设置标记和有效位等,访问数据

页表

长度固定,用页表,行号代表虚拟页号,获得物理页号与业内地址组成物理地址

快表

感觉就是页表的cache。

段式虚拟存储器

虚拟地址分为段号和段内地址,段表力有段首址,装入位,段长、

按逻辑分段

段页式虚拟存储器

分段,段内分页。每个程序一个段表,每段一个页表。