3.1 什么是存储系统?对于一个由两个存储器M1和M2构成的存储系统,设M1的命中率为h,两个存储器的存储容量分别为s1和s2,访问速度分别为t1和t2每千字节的价格分别为c1和c2。

(1)在什么条件下,整个存储系统的每千字节平均价格会接近于c2?

(2)写出这个存储系统的等效访问时间ta的表达式。

(3)假设存储系统访问效率e=t1/ta,两个存储器的速度比r=t2/t1。试以速度比r和命中率h不表示访问速度效率e。

(4)分别画出r=5、20、100时,访问效率e和命中率h的关系图。

(5)如果r=100,为了使访问访问效率e>0.95,要求命中率h是多少?

(6)对于(5)所要求的命中率实际上很难达到。假设实际的命中率只能达到0.96。现采用一种缓冲技术来解决这个问题。当访问M1不命中时,把包括被访问数据在内的一个数据块都从M2取到M1中,并假设被取到M1中的每个数据平均可以被重复访问5次。请设计缓冲尝试(即每次从M2取到M1中的数据块的大小)。

解:存储系统是两个或两个以上速度、容量和价格各不相同的存储器用硬件、软件、或软件与硬件相结合的方法连接起来成为一个存储系统。

解:

p_w_picpath

(1)平均价格:

  C=c1S1+c2S2/c1+c2  (/s2)

    lim s1/s2=0;

s2>>s1

(2)访问时间包括两部分;命中和非命中

ta = h*t1+(1-h)*t2

(3)e=t1/ta

   =t1/h*t1+(1-h)*t2

   =1/h+(1-h)*(1-h)*t2/t1

   =e = 1/[h+(1-h)r]

(4)XX

(5)

 1/[h+(1-h)r]>0.95

  r=100

(6)设缓冲深度是A;

n=5A;

h=0.96,h’=99.94%;

   h’=(h+n-1)/h;

 可以这么理解:相当于连续流水工作, 每次提取是h+5A-1;

3.9 一个页式虚拟存储器的虚存空间大小为4GB,页面大小为4KB,每个页表存储字要占用4个字节。

(1)计算这个页式虚拟存储器需要采用几级页表?

(2)如果要求页表所占总的主存页面数量最小,请分配每一级页表的实际存储容量各为多少字节?

(3)页表的哪些部分必须存放在主存中?哪些可以放在辅存中?

(1) 两级页表g=(log2Nv- log2Np)/(log2Np- log2Nd)= (log24G- log24K)/(log24K- log24) (32-12)/(12-2)=(20/10)=2

(2)一级页表:1 个;二级页表:1024 个;

(3)一级页表在主存当中,二级页表只有部分在主存,大部分在辅存当中。

3.12 一个有快表和慢表的页式虚拟存储器,最多有64个用户,每个用户最多要用1024个页面,每页4K字节,主存容量8M字节。

(1)写出多用户虚地址的格式,并标出各字段的长度。

(2)写出主存地址的格式,并标出各字段的长度。

(3)快表的字长为多少位?分几个字段?各字段的长度为多少位?

(4)慢表的容量是多少个存储字?每个存储字的长度为多少位?

(5)画出多用户的虚地址经快表或慢表变换成主存实地址的逻辑示意图。

解:

p_w_picpath

(1)

1)用户号:6 位,虚页号:10 位,页内偏移地址:12 位    

6位

10位

12位

用户号U

虚页号P

页内偏移D


p_w_picpath

实页后:加 1位的标识序列号:

实页号:11 位,页内偏移地址:12 位;    

11位

12位

实页号P

页内偏移D


(3)快表字长:27 位;其中,多用户虚页号:16 位,实页号:11 位    

16位

11位

多用户虚页号P

实页号P





慢表和快表是同一个同样的关键容量是(2^(6+10))=64K;

每个字长:装入位1 位+实页号11 位=12

为了记录虚页号与实页号之间的对应关系,需采用内页表(慢表)来记录虚页号与实页号之间的对应关系,以及虚页是否已装入主存等信息。若装入位为“1”,表示对应的虚页已装入主存中的某个实页位置,若装入位为“0”,表示对应的虚页未装入主存。

3.13 一个虚拟存储器按字节编址,最多有256个用户,每个用户最多要用4096页,每页1K字节。主存容量16M字节,快表按地址访问,共32个存储字,快表地址码经散列变换得到,为减少散列冲突,快表分为两组,有两套独立的相等比较电路。

(1)写出多用户虚地址和主存地址的格式,并标出各字段的长度。

(2)散列变换部件的输入位数和输出位数各为什么?

(3)每个相等比较电路的位数各为多少?

(4)快表每个存储字的总长度为多少位?分哪几个字段?各字段的长度为多少位?

(5)画出多用户虚地址经快表变换成主存地址的逻辑示意图。

解:  

(1)多用户虚地址:用户号-8位;虚页号-12位;页内偏移地址-10位;

实地址格式:实页号-14位;页内偏移-10位;

问题实质:(用户号-8位;虚页号-12位)->(实页号:14位)

(2) 输入位:20=8+12;输出位 :5;

(3) 相等比较电路的位数:20位;

(4) 快表存储字长度:8+12+14=68位,每组分为:多用户虚页号:20位;实页号:14位;注意:有2 套独立的比较电路。

clip_p_w_picpath002

3.15 一个程序由5个虚页组成,采用LFU替换算法,在程序执行过程中依次访问的页地址流如下:P4,P5,P3,P2,P5,P1,P3,P2,P3,P5,P1,P3

(1)可能的最高页命中率是多少?

(2)至少要分配给该程序多少个主存页面才能获得最高的命中率?

(3)如果地程序执行过程中每访问一个页面,平均要对该页面内的存储单元访问1024次,求访问存储单元的命中率。

:欲知可能的最高命中率及所需的最少主存页数,较好的办法是通过“堆栈模拟法”,求得命中次数随主存页数变化的函数关系。下图就是“堆栈模拟图”,其中“√”表示命中。    

P=

4

5

3

2

5

1

3

2

3

5

1

3

命中次数

4

5

3

2

5

1

3

2

3

5

1

3

4

5

3

2

5

1

3

2

3

5

1

4

5

3

2

5

1

1

2

3

5

4

4

3

2

5

5

1

2

2

4

4

4

4

4

4

4

n=1

0

n=2

1

n=3

3

n=4

7

n=5

7


(1)Hmax=7/12≈58.3%

(2)至少分配n=4

(3)当1次页面访问代表连续1024次该页内存储单元访问时,后1023次单元访问肯定是命中的,而第1次单元访问的命中情况与这1次页面访问的命中情况相同。根据上图中最高命中情况,共有7次页命中(折算为7×1024次单元命中),5次页不命中(折算为5×1023次单元命中,也可写为5×1024-5),单元访问总次数为12×1024,故有:

存储单元命中率Hcell=(12×1024-5)/(12×1024)=12283/12288≈99.96%

13.在页式的虚拟存储机器中,一个程序的有p1,p2,到p5共5个界面。在程序的访问过程中依次访问的页面如下,

p2,p3,p2,p1,p5,p2,p4,p5,p3,p2,p5,p2:假设系统分配的这个程序有三个界面分别采用,分别采用FIFO,LRU的OPT,三种页面替换的对三个页面进行调度:

解:

FIFO:(比较列集合最大左距离=dmax)

232152453252
2222*5555*3333
x3333*22222*55
xxX111*44444*2
V V V

=>e=3/12=25%;

LRU(  dmax|(collision + 当前命中必使用) );

232152453252
222*222*223333
x333*5555*5555
xxX111*444*222
V V V VV

OPT :(dmax|collision+无后继节点+命中必使用))

232152453252
222222*444*222
x33333333333
xxx1*55555555
V V VVVV

e=6/12=50%:

17

4.假设在一个采用组相联映像方式的Cache中,主存有B0~B7共8块组成,Cache有C0~C3共4块,组内块数为2块。每块的大小为32个字节,采用FIFO块替换算法。在一个程序执行过程中依次访问块地址流如下: B1,B4,B6,B3,B0,B4,B6,B2,B4,B5    
(1) 写出主存地址的格式,并标出各字段的长度    
(2) 写出Cache地址的格式,并标出各字段的长度    
(3) 画出主存与Cache之间各个块的映像对应关系    
(4) 列出程序执行过程中Cache的块地址流分布情况。并计算Cache的块命中率

解答:

p_w_picpath

(1)写出主存地址的格式,并标出各字段的长度:

索引字节地址是:

每块是32字节,对应的每一个存储单元是14字节=2^4B

区号组号组内块号(2个)块内地址
1B1B1B4B

(2)

组号组内块号块内地址
1B1B4 B

(3) 画出主存与Cache之间各个块的映像对应关系:

(4)  
   先分组:

C0 { B0,B1;B4,B5}

c1{B0,B1;B4,B5}

c2{B2,B3;B6,B7}

c3{B2,B3,B6,B7}

意味着块对余组。  

注意cache 共4 块。意味着用该点前4个不包括*的命中距离距离:

p_w_picpath

B6B2B4B1B4B6B3B0B4B5B7B3
V * *V c0
V V c1
V V V c2
V * Vc3