计算机组成原理期末复习题
控制器:是整个计算机的指挥中心,控制计算机从内存中取出解题步骤( 即指令 )加以分析,然后执行某种操作。
存储器:存放程序和数据的部件,是一个记忆装置,也是计算机能够实现“存储程序控制”的基础。
输入设备:是输入用户提供的原始信息,并且将其转换为计算机能识别的信息。
输出设备:是将计算机的处理结果以能被人们接受的或能为其他计算机所接受的形式输出。
运算器:以二进制为基础完成对信息的加工、处理,其核心是算术逻辑运算部件ALU。
是一种执行部件。
总线:计算机通过总线将五大部件连接起来,总线是它们相互通信的公共通路,主要任务是在各部件之间传送地址信息、数据信息和控制信息。
工作原理:
采用存储程序工作方式:
①事先编制程序(根据问题找算法编程序)
②将程序存储于计算机的存储器中
③计算机在运行时自动地、连续地从存储器中依次取出指令加以执行
以控制流(指令)驱动程序执行,信息流(数据流)被动地被调用处理。
45. 什么是校验码?其基本原理是什么?常用的数据校验码有哪些?
答:数据校验码是一种常用的带有发现某些错误或自动改错能力的数据编码方法。它的实现原理,是加进一些冗余码,使合法数据编码出现某些错误时,就成为非法编码。这样,就可以通过检测编码的合法性来达到发现错误的目的。常用的数据校验码主要有奇偶校验码、海明校验码和循环冗余校验码 。
46. 什么是“寻址方式”?常用的操作数的寻址方式有哪些?
答;指令或操作数地址的指定方式。即:根据地址找到指令或操作数的方法。操作数的寻址通常有立即 / 直接 / 间接 / 寄存器 / 寄存器间接 / 偏移 / 堆栈等,
Cache有哪些特点?
Cache具有如下特点:
位于CPU与主存之间,是存储器层次结构中级别最高的一级。 容量比主存小,目前一般有数KB到数MB。
速度一般比主存快5~10倍,通常由存储速度高的双极型三极管或SRAM组成。
其容量是主存的部分副本。
可用来存放指令,也可用来存放数据。
快存的功能全部由硬件实现,并对程序员透明。
试从记录密度,存储容量,存取速度方面来说明磁表面存储器的相关技术指标。
记录密度
道密度(TPI):磁盘半径方向单位长度包含的磁道数,单位:道/英寸(TPI)或道/毫米(TPM)
位密度(BPI):在每一个磁道内单位长度内所能记录的二进制信息数。
存储容量
存储容量是指整个磁表面存储器所能存储的二进制信息的总量,一般用位或字节为单位表示,它与存储介质尺寸和记录密度直接相关。
非格式化容量是指磁记录表面上可全部利用的磁化单元数
格式化容量是指用户实际可以使用的存储容量。
平均寻址时间Ta
当磁头接到读/写命令,从原来的位置移动到指定位置,并完成读/写操作的时间叫存取时间。平均找道时间tsa+平均等待时间twa
数据传输率:磁表面存储器在单位时间内与主机之间传送数据的位数或字节数。
在异步串行传输系统中,若每个数据帧包含1个起始位,8个数据位,1个奇校验位,1个结束位,比特率160bit/s,画出传输字符“C”(ASCII码为43H)的波形图。
一个典型程序的转换过程:
不同层次语言之间的等价转换
假如某程序P编译后生成的代码由ALU、Load,Store,Branch四类指令组成,它们在程序中所占比例如图所示,已知它们的CPI分别为1,2,2,2,现重新对程序进行编译优化,生成的新目标代码中ALU指令减少了50%,其他类指令条数不变。
(1) 编译优化前后程序的CPI各是多少?
(2) 如果机器的时钟周期为20ns(50MHz时钟频率),则优化前后的MIPS各是多少?
解:优化后各指令所占的新的比例为:
21.5/ (21.5+21+12+24)=27%
21 / (21.5+21+12+24)=27%
12 / (21.5+21+12+24)=15%
24 / (21.5+21+12+24)= 31%
优化前的CPI=143%+221*+212%+224%=1.57
优化后的CPI=127%+227%+215%+231%=1.73
优化前的MIPS=50M/1.57=31.8MIPS
优化后的MIPS=50M/1.73=28.9MIPS
对应的verilog实现代码如下:
module alu_main (a,b,aluc,r,z);
input [31:0] a,b;
input [3:0] aluc;
output [31:0] r;
output z;
wire [31:0] d_and = a & b;
wire [31:0] d_or = a | b;
wire [31:0] d_xor = a ^ b;
wire [31:0] d_lui = {b[15:0],16’h0};
wire [31:0] d_and_or = aluc[2]? d_or : d_and;
wire [31:0] d_xor_lui = aluc[2]? d_lui : d_xor;
wire [31:0] d_as,d_sh;
addsub32 as32 (a,b,aluc[2],d_as);
shift shifter (b,a[4:0],aluc[2],aluc[3],d_sh);
mux4x32 select (d_as,d_and_or,d_xor_lui,d_sh,aluc[1:0],r);
assign z = ~|r;
endmodule
a) 结合图示和代码分析该ALU实现的功能
b) 写出其中多路选择器的实现代码
module mux4x32 (a0,a1,a2,a3,s,y);
input [31:0] a0,a1,a2,a3;
input [1:0] s;
output [31:0] y;
function [31:0] select;
input [31:0] a0,a1,a2,a3;
input [1:0] s;
case (s)
2’b00: select = a0;
2’b01: select = a1;
2’b10: select = a2;
2’b11: select = a3;
endcase
endfunction
assign y = select(a0,a1,a2,a3,s);
endmodule
结合表中MIPS指令格式,将下列MIPS汇编语言转换为对应的机器指令,并说明寄存器PC,r4中数据的变化情况。
假定小端机器中指令:mov AX, 0x12345(BX)
其中操作码mov为40H,寄存器AX和BX的编号分别为0001B和0010B,立即数占32位,则存放顺序为:
若在大端机器上,则存放顺序如何?
(左边为低地址端)
56. 主存和Cache之间直接映射,块大小为16B。Cache的数据区容量为64KB,主存地址为32位,按字节编址。要求:1、说明主存地址如何划分和访存过程。2、Cache有多少行?容量多大?
答案:
若二地址仅7条,则多出:11 111 000~ 111共8条
∴单地址最多可有((23-4)·23-7)· 23=200条
其连接图如下:
设某机主存容量为4MB,Cache容量为16KB,每块包含8个字,每字32位,设计一个四路组相联映像(即Cache每组内共有四个块)的Cache组织,要求:
画出主存地址字段中各段的位数。 设Cache的初态为空,CPU需依次从主存第0,1,2,……,9)号单元读出100个字(主存一次读出一个字。),并重复按此次序读8次,问命中率是多少?
[解]
(1)主存容量为4MB,按字编址,所以主存地址为20位,地址格式如下所示:
区号 (8位) 组号 (7位) 组内块号 (2位) 块内地址 (5位)
(2)Cache的地址格式为
组号 (7位) 组内块号 (2位) 块内地址 (5位)
主存第0,1,2,……,99号单元在第0区第012组中,被映射到Cache的第012组中,不存在映射时的组冲突。
由于Cache起始为空,所以第一遍读时每一块中的第一个单元没命中(此时要把该块的8个字都调入Cache,这样CPU之后再读该块的其它单元就会命中(未考虑块调入过程)),
而后面七遍读取时每个单元均可以命中。
命中率 = Nc/(Nc+Nm)= (100-13 + 7×100) / (8×100) =98.4%
磁盘组有6片磁盘,每片有两个记录面,最上最下两面不用。存储区域内直径22cm,外直径33cm,道密度为40道/cm,内层位密度400位/cm,转速2400转/分,问:(分)
1)、共有多少柱面?
2)、盘组总存储容量是多少?
3)、数据传输率多少?
4)、如果某文件长度超过一个磁道的容量,应将它记录在同一个存储面上,还是记录在同一个柱面上?
解:
1、有效存储区域= 33/2-22/2 = 16.5-11 = 5.5cm
柱面数=道密度有效区域=40道/cm5.5cm=220道,即220个圆柱面。
2、内道周长=3.1422=69.08cm
道信息量N=400位/cm69.08cm=27632位=3454B
面信息量=3454B220=759880B
盘组容量=759880B10=7598800B≈7.25MB
3、磁盘数据传输率=转数r*道容量N=(2400转/60秒)3454B=403454=13816B/S=13.492K/S
4、记录在同一个柱面上,因为不需要重新找道,数据读写速度快。
以IEEE754单精度浮点数格式表示十进制数–1/8,
–1/8 = –0.125 = –0.001B = –1.0 ×2–3,阶码为–3+127 = 01111100B,数符为1,尾数为1.0…0,所以–1/8表示为1 01111100 000 0000 0000 0000 0000 0000,用十六进制表示为BE000000H。
在IEEE 754浮点数运算中,如何判断浮点运算的结果是否溢出?
浮点运算结果是否溢出,并不以尾数溢出来判断,而主要看阶码是否溢出。尾数溢出时,可通过右规操作进行纠正。阶码上溢时,说明结果的数值太大,无法表示;阶码下溢时,说明结果数值太小,可以把结果近似为0。
在进行对阶、规格化、舍入和浮点数的乘/除运算等过程中,都需要对阶码进行加、减运算,可能会发生阶码上溢或阶码下溢,因此,必须对阶码进行溢出判断。
假定一个存储器系统支持4体交叉存取,某程序执行过程中访问地址序列为3, 9, 17, 2, 51, 37, 13, 4, 8, 41, 67, 10,则哪些地址访问会发生体冲突?
解:
对于4体交叉访问的存储系统,每个存储模块的地址分布为:
Bank0: 0、4、8、12、16 … …
Bank1: 1、5、9、13、17…37…41…
Bank2: 2、6、10、14、18 … …
Bank3: 3、7、11、15、19…51…67
如果给定的访存地址在相邻的4次访问中出现在同一个Bank内,就会发生访存冲突。所以,17和9、37和17、13和37、8和4发生冲突。
假定某机主存空间大小1GB,按字节编址。cache的数据区(即不包括标记、有效位等存储区)有64KB,块大小为128字节,采用直接映射和全写(write-through)方式。请问:
(1)主存地址如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。
(2)cache的总容量为多少位?
参考答案:
(1)主存空间大小为1GB,按字节编址,说明主存地址为30位。cache共有64KB/128B=512行,因此,行索引(行号)为9位;块大小128字节,说明块内地址为7位。因此,30位主存地址中,高14位为标志(Tag);中间9位为行索引;低7位为块内地址。
(2)因为采用直接映射,所以cache中无需替换算法所需控制位,全写方式下也无需修改(dirty)位,而标志位和有效位总是必须有的,所以,cache总容量为512×(128×8+14+1)=519.5K位。
某计算机字长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
指令格式2:
寻址方式字段(2位)----00:立即;01:寄直;10:寄间;11-变址
68. 假定一个程序重复完成将磁盘上一个4KB的数据块读出,进行相应处理后,写回到磁盘的另外一个数据区。各数据块内信息在磁盘上连续存放,并随机地位于磁盘的一个磁道上。磁盘转速为7200RPM,平均寻道时间为10ms,磁盘最大数据传输率为40MBps,磁盘控制器的开销为2ms,没有其他程序使用磁盘和处理器,并且磁盘读写操作和磁盘数据的处理时间不重叠。若程序对磁盘数据的处理需要20000个时钟周期,处理器时钟频率为500MHz,则该程序完成一次数据块“读出-处理-写回”操作所需的时间为多少?每秒钟可以完成多少次这样的数据块操作?
参考答案:
平均旋转等待时间:(1s / (7200/60)) / 2 ≈ 8.33/2 ≈ 4.17ms
因为块内信息连续存放,所以数据传输时间:4KB / 40MBps ≈ 0.1ms
平均存取时间T :寻道时间+ 旋转等待时间+ 数据传输时间
= 10ms + 4.17ms + 0.1ms = 14.27ms
读出时间(写回时间):14.27ms+2ms = 16.27ms
数据块的处理时间:20000 / 500MHz ≈ 0.04ms
因为数据块随机存放在某个磁道上,所以,每个数据块的“读出-处理-写回”操作时间都是相同的,所以完成一次操作时间:16.27msx2+0.04ms = 32.58ms
每秒中可以完成这样的数据块操作次数:1s / 32.58ms ≈ 30次
69. 假定某计算机的CPU主频为500MHz,所连接的某个外设的最大数据传输率为20KBps,该外设接口中有一个16位的数据缓存器,相应的中断服务程序的执行时间为500个时钟周期,则是否可以用中断方式进行该外设的输入输出?假定该外设的最大数据传输率改为2MBps,则是否可以用中断方式进行该外设的输入输出?
参考答案:
(1)外设最大传输率为20KBps
每传输完16位进行一次中断处理,因此一秒钟内的中断次数为:20K/2=10K次
中断响应过程就是执行一条隐指令的过程,所用时间相对于中断处理时间(即执行中断服务程序的时间)而言,几乎可以忽略不计,因而整个中断响应并处理的时间大约:(1s / 500MHz)x500=1µs
一秒钟内的中断服务程序执行要用去10K x 1µs = 10ms<< 1s
所以可以用中断方式进行该外设的输入输出。
(2)外设最大传输率为2MBps
每传输完16位进行一次中断处理,因此一秒钟内的中断次数为:2M/2=1M次
一秒钟内的中断服务程序执行要用去1M x 1µs = 1s!
所以不可以用中断方式进行该外设的输入输出。
70. 若某计算机有5级中断,中断响应优先级为1>2>3>4>5,而中断处理优先级为1>4>5>2>3。要求:
(1)设计各级中断处理程序的中断屏蔽位(假设1为屏蔽,0为开放);
(2)若在运行主程序时,同时出现第2、4级中断请求,而在处理第2级中断过程中,又同时出现1、3、5级中断请求,试画出此程序运行过程示意图。
参考答案:
(1)1级中断的处理优先级最高,说明1级中断对其他所有中断都屏蔽,其屏蔽字为全1;3级中断的处理优先级最低,所以除了3级中断本身之外,对其他中断全都开放,其屏蔽字为00100。以此类推,得到所有中断屏蔽字:
(2)程序运行过程示意图