计算机系统结构复习题.pdf_第1页
计算机系统结构复习题.pdf_第2页
计算机系统结构复习题.pdf_第3页
计算机系统结构复习题.pdf_第4页
计算机系统结构复习题.pdf_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大学课程计算机系统结构复习题 1、 假定某计算机存储器按字节编址,CPU 从存储器中读出一个 4 字节信息 D=3234 3538H,该信息的 内存地址为 0000 F00CH,按小端方式存放,请回答下列问题。 (1)该信息 D 占用了几个内存单元?这几个内存单元的地址及其内容各是什么? (2)若 D 是一个 32 位无符号数,则其值是多少? (3)若 D 是一个 32 位补码表示的带符号整数,则其值是多少? (4)若 D 是一个 IEEE 754 单精度浮点数,则其值是多少? (5)若 D 是一个用 8421 码表示的无符号整数,则其值是多少? (6)若 D 是一个字符串,每个字节的低 7 位表示对应字符的 ASCII 码,则对应字符串是什么? (7) 若 D 是两个汉字的国标码, 则这两个汉字在 GB2312 字符集码表中分别位于哪一行和哪一列? (8)若 D 中前 3 个字节分别是一个像素的 R、G、B 分量的颜色值,则其值各是多少? 【分析解答】【分析解答】 将 3234 3538H 展开为二进制表示为 0011 0010 0011 0100 0011 0101 0011 1000B。 (1)因为存储器按字节编址,所以 4 个字节占用 4 个内存单元,其地址分别是 0000 F00CH、0000 F00DH、 0000 F00EH、 0000 F00FH。 由于采用小端方式存放, 所以, 最低有效字节 38H 存放在 0000 F00CH 中,35H 存放在 0000 F00DH 中,34H 存放在 0000 F00EH 中,32H 存放在 0000 F00FH。 (2)无符号数。值为 229+228+225+221+220+218+213+212+210+28+25+24+23。 (3)补码整数。符号为 0,表示其为正数,其值与无符号数的值一样。 (4)IEEE 754 单精度浮点数。根据 IEEE 754 单精度浮点数格式可知,符号位 s=0,为负数;阶码 e=0110 0100B=100,故阶码的值为 100127= 27;尾数小数部分 f=0. 011 0100 0011 0101 0011 1000,所 以,其值为 1. 011 0100 0011 0101 0011 1B 2 -27。 (5)8421 码整数。3234 3538H 各位表示对应十进制数 32343538,所以,其值为 32343538。 (6)ASCII 码字符串。各字节的低 7 位分别为 011 0010、011 0100、011 0101、011 1000,所以, 对应的字符串为“2458”。 (7)汉字。对国标码每个字节各自减 20H,得到两个汉字的区位码,分别为 1214H 和 1518H,也 即,第一个汉字在 GB2312 字符集码表中位于第 18(12H)行、第 20(14H)列,第二个汉字位于第 21(15H)行、第 24(18H)列。 (8) 颜色值。 该像素的R、 G、 B分量的颜色值分别为0011 0010B=50, 0011 0100B=52, 0011 0101B=53。 1. 某字长为 8 位的计算机中,x 和 y 为无符号整数,已知 x=68,y=80,x 和 y 分别存放在寄存器 A 和 B 中。请回答下列问题(要求最终用十六进制表示二进制序列)。 (1)寄存器 A 和 B 中的内容分别是什么? (2) 若 x 和 y相加后的结果存放在寄存器 C中, 则寄存器 C中的内容是什么?运算结果是否正确? 此时,零标志 ZF 是什么?加法器最高位的进位 C 是什么? (3) 若 x 和 y 相减后的结果存放在寄存器 D 中, 则寄存器 D 中的内容是什么?运算结果是否正确?此 时,零标志 ZF 是什么?加法器最高位的进位 C 是什么? (4)无符号整数加/减运算时,加法器最高 位进位 C的含义是什么?它与进/借位标志 CF的关系是什么? (5) 无符号整数一般用来表示什么信息? 为什么通常不对无符号整数的运算结果判断溢出? 【分析解答】【分析解答】 (1)x = 68 = 0100 0100 B = 44H;y = 80 = 0101 0000 B = 50H。所以,寄存器 A 和 B 中的内容分别 是 44H 和 50H。 (2)x + y = 0100 0100 + 0101 0000 = (0) 1001 0100 = 94H,所以,寄存器 C 中的内容为 94H,对应 的真值为 148,运算结果正确。因为结果不为 0,所以 ZF=0;加法器最高位的进位 C 为 0。 (3)xy = x + y补 = 0100 0100 + 1011 0000 = (0) 1111 0100 = F4H,所以,寄存器 D 中的内容为 F4H,对应的真值为 244,运算结果不正确,这是因为相减结果为负数造成的。因为结果不为 0,所以 ZF=0;加法器最高位的进位 C 为 0。 (4)在加法器中进行无符号整数加法运算时,若加法器最高位进位 C=1,则表示实际结果大于最大 可表示数 255;在加法器中进行无符号整数减法运算时,若加法器最高位进位 C=1,则表示被减数大于 减数,反之被减数小于减数。因此,在无符号数相加时,CF 就等于 C,表示进位;在无符号数相减时, 通常将最高进位 C 取反来作为借位标志 CF,也即,无符号整数相减时,CF=C,CF=1 表示有借位。 (5)无符号整数一般用来表示地址(指针)信息,当两个地址相加结果大于最大地址而取低位地址 时,相当于取模,也即采用地址循环运算。因此通常不需要判断其运算结果是否溢出,即不考虑溢出标 志 OF。 2. 假设某字长为 8 位的计算机中,带符号整数采用补码表示,x= 68,y= 80,x 和 y 分别存放在寄 存器 A 和 B 中。请回答下列问题(要求最终用十六进制表示二进制序列)。 (1)寄存器 A 和 B 中的内容分别是什么? (2) 若 x 和 y相加后的结果存放在寄存器 C中, 则寄存器 C中的内容是什么?运算结果是否正确? 此时,溢出标志 OF、符号标志 SF 和零标志 ZF 各是什么?加法器最高位的进位 C 是什么? (3) 若 x和 y相减后的结果存放在寄存器D 中, 则寄存器 D中的内容是什么?运算结果是否正确? 此时,溢出标志 OF、符号标志 SF 和零标志 ZF 各是什么?加法器最高位的进位 C 是什么? (4)若将加法器最高位的进位 C 作为进位标志 CF,则能否直接根据 CF 的值对两个带符号整数的 大小进行比较? 【分析解答】【分析解答】 (1)68补=1000100补=1011 1100B=BCH。80补=1010000 补=1011 0000B=B0H。所以,寄存 器 A 和 B 中的内容分别是 BCH 和 B0H。 (2)x+y补=x补+y补=1011 1100 + 1011 0000 = (1) 0110 1100 = 6CH,最高位前面的一位 1 被丢弃, 因此,寄存器 C 中的内容为 6CH,对应的真值为+108,结果不正确。溢出标志位 OF 可采用以下任意 一条规则判断得到。规则 1:若两个加数的符号位相同,但与结果的符号位相异,则溢出;规则 2:若 最高位上的进位和次高位上的进位不同,则溢出。通过这两个规则都判断出结果溢出,溢出标志位 OF 为 1,说明寄存器 C 中的内容不是正确的结果。x+y 的正确结果应是68+(80)= 148,而运算的结果为 108,两者不等。其原因是因为 x+y 的值(即148)小于 8 位补码可表示的最小值(即128),也即结 果发生了溢出;结果的第一位(最高位)0 为符号标志位 SF,表示结果为正数。因为溢出标志为 1,所 以符号标志实际上也是错的;因为结果不为 0,所以零标志 ZF=0;加法器最高位向前面的进位 C 为 1。 (3) xy补=x补+y补=1011 1100 + 0101 0000 = (1) 0000 1100 = 0CH, 最高位前面的一位 1 被丢弃, 因此, 寄存器 D 中的内容为 0CH, 对应的真值为+12, 结果正确。 两个加数的符号位相异一定不会溢出, 因此溢出标志 OF 为 0,说明寄存器 D 中的内容是真正的结果;结果的第一位(最高位)0 为符号标志 位 SF,表示结果为正数;因为结果不为 0,所以零标志 ZF=0;加法器最高位向前面的进位 C 为 1。 (4)若将加法器最高位的进位 C 作为进位标志位 CF,则无法直接根据 CF 的值判断两个带符号整 数的大小,因此带符号加减运算中不考虑 CF 标志。 3. 某计算机标志寄存器包含四个标志位:CF进/借位标志;OF溢出标志;SF符号标志;ZF 零标志。 请说明在无符号数和带符号整数两种情况下,以下各种比较运算的逻辑判断表达式。 (1)等于; (2)大于; (3)小于; (4)大于等于; (5)小于等于。 【分析解答】【分析解答】 要比较两个数的大小,通常对这两个数先做减法,根据相减的结果生成相应的标志位,最后根据标 志位判断大小。在无符号数相减时,一般不考虑 SF 和 OF 标志;在带符号整数相减时,一般不考虑 CF 标志。假设被减数的机器数为 X,减数的机器数为 Y,则在加法器中计算两数的差时,计算公式为: XY=X+(Y)补。以下举两个例子来说明。假定 X=1001,Y=1100,则在 4 位加法器中执行以下运算: 10011100 = 1001 + 0100 = (0) 1101。若是无符号数比较,则是 9 和 12 相比,显然,ZF=0,CF=1;若 是带符号整数(补码表示) ,则是7 和4 比较,显然,ZF=0,OF=0,SF=1。假定 X=1001,Y=0100, 则在 4 位加法器中执行以下运算:10010100 = 1001 + 1100 = (1) 0101。若是无符号数比较,则是 9 和 4 相比,显然,ZF=0,CF=0;若是带符号整数,则是7 和 4 比较,显然,ZF=0, OF=1,SF=0。 以下分别说明无符号数和带符号整数两种情况下各种比较运算的逻辑判断表达式。 a. 无符号数情况 (1) 等于:相减后结果为零,即 F=ZF。 (2) 大于:没有借位且相减后不为 0,即 F=CF+ZF (3) 小于:有借位且相减后不为 0,即 F=CFZF (4) 大于等于:没有借位或相减后结果为 0,即 F=CF+ZF (5) 小于等于:有借位或相减后结果为 0,即 F=CF+ZF b. 带符号整数情况 (1) 等于:相减后结果为零,即 F=ZF。 (2) 大于:相减后结果不为 0,并且,不溢出时为正,溢出时为负。即 F= ZF(SFOF) (3) 小于:相减后结果不为 0,并且,不溢出时为负,溢出时为正。即 F= ZF(SFOF) (4) 大于等于:相减后结果为 0,或者,不溢出时为正,溢出时为负。即 F= ZF+(SFOF) (5) 小于等于:相减后结果为 0,或者,不溢出时为负,溢出时为正。即 F= ZF+(SFOF) 4. 以下是一个计算阶乘的 C 语言递归过程,请按照 MIPS 过程调用协议写出该递归过程对应的 MIPS 汇编语言程序,要求目标代码尽量短(提示:乘法运算可用乘法指令“mul rd, rs, rt”来实现)。 int fact ( int n) if (n Rrt 的条件表达式为:ZF(SFOF)。图6.6中的多周期数据通路已能支持beq指令的执行,而beq指令和bgt 指令的目标转移地址是一样的, 因此, 只要在图6.6中原先beq指令的条件判断逻辑基础上增加bgt指令的 条件判断逻辑即可,修改后的数据通路如图6.13所示,其中带阴影部分是修改或增加的数据通路。 图6.13 增加了bgt指令的多周期数据通路 在多周期数据通路中,bgt指令与beq指令一样,都需要三个时钟周期,前两个时钟周期为取指周期 MUX bgt beq ZF OF SF SF ZF OF OF 和译码/取数周期,它们在所有指令的执行过程中都是一样的,第三个周期为执行周期,在此周期中, 各控制信号的取值为:beq=PCWr=MemWr=IRWr=RegWr=BrWr=R-type=0,bgt=ALUSelA=1, ALUSelB=00,ALUOp=sub,PCSource=10,其余任意。 6. 已知 MIPS 中有一条 lui(load upper immediate)指令,其指令格式如下: 其功能是将立即数 Imm16 送到 rt 寄存器的高 16 位, 低 16 位补 0。 若使图 6.6 所示的多周期数据通 路也能执行 lui 指令,则如何修改该多周期数据通路?需要增加什么控制信号?该指令对应的时钟周期 数是多少?除取指周期和译码/取数周期外的其他周期中控制信号的取值是什么? 【分析解答】【分析解答】 lui 指令采用 I-型指令格式,rs=$0。因此,该指令的功能可以描述成:RrtR$0+Imm16 216。因 此,只要在图 6.6 中对原扩展器稍加修改,然后借助 I-型运算类指令数据通路就可实现 lui 指令。具体 修改如下。 修改原扩展器,使其具有高位零扩展、高位符号扩展和低位零扩展三种扩展功能。 控制信号 EXTop 从原来的 1 位扩展为 2 位,用于控制扩展器进行三种扩展操作。可以定义 EXop=01 时进行高位零扩展;EXop=10 时进行高位符号扩展;EXop=11 时进行低位零扩展。 该指令的执行过程同 I-型运算类指令,因此,与 ori 指令类似,其时钟周期数为 4。第 3 个时钟周 期各控制信号取值为: ALUSelA=1, ALUSelB=10, ALUOp=add, EXTop=11, MemtoReg=RegDst=RegWr =PCWr=PCWrCond=IRWr =MemWr =BrWr=R-type=0,其余任意;第 4 个时钟周期各控制信号取值为: ALUSelA= RegWr =1,ALUSelB=10,ALUOp=add,EXTop=11,MemtoReg=RegDst= PCWr=PCWrCond =IRWr =MemWr =BrWr=R-type=0,其余任意。 7. 假定图 6.6 所示的多周期数据通路中寄存器堆只有一个读口和一个写口,若要完成和原数据通路 相同的功能, 则需要对图中原数据通路作哪些修改?与之对应的有限状态机又如何修改?每条指令的时 钟周期数有什么变化? 【分析解答】【分析解答】 如果图6.6所示的多周期数据通路中寄存器堆改成只有一个读口,那么,原来可以同时读数据到A 和B,现在只能先读一个到A,再读一个到B。 由于A和B共用一个读地址端口,所以在读地址端口的输入端要加一个多路选择器及其控制信号 RegRead,用于选择读地址口是rs还是rt。可以定义当RegRead=0时读口地址为rs,当RegRead=1时读口 地址为rt。 由于只有一个读数据端口,该端口的数据可能被送到A,也可能被送到B,所以读数据端口的输出 00000 rt Imm16 001111 31 26 25 21 20 16 15 0 同时连到A和B的输入端,并增加一个控制信号AWr,可以定义当AWr=1时将端口数据送A,在AWr=0 时将端口数据送B。因此,在数据通路中,AWr信号直接连到A的“写使能”线,而将AWr信号取反后 连到B的“写使能”线。 由于每个时钟周期只能读取一个操作数,修改后的数据通路不能像原先的数据通路那样,在第2个 周期(译码/取数周期)中同时读取rs和rt,必须修改相应的有限状态机。可以有以下三种修改方式。 将原来的译码/取数周期再分成两个周期,分别读rs到A和读rt到B,并在其中一个周期中投机完 成转移地址计算。这样,每条指令的执行都多了一个时钟周期。 在原来的译码/取数周期中先读rs到A, 对于R-Type和Branch类指令, 再增加一个周期来读rt到B; 对于其他不需用到rt内容的指令,则无需增加新的周期。这样,对于每个R-Type和Branch类指令的执行, 都会多一个时钟周期,而其他指令的时钟周期数不变。 在原来的译码/取数周期中先读rt到B,这样,对于R-Type指令、Branch类指令、load/store类指令 和Ori指令等都要再增加一个周期用于读rs到A。 显然,上述三种方式中,第种做法得到的综合CPI最小。 8. 假定有一条 MIPS 伪指令“bcmp $t1, $t2, $t3”,其功能是实现对两个主存块数据的比较,$t1 和$t2 中分别存放两个主存块的首地址,$t3 中存放数据块的长度,每个数据占一个字(4 个字节),若所有 数据都相等,则将 0 置入$t1;否则,将第一次出现不相等时的地址分别置入$t1 和$t2 并结束比较。 (1) 若$t4 和$t5 是两个空闲寄存器,请给出实现该伪指令的指令序列。 (2) 假定比较的数据块大小为 50 个字, 说明在类似于图 6.6 所示的多周期数据通路中执行该伪指 令时最多有多少个时钟周期。 【分析解答】【分析解答】 (1)实现伪指令“bcmp $t1, $t2, $t3”的指令序列如下。 beq $t3, $zero, done # 若数据块长度为 0,则结束 compare: lw $t4, 0($t1) # 块 1 的当前数据取到$t4 lw $t5, 0($t2) # 块 2 的当前数据取到$t5 bne $t4, $t5, done # $t4 和$t5 的内容不等,则结束 addi $t1, $t1, 4 # 块 1 中的当前数据指向下一个 addi $t2, $t2, 4 # 块 2 中的当前数据指向下一个 addi $t3, $t3, -1 # 比较次数减 1 bne $t3, $zero, compare # 若没有全部比较完,则继续比较 addi $t1, $zero, 0 # 若全部都相等,则将$t1 置 0 done: (2) 在类似图 6.6 所示的多周期数据通路中执行时, 上述程序段中用到的指令 beq、 lw、 bne 和 addi 的时钟周期数分别为 3、5、3 和 4。若比较的数据块大小为 50 个字,则上述指令序列中的循环(粗体 部分)最多被执行 50 次,因而所需的指令数最多为 1+50 7+1=352。其中,load 指令为 50 2=100 条, 时钟周期数为 5 100=500;branch 指令数为 1+2 50=101,时钟周期数为 3 101=303;addi 指令数为 1+3 50=151,时钟周期数为 4 151=604。所以,总时钟周期数最多为 500+303+604=1407。 9. 在一个指令集中增添功能强大的复杂指令时, 通常使用微程序方式对这些复杂指令进行控制。 如果 要求在图 6.6 所示的多周期数据通路中采用微程序控制方式实现第 19 题中的“bcmp rs, rt, rd”指令,并 且规定使用通用寄存器作为两个额外临时寄存器 rt1 和 rt2。 (1)请给出全套的设计方案,包括该指令的汇编形式、机器码格式(与原有指令格式兼容)、指 令执行流程(用 RTL 表示)、数据通路修改方案、控制信号增加或修改方案、指令执行对应的有限状 态机等。 (2) 与第 19 题的软件实现方式相比, 该指令用硬件实现时的速度快了多少?硬件实现速度快的原 因是什么? (3)能否用单周期数据通路实现?若能,则用软件实现合算还是用硬件实现合算? (4)如果 rt1 和 rt2 不用通用寄存器,而是用内部寄存器,则会有哪些好处? 【分析解答】【分析解答】 (1)该指令的汇编形式:bcmp rs, rt, rd, rt1, rt2。 该指令的机器码格式如下。其中 6 位 OP 字段可以 选择一个未被其他指令使用的编码。 指令的功能:比较个数由rd指出,如果rd的内容为0 则什么都不做,继续执行下条指令,否则,对rs和rt所指 内存单元的数据依次比较,直到发生以下情况为止。 若存在一对数据不相等,则将不相等的数据所在的内存 单元地址分别保存在rs和rt中,结束执行; 若所有数 据都相等,则将0存放在rs中,结束执行。rt1和rt2是临时 寄存器,在指令执行过程中,rs、rt、rd、rt1和rt2都会被 破坏。 该指令执行流程如图6.14所示。 rs rt rt1 OP 31 26 25 21 20 16 15 11 10 6 5 1 0 rd rt2 0 Rrd = 0 是 否 Rrs0 Rrd=0 否 是 RrdRrd-1 RrsRrs+4, RrtRrt+4 Rrt1MRrs, Rrt2MRrt Rrt1=Rrt2 是 否 开始 结束 图6.14 指令执行流程图 对图6.6所示的数据通路和控制信号做以下修改。 在存储器的Adr处对原MUX进行修改,增加Rrs(在A中)和Rrt(在B中)两个输入,原控制 信号IorD改为2位,当IorD为0、1、2和3时,分别将PC、ALUout、A和B送Adr处。 在寄存器堆的Ra处增加一个MUX,除原来的rs外,增加rt、rd和rt1三个输入端,增加相应的2位 控制信号RdAdd1,当RdAdd1为0、1、2和3时,寄存器读地址分别为rs、rt、rd和rt1。 在寄存器堆的Rb处增加一个MUX,除原来的rt外,另一个输入来自rt2,增加相应的1位控制信 号RdAdd2,当RdAdd2为0和1时,寄存器读地址分别为rt和rt2。 在寄存器堆的Rw处对原MUX进行修改,除了原来的rt和td外,增加rs、rt1和rt2三个输入,原控 制信号RegDst改为3位,当RegDst为0、1、2、3、4时,寄存器写地址分别为rs、rt、rd、rt1和rt2。 在寄存器堆的Dw处对原MUX进行修改,除了原来的输入以外,增加一个输入端“0”,原控制 信号MemtoReg改为2位,当MemtoReg为0、1和2时,存入寄存器的内容分别为存储器读出数据、ALU 输出结果和0。 在ALU的B输入端处对原MUX进行修改, 再增加两个输入 “0” 和 “1” , 以使ALU能执行 “Rrd-0” 和“Rrd-1”的操作,这样,原控制信号ALUSelB改为3位, ALUSelB为0、1、2、3时,原先的定义 不变,ALUSelB为4和5时,ALU的B输入端分别为0和1。 根据该指令执行流程,以及相应数据通路和控制信号的定义,得到该指令执行过程对应的状态转换 图, 如图6.15所示。 图中在每个状态内仅给出了关键控制信号的取值, 并省略了最初的两个公共状态 (取 指令周期和译码/取数周期)以及其他指令执行的状态(参看图6.7)。该指令的执行从第12状态开始, 每个状态按顺序编号,分别为12、13、25。 图6.7对应的原11条指令的有限状态机已有12个状态和两个分支点。加上该指令的三个分支点, 新的有限状态机中有5个分支点和26个状态, 如果用微程序设计方式实现该指令的控制逻辑, 每个状 态对应一条微指令,那么,微指令地址应该有5位,转移控制字段BrCtr的位数为3,其编码及含义如 下(Next addr为下条微指令地址)。 000 Next addr = 0 001 Next addr = ROM 1中对指令译码得到的相应入口地址 010 Next addr = ROM2中lw/sw对应的入口地址 011 Next addr = addr + 1 100 Next addr = 该指令分支1处输出的地址 101 Next addr = 该指令分支2处输出的地址 110 Next addr = 该指令分支3处输出的地址 bcmp PCWrCond=0 ALUOp=Sub RdAdd1=10 ALUSelB=100 ALUSelA=1 ZF=1 ZF=0 MemRead IorD=10 MemtoReg=01 RegWr RegDst=011 MemRead IorD=11 MemtoReg=01 RegWr RegDst=100 ALUOp=Sub RdAdd1=11 ALUSelB=000 ALUSelA=1 RdAdd2=1 ZF=1 ZF=0 ALUOp=add RdAdd1=00 ALUSelB=010 MemtoReg=00 RegDst=000 RegWr ZF=1 MemtoReg=10 RegWr RegDst=000 ZF=0 ALUOp=sub RdAdd1=10 ALUSelB=100 MemtoReg=01 RegWr RegDst=010 ALUOp=sub RdAdd1=10 ALUSelB=101 13 12 14 ALUOp=add RdAdd1=01 ALUSelB=010 MemtoReg=00 RegDst=001 RegWr 0 15 16 17 18 19 20 21 22 23 24 25 取指状态 图 6.15 指令执行的有限状态转换图 执行到该指令时,则调出该指令对应的微程序执行。该指令对应的微程序是从第12状态开始的 微指令序列。其中的三个分支点分别在第12、17和24状态,都是根据标志ZF控制分支的。对于第12 状态的分支1, 若ZF=1, 则Next addr=0, 否则Next addr= addr+1; 对于第17状态的分支2, 若ZF=0, 则Next addr = 0; 否则Next addr= addr+1; 对于第24状态的分支3, 若ZF=0, 则Next addr = 01101, 否则Next addr = addr+1。因此,分支1和分支2处可以各用一个MUX实现,根据ZF的值选择将0还 是 addr+1输出作为Next addr。分支3处用一个地址修改逻辑,当ZF=0时,将输入11001改为01101, ZF=1时不修改。 对应的下条微地址生成逻辑如图6.16所示,在此假定采用计数器法。 图6.16 题20中的下条微地址生成逻辑 (2)假定bcmp指令的比较次数为n(0),根据上述有限状态机可知,最坏情况下用硬件实 现该指令所需的时钟周期数为2+1+12n+1=4+12n;而根据第19题给定的指令序列可知。最坏情况下 用软件实现所需的时钟周期数为10n+3+6n+4+12n=7+28n。 因此, 硬件实现比软件实现至少快一倍多。 硬件实现比软件快的原因主要有两个: 软件方式下,指令序列中的每条指令都要取指令、译码/ 取数;而硬件实现时不需要。 软件方式下,每条指令都要保存结果,下条指令用时再取;而硬件 方式下,中间数据可以直接使用,无需先存后取。 (3)因为本指令在执行过程中可能需要多次写寄存器,因此,不能用单周期数据通路实现。假 设能用的话,因为单周期数据通路的时钟周期以最复杂指令为准,因此,这个复杂指令会大大延长 时钟周期,此时,用软件实现更合算。 (4)如果rt1和rt2不用在指令中明显给出,即不用通用寄存器而改用内部寄存器的话,则可大 大简化数据通路、减少控制信号和时钟周期数,并且可减少被该指令破坏的通用寄存器的个数。 10. 假定主存和 CPU 之间连接的同步总线具有以下特性: 支持 4 字和 16 字两种长度的数据传送, 字长 为 32 位,总线时钟频率为 200MHz,总线宽度为 64 位,每个 64 位数据的传送需一个时钟周期,向主 存发送一个地址需要一个时钟周期,每两个总线事务之间有两个空闲时钟周期。若访问主存时最初 4 个字的存取时间为 200ns,随后每存取一个 4 字的时间是 20ns,则在 4 字和 16 字两种传输方式下,该 总线上传输 256 个字时的数据传输率分别是多少?你能从计算结果中得到什么结论? 【分析解答】【分析解答】 总线时钟频率为 200MHz,因而总线时钟周期为 1/200M=5ns。 对于 4 字传送方式,每个总线事务由一个地址传送跟一个 4 字的数据块传送组成。即每个总线事 务传送一个 4 字的数据块。每个数据块的传送过程如图 8.1 所示。 图 8.1 题 6 中 4 字传送方式下的数据传送过程 首先,CPU 发送一个首地址到主存,一个时钟周期后,主存读开始的 4 个字,用了 200ns/5ns=40 个时钟周期,然后在总线上传输 4 个字,所用的时钟周期数为 4 32/64=2。在下次总线事务开始之前, 最后有两个空闲时钟周期。 所以一次总线事务总共需要 1+40+2+2=45 个时钟周期, 256 个字需 256/4=64 个事务,因而整个传送需 45 64=2880 个时钟周期,得到总延时为 2880 5ns=14400ns。每秒钟进行的总 线事务数为 64/14400ns = 4.44M。总线的数据传输率为(256 4B)/14400ns =71.11MB/s。 对于 16 字传送方式,每个总线事务由一个地址传送后跟一个 16 字的数据块传送组成。也即每个 总线事务传送一个 16 字的数据块。每个数据块的传送过程如图 8.2 所示。 图 8.2 题 6 中 16 字传送方式下的数据传送过程 从图 8.2 可看出,一次总线事务的时钟周期数为 1+40+4 (2+2)=57,256 个字需 256/16=16 个事务, 因此整个传送需 57 16=912 个时钟周期。因而总延时为 912 5ns=4560ns。几乎仅是 4 字传送的 1/3。每 秒钟的总线事务数为 16/4560ns= 3.51M。总线的数据传输率为(256 4B)/4560ns=224.56MB/s。与 4 字传 送相比,是 3.6 倍。 由此可见,在一次总线事务中传送的数据块越大,则数据传输率越高。 11. 在上一题(题 6)所述的系统中,假定访问主存时最初 4 个字的读取时间为 148ns,随后每读一个 4 字的时间为 26ns,则在 4 字和 16 字两种传输方式下,CPU 从主存读出 256 个字时,该总线上的数据 传输率分别是多少?和上题计算结果进行比较分析,并给出相应的结论。 【分析解答】分析解答】 因为最初 4 个字的读取时间从 200ns 变为 148ns, 所以主存读开始的 4 个字只用了 148ns/5ns=29.6 个 时钟周期,当主存存取时间不是总线时钟周期的整数倍时,主存会先准备好数据,等待下个总线时钟周 1 clock 40 clocks 2 clocks 2 clocks CPU 主存 数据块 首址 主存读出 开始4个字 主存读随后的4个字 总线前两个时钟传输前 4个字,后两个时钟空闲 2 clocks 2 clocks 2 clocks 2 clocks 2 clocks 2 clocks 总线前两个时钟传输前 4个字,后两个时钟空闲 1 clock 40 clocks 2 clocks 2 clocks CPU 主存 数据块 首址 主存读出 开始4个字 传送 4个字 总线 空闲 期到来后,开始在总线上传送数据。因此,开始 4 字的读取时间实际上相当于 30 个时钟周期的时间。 在 4 字传输方式下,每个数据块的传送过程如图 8.3 所示。 图 8.3 题 7 中 4 字传送方式下的数据传送过程 从图 8.3 中可以看出,一次总线事务总共需要 1+30+2+2=35 个时钟周期,256 个字需 256/4=64 个 事务, 因而整个传送需 35 64=2240 个时钟周期, 总线的数据传输率为(256 4B)/(2240 5ns) =91.43MB/s。 因为从第二个 4 字开始, 每读一个 4 字的时间为 26ns, 相当于 26ns/5ns=5.2 个总线时钟周期的时间。 在 16 字传输方式下,每个数据块的传送过程如图 8.4 所示。 图 8.4 题 7 中 16 字传送方式下的数据传送过程 从图 8.4 中可以看出,一次总线事务总共需要 1+30+3 6+2+2=53 个时钟周期,256 字需 256/16=16 个事务, 因而整个传送需53 16=848个时钟周期, 总线的数据传输率为(256 4B)/(848 5ns) =241.51MB/s。 与上一题给出的系统相比,4 字传输方式下,速度提高了(91.43-71.11)/71.11=28.6%;16 字传输方式 下,速度只提高了(241.51-224.56)/224.56=7.5%。由此可知,对于小数据块的传输,主存首次读取的速 度更重要;而对于大数据块的传输,则首次读取速度和随后的读取速度都很重要。 12. 假定主存和 CPU 之间连接的同步总线具有以下特性:采用数据和地址线分离方式,总线宽度和机 器字长一样,都为 32 位,总线时钟频率为 200MHz,每个数据或地址传送需一个时钟周期,每个总线 事务之间有两个空闲时钟周期。对于写操作,主存最初 4 个字的写入时间为 200ns,随后每写入一个 4 字的时间是 20ns,则写入 256 个字到主存时,在 4 字和 16 字两种传输方式下该总线的数据传输率分别 是多少? 【分析解答】分析解答】 每个时钟周期为 1/200M=5ns。在 4 字传输方式下,每个数据块的传送过程如图 8.5 所示。 图 8.5 题 8 中 4 字传送方式下的数据传送过程 首先,CPU 发送首地址和第一个字到主存需要 1 个时钟周期,接着发送 3 个字到主存需要 3 个时 钟周期,当主存接收到地址和 4 个字后,开始将一个 4 字写入主存,需要 200ns/5ns=40 个时钟周期。 1 clock 40 clocks 2 clocks CPU 主存 首址及 首字 主存写入 开始4个字 总线 空闲 传送 第4字 1 clock 1 clock 30 clocks 2 clocks 2 clocks CPU 主存 数据块 首址 主存读出 开始4个字 主存读随后的4个字,总线前两个时 钟传输前4个字,后4个时钟空闲 2 clocks 2 clocks 总线前两个时钟传输前 4个字,后两个时钟空闲 2 clocks 1 clock 30 clocks 2 clocks 2 clocks CPU 主存 数据块 首址 主存读出 开始4个字 传送 4个字 总线 空闲 在下次总线事务开始之前,最后有两个空闲时钟周期。所以一次总线事务总共需要 1+3+40+2=46 个时 钟周期,256 个字需 256/4=64 个事务,因而整个传送需 46 64=2944 个时钟周期,得到总延时为 2944 5ns=14720ns。每秒钟进行的总线事务数为 64/14720ns = 4.34M。总线的数据传输率为 (256 4B)/14720ns =69.57MB/s。 在 16 字传输方式下,每个数据块的传送过程如图 8.6 所示。 图 8.6 题 8 中 16 字传送方式下的数据传送过程 首先,与 4 字传送方式一样,CPU 在 4 个时钟周期内,发送首地址和第一个 4 字到主存,当主存 接收到首地址和 4 个字后,开始将第一个 4 字写入主存,需要 200ns/5ns=40 个时钟周期,在此期间, 总线用其中最后 4 个时钟周期传送第二个 4 字。由图 8.6 可知,一次总线事务总共需要 56 个时钟周期, 256 个字需 256/16=16 个事务, 因而整个传送需 56 16=896 个时钟周期, 得到总延时为 896 5ns=4480ns。 每秒钟进行的总线事务数为 16/4480ns = 3.57M。总线的数据传输率为(256 4B)/4480ns =228.57MB/s。 13. 某通信总线采用异步通信方式,支持突发传输,总线宽度为 32 位,数据线和地址线复用,主、从 设备各有一个“就绪”信号,采用全互锁方式传送地址和数据信息,主、从设备之间每次握手最少需要 40ns。总线上的主控设备和从设备都有 1 字宽的总线接口。若每一次 I/O 请求要求突发传输 16 个字, 每个字为 32 位,则用该总线连接以下各种不同的从设备时,该总线上连续进行 I/O 请求事务时的数据 传输率至多各是多少? (1)从设备 1:准备第一个字的时间最快为 200ns,以后每个字的准备时间最快为 20ns。 (2)从设备 2:准备第一个字的时间最快为 200ns,以后每个字的准备时间最快为 164ns。 【分析解答】分析解答】 因为采用全互锁方式传送地址和数据信息,所以每个地址和数据信息的传送需要三次握手。 (1)对于从设备 1,其 I/O 请求事务过程如图 8.7 所示。 ReadReq Address Data Ack Ready 1 2 3 4 5 6 2 4 6 7 BurstReq 图 8.7 题 9 中异步通信方式下数据传送过程 主设备送出地址信息和事务类型信息(I/O 请求命令 ReadReq) ,并使 BurstReq 有效,表示是突 发传送方式; 从设备送出回答信号 Ack,并对地址译码,开始准备第一个字; 主设备接收到回答 4 clocks 40 clocks 4 clocks CPU 主存 传送首址及 开始4个字 主存写入开始4个字 总线空闲 主存写入最后4字 总线传送第二个4字 4 clocks 总线传送第三个4字 主存写入第二个4字 4 clocks 总线传送最后4字 主存写入第三个4字 信号 Ack 后, 使 ReadReq 信号无效, 并撤销地址信息; 从设备跟着使 Ack 信号无效, 继续准备数据; 从设备准备好第一个字后,送数据到数据线,并发出就绪(Ready)信号,主设备接收到 Ready 信号 后开始读取数据; 主设备发出 Ack 信号,表示数据已成功读取,从设备发现 Ack 信号有效后得知数 据传送完成,因而撤销 Ready 信号; 主设备发现 Ready 信号撤销后,跟着撤销 Ack 信号。 每次数据交换的全互锁过程需要三次握手时间,并且在相邻两次数据交换之间需要一次握手时间, 因而一次数据交换共需要 4 次握手时间,故数据交换过程所用时间为 max(4 40,20)=160ns。每次在总线 上交换第 i(1i15)个字的时候,从设备准备第 i+1 个字,最后在总线交换第 16 个字时,从设备空 闲,因而最后一个数据交换所用时间为 3 40=120ns。最后一个数据交换结束后,BurstReq 信号无效, 表 示 突 发 传 送 结 束 。 综 上 所 述 , 一 次I/O请 求 传 送16个 字 的 时 间 最 快 为 40+max(3 40,200)+15 160+120=2760ns,因此,连续进行 I/O 请求事务时的数据传输率至多是 16 4B/2760ns =23.19MB/s。 (2)对于从设备 2,其 I/O 请求事务过程与从设备 1 类似,只是每次准备数据所需时间不同,在 总线上通过全互锁方式传输第 i(1i15)个字时,从设备 2 准备第 i+1 个字,因此,前 15 个数据交 换过程所用时间为 max(4 40,164)=164ns,而最后一个字的传送需 3 40=120ns。综上所述,对于从设备 2,一次 I/O 请求传送 16 个字的时间最快为 40+max(3 40,200)+15 164+120=2820ns,因此,连续进行 I/O 请求事务时的数据传输率至多是 16 4B/2820ns =22.70MB/s。 14. 对于磁盘来说, 扇区的编号方式直接影响磁盘数据的读写时间。 图 9.1 出示的两种扇区编号方式中, 哪一种编号方式可能具有更好的性能? (a) 连续编号 (b) 交叉编号 图 9.1 磁盘扇区编号方式 【分析解答】【分析解答】 交错因子是指每两个连续逻辑扇区之间所间隔的物理扇区数。显然,图 9.1(a)所示的交错因子是 0, 图 9.1(b)所示的交错因子是 2。交错因子是硬盘低级格式化时,需要给定的一个主要参数,具体数值视 硬盘类型而定。交错因子对硬盘的存取速度有很大影响。虽然硬盘的物理扇区在磁道上是连续排列的, 但进行格式化后的逻辑扇区却是交叉排列的,也就是说,连续的物理扇区对应不连续的逻辑扇区。 硬盘每当访问一个逻辑扇区后, 需等待主机将该扇区的输出数据处理完毕后才能进行下一个扇区的 读写。在这个等待过程中,硬盘可能已经转过了几个物理扇区。如果交错因子选择过小,则对应下一个 逻辑扇区的物理扇区已转过磁头,需等待磁盘再转一圈后才能读写;如果交错因子选取过大,则对应下 一个逻辑扇区的物理扇区还未转到磁头处,需要继续等待。因此,选择合适的交错因子,可使当前扇区 到下一个待读写的逻辑扇区之间没有或具有最短的等待时间,从而明显提高硬盘的读写速度。因此,图 9.1(b)中所示的交叉编号方式可能具有更好的性能。 15. 假设一个主频为 1GHz、CPI 为 5 的 CPU 需要从某个成块传送的 I/O 设备读取 1000 字节的数据到 主存缓冲区中,该 I/O 设备一旦启动即按 50kBps 的数据传输率向主机传送 1000 字节数据,每个字节的 读取、处理并存入内存缓冲区需要 1000 个时钟周期,则以下 4 种方式下,在 1000 字节的读取过程中, CPU 用在该设备的 I/O 操作上的时间分别为多少?占整个 CPU 时间的百分比分别是多少? (1)采用定时查询方式,每次处理一个字节,一次状态查询至少需要 60 个时钟周期。 (2)采用独占查询方式,每次处理一个字节,一次状态查询至少需要 60 个时钟周期。 (3)采用中断 I/O 方式,外设每准备好一个字节发送一次中断请求。每次中断响应需要 2 个时钟 周期,中断服务程序的执行需要 1200 个时钟周期。 (4)采用周期挪用 DMA 方式,每挪用一次主存周期处理一个字节,一次 DMA 传送完成 1000 字 节的传送,DMA 初始化和后处理的时间为 2000 个时钟周期,CPU 和 DMA 之间没有访存冲突。 (5)如果设备的速度提高到 5MBps,则上述四种方式中,哪些是不可行的?为什么?对于可行的 方式,计算出 CPU 在该设备 I/O 操作上所用的时间占整个 CPU 时间的百分比。 (6) 如果外设不是成块传送设备, 而是字符型设备, CPU 每处理完一个字节后都要重新启动外设, 外设在启动后 0.02ms 时间准备好一个字节。每个字节的读取、处理(包括启动下次操作)并存入内存 缓冲区还是需要 1000 个时钟周期, 假定 CPU 总是在查询到就绪后立即启动外设或在中断服务程序执行 了 20 条指令后启动外设,则在(1)(3)三种方式下,CPU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论