计算机存储系统

  • 存储系统
  • 3.1 存储系统的定义
  • 3.2 命中率及 H = (H+n-1)/n 的计算
  • 3.3 高位交叉及低位交叉的设计及目的
  • 3.4 虚拟存储器的原理
  • 3.5 地址及变换(段式虚拟存储、页式虚拟存储、段页式虚拟存储)
  • 3.6 页表级数的计算(页式虚拟存储器)
  • 3.7 替换算法
  • 3.8 堆栈型替换算法及应用
  • 3.9 局部性原理
  • 3.10 Cache的原理
  • 3.11 虚拟存储器与Cache的比较
  • 3.12 Cache的地址及变换(前三种)


存储系统

       现代计算机系统以存储器为中心,区别于冯诺依曼计算机。在计算机运行过程中,存储器是各种信息存储和交换的中心

3.1 存储系统的定义
  • 两个或两个以上速度、容量和价格各不相同的存储器用硬件、软件、或软件与硬件相结合的方法连接起来成为一个存储系统。这个系统对应用程序员透明,并且,从应用程序员看,它是一个存储器,这个存储器的速度接近速度最快的那个存储器,存储容量与容量最大的那个存储器相等,单位容量的价格接近最便宜的那个存储器。
  • 在一般计算机系统中,主要有两种存储系统:
  • Cache存储系统:由Cache和主存储器构成
  • 主要目的:提高存储器速度;
  • 虚拟存储系统:由主存储器和磁盘存储器构成
  • 主要目的:扩大存储器容量
3.2 命中率及 H = (H+n-1)/n 的计算
命中率H:CPU欲访问的信息已在Cache中的比率
设一个程序执行期间,Cache的总命中次数为Nc,访问主存的总次数为Nm,则 H = Nc/(Nc+Nm)
缺失率 M = 1 - H

设Tc为命中时的Cache访问时间,Tm为未命中时的访问时间
Cache——主存吸引的平均访问时间Ta为
    Ta = HTc + (1-H)Tm
当命中率H → 1时,T → Tc.
存储系统的访问效率:e = Tc/(HTc + (1-H)Tm)
    
[例1]假设Cache的速度是主存的5倍,且Cache的命中率为95%,则采用Cache后 ,存储器性能提高多少(设Cache和主存同时被访问,若Cache命中则中断访问主存)?
设Cache的存取周期为t,则主存的存取周期为5t
Cache和主存同时访问,不命中时访问时间为5t
故系统的平均访问时间为Ta=0.95xt+0.05x5t=1.2t
则系统加速比为:5t : 1.2t ≈ 4.17倍
补充:存储系统访问效率(考虑访问性能与Cache相比有多接近):t/1.2t = 83.3%
    
若采用先访问Cache再访问主存的方式:
不命中时,访问Cache耗时为t,发现不命中后再访问主存耗时为5t,总耗时为6t,故系统的平均访问时间为
    Ta = 0.95xt + 0.05x6t = 1.25t
系统加速比:5t/1.25t = 4
练习:Cache的工作速度是主存的4倍,如果Cache的命中率为80%,则采用Cache后,能使整个存储系统获得的加速比是多少?
S = 1/[(1-0.8)+0.8/4] = 2.5

存储系统 hdfs s3_主存

[例2]假设T2=5T1,在命中率H为0.9和0.99两种情况下,分别计算存储系统的访问效率。
当H=0.9时,e1=1/(0.9+5(1-0.9))=0.72
当H=0.99时,e2=1/(0.99+5(1-0.99))=0.96
采用预取技术提高命中率
方法:不命中时,把M2存储器中相邻几个单元组成的一个数据块都取出来送入M1存储器中。
[例3]在一个Cache存储系统中,当Cache的块大小为一个字时,命中率H=0.8;假设数据的重复利用率为5,计算块大小为4个字时,Cache存储系统的命中率是多少?假设T2=5T1,分别计算访问效率。
解:n=4x5=20,采取预取技术之后,命中率提高到:
    H'=(H+n-1)/n=(0.8+20-1)/20=0.99
    当Cache的块大小为1个字时,H=0.8,访问效率为:
    e1 = 1/(0.8+5*(1-0.8))=0.55
    当Cache的块大小为4个字时,H=0.99,访问效率为:
    e2 = 1/(0.99+5*(1.0.99))=0.96

存储系统 hdfs s3_存储系统 hdfs s3_02

3.3 高位交叉及低位交叉的设计及目的
  • 高位交叉主要目的:扩大存储器容量
  • 优点:模块化结构好,用户可以很方便的扩充自己的主存
  • 缺点:与单一模块的主存系统相比,控制部件的数量增加了
  • 低位交叉主要目的:提高存储器访问速度
  • 优点:能够大幅提高主存速度
  • 缺点:有访问冲突问题

存储系统 hdfs s3_存储系统_03

3.4 虚拟存储器的原理

       把主存储器、磁盘存储器和虚拟存储器都划分成固定大小的页,主存储器的页称为实页,虚拟存储器中的页称为虚页

存储系统 hdfs s3_主存_04


三个地址空间:虚存、主存、磁盘,其中,CPU对应虚存空间,数据保存在主存和磁盘中

造成虚拟存储器速度降低的主要原因:
(1) 要访问主存储器必须先查段表或页表,
(2) 可能需要多级页表。

[例]一个页式虚拟存储器按地址编址,最多128个用户,每个用户最多要用2048页,每页4K字节。主存容量为64M字节,快表按地址访问,共32个存储字,快表地址经散列变换得到,为减少散列冲突,快表分两组,有两组独立的比较电路。(每小题2分,共10分)
1、写出用户虚地址和主存地址的格式,并标出各字段的长度;
2、计算散列变换的输入和输出位数;
3、每个相等比较电路的位数是多少;
4、快表每个存储字的总长度、各字段的长度各为多少;
5、画出多用户虚地址变换成主存地址的逻辑示意图。
(1) 虚拟地址:
		128 = 2^7   用户号U为7位
    	2048 = 2^11 虚页号P为11位
    	4K = 2^12   页内地址为12位
    主存地址:
    	实页p:64M/4K = 2^14
    	页内地址:12位同上
(2)散列变换的输入是:用户号U + 虚页号P = 18位
   快表按地址访问,共32个存储字,快表地址经散列变换得到:
   输出为:32 = 2^5 即5位
(3)可以看到相等比较电路:Pv多用户虚页号 = 用户号U + 虚页号P
   7 + 11 = 18位,所以比较电路为18位
(4)快表中需要存储两项内容:多用户虚页号和实页号。多用户虚页号为18位,实页号为14位,共有32位。

存储系统 hdfs s3_存储系统_05

3.5 地址及变换(段式虚拟存储、页式虚拟存储、段页式虚拟存储)

回顾操作系统存储管理部分

3.6 页表级数的计算(页式虚拟存储器)

存储系统 hdfs s3_其他_06

[例]在页式虚拟存储器中,为了减少页表占用主存空间,采用多级页表,假设虚存空间大小为2GB,页大小为64KB,页表每个存储字为16B,则页表的级数为多少?(5分)
(1)2GB = 2^31 B
(2)64KB = 2^16 B
(3)16B = 2^4 B
g = [(31-16)/(16-4)] = 2
3.7 替换算法

(1)随机算法(RAND random algorithm) 算法简单,容易实现。没有利用历史信息,没有反映程
序的局部性,命中率低。
(2)先进先出算法(FIFO first-in first-out algorithm) 比较容易实现,利用了历史信息,没有反映程序的局部性。 最先调入主存的页面,很可能也是经常要使用的页面。
(3)近期最少使用算法(LFU least frequently used algorithm) 既充分利用了历史信息,又反映了程序的局部性实现起来非常困难。
(4)最久没有使用算法(LRU least recently used algorithm) 把LRU算法的“多”与“少”简化成“有”与“无”,实现比较容易
(5)最优替换算法(OPT optimal replacement algorithm):是一种理想算法,仅用作评价其它页面替换算法好坏的标准在虚拟存储器中,实际上可能采用的只有FIFO和LRU两种算法

      [例]一个程序共有5个页面组成,程序执行过程中的页地址流如下:P1,P2,P1,P5,P4,P1,P3,P4,P2,P4
假设分配给这个程序的主存储器共有3个页面。给出FIFO、LRU、OPT 三种页面替换算法对这3页主存的使用情况。

FIFO

P

1

2

1

5

4

1

3

4

2

4

1

1

1

1

1*

4

4

4*

4*

2

2

2

2

2

2

2*

1

1

1

1*

4

3

5

5

5*

3

3

3

3*











页面命中率:H’ = 2/10 = 20%

LRU

P

1

2

1

5

4

1

3

4

2

4

1

1

1

1

1

1

1

1

1

2

2

2

2

2

2

4

4

4

4

4

4

3

5

5

5

3

3

3

3











页面命中率:H’ = 4/10 = 25%

OPT

P

1

2

1

5

4

1

3

4

2

4

1

1

1

1

1

1

1

3

3

3

3

2

2

2

2

2

2

2

2

2

2

3

5

4

4

4

4

4

4











页面命中率:H’ = 5/10=50%


在页式虚拟存储器中,一个程序由5个页面组成,在程序执行的过程中页面地址流如下:P4,P5,P3,P2,P5,P1,P3,P2,P3,P5,P1,P3

假定系统分配给这个程序的主存有3个页面,分析采用FIFO、LRU、OPT页面替换算法进行调度。(共8分)

(1) 画出主存页面调入、替换和命中的情况;(4分)

(2) 统计三种页面替换算法的页面命中率;(2分)

(3) 如果每次页面访问对该页面的存储单元访问1024次,访问存储单元的命中率是多少? (2分)

存储系统 hdfs s3_其他_07

3.8 堆栈型替换算法及应用

堆栈型算法的基本特点是:随着分配给程序的主存页面数增加,主存的命中率也提高,至少不下降。

LFU, LRU, OPT是堆栈型替换算法.应用:动态地为用户分配主存页数

影响主存命中率的主要因素:

  1. 程序在执行过程中的页地址流分布情况。
  2. 所采用的页面替换算法。
  3. 页面大小。
  4. 主存储器的容量。
  5. 所采用的页面调度算法。
3.9 局部性原理
  • CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中
int a[1000] = {0};
//空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的。
比如访问的数组元素a[2],接下来可能会接着访问元素a[1]或a[3],执行完这条指令之后,pc寄存器+1之后的地址指令将会被执行到。
//时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息。
int n = 1000;
for(int i=0;i<n;i++)
{
    a[i]=a[i]+2;
}
3.10 Cache的原理

Cache和主存都划分成相同大小的块。

存储系统 hdfs s3_存储系统 hdfs s3_08

3.11 虚拟存储器与Cache的比较
  • 目的:虚存增大容量;Cache提高速度;
  • 方法:虚存软硬结合;Cache全硬件;
  • 两级存储器速度比:虚存100000;Cache 3-10倍;
  • 单位大小:虚存1K - 16K; Cache 1-16字;
  • 等效容量:虚存为虚存空间;Cache为主存容量;
  • 透明性:虚存对应用程序员透明;Cache对系统和应用程序员都透明;
  • 不命中处理:虚存页面失效;Cache访问主存
3.12 Cache的地址及变换(前三种)
地址映射:
	假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache有8个Cache行,行长为64B。
		即Cache块,是Cache与主存之间传送数据的基本单位
计算Cache的总容量为:8 x 64B = 512B
每行或者每块的大小是64B,256MB/64B=4MB
在主存中的行数:4MB = 2^12KB = 2^22B,64B = 2^6B,进一步计算主存的地址位数为:22+6 = 28位,分配方式为 28 = 6 + log2(8) + 19
这里的log2(8) = 3位用来标识Cache块是那一块.

(1)空位随意放:全相联映射
    主存中的任意一块都可以映象到Cache中的任意一块。
    主存字块标记 + 字块内地址
 在Cache中需要额外的空间存放有效位(1位)和主存字块标记(22位)
(2)对号入座:直接映射
    主存中一块只能映象到Cache的一个特定的块中。
    主存字块地址 + Cache字块地址 + 字块内地址
 在Cache中需要额外的空间存放有效位(1位)和主存字块标记(19位)
(3)按号分组,组内随意放:组相联映射
    主存和Cache按同样大小划分成块,还按同样大小划分成组。从主存的组到Cache的组之间采用直接映象方式。在两个对应的组内部采用全相联映象方式。
    比如采用的是4组相联映射,4 = 2^2 需要2位来标记组号
    主存字块标记 + 组地址 + 地块内地址
 在Cache中需要额外的空间存放有效位(1位)和主存字块标记(20位)

存储系统 hdfs s3_存储系统 hdfs s3_09

直接映象的Cache的工作原理。
答:主存按Cache的块数分区,区内一一对应。