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中的数据块的大小)。
解:存储系统是两个或两个以上速度、容量和价格各不相同的存储器用硬件、软件、或软件与硬件相结合的方法连接起来成为一个存储系统。
解:
(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)画出多用户的虚地址经快表或慢表变换成主存实地址的逻辑示意图。
解:
(1)
1)用户号:6 位,虚页号:10 位,页内偏移地址:12 位
6位 |
10位 |
12位 |
用户号U |
虚页号P |
页内偏移D |
实页后:加 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 套独立的比较电路。
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)
2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 | |
2 | 2 | 2 | 2* | 5 | 5 | 5 | 5* | 3 | 3 | 3 | 3 | |
x | 3 | 3 | 3 | 3* | 2 | 2 | 2 | 2 | 2* | 5 | 5 | |
x | x | X | 1 | 1 | 1* | 4 | 4 | 4 | 4 | 4* | 2 | |
V | V | V | ||||||||||
=>e=3/12=25%;
LRU( dmax|(collision + 当前命中必使用) );
2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 | |
2 | 2 | 2* | 2 | 2 | 2* | 2 | 2 | 3 | 3 | 3 | 3 | |
x | 3 | 3 | 3* | 5 | 5 | 5 | 5* | 5 | 5 | 5 | 5 | |
x | x | X | 1 | 1 | 1* | 4 | 4 | 4* | 2 | 2 | 2 | |
V | V | V | V | V | ||||||||
OPT :(dmax|collision+无后继节点+命中必使用))
2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 | |
2 | 2 | 2 | 2 | 2 | 2* | 4 | 4 | 4* | 2 | 2 | 2 | |
x | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | |
x | x | x | 1* | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | |
V | V | V | V | V | V | |||||||
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的块命中率
解答:
(1)写出主存地址的格式,并标出各字段的长度:
索引字节地址是:
每块是32字节,对应的每一个存储单元是14字节=2^4B
区号 | 组号 | 组内块号(2个) | 块内地址 |
1B | 1B | 1B | 4B |
(2)
组号 | 组内块号 | 块内地址 |
1B | 1B | 4 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个不包括*的命中距离距离:
B6 | B2 | B4 | B1 | B4 | B6 | B3 | B0 | B4 | B5 | B7 | B3 | |||||||
V | * | * | V | c0 | ||||||||||||||
V | V | c1 | ||||||||||||||||
V | V | V | c2 | |||||||||||||||
V | * | V | c3 |