Chapter 3. 存储系统
公式与性质
-
存储速度:数据传输速率(每秒传送信息的位数)= 数据的宽度 / 存取周期 。
- 存取时间(T_a):启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间。
- 存取周期(T_m):存储器进行一次完整的读/写操作所需的全部时间,即连续两次独立访问存储器操作(读或写操作)之间所需的最小时间间隔。
- 主存带宽(B_m):也叫数据传输速率,表示每秒从主存进出信息的最大数量。
-
主存和
Cache
之间的数据调动是由硬件自动完成的,对所有程序员透明。主存和辅存之间的数据调动是由硬件和操作系统共同完成的,对应用程序员是透明的。 -
RAID
RAID 0
:无冗余无镜像的磁盘阵列。RAID 1
:镜像磁盘阵列(两个磁盘同时读/写,互为备份,容量减半)。
-
Cache
的一致性问题- 写操作命中
- 全写法:同时把数据写入
Cache
和主存。 - 回写法:只把数据写入
Cache
,而不立即写入主存,只有当此块被替换时才写回主存。
- 全写法:同时把数据写入
- 写操作不命中
- 写分配法:更新主存单元,然后把这个主存块调入
Cache
。通常与回写法合用。 - 非写分配法:只更新主存单元。通常与全写法合用。
- 写分配法:更新主存单元,然后把这个主存块调入
- 写操作命中
-
特点 SRAM
DRAM
存储信息 双稳态触发器 电容 破坏性读出 否 是 需要刷新 否 是 送行列地址 同时 分两次送(复用) 运行速度 快 慢 集成度 低 高 存储成本 高 低 主要用途 高速缓存 主存 -
SDRAM
是DRAM
的一种,但与传统DRAM
不同,与CPU
采用同步方式交换数据,CPU
在其读/写完成前可进行其他操作,支持突发传输。 -
DRAM
的刷新方式- 集中刷新:在一个刷新周期内利用一段固定的时间,依次对所有行逐一刷新,在此期间停止对存储器的读/写操作(称访存死区)。
- 分散刷新:将一个存储器系统的工作周期分为两部分:前半段正常读/写,后半段用于刷新。
- 异步刷新:设共有 n 行,刷新周期为 T ,每隔 \frac n T 刷新一行。
-
TLB
命中则Page
一定命中,不一定在Cache
中;TLB
和Page
缺失时Cache
一定缺失。
概念
-
Cache
的功能全部由硬件实现。 -
Cache
只是主存的一个副本,不算在主存空间内。 -
存储器垃圾回收时,内存被视为一张有向图,不能作为根节点的是堆里的变量。
堆是动态分配内存的区域,可能被回收的目标不能作为根节点。
-
提高程序的局部性,就能提高缓存命中率,从而优化性能。
无论缓存如何小,程序局部性提高了就能优化性能。
-
虚拟页不能从任意的虚拟地址开始划分。
虚拟地址有限。
-
多级页表最能节省内存空间。
单级页表在进程创建时为可能用到的所有的页表项分配空间,而多级页表可以在使用时根据内存的占用为进程分配页表空间,可以实现按需分配而不是预先全部分配。除此之外,多级页表的页表空间采用离散分配的方式,与连续分配相比可以很大程度上提高内存利用率。
-
虚拟内存发生缺页时,缺页中断由
Memory Management Unit, MMU
触发。 -
虚拟内存系统中虚拟地址与物理地址之间的关系是多对一。
一个物理地址可能由多个虚拟地址指向,但一个虚拟地址只能对应一个物理地址。
考点
-
对于某存储芯片,假定其动态刷新间隔为 2ms ,读写周期和刷新周期均为 0.5\mu s ,该芯片中一共包含 128 行,每个刷新周期可以完成 1 行存储单元的刷新,如果该芯片采用异步刷新方式工作,则其读写周期和刷新周期可以安排为 30 次读写周期后,安排 1 次刷新操作 。
一个刷新周期 2ms 内可以刷新和读写一共 \frac {2ms}{0.5\mu s}= 4000 次,在一个刷新周期内需要刷新 128 行,故读写周期与刷新周期的比例为 (4000-128):128=30:1 。
-
Dynamic Random Access Memory, DRAM
芯片默认行列地址复用。 -
Random Access Memory, RAM
一定是易失性存储器;Read Only Memory, ROM
一定是非易失性存储器。 -
Cache
是由Static Random Access Memory, SRAM
构成的高速缓冲存储器。 -
闪存存储元由
Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET, MOS
管组成,是一种半导体存储器,用MOS
管的浮栅上有无电荷来存储信息,写入时必须先擦除原有信息,故写比读慢。 -
某一
DRAM
芯片采用地址复用技术,其容量为 1MB ,按字节编址。除电源和接地端外,该芯片的引脚数最少是 22(读/写控制线两根)。1MB=2^{20}B ,行列地址复用,故有 \frac {20} 2 = 10 根地址线,按字节编址, 8 根数据线,2 根读/写控制线,2 根行选通和列选通线。
-
DRAM
芯片中存储阵列的行数为 r ,列数为 c ,若要使其地址引脚数最少,并尽量减少刷新开销,则 r \le c ,且 r 与 c 的差值尽可能小。 -
交叉存储器实质上是一种模块式存储器,它能并行执行多个独立的读写操作。
-
某计算机主存按字节编址,由 4 个 64M \times 8 位的
DRAM
芯片采用交叉编址方式构成,并与宽度为 32 位的存储器总线相连,主存每次最多读/写 32 位数据。若double
型变量x
的主存地址为804 001AH
,则读取x
需要的存储周期是 3 。主存每次最多读/写 32 位数据,说明是同时启动方式,一个周期可以读/写一行;与宽度为 32 位的存储器总线相连,类似于位扩展,只是每 8 位都有独立地址,可推出低位交叉编址,故
804 001AH
的最低两位是存储器编号10B
为 3,故访问 8B 的double
型变量需要访问 3 行, 3 周期。行数 00
01
10
11
\cdots n \checkmark \checkmark n+1 \checkmark \checkmark \checkmark \checkmark n+2 \checkmark \checkmark \cdots -
m 体交叉编址的轮流启动方式:每 \frac 1 m 个周期就启动一个存储器。
-
对于 m 体交叉编址,模块序号 = 访存地址 % m ;判断访存冲突的规则:给定的访存地址在相邻的 m 次访问中出现在同一个存储模块内。
-
某 16 位的计算机 16 位、地址线 24 位,内存按字节编址。选用的某型
SRAM
芯片上有数据线 4 位、地址线 14 位。现希望构成532 0000H - 532 FFFFH
的内存区域,共需要 8 片该类型的SRAM
芯片。题目问的是构成该内存区域,故数据线 16 位、地址线 24 位为干扰信息;实际上题目给出内存按字节编址,则位扩展的倍数为 8 \div 4=2 ,内存区域的大小为 5320000H - 532FFFFH + 1 = 10000H = 16 ^4 B = 2^{16}B ,按字节编址故需要 16 位地址位,则字扩展的倍数为 2^{16 -14}=4 ,故需要 2\times 4=8 片。
-
若片选地址为
1010
时,选定某 16k \times 8 的存储芯片工作,则该芯片在存储器中的首地址和末地址分别为2 8000H
,2 BFFFFH
。不能看片选地址是
1010
就想当然是1010 0000 ....
~1010 1111 ....
。
16k \times 8 的存储芯片的容量为 2^{14}B ,故有 14 位地址,则首地址为10 1000 0000 0000
(2 8000H
),末地址为10 1011 1111 1111
(2BFFFH
)。 -
MAR
的位数与主存地址空间的大小有关,而与单个存储器或芯片无关。 -
磁盘的平均(旋转)等待时间为旋转一圈的时间的一半。
-
若磁盘转速为 7200\ r/min ,平均寻道时间为 8ms ,每个磁道包含 1000 个扇区,则访问一个扇区的平均存取时间大约是 12.2ms 。
平均旋转等待时间 = \frac 1 2 \times \frac 1 {7200 \div 60} \approx 4.17ms ,传输时间 = \frac 1 {120} \times \frac 1 {1000} \approx 0.01ms ,8 + 4.17 + 0.01 \approx 12.2ms 。
-
有如下
C
语言程序段:for (k = 0; k < 1000; k ++) a[k] = a[k] + 32;
若数组
a
和变量k
均为int
型,int
型数据占 4B ,数据Cache
采用直接映射方式,数据区大小为 1KB 、块大小为 16B ,该程序段执行前Cache
为空,则该程序段执行过程中访问数组a
的Cache
缺失率约为 12.5\% 。Cache
中每一块能存放 \frac {16B}{4B} = 4 个int
型变量。对于a[k] = a[k] + 32
,共对a[k]
进行了两次操作,第一次读取,第二次将新值写入。在对 4 个变量的 8 次操作中,只有第一次为Cache
缺失,故缺失率约为 12.5\% 。 -
主存与
Cache
间采用全相联映射方式,Cache
容量为 4MB ,分为 4 块,每块 1MB ,主存容量 256MB 。若主存读/写时间为 30ns ,Cache
的读/写时间为 3ns ,平均读/写时间为 3.27ns ,则Cache
的命中率为 99\% 。设命中率为 x ,则 3x+(3+30)(1-x)=3.27 , x = 0.99 。
Cache
不命中时,所需时间是主存和Cache
读/写时间之和。 -
若计算机主存地址为 32 位,按字节编址,某
Cache
的数据区容量为 32KB ,主存块大小为 64B ,采用 8 路组相联映射方式,则该Cache
中比较器的个数为 8 ,位数为 20 。n 路组相联映射的比较器个数为 n 。
主存块大小为 64B ,块内地址 6 位;Cache
中总共有 \frac {32KB}{64B} =2^9 块,即 \frac {2^9}{8}=2^6 个分组, 组号 6 位;比较器的位数就是标记位的位数,组相联映射的地址结构为|标记位|组号|块内地址|
,标记位的个数为 32-6-6=20 。 -
假定主存按字节编址,
Cache
共有 64 行,采用直接映射方式,主存块大小为 32B ,所有编号都从 0 开始,则主存第 2593 号单元所在主存块对应的Cache
行号是 17 。行号 6 位,块内地址 5 位,则
2593 = 0...01 010001 00001 17 1
-
缺页是在地址转换时
CPU
检测到的一种异常,缺页处理程序由操作系统提供。