计算机组成与系统结构课后答案全清华大学出版社袁春风主编 下载本文

页表项位数为:有效位+保护位+修改位+使用位+物理页号位数=4+22=26位。

为简化页表访问,每项大小取32位。因此,每个进程的页表大小为:226×32b=256MB。 如果按实际计算出的页表大小构建页表,则页表过大而导致页表无法一次装入内存。

24. 假定一个计算机系统中有一个TLB和一个L1 data cache。该系统按字节编址,虚拟地址16位,物理地

址12位;页大小为128B,TLB为四路组相联,共有16个页表项;L1 data cache采用直接映射方式,块大小为4B,共16行。在系统运行到某一时刻时,TLB、页表和L1 data cache中的部分内容(用十六进制表示)如下:

组号 标记 页框号 有效位 标记 页框号 有效位 标记 页框号 有效位 标记 页框号 有效位 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个页表项

虚页号 页框号 有效位 行索引 标记 有效位 字节3 字节2 字节1 字节0 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

08 03 14 02 – 16 – 07 13 17 09 – 19 – 11 0D 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1

0 1 2 3 4 5 6 7 8 9 A B C D E F

19 15 1B 36 32 0D – 16 24 2D 2D – 12 16 33 14 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 12 – 03 – 23 46 – 12 23 – 43 – 76 A3 2D – 56 – 45 – 34 67 – 54 62 – 62 – 83 F4 4A – C9 – 12 – C2 23 – 65 12 – 23 – 21 23 45 – AC – CD – 2A 3D – DC 3A – C3 – 35 11 55 – (b) 部分页表:(开始16项) (c) L1 data cache:直接映射,共16行,块大小为4B

请回答下列问题:

(1)虚拟地址中哪几位表示虚拟页号?哪几位表示页内偏移量?虚拟页号中哪几位表示TLB标记?

哪几位表示TLB索引?

(2)物理地址中哪几位表示物理页号?哪几位表示页内偏移量?

(3)主存(物理)地址如何划分成标记字段、行索引字段和块内地址字段?

(4)CPU从地址067AH中取出的值为多少?说明CPU读取地址067AH中内容的过程。 参考答案:

(1)16位虚拟地址中低7位为页内偏移量,高9位为虚页号;虚页号中高7位为TLB标记,低2位

为TLB组索引。

(2)12位物理地址中低7位为页内偏移量,高5位为物理页号。

(3)12位物理(主存)地址中,低2位为块内地址,中间4位为cache行索引,高6位为标记。 (4)地址067AH=0000 0110 0111 1010B,所以,虚页号为0000011 00B,映射到TLB的第00组,将

0000011B=03H与TLB第0组的四个标记比较,虽然和其中一个相等,但对应的有效位为0,其

余都不等,所以TLB缺失,需要访问主存中的慢表。直接查看0000011 00B =00CH处的页表项,有效位为1,取出物理页号19H=11001B,和页内偏移111 1010B拼接成物理地址:11001 111 1010B。根据中间4位1110直接找到cache第14行(即:第E行),有效位为1,且标记为33H=110011B,正好等于物理地址高6位,故命中。根据物理地址最低两位10,取出字节2中的内容4AH=01001010B。

25. 缓冲区溢出是指分配的某个内存区域(缓冲区)的大小比存放内容所需空间小。例如,在栈(stack)中

分配了一块空间用于存放某个过程中的一个字符串,结果字符串长度超过了分配空间的大小。黑客往往会利用缓冲区溢出来植入入侵代码。请说明可以采用什么措施来防止缓冲区溢出漏洞。

第 5 章 习 题 答 案

3. 假定某计算机中有一条转移指令,采用相对寻址方式,共占两个字节,第一字节是操作码,第二字节

是相对位移量(用补码表示),CPU每次从内存只能取一个字节。假设执行到某转移指令时PC的内容为200,执行该转移指令后要求转移到100开始的一段程序执行,则该转移指令第二字节的内容应该是多少? 参考答案:

因为执行到该转移指令时PC为200,所以说明该转移指令存放在200单元开始的两个字节中。因为CPU每次从内存只能取一个字节,所以每次取一个字节后PC应该加1。

该转移指令的执行过程为:取200单元中的指令操作码并译码→PC+1→取201单元的相对位移量→PC+1→计算转移目标地址。假设该转移指令第二字节为Offset,则100=200+2+Offset,即Offset = 100–202 = –102 =

(注:没有说定长指令字,所以不一定是每条指令占2个字节。)

4. 假设地址为1200H的内存单元中的内容为12FCH,地址为12FCH的内存单元的内容为38B8H,而

38B8H单元的内容为88F9H。说明以下各情况下操作数的有效地址和操作数各是多少? (1)操作数采用变址寻址,变址寄存器的内容为12,指令中给出的形式地址为1200H。 (2)操作数采用一次间接寻址,指令中给出的地址码为1200H。

(3) 操作数采用寄存器间接寻址,指令中给出的寄存器编号为8,8号寄存器的内容为1200H。 参考答案:

(1) 有效地址EA=000CH+1200H=120CH,操作数未知。 (2) 有效地址EA=(1200H)=12FCH,操作数为38B8H。 (3) 有效地址EA=1200H,操作数为12FCH。

5. 通过查资料了解Intel 80x86微处理器和MIPS处理器中各自提供了哪些加法指令,说明每条加法指令

的汇编形式、指令格式和功能,并比较加、减运算指令在这两种指令系统中不同的设计方式,包括不同的溢出处理方式。 参考答案(详细信息略): MIPS: Intel 80x86:

6. 某计算机指令系统采用定长指令字格式,指令字长16位,每个操作数的地址码长6位。指令分二地

址、单地址和零地址三类。若二地址指令有k2条,无地址指令有k0条,则单地址指令最多有多少条? 参考答案:

设单地址指令有k1条,则 ((16 – k2) ×26 – k1) ×26 = k0,所以 k1= (16 – k2) ×26 – k0/26

7. 某计算机字长16位,每次存储器访问宽度16位,CPU中有8个16位通用寄存器。现为该机设计指令

系统,要求指令长度为字长的整数倍,至多支持64种不同操作,每个操作数都支持4种寻址方式:立即(I)、寄存器直接(R)、寄存器间接(S)和变址(X),存储器地址位数和立即数均为16位,任何一个通用寄存器都可作变址寄存器,支持以下7种二地址指令格式(R、I、S、X代表上述四种寻址

方式):RR型、RI型、RS型、RX型、XI型、SI型、SS型。请设计该指令系统的7种指令格式,给出每种格式的指令长度、各字段所占位数和含义,并说明每种格式指令需要几次存储器访问? 参考答案:

指令格式可以有很多种,只要满足以下的要求即可。

操作码字段:6位;寄存器编号:3位;直接地址和立即数:16位;变址寄存器编号:3位;总位数是8的倍数。

指令格式例1:

RR型 RI型 RS型 RX型

0000 0010 OP (6位) OP (6位) OP (6位) OP (6位) R t (3位) Rs (3位) Rt (3位) 000 Imm16 (16位) 0100 0110 R t (3位) Rs (3位) Rt (3位) Rx (3位) Offset16 (16位) XI型 SI型 SS型

1000 OP (6位) OP (6位) OP (6位) Rx (3位) 000 Offset16 (16位) Imm16 (16位) Imm16 (16位) 1010 1100 R t (3位) 000 Rt (3位) Rs (3位)

指令格式例2:

RR型 OP (6位) RI型 RS型

01 R t (3位) Rt (3位) 01 00 Rs (3位) Imm16 (16位) 000 OP (6位) 01 OP (6位) 01 R t (3位) 01 R t (3位) 10 11 Rs (3位) Rx (3位) Offset16 (16位) RX型 OP (6位) XI型 SI型

OP (6位) 11 10 10 Rx (3位) Offset16 (16位) 00 10 00 Imm16 (16位) 000 000 OP (6位) R t (3位) Rt (3位) Imm16 (16位) Rs (3位) SS型 OP (6位)

寻址方式字段(2位)----00:立即;01:寄直;10:寄间;11-变址

8. 有些计算机提供了专门的指令,能从32位寄存器中抽取其中任意一个位串置于一个寄存器的低位有效

位上,并高位补0,如下图所示。MIPS指令系统中没有这样的指令,请写出最短的一个MIPS指令序列来实现这个功能,要求i=5, j=22, 操作前后的寄存器分别为$s0和$s2。

31

j

i 0

(31–j)位 31 0 (32–(j–i) )位

(j–i)位 (i+1)位 0 000 (j–i)位

参考答案:

可以先左移9位,然后右移15位,即:

sll $s2, $s0, 9

srl $s2, $s2, 15

思考:(1) 第二条用算术右移指令sra 行不行?

不行,因为不能保证高位补0!

(2) 若第一条指令中的$s2改成其他寄存器R,则会带来什么问题? 所用寄存器R的值被破坏!

9. 以下程序段是某个过程对应的指令序列。入口参数int a和int b分别置于$a0和$a1中,返回参数是该

过程的结果,置于$v0中。要求为以下MIPS指令序列加注释,并简单说明该过程的功能。

参考答案:

1: 将t0寄存器置零

2: 如果a1的值等于零则程序转移到finish处 3: 将t0和a0的内容相加,结果存放于t0 4: 将a1的值减1 5: 无条件转移到loop处

6: 将t0的内容加上100,结果存放于t0 7: 将t0的值存放在v0

该程序的功能是计算“100+a×b”

10. 下列指令序列用来对两个数组进行处理,并产生结果存放在$v0中。假定每个数组有2500 个字,

其数组下标为0到2499。两个数组的基地址分别存放在$a0和$a1中,数组长度分别存放在$a2和$a3中。要求为以下MIPS指令序列加注释,并简单说明该过程的功能。假定该指令序列运行在一个时钟频率为2GHz的处理器上,add、addi和sll指令的CPI为1;lw和bne指令的CPI为2,则最坏情况下运行所需时间是多少秒?

sll $a2, $a2, 2 sll $a3, $a3, 2 add $v0, $zero, $zero add $t0, $zero, $zero

outer:

add $t4, $a0, $t0 lw $t4, 0($t4) add $t1, $zero, $zero

add $t0, $zero, $zero beq $a1, $zero, finish add $t0, $t0, $a0 sub $a1, $a1, 1 j

loop

addi $t0, $t0, 100

loop:

finish:

add $v0, $t0, $zero