存储系统
存储系统¶
存储器概述¶
- 随机存储器(RAM,Random Access Memory):读写任何一个存储单元所需时间都相同,与存储单元所在的物理位置无关。
- 顺序存储器(SAM, Sequential Access Memory):读写一个存储单元所需时间取决与存储单元所在的物理位置。
- 直接存储器(DAM,Direct Access Memory):先直接选取信息所在区域,然后按顺序方式选取,既有随机存取特性,也有顺序存取特性。
- RAM和ROM都是随机存取方式。
2和3这种存储器我们称为串行访问存储器,即读写某个存储单元所需时间与存储单元的物理位置有关。

主存储器¶
主存储器的基本组成¶
- \(\overline{\text{CS}}\):Chip Select,片选信号,选择本次给哪个存储芯片通电。
- 引脚数目:地址线数目 + 数据线数目 + 片选线(1) + 读\写控制线(1或2)+ 供电引脚(1) + 接地引脚(1)
- **N * M 位存储芯片 **:N个存储单元、M位的存储字长



SRAM和DRAM¶
- 此处的刷新指的是给定期电容充电,由于电容的特性电子在2ms内就会减少或消失,因此需要定期刷新来保证数据不丢。
- SDRAM 就是加了同步时钟、支持突发流水线、带模式寄存器的升级版 DRAM,核心目的:提速、简化控制器、优化连续读写性能。
- DRAM的刷新按行进行。
- 半导体RAM分为DRAM和SRAM。
- SDRAM的行缓冲器通常用SRAM实现。


弄成二维的目的是减少集成难度,若有MAR有二十位,不进行二维变换的话,要集成2^20^这么多线,若是变成行列的话每一边只需要处理10位,也就是集成2^10^也就是1024条线。
传统DRAM芯片与CPU采用异步方式交换数据。

每次刷新是读出原存内容,然后通过一个刷新放大器后又重新存回存储单元,这里的读写合并成了一个内部连续流水线操作,时间正好差不多是一个存取周期。

只读存储器¶
- MROM:Mask Read-Only Memory
- PROM:Programmable Read-Only Memory(可编程的)
- EPROM:Erasable Programmable Read-Only Memory
- EEPROM:Electrically 同上。可以擦特定的字
- UVEPROM(Ultravioler rays)要擦只能擦所有信息
- CD-ROM。仅供读取,不能修改的光盘。
- 逻辑上,主存由RAM + ROM组成,且二者常统一编址,也就是说主板上的βios芯片也是也是主存的一部分。

双端口RAM和多模块存储器¶
双端口RAM已从408大纲中删除


实际上单体多字这种存储模式速度和多模块是差不多的,但是灵活性更差。

主存储器与CPU的连接¶





简单来说,使能端的作用就是控制译码器什么时候正常工作,如上图,只有当三个使能端信号依次为 1、0、0 时译码器才会输出有效信号(对应编码通道输出 0,其余为 1),不满足该条件则所有输出全为 1。

通常译码器的使能端会接入 \(\overline{\text{MREQ}}\)(存储器请求信号):该信号用于区分 CPU 操作对象,仅当 CPU 发起主存访问、\(\overline{\text{MREQ}}\) 有效时,译码器才会产生存储芯片片选信号;若 CPU 访问 I/O 外设,\(\overline{\text{MREQ}}\) 无效,译码器关闭,不会选中内存芯片。芯片被片选后,再配合读写控制信号 \(\overline{\text{RD}}\) / \(\overline{\text{WE}}\) 完成数据读或写。
对于左下角的图,第一行之所以这么画是因为传输地址时有0有1所以有高电平也有低电平,因此有上也有下。第二行对于片选信号,因为只有0(低电平)时有效,1(高电平)无效所以这么画。第三行和第一行同理。
外部存储器¶
磁盘存储器¶
- RAID(Redundant Array of Inexpensive Disk, 廉价冗余磁盘阵列)
- RAID 0类似低地址交叉编址。RAID 0是无校验的。

固态硬盘SSD¶
- SSD中的页和块类比磁盘的扇区和磁道。

高速缓冲存储器¶
Cache的基本原理¶

Cache和主存的映射方式¶

Cache替换算法¶
- 抖动(或颠簸)现象:频繁的换入换出现象(刚被替换的块很快又被调入)
- LRU(Least Recently Used)算法若被频繁访问的主存块数量 > Cache行数量,则有可能发生“抖动”现象。LRU的计数器数值范围只会在0 ~ 2^n^内(2^n^为Cache块的总数)则计数器只需要n位。
- LFU(Least Frequently Used)LFU的计数器数值范围0~不确定,可能会很大,计数器长度不确定。
- 这里的计数器即为替换控制位。

Cache写策略¶
- 脏位:表示是否被修改过

虚拟存储器¶

课后习题笔记¶
-
存取时间是指从存储器读出或写入一次信息所需要的平均时间;存取周期是指连续两次访问存储器之间所必需的最短时间间隔。
-
相联存储器(CAM, AM)是按照内容指定方式和地址指定方式相结合进行寻址的存储器。
-
在考研存储器的“刷新”计算题里,只要题目没有特别说“轮流刷新”或“分组刷新”,默认就是所有芯片同时刷新同一行。
-
DRAM(动态随机存取存储器)默认采用地址线复用技术
-
Burst、总线宽度与交叉编址
-
单次传输(对齐块)
-
总线宽度 \(64\) 位 \(= 8\) 字节,一次只读 \(8\) 字节,地址必须 \(8\) 字节对齐。
-
单次读取固定范围:\(8k \sim 8k+7\)。
-
Burst(突发)
-
作用:发 1 次起始地址,连续读 多个 \(8\) 字节块。
-
本质:减少发地址次数,不改变“每次搬 \(8\) 字节”的物理限制。
-
非突发:发 \(N\) 次地址,搬 \(N\) 次数据。
Burst:发 \(1\) 次地址,搬 \(N\) 次数据。 -
多模块交叉编址
-
将连续地址分配到 不同物理存储体(Bank)。
-
目的:让 Burst 连续访问时,多个体并行工作,避免单模块因预充电而插入等待周期。
-
实际物理的 Cache 芯片容量 = 数据容量(存储数据本身) + 标记容量(存储 Tag + 各种替换控制位)
组号(Index)和偏移量(Offset)来源于访问地址本身,不占Cache存储空间,也不记录在Cache行中。

-
替换控制位并不存放在数据阵列(Data Array)里,而是存放在 Tag 阵列(标记阵列) 里。因为每一次访问 Cache,硬件都需要同时读出 Tag、有效位、脏位、引用位,统一进行比较和决策。
-
FIFO 的“替换信息”是一个全局指针(循环计数器),它不针对每个行,但它是存在的。指向的是当前最“老”的那个。
-
主存块太小,不能很好地利用空间局限性,从而导致缺失率变高;但是主存块太大也会使得Cache行数变少,即Cache中可以存放主存块的位置变少,从而也会降低命中率。因此,主存块大小应该适中,通常为几十字节到上百字节。
-
有效位算入“控制位”的范畴,但不属于“替换算法的决策位”,也不属于“一致性维护的专用状态位”。
- 快表采用的是相联存储器件,可以按照内容进行查找,因此比慢表快。
12.

- 主存地址空间是CPU理论能够寻址的最大范围,由地址总线宽度或MAR位数决定;主存储器大小这是主板上实际安装了多少容量的内存芯片。考虑到存储器扩展的需要,MAR应保证能访问到整个主存地址空间。
- 因为Cache中存了一部分主存的内容,因此有重复,Cache的容量和主存容量不能直接叠加来得出存储系统的容量。