第7章 存储系统
7.1 存储系统的基本知识
7.1.1 存储系统的层次结构
计算机系统结构设计中关键的问题之一 :
- 如何以合理的价格,设计容量和速度都满足计算机系统要求的存储器系统?
要求:容量大、速度快、价格低
解决方法:采用多种存储器技术,构成多级存储层次结构。
-
程序访问的
局部性原理
:对于绝大多数程序来说,程序所访问的指令和数据在地址上不是均匀分布的,而是相对簇聚的。
程序访问的局部性包含两个方面 :
- 时间局部性:程序马上将要用到的信息很可能就是现在正在使用的信息。
- 空间局部性:程序马上将要用到的信息很可能与现在正在使用的信息在存储空间上是相邻的。
-
存储系统的
多级层次结构
假设第 i i i个存储器 M i M_{i} Mi的访问时间为 T i T_{i} Ti,容量为 S i S_{i} Si,平均每位价格为 C i C_{i} Ci
整个存储系统要达到的目标:
- 从CPU来看,该存储系统的速度接近于 M 1 M_{1} M1的,而容量和每位价格都接近于 M n M_{n} Mn的。
- 存储器越靠近CPU,则CPU对它的访问频度越高,而且最好大多数的访问都能在 M 1 M_{1} M1完成。
7.1.2 存储层次的性能参数
出于讨论方便,仅考虑两级存储层次 M 1 M_{1} M1和 M 2 M_{2} M2
- M 1 M_{1} M1的参数: S 1 S_{1} S1, T 1 T_{1} T1, C 1 C_{1} C1
- M 2 M_{2} M2的参数: S 2 S_{2} S2, T 2 T_{2} T2, C 2 C_{2} C2
-
存储容量
S
一般来说,整个存储系统的容量即是第二级存储器 M 2 M_{2} M2的容量,即 S = S 2 S = S_{2} S=S2。
-
每位价格
C
C = C 1 S 1 + C 2 S 2 S 1 + S 2 当 S 1 < < S 2 时 , C ≈ C 2 C = \frac{C_{1}S_{1} + C_{2}S_{2}}{S_{1} + S_{2}}\\ \text{当} S_{1} << S_{2} \text{时}, C \approx C_{2} C=S1+S2C1S1+C2S2当S1<<S2时,C≈C2
-
命中率
H
和不命中率F
命中率:CPU访问存储系统时,在 M 1 M_{1} M1中找到所需信息的概率。
H = N 1 N 1 + N 2 H = \frac{N_{1}}{N_{1} + N_{2}} H=N1+N2N1
其中:- N 1 N_{1} N1 ── 访问 M 1 M_{1} M1的次数
- N 2 N_{2} N2 ── 访问 M 2 M_{2} M2的次数
不命中率 : F = 1 - H F=1-H F=1-H
-
平均访问时间 T A T_{A} TA
T A = H T 1 + ( 1 - H ) ( T 1 + T M ) = T 1 + ( 1 - H ) T M = h 1 t 1 + ( 1 − h 1 ) h 2 t 2 + ( 1 − h 1 ) ( 1 − h 2 ) h 3 t 3 . . . . \begin{aligned} T_{A} &= HT_{1}+(1-H)(T_{1}+T_{M}) \\ &= T_{1}+(1-H)T_{M} \\ &= h_{1}t_{1}+(1-h_{1})h_{2}t_{2}+(1-h_{1})(1-h_{2})h_{3}t_{3} .... \end{aligned} TA=HT1+(1-H)(T1+TM)=T1+(1-H)TM=h1t1+(1−h1)h2t2+(1−h1)(1−h2)h3t3....
分两种情况来考虑CPU的一次访存:- 当命中时,访问时间即为 T 1 T_{1} T1(命中时间)
- 当不命中时,情况比较复杂。
T 2 + T B + T 1 = T 1 + T M T M = T 2 + T B \begin{aligned} T_{2}+T_{B}+T_{1}\ &=\ T_{1}+T_{M} \\ T_{M} &= T_{2} + T_{B} \end{aligned} T2+TB+T1 TM= T1+TM=T2+TB
其中:
- T M T_{M} TM:不命中开销,从向 M 2 M_{2} M2发出访问请求到把整个数据块调入 M 1 M_{1} M1中所需的时间。
- T B T_{B} TB:传送一个信息块所需的时间。
例题 存储器层次结构的设计
存储系统参数表如下:
存储器层次 存取时间 容量 成本/KB 高速缓存 t 1 = 25 n s t_{1} = 25ns t1=25ns s 1 = 512 K B s_{1} = 512KB s1=512KB $c_{1} = $1.25$ 主存 t 1 t_{1} t1未知 s 1 = 32 M B s_{1} = 32MB s1=32MB $c_{2} = $0.2$ 磁盘阵列 t 3 = 4 n s t_{3} = 4ns t3=4ns s 3 s_{3} s3未知 $c_{3} = $0.0002$ 利用下列存储器特性来设计一个3层的层次结构存储器。设计目标是使 T e f f = 10.04 μ s T_{eff} =10.04μs Teff=10.04μs,而高速缓存命中率 h 1 = 0.98 h_{1}=0.98 h1=0.98,主存命中率 h 2 = 0.9 h_{2}=0.9 h2=0.9。同时,存储器总成本上限是$15,000。
解:
总成本为 C = c 1 s 1 + c 2 s 2 + c 3 s 3 < 15 , 000 C = c_{1}s_{1}+c_{2}s_{2}+c_{3}s_{3} < 15,000 C=c1s1+c2s2+c3s3<15,000
- 由上参数可得在不超过预算的前提下,磁盘的最大容量为 s 3 = 39.8 G B s_{3} = 39.8GB s3=39.8GB。
T e f f = h 1 t 1 + ( 1 − h 1 ) h 2 t 2 + ( 1 − h 1 ) ( 1 − h 2 ) h 3 t 3 T_{eff} = h_{1}t_{1}+(1-h_{1})h_{2}t_{2}+(1-h_{1})(1-h_{2})h_{3}t_{3} Teff=h1t1+(1−h1)h2t2+(1−h1)(1−h2)h3t3
- 代入已知量,可以求出:主存存取时间为 t 2 = 903 n s t_{2} = 903ns t2=903ns
7.1.3 三级存储系统
可以看成是由
“Cache—主存”
层次和“主存—辅存”
层次构成的系统。
三级存储系统
- Cache(高速缓冲存储器)
- 主存储器
- 磁盘存储器(辅存)
三级存储系统的作用
- 从主存的角度来看
“Cache-主存”
层次:弥补主存速度的不足“主存-辅存”
层次: 弥补主存容量的不足
“Cache-主存”与“主存-辅存”层次的区别
7.1.4 存储层次的四个问题
映象规则
:当把一个块调入高一层(靠近CPU)存储器时,可以放在哪些位置上?查找算法
:当所要访问的块在高一层存储器中时,如何找到该块?替换算法
:当发生不命中时,应替换哪一块?写策略
:当进行写访问时,应进行哪些操作?