shuatigo
只考虑主考点
计算机408

2021计算机408全卷预览

2021年计算机408真题

2021年计算机408真题完整试卷,包含 40 道选择题、0 道填空题和 7 道解答题,共 47 题,题目分值合计 150 分。可按目录阅读全卷,展开参考答案解析,或进入对应题目练习。

返回年度练习
47题全卷题目
150分题目分值合计
40题选择题 · 80分
0题填空题 · 0分
7题解答题 · 70分

选择题

40 题 · 共 80 分

第 1 题

数据结构
2 分

已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为
[data|next]
其中 next 是指向直接后继结点的指针,p 是尾指针,q 是临时指针。现要删除该链表的第一个元素,正确的语句序列是( )。

A.

c 复制代码
h->next = h->next->next;
q = h->next;
free(q);

B.

c 复制代码
q = h->next;
h->next = h->next->next;
free(q);

C.

c 复制代码
q = h->next;
h->next = q->next;
if (p != q)
    p = h;
free(q);

D.

c 复制代码
q = h->next;
h->next = q->next;
if (p == q)
    p = h;
free(q);
查看答案与解析收起答案与解析

参考答案:D

答案:D。

带头结点循环链表的首元素是 h->next,不是 h。应先用 q 保存首元素,再将 h->next 改为 q->next,最后 free(q),这样删除过程中不会丢失待释放的地址。还需检查原表是否只有一个元素:此时 q==p,删除后 h->next==h,尾指针也应设为 h,D 完整处理了这一情况。

A 先改链接,再把新的首元素赋给 q,实际会释放错误结点,原首元素还泄漏。B 对多个元素的表可删除首元素,却漏掉单元素时尾指针更新,留下悬空 p。C 的 p!=q 条件反了,会在多元素时误把尾指针设为 h,在单元素时反而不改。边界检查必须在释放 q 之前完成。

进入练习

第 2 题

数据结构
2 分

已知初始为空的队列 Q 的一端仅能进行入队操作,另外一端既能进行入队操作又能进行出队操作。若 Q 的入队序列是 1, 2, 3, 4, 5,则不能得到的出队序列是( )。

A. 5, 4, 3, 1, 2

B. 5, 3, 1, 2, 4

C. 4, 2, 1, 3, 5

D. 4, 1, 3, 2, 5

查看答案与解析收起答案与解析

参考答案:D

答案:D。

令左端为唯一可出队端,左右均可入队。两端插入只会把新元素放到已有序列两侧,不能插进已有元素中间。A 可按 1 左、2 右、3 左、4 左、5 左入队,形成 5,4,3,1,2;B 按 1 左、2 右、3 左、4 右、5 左,形成 5,3,1,2,4;C 按 1 左、2 左、3 右、4 左、5 右,形成 4,2,1,3,5,均可从左依次输出。

D 首先输出 4 时,1、2、3 尚未输出;要随后先输出 1,2 必须排在 1 后。插入 3 时只能放在 1 前或 2 后,不可能形成 1,3,2。后来的 4、5 又不能改变旧元素相对次序,所以 D 不可能。允许交替入出队也不会解除这个约束。

进入练习

第 3 题

数据结构
2 分

已知二维数组 A 按行优先方式存储,每个元素占用 1 个存储单元。若元素 A[0][0] 的存储地址是 100,A[3][3] 的存储地址是 220,则元素 A[5][5] 的存储地址是( )。

A. 295

B. 300

C. 301

D. 306

查看答案与解析收起答案与解析

参考答案:B

答案:B。

行优先存储把一整行连续放完再放下一行。设每行 m 个元素,元素占一个地址单元,下标从 0 起,则 Addr(A[i][j])=100+im+jAddr(A[i][j])=100+im+j。利用已知 A[3][3],有 220−100=3m+3220-100=3m+3,解得 m=39。

A[5][5] 前面有五整行与本行五个元素,偏移 5×39+5=2005\times39+5=200,地址为 100+200=300100+200=300,B 正确。A 的 295 只算五行、漏本行偏移 5;C 的 301 额外加了一次 1,混淆零起下标;D 的 306 不符合反算的每行长度。行数多少并不影响本题计算,地址步长由列数决定,不应把下标 3 或 5 当成总列数。

进入练习

第 4 题

数据结构
2 分

某森林 F 对应的二叉树为 T,若 T 的先序遍历序列是 a, b, d, c, e, g, f,中序遍历序列是 b, d, a, e, g, c, f,则 F 中树的棵数是( )。

A. 1

B. 2

C. 3

D. 4

查看答案与解析收起答案与解析

参考答案:C

答案:C。

森林转二叉树时,左孩子表示原树第一个孩子,右孩子表示下一个兄弟;森林各棵树的根也用右指针相连。所以只需还原二叉树从根出发的右孩子链,链上有几个结点,森林就有几棵树。

先序首元素 a 是根,中序 b,d 在 a 左侧,e,g,c,f 在右侧;右子树先序 c,e,g,f,因此右子树根为 c,即 a 的右孩子。该子树中序在 c 右侧只有 f,故 c 的右孩子为 f;f 没有右孩子。森林根链为 a→c→f,共三棵,选 C。A、B 少计根链,D 多计其他结点。a 的左侧 b、d 和 c 左侧 e、g 是各树内部孩子关系,不另算森林根。

进入练习

第 5 题

数据结构
2 分

若某二叉树有 5 个叶结点,其权值分别为 10, 12, 16, 21, 30,则其最小的带权路径长度(WPL)是( )。

A. 89

B. 200

C. 208

D. 289

查看答案与解析收起答案与解析

参考答案:B

答案:B。

最小 WPL 用二叉哈夫曼树求,每次选当前最小的两个权合并,所得新权重新加入候选。第一次 10+12=2210+12=22,剩 16、21、22、30;第二次 16+21=3716+21=37,剩 22、30、37;第三次 22+30=5222+30=52;最后 37+52=8937+52=89。

合并一次会使参与子树全部叶的深度加 1,因此 WPL 等于各次合并权之和,22+37+52+89=20022+37+52+89=200,B 正确。叶 10、12 的深度为 3,16、21、30 的深度为 2,也可算 10×3+12×3+16×2+21×2+30×2=20010\times3+12\times3+16\times2+21\times2+30\times2=200。A 的 89 是叶权总和,C、D 不是最优值。不能把新产生的 22 放到一边不用,后续选择要在全部当前权中进行。

进入练习

第 6 题

数据结构
2 分

给定平衡二叉树如下图所示,插入关键字 23 后,根中的关键字是( )。

2021 年真题配图

A. 16

B. 20

C. 23

D. 25

查看答案与解析收起答案与解析

参考答案:D

答案:D。

先按二叉排序树规则插入:23>20,走右子树;23<30,走左边;23<25,成为 25 的左孩子。向上检查高度,25、30 尚保持平衡,根 20 左子树高度 1、右子树高度 3,首次失衡出现在 20。

新结点落在“20 的右孩子 30 的左子树”,为 RL 型。先对 30 右旋,使 25 提到该子树根,30 成其右孩子;再对 20 左旋,使 25 成整树根。最终 25 左边为 20(孩子 16、23),右边为 30(右孩子 40),左右高度恢复平衡。根为 25,选 D。A 的 16 是原左叶,B 的 20 未完成调整,C 的 23 是新叶,双旋提升的是原来夹在 20 与 30 之间的 25。

进入练习

第 7 题

数据结构
2 分

给定如下有向图,该图的拓扑有序序列的个数是( )。

2021 年真题配图

A. 1

B. 2

C. 3

D. 4

查看答案与解析收起答案与解析

参考答案:A

答案:A。

拓扑序要求所有弧的起点先于终点。图中存在完整依赖链 A→B→C→D→E→F,已经限定六个顶点全部相对先后;其他边 A→F、B→D、B→F、D→F 只增加已有先后约束,不创造额外顺序。

也可逐次删除零入度顶点:初始只有 A;删 A 后只有 B;删 B 后 C 才入度为 0;此后依次是 D、E、F,每步都没有第二个可选顶点。所以唯一序列为 A,B,C,D,E,F,共 1 种,选 A。B、C、D 都多计了可交换顶点。图上某些点看似左右并列并不表示独立,应检查方向明确的路径约束,而不能按图形摆放位置排列。

进入练习

第 8 题

数据结构
2 分

使用 Dijkstra 算法求下图中从顶点 1 到其余各顶点的最短路径,将当前找到的从顶点 1 到顶点 2,3,4,5 的最短路径长度保存在数组 dist 中,求出第二条最短路径后,dist 中的内容更新为( )。

2021 年真题配图

A. 26,3,14,6

B. 25,3,14,6

C. 21,3,14,6

D. 15,3,14,6

查看答案与解析收起答案与解析

参考答案:C

答案:C。

dist 依次存顶点 2、3、4、5 的暂定距离。从源 1 的出边初始化为 (26,3,∞,6)。Dijkstra 每轮选未确定距离最小者,再沿其出边松弛,已经确定的距离不随意重算。

第一条确定 1→3,距离 3;3→2 权 22,令到 2 暂距为 min(26,3+22)=25,此时 (25,3,∞,6)。第二条选 1→5,距离 6;5→2 权 15,将到 2 更新为 min(25,6+15)=21;5→4 权 8,得到 14;5→3 权 6 的候选 12 大于已确定 3,不变。因此结果 (21,3,14,6),选 C。A 保留初始 26,B 只完成第一轮更新,D 的 15 仅是边权,漏了先到 5 的 6。

进入练习

第 9 题

数据结构
2 分

在一棵高度为 3 的 3 阶 B 树中,根为第 1 层,若第 2 层中有 4 个关键字,则该树的结点个数最多是( )。

A. 11

B. 10

C. 9

D. 8

查看答案与解析收起答案与解析

参考答案:A

答案:A。

3 阶 B 树每结点最多 2 个关键字、3 个孩子,非根至少 1 个关键字。根为第 1 层,高度 3 意味着第二层全是内部结点、第三层全是叶。根最多有 3 个孩子,所以第二层结点数 k≤3。

内部结点有 r 个关键字就有 r+1 个孩子。第二层共 4 个关键字,因此它们合计孩子数为 4+k4+k,即第三层结点数。总数 1+k+(4+k)=5+2k1+k+(4+k)=5+2k,取 k=3 得 11。可把第二层关键字分成 2、1、1,孩子数分别 3、2、2,共 7,达到上限。A 正确;B、C、D 都比可达到的 11 小。不能把 4 个关键字当作 4 个第二层结点,那会超出根最多 3 个孩子的限制。

进入练习

第 10 题

数据结构
2 分

设数组 S[] = {93, 946, 372, 9, 146, 151, 301, 485, 236, 327, 43, 892},采用最低位优先(LSD)基数排序将 S 排列成升序序列。第 1 趟分配、收集后,元素 372 之前、之后紧邻的元素分别是( )。

A. 43,892

B. 236,301

C. 301,892

D. 485,301

查看答案与解析收起答案与解析

参考答案:C

答案:C。

LSD 第一趟只按个位放入 0~9 桶,再从小桶号到大桶号收集。同桶内要保持原次序,因此不能先按完整数值把同桶元素排序。个位 1 的桶为 151、301,个位 2 的桶为 372、892,个位 3 的桶为 93、43;其他为 5 桶 485,6 桶 946、146、236,7 桶 327,9 桶 9。

收集序列为 151,301,372,892,93,43,485,946,146,236,327,9,故 372 紧邻之前是 301,之后是 892,选 C。A 的 43 在更后的 3 桶,B 的 236 在 6 桶且 301 应在前,D 的 485 在 5 桶。个位相同的 372、892 原先也是前后这个顺序,稳定分配必须保留。

进入练习

第 11 题

数据结构
2 分

将关键字 6,9,1,5,8,4,7 依次插入到初始为空的大根堆 H 中,得到的 H 是( )。

A. 9,8,7,6,5,4,1

B. 9,8,7,5,6,1,4

C. 9,8,7,5,6,4,1

D. 9,6,7,5,8,4,1

查看答案与解析收起答案与解析

参考答案:B

答案:B。

大根堆插入新值时,先放在完全二叉树的下一个位置,再与父结点比较,大于父亲就交换上滤。按数组层序记录过程:插 6 得 [6];插 9 得 [9,6];插 1 得 [9,6,1];插 5 得 [9,6,1,5];插 8 与父 6 交换,得 [9,8,1,5,6]。

插 4 放第 6 位,与父 1 交换,得 [9,8,4,5,6,1];插 7 放第 7 位,与父 4 交换,得到 [9,8,7,5,6,1,4],所以 B 正确。A、C 的某些数也可形成合法堆,但不是题中逐个插入所得;D 的父 6 小于孩子 8,甚至违反大根堆性质。逐个插入与对整数组自底向上建堆可能产生不同合法排列,不能只验证堆序就选。

进入练习

第 12 题

计算机组成原理
2 分

2017 年公布的全球超级计算机 TOP 500 排名中,我国“神威 · 太湖之光”超级计算机蝉联第一,其浮点运算速度为 93.0146 PFLOPS,说明该计算机每秒钟内完成的浮点操作次数约为( )。

A. 9.3×10139.3×10^{13} 次

B. 9.3×10159.3×10^{15} 次

C. 9.3 千万亿次

D. 9.3 亿亿次

查看答案与解析收起答案与解析

参考答案:D

答案:D。

FLOPS 表示每秒浮点操作次数,前缀 P(peta)为 101510^{15}。题目给出的历史测试数值是 93.0146 PFLOPS,直接换算 93.0146×1015=9.30146×101693.0146\times10^{15}=9.30146\times10^{16} 次/秒,约为 9.3×10169.3\times10^{16}。

一个“亿”为 10810^8,亿亿为 101610^{16},因此对应 D 的 9.3 亿亿次。A 的 9.3×10139.3\times10^{13} 小了 1000 倍;B 的 9.3×10159.3\times10^{15} 小了 10 倍;C 的千万亿=107×108=101510^7\times10^8=10^{15},也小了 10 倍。这里只是对题中给定性能值做单位转换,不需要用后来排名替换题设。注意 93 换成科学记数法 9.3 时,指数还要增加 1。

进入练习

第 13 题

计算机组成原理
2 分

已知带符号整数用补码表示,变量 x, y, z 的机器数分别为 FFFDH, FFDFH, 7FFCH,下列结论中,正确的是( )。

A. 若 x, y 和 z 为无符号整数,则 z < x < y

B. 若 x, y 和 z 为无符号整数,则 x < y < z

C. 若 x, y 和 z 为带符号整数,则 x < y < z

D. 若 x, y 和 z 为带符号整数,则 y < x < z

查看答案与解析收起答案与解析

参考答案:D

答案:D。

题中位串均为 16 位。按带符号补码,最高位为 1 的数可用无符号值减 216=655362^{16}=65536 解码:x=FFFDH=65533-65536=-3,y=FFDFH=65503-65536=-33;z=7FFCH 最高位为 0,是正数 32764。所以 y<x<zy<x<z,D 正确、C 颠倒了两个负数。

再按无符号检验 A、B:三个值为 x=65533、y=65503、z=32764,正确关系 z<y<xz<y<x,A 的 z<x<y 与 B 的 x<y<z 都错误。对于两个负补码,不能只按负号就视作相同,也不应简单按低位绝对数值比较;先还原真值最稳妥。同一位串可在不同类型下有不同大小关系。

进入练习

第 14 题

计算机组成原理
2 分

下列数值中,不能用 IEEE 754 浮点格式精确表示的是( )。

A. 1.2

B. 1.25

C. 2.0

D. 2.5

查看答案与解析收起答案与解析

参考答案:A

答案:A。

二进制浮点数的有限尾数形如整数乘 2e2^e,所以能精确表示的有限小数约分后分母只能是 2 的幂。1.2=6/51.2=6/5,分母仍含 5,二进制展开是无限循环,有限位 IEEE 754 尾数只能存其舍入近似,因此 A 不能精确表示。

B 的 1.25=5/4=1.0121.25=5/4=1.01_2,C 的 2.0=1022.0=10_2,D 的 2.5=5/2=10.122.5=5/2=10.1_2,都有很短的有限二进制表示,且指数与有效位长度远在常见格式范围内,均可精确保存。小数在十进制中有限,并不保证二进制也有限;不能把“有小数点”直接等同于浮点误差,关键是转换后尾数是否有限及位数是否够。

进入练习

第 15 题

计算机组成原理
2 分

某计算机的存储器总线中有 24 位地址线和 32 位数据线,按字编址,字长为 32 位。如果 00 0000H~3F FFFFH 为 RAM 区,那么需要 512K×8 位的 RAM 芯片数为( )。

A. 8

B. 16

C. 32

D. 64

查看答案与解析收起答案与解析

参考答案:C

答案:C。

按字编址,地址 000000H~3FFFFFH 含 3FFFFFH−0+1=400000H=222=43FFFFF\mathrm H-0+1=400000\mathrm H=2^{22}=4 M 个字,不是 4 MB;每字 32 bit=4 B,RAM 总容量为 16 MB。

一片 512K×8 的芯片有 2192^{19} 个 8 位单元。要拼成 32 位字,每个地址并行用 32/8=432/8=4 片,称位扩展;深度从 512K 扩到 4M,需要 4M/512K=84M/512K=8 组,称字扩展。总芯片数 4×8=324\times8=32,选 C。A 的 8 只做深度扩展,B 的 16 少一倍,D 的 64 多一倍。24 位总地址线能覆盖更大空间,但本题只统计给定 RAM 区,不把整地址空间都算作 RAM。

进入练习

第 16 题

计算机组成原理
2 分

若计算机主存地址为 32 位,按字节编址,Cache 数据区大小为 32KB,主存块大小为 32B,采用直接映射方式和回写(Write Back)策略,则 Cache 行的位数至少是( )。

A. 275

B. 274

C. 258

D. 257

查看答案与解析收起答案与解析

参考答案:A

答案:A。

直接映射中一个主存块只能映射到一行。32 KB 数据区、32 B 一块,行数 32×1024/32=1024=21032\times1024/32=1024=2^{10},地址行号 10 位;块内偏移 5 位,Tag 为 32−10−5=1732-10-5=17 位。

每行存一整个数据块,即 32×8=25632\times8=256 bit,还需 17 位标记及 1 位有效位。回写策略修改数据时先只改 Cache,换出时必须知道主存是否已过期,因此另需 1 位修改/脏位。合计 256+17+1+1=275256+17+1+1=275 bit,A 正确。B 的 274 漏一个控制位;C 的 258 漏 Tag;D 的 257 漏 Tag 和脏位。直接映射无组内替换选择,不必加 LRU 位;Cache 数据容量不是含这些元数据的总容量。

进入练习

第 17 题

计算机组成原理
2 分

下列寄存器中,汇编语言程序员可见的是( )。
Ⅰ. 指令寄存器 Ⅱ. 微指令寄存器 Ⅲ. 基址寄存器 Ⅳ. 标志/状态寄存器

A. 仅Ⅰ、Ⅱ

B. 仅Ⅰ、Ⅳ

C. 仅Ⅱ、Ⅳ

D. 仅Ⅲ、Ⅳ

查看答案与解析收起答案与解析

参考答案:D

答案:D。

“程序员可见”指汇编指令可直接指定、利用或观察的体系结构状态,不一定意味着能任意写所有位。III 基址寄存器在寻址中可被程序指定,IV 标志/状态寄存器中的算术条件可由条件跳转等使用,因此二者可见。

I 指令寄存器保存硬件当前取到的机器指令,是内部执行过程的部件;II 微指令寄存器保存控制存储器输出的微指令,属于控制器实现细节,普通汇编不能直接操作它们。正确集合为 III、IV,选 D。A 错含两种内部寄存器,B 错含 I,C 错含 II。标志寄存器某些系统控制位只能内核修改,不影响它作为架构状态被程序使用的性质。

进入练习

第 18 题

计算机组成原理
2 分

下列关于数据通路的叙述中,错误的是( )。

A. 数据通路包含 ALU 等组合逻辑(操作)元件

B. 数据通路包含寄存器等时序逻辑(状态)元件

C. 数据通路不包含用于异常事件检测及响应的电路

D. 数据通路中的数据流动路径由控制信号进行控制

查看答案与解析收起答案与解析

参考答案:C

答案:C。

数据通路是指令执行时参与数据运算、存储和传送的硬件集合。A 正确:ALU、加法器、多路选择器等组合逻辑根据当前输入产生输出。B 正确:寄存器等时序逻辑在时钟控制下保存状态,使数据跨周期保留。D 正确:哪路输入被选、哪个寄存器写入、执行何种运算,均由控制信号决定。

C 错:执行过程中异常的检测与相应处理所需电路不能一概排除,例如 ALU 的溢出检测、对执行状态的检查等与数据通路有关。异常发生后虽然还需控制器转入处理流程,但不意味着数据通路里不存在异常相关硬件。因此选 C。组合逻辑与时序逻辑应按是否保存状态区分,不是按是否属于 CPU 区分。

进入练习

第 19 题

计算机组成原理
2 分

下列关于总线的叙述中,错误的是( )。

A. 总线是在两个或多个部件之间进行数据交换的传输介质

B. 同步总线由时钟信号定时,时钟频率不一定等于工作频率

C. 异步总线由握手信号定时,一次握手过程完成一位数据交换

D. 突发(Burst)传送总线事务可以在总线上连续传送多个数据

查看答案与解析收起答案与解析

参考答案:C

答案:C。

同步、异步描述总线传送如何定时,不决定一次数据的位宽。异步总线用请求/应答握手表示数据已准备好、接收完成,一次握手可在多根数据线上交换一个字等规定宽度的数据,所以 C 的“一位数据”错误;它混淆了异步定时与串行传输。

A 正确:总线作为互连介质供两个或多个部件交换信息。B 正确:同步总线由时钟约定时序,但一项传送可能占多个时钟,实际工作或传送频率不必等于时钟频率。D 正确:突发事务只给一次首地址后连续传多个数据,减少重复地址开销。因此选错误项 C。串行总线也可按协议组成一次多位数据事务,不能单凭握手次数推断只有一位。

进入练习

第 20 题

计算机组成原理
2 分

下列选项中,不属于 I/O 接口的是( )。

A. 磁盘驱动器

B. 打印机适配器

C. 网络控制器

D. 可编程中断控制器

查看答案与解析收起答案与解析

参考答案:A

答案:A。

I/O 接口在主机和外设之间协调数据、状态、控制及定时,CPU 通过其端口或寄存器与设备交互。A 磁盘驱动器是执行存储读写的设备本体,通常借磁盘控制器等接口连接主机,不属于题目所问的接口部件。

B 打印机适配器转换主机命令与数据到打印机需要的接口形式;C 网络控制器承担网络收发与主机间的数据及控制交互;D 可编程中断控制器收集、屏蔽和仲裁中断请求,提供相应控制接口,都属于此处 I/O 接口范围。因此选 A。区分设备本体和控制接口很关键,“磁盘驱动器”是硬件外设名,不是操作系统中的设备驱动程序,两者也不能混淆。

进入练习

第 21 题

计算机组成原理
2 分

异常事件在当前指令执行过程中进行检测,中断请求则在当前指令执行后进行检测。下列事件中,相应处理程序执行后,必须回到当前指令重新执行的是( )。

A. 系统调用

B. 页缺失

C. DMA 传送结束

D. 打印机缺纸

查看答案与解析收起答案与解析

参考答案:B

答案:B。

缺页在当前访存指令执行过程中发现,所需页面尚未在内存,指令的访存还没完成。内核调页、更新页表后,需要返回原指令重新进行地址转换与访问,才能完成本次操作,所以 B 正确。

A 系统调用由程序主动陷入内核,完成服务后一般返回陷阱指令的下一条指令,不重新发起同一次调用。C DMA 完成、D 打印机缺纸是设备外部事件,在指令结束处处理中断;原指令已完成,服务结束从后继位置继续。故三者都不属于“必须重执行当前指令”。应根据异常发生时当前指令是否完成来区分故障、陷阱、外部中断,不能只看到都进入内核就认为返回方式相同。

进入练习

第 22 题

计算机组成原理
2 分

下列是关于多重中断系统中CPU响应中断的叙述,其中错误的是( )。

A. 仅在用户态(执行用户程序)下,CPU才能检测和响应中断

B. CPU只有在检测到中断请求信号后,才会进入中断响应周期

C. 进入中断响应周期时,CPU一定处于中断允许(开中断)状态

D. 若CPU检测到中断请求信号,则一定存在未被屏蔽的中断源请求信号

查看答案与解析收起答案与解析

参考答案:A

答案:A。

按题目多重中断系统的可屏蔽中断响应模型,CPU 能否响应由中断允许状态、屏蔽设置及当前指令边界决定,不由用户态或内核态单独决定。内核处理中断时可以设置屏蔽字并重新开中断,让更高处理优先级的请求打断当前服务,因此 A 的“仅用户态”错误。

B 正确:有有效请求被检测到才进入响应周期。C 正确:在该可屏蔽中断模型中,进入响应前须处于中断允许状态,响应后硬件可能关中断。D 正确:经屏蔽逻辑后 CPU 检测到的有效请求来自至少一个未屏蔽源。不能把题中的检测信号误作任意被屏蔽设备原始请求;NMI 的独立响应规则也不是这里所讨论的可屏蔽多重中断条件。

进入练习

第 23 题

操作系统
2 分

下列指令中,只能在内核态执行的是( )。

A. trap指令

B. I/O指令

C. 数据传送指令

D. 设置断点指令

查看答案与解析收起答案与解析

参考答案:B

答案:B。

I/O 指令可直接读写设备端口或控制设备,其作用影响系统共享资源与其他进程,通常属于特权指令,只能在内核态执行,故 B 正确。用户程序要进行 I/O,应通过系统调用请求内核,由驱动执行具体设备操作。

A trap 是用户主动请求服务或触发陷阱的合法入口,可在用户态执行,执行后进入内核不等于执行前必须在内核。C 普通数据传送在权限允许的用户寄存器、内存间进行,可由用户执行;访问受保护地址则另触发异常。D 设置软件调试断点可用相应断点指令,并不是此题所列的必须内核执行的设备操作。不能把引发内核处理的指令全部当作特权指令。

进入练习

第 24 题

操作系统
2 分

下列操作中,操作系统在创建新进程时,必须完成的是( )。
Ⅰ. 申请空白的进程控制块
Ⅱ. 初始化进程控制块
Ⅲ. 设置进程状态为执行态

A. 仅Ⅰ

B. 仅Ⅰ、Ⅱ

C. 仅Ⅰ、Ⅲ

D. 仅Ⅱ、Ⅲ

查看答案与解析收起答案与解析

参考答案:B

答案:B。

PCB 是操作系统识别、管理进程的基础记录。创建新进程必须先申请一个空白 PCB,保存进程标识、执行环境、资源与调度信息;还必须初始化这些字段,所以 I、II 都必要。仅申请一块空间而不初始化,会使调度器无法正确管理新进程。

III 不必要:新进程创建完成通常进入就绪等待调度状态,只有被选择并实际占用 CPU 才进入执行态。创建时 CPU 可能仍在运行父进程或其他进程,不能保证新进程立即执行。因此选 I、II,即 B。A 漏初始化,C 错含 III 且漏 II,D 错含 III 且漏 I。进程创建与进程调度是不同事件,不能把“已创建”直接当成“正在运行”。

进入练习

第 25 题

操作系统
2 分

下列内核的数据结构或程序中,分时系统实现时间片轮转调度需要使用的是( )。
Ⅰ. 进程控制块
Ⅱ. 时钟中断处理程序
Ⅲ. 进程就绪队列
Ⅳ. 进程阻塞队列

A. 仅Ⅱ、Ⅲ

B. 仅Ⅰ、Ⅳ

C. 仅Ⅰ、Ⅱ、Ⅲ

D. 仅Ⅰ、Ⅱ、Ⅲ、Ⅳ

查看答案与解析收起答案与解析

参考答案:C

答案:C。

时间片轮转从就绪队列头选择进程,运行一个有限时间片,若仍未完成则保存现场并放回队尾。I PCB 保存寄存器现场、状态及时间片相关信息;II 时钟中断处理程序定期计时,在时间片到期时触发切换;III 就绪队列维护候选进程与轮转顺序,三者均需要。

IV 阻塞队列管理等待 I/O、资源等事件的进程,完整操作系统当然会用到,但仅实现轮转选取和到期切换本身,不必须访问阻塞队列。因此正确为 I、II、III,选 C。A 漏 PCB,B 漏时钟、就绪队列且含非必需 IV,D 多列 IV。应按题目限定的调度机制判断,不把系统存在的所有内核结构都列为轮转的直接必要条件。

进入练习

第 26 题

操作系统
2 分

某系统中磁盘的磁道数为200(0~199),磁头当前在184号磁道上。用户进程提出的磁盘访问请求对应的磁道号依次为184,187,176,182,199。若采用最短寻道时间优先调度算法(SSTF)完成磁盘访问,则磁头移动的距离(磁道数)是( )。

A. 37

B. 38

C. 41

D. 42

查看答案与解析收起答案与解析

参考答案:C

答案:C。

SSTF 每次从尚未服务的请求中,选离磁头当前位置最近的磁道;不是按请求到达顺序,也不是固定方向一直扫描。首先服务当前 184,移动 0。剩余 187、176、182、199,距离分别 3、8、2、15,选 182;从 182 到 187、176、199 分别 5、6、17,选 187。

从 187 看 176、199,距离 11、12,选 176;最后从 176 到 199,距离 23。总移动 0+2+5+11+23=410+2+5+11+23=41,选 C。A 的 37、B 的 38、D 的 42 均不符合逐次重算最近请求后的距离。184 的请求不能又按与其他请求的差值重复收费;最后一跳会跨回高端,这也是 SSTF 与单向扫描的差别。

进入练习

第 27 题

操作系统
2 分

下列事件中,可能引起进程调度程序执行的是( )。
Ⅰ. 中断处理结束
Ⅱ. 进程阻塞
Ⅲ. 进程执行结束
Ⅳ. 进程的时间片用完

A. 仅Ⅰ、Ⅲ

B. 仅Ⅱ、Ⅳ

C. 仅Ⅲ、Ⅳ

D. Ⅰ、Ⅱ、Ⅲ和Ⅳ

查看答案与解析收起答案与解析

参考答案:D

答案:D。

II 进程阻塞后不能继续运行,需要选一个就绪进程占 CPU;III 进程执行结束后同样要寻找下一进程;IV 时间片用完时,轮转等抢占策略需要切换。这三种都可直接触发调度。

I 中断处理结束也可能调度,例如 I/O 完成唤醒了一个更高优先级进程,或中断使调度条件发生变化,内核在返回前重新选择运行者。不是每次中断都切换,但题目问“可能”,存在这类情况即可。因此四项全选,D 正确。A 漏阻塞、时间片,B 漏中断结束、退出,C 漏前两项。进入内核执行服务程序与切换进程不是同一件事,应明确是否需要重新决定 CPU 归属。

进入练习

第 28 题

操作系统
2 分

某请求分页存储系统的页大小为4KB,按字节编址。系统给进程P分配2个固定的页框,并采用改进型Clock置换算法,进程P页表的部分内容如下表所示。

页号 页框号 存在位 1:存在 0:不存在 访问位 1:访问 0:未访问 修改位 1:修改 0:未修改
… … … … …
2 20H 0 0 0
3 60H 1 1 0
4 80H 1 1 1
… … … … …

若 P 访问虚拟地址为 02A01H 的存储单元,则经地址变换后得到的物理地址是( )。

A. 00A01H

B. 20A01H

C. 60A01H

D. 80A01H

查看答案与解析收起答案与解析

参考答案:C

答案:C。

4 KB 页对应 12 位偏移,02A01H 可分为虚页号 2、偏移 A01H。页 2 存在位为 0,原记录的页框 20H 不能直接用来翻译,必须先缺页调入。两个固定页框已分别装页 3、4,需要置换一个。

改进 Clock 同时考虑访问位 A 与修改位 M,优先未访问、未修改的 (0,0),然后才考虑需写回的页。两页初始 A 都为 1;扫描清除访问位后,页 3 成 (0,0),页 4 成 (0,1),应优先淘汰干净页 3,复用其页框 60H。物理地址 (60H≪12)+A01H=60A01H(60\mathrm H\ll12)+A01\mathrm H=60A01\mathrm H,选 C。A 只保留偏移,B 错用不驻留页的旧框,D 误淘汰更昂贵的修改页。

进入练习

第 29 题

操作系统
2 分

在采用二级页表的分页系统中,CPU页表基址寄存器中的内容是( )。

A. 当前进程的一级页表的起始虚拟地址

B. 当前进程的一级页表的起始物理地址

C. 当前进程的二级页表的起始虚拟地址

D. 当前进程的二级页表的起始物理地址

查看答案与解析收起答案与解析

参考答案:B

答案:B。

二级页表转换先取一级页表/页目录的表项,由它得到相应二级页表的物理基址,再查出目标页框。CPU 页表基址寄存器必须保存这一查表过程的入口,即当前进程一级页表起始物理地址,B 正确。

A 若存虚拟地址,要访问页表入口本身又需先查页表,会造成循环依赖;物理地址可直接作为内存访问地址。C、D 错在选择第二级:进程可能有多个二级页表,由虚拟地址中的目录号选择不同一张,寄存器不能用一个固定二级表替代目录入口。上下文切换时系统按新进程更新这个基址。一级、二级名称描述表层次,虚拟、物理则描述地址空间,两组概念都要检查。

进入练习

第 30 题

操作系统
2 分

若目录dir下有文件file1,则为删除该文件内核不必完成的工作是( )。

A. 删除file1的快捷方式

B. 释放file1的文件控制块

C. 释放file1占用的磁盘空间

D. 删除目录dir中与file1对应的目录项

查看答案与解析收起答案与解析

参考答案:A

答案:A。

删除 file1 首先要撤去目录 dir 中“文件名→文件控制信息”的关联,即 D 对应目录项。按文件达到回收条件的通常模型,还需释放其控制块和占用的数据块,所以 B、C 属于文件删除相关工作;若还有打开引用或其他硬链接,实际回收可延后。

A 快捷方式是引用路径或目标的独立对象,目标被删后可以继续存在,成为失效快捷方式。内核不必搜索所有目录、找出并删掉它们,因此 A 是不必完成的工作。快捷方式、符号链接与原文件不是同一个目录项;删除目标不自动删除所有引用者。题目问不必,不是问不允许用户另外主动删除快捷方式,判断要围绕本次删除原文件的职责。

进入练习

第 31 题

操作系统
2 分

若系统中有n(n≥2)个进程,每个进程均需要使用某类临界资源2个,则系统不会发生死锁所需的该类资源总数至少是( )。

A. 2

B. n

C. n+1

D. 2n

查看答案与解析收起答案与解析

参考答案:C

答案:C。

每个进程最大需要 2 个同类互斥资源,未完成时最多持有 1 个并等另一个。若总数为 n,可出现 n 个进程各占 1 个、全部等待第 2 个的状态,资源耗尽且无人能释放,发生死锁,因此 B 不足;n≥2 时 A 的固定 2 个也不能保证一般情形。

多出一个,即 n+1 时,只要所有进程都尚未获得全部需求,它们合计最多占 n 个,至少一资源可给某个进程,令其凑齐两个并完成;它释放后又能让其他进程依次完成。所以最低保证数为 1+n(2−1)=n+11+n(2-1)=n+1,选 C。D 的 2n 可让所有需求同时满足,但超过防死锁的最小要求。避免死锁不要求所有进程同时取得全部资源。

进入练习

第 32 题

操作系统
2 分

下列选项中,通过系统调用完成的操作是( )。

A. 页置换

B. 进程调度

C. 创建新进程

D. 生成随机整数

查看答案与解析收起答案与解析

参考答案:C

答案:C。

系统调用是用户程序主动请求内核提供服务的受控入口。创建新进程需要分配 PCB、建立地址空间、安排系统资源及调度记录,用户不能直接修改这些受保护数据,应通过相应系统调用完成,故 C 正确。

A 页置换通常在缺页等条件下由内存管理自动执行,不是应用逐次发一个“置换该页”调用。B 进程调度由内核根据阻塞、时间片等事件决定运行者,也不是普通应用直接调用调度程序。D 普通伪随机整数可由数学算法在用户态库中生成,无需必然陷入内核。某些安全随机数服务可能调用内核,但题目没有这个限定,不能把特定实现扩展成普通随机整数生成都靠系统调用。

进入练习

第 33 题

计算机网络
2 分

在TCP/IP参考模型中,由传输层相邻的下一层实现的主要功能是( )。

A. 对话管理

B. 路由选择

C. 端到端报文段传输

D. 结点到结点流量控制

查看答案与解析收起答案与解析

参考答案:B

答案:B。

TCP/IP 参考模型从上到下为应用、传输、网际、网络接口。传输层相邻下一层是网际层,负责 IP 寻址、分组跨网络转发及路由选择,因此 B 正确。路由选择决定目的网络对应的下一跳,是该层的核心工作。

A 对话管理属于应用相关功能,在 OSI 中由会话层负责,不是 TCP/IP 网际层职责。C 端到端报文段传输就是传输层提供的服务,不是其下一层功能。D 结点到结点流量控制属于链路级相邻结点控制。先确定模型及层次再匹配功能,不能因传输层下方数据仍在传送就把“报文段”也视作网际层的主要单位,网际层对应的是 IP 分组。

进入练习

第 34 题

计算机网络
2 分

若下图为一段差分曼彻斯特编码信号波形,则其编码的二进制位串是( )。

2021 年真题配图

A. 1011 1001

B. 1101 0001

C. 0010 1110

D. 1011 0110

查看答案与解析收起答案与解析

参考答案:A

答案:A。

差分曼彻斯特每比特中点必跳变,用于同步;数据由比特起始处是否相对前一电平跳变表示,按本题约定,起点有跳变为 0、无跳变为 1。不能沿用普通曼彻斯特的中点跳变方向判位。

图中虚线划分八个比特,第一位前的参照电平与起始电平相同。各起点从左到右依次为无跳变、有跳变、无、无、无、有、有、无,对应 1,0,1,1,1,0,0,1,即 1011 1001,选 A。B、D 的某些起点判定与图不符,C 的 0010 1110 也不符。中点跳变每位都有,无法区分值;差分编码关注变化与否,不依赖把高电平固定指定成 1。

进入练习

第 35 题

计算机网络
2 分

现将一个IP网络划分为3个子网,若其中一个子网是192.168.9.128/26,则下列网络中,不可能是另外两个子网之一的是( )。

A. 192.168.9.0/25

B. 192.168.9.0/26

C. 192.168.9.192/26

D. 192.168.9.192/27

查看答案与解析收起答案与解析

参考答案:B

答案:B。

把一个 CIDR 网络完整划为三个 CIDR 子网,可先二分,再把其中一半继续二分,大小关系为一半、四分之一、四分之一。已知 192.168.9.128/26 覆盖末字节 128~191,可检验候选是否能与它及另一个网共同覆盖完整上级网络且不重叠。

A 的 .0/25 覆盖 0~127,配 .192/26 覆盖 192~255,正好将 .0/24 分三网,故 A、C 均可能。D 的 .192/27 覆盖 192~223,再配 .224/27,可把 .128/25 分成三网,也可能。B 的 .0/26 与已知 /26 分处 0~63、128~191,两者共同上级至少为 /24;剩余 64~127 和 192~255 是两段,无法由单个第三 CIDR 子网精确补齐,故 B 不可能。不能只检查候选和已知网是否不重叠。

进入练习

第 36 题

计算机网络
2 分

若路由器向MTU=800B的链路转发一个总长度为1580B的IP数据报(首部长度为20B)时,进行了分片,且每个分片尽可能大,则第2个分片的总长度字段和MF标志位的值分别是( )。

A. 796,0

B. 796,1

C. 800,0

D. 800,1

查看答案与解析收起答案与解析

参考答案:B

答案:B。

IPv4 每个分片都要带首部,MTU=800 B 表示首部加数据总长不能超 800。20 B 首部后剩 780 B,但非末片数据长度必须是 8 B 的整数倍,以便片偏移字段按 8 B 计,所以最大为 ⌊780/8⌋×8=776\lfloor780/8\rfloor\times8=776 B。

原数据为 1580-20=1560 B,依次分成 776、776、8 B,三片总长为 796、796、28 B。第二片后还有第三片,MF=1,故选 B。A 错把它当末片,C、D 的 800 都忘记非末片数据必须 8 B 对齐。第二片偏移是 776/8=97,可辅助检验;不能将原首部只保留在第一片,其他片也各有首部。

进入练习

第 37 题

计算机网络
2 分

某网络中的所有路由器均采用距离向量路由算法计算路由。若路由器E与邻居路由器A,B,C和D之间的直接链路距离分别是8,10,12和6,且E收到邻居路由器的距离向量如下表所示,则路由器E更新后的到达目的网络Net1~Net4的距离分别是( )。

2021 年真题配图

A. 9,10,12,6

B. 9,10,28,20

C. 9,20,12,20

D. 9,20,28,20

查看答案与解析收起答案与解析

参考答案:D

答案:D。

距离向量更新满足 dE(N)=min⁡X{c(E,X)+dX(N)}d_E(N)=\min_X\{c(E,X)+d_X(N)\}。E 到 A、B、C、D 的直达费用为 8、10、12、6,要先与各邻居报告的距离逐列相加。

目的 经 A 经 B 经 C 经 D 最小
Net1 8+1=9 10+23=33 12+20=32 6+22=28 9
Net2 8+12=20 45 42 34 20
Net3 32 10+18=28 12+16=28 42 28
Net4 44 40 12+8=20 30 20

得到 9、20、28、20,选 D。A 把一些直达邻居费用误当目标距离;B 的 Net2=10 不成立,C 的 Net3=12 也不成立。Net3 经 B、C 同费,任选其一为下一跳,不影响距离。

进入练习

第 38 题

计算机网络
2 分

若客户首先向服务器发送FIN段请求断开TCP连接,则当客户收到服务器发送的FIN段并向服务器发送了ACK段后,客户的TCP状态转换为( )。

A. CLOSE_WAIT

B. TIME_WAIT

C. FIN_WAIT_1

D. FIN_WAIT_2

查看答案与解析收起答案与解析

参考答案:B

答案:B。

本题按通常四次挥手的依次关闭过程作答,默认客户端发出的 FIN 已获得服务器的确认(该确认也可以随服务器的 FIN 一并到达)。客户先发 FIN,是主动关闭方:发 FIN 后进入 FIN_WAIT_1,收到自己 FIN 的确认后进入 FIN_WAIT_2;随后收到服务器 FIN,向服务器发送最后一个 ACK,再进入 TIME_WAIT。因此应选择 B。

TIME_WAIT 通常持续 2MSL,MSL 是报文段最大生存时间。保留连接状态,一方面可在最后 ACK 丢失、服务器重发 FIN 时再次确认,另一方面可让旧连接的迟到报文段在网络中消退,避免干扰后续复用相同端点的连接。

A CLOSE_WAIT 是被动关闭方已收到对方 FIN、等待本应用关闭的状态。C FIN_WAIT_1 是自己已发 FIN、仍未收到其确认的阶段;D FIN_WAIT_2 是自己 FIN 已被确认、还等待对方 FIN 的阶段。在上述通常关闭过程中,题述已完成对服务器 FIN 的确认,因此这三项均不符合。

**严谨边界。**真实 TCP 也允许双方同时关闭:若两个 FIN 交叉到达,客户端收到服务器 FIN 时自己的 FIN 尚未获确认,客户端会先进入 CLOSING,等自己的 FIN 被确认后再进入 TIME_WAIT。这一分支不在本题选项中;本题考查的是通常的四次挥手顺序,应按已说明的约定选择 B,而不能把所有主动关闭过程都无条件写成 TIME_WAIT。

进入练习

第 39 题

计算机网络
2 分

若大小为12B的应用层数据分别通过1个UDP数据报和1个TCP段传输,则该UDP数据报和TCP段实现的有效载荷(应用层数据)最大传输效率分别是( )。

A. 37.5%, 16.7%

B. 37.5%, 37.5%

C. 60.0%, 16.7%

D. 60.0%, 37.5%

查看答案与解析收起答案与解析

参考答案:D

答案:D。

传输效率为“应用有效数据/传输层单元总长度”。题目只比较 UDP 数据报和 TCP 段,因此不计下层 IP、以太网首部。UDP 固定首部 8 B,12 B 数据占总 20 B,效率 12/(12+8)=60%12/(12+8)=60\%。

TCP 最小首部 20 B,不带可选项时效率最大,总长 32 B,效率 12/(12+20)=37.5%12/(12+20)=37.5\%。因此 D 正确。A、B 将 UDP 也按 20 B 首部算成 37.5%;A、C 的 TCP 16.7% 又额外或错误增加了开销,不属于题中这一级计算。增加 TCP 选项只能降低效率,所以取最大时用最短首部,而不把三次握手、确认等整个连接流量纳入单个段的比例。

进入练习

第 40 题

计算机网络
2 分

设主机甲通过TCP向主机乙发送数据,部分过程如下图所示。甲在t₀时刻发送一个序号seq=501,封装200B数据的段,在t₁时刻收到乙发送的序号seq=601、确认序号ack_seq=501,接收窗口rcvwnd=500B的段,则甲在未收到新的确认段之前,可以继续向乙发送的数据序号范围是( )。

2021 年真题配图

A. 501~1000

B. 601~1100

C. 701~1000

D. 801~1100

查看答案与解析收起答案与解析

参考答案:C

答案:C。

TCP 确认号是下一期望字节。乙报 ack_seq=501,说明 501 之前已确认,501 起仍未确认;其通告窗口 500 B 覆盖 501~501+500−1=1000501+500-1=1000。乙自己的 seq=601 属于反方向的字节编号,与甲的发送窗口起点无关。

甲此前从 seq=501 发出 200 B,已经发送 501~700。窗口共 500 B,其中 200 B 仍未确认占着位置,剩余可发 300 B,即 701~1000,选 C。A 包括已发送的 501~700,不是可继续的新数据范围;B 用了乙的 seq 作起点并越过窗口;D 同样越界且把新起点错移到 801。未收到新 ACK 前,窗口右边界不能擅自滑到 1100。

进入练习

解答题

7 题 · 共 70 分

第 41 题

数据结构
15 分

已知无向连通图G由顶点集V和边集E组成,|E|>0,当G中度为奇数的顶点个数为不大于2的偶数时,G存在包含所有边且长度为|E|的路径(称为EL路径)。设图G采用邻接矩阵存储,类型定义如下:

c 复制代码
typedef struct {
    int numVertices, numEdges;    // 图的定义
    char VerticesList[MAXV];      // 顶点表。MAXV为已定义常量
    int Edge[MAXV][MAXV];         // 邻接矩阵
} MGraph;

请设计算法 int IsExistEL(MGraph G),判断 G 是否存在 EL 路径,若存在,则返回1,否则返回0。要求:
1)给出算法的基本设计思想。
2)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。
3)说明你所设计算法的时间复杂度和空间复杂度。

查看答案与解析收起答案与解析

**(1)设计思想。**题设 EL 路径就是每条边恰好走一次的欧拉路径,长度为边数。无向连通图存在它的条件是奇度顶点有 0 个或 2 个;0 个时可闭合回起点,2 个时路径的起终点就是两个奇度顶点。图已经保证连通且有边,不需要再写一次连通性搜索,也不需要实际构造路径。

邻接矩阵每行反映一个顶点与其他顶点的连接,逐行累计得到 degree;若为奇数,odd 加 1。odd 超过 2 后已不满足条件,可立即返回 0;扫描完成检查是否为 0 或 2。不能把“每个顶点度都为偶数”当成唯一条件,那会漏掉合法的非闭合路径。

**(2)C 实现。**按题目通常无自环的普通无向图、0/1 邻接矩阵约定,每个非零邻接项对本顶点贡献一条边。

c 复制代码
int IsExistEL(MGraph G) {
    int odd = 0;
    for (int i = 0; i < G.numVertices; ++i) {
        int degree = 0;
        for (int j = 0; j < G.numVertices; ++j)
            degree += (G.Edge[i][j] != 0); // 当前顶点连出的边数
        if (degree % 2 != 0 && ++odd > 2) return 0;
    }
    return odd == 0 || odd == 2;
}

例如三点链 A-B-C 的度为 1、2、1,odd=2,返回 1;三点三角形度全为 2,返回 1;四点星形度为 3、1、1、1,odd=4,返回 0。代码按每行单独算度,不能将全矩阵非零数作为某一个顶点的度。

**(3)正确性与复杂度。**行扫描准确获得各顶点度,odd 准确计数;依据已给的连通性与欧拉路径判定条件,返回 1 当且仅当存在 EL 路径。无向图奇度顶点数本来必为偶数,但仍显式检查 0 或 2,使判据清晰。最坏扫描 ∣V∣2|V|^2 个矩阵单元,时间 O(∣V∣2)O(|V|^2);除输入矩阵外只用固定变量,额外空间 O(1)O(1)。题目签名按值传 G,按抽象算法计原有图为输入,不把固定 MAXV 的参数复制另称新的规模增长。

进入练习

第 42 题

数据结构
8 分

已知某排序算法如下:

c 复制代码
void cmpCountSort(int a[],int b[],int n)
{  int i,j,*count;
  count=(int *)malloc(sizeof(int)*n);  //C++语言:count=new int[n];
  for(i=0;i<n;i++)  count[i]=0;
  for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
      if(a[i]<a[j])  count[j]++;
      else  count[i]++;
  for(i=0;i<n;i++)  b[count[i]]= a[i];
  free(count);  //C++语言:delete[] count;
}

请回答下列问题。
1)若有 int a[] = {25,-10,25,10,11,19},b[6];,则调用 cmpCountSort(a,b,6) 后数组 b 中的内容是什么?
2)若 a 中含有 n 个元素,则算法执行过程中,元素之间的比较次数是多少?
3)该算法是稳定的吗?若是,则阐述理由;否则,修改为稳定排序算法。

查看答案与解析收起答案与解析

**算法含义。**两层循环只比较 i<j 的元素对,给较大元素的 count 加一;相等时原代码给较早的 i 加一。最后 count[i] 是元素的输出下标,等于比它小的元素数加上相等但在它后面的元素数,因此各元素的排名仍唯一,不会覆盖同一个 b 位置。

**(1)具体计数。**区分两个 25 为 25a25_a(原下标 0)、25b25_b(原下标 2):

原元素 25a -10 25b 10 11 19
最终 count 5 0 4 1 2 3

所以 b 为 {-10,10,11,19,25b,25a},若只写数值就是 {-10,10,11,19,25,25}。数值升序不等于相等元素原次序也保留。

**(2)比较次数。**每对不同下标恰比较一次,i=0 比较 n-1 次,i=1 比较 n-2 次,直到最后一次 1 次,总数 (n−1)+(n−2)+⋯+1=n(n−1)/2(n-1)+(n-2)+\cdots+1=n(n-1)/2。初始化 count 和最后输出只做赋值,不另算关键字比较;时间复杂度 O(n2)O(n^2),count 占 O(n)O(n) 额外空间。

**(3)稳定性修改。**原算法不稳定,相等时增加先出现元素的排名,让它排在后出现元素之后。把比较条件改为 ≤,相等时给 j 加计数即可:

c 复制代码
for (i = 0; i < n - 1; ++i)
    for (j = i + 1; j < n; ++j)
        if (a[i] <= a[j]) count[j]++;  // 相等时后出现者排后
        else count[i]++;

其余初始化、输出与释放代码不变。新排名为“更小元素数量+相等且先出现元素数量”,因此相同关键字按原下标递增排放,稳定;对不同关键字的升序关系不变。两个 25 的 count 改为 4、5,不再颠倒。C 的 malloc 对应 free;若用 C++ new[] 分配,则仍须 delete[] 释放。空数组无元素比较,单元素排名为 0,结论也适用。

进入练习

第 43 题

计算机组成原理
15 分

假定计算机 M 字长为 16 位,按字节编址,连接 CPU 和主存的系统总线中地址线为 20 位、数据线为 8 位,采用 16 位定长指令字,指令格式及其说明如下:

2021 年真题配图

其中,op1~op3 为操作码,rs、rt 和 rd 为通用寄存器编号,R[r] 表示寄存器 r 的内容,imm 为立即数,target 为转移目标的形式地址。请回答下列问题。
1)ALU 的宽度是多少位?可寻址主存空间大小为多少字节?指令寄存器、主存地址寄存器(MAR)和主存数据寄存器(MDR)分别应有多少位?
2)R 型格式最多可定义多少种操作?I 型和 J 型格式总共最多可定义多少种操作?通用寄存器最多有多少个?
3)假定 op1 为 0010 和 0011 时,分别表示带符号整数减法和带符号整数乘法指令,则指令 01B2H 的功能是什么(参考上述指令功能说明的格式进行描述)?若 1、2、3 号通用寄存器当前内容分别为 B052H、0008H、0020H,则分别执行指令 01B2H 和 01B3H 后,3 号通用寄存器内容各是什么?各自结果是否溢出?
4)若采用 I 型格式的访存指令中 imm(偏移量)为带符号整数,则地址计算时应对 imm 进行零扩展还是符号扩展?
5)无条件转移指令可以采用上述哪种指令格式?

查看答案与解析收起答案与解析

**(1)各部件位数。**机器字长是 16 位,ALU 的基本整数运算宽度为 16 位。20 根地址线形成 2202^{20} 个字节地址,可寻址主存 2202^{20} B=1 MB。IR 保存一条 16 位指令,需 16 位;MAR 保存主存地址,需 20 位;MDR 与 8 位数据总线交换一份数据,需 8 位。字长、指令字长、地址宽度和总线数据宽度是不同参数;一个 16 位指令通过 8 位总线可分两次读取。

**(2)操作数与寄存器数。**R 型高 6 位固定为 000000,用末尾 4 位 op1 区分操作,最多 24=162^4=16 种。I、J 型均使用高 6 位作主操作码,但 000000 已留给 R 型,两者合计最多使用 26−1=632^6-1=63 种,不能每型各算 63 再相加,那会让同一编码指向两种不同格式。rs、rt、rd 每个字段 2 位,最多编号 22=42^2=4 个通用寄存器。I 型 imm 为 6 位,J 型 target 为 10 位。

**(3)解码与运算。**01B2H 展开并按 R 型字段分割为 000000∣01∣10∣11∣0010000000\mid01\mid10\mid11\mid0010,所以 rs=1、rt=2、rd=3,op1=0010 表示减法,功能为 R[3]←R[1]−R[2]R[3]\leftarrow R[1]-R[2]。01B3H 只有末尾 op1 改为 0011,功能为 R[3]←R[1]×R[2]R[3]\leftarrow R[1]\times R[2]。

R1=B052H 是 16 位负补码,真值 45138−65536=−2039845138-65536=-20398;R2=0008H 为 8。分别执行的结果:

指令 数学真值 3号寄存器低16位 溢出判断
01B2H -20398-8=-20406 B04AH 在[-32768,32767]内,不溢出
01B3H -20398×8=-163184 8290H 超出16位带符号范围,溢出

乘法完整 32 位补码为 FFFD8290H,取低 16 位 8290H 虽可写入寄存器,却表示 -32112,不等于数学积;高半也不是低半符号位应有的全 1 扩展。因此不能仅看到截断结果仍为负就判无溢出。原 R3=0020H 被新结果覆盖,不参与这两条指令的源运算。

**(4)立即数扩展。**带符号偏移要符号扩展,将最高位复制到扩展的高位,使负偏移仍为负并保持数值;零扩展会把负偏移变成较大的正数,产生错误有效地址。

**(5)无条件转移。**采用 J 型,op3 指定转移操作,target 直接送 PC 的低 10 位,高位按图示保持。这是图中直接给出的无条件目标形成方式;I 型说明中的转移属于条件转移,不应把它默认写成相同的 J 型目标更新。

进入练习

第 44 题

计算机组成原理
8 分

假设计算机 M 的主存地址为 24 位,按字节编址;采用分页存储管理方式,虚拟地址为 30 位,页大小为 4 KB;TLB 采用 2 路组相联方式和 LRU 替换策略,共 8 组。请回答下列问题。
1)虚拟地址中哪几位表示虚页号?哪几位表示页内地址?
2)已知访问 TLB 时虚页号高位部分用作 TLB 标记,低位部分用作 TLB 组号,M 的虚拟地址中哪几位是 TLB 标记?哪几位是 TLB 组号?
3)假设 TLB 初始时为空,访问的虚页号依次为 10,12,16,7,26,4,12 和 20,在此过程中,哪一个虚页号对应的 TLB 表项被替换?说明理由。
4)若将 M 中的虚拟地址位数增加到 32 位,则 TLB 表项的位数增加几位?

查看答案与解析收起答案与解析

**(1)地址字段。**按字节编址,4 KB=2122^{12} B,每页的偏移需 12 位。30 位虚拟地址从 29 编到 0,低位 VA11~VA0 为页内地址,高位 VA29~VA12 为 18 位虚页号。物理地址 24 位只影响最终物理页框号宽度,不决定虚页号位数。

**(2)TLB 查找。**8 组需 log⁡28=3\log_2 8=3 位组号,用虚页号低 3 位,即 VA14~VA12;其余高 15 位 VA29~VA15 是标记。按组号找到一组后,在该组两路中比较有效位及 Tag。2 路表示每组两个页表项,8 组共有 16 项,不能把路数当组号位数。

**(3)替换过程。**组号为虚页号模 8,每组独立使用 LRU。下表仅列本次所访问的组,内容从最近使用到最久未用:

访问虚页号 组号 本组访问后内容 结果
10 2 10 空路装入
12 4 12 空路装入
16 0 16 空路装入
7 7 7 空路装入
26 2 26,10 第二空路装入
4 4 4,12 第二空路装入
12 4 12,4 命中并更新次序
20 4 20,12 替换最久未用的4

所以只有虚页 4 的 TLB 表项被替换。TLB 换掉映射缓存,不等于把虚页 4 对应的主存数据页换出,两个置换过程须区分。

**(4)增加地址位数。**虚拟地址从 30 位增至 32 位,页面仍为 4 KB,虚页号从 18 位增至 20 位;8 组仍用低 3 位,Tag 从 15 位增至 17 位。主存地址、物理页框号及保护控制字段未变,因此每个 TLB 表项仅增加 2 位。页内偏移不存为映射的独立 Tag,不能给每项多加一整组新虚拟地址字段。

进入练习

第 45 题

操作系统
7 分

下表给出了整型信号量 S 的 wait() 和 signal() 操作的功能描述,以及采用开/关中断指令实现信号量操作互斥的两种方法。

2021 年真题配图

请回答下列问题。
1)为什么在 wait() 和 signal() 操作中对信号量 S 的访问必须互斥执行?
2)分别说明方法 1 和方法 2 是否正确。若不正确,请说明理由。
3)用户程序能否使用开/关中断指令实现临界区互斥?为什么?

查看答案与解析收起答案与解析

**(1)为何必须互斥。**S 是多个执行者共享的资源计数,wait 的“检查 S>0,再减 1”必须成为原子动作,signal 的加 1 也不能被交叉读改写破坏。例如 S=1,两个进程都先看到它大于 0,随后分别减数,就可能让唯一资源被同时授予两人;两个加法都读旧值再写,也可能丢失一次释放。因此对 S 的访问要保证一致更新。

**(2)两种方法。**按开关中断能阻止进程切换的单处理机模型,方法 1 不正确:wait 先关中断,再在 S≤0 时一直循环。需要执行 signal 的其他进程得不到 CPU,S 无法变正,当前进程也永远不会走到开中断,形成无法解除的忙等。signal 自身关中断保护加 1 没问题,错误在 wait 把无资源等待也置于关中断区。

方法 2 正确:每次判断 S 前已关中断;若 S≤0,就短暂开中断,允许调度或中断处理让其他执行者运行、释放资源,然后再关中断重新检查。一旦发现 S>0,到随后的 S=S-1 之间都保持关中断,不会被另一进程抢走该资源,完成后再开中断。它仍是忙等实现,不等于阻塞信号量;在多处理机上只关本 CPU 中断不能阻止其他 CPU 访问 S,不能将此单机方法直接泛化。

**(3)用户态能否执行。**不能。开/关中断是特权指令,允许普通应用关闭中断会影响时钟调度和设备服务,使其他进程得不到执行机会。应用应使用内核或线程库提供的互斥锁、信号量等受控原语,而不是直接改处理器中断允许状态。进入临界区的需求本身不会授予特权。

进入练习

第 46 题

操作系统
8 分

某计算机用硬盘作为启动盘,硬盘第一个扇区存放主引导记录,其中包含磁盘引导程序和分区表。磁盘引导程序用于选择要引导哪个分区的操作系统,分区表记录硬盘上各分区的位置等描述信息。硬盘被划分成若干个分区,每个分区的第一个扇区存放分区引导程序,用于引导该分区中的操作系统。系统采用多阶段引导方式,除了执行磁盘引导程序和分区引导程序外,还需要执行ROM中的引导程序。请回答下列问题。
1)系统启动过程中操作系统的初始化程序、分区引导程序、ROM中的引导程序、磁盘引导程序的执行顺序是什么?
2)把硬盘制作为启动盘时,需要完成操作系统的安装、磁盘的物理格式化、逻辑格式化、对磁盘进行分区,执行这4个操作的正确顺序是什么?
3)磁盘扇区的划分和文件系统根目录的建立分别是在第2)问的哪个操作中完成的?

查看答案与解析收起答案与解析

**(1)多阶段启动顺序。**ROM 中的引导程序→磁盘引导程序→分区引导程序→操作系统初始化程序。开机时 RAM 中尚未装入操作系统,CPU 先执行非易失性 ROM 固件;它读取启动盘第一个扇区的主引导记录,将控制交给磁盘引导程序。该程序按分区表选择目标分区,再加载该分区首扇区的引导程序;后者寻找并装入对应系统,最后运行内核初始化,建立内存、设备及进程等运行环境。各阶段为下一阶段提供定位与装入能力,不能先执行尚未装入的系统程序。

**(2)制作启动盘顺序。**物理格式化→磁盘分区→逻辑格式化→安装操作系统。物理格式化先形成可寻址的扇区布局;分区把磁盘划成若干逻辑区域并记录边界;逻辑格式化在选定分区上建立文件系统结构;安装系统再把内核、系统文件及相应启动信息写入已能组织文件的分区。逻辑格式化必须知道分区范围,安装必须有可用文件系统,所以顺序不能任意交换。

**(3)具体工作归属。**扇区划分发生在物理格式化,建立每个扇区的物理记录结构。根目录是在逻辑格式化建立文件系统元数据时形成,供之后组织文件名与目录关系使用。分区只决定磁盘区域位置,并不自动建立该区域里的根目录;安装系统利用已有文件系统放入内容,也不代替这两个格式化步骤。

进入练习

第 47 题

计算机网络
9 分

某网络拓扑如题47图所示,以太网交换机S通过路由器R与Internet互联。路由器部分接口、本地域名服务器、H1、H2的IP地址和MAC地址如图中所示。在t₀时刻H1的ARP表和S的交换表均为空,H1在此刻利用浏览器通过域名www.abc.com请求访问Web服务器,在t₁时刻(t₁>t₀)S第一次收到了封装HTTP请求报文的以太网帧,假设从t₀到t₁期间网络未发生任何与此次Web访问无关的网络通信。

2021 年真题配图

请回答下列问题。
1)从t₀到t₁期间,H1除了HTTP之外还运行了哪个应用层协议?从应用层到数据链路层,该应用层协议报文是通过哪些协议进行逐层封装的?
2)若S的交换表结构为<MAC地址,端口>,则t₁时刻S交换表的内容是什么?
3)从t₀到t₁期间,H2至少会接收到几个与此次Web访问相关的帧?接收到的是什么帧?帧的目的MAC地址是什么?

查看答案与解析收起答案与解析

**默认约定。**按通常的域名访问过程,本次 H1 没有可直接使用的域名解析结果,需要查询图中的本地域名服务器;普通 DNS 查询采用 UDP。此约定决定了下面交换表中的 DNS 表项及两次 ARP 广播,不应把这些结果无条件推广到已命中 DNS 缓存的访问。

**(1)应用协议与封装。**H1 使用域名 www.abc.com,须先通过 DNS 把它解析为服务器 IP。普通 DNS 查询的逐层封装是 DNS 报文→UDP 数据报→IP 数据报→以太网帧。ARP 属于局域网地址解析过程,不是这里的另一个应用层协议,也不把 DNS 报文装进 ARP。访问 Web 的 HTTP 则另由 TCP 承载,应分开描述。

(2)按实际通信学习交换表。/25 掩码为 255.255.255.128,H1=192.168.1.2、本地 DNS=192.168.1.126、网关=192.168.1.1 同属 192.168.1.0/25。先为本地 DNS 发 ARP 请求,S 从源 MAC 学到 H1 的 CC→4;DNS ARP 回复及后续 DNS 响应使 S 学到 BB→1。目标 Web 在 Internet 上,H1 再解析网关 MAC,网关的 ARP 回复及 TCP 响应使 S 学到 AA→2。

S 只根据收到帧的源 MAC 和入端口学习,不根据帧内目的 IP 猜表项。到 t1 第一次收到 HTTP 请求时,DNS、网关解析及 TCP 建连已经完成,因此有:

MAC 地址 端口
00-11-22-33-44-AA 2
00-11-22-33-44-BB 1
00-11-22-33-44-CC 4

H2 没有主动参与这次访问,收到广播也不会以它的 MAC 发回目标响应,所以 DD→3 不会因为广播到达而被学到;图外 Web 服务器的 MAC 也不会跨路由器传进这个局域网。HTTP 请求帧源仍为 H1,目的以太网 MAC 为网关,IP 目的才是 Web 服务器。

**(3)H2 收到的帧。**最少 2 个,都是 H1 的广播 ARP 请求:一帧询问 192.168.1.126(本地 DNS)的 MAC,另一帧询问 192.168.1.1(默认网关)的 MAC,目的 MAC 均为 FF-FF-FF-FF-FF-FF。S 向除入端口外各端口转发广播,因此 H2 会收到,虽非被询问者而不回复。

DNS 和网关的 ARP 单播回复到 H1 时,S 已从请求中学到 H1 端口,可定向转发;H1 后续发 DNS 查询时已学到 DNS 端口,发 TCP/HTTP 时已学到网关端口,也无需向 H2 泛洪。其他节点若另需地址解析,可能增添广播,但题目问至少,两次由 H1 初始空 ARP 表直接要求的查询就是最低数。

**DNS 缓存的边界。**题面只明示 H1 的 ARP 表和 S 的交换表为空,未逐项列出浏览器或系统的 DNS 缓存状态。若 H1 已有有效的域名解析缓存,本次可直接使用 Web 服务器 IP,而无需联系本地 DNS。这样在最简通信过程中,S 会学习 CC→4 和 AA→2,BB→1 未必出现,H2 最少可只收到查询网关 MAC 的 1 帧 ARP 广播。该情形说明通常答案依赖开头的 DNS 查询约定;本题按该约定作答为 2 帧。

进入练习