对于以下的访问地址序列: 0, 2, 4, 8, 12, CaCheI缺失5次,而CaChe2缺失4次;
对于以下的访问地址序列: 0, 3, 4, 8, 12, 16, 20, CaCheI缺失7次,而CaChe2缺失6次; 如此等等,可以找出很多。
20. 提高关联度通常会降低缺失率,但并不总是这样。请给出一个地址访问序列,使得采用
法的2-路组相联映射CaChe比具有同样大小的直接映射 CaChe的缺失率更高。
参考答案:
2-路组相联CaChe的组数是直接映射 CaChe的行数的一半,所以,可以找到一个地址序列 A、B、C, 使得:A映射到某一个CaChe行,B和C同时映射到另一个 CaChe行,并且A、B、C映射到同一个 CaChe组。这样,如果访存的地址序列为 A、B、C、A、B、C、A、B、C…,则对于直接映射 CaChe, 其命中情况为: miss/miss/miss /hit/miss/miss ∕hit∕miss∕miss∕ 对于组相联CaChe,因为A、B、C映射到同一个组,每组只有 每个地址处的数据刚调出
命中率可达 33.3%。
2行,采用LRU替换算法,所以,
LRU 替换算
CaChe就又被访问到,每次都是 miss,命中率为0。
例如:假定直接映射 CaChe为4行×字/行,同样大小的2-路组相联CaChe为2组×2行/组×字/行 当访问序列为:0、2、4、0、2、4、0、2、4、…(局部块大小为 100%!
21. 假定有三个处理器,分别带有以下不同的 CaChe:
CaCheI :采用直接映射方式,块大小为 CaChe2:采用直接映射方式,块大小为
1个字,指令和数据的缺失率分别为 4个字,指令和数据的缺失率分别为
4%和6% ; 2%和4% ;
2%和3%。
3)时,则出现上述情况。
当访问的局部块大于组的大小时,可能会发生 “颠簸”现象:刚被替换出去的数据又被访问,导致缺 失率为
CaChe3 :采用2-路组相联映射方式,块大小为 4个字,指令和数据的缺失率分别为 在这些处理器上运行相同的程序,该程序的
CPI为2.0 ,其中有一半是访存指令。若缺失损失为(块大
小+6)个时钟周期,处理器 1和处理器2的时钟周期都为420ps,带有CaChe3的处理器3的时钟周期为 450ps。请问:哪个处理器因 CaChe缺失而引起的额外开销最大?哪个处理器执行速度最快? 参考答案: 假设所运行的程序共执行 N条指令,每条访存指令仅读写一次内存数据,则在该程序执行过程中各处 理器因CaChe缺失而引起的额外开销和执行时间计算如下。 对于处理器 1:
额外开销为: N×(4% + 6% ×50%)×(1+6) = 0.49 N 个时钟周期 执行程序所需时间为: (N×2.0 +0.49N) 4×20ps = 1045.8N ps 对于处理器 2:
额外开销为: N×(2%+4%× 50%)×(4+6) = 0.40N 个时钟周期 执行程序所需时间为: (N×2.0+0.40N) 4×20ps=1008N ps 对于处理器 3:
额外开销为: N×(2%+3%× 50%)×(4+6) = 0.35N 个时钟周期 执行程序所需时间为: (N×2.0+0.35N) 4×50ps=1057.5N ps
由此可见,处理器1的CaChe缺失引起的额外开销最大,处理器 2的执行速度最快。 22.
以下C语言程序段运行在该处理
器上,SiZeof(int) = 4 ,编译器将变量i, j, c, S都分配在通用寄存器中,因此,只要考虑数组元素的访存 情况。若CaChe采用直接映射方式,则当 s=64和s=63时,缺失率分别为多少?若 映射方式,则当s=64和s=63时,缺失率又分别为多少? int i, j, C, s, a[128];
假定某处理器带有一个数据区容量为 256B的cache,其块大小为32B。
CaChe采用2-路组相联
for ( i = 0; i < 10000; i++ )
for ( j = 0; j < 128; j=j+s )
C = a[j]; 参考答案:
已知块大小为32B, CaChe容量为256B = 8行疋字/行×4B∕字,仅考虑数组访问情况。
1) 直接映射,s=64:访存顺序为a[0]、a[64] , a[0]、a[64], ..................... 共循环10000次。这两个元素被映
射到同一个CaChe行中,每次都会发生冲突,因此缺失率为
100%。
2) 直接映射,s=63:访存顺序为 a[0]、a[63]、a[126], a[0]、a[63]、a[126],…共循环 10000 次。这
三个元素中后面两个元素因为映射到同一个 生冲突,故缺失率为 67%。
3) 2-路组相联,s=64:访存顺序为a[0]、a[64] , a[0]、a[64], ……共循环10000次。这两个元素虽
然映射到同一个 CaChe组中,但可以放在该组不同
CaChe行中,所以不会发生冲突,缺失率为0。
CaChe行中,而a[0]不会
CaChe行中,因此每次都会发生冲突,而
a[0]不会发
4) 2-路组相联,s=63:访存顺序为 a[0]、a[63]、a[126], a[0]、a[63]、a[126],…共循环 10000 次。
这三个元素中后面两个元素虽映射到同一个 发生冲突,故缺失率为 0。
CaChe组中,但可放在不同
23.
为16KB ,按字节编址。若页表
假定一个虚拟存储系统的虚拟地址为 40位,物理地址为36位,页大小
4位,磁盘地址不在页表中,则该存储系统中每个
中有有效位、存储保护位、修改位、使用位,共占 参考答案:
进程的页表大小为多少?如果按计算出来的实际大小构建页表,则会出现什么问题? 因为每页大小有16KB ,所以虚拟页数为 240B∕16KB=2 (40-14)=226页。 物理页面和虚拟页面大小相等,所以物理页号的位数为 为简化页表访问,每项大小取
36-4=22位。
226 ×32b=256MB。
页表项位数为:有效位 +保护位+修改位+使用位+物理页号位数=4+22=26位。
32位。因此,每个进程的页表大小为:
如果按实际计算出的页表大小构建页表,则页表过大而导致页表无法一次装入内存。 24.
个 TLB和一个L1 data CaChe。该系统按字节编址,
为4B,共16行。在系统运行到某一时刻时, 六进制表示)如下:
假定一个计算机系统中有一虚拟地址16位,物理地
TLB、页表和L1 data CaChe中的部分内容(用十
址12位;页大小为128B, TLB为四路组相联,共有 16个页表项;L1 data CaChe采用直接映射方式, 块大小
行索引
0 1 2
标记 19 15 1B 有效位 1 0 1 0 字节3 12 — 03 — 字节2 56 — 45 — 字节1 C9 — 12 — 字节0 AC — CD — 3 36
组号标记 页框号有效位 标记 页框号有效位 标记 页框号 0 1 2 3
03 03 02 07 — 2D — — 0 1 0 0 09 02 08 63 0D — — 0D 1 0 0 1 00 04 06 0A — — — 34 有效位 标记 页框号有效位
0 0 0 1 07 0A 03 72 02 — — — 1 0 0 0 (a) TLB (四路组相联):四组、16个页表项
04 05 06 07 08 09
— 16 — 07 13 17 0 1 0 1 1 1 4 5 6 7 8 9 A B C D E F
32 OD — 16 24 2D 2D — 12 16 33 14 1 1 0 1 1 0 1 0 1 1 1 0 23 46 — 12 23 — 43 — 76 A3 2D — 34 67 — 54 62 — 62 — 83 F4 4A — C2 23 — 65 12 — 23 — 21 23 45 — 2A 3D — DC 3A — C3 — 35 11 55 — O09 1 A O— 0 B O19 1 C
— O0 D O11 1 E OOD 1 F
(b)部分页表:(开始16项)
(C) L1 data CaChe :直接映射,共 16行,块大小为 4B
请回答下列问题:
(1) 虚拟地址中哪几位表示虚拟页号?哪几位表示页内偏移量?虚拟页号中哪几位表示
哪几位表示TLB索引?
(2) 物理地址中哪几位表示物理页号?哪几位表示页内偏移量?
(3) 主存(物理)地址如何划分成标记字段、行索引字段和块内地址字段? (4) CPU从地址067AH中取出的值为多少?说明 参考答案:
(1) 16位虚拟地址中低 7位为页内偏移量,高 9位为虚页号;虚页号中高
为TLB组索引。
(2) 12位物理地址中低 7位为页内偏移量,高 5位为物理页号。
(3) 12位物理(主存)地址中,低 2位为块内地址,中间 4位为CaChe行索引,高6位为标记。 (4) 地址 067AH= 0000 0110 0111 1010B,所以,虚页号为 0000011 QQB ,映射到 TLB 的第 00 组,
将0000011B=03H与TLB第0组的四个标记比较,虽然和其中一个相等, 但对应的有效位为 0, 其余都不等,所以 TLB缺失,需要访问主存中的慢表。直接查看
0000011 00B =OOCH处的页
表项,有效位为1,取出物理页号19H=11001B ,和页内偏移111 1010B拼接成物理地址:11001 111 1010B。根据中间4位1110直接找到CaChe第14行(即:第E行),有效位为1 ,且标记为 33H=110011B ,正好等于物理地址高 6位,故命中。根据物理地址最低两位 的内容 4AH=01001010B。
10,取出字节2中 7位为TLB标记,低2 位
CPU读取地址067AH中内容的过程。
TLB标记?
25.
出是指分配的某个内存区域(缓冲区)的大小比存放内容所需空间小。例如,在栈 )
中分配了一块空间用于存放某个过程中的一个字符串,
结果字符串长度超过了分配空间的大小。
缓冲区溢
(StaCk
黑客
往往会利用缓冲区溢出来植入入侵代码。请说明可以采用什么措施来防止缓冲区溢出漏洞。
第5章习题答案
3. 假定某计算机中有一条转移指令,采用相对寻址方式,共占两个字节,第一字节是操作码,第二字节 是相对位移
量(用补码表示),CPU每次从内存只能取一个字节。假设执行到某转移指令时 容为200,执行该转移指令后要求转移到
PC的内
100开始的一段程序执行,则该转移指令第二字节的内容应
该是多少? 参考答案:
因为执行到该转移指令时 PC为200,所以说明该转移指令存放在 CPU每次从内存只能取一个字节,所以每次取一个字节后
该转移指令的执行过程为:取 →PC+1 →计算转移目标地址。假设
该转移指令第二字节为 OfSet ,则100=200+2+Ofset,即OfSet = 100 -202 =-02 = 10011010B
(注:没有说定长指令字,所以不一定是每条指令占 4.
12FCH的内存单元的内容为 38B8H ,而
38B8H单元的内容为88F9H。说明以下各情况下操作数的有效地址和操作数各是多少? (1)
给出的形式地址为
(2) 为
(3)
出的寄存器编号为 答案: (1) (2) (3) 5.
80x86微处理器和 MlPS处理器中各自提供了哪些加法指令,
处理方式。
参考答案(详细信息略): MIPS:
:怡专茗称 add 3ddu -3ddl 200单元开始的两个字节中。因为 →PC+1 →取201单元的相对位移量
PC应该加1。
200单元中的指令操作码并译码
2个字节。)
假设地址为1200H的内存单元中的内容为 12FCH ,地址为
操作数采用变址寻址,变址寄存器的内容为 12,指令中1200H。
操作数采用一次间接寻址,指令中给出的地址码1200H。
操作数采用寄存器间接寻址,指令中给8, 8号寄存器的内容为1200H。 参考
有效地址 EA=OooCH+1200H=120CH ,操作数未知。 有效地址 EA=(1200H)=12FCH ,操作数为 38B8H。 有效地址 EA=1200H ,操作数为12FCH。
通过查资料了解Intel 说明每条加法指令
的汇编形式、指令格式和功能,并比较加、减运算指令在这两种指令系统中不同的设计方式,包括不 同的溢出
匸编格式 功能 Tt T1 ττ Tf Td Td :iidd rd. rs-3 r L addu r-1 τ2, rt adii rt,τ= addiu TtJ ΓSJ imedi ate boo DU U r≡ booooo rs ?01D00 rs ClClI Dr r≡ 7υuorIlXJCUtJ GPK [rd ?DOIMooI ΓPJ?Lrd i τncdiateGFR OO GFRerEI —GP^ [TE. + InrtC?i5 are * ÷ GFR ri.l
Mdιυ :τ∏c?iatc GPR ?t' —GP^ I i∏rc??i ate Intel 80x86: AE)C Oi7on de l?ib l&itw l?id Iq /r 11 /r 丄1 ADD
1 Ξ ∕ι- Ii Λr 13 Zr O&id Ol Zr U3 /r /r Instruct i cn. ADC ALjr iτmG ALrIr AXJ i τw∣1 ΛDC Ilm3 Ξ ADC XS∕1J∣≡!* iliS ADC τ, ∕ol 6, r 1 & ADC r∕n32. r32 ADC i'2i r-∕ιt∣S ADC Γ16J T ∕rol & ADC r§_2J r∕m32 WJD KA>:J ιππ‰?:■■: ADD r∕nS2, r32 AlJD 工L3H, 3^∕τ?iΞ De≡-cr ipt i On Ad√i WLth carry isτβπ8 to AL Add ?wsi th es□rτ,y iτππsl S ts□- AX Λ≡d
位,每个操作数的地址码长 某计算机指令系统采用定长指令字格式,指令字长 166位。指令分二地
址、单地址和零地址三类。 若二地址指令有 k2条,无地址指令有k0条,则单地址指令最多有多少条?