1.下列函数的时间复杂度是______.
int func(int n){
int i=0,sum=0;
while(sum
A.O(log n) B.O(n^1/2) C.O(n) D.O(nlog n)
解答:B
循环里面的内容为 1~x 求和,求和结果为 sum=(1+x)x/2,结束条件是 sum>=n,因此时间复杂度是 O(n^(1/2)),选 B
2.下列关于栈的叙述中,错误的是______.
I.采用非递归方式重写递归程序必须使用栈
II.函数调用时,系统要用栈保存必要信息
III.只要确定了入栈次序,就可确定出栈次序
IV.栈是一种受限的线性表,允许在其两端进行操作
A.I B.I,II,III C.I,III,IV D.II,III,IV
解答:C
I 错误,如 斐波那契数列,可用递归解决,也可采用动态规划,后者不需要用栈
II.正确
III.错误
IV 错误,栈只允许在一端进行操作。
3.适用于压缩存储稀疏矩阵的两种存储结构是______.
A.三元组表和十字链表 B.三元组表和邻接矩阵
C.十字链表和二叉链表 D.邻接矩阵和十字链表
解答:A
三元组表的节点存储 行,列,值三种信息。
十字链表将行单链表与列单链表组合。
二叉链表又名左孩子右兄弟表示法,可用于表示数和森林。
4.要是一颗非空二叉树的先序序列和中序序列相同,其所有非叶节点需满足的条件是____.
A.只有左子树 B.只有右子树 C.节点的度均为1 D.节点的度均为 2
解答:B
5.已知一颗二叉树的树形如右图所示,其后序序列为e,a,c,b,d,g,f,树中与节点 a 同层的节点是______.
A.c B.d C.f D.g
解答:B
各节点从上至下,从左至右依次为 f,c、g,a、d,e、b,因此在同一层的是d
6.已知字符集{a,b,c,d,e,f,g,h},若各字符的哈夫曼编码依次是 0100,10,0000,0101,001,011,11,0001,则编码序号 0100011001001011110101 的译码结果是____
A. a c g a b f h B.a d b a g b b C.a f b e a g d D.a f e e f g d
解答:D
0100 011 001 001 011 11 0101
a f e e f g d
7.已知无向图 G 含有 16 条边,其中度为 4 的顶点个数是 3,度为 3 的顶点个数是 4,其他节点的度均小于 3,图 G 中所含顶点个数至少是_____.
A.10 B.11 C.13 D.15
解答:B
无向图边数的两倍为各顶点度数之和。其他节点的度设为 x(x<3),个数为 y。则有 4*3+4*3+xy=16*2 => xy=8,当 x 为 2 时,y最小为 4,此时节点总和为3+4+4=11.
8.下列二叉树中,可能成为折半查找判定树(不包含外部节点)的是_____.
解答:A
折半查找判定树向上或向下取整皆可,但只能选一个。表现在图中即为所有节点要么左子树节点个数大于等于右子树节点个数,要么左子树节点个数小于等于右子树节点个数。
B中中间两个叶子节点的父节点 一个左子树节点个数大于右子树,一个右子树节点个数大于左子树。
C中根节点左右子节点 的左右子树节点个数规律不一致
D中根节点与其左子节点规律不一致
9.下列应用中,适合使用 B+ 树的是____
A.编译器中的词法分析 B.关系数据库系统中的索引
C.网络中的路由快速查找 D.操作系统的磁盘空闲块管理
解答:B
相较于 B数,B+数磁盘读写代价更低,查询效率更稳定。
编译器中的词法分析使用有穷自动机(类似有向图)和语法树。
网络中的路由快速查找主要靠高速缓存,路由表压缩技术和快速查找算法。
操作系统的磁盘空闲块管理一般使用空闲空间链表
10.在内部排序 中,若采用了归并排序而没有选择插入排序,则可能的理由是______
I.归并排序的程序代码更短
II.归并排序占用空间更小
IV.归并排序运行效率更高
A.II B.III C.I,II D.I,III
解答:B
归并排序空间复杂度是 O(n),时间复杂度是 O(nlogn);选择插入排序时间复杂度是O(n^2),空间复杂度是 O(1)
11.下列排序方法中,若将顺序 存储更换为链式存储,则算法的时间效率会降低的是____.
I.插入排序 II.选择排序 III.起泡排序 IV.希尔排序 V.堆排序
A.I,II B.II,III C.III,IV D.IV,IV
解答:D
希尔排序(当增量为 x 时,获得第 2x 个元素)和堆排序(第 x 轮,将根首个元素与倒数第 x个元素互换)利用了随机访问特性,因此更换后时间效率降低。
12.假定计算机 M1 和 M2 具有相同的指令集体系结构(ISA),主频分别为 1.5GHz 和 1.2GHz。在 M1 和 M2 上 运行某基准程序 P,若平均 CPI 分别为 2 和 1,则程序 P 在 M1 和 M2 上运行时间的比值是_____.
A.0.4 B.0.625 C.1.6 D.2.5
解答: C
若 P 有 1条指令,则在 M1 上的运行时间为 2/1.5G,在 M2 上的运行时间为 1/1.2G,其比值为 2.4/1.5=1.6
13.某计算机主存按字节编址,由 4 个 64M*8 的位的 DRAM 芯片采用交叉编址方式构成,并与宽度为 32 位的存储器总线相连,主存每次最多读写 32 位数据。若 double 型变量 x 的主存地址为 804 001AH,则读取 x 需要的存取周期数为____.
A.1 B.2 C.3 D.4
解答:C
主存每次最多读写 32 位数据,double 型变量有 64 位,主存地址最低两位 为 10,因此从编号为 2 的DRAM 芯片开始读取,读取 x 需要 3 个存取周期。以 12345678H 为例,第一个周期度 12H,芯片编号为 2,3。第二个周期读 3456H,芯片编号为 0,1,2,3.第三个周期读 78H,芯片编号为 78H。
14.某 c 语言程序段如下:
for(int i=0;i<=9;i++){
temp=1;
for(int j=0;j<=i;j++){
temp*=a[j];
}
sum+=temp;
}
下列关于数组 a 的访问局部性中的描述中,正确的是_____.
A.时间局部性 和空间局部性都有 B.无时间局部性,有空间局部性
C.有时间局部性,无空间局部性 D.时间局部性和空间局部性均无
解答:A
时间局部性,一个指令在被访问过后,短时间很可能被再次访问。
空间局部性,一个存储单元在被访问过后,短时间内很可能再次访问该数据或其相邻数据。
15.下列寻址方式中,最适合按下标顺序访问一维数组元素的是_____.
A.相对寻址 B.寄存器寻址 C.直接寻址 D.变址寻址
解答:D
相对寻址,相对于当前位置进行偏移,相对值通过程序中指令中的地址和当前指令的地址得到。(多数情况下相对当前指令的地址进行偏移,因此不是相对寻址)。
寄存器寻址,使用CPU 中的寄存器来存储操作数或指令的地址。
直接寻址,直接使用指令中的地址字段作为操作数的地址。
变址寻址,操作数地址=基址寄存器+变址寄存器。基址寄存器存储某个内存区域的起始地址,变址寄存器存放偏移量。
一维数组地址空间连续,因此选用变址寻址。
16.某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令 29 条,二地址指令 107 条,每个地址长度为 6 位,则指令字长至少应该是________.
A.24 位 B.26位 C.28 位 D.32 位
解答:A
三地址指令有 29 条,因此需要 5 位来表示操作码。
假设有 5 位操作码,6*3 即 18 位表示地址。5 位可以表示 32 个操作码,三地址指令剩余 3 个操作码未用,可用来表示二地址指令的操作码。二地址指令比三地址指令少一个地址,因此可以空出一个地址 6位 用来表示操作码,6 位最多可以表示 64 条指令。因此时可表示的操作码数量为 3*64=192,超出二地址指令条数,因此可用,此时有 5 位操作码,18 位地址,共 23 位,因此结果位 24 位(长度为 8 的倍数)。
17.下列关于超标量流水线特性的叙述中,正确的是_____.
I.能缩短流水线功能段的处理时间
II.能在一个时钟周期内同时发射多条指令
III.能结合动态调用技术提高指令执行并行性
A.II B.I,III C.II,III D.I,II,III
解答:B
超标量流水线,一个处理器中有多个流水线。
18.下列关于主存储器 MM 和控制存储器 CS 的叙述中,错误的是_____.
A.MM 在 CPU 外,CS 在 CPU 内
B.MM 按地址访问,CS 按内容访问
C.MM 存储指令和数据,CS 存储微指令
D.MM 用 ROM 和 RAM 实现,CS 用 ROM 实现
解答:B
19.下列关于指令流水线数据通路部分的叙述中,错误的是_____.
A.包含生成控制信号的控制部件 B.包含算数逻辑运算部件 ALU
C.包含通用寄存器组和取值部件 D.由 组合逻辑电路和时序逻辑电路组合而成
解答:A
指令流水线:取值,译码/取数,执行,存储器读,写回。
数据通路:数字系统中,各个子系统通过数据总线连接形成的数据传送路径称为数据通路。
20.下列关于多总线结构的叙述中,错误的是_____
A.靠近CPU 的总线速度较快 B.存储器总线可支持突发传送模式
C.总线之间通过桥接器相连 D.PC I-Express*16 采用并行传输方式
解答:D
多总线结构用速度高的总线连接高速设备,用速度低的总线连接低速设备,CPU 是计算机速度最快的部件之一,因此 A 正确。
PC I-Express 采用串行数据包传输模式。D错误。
21.I/O 指令实现的数据传送通常发生在______
A. I/O 设备与 I/O 端口之间 B.通用寄存器与 I/O 设备之间
C.I/O 端口与 I/O 端口之间 D.通用寄存器与 I/O 端口之间
解答:D
执行一条指令时,CPU 使用地址总线选择所请求的 I/O 端口,使用数据总线在 CPU 寄存器和端口之间传输数据。
22.下列关于多重中断系统的叙述中,错误的是______
A.在一条指令执行结束时响应中断
B.中断处理期间 CPU 处于关中断状态
C.中断请求的产生与当前指令的执行无关
D.CPU 通过采样中断请求信号检测中断请求
解答:B
多重中断系统:计算机在执行程序过程中,可以同时处理多个中断请求。
处理中断期间CPU 处于开中断状态,处理完毕后处于开中断状态。
23.假设 4 个作业到达系统的时刻和运行时间如下表所示。
作业 | 到达时刻t | 运行时间 |
J1 | 0 | 3 |
J2 | 1 | 3 |
J3 | 1 | 2 |
J4 | 3 | 1 |
系统在 t=2 时开始作业调度,若分别采用先来先服务和短作业优先调度算法,则选中的作业分别是_____
A.J2,J3 B.J1,J4 C.J2,J4 D.J1,J3
解答:D
先来先服务 FCFS(First Come,First Served)
短作业优先调度算法 SJF (shortest job first)
24.执行系统调用的过程主要包括如下操作:
I.返回用户态 II.执行陷入(trap)指令
III.传递系统调用参数 IV.执行相应的服务程序
则其顺序为_____.
A.II,III,I,IV B.II,IV,I,III C.III,II,IV,I D.III,IV,II,I
解答:C
陷入指令负责将用户态转化为内核态。
25.某计算机按字节编址,其动态分区内存管理采用最佳适应算法,每次分配和回收内存后都对空闲分区链重新排序。当前空闲 分区信息如下表所示。
分区起始地址 | 20K | 500K | 1000K | 200K |
分区大小 | 40KB | 80KB | 100KB | 200KB |
回收起始地址为 60K,大小为 140K的分区后,系统中空闲分区的数量、空闲分区链的第一个分区的起始地址和大小分别是_____.
A.3,20K,380KB B.3,500K,80KB C.4,20K,180KB D.4,500K,80KB
解答:B
起始地址为 60K ,大小为 140K 刚好与第一个分区和第四个分区相连,合并后分区起始地址为 20K,分区大小为 40KB+140KB+200KB=380KB。合并后,只剩下三个分区,按分区大小从小到大 排序(最佳适应算法),因此 合并后的分区排在第三个,结果为 B。
26.某文件系统的簇和磁盘扇区的大小分别为 1KB 和 512B。若一个文件大小为1026B,则系统分配给给该文件的磁盘空间大小为_____.
A.1026B B.1536B C.1538B D.2048B
解答:D
绝大多数操作系统为改善磁盘访问时间,以簇为大小进行磁盘分配。文件大小为 1026B,在1KB 和 2KB 之间,因此分配两个簇,即 2048B。
27.下列有关基于时间片的进程调度的叙述中,错误的是______.
A.时间片越短,进程切换的次数越多,系统开销越大
B.当进程的时间片用完后,该进程的状态由执行态变为阻塞态
C.时钟中断发生后,系统会修改当前进程在时间片内的剩余时间
D.影响时间片大小的主要音速包括响应时间,系统开销和进程数量。
解答:B
B项,进程的时间片用完有,进程的状态变为就绪态
C项,时钟中断由计算机内部的计时器生成,用于在固定的时间间隔内触发处理器去执行相应的中断处理程序。可用于实现定时任务、时间戳等功能。同时也可以协助主程序完成定时、延时等操作。操作系统通过时钟中断来确定时间间隔,实现时间的延时和任务的超时。
28.与单道程序系统相比,多道程序系统的优点是_____
I.CPU 利用率高 II.系统开销小
III.系统吞吐量大 IV.I/O 设备利用率高
A.I,III B.I,IV C.II,III D.I,III,IV
解答:D
单道程序系统中只有一个程序进入在内存中运行,只有当这个程序运行结束后,才会加载下一个程序到内存中。而多道程序系统允许多个程序同时进入内存。
多道程序系统需要额外的开销来组织作业和 切换作业,因此多道程序系统的开销较大
29.下列选项中,磁盘逻辑格式化程序所做的工作是_____.
I.对磁盘进行分区 II.建立文件系统的根目录
III.确定磁盘扇区校验码所占位数 IV.对保存空闲磁盘块信息的数据结构进行初始化
A.II B.II,IV C.III,IV D.I,II,IV
解答:B
I 逻辑格式化指创建文件系统的过程,在逻辑格式化开始时,磁盘分区已结束,I错误。
III 是物理格式化(低级格式化)的工作
30.某文件系统中,针对每个文件,用户类型分为 4 类:安全管理员,文件主,文件主的伙伴,其他用户;访问权限分为 5 种:完全控制,执行,修改,读取,写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应该是______.
A.5 B.9 C.12 D.20
解答:A
4 类用户,每类用户需记录 5 种权限 即需要 5 位,因此一共需要 5*4=20 位。这里是记录各个用户的权限,而不是某个用户的权限。
31.若文件 f1 的硬链接为文件 f2,两个进程分别打开 f1 和 f2,获得对应的文件描述符为 fd1 和 fd2,则下列叙述中,正确的是______.
I.f1 和 f2 读写指针位置保持相同
II.f1 和 f2 共享同一个内存索引节点
III.fd1 和 fd2 分别指向各自的用户打开文件表中的一项
A.III B.II,III C.I,II D.I,II,III
解答:B
一个文件在物理存储器上有一个索引节点号,硬链接本质上是一个文件,因此 f1 和 f2 共享同一个内存索引节点。II正确
两个进程各自维护自己的文件描述符,因此 III 正确,I 错误。
32.系统将数据从磁盘读到内存的过程包括以下操作:
I DMA 控制器发出中断请求 II初始化 DMA 控制器并启动磁盘
III 从磁盘传输一块数据到内存缓冲区 IV执行 “DMA 结束” 中断服务程序
正确的执行顺序为____
A.III,I,II,IV B.II,III,I,IV C.II,I,III,IV D.I,II,IV,III
解答:B
在开始 DMA 传输时,主机向内存写入 DMA 命令块,向 DMA 命令块写入该命令快的地址,启动 I/O 设备。然后 CPU 继续其他工作,DMA 控制器则继续下去直接操作内存总线,将地址放到总线上开始传输。当整个传输完成后,DMA 控制器中断 CPU。
33.假设 OSI 参考模型的应用层欲发送 400B 的数据(无拆分),除物理层和应用层之外,其他各层在封装 PDU 时均引入 20B 额外开销,则应用层数据传输效率为_____.
A.80% B.83% C.87% D.91%
解答:A
OSI 模型有 7 层,有 5 层引入额外开销,因此共需引入 5*20B=100B 的额外开销。因此传输效率为 400/500=80%。选 A
PDU,协议数据单元。
34.若信道在无噪声情况下的极限传输速率不小于信噪比为 30dB 条件下的极限数据传输速率,则信号状态数至少是________.
A.4 B.8 C.16 D.32
解答:D
信噪比为 30dB 即 30=10logS/N ,S/N=1000,则此时的极限数据传输速率为Rmax=B*log2(1+S/N)(香农第二定理)。
在无噪声情况下,极限传输速率 Rmax=2Blog2(V).
则 2Blog2V>=Blog2(1+S/N)
V^2>=1001,V约为 32,选 D
35.在下图所示网络中,若主机 H 发送一个封装访问 Internet 的 IP 分组的 IEEE 802.11 数据帧 F,则帧 F 的地址 1,地址 2 和地址 3 分别是_____.
A.00-12-34-56-78-9a,00-12-34-56-78-9b,00-12-34-56-78-9c
B.00-12-34-56-78-9b,00-12-34-56-78-9a,00-12-34-56-78-9c
C.00-12-34-56-78-9b,00-12-34-56-78-9c,00-12-34-56-78-9a
D.00-12-34-56-78-9a,00-12-34-56-78-9c,00-12-34-56-78-9b
解答:B
IEEE 802.11——无限局域网通信标准。
IEEE 802.11 数据帧有四种子类型。IBBS(独立基本服务集),From AP(来自 AP),To AP(到 AP),WDS(无限分布式系统)。
地址1 | 地址2 | 地址3 | |
From AP | 目的地址 | AP 地址 | 源地址 |
To AP | AP 地址 | 源地址 | 目的地址 |
36.下列 IP 地址中,只能作为 IP 分组的源 IP 地址但不能作为目的 IP 地址的是______.
A.0.0.0.0 B.127.0.0.1 C.200.10.10.3 D.255.255.255.255
解答:
0.0.0.0 可标识本机在本网络上的源地址。
127.0.0.1 为回送地址。
200.10.10.3 是 C类地址
255.255.255.255 是广播地址。
37.直接封装 RIP 、OSPF、BGP 报文的协议是_____.
A.TCP,UDP,IP B.TCP,IP,UDP C.UDP,TCP,IP D.UDP,IP,TCP
解答:D
RIP 路由信息协议,使用距离矢量算法,工作在网络层,通过广播 UDP 来交换路由信息。
OSPF 开放路劲最短优先,是一个内部网关传输协议,直接用 IP 封装。
BGP 外部网关协议,使用TCP 封装数据,工作在应用层。
38.若将网络 21.3.0.0/16 划分为 128 个规模相同的子网,每个子网可分配最大 IP 地址个数是_____.
A.254 B.256 C.510 D.512
解答:C
128 需要 7 位来表示,因此有 32-16-7 = 9 位来表示 IP 地址个数,全 0 和全 1 不能使用,因此最大 IP 地址个数位 2^9-2=510,选C
39.若甲向 乙发起一个 TCP 连接,最大段长 MSS=1KB,RTT=5ms,乙开辟的接收缓存位 64KB,则甲从连接建立成功至发送窗口大小为 32 KB,需经过的时间至少为______.
A.25ms B.30ms C.160ms D.165ms
解答:A
当 32KB 仍然未超过慢开始门限时,经过的时间最短 ,此时发送窗口大小的变化为1,2,4,8,16,32,经过 5*5ms=25ms
40.下列关于 FTP 协议的叙述中,错误的是_____.
A.数据连接在每次数据传输完毕后就关闭
B.控制连接在整个会话期间保持打开状态
C.服务器与客户端的 TCP 20 端口建立数据连接
D.服务器与客户端的 TCP 21 端口建立控制连接
解答:C
FTP 文件传输协议,是一种用于在网络上传输文件的标准协议,工作在应用层。FTP 使用控制连接和数据连接,控制连接存在于整个 FTP 会话过程,数据连接仅在数据传输时建立,传输完成就关闭。默认情况下,FTP 协议使用 TCP 端口中的 20(传输数据) 和 21(传输控制信息) 号端口。但是是否使用 TCP 20 端口与FTP 的传输模式有关,主动模式中,数据传输端口为 20,被动模式中,有服务器和客户端协调。
41.(15 分)请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时,输出的中缀表达式分别为 (a+b)*(c*(-d)) 和 (a*b)+(-(c-d)).
二叉树节点定义如下:
typedef struct node{
char data[10]; //存操作数或操作符
struct node *left,*right;
}BTree;
要求:
(1)给出算法的基本设计思想
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
解答:(1)中序遍历是按要求嵌套括号即可。按层遍历,拼接根节点左子树转化为的字符串,根节点操作符和根节点右子树转化为的字符。
(2)
// 写得代码有点小问题,但是懒得修改了
public Solution{
public:
string func(TreeNode* root){
string res;
if(root==nullptr){
return res;
}
string left=func(root->left); //获得左子树转化的字符串
res+=modify(left);
for(int i=0;i<10;i++){ // 将该节点数据或字符添加至其中
if(root->data[i]=='\0'){
break;
}
res+=root->data[i];
}
string right=func(root->right); //获得右子树转化的字符串
res+=modify(right);
cout<1){ // 若是多项式,添加括弧
return "("+str+")";
}else{ //若只有一个字符,不添加括弧
return str;
}
}
}
42.(8 分)使用 Prim (普里姆)算法求带权连通图得最小(代价)生成树(MST)。请回答以下问题。
(1)对于下列图 G,从顶点 A 开始求 G 的 MST,依次给出按算法选出的边。
(2)图 G 的 MST 是唯一的吗?
(3) 对任意的带权连接图,满足什么条件时,其 MST 唯一
知识点:Kruskal (克鲁斯卡尔)算法,将权重最小且有两个个顶点在不同集合中的边添加到 MST 中。
Prim(普里姆)算法,将不在最小生成树中并且到最小生成树中任意节点最近的节点添加到MST 中。
解答:(1)AD,ED,CE,BC
(2)唯一
(3)当带权连通图中任意一个环所包含的边的权值均不相同时,其 MST 唯一。
43. 已知 (n+1 位1),计算 f(n) 的 C 语言函数 f1 如下所示:
int f1(unsigned n){
int sum=1,power=1;
for(unsigned i=0;i<=n-1;i++){
power*=2;
sum+=power;
}
return sum;
}
将 f1 中的 int 都改为 float,可得到 f(n) 的另一个函数 f2。假设 unsigned 和 int 都占 32 位,float 采用 IEEE 754 单精度标准。请回答以下问题:
(1)当 n=0 时,f1 会出现死循环,为什么?若将 f1 中的 i 和 n 都定义为 int 型,则 f1 是否会出现死循环?为什么?
(2)f1(23) 和 f2(23) 的返回值是否相等?机器数各是什么?
(3)f1(24) 和 f2(24) 的返回值分别为 33 554 431 和 33 554 432.0,为什么不相等?
(4)f(31)=2^32-1,而 f1(31) 的返回值却为 -1,为什么?若使 f1(n) 的返回值与 f(n) 相等,最大的 n 是多少?
(5)f2(127) 的机器数为 7F80 0000H,对应的值是什么?若使 f2(n) 的结果不溢出,则最大的 n 是多少?若是 f2(n) 的结果精确(无舍入),则最大的 n 是多少?
解答:(1)n 的类型为 unsigned,当 n 为0 时, n-1 的计算结果为 2^32-1;当 i 的值为 2^32-1 时,循环判断条件成立,再加一会溢出,即i 重新变为 0,因此无论 i 累加多少次,判断条件总是成立,也即 f1 会出现死循环。
若将 f1 中的 i 和 n 都定义为 int 型,f1 不会出现 死循环。当 n 为 0 时,n-1 的计算结果为 -1,i 恒大于 n-1。
(2)相等,f1(23) 的机器数为 0000 0000 1111 1111 1111 1111 1111 1111B 即 00FF FFFFH,f2(23) 的机器数为 0100 1011 0111 1111 1111 1111 1111 1111 即 4B8F FFFFH。
(3)f1(24) 的计算结果未超出 unsigned 正常表示范围,因此其机器数为正常的计算结果;对于 f2(24) 而言,使用IEEE 754 单精度表示法,小数部分只有 23 位,最多表示 24 位 1,而正常计算结果有 25 位 1,最低位 1 被舍去并进1,因此返回值不相等。
(4)f1(31) 的计算结果为 32 位 全 1,在 unsigned 类型中 2^32-1,int 类型该值表示位 -1.
若使 f1(n) 的值与 f(n) 的值相等,最大的 n 为 30.
(5)IEEE 754 标准用 阶数全 1 ,尾数全 0 表示 无穷大。f2 的返回值为 float 型,机器数 7F80 0000H 对应的值为 正无穷大。
若使 f2(n) 的结果不溢出,最大的 n 为 126。
若使 f2(n) 的结果精确,则最大的 n 为 23.
44.(10 分)在按字节编址的计算机 M 上,题 43 中 f1 的部分源程序(第三行至第 7 行)与对应的机器级代码(包括指令的虚拟地址)如下图所示。
其中,机器级代码包括行号、虚拟地址、机器指令和汇编指令。请回答以下问题
(1)计算机 M 是 RISC 还是 CISC?为什么?
(2)f1 的机器指令代码共占多少字节?要求给出计算过程
(3)第 20 条指令 cmp 通过 i 减 n-1 实现对 i 和 n-1 的比较。执行 f1(0) 的过程中,当 i=0 时,cmp 执行执行后,进/借位标志 CF 的内容是多少?要求给出计算过程。
(4)第 23 条指令 shl 通过左移操作实现了 power*2 运算,在 f2 中能否也用 shl 执行实现 power*2?为什么?
知识点:RISC-精简指令计算集 CISC-复杂指令计算集
解答:(1) RISC 指令长短一致,因此是CISC
(2)f1 代码首地址为 00401020H,代码尾地址为0040107FH,因此攻占 0040107FH-00401020H+1H= 60HB= 96B
(3)CF 的值 为 1.
i 的值为 0 即 0000 0000H,n-1 的值为 2^32-1 即 FFFF FFFFH,实际操作时,为 0000 0000H+0000 0001H=0000 0001H。此时,进位 C=0,借位标志 CF=C^1=1.
(4)不能。浮点数 讲 32 位分为不同的部分,意义各不相同,整体左移不能实现 *2.
45.(7 分)假定题 44 给出的计算机M 采用二级分页存储管理方式,虚拟地址格式如下:
页目录号(10位) | 页表索引(10位) | 页内偏移量(12位) |
请针对题 43 的函数 f1 和题 44 中的机器指令代码,回答下列问题。
(1)函数 f1 的机器指令代码占多少页?
(2)取第 1 条指令(push ebp)时,若在进制变换过程中需要访问内存中的页目录和页表,则会分别访问他们各自的第几个表项(编号从 0 开始)?
(3)M 的 I/O 采用中断控制方式。若进程 P 在调用 f1 之前通过 scanf() 获取 n 的值,则在执行 scanf() 的过程中,进程 P 的状态会如何变化?CPU 是否会进入内核态?
解答:(1)业内偏移量有 12 位,因此一页有 2^12 个地址,按字节编址,即每个地址 8 位,因此一页有 2^12B>96B,因此占 1 页。(虚拟地址高 20 位相同,因此只占 1 页)
(2)push ebp 的虚拟地址为 00401020H,页目录号为 00 0000 0001B 即 1, 页表索引为00 0000 00001B 即 1,访问了 页目录的第一个表项,页表的第一个表项。
(3)执行 scanf() 时,P 首先由 就绪态变为 阻塞态;在输入 n 后,P 由阻塞态变为就绪态,P 被调度程序调度后,变为执行态。
会。
46.某进程由 3 个并发执行的线程 thread1,thread2 和 thread 3。其伪代码如下所示。
//复数的结构类型定义
typedef struct
{
float a;
float b;
float c;
}cnum;
cnum x,y,z;
//计算两个复数之和
cnum add(cnum p,cnum q){
cnum s;
s.a=p.a+q.a;
s.b=p.b+q.b;
s.c=p.c+q.c;
return s;
}
// thread1
{
cnum w;
w=add(x,y);
...
}
//thread2
{
cnum w;
w=add(y,z);
...
}
//thread3
{
cnum w;
w.a=1;
w.b=1;
z=add(z,w);
y=add(y,w);
...
}
请添加必要的信号量和 P,V(wait()、signal() 操作),要求确保线程互斥访问临界资源,并且最大限度地并发执行。
解答:
semaphore mutex_t1=1; // 用于实现 thread1 和 thread3 对变量 y 的访问互斥
semaphore mutex_t2=1; // 用于实现 thread2 和 thread3 对变量 y 的访问互斥
semaphore mutex_z=1; //用于实现对变量 z 的访问互斥
// thread1
{
cnum w;
P(mutex_t1);
w=add(x,y);
V(mutex_t1);
...
}
//thread2
{
cnum w;
P(mutex_t2);
P(mutex_w);
w=add(y,z);
V(mutex_w);
V(mutex_t2);
...
}
//thread3
{
cnum w;
w.a=1;
w.b=1;
P(z);
z=add(z,w);
V(z);
P(mutex_t1);
P(mutex_t2);
y=add(y,w);
V(mutex_t2);
V(mutex_t1);
...
}
47.(7分)甲乙双方均采用后退 N 帧协议(GBN)进行持续的双向数据传输,且双方时钟采用捎带确认,帧长均为 1000B。S(x,y) 和 R(x,y) 分别表示 甲方和乙方发送的数据帧,其中 x 是发送序号,y 是确认序号(表示希望接收对方的下一帧号);数据帧的发送序号和确认序号均为 3 比特。信道传输速率 为 100Mbps,RTT=0.96ms。下图给出了甲方发送数据帧和接收数据帧的两种场景,其中 t0 为初始时,此时甲方发送序号和接收序号均为 0,t1 时刻甲方有足够的数据待发送。
请回答以下问题:
(1)对于图 (a),t0 时刻到 t1 时刻期间,甲方可以断定乙方正确接收的数据帧数是多少?正确接收的是哪几个帧?(请用 S(x,y) 形式给出)
(2)对于图 (a),从 t1 时刻起,甲方在不出现超时且未收到乙方新的数据帧之前,最多还可以发送多少个数据帧?其中第一个帧和最后一个帧分别是哪个?(请用 S(x,y) 形式给出)
(3)对于图 (b),从 t1 时刻起,甲方在不出现新的超时且未收到乙方新的数据帧的情况下,需要重发多少个数据帧?重发的第一个帧是哪个?(请用 S(x,y) 形式给出)
(4)甲方可以达到的最大信道利用率是多少?
解答:(1)3 个
S(0,0),S(1,0),S(2,0)
(2)发送序号 3 位,有 8 个序号,而在 GBN 协议中,序号个数>=发送窗口+1,因此发送窗口大小为 7。已经发送了 序号为 0,1,2,3,4 的帧,且未超时,其中帧 S(0,0),S(1,0),S(2,0) 已被确认,因此可以发送 5 个帧,分别为 S(5,2),S(6,2),S(7,2),S(0,2),S(1,2)
第一个帧是 S(5,2),最后一个帧是S(1,2)
(3)需要重发 3 个,GBN 协议需要重发从 未确认帧开始的所有帧。
重发的第一个帧是 S(2,3)
(4)甲方发送数据的时间为 7*1000B/100Mbps=7*8000/100M s=560/10^(-6)s=0.56ms
甲方收到第一个确认帧的时间 0.56/7+0.96+0.56/7=0.16+0.96=1.02ms
因此信达利用率为 0.56ms/1.02ms=50%