⑷
方案
ta(ns)
ca($/KB)
乘积
比较
1
74
0.26
19.24
最差
2
38
0.32
12.16
中等
3
23.6
0.42
9.912
最优
3.有16个存储器模块,每个模块的容量为4M字节,字长为32位。
现在要用这16个存储器模块构成一个主存储器,有如下几种组织方式:
方式1:
16个存储器模块采用高位交叉方式构成存储器。
方式2:
16个存储器模块构成并行访问存储器。
方式3:
16个存储器模块采用低位交叉方式构成存储器。
方式4:
2路高位交叉8路低位交叉构成存储器。
方式5:
4路高位交叉4路低位交叉构成存储器。
方式6:
4路并行访问4路低位交叉构成存储器。
⑴写出各种存储器的地址格式。
⑵比较各种存储器的优缺点。
⑶不考虑访问冲突,计算各种存储器的频带宽度。
⑷画出各种存储器的逻辑示意图。
答:
⑴各种存储器的地址格式如下:
方式1:
16个模块高位交叉
高低
4bit模块号
20bit模块地址
2bit字地址
方式2:
16个模块并行访问
高低
20bit模块地址
2bit字地址
4bit多路选择
方式3:
16个模块低位交叉
高低
20bit模块地址
2bit字地址
4bit模块号
方式4:
2路高位交叉8路低位交叉
高低
1bit组号
20bit模块地址
2bit字地址
3bit模块号
方式5:
4路高位交叉4路低位交叉
高低
2bit组号
20bit模块地址
2bit字地址
2bit模块号
方式6:
4路并行访问4路低位交叉
高低
20bit模块地址
2bit字地址
2bit组号
2bit多路选择
⑵
这几种存储器都能够并行工作,因此一般而言都可以用来提高存的吞吐率。
但他们也有所区别:
并行访问存储器的优点是实现简单、容易,缺点是访问冲突大;高位交叉访问存储器的优点是扩充方便,但是因为访问冲突太大,一般不用于并行存取,缺点是访问效率不高;低位交叉访问存储器可以用分时的方法来提高速度,但扩充不方便。
⑶
各种存储器的频带宽度和他们的并行程度有关,在不考虑冲突的情况下,如果有足够多的独立控制电路和寄存器,那么,他们的频带宽度是相同的。
但是,高位交叉访问存储器一般不用于并行存取,因此频带宽度最小。
⑷
方式1:
16个模块高位交叉
方式2:
16个模块并行访问
方式3:
16个模块低位交叉
注意:
并行访问存储器和低位交叉访问存储器很相象,只不过,并行访问存储器使用存储模块号(存储体号)来对已经输出的结果进行选择,而低位交叉访问存储器则用来生成对存储模块(存储体)的片选信号,他通过流水的方式来提高访问的速度。
前者用一套存储器控制电路,后者用多套(与交叉模块数相等)存储器控制电路。
方式4:
2路高位交叉8路低位交叉
方式5:
4路高位交叉4路低位交叉
方式6:
4路并行访问4路低位交叉
4.一个程序由5个虚页组成,采用LRU替换算法,在程序执行过程中依次访问的页地址流如下:
P4,P5,P3,P2,P5,P1,P3,P2,P3,P5,P1,P3
⑴可能的最高页命中率是多少?
⑵至少要分配给该程序多少个主存页面才能获得最高的命中率?
⑶如果在程序执行过程中每访问一个页面,平均要对该页面的存储单元访问1024次,求访问存储单元的命中率。
答:
⑴
在分配的主存页面数目足够大的情况下,除了第一次调入不命中,以后的访问均命中,可以达到最高的页面命中率,即:
实际命中的次数为7次,所以可能达到的最高页面命中率为:
⑵
由于在页面数大于等于5的情况下,肯定可以达到最高命中率,所以我们来看页面数小于5时能否达到该命中率:
若分配的主存页面数等于4时,调度过程如下:
访问流
P4
P5
P3
P2
P5
P1
P3
P2
P3
P5
P1
P3
统计
LRU
算法
4
4
4
4*
4*
1
1
1
1
1*
1
1
命中
7次
5
5
5
5
5
5
5*
5*
5
5
5
3
3
3
3*
3
3
3
3
3
3
2
2
2
2*
2
2
2
2*
2*
调入
调入
调入
调入
命中
调入
命中
命中
命中
命中
命中
命中
此时也可以达到最高命中率;
若分配的主存页面等于3时,调度过程如下:
访问流
P4
P5
P3
P2
P5
P1
P3
P2
P3
P5
P1
P3
统计
LRU
算法
4
4
4*
2
2
2*
3
3*
3
3
3*
3
命中
3次
5
5
5*
5
5
5*
2
2
2*
1
1
3
3
3*
1
1
1
1*
5
5
5
调入
调入
调入
调入
命中
调入
调入
调入
命中
调入
调入
命中
此时不能达到最高命中率。
所以至少应该分配4个主存页面。
⑶
我们假设程序每次只访问一个存储单元,这样,对每一个特定页面的访问过程可以描述如下:
因为第一次总是不命中的,而平均起来,随后的1023次总是命中的,然后再次被调出主存,并再次重复先前的过程。
所以访问存储单元的命中率为:
5.假设在一个采用组相联映象方式的Cache中,主存由B0~B7共8块组成,Cache有2组,每组2块,每块的大小为16个字节,采用LRU块替换算法。
在一个程序执行过程中依次访问这个Cache的块地址流如下:
B6,B2,B4,B1,B4,B6,B3,B0,B4,B5,B7,B3
⑴写出主存地址的格式,并标出各字段的长度。
⑵写出Cache地址的格式,并标出各字段的长度。
⑶画出主存与Cache之间各个块的映象对应关系。
⑷如果Cache的各个块号为C0、C1、C2和C3,列出程序执行过程中Cache的块地址流情况。
⑸如果采用FIFO替换算法,计算Cache的块命中率。
⑹如果采用LRU替换算法,计算Cache的块命中率。
⑺如果改用全相联映象方式,再做⑸和⑹,可以得到什么结论?
⑻如果在程序执行过程中,每从主存装入一块到Cache,则平均要对这个块访问16次。
请计算在这种情况下的Cache命中率。
答:
⑴主存地址的格式为:
高低
1bit区号
1bit组号
1bit组块号
4bit块地址
⑵ Cache地址的格式为:
高低
1bit组号
1bit组块号
4bit块地址
⑶
主存的组到Cache的组之间是直接映象,对应组的块之间是全相联映象。
即:
主存块0、1、4、5只能装入Cache块0、1的任何块位置上,主存块2、3、6、7只能装入Cache块2、3的任何块位置上。
⑷
由于主存按Cache大小分区,因此去掉主存块地址中的区号就可以得出满足组相联映象关系的一种Cache块地址,所以该主存块地址流相应的一种Cache的块地址流为:
主
存
B6
B2
B4
B1
B4
B6
B3
B0
B4
B5
B7
B3
110
010
100
001
100
110
011
000
100
101
111
011
Cache
10
10
00
01
00
10
11
00
00
01
11
11
C2
C2
C0
C1
C0
C2
C3
C0
C0
C1
C3
C3
⑸ 采用FIFO替换算法,Cache的块命中率为:
3/12=0.25。
访问流
B6
B2
B4
B1
B4
B6
B3
B0
B4
B5
B7
B3
统计
C0
B4
B4*
B4*
B4*
B4*
B0
B0*
B5
B5
B5
命中
3次
C1
B1
B1
B1
B1
B1*
B4
B4*
B4*
B4*
C2
B6
B6*
B6*
B6*
B6*
B6*
B3
B3
B3
B3
B3*
B3*
C3
B2
B2
B2
B2
B2
B2*
B2*
B2*
B2*
B7
B7
动作
调入
调入
调入
调入
命中
命中
调入
调入
调入
调入
调入
命中
⑹ 采用LRU替换算法,Cache的块命中率为:
4/12≈0.33。
访问流
B6
B2
B4
B1
B4
B6
B3
B0
B4
B5
B7
B3
统计
C0
B4
B4*
B4
B4
B4
B4*
B4
B4*
B4*
B4*
命中
4次
C1
B1
B1*
B1*
B1*
B0
B0*
B5
B5
B5
C2
B6
B6*
B6*
B6*
B6*
B6
B6*
B6*
B6*
B6*
B7
B7*
C3
B2
B2
B2
B2
B2*
B3
B3
B3
B3
B3*
B3
动作
调入
调入
调入
调入
命中
命中
调入
调入
命中
调入
调入
命中
⑺ 采用全相联映象、FIFO替换算法,Cache的块命中率为:
4/12≈0.33。
访问流
B6
B2
B4
B1
B4
B6
B3
B0
B4
B5
B7
B3
统计
C0
B6
B6*
B6*
B6*
B6*
B6*
B3
B3
B3
B3
B3*
B3*
命中
4次
C1
B2
B2
B2
B2
B2
B2*
B0
B0
B0
B0
B0
C2
B4
B4
B4
B4
B4
B4*
B4*
B5
B5
B5
C3
B1
B1
B1
B1
B1
B1
B1*
B7
B7
动作
调入
调入
调入
调入
命中
命中
调入
调入
命中
调入
调入
命中
采用全相联映象、LRU替换算法,Cache的块命中率为:
3/12=0.25。
访问流
B6
B2
B4
B1
B4
B6
B3
B0
B4
B5
B7
B3
统计
C0
B6
B6*
B6*
B6*
B6*
B6
B6
B6
B6*
B5
B5
B5
命中
3次
C1
B2
B2
B2
B2
B2*
B3
B3
B3
B3*
B7
B7
C2
B4
B4
B4
B4
B4
B4*
B4
B4
B4
B4*
C3
B1
B1
B1
B1*
B0
B0
B0
B0*
B3
动作
调入
调入
调入
调入
命中
命中
调入
调入
命中
调入
调入
调入
结论:
Cache的命中率与地址流分布情况、替换算法、相联度等因素有关。
⑻
Cache命中率为:
H=15/16=93.75%