exam4-作业整理(包含部分统考真题)
H1 概述相关
CPU提速计算
- 答案是D
- 这里把这道题拿过来,主要是因为容易出小错误,速度提升 50 %,不意味着时间变成 50%
- v = v * 3 / 2; t = t * 2 / 3
CPI 与 时间
- 答案是C
- 这里要算时间,CPI * 指令数量 * 指令周期时间
机器字长的寄存器
- 机器字长是指CPU内部用于整数运算的数据通路的宽度
所以必须要有ALU宽度,和通用寄存器宽度 - 答案选B
PFLOPS
P代表 1 0 15 10^{15} 1015,亿就是 1 0 8 10^8 108
冯诺依曼二进制优点
- 答案是D
- 二进制的运算规则简单也是原因
- 两个稳态的物理器件容易
- 逻辑门实现运算简单
区分指令和数据
- 确实如此,取指阶段得到的就是指令,取指令和取数据是根据周期时间区分的
冯诺依曼
- 指令按地址访问,数据都在指令中直接给出
- 错误,因为指令中很多时候包含数据的地址,而不是数据本身
算数与调和平均数
H2 数的表示&校验码
float与int,float与double
在这道题里,我们要看到int的最大表示数字,是 2 31 − 1 2^{31}-1 231−1,写出来是个十位数字,我们要看f到底有多大
- 为什么6位数字??
这里要存疑,我还没找到一个认同的答案
带符号整数比较大小(3个1,4个0的最小整数)
这里要活用补码的真值表示:最高位数是负数,其他是正数
-
比较大小,对负数来说,原码越大,自己绝对值越小&数值越大
float与int互转
-
建议多次重做,容易犯错
A -
好家伙:
注意:一定要E-127,而不是E-128,切记切记
海明码计算,一定要算准
-
建议重做 -
一般不会让人求很长的海明码,这里也是,注意字节分割!!
循环冗余校验
变化的浮点数
- 隐藏的1位数,表示的位数比实际编码多一位?
H3 整数,浮点数运算
溢出判断
-
直接看符号,符号不变就是没有溢出
-
ps:注意int最小值比最大值多一个位置,判断溢出稍微注意
减法的CF/OF
-
CF是无符号数溢出标志,OF是有符号数溢出标志
特殊的浮点数加法
这里要按照它的要求,写成这种特定的浮点数,然后进行对阶,位数运算,规格化,改变了符号就代表需要判定溢出
左规右规
程序中有符号/无符号整数的加减法
没有乘法指令,软件实现乘法
- 当没有乘法的时候,可以借用循环,位移,加法来进行实现
- 控制逻辑可以控制指令跳转,循环等等
计算(n+1)个1的C语言函数
- 好题,但是这里不打算深究
HW4
三种刷新方式
- 集中式刷新
- 每行每行进行刷新,A*B bit的这种芯片,我们需要看用A计算行数
- 异步刷新
- 同样,在特定时间内,每一行都要刷新一次
- 分散刷新
- 这个是固定的: 存取时间 + 刷新时间 = 刷新周期 存取时间 + 刷新时间 = 刷新周期 存取时间+刷新时间=刷新周期
关于随机存取
- RAM,ROM以及各种PROM,EPROM,EEPRO吗都是随机存取的
- 但是CD-ROM这种光盘是顺序存取,还有磁带
flash读写不一致,可以外存(SSD硬盘)
四体交叉编址
-
四体交叉编址出现冲突
- 这个交叉编址,相当于一次拿出来“0 1 2 3”有4个小块,每个小块刻意进行独立访问
- 因此,如果两个地址在序列中是相邻4个,而且存在$Addr\mod 4 $同余,那么就会出现问题
设计行列的地址引脚
- 首先,我们要看到,
2
K
=
2
11
2K=2^{11}
2K=211,因此,行和列一定是一个32,一个64;
但是,为了减小刷新开销,就考虑用更小的行
地址空间被MAR决定
HW5 cache
计算容量???对于那些LRU,FIFO,等有没有区别
HW6 磁盘计算,RAID
对小数的计算,一定要看好小数点
- 最后可能出现,0.1,0.01,这种数量级的数字,一定要写清楚,写好计算
- 看清楚旋转延迟:一方面旋转延迟是一圈的一半,另外看清楚是不是每过一个磁道重新旋转延迟
平均存取时间,考虑了寻道时间和旋转延迟?
考虑间隙的最大数据传输率
- 考虑间隙,去掉间隙
- MB, Mbps一定要区分开
考虑磁头移动磁道的多任务计算(熟悉)
- 首先,这里计算每个磁道大小的时候!注意求出来是500 KB 因为512 * 1K = 1024* 500
- 基本的,算出每个扇区的时间,每一圈的时间,磁头每次从哪里走到哪里这些
磁盘的格式化
- 磁盘的格式化,容量会变小,因为要分成扇区并且写入信息
- 磁盘的最小读写单位是扇区
RAID有效率
10个磁盘,分别有效的是多少容量
- 0: 10
- 1:5(镜像)
- 2:6(海明)
- 3:9(奇偶)
- 4:9
- 5:9
- 6:8(双校验)
RAID 1和5的写入时间
- RAID1,最差情况是1次读写的时间,30ms
- RAID5,最差情况是2次读2次写,120ms
磁盘概率求解
- 这里参考答案有一点问题,倒数第二步写错了,应该更正为
$\frac 1 {N^2} * 2(N\sum_{i=1}{N-1}i-\sum_{i=1}{N-1}i^2) $
HW7 虚拟内存
HW8 指令设计与流水线
指令字长(注意2地址与3地址之间的并用问题)
- 三地址,首先地址就需要29,对应的是5位操作码,但是可以给二地址留下3个
- 二地址,3个剩余的,乘以6位数64,肯定是足够使用的;
- 所以最少23位数,字节编码24位
先变址后间址
- 先变址,那么I取出的数字就加上形式地址,然后再进行间接
变址适合访问数组
- 选B,关键是看清楚十六进制数,以及变址的要求
寄存器可见与不可见
-
汇编程序员能看到 程序计数器,PC
但是看不到MAR,MBR,IR,合理的,毕竟是很动态的 -
汇编程序员一定看不到微指令寄存器,这是非常硬件的部分
但是能看到基址寄存器(用于实现多道程序设计或者编制浮动程序),标志/状态寄存器,还有程序状态字
单周期处理器问题
- 一定不是单总线结构,因为一个时钟内只允许一次总线操作,不能完成所有操作
关于数据通路
- 数据通路包含ALU等 组合逻辑(操作)元件
- 数据通路包含寄存器等 时序逻辑(状态)元件
- 数据通路中的数据流动路径由 控制信号 进行控制
- 数据通路还包括cache,MMU,==异常和中断处理逻辑==等等
硬布线与微程序
- 硬布线:指令的执行速度更快,但是指令功能的修改和扩展比较难
- 微程序:指令的执行速度更慢,但是指令功能的修改和扩展容易
微命令互斥类
- 对每一个分别计算 log 2 ( n + 1 ) \log_2(n+1) log2(n+1),原因是0代表不进行操作
主存储器与控制存储器
- 看看ACD
- 计算机一定按地址访问
流水线计算
- 第一个指令,需要 k tick 进行执行
- 中间的一般指令 1 tick
- 特殊的跳转指令,(k-1) tick
数据冒险判断
数据旁路这种方案,可以解决计算类数据冒险问题,但是不能解决load-use数据冒险问题。
举例来说,A指令和B指令,B指令需要A指令的结果,那么在B进入执行(EX)阶段之前,A需要把它的结果传给B;当A完成EX的时候,正好也是B需要进入EX的时候,这样就可以把ALU的结果直接放到ALU的输入,非常巧妙
那么由此我们也可以看到,load-use问题不能通过数据旁路解决冲突
- 结构冒险,已经进入流水线的不同指令在同一时刻访问相同的硬件资源
- 数据冒险
- 使用nop指令
- 出入bubble
- 数据旁路
- 交换指令顺序(编译器帮忙做)
- 控制冒险
微操作序列
直接看C:(MAR,MBR,还有访存,具体ALU结构看题目)
- MAR <- (IR(address))
- MBR <- Memory
- MAR <- (MBR)
- MBR <- Memory
- Y <- (MBR)
- Z <- (AC) + (Y)
- AC <- (Z)
定长指令,0、1、2地址的指令条数问题(妙)
- 现在有一种模糊的解释,但是大体是懂得的
一共是16位数,可以看做成 4 + 6 + 6,对于2地址来说,它的操作码是前4,对于1地址来说,它的操作码是前10,对于0地址来说,它的操作码是前16
为什么我们的2地址只要占去1个,对1地址和0地址来说就占去了非常多的部分,比如2地址每多一个 0001 0001 0001,就意味着1地址的所有 0001 ? ? ? ? ? ? 0001 \;?????? 0001??????全都变为无效,也就是少了 2 6 2^6 26种可能,同样对于0地址的 0001 ? ? ? ? ? ? ? ? ? ? ? ? 0001\;??????\;?????? 0001????????????也都变得无效;
这样,有了直观上的认识,我们就更好进行计算,假设已知k2, k0, 求k1
k2 对 k1的影响,正如上面所说,是 − 2 6 ∗ k 2 -2^6*k_2 −26∗k2,而 k0 对 k1 的影响,是需要一定的数量才会造成影响,也就是 ⌈ k 0 2 6 ⌉ \lceil \frac{k_0}{2^6} \rceil ⌈26k0⌉的,上取整的原因可以理解,因为一旦占去了某一个就会导致存在二义性
另外我们还可以求出,k0,k2,k1的相关关系
微程序为什么不需要硬布线类似的标志
-
一个指令周期有 4 个主要阶段:取指、间址、执行和中断。硬布线方式实现时,采用一个 2 位的寄 存器来标志当前阶段,但微程序式控制器却不需要类似的标志。请问为什么硬布线式控制器需要这 些标志,而微程序式控制器不需要这些标志?
-
在硬连线式控制器中,当前阶段会作为输入的一部分,用于布尔逻辑式的计算,因此需要采用 2 位 的寄存器来标志当前阶段。 在微程序式控制器中,所有的微指令都存储在控制存储器中,排序逻辑会确定下一条将要执行的微指令,各个阶段之间通过跳转来实现,因此不需要状态标志。
流水线加速比
非常好,考虑到了跳转的情况;
- 牢记:第一条指令,k;一般指令,1;非连续性跳转,(k-1);
寄存器寻址不需要访问主存
神奇的预测分支、状态转移
这道题需要注意的点主要有
- 对于循环,虽然循环了N次,但是要进行(N+1)次分支预测
- 而且对于内层循环来说,它的分支预测进行的是N * (N+1),其中(N+1)是相对于内层来看的
HW9 总线
总线标准有什么
- ISA,EISA,VESA,
PCI,PCI-express,
AGP,USB,RS-232C
芯片内总线/系统总线/通信总线
- 在系统总线的数据线上,不可能传输 握手应答信号
- 但是,可能传输 中断类型号;
突发传输/猝发传输
- 传一个地址,然后可以获得连续的多个数据
- 定义:
在一个总线周期中,可以传输多个存储地址连续的数据,一次传输一个地址,和一批地址连续的数据;
USB总线特性描述
- USB可以实现外设的即插即用和热插拔
- 可以通过级联方式连接多台外设,(比如扩展坞)
- 是一种通信总线,连接不同外设
- 一定是串行传输数据
设备总线与计算机系统局部总线标准
关于多总线结构
- 靠近CPU的总线速度较快(多总线结构,用速率高的总线连接高速设备,是合理的)
- 存储器总线可以支持突发传送方式(显然的,我们已经见到了很多)
- 总线之间需要通过桥接器相连;;
- PCI-Express*16 采用 串行数据包 传输数据(所有的PCI都是串行的)
同步总线,65/35时间的读/写操作还是65/35次数的读写操作
我们从另一个视角来看,如果是65%时间用于读操作,35%时间用于写操作,那么可以看成
t
i
m
e
=
65
t
i
c
k
+
35
t
i
c
k
d
a
t
a
=
(
65
/
t
i
c
k
1
+
35
/
t
i
c
k
2
)
∗
256
b
i
t
s
time=65 tick + 35 tick\;\;\; data =(65/tick_1+35/tick_2)*256bits
time=65tick+35tickdata=(65/tick1+35/tick2)∗256bits
其实从结果上来看,就相当于是直接求加权平均数了。
关键是另一种情况,我们需要求出新的时间,
t
i
c
k
=
65
%
∗
t
i
c
k
1
+
35
%
∗
t
i
c
k
2
tick=65\%*tick_1+35\% * tick_2
tick=65%∗tick1+35%∗tick2
异步总线,看往年卷,很可能考到
HW10 I/O
IO总线的数据线上,可以放什么
- I/O接口中的命令字
- I/O接口中的状态字
- 终端类型号
注意:控制线是CPU用来给端口发送读/写信号的!,上面的像是控制信号,但是对I/O设备的控制信号本质上还是数据,只有对I/O处理器的控制信号才是CPU发出的控制信号
中断隐指令
- 中断隐指令,中断隐指令是指在机器指令系统中没有的指令,它由CPU在中断响应周期内由硬件自动完成
- 要做的事情包括:关中断,保存断点,引出中断服务程序(形成中断服务程序入口并送PC)
- 中断隐指令不会进行通用寄存器保护操作
DMA与中断比较
- DMA可以用于连接多个设备
- DMA响应确实是会发生在总线事务完成之后(因为是DMA完成任务才会报告)
中断占用CPU时间(经典)
-
关键是:这里的数据传输率本身,其实是再告诉你需要中断的次数,然后去求CPU在I/O上花费的时间
-
同样的一道题:
关于DMA启动与结束
- 这里,A是正确的,在周期窃取下,每次准备好就是一个总线请求
在DMA周期窃取下!CPU不会等待DMA准备数据的时间(算起来简单)
不可屏蔽中断(NMI)
- CPU在关中断状态下,还是可以响应NMI请求;
CPU内部产生的异常是内中断,内中断是不可屏蔽中断,关中断也可以运行
DMACPU停止与周期窃取占用总线时长
注意:周期窃取的时候,准备好了才请求总线,所以不要考虑数据的准备时间
为什么DMA优先级高
- 如果处理器被停止访问主存储器,除处理时间延长外不产生其它问题。
- 但 DMA 可能连接 高速数据传输设备,如果不及时获取主存储器的存取权限来及时写入数据,则可能会因 为缓冲区溢出而造成数据丢失。所以,一般 DMA 存取主存储器的优先级会高于处理器。