shuatigo
只考虑主考点
计算机408

2018计算机408全卷预览

2018年计算机408真题

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

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

选择题

40 题 · 共 80 分

第 1 题

数据结构
2 分

若栈S₁中保存整数,栈S₂中保存运算符,函数F()依次执行下述各步操作:

(1)从S₁中依次弹出两个操作数a和b;

(2)从S₂中弹出一个运算符op;

(3)执行相应的运算b op a;

(4)将运算结果压入S₁中。
假定S₁中的操作数依次是5,8,3,2(2在栈顶),S₂中的运算符依次是*, -, +(+在栈顶)。
调用3次F()后,S₁栈顶保存的值是( )。

A. -15

B. 15

C. -20

D. 20

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

参考答案:B

答案:B。

**思路:**栈遵循后进先出,S₁ 的栈顶是 2,S₂ 的栈顶是 +。每次先弹出的数记为 a,后弹出的记为 b,而实际运算必须是 b op a。加法、乘法交换次序不影响结果,减法却不能颠倒。

第一次弹出 a=2、b=3 和 +,算 3+2=53+2=5,S₁ 从栈底到顶变为 [5,8,5]。第二次弹出 a=5、b=8 和 −,算 8−5=38-5=3,栈变为 [5,3]。第三次弹出 a=3、b=5 和 ×,算 5×3=155\times3=15,栈只剩 [15],因此选 B。A 的 −15 常见于把第二次减法算成 5−8;C、D 的 ±20 都不符合这三次弹出、运算、压回的状态变化。不能把原数列直接按通常算术表达式优先级计算。

进入练习

第 2 题

数据结构
2 分

现有队列Q与栈S,初始时Q中的元素依次是1,2,3,4,5,6(1在队头),S为空。若仅允许下列3种操作:①出队并输出出队元素;②出队并将出队元素入栈;③出栈并输出出栈元素,则不能得到的输出序列是( )。

A. 1,2,5,6,4,3

B. 2,3,4,5,6,1

C. 3,4,5,6,1,2

D. 6,5,4,3,2,1

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

参考答案:C

答案:C。

**基础:**队列只能从队头依次取出 1~6,取出的元素可以立即输出,也可以暂存在栈中;栈中的暂存元素最后只能逆序输出。判定时重点看为了输出前面的某个元素,哪些更早入队的元素必须先压栈。

A 可立即输出 1、2,把 3、4 压栈,再立即输出 5、6,最后弹出 4、3。B 可把 1 压栈,立即输出 2~6,再弹出 1。D 可把所有元素按 1~6 压栈,再从栈顶依次弹出 6~1,均可实现。C 要先输出 3、4、5、6,就必须把 1、2 暂存栈中,其中 2 在 1 上方;之后想先输出 1 再输出 2,违反栈顶只能先出 2 的规则,因此 C 不可能。三种允许操作中没有把栈内元素直接调换位置的操作。

进入练习

第 3 题

数据结构
2 分

设有一个 12×1212×12 的对称矩阵 MM,将其上三角部分的元素 mi,jm_{i,j}(1≤i≤j≤121≤ i≤ j≤12)按行优先存入 C 语言的一维数组 NN 中,元素 m6,6m_{6,6} 在 NN 中的下标是( )。

A. 50

B. 51

C. 55

D. 66

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

参考答案:A

答案:A。

**基础:**对称矩阵满足 mi,j=mj,im_{i,j}=m_{j,i},只存上三角即可保留全部独立元素。本题上三角包括主对角线,按行优先意味着先存第 1 行的 12 项,再存第 2 行的 11 项,依此类推。矩阵行列号从 1 开始,但 C 数组下标从 0 开始。

在 m6,6m_{6,6} 之前,前 5 行已经存入 12+11+10+9+8=5012+11+10+9+8=50 个元素。第 6 行上三角从 m6,6m_{6,6} 开始,它是该行第一项,行内没有额外偏移,所以其下标就是 50,选 A。B 的 51 是从 1 开始计数时的存储序号;C 的 55 多计了下三角部分;D 的 66 与前面行数之和不符。通用计算是先累加此前各行长度,再加本行偏移 j−i,本题偏移为 0。

进入练习

第 4 题

数据结构
2 分

设一棵非空完全二叉树T的所有叶结点均位于同一层,且每个非叶结点都有2个子结点。若T有k个叶结点,则T的结点总数是( )。

A. 2k-1

B. 2k

C. k2k^2

D. 2k−12^k-1

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

参考答案:A

答案:A。

**思路:**题设每个非叶结点都有两个孩子,说明没有度为 1 的结点。设非叶结点有 t 个,叶结点有 k 个,则总结点数为 k+t。一棵非空树的边数等于总结点数减 1,而每个非叶结点向下连两条边,因此还可以把边数写成 2t。

令 2t=k+t−12t=k+t-1,得到 t=k−1t=k-1,所以总结点数为 k+(k−1)=2k−1k+(k-1)=2k-1,选 A。B 的 2k 忽略了根没有父边这一差别;C 的 k2k^2 与边数关系不符;D 的 2k−12^k-1 错把叶结点数 k 当成了树的层数。也可用满二叉树关系复核:若有 h 层,叶数 k=2h−1k=2^{h-1},总结点 2h−1=2k−12^h-1=2k-1。k=1 时树只有根一个结点,公式仍成立。

进入练习

第 5 题

数据结构
2 分

已知字符集{a, b, c, d, e, f},若各字符出现的次数分别为6, 3, 8, 2, 10, 4,则对应字符集中各字符的哈夫曼编码可能是( )。

A. 00, 1011, 01, 1010, 11, 100

B. 00, 100, 110, 000, 0010, 01

C. 10, 1011, 11, 0011, 00, 010

D. 0011, 10, 11, 0010, 01, 000

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

参考答案:A

答案:A。

**步骤:**哈夫曼编码每次合并当前权值最小的两棵树。按 d=2、b=3、f=4、a=6、c=8、e=10 排序,依次合并为 d+b=5、f+5=9、a+c=14、9+e=19、14+19=33。沿树边指定 0、1,左右取法可以互换,但兄弟及层次关系必须符合合并过程。

A 中 a、c 为 00、01,对应权 14 的子树;d、b 为 1010、1011,共同形成权 5,再与 f=100 组成权 9,最后与 e=11 合并,正好符合构造。B 的 a=00 是 d=000、e=0010 的前缀,C 的 a=10 是 b=1011 的前缀,都不能成为前缀编码。D 虽无前缀冲突,却把最小权值的 b=3、d=2 放在不同子树,违背它们首先合并为兄弟的必然关系。因此选 A。

进入练习

第 6 题

数据结构
2 分

已知二叉排序树如下图所示,元素之间应满足的大小关系是( )。

2018 年第 6 题配图

A. x1<x2<x5x_{1}<x_{2}<x_{5}

B. x1<x4<x5x_{1}<x_{4}<x_{5}

C. x3<x5<x4x_{3}<x_{5}<x_{4}

D. x4<x3<x5x_{4}<x_{3}<x_{5}

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

参考答案:C

答案:C。

**基础:**二叉排序树要求一个结点的左子树所有关键字都比它小,右子树所有关键字都比它大,不只是直接孩子满足关系。图中 x₁ 的右孩子为 x₂,x₂ 的左孩子为 x₃;x₃ 的右孩子为 x₄,x₄ 的左孩子为 x₅。

x₅ 位于 x₃ 的右子树中,所以 x3<x5x_3<x_5;同时 x₅ 是 x₄ 的左孩子,所以 x5<x4x_5<x_4,合得 x3<x5<x4x_3<x_5<x_4,选 C。完整中序序列为 x₁、x₃、x₅、x₄、x₂,故 x1<x3<x5<x4<x2x_1<x_3<x_5<x_4<x_2。A 把最大值 x₂ 放在 x₅ 前,B 把 x₄、x₅ 顺序颠倒,D 把 x₄ 放在 x₃ 前,均错误。读图时要根据左右子树的整体范围确定大小。

进入练习

第 7 题

数据结构
2 分

下列选项中,不是如下有向图的拓扑序列的是( )。

2018 年第 7 题配图

A. 1, 5, 2, 3, 6, 4

B. 5, 1, 2, 6, 3, 4

C. 5, 1, 2, 3, 6, 4

D. 5, 2, 1, 6, 3, 4

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

参考答案:D

答案:D。

**基础:**拓扑序列要求每一条有向边 u→v 的起点 u 排在终点 v 之前。图中主要约束为 1→2、1→3、5→2、2→3、2→6、3→4、6→4、5→4;因此 2 必须在 1 和 5 之后,3、6 必须在 2 之后,4 必须在 3、6 之后。

A 的 1、5 在前,随后 2、3、6、4,符合全部依赖;B 的 5、1、2、6、3、4 只交换了没有先后依赖的 3、6,也合法;C 的 5、1、2、3、6、4 同样合法。D 的 5、2、1、6、3、4 把 2 放在 1 前,直接违反边 1→2,所以它不是拓扑序列,选 D。不能仅看某个顶点有几条出边决定顺序,而要逐条检查它依赖的前驱是否已排在前面。

进入练习

第 8 题

数据结构
2 分

高度为5的3阶B树含有的关键字个数至少是( )。

A. 15

B. 31

C. 62

D. 242

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

参考答案:B

答案:B。

**基础:**3 阶 B 树一个结点最多有 3 棵子树、2 个关键字。非根内部结点至少有 ⌈3/2⌉=2\lceil3/2\rceil=2 棵子树,至少有 1 个关键字;非叶根至少有 2 棵子树,也至少有 1 个关键字。题目高度按包含关键字的结点层数计算,叶层同样含关键字。

要让高度为 5 而关键字最少,各内部结点都取最少的两个孩子,每个结点都只存一个关键字。五层的结点数依次为 1、2、4、8、16,因此最少关键字数为 1+2+4+8+16=311+2+4+8+16=31,选 B。A 的 15 只对应 4 层;C 的 62 把每结点错误地强制存 2 个关键字;D 的 242 是按每结点 3 个孩子、2 个关键字得到的最大规模,不是最少。

进入练习

第 9 题

数据结构
2 分

现有长度为7、初始为空的散列表HT,散列函数H(k) = k % 7,用线性探测再散列法解决冲突。将关键字22,43,15依次插入到HT后,查找成功的平均查找长度是( )。

A. 1.5

B. 1.6

C. 2

D. 3

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

参考答案:C

答案:C。

**步骤:**线性探测遇到冲突后依次试下一槽,探测下标按表长 7 回绕。三个关键字的初始地址分别是 22 mod 7=122\bmod7=1、43 mod 7=143\bmod7=1、15 mod 7=115\bmod7=1,都落在 1 号槽。

插入 22 时槽 1 为空,一次探测成功;插入 43 时槽 1 已有 22,再探测槽 2,共两次;插入 15 时槽 1、2 都已占用,直到槽 3 才插入,共三次。查找成功时必须从各自散列地址沿同样路径比较,所以查找长度为 1、2、3,等概率平均为 (1+2+3)/3=2(1+2+3)/3=2,选 C。A 的 1.5、B 的 1.6 没有正确平均三条查找路径;D 的 3 是最长一次的比较数,不是平均数。不能只看到三个元素最终都能直接读到,就把每次查找都算成 1。

进入练习

第 10 题

数据结构
2 分

对初始数据序列(8,3,9,11,2,1,4,7,5,10,6)进行希尔排序。若第一趟排序结果为(1,3,7,5,2,6,4,9,11,10,8),第二趟排序结果为(1,2,6,4,3,7,5,8,11,10,9),则两趟排序采用的增量(间隔)依次是( )。

A. 3,1

B. 3,2

C. 5,2

D. 5,3

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

参考答案:D

答案:D。

**基础:**希尔排序按间隔 d 把下标差为 d 的元素分为一组,对每组作插入排序。用从 1 开始的位置编号,d=5 时初始序列分组为:位置 1、6、11 的 (8,1,6) 排成 (1,6,8);位置 2、7 的 (3,4) 不变;位置 3、8 的 (9,7) 排成 (7,9);位置 4、9 的 (11,5) 排成 (5,11);位置 5、10 的 (2,10) 不变,恰得第一趟结果。

对第一趟再用 d=3:位置 1、4、7、10 的 (1,5,4,10) 排成 (1,4,5,10);位置 2、5、8、11 的 (3,2,9,8) 排成 (2,3,8,9);位置 3、6、9 的 (7,6,11) 排成 (6,7,11),恰得第二趟。故选 D。A、B 的第一增量 3 不符;C 的第二增量 2 应使奇偶位置各自有序,但第二结果的奇数位 1、6、3、5、11、9 并未有序。

进入练习

第 11 题

数据结构
2 分

在将数据序列(6,1,5,9,8,4,7)建成大根堆时,正确的序列变化过程是( )。

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

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

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

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

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

参考答案:A

答案:A。

**本题采用的建堆约定:**按教材常用的自底向上建堆算法,从最后一个非叶结点开始,按下标递减的顺序逐个向下调整。对 7 个元素用下标 1~7 表示,最后一个非叶结点为 ⌊7/2⌋=3\lfloor7/2\rfloor=3,所以依次调整下标 3、2、1。调整父结点前,其左右子树都已是大根堆;调整时与较大的孩子比较并交换。

**逐步调整:**初始序列为 6,1,5,9,8,4,7。

  1. 下标 3 的元素 5 的两个孩子是 4、7,和较大的 7 交换,得 6,1,7,9,8,4,5。
  2. 下标 2 的元素 1 的两个孩子是 9、8,和较大的 9 交换,得 6,9,7,1,8,4,5。
  3. 调整根:6 与孩子 9、7 比较,先和 9 交换,得 9,6,7,1,8,4,5;6 下移后继续与孩子 1、8 比较,再和 8 交换,得 9,8,7,1,6,4,5。

这四个状态正是 A。B 先调整下标 2,再调整下标 3,不符合本题默认的下标递减扫描;C、D 也提前调整了根,均不符合这一标准流程。

**严谨边界:**大根堆本身只要求每个父结点不小于其孩子,并不要求任意建堆算法都按同一顺序进行。下标 2 和 3 的子树互不依赖,若允许先调 2 再调 3,B 也能合法建成大根堆。因此选择 A 是采用本题的标准建堆扫描约定,不能把 B 说成在所有建堆方法下都不合法。

进入练习

第 12 题

计算机组成原理
2 分

冯·诺依曼结构计算机中数据采用二进制编码表示,其主要原因是( )。

I. 二进制的运算规则简单

II. 制造两个稳态的物理器件较容易

III. 便于用逻辑门电路实现算术运算

A. 仅I、II

B. 仅I、III

C. 仅II、III

D. I、II和III

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

参考答案:D

答案:D。

**基础:**二进制只用 0、1 两种符号,这与电子器件的两种稳定状态天然对应,例如高低电平。数字电路无需把许多细微电平精确区分为不同数字,因而器件制造与状态判别更容易,II 正确。

I 也正确,二进制加法只有少数基本组合:0+0=0、0+1=1、1+1=10,乘法也很简单,易形成统一的运算规则。III 正确,0、1 可以直接对应布尔变量,通过与、或、非、异或等逻辑门组成半加器、全加器,进而实现多位算术运算。三项都解释了采用二进制的原因,选 D。A 漏掉逻辑电路实现方面,B 漏掉器件易制造方面,C 漏掉运算规则简单方面。二进制位串虽然可能更长,但电路实现简洁是这里关注的主要优势。

进入练习

第 13 题

计算机组成原理
2 分

假定带符号整数采用补码表示,若int型变量x和y的机器数分别是FFFF FFDFH和0000 0041H,则x、y的值以及x-y的机器数分别是( )。

A. x = -65, y = 41, x-y的机器数溢出

B. x = -33, y = 65, x-y的机器数为FFFF FF9DH

C. x = -33, y = 65, x-y的机器数为FFFF FF9EH

D. x = -65, y = 41, x-y的机器数为FFFF FF96H

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

参考答案:C

答案:C。

**步骤:**32 位補码最高位为 1 时表示负数。对 FFFFFFDFH 取反得到 00000020H,再加 1 得 00000021H=33,所以 x=−33;y 的符号位为 0,41H=4×16+1=6541\mathrm H=4\times16+1=65,所以 y=65。

差为 x−y=−33−65=−98x-y=-33-65=-98。98 的十六进制为 62H,取反加 1 得 ∼00000062H+1=FFFFFF9EH\sim00000062\mathrm H+1=FFFFFF9E\mathrm H;−98 在 32 位有符号整数范围内,不发生溢出。故选 C。A、D 既把 x 算成 −65,又把十六进制 41H 当成十进制 41;B 虽然 x、y 正确,但 FFFFFF9DH 表示 −99,少了取反后的“加 1”。补码负数求值与构造都要完整执行取反加一。

进入练习

第 14 题

计算机组成原理
2 分

IEEE 754单精度浮点格式表示的数中,最小的规格化正数是( )。

A. 1.0×2−1261.0×2^{-126}

B. 1.0×2−1271.0×2^{-127}

C. 1.0×2−1281.0×2^{-128}

D. 1.0×2−1491.0×2^{-149}

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

参考答案:A

答案:A。

**基础:**IEEE 754 单精度由 1 位符号、8 位阶码和 23 位尾数字段组成。规格化有限数的阶码编码为 1~254,真指数为“阶码编码−127”,有效尾数具有隐含的最高位 1,形式为 1.f1.f。

最小规格化正数应取符号位 0、最小有效阶码编码 1、尾数字段全 0。真指数为 1−127=−1261-127=-126,有效尾数为 1.0,故数值为 1.0×2−1261.0\times2^{-126},选 A。B 的 −127 不能由规格化最小阶码得到;C 的 −128 更不属于该指数下界;D 的 2−1492^{-149} 是最小非规格化正数,其阶码字段全 0、尾数字段仅最低位为 1。题目有“规格化”限定,不能把全部正浮点数中最小的非规格化值拿来作答。

进入练习

第 15 题

计算机组成原理
2 分

某32位计算机按字节编址,采用小端(Little Endian)方式。若语句“int i = 0;”对应指令的机器代码为“C7 45 FC 00 00 00 00”,则语句“int i = -64;”对应指令的机器代码是( )。

A. C7 45 FC C0 FF FF FF

B. C7 45 FC 0C FF FF FF

C. C7 45 FC FF FF FF C0

D. C7 45 FC FF FF FF 0C

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

参考答案:A

答案:A。

**步骤:**原指令最后 4 字节是写入 i 的立即数 0,其余 C7 45 FC 描述相同的操作及存放位置。改为 i=−64 时,只需把立即数部分改为 −64 的 32 位补码,不能把整条指令按小端整体倒排。

64=40H,对 00000040H 取反加 1 得 FFFFFFC0H。小端表示最低有效字节放在最低地址,四个立即数字节依次为 C0、FF、FF、FF,所以完整机器代码为 C7 45 FC C0 FF FF FF,选 A。B 的 0C 把 C0 的十六进制数位倒置;C 把正确的补码按大端顺序存放;D 同时存在字节顺序和数位错误。小端调换的是多字节数的字节顺序,不调换一个字节内部的高低半字节。

进入练习

第 16 题

计算机组成原理
2 分

整数x的机器数为1101 1000,分别对x进行逻辑右移1位和算术右移1位操作,得到的机器数分别是( )。

A. 1110 1100, 1110 1100

B. 0110 1100, 1110 1100

C. 1110 1100, 0110 1100

D. 0110 1100, 0110 1100

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

参考答案:B

答案:B。

**基础:**右移时原来的最低位被移出,其余位向右移动一位;区别在最高位补什么。逻辑右移不考虑符号,最高位一律补 0;对补码数作算术右移时,最高位复制原符号位,以尽可能保持有符号数的数值意义。

原机器数为 11011000,移走末尾的 0 后,其余 7 位为 1101100。逻辑右移补 0,得 01101100;算术右移的原符号位为 1,补 1 后得 11101100,选 B。A 把逻辑右移也补了符号位,C 把两种结果次序颠倒,D 把算术右移错误补 0。若按 8 位补码解释,原数为 −40,算术右移得 −20;逻辑右移则得到无符号位串对应的 108,不能用它代替有符号除二。

进入练习

第 17 题

计算机组成原理
2 分

假定DRAM芯片中存储阵列的行数为r、列数为c,对于一个2K×1位的DRAM芯片,为保证其地址引脚数最少,并尽量减少刷新开销,则r、c的取值分别是( )。

A. 2048、1

B. 64、32

C. 32、64

D. 1、2048

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

参考答案:C

答案:C。

**基础:**2K×1 位表示有 2K=2048=2112K=2048=2^{11} 个存储单元,所以行地址位数与列地址位数之和为 11。DRAM 采用行列地址引脚复用,先送行地址再送列地址,共用引脚数取两者位数的最大值。

要让引脚最少,应把 11 位拆得尽量接近,即 5+6 或 6+5,均需 6 个地址引脚。对应 32 行×64 列与 64 行×32 列。刷新按行进行,行数越少,一个刷新周期内要刷新的行越少,所以在两种最少引脚的方案中选 32 行、64 列,即 C。A 的 2048 行×1 列、D 的 1 行×2048 列都要 11 个地址引脚;B 虽只需 6 个引脚,却有 64 行,刷新开销比 C 大。先满足最少引脚,再比较刷新行数。

进入练习

第 18 题

计算机组成原理
2 分

按字节编址的计算机中,某double型数组A的首地址为2000H,使用变址寻址和循环结构访问数组A,保存数组下标的变址寄存器初值为0,每次循环取一个数组元素,其偏移地址为变址值乘以sizeof(double),取完后变址寄存器内容自动加1。若某次循环所取元素的地址为2100H,则进入该次循环时变址寄存器的内容是( )。

A. 25

B. 32

C. 64

D. 100

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

参考答案:B

答案:B。

**本题采用的机器模型:**按计算机组成原理考试中常用的双精度浮点模型,double 型元素占 8 B,即 sizeof⁡(double)=8\operatorname{sizeof}(\text{double})=8。变址寄存器保存数组下标,而不是字节偏移;元素地址等于“数组首地址 + 下标 × 元素大小”。

本次访问地址为 2100H,首地址为 2000H,所以字节偏移为

2100H−2000H=0100H=256 B.2100\mathrm H-2000\mathrm H=0100\mathrm H=256\text{ B}.

设进入本次循环时的变址值为 kk,则 k×8=256k\times8=256,解得 k=32k=32,选 B。C 的 64 相当于误将 double 当成 4 B 元素;A 的 25、D 的 100 都不满足 256 B 的偏移关系。题目问的是进入本次循环时的值,尚未执行取完后的自动加 1;该次取完后寄存器才变为 33。

**严谨边界:**8 B 是本题采用的双精度机器模型约定,并非 C 语言对所有实现强制规定的 double 宽度。如果机器模型另行指定 double 占 ss B,一般关系应是 k=256/sk=256/s。本题依照 8 B 模型得 32,不应把数组下标 32、字节偏移 256 和取完后的寄存器值 33 混为一谈。

进入练习

第 19 题

计算机组成原理
2 分

减法指令“sub R1, R2, R3”的功能为“(R1)-(R2)→R3”,该指令执行后将生成进位/借位标志CF和溢出标志OF。若(R1)=FFFF FFFFH,(R2)=FFFF FFF0H,则该减法指令执行后,CF与OF分别为( )。

A. CF=0, OF=0

B. CF=1, OF=0

C. CF=0, OF=1

D. CF=1, OF=1

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

参考答案:A

答案:A。

**基础:**CF 反映无符号减法是否借位,OF 反映有符号补码结果是否越界;同一位串在这两种判定中要按不同数值解释,不能看到操作数最高位都为 1 就判断溢出。

按无符号解释,FFFFFFFH=232−12^{32}-1,FFFFFFF0H=232−162^{32}-16,被减数大于减数,差为 15,不需向字长范围之外借位,所以 CF=0。按有符号解释,它们分别为 −1、−16,运算为 −1−(−16)=15-1-(-16)=15,可在 32 位补码范围内正确表示,因此 OF=0。结果机器数为 0000000FH,选 A。B 错判借位,C 错判有符号溢出,D 两项都错。这里 CF 按题目减法借位标志的定义判断,不把加法器内部的进位输出直接当作它。

进入练习

第 20 题

计算机组成原理
2 分

若某计算机最复杂指令的执行需要完成5个子功能,分别由功能部件A~E实现,各功能部件所需时间分别为80ps、50ps、50ps、70ps和50ps,采用流水线方式执行指令,流水线段寄存器延时为20ps,则CPU时钟周期至少为( )。

A. 60ps

B. 70ps

C. 80ps

D. 100ps

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

参考答案:D

答案:D。

**基础:**同步流水线的所有段共用一个时钟周期,最慢的功能段也必须在一个节拍内完成;此外,流水段寄存器还要完成数据锁存与输出,题目给出这部分延迟为 20 ps,必须计入周期下界。

A~E 五段功能部件耗时分别为 80、50、50、70、50 ps,最长为 A 的 80 ps。因此 Tclk≥max⁡(80,50,50,70,50)+20=100T_{\rm clk}\ge\max(80,50,50,70,50)+20=100 ps,选 D。A 的 60 ps、B 的 70 ps 无法容纳最慢功能段;C 的 80 ps 只计组合逻辑而漏掉段寄存器延迟。五段时间总和加寄存器开销可用于单条指令经过整个流水线的延迟分析,但不能把总和当作各段共用的时钟周期。

进入练习

第 21 题

计算机组成原理
2 分

下列选项中,可提高同步总线数据传输率的是( )。

I. 增加总线宽度

II. 提高总线工作频率

III. 支持突发传输

IV. 采用地址/数据线复用

A. 仅I、II

B. 仅I、II、III

C. 仅III、IV

D. I、II、III和IV

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

参考答案:B

答案:B。

**基础:**同步总线的数据率取决于每次能传多少位、每秒能做多少次传输,以及控制与地址阶段占用的额外周期。I 增加总线宽度,使一次并行传的数据更多;II 提高工作频率,使相同周期数内的传输更快;III 突发传输先给一次起始地址,再连续传多个数据单元,摊薄地址与控制开销,三项都可提高有效传输率。

IV 地址/数据线复用使同一组引脚在不同阶段分别传地址和数据,主要收益是减少引脚和线路,不能同时传这两类信息,反而需要分时占用。因此不把 IV 作为提高数据率的措施。选 B 的 I、II、III。A 漏掉突发传输,C 包含错误的 IV且漏掉 I、II,D 同样多包含 IV。要区分节省硬件成本与增加数据吞吐量。

进入练习

第 22 题

计算机组成原理
2 分

下列关于外部I/O中断的叙述中,正确的是( )。

A. 中断控制器按所接收中断请求的先后次序进行中断优先级排队

B. CPU响应中断时,通过执行中断隐指令完成通用寄存器的保护

C. CPU只有在处于中断允许状态时,才能响应外部设备的中断请求

D. 有中断请求时,CPU立即暂停当前指令执行,转去执行中断服务程序

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

参考答案:C

答案:C。

**基础:**外部 I/O 中断由设备提出请求,但 CPU 是否响应还取决于中断允许状态、屏蔽情况和优先级。题目讨论通常的可屏蔽 I/O 中断,CPU 处于中断允许状态是响应的必要条件,C 正确;“允许”并不意味着每个请求都立即获准。

A 错误,中断控制器通常按预设优先级或相应仲裁规则排队,不能仅按请求到达先后决定优先级。B 错误,中断隐指令主要完成保存断点、关中断、取得服务入口等响应操作,通用寄存器现场一般由服务程序显式保存。D 错误,普通外部中断通常在一条指令执行完成的中断检测点被响应,不能把当前指令随意截断。区分设备发出请求、CPU 响应中断和软件服务中断三个阶段,选 C。

进入练习

第 23 题

操作系统
2 分

下列关于多任务操作系统的叙述,正确的是( )。

I. 具有并发和并行的特点

II. 需要实现对共享资源的保护

III. 需要运行在多CPU的硬件平台上

A. 仅I

B. 仅II

C. 仅I、II

D. I、II、III

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

参考答案:C

答案:C。

**基础:**多任务系统允许多个任务在一段时间内共同推进,单 CPU 上可通过交替运行实现并发;CPU 与 I/O 设备也可同时工作,多处理器上还可使多个任务真正同时执行。因此按本题对系统整体活动的描述,I 的并发和并行特征成立,不能把“并行”仅限于两个进程同一时刻占用 CPU。

II 正确,多个任务共享内存、文件和设备等资源,若不保护,可能产生竞争、数据破坏和访问越权,需要同步互斥及访问控制。III 错误,多任务并不要求多 CPU,一台单处理器计算机同样能用调度与切换运行多个任务。于是仅 I、II 正确,选 C。A、B 各漏掉一项,D 把多处理器错误当成必要条件。要区分支持多任务的软件机制与提供多个处理器的硬件条件。

进入练习

第 24 题

操作系统
2 分

某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为1μs。在T时刻就绪队列中有3个进程P₁、P₂和P₃,其在就绪队列中的等待时间、需要的CPU时间和优先权如下表所示。

进程 等待时间 需要的 CPU 时间 优先权
P₁ 30μs 12μs 10
P₂ 15μs 24μs 30
P₃ 18μs 36μs 20

若优先权值大的进程优先获得 CPU,从 T 时刻起系统开始进程调度,系统的平均周转时间为( )。

A. 54μs

B. 73μs

C. 74μs

D. 75μs

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

参考答案:D

答案:D。

**步骤:**优先权值越大越先运行,所以调度顺序为 P₂(30)、P₃(20)、P₁(10)。采用非抢占策略,每个进程获得 CPU 后执行完所需时间才调度下一进程。每次调度与切换都用 1 μs,T 时刻开始的首次调度也要计入。

进程 从 T 起的完成时间 T 前已等待 周转时间
P₂ 1+24=251+24=25 μs 15 μs 40 μs
P₃ 25+1+36=6225+1+36=62 μs 18 μs 80 μs
P₁ 62+1+12=7562+1+12=75 μs 30 μs 105 μs

周转时间从进程进入系统开始,不能只计 T 之后。平均值为 (40+80+105)/3=75(40+80+105)/3=75 μs,选 D。A 的 54 μs 是只平均 T 后完成时间;B 的 73 μs 漏掉全部调度开销,C 的 74 μs 常见于漏计首次调度。

进入练习

第 25 题

操作系统
2 分

属于同一进程的两个线程thread1和thread2并发执行,共享初值为0的全局变量x。thread1和thread2实现对全局变量x加1的机器级代码描述如下。

2018 年第 25 题配图

在所有可能的指令执行序列中,使 x 的值为 2 的序列个数是( )。

A. 1

B. 2

C. 3

D. 4

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

参考答案:B

答案:B。

**基础:**图中每个线程的“加 1”都分为读 x 到寄存器、寄存器自增、写回 x 三条机器指令。单条指令可按题目模型交错,但每个线程内部必须保持读→加→写的顺序。不能把三条指令合起来视为不可分割操作。

初始 x=0,若两个线程都在任何一次写回前读到 0,它们各自只算出 1,最终 x=1。要得到 2,必有一个线程读到另一个已经写回的 1。前线程从读到写的三条都必须先完成,后线程才能执行自己的第一条读;后线程剩下两条按顺序完成。因此只有“thread1 三条→thread2 三条”和“thread2 三条→thread1 三条”两个序列,选 B。A 漏掉对称顺序,C、D 多计了不能使第二次读得到 1 的交错序列。

进入练习

第 26 题

操作系统
2 分

假设系统中有4个同类资源,进程P₁,P₂和P₃需要的资源数分别为4,3和1,P₁,P₂和P₃已申请到的资源数分别为2,1和0,则执行安全性检测算法的结果是

A. 不存在安全序列,系统处于不安全状态

B. 存在多个安全序列,系统处于安全状态

C. 存在唯一安全序列P₃,P₁,P₂,系统处于安全状态

D. 存在唯一安全序列P₃,P₂,P₁,系统处于安全状态

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

参考答案:A

答案:A。

**基础:**安全性检测尝试找一个进程完成顺序:每一步用当前可用资源满足某个进程的剩余最大需求,该进程完成后返还原来占有的资源,再继续。总资源为 4,已分配 2+1+0=32+1+0=3,初始可用数 Work=1。

进程 最大需求 已分配 尚需
P₁ 4 2 2
P₂ 3 1 2
P₃ 1 0 1

只有 P₃ 尚需 1≤Work,可以先完成。但检测中完成后 Work 增加的是其原占有量 0,仍为 1;借给它的 1 台随后归还,只是恢复原可用数。P₁、P₂ 各还需 2,都无法继续,所以不存在安全序列,选 A。B、C、D 均错误认定安全;尤其不能把 P₃ 的最大需求 1 当作额外释放资源,误把 Work 增到 2。不安全不等于此刻必已死锁。

进入练习

第 27 题

操作系统
2 分

下列选项中,可能导致当前进程P阻塞的事件是

I. 进程P申请临界资源

II. 进程P从磁盘读数据

III. 系统将CPU分配给高优先权的进程

A. 仅I

B. 仅II

C. 仅I、II

D. I、II、III

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

参考答案:C

答案:C。

**基础:**阻塞表示进程等待某个事件或资源,即使给它 CPU 也无法继续;就绪表示已具备执行条件,只是尚未获得 CPU。题目问“可能导致”,只需说明事件在合适条件下能使进程等待。

I 申请临界资源时若资源正在被其他进程使用,P 可因等待互斥条件而阻塞;II 从磁盘读数据时若需等待 I/O 完成,P 也会阻塞。III 系统把 CPU 给更高优先权进程,只是抢占了 P 的处理机,P 没有缺少运行所需条件,应从运行转为就绪,而不是阻塞。因此仅 I、II 符合,选 C。A、B 各漏掉一种阻塞原因,D 混淆了就绪和阻塞。临界资源空闲或使用异步 I/O 时也可能不阻塞,所以不能把 I、II 理解为每次必然阻塞。

进入练习

第 28 题

操作系统
2 分

若x是管程内的条件变量,则当进程执行x.wait()时所做的工作是

A. 实现对变量x的互斥访问

B. 唤醒一个在x上阻塞的进程

C. 根据x的值判断该进程是否进入阻塞状态

D. 阻塞该进程,并将之插入x的阻塞队列中

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

参考答案:D

答案:D。

**基础:**管程用互斥入口保证同一时刻只有一个进程执行其中代码,条件变量则用于等待某个逻辑条件,例如“缓冲区非空”。调用 x.wait() 表示当前条件尚未满足,应把调用者挂起并加入 x 对应的等待队列,同时释放管程的访问权,让其他进程有机会进入并改变条件,选 D。

A 描述的是互斥访问,管程入口已提供这项机制,wait 的作用不是保护变量 x。B 唤醒等待者对应 x.signal() 等通知操作。C 把条件变量误当成保存资源数量的计数信号量;通常由程序先判断实际共享状态,再决定是否调用 wait,wait 本身不按一个整数 x 的值决定阻塞。若等待时不释放管程,其他进程无法进入完成条件,会导致等待无法被解除。

进入练习

第 29 题

操作系统
2 分

当定时器产生时钟中断后,由时钟中断服务程序更新的部分内容是

I. 内核中时钟变量的值

II. 当前进程占用CPU的时间

III. 当前进程在时间片内的剩余执行时间

A. 仅I、II

B. 仅II、III

C. 仅I、III

D. I、II、III

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

参考答案:D

答案:D。

**基础:**定时器周期性产生中断,操作系统据此推进时间、统计 CPU 使用量和实现时间片调度。I 更新内核时钟变量,使系统能够表示当前时间、判断睡眠或定时等待是否到期;II 把本次时钟间隔计入当前运行进程的 CPU 用时;III 相应扣减该进程在当前时间片内的剩余时间,三项都属于时钟服务的工作。

例如时间片开始有 10 个时钟单位,每次滴答都把剩余值减 1,到 0 时即可设置重新调度条件,同时累计已用 CPU 时间。故选 D。A 漏掉剩余时间片,B 漏掉内核时间,C 漏掉进程用时统计。更新计时信息与实际完成进程切换可处在不同的内核步骤,但这不影响三类信息需要由时钟事件维护。

进入练习

第 30 题

操作系统
2 分

系统总是访问磁盘的某个磁道而不响应其他磁道的访问请求,这种现象称为磁臂黏着。下列磁盘调度算法中,不会导致磁臂黏着的是

A. 先来先服务(FCFS)

B. 最短寻道时间优先(SSTF)

C. 扫描算法(SCAN)

D. 循环扫描算法(CSCAN)

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

参考答案:A

答案:A。

**基础:**磁臂黏着指当前磁道持续有新请求时,算法不断服务该磁道,导致其他磁道请求长期得不到处理。FCFS 严格按请求到达次序服务;若其他磁道的请求已经排在队列中,之后到达的当前磁道请求不能越过它,因此不会因这种偏好而一直停在当前磁道,选 A。

B SSTF 每次选距离当前磁头最近的请求,当前磁道距离为 0,新请求可能不断压过远处请求,容易黏着。C SCAN、D CSCAN 若直接把扫描中不断新到达的当前磁道请求继续加入当次服务,也可能迟迟离开;它们的扫描方向并没有自动排除这种情形。通过固定当轮请求集合等变体可改善,但题目没有指定这些额外规则。判断关注“新请求能否持续插到已等待的其他请求前面”。

进入练习

第 31 题

操作系统
2 分

下列优化方法中,可以提高文件访问速度的是

I. 提前读

II. 为文件分配连续的簇

III. 延迟写

IV. 采用磁盘高速缓存

A. 仅I、II

B. 仅II、III

C. 仅I、III、IV

D. I、II、III、IV

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

参考答案:D

答案:D。

**逐项判断:**I 提前读在程序访问当前块时预先读取可能很快访问的后续块,顺序读文件时可减少等待。II 连续的簇让相邻数据更接近,减少磁头移动,也便于连续传输。III 延迟写先把修改保存在内存中,再把多次修改合并或集中写出,减少实际磁盘操作次数。IV 磁盘高速缓存让后续访问可直接从内存获得已有数据,比重新访问磁盘更快。

四种方法都能在相应访问情形下提高文件访问速度,选 D。A 漏掉写入和缓存优化,B 漏掉提前读与缓存,C 漏掉连续簇。提前读、延迟写利用的是访问规律与批量处理,并非每个工作负载都必然受益;题目问可用的优化方法,满足“可以提高”即可。不要因延迟写没有立即写盘,就误认为它只会降低效率。

进入练习

第 32 题

操作系统
2 分

下列同步机制中,可以实现让权等待的是

A. Peterson方法

B. swap指令

C. 信号量方法

D. TestAndSet指令

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

参考答案:C

答案:C。

**基础:**让权等待要求进程不能进入临界区时主动放弃处理机,转入阻塞,由其他进程继续运行,等条件满足后再被唤醒。记录型信号量的 P 操作在资源不足时把进程加入等待队列并阻塞,V 操作在资源释放时唤醒等待者,因此能实现让权等待,选 C。

A Peterson 方法用 while 条件循环等待另一进程退出,属于忙等。B swap 指令和 D TestAndSet 指令能原子地修改锁值,但以它们构成的基本自旋锁也要反复执行检测循环,通常并未放弃 CPU。因此三者能用于互斥,却不满足本题的让权等待要求。原子性解决“同时抢锁会不会都成功”,阻塞机制解决“抢不到时是否还占 CPU”,两项不能混为一谈。实际系统可组合原子指令和阻塞机制,本题比较的是所列基本方法。

进入练习

第 33 题

计算机网络
2 分

下列TCP/IP应用层协议中,可以使用传输层无连接服务的是

A. FTP

B. DNS

C. SMTP

D. HTTP

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

参考答案:B

答案:B。

**基础:**传输层无连接服务通常由 UDP 提供,发送数据报前无需三次握手建立连接。DNS 的普通查询和应答可以通过 UDP 交换,因此 B 符合“可以使用”;DNS 在其他情形也可使用 TCP,不影响本项成立。

A FTP 的控制连接和数据连接使用 TCP,以可靠传输命令及文件。C SMTP 发送邮件使用 TCP 的可靠字节流。D 按这道题所采用的传统 HTTP 传输模型使用 TCP,需要建立连接,所以不选。区分“可以使用 UDP”与“只能使用 UDP”:题目并没有声称 DNS 不支持 TCP。也不能因为一个应用只发少量数据,就认为它自然属于无连接服务,必须以协议规定的传输方式判断。

进入练习

第 34 题

计算机网络
2 分

下列选项中,不属于物理层接口规范定义范畴的是

A. 接口形状

B. 引脚功能

C. 物理地址

D. 信号电平

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

参考答案:C

答案:C。

**基础:**物理层接口规范描述如何在传输介质上实际传送比特,包括机械、电气、功能和规程特性。A 接口形状属于机械特性,例如插头尺寸、连接方式;B 引脚功能规定各引脚承担发送、接收或控制等用途;D 信号电平规定以哪些电压等物理量表示状态,属于电气特性,三者都在物理层接口范围内。

C“物理地址”通常指 MAC 地址,它用来在数据链路层识别帧的源和目的接口,不是连接器或电压等物理接口规范,故选 C。名称中有“物理”二字不代表属于 OSI 的物理层;应看它是在规定比特如何形成信号,还是在标识帧交给谁。物理层负责传比特流,不负责根据 MAC 地址作帧转发判断。

进入练习

第 35 题

计算机网络
2 分

IEEE 802.11无线局域网的MAC协议CSMA/CA进行信道预约的方法是

A. 发送确认帧

B. 采用二进制指数退避

C. 使用多个MAC地址

D. 交换RTS与CTS帧

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

参考答案:D

答案:D。

**基础:**无线局域网用 CSMA/CA 尽量避免碰撞。要预约信道,发送站先发 RTS(请求发送),接收站在可接收时回 CTS(允许发送);这两个帧携带持续时间等信息,听到它们的其他站点据此设置网络分配向量 NAV,在预约时间内推迟发送,故选 D。

A 确认帧 ACK 用来告知数据帧已成功收到,处在数据传输后,不是预约的请求和许可过程。B 二进制指数退避用于竞争失败后调整随机等待范围,可减少冲突,但没有由双方交换预约信息。C 使用多个 MAC 地址与信道预约无关。RTS/CTS 还可使发送端附近与接收端附近的站点分别获知占用时间,缓解隐藏站点导致的碰撞。不要把确认成功、随机竞争与事先预约这三个机制混为一谈。

进入练习

第 36 题

计算机网络
2 分

主机甲采用停-等协议向主机乙发送数据,数据传输速率是3kbps,单向传播延时是200ms。忽略确认帧的传输延时。当信道利用率等于40%时,数据帧的长度为

A. 240比特

B. 400比特

C. 480比特

D. 800比特

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

参考答案:D

答案:D。

**基础:**停等协议每发送一个数据帧就等待确认,一个周期包括帧发送时间、单程数据传播和单程确认传播。确认帧发送时间按题设忽略,但确认的传播时间不能忽略。设帧发送时间为 t,单程传播为 200 ms=0.2 s,则周期为 t+0.4 s。

信道利用率是有效发送时间占周期的比例,有 t/(t+0.4)=0.4t/(t+0.4)=0.4,解得 0.6t=0.160.6t=0.16,所以 t=4/15t=4/15 s。数据率 3 kbps=3000 bit/s,帧长为 L=3000×4/15=800L=3000\times4/15=800 bit,选 D。A 的 240 bit、B 的 400 bit、C 的 480 bit 对应发送时间分别为 0.08、0.1333、0.16 s,代回利用率都小于 40%。最常见错误是仅计一次 200 ms,把往返等待少算一半。

进入练习

第 37 题

计算机网络
2 分

路由器R通过以太网交换机S1和S2连接两个网络,R的接口、主机H1和H2的IP地址与MAC地址如下图所示。若H1向H2发送1个IP分组P,则H1发出的封装P的以太网帧的目的MAC地址、H2收到的封装P的以太网帧的源MAC地址分别是

2018 年第 37 题配图

A. 00-1a-2b-3c-4d-62, 00-1a-2b-3c-4d-52

B. 00-1a-2b-3c-4d-62, 00-a1-b2-c3-d4-61

C. 00-1a-2b-3c-4d-51, 00-1a-2b-3c-4d-52

D. 00-1a-2b-3c-4d-51, 00-a1-b2-c3-d4-61

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

参考答案:D

答案:D。

**基础:**IP 分组跨网络转发时,两端 IP 地址保持描述最终源与目的,而链路层 MAC 地址按每一跳重新封装。H1 在 192.168.3 网络,H2 在 192.168.4 网络,不能用一个以太网帧直接跨过路由器交给 H2。

第一跳 H1 先把帧交给本网络的路由器接口 192.168.3.1,所以帧的目的 MAC 是该入口的 00-1a-2b-3c-4d-51。R 拆掉第一跳帧后,在通向 H2 的接口 192.168.4.1 上重新封装,新帧源 MAC 是出口的 00-a1-b2-c3-d4-61,目的 MAC 才是 H2 的地址。因此选 D。A、B 把第一跳目的 MAC 错写成 H2 的地址;C 把 H2 收到帧的源 MAC 错写成 H1 的地址。交换机只转发所在链路的帧,不使源 MAC 跨路由器保持不变。

进入练习

第 38 题

计算机网络
2 分

某路由表中有转发接口相同的4条路由表项,其目的网络地址分别为35.230.32.0/21,35.230.40.0/21,35.230.48.0/21和35.230.56.0/21,将该4条路由聚合后的目的网络地址为

A. 35.230.0.0/19

B. 35.230.0.0/20

C. 35.230.32.0/19

D. 35.230.32.0/20

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

参考答案:C

答案:C。

**步骤:**一个 /21 包含 232−21=20482^{32-21}=2048 个地址,第三字节跨度为 8。四个网络依次覆盖第三字节 32~39、40~47、48~55、56~63,连续无空洞,而且转发接口相同,适合聚合。

四个等大的块合并,总地址数变为原来的 4 倍,前缀长度减少 log⁡24=2\log_2 4=2 位,即 /19。/19 的第三字节按 32 的倍数对齐,32 是合法起点;其范围恰为 35.230.32.0~35.230.63.255,所以聚合地址为 35.230.32.0/19,选 C。A 的 35.230.0.0/19 覆盖 0~31,范围错误;B 的 /20 范围和起点都不符;D 的 32.0/20 只覆盖 32~47,漏掉后两个网络。聚合既要前缀长度正确,也要网络边界对齐。

进入练习

第 39 题

计算机网络
2 分

UDP协议实现分用(demultiplexing)时所依据的头部字段是

A. 源端口号

B. 目的端口号

C. 长度

D. 校验和

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

参考答案:B

答案:B。

**基础:**分用是接收端把传输层收到的数据交给正确应用进程的过程。UDP 首部的目的端口号标识接收端的服务或套接字,例如收到目的端口 53 的 DNS 查询,应交给相应 DNS 服务,因此选 B。

A 源端口号说明发送端由哪个端口发出,可供接收方构造返回数据报,但它不能单独确定本地应该接收的应用。C 长度说明数据报大小,D 校验和用于检测传输差错,都不用于标识接收服务。实际系统还会结合本地 IP 地址等信息完成套接字匹配,但在本题列出的 UDP 首部字段中,承担基本分用作用的是目的端口号。发送时多个应用的数据汇入 UDP 称为复用,接收时按端口分发称为分用。

进入练习

第 40 题

计算机网络
2 分

无须转换即可由SMTP协议直接传输的内容是

A. JPEG图像

B. MPEG视频

C. EXE文件

D. ASCII文本

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

参考答案:D

答案:D。

**基础:**基本 SMTP 的邮件内容传输采用 ASCII 文本形式,因此 D 的 ASCII 文本无须先转换即可直接传输。题目考查基础邮件协议的内容表示范围,而不是说电子邮件无法发送图片或附件。

A JPEG 图像、B MPEG 视频、C EXE 文件都属于二进制数据,任意字节可能超出基本 SMTP 的文本字符范围,需要先采用 MIME 定义的编码方式,例如 Base64,把内容转换成可传送的文本表示;接收端再按相应类型与编码还原。三者即使最终能作为邮件附件发送,也不符合“无须转换”的条件。区别在于原始内容能否直接进入基础 SMTP 的文本通道,不能把“邮件客户端支持某种附件”误当作“SMTP 直接传任意原始二进制”。

进入练习

解答题

7 题 · 共 70 分

第 41 题

数据结构
13 分

给定一个含 n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组 {-5,3,2,3} 中未出现的最小正整数是 1;数组 {1,2,3} 中未出现的最小正整数是 4。

要求:

(1)给出算法的基本设计思想。

(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。

(3)说明你所设计算法的时间复杂度和空间复杂度。

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

**(1)设计思想。**先缩小答案范围:n 个数组元素最多覆盖 n 个不同正整数,所以 1~n+1 不可能全都出现,最小缺失正整数必在这个区间。负数、0 和大于 n 的数,不会影响我们判断 1~n 中谁缺失。

开一个长度 n、初值全 0 的标记数组 present,其中 present[k−1]=1 表示正整数 k 出现过。扫描原数组,只对 1~n 内的值打标记,重复值重复置 1 不产生额外作用。再从标记数组开头向后找第一个 0,返回对应整数;若全部为 1,说明 1~n 都已出现,返回 n+1。

例如 {-5,3,2,3} 的 n=4,标记结果为 [0,1,1,0],首先缺 1;{1,2,3} 标记全部为 1,答案是 4。本题只要求时间尽可能高效,没有要求常数额外空间,所以采用标记法即可达到线性时间。

**(2)C++ 实现。**用 k−1 映射数组下标,检查范围后再访问标记数组,避免负值和大值造成越界。返回类型采用long long,最后先提升n再计算n+1,使n等于INT_MAX时的理论答案仍可表示,避免int加法溢出。

cpp 复制代码
#include <vector>

long long firstMissingPositive(const int a[], int n) {
    std::vector<unsigned char> present(n, 0);
    for (int i = 0; i < n; ++i) {
        if (a[i] >= 1 && a[i] <= n) present[a[i] - 1] = 1; // 仅标记候选正数。
    }
    for (int i = 0; i < n; ++i) {
        if (!present[i]) return i + 1; // 第一个未出现的正整数。
    }
    return static_cast<long long>(n) + 1;
}

**(3)正确性与复杂度。**第一次扫描后,对于每个 k∈[1,n],标记为 1 当且仅当 k 出现过;第二次按从小到大检查,第一次遇到的缺失值自然是最小的。若无缺失,则由 n 个位置恰好覆盖 1~n,可确定 n+1 未出现。全是非正数时返回 1,重复值不会错误占用其他候选标记,n=1 时也能正确处理。

初始化和两次扫描都为 O(n)O(n),整体时间 O(n)O(n);标记数组占 O(n)O(n) 额外空间,原数组内容没有改变。一般情况下至少要检查所有输入值,否则未查看的位置可能恰好含某个候选整数,所以线性时间已达到所需的高效目标。

进入练习

第 42 题

数据结构
12 分

拟建设一个光通信骨干网络连通 BJ、CS、XA、QD、JN、NJ、TL 和 WH 等 8 个城市,题 42 图中无向边上的权值表示两个城市间备选光纤的铺设费用。

2018 年第 42 题配图

请回答下列问题。

(1)仅从铺设费用角度出发,给出所有可能的最经济的光纤铺设方案(用带权图表示),并计算相应方案的总费用。

(2)题 42 图可采用图的哪种存储结构?给出求解问题(1)所使用的算法名称。

(3)假设每个城市采用一个路由器按(1)中得到的最经济方案组网,主机 H1 直接连接在 TL 的路由器上,主机 H2 直接连接在 BJ 的路由器上。若 H1 向 H2 发送一个 TTL = 5 的 IP 分组,则 H2 是否可以收到该 IP 分组?

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

**(1)所有最经济方案。**要连通 8 个城市且不浪费费用,应求无向带权图的最小生成树,共选 7 条边。用 Kruskal 思路从小权值开始,加入不会成环的边。图中的五条费用 2 的边 XA—BJ、XA—WH、TL—JN、JN—QD、QD—NJ 可全部加入,它们形成三个分量:{XA,BJ,WH}、{TL,JN,QD,NJ} 和 {CS},累计费用 10。

接下来,CS 通过 QD—CS(3)连接比通过 WH—CS(4)便宜,所以费用 16 的最优树必须含 QD—CS。剩下两个分量可通过 WH—QD(3)或 BJ—TL(3)连接,二者等价且只能任选其一,否则多出环。BJ—WH(3)和 JN—NJ(3)连接的是已有分量内部结点,不能用于合并分量;费用 4 的其他边也无法获得同样低的总费用。

因此两个方案共同包含以下六条边:

边 费用
XA—BJ 2
XA—WH 2
TL—JN 2
JN—QD 2
QD—NJ 2
QD—CS 3

第七条边有且仅有两种选择:**WH—QD(3)**或 BJ—TL(3)。两棵最优生成树的总费用均为 5×2+3+3=165\times2+3+3=16。费用不可能更小,因为最多只有五条费用 2 的边,连通还需至少两条费用不小于 3 的边;两方案均达到此下界。下面给出两棵带权图:

2018 年第 42 题最优方案 1
2018 年第 42 题最优方案 2

**(2)存储结构与算法。**可以采用邻接矩阵,矩阵项记录两城市间费用,无边处置为无穷大,且无向图矩阵对称;也可以采用邻接表,为每个城市记录邻居及边权。求最小生成树使用 Kruskal 或 Prim,前面按边权从小选边的过程是 Kruskal,检测成环可借助并查集。若要枚举全部最优树,应在同权值的合法边之间保留不同选择,不能只运行一次后认定方案唯一。

**(3)TTL 是否足够。**IP 分组每被一个路由器转发一次,TTL 减 1;减至 0 就丢弃,不能继续送向下一跳。方案 1 使用 WH—QD,树中 TL 到 BJ 的唯一道路为 TL→JN→QD→WH→XA→BJ。分组从 H1 以 TTL=5 进入 TL 路由器,在 TL、JN、QD、WH 转发后 TTL 依次为 4、3、2、1,到 XA 再减为 0,被丢弃,H2 收不到。

方案 2 使用 BJ—TL,唯一道路只有 TL→BJ,分组经过这两个路由器后 TTL 仍为 3,可交给 H2。因此是否收到取决于采用哪棵最优树;光纤费用相同不表示路由器跳数相同,不能用边权费用来扣减 TTL。

进入练习

第 43 题

计算机组成原理
8 分

假定计算机的主频为 500MHz,CPI 为 4。现有设备 A 和 B,其数据传输率分别为 2MB/s 和 40MB/s,对应 I/O 接口中各有一个 32 位数据缓冲寄存器。请回答下列问题,要求给出计算过程。

(1)若设备 A 采用定时查询 I/O 方式,每次输入/输出都至少执行 10 条指令。设备 A 最多间隔多长时间查询一次才能不丢失数据?CPU 用于设备 A 输入/输出的时间占 CPU 总时间的百分比至少是多少?

(2)在中断 I/O 方式下,若每次中断响应和中断处理的总时钟周期数至少为 400,则设备 B 能否采用中断 I/O 方式?为什么?

(3)若设备 B 采用 DMA 方式,每次 DMA 传送的数据块大小为 1000B,CPU 用于 DMA 预处理和后处理的总时钟周期数为 500,则 CPU 用于设备 B 输入/输出的时间占 CPU 总时间的百分比最多是多少?

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

**基础与参数。**接口的 32 位缓冲寄存器一次保存 32/8=432/8=4 B。CPU 每秒有 500×106500\times10^6 个周期,时钟周期为 2 ns;CPI=4 表示一条指令平均耗时 8 ns。传输率按十进制单位 1MB=106B1\mathrm{MB}=10^6\mathrm B 换算。

**(1)设备 A 的查询。**A 以 2×1062\times10^6 B/s 传数据,产生一份 4 B 数据需要 4/(2×106)=2 μs4/(2\times10^6)=2\,\mu s。寄存器没有更多缓冲空间,故必须在下一份数据到来前取走已有数据,最大查询间隔为 2 μs。

每秒至少需要 2×106/4=5000002\times10^6/4=500000 次查询与传送。每次至少 10 条指令,耗 10×4=4010\times4=40 周期,所以每秒 CPU 用于 A 的周期数至少为 500000×40=2×107500000\times40=2\times10^7。比例为 2×107/(500×106)×100%=4%2\times10^7/(500\times10^6)\times100\%=4\%。这里的最小占比按每次刚好 10 条指令计算;查询更频繁或操作更多只会增加开销。

**(2)设备 B 的中断。**B 产生 4 B 数据只用 4/(40×106)=0.1 μs4/(40\times10^6)=0.1\,\mu s,而一次中断响应和处理至少耗 400/(500×106)=0.8 μs400/(500\times10^6)=0.8\,\mu s,比数据到达间隔长 8 倍。每秒需 10710^7 次中断,至少消耗 4×1094\times10^9 个 CPU 周期,是 CPU 总能力的 8 倍。因此在给定接口和开销下,不能采用这种逐 4 B 中断方式保证不丢数据。

**(3)设备 B 的 DMA。**按最大传输率,每秒块数为 40×106/1000=4000040\times10^6/1000=40000。CPU 对每块只做预处理和后处理,共 500 周期,这已是周期数,无需再乘 CPI。最大 CPU 开销为 40000×500=2×10740000\times500=2\times10^7 周期/s,占比 2×107/(500×106)×100%=4%2\times10^7/(500\times10^6)\times100\%=4\%。DMA 数据块本身由控制器传送,不能把全部传块时间都算成 CPU 执行 I/O 指令的时间。

进入练习

第 44 题

计算机组成原理
15 分

某计算机采用页式虚拟存储管理方式,按字节编址。CPU 进行存储访问的过程如题 44 图所示。
根据题 44 图回答下列问题。

(1)主存物理地址占多少位?

(2)TLB 采用什么映射方式?TLB 是用 SRAM 还是用 DRAM 实现?

(3)Cache 采用什么映射方式?若 Cache 采用 LRU 替换算法和回写(Write Back)策略,则 Cache 每行中除数据(Data)、Tag 和有效位外,还应有哪些附加位?Cache 的总容量是多少?Cache 中有效位的作用是什么?

(4)若 CPU 给出的虚拟地址为 0008 C040H,则对应的物理地址是多少?是否在 Cache 中命中?说明理由。若 CPU 给出的虚拟地址为 0007 C260H,则该地址所在主存块映射到的 Cache 组号是多少?

2018 年第 44 题配图
查看答案与解析收起答案与解析

**(1)物理地址位数。**图中虚地址为 20 位虚页号加 12 位页内地址,共 32 位。TLB 转换后给出实页号,图中实页号如 0040H、F800H,占 16 位;页内地址原样保留。也可直接读 Cache 输入地址字段 20+3+5,所以物理地址共 28 位,即 16 位实页号加 12 位偏移。

(2)TLB 的组织。图中虚页号送往所有条目的比较器,没有另外抽出索引字段选择固定组,因此采用全相联映射。TLB 是高速地址转换缓冲,通常由 SRAM 实现,以便快速读取映射;比较器完成并行标记匹配,不能仅因它缓存页表项就把它当成主存 DRAM。

**(3)Cache 类型、附加位与容量。**图中物理地址分为 20 位 Tag、3 位组号、5 位块内偏移。3 位组号表示 23=82^3=8 组,每组同时比较两路 Tag,所以为 2 路组相联;5 位偏移表示每行 25=322^5=32 B,总共 16 行,纯数据容量 512 B。

回写策略在修改 Cache 数据时不立即同步主存,需增加 1 位脏位,标识被替换时是否要写回。LRU 则需增加用于记录两路最近使用关系的替换状态。本题按考试常用的“每行计入 1 位 LRU 状态,并把数据及管理位一并计入总容量”的口径作答。每行有 256 位数据、20 位 Tag、1 位有效、1 位脏位和 1 位 LRU,总容量为

8×2×(32×8+20+1+1+1)=4464 bit=558 B.8\times2\times(32\times8+20+1+1+1)=4464\text{ bit}=558\text{ B}.

有效位为 1 表示该行已存入可用的主存块;为 0 时,即使 Tag 数值恰好相同也不能认定命中。

**容量口径的边界:**本题主要答案为 4464 bit=558 B,对应每行保存 1 位 LRU 的组织。对于两路 Cache,最少只需每组 1 位来区分哪一路更久未用;若实际实现把 LRU 状态集中在组上,总存储量便是 16×(256+20+1+1)+8=445616\times(256+20+1+1)+8=4456 bit=557 B。若只问数据容量,则是 512 B。三者采用的计数范围或状态组织不同,作答时应写清本题采用每行 1 位 LRU、并包含管理位的口径。

**(4)逐字段转换与匹配。**虚地址 0008C040H 拆为虚页号 0008CH、页内偏移 040H。TLB 中 Tag=0008CH 的条目有效位为 1,给出实页号 0040H,所以物理地址为 0040H×1000H+040H=0040040H0040\mathrm H\times1000\mathrm H+040\mathrm H=0040040\mathrm H。

把该物理地址按 Cache 格式拆开:Tag=0040040H≫8=00400H0040040\mathrm H\gg8=00400\mathrm H,组号=((0040040H≫5)&7)=2((0040040\mathrm H\gg5)\mathbin{\&}7)=2,偏移为 0。第 2 组左路 Tag=00400H 虽匹配,但有效位为 0;右路有效位为 1,却是 Tag=01600H,不匹配,所以 Cache 未命中。

对虚地址 0007C260H,只求组号无需知道实页号。地址转换保持低 12 位页内偏移,而组号占物理地址第 5~7 位,完全落在页内偏移中。因此组号为 (260H≫5)&7=13H&7=3(260\mathrm H\gg5)\mathbin{\&}7=13\mathrm H\mathbin{\&}7=3。

进入练习

第 45 题

操作系统
8 分

某计算机按字节编址,采用二级页表的页式虚拟存储管理方式。虚拟地址由 10 位页目录号、10 位页表索引和 12 位页内偏移量组成,存储访问过程如下图所示。请回答下列问题。

(1)某虚拟地址对应的页目录号为6,在相应的页表中对应的页号为6,页内偏移量为8,该虚拟地址的十六进制表示是什么?

(2)寄存器PDBR用于保存当前进程的页目录起始地址,该地址是物理地址还是虚拟地址?进程切换时,PDBR的内容是否会变化?说明理由。同一进程的线程切换时,PDBR的内容是否会变化?说明理由。

(3)为了支持改进型CLOCK置换算法,需要在页表项中设置哪些字段?

2018 年第 45 题配图
查看答案与解析收起答案与解析

**(1)构造虚拟地址。**地址格式从高到低为 10 位页目录号、10 位页表索引、12 位页内偏移。目录号 6 要左移 22 位,页表索引 6 要左移 12 位,偏移 8 留在低位;三个字段互不重叠,可直接相加或按位或:

VA=(6≪22)+(6≪12)+8=01806008H.VA=(6\ll22)+(6\ll12)+8=\mathrm{01806008H}.

分项结果为 6≪22=01800000H6\ll22=01800000\mathrm H、6≪12=00006000H6\ll12=00006000\mathrm H,再加 8 得 01806008H。这里“相应页表中的页号 6”是第二级索引,不是把整个 20 位虚页号直接写为 6。

(2)PDBR 与切换。PDBR 保存当前进程页目录的物理起始地址。硬件要用它加目录项偏移来读取页目录,页目录本身不能再次依赖尚未完成的同一虚地址转换,否则会形成递归定位问题。

不同进程通常有不同虚拟地址空间及页目录,所以进程切换时需把 PDBR 更新为新进程页目录的物理基址,确保同一个虚地址按正确进程解释。同一进程内的线程共享地址空间与页目录,仅切换线程的寄存器、栈等执行状态,不需改变 PDBR。不能把线程拥有独立执行栈误认为拥有独立页目录。

**(3)改进型 CLOCK。**需在页表项中设置访问位 A 和修改位 M。访问位表示页面近期是否被访问,修改位表示装入后是否写过,决定淘汰时是否需要写回外存。算法优先考虑未近期使用、且未修改的 (A,M)=(0,0) 页面;其次考虑未近期使用但已修改的 (0,1) 等类别,同时扫描中可清除访问位。仅有访问位只能实现普通 CLOCK,无法进一步优先选择写回代价较低的页面。

进入练习

第 46 题

操作系统
7 分

某文件系统采用索引节点存放文件的属性和地址信息,簇大小为 4KB。每个文件索引节点占 64B,有 11 个地址项,其中直接地址项 8 个,一级、二级和三级间接地址项各 1 个,每个地址项长度为 4B。请回答下列问题。

(1)该文件系统能支持的最大文件长度是多少?(给出计算表达式即可。)

(2)文件系统用 1M(1M=2201M=2^{20})个簇存放文件索引节点,用 512M 个簇存放文件数据。若一个图像文件的大小为 5600B,则该文件系统最多能存放多少个图像文件?

(3)若文件F1的大小为6KB,文件F2的大小为40KB,则该文件系统获取F1和F2最后一个簇的簇号需要的时间是否相同?为什么?

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

**(1)最大文件长度。**簇大小为 4 KB=4096 B,每个地址项 4 B,所以一个间接索引簇能存 4096/4=10244096/4=1024 个簇号。8 个直接项各管理一个数据簇;一级间接项管理 1024 个数据簇;二级间接项先管理 1024 个一级索引簇,总计 102421024^2 个数据簇;三级同理管理 102431024^3 个数据簇。最大数据长度为

Lmax⁡=(8+1024+10242+10243)×4KB.L_{\max}=(8+1024+1024^2+1024^3)\times4\mathrm{KB}.

各级索引簇本身属于管理开销,不能把它们的空间加到文件可保存的数据长度中。

**(2)最多图像文件数。**数量同时受索引结点区与数据区限制。一个索引结点 64 B,一簇可存 4096/64=644096/64=64 个结点,1M 个簇共能存 64M64\mathrm M 个文件的索引结点,其中 M=220M=2^{20}。

每个图像 5600 B,大于一簇、小于两簇,因此需 ⌈5600/4096⌉=2\lceil5600/4096\rceil=2 个数据簇,尾簇剩余空间不能分给另一个普通文件。512M 个数据簇可容纳 512M/2=256M512\mathrm M/2=256\mathrm M 个图像。每图像仅用两个直接地址,不需额外间接索引簇。两种限制取最小,最多 min⁡(64M,256M)=64M\min(64\mathrm M,256\mathrm M)=64\mathrm M 个,即 67108864 个。

**(3)最后簇号的获取。**F1=6 KB 占 ⌈6/4⌉=2\lceil6/4\rceil=2 簇,第 2 簇号直接在 inode 的直接地址项中。F2=40 KB 占 10 簇,前 8 簇用直接地址,第 9、10 簇要经一级间接索引;取得最后簇号必须先找到一级间接索引簇,再读其相应地址项。因此在 inode 已有、间接索引尚未缓存的同等条件下,F2 多一次索引簇访问,时间不同。若间接索引已有缓存,实际磁盘耗时可能缩短;结构上的索引层次数仍然不同。

进入练习

第 47 题

计算机网络
7 分

(7分)某公司的网络如题47图所示。IP地址空间192.168.1.0/24被均分给销售部和技术部两个子网,并已分别为部分主机和路由器接口分配了IP地址,销售部子网的MTU = 1500B,技术部子网的MTU = 800B。
请回答下列问题。

(1)销售部子网的广播地址是什么?技术部子网的子网地址是什么?若每个主机仅分配一个IP地址,则技术部子网还可以连接多少台主机?

(2)假设主机192.168.1.1向主机192.168.1.208发送一个总长度为1500B的IP分组,IP分组的头部长度为20B,路由器在通过接口F1转发该IP分组时进行了分片。若分片时尽可能分为最大片,则一个最大IP分片封装数据的字节数是多少?至少需要分为几个分片?每个分片的片偏移量是多少?

2018 年第 47 题配图
查看答案与解析收起答案与解析

(1)子网与剩余主机数。/24 均分为两个子网,需要借 1 位主机位,得到 /25,掩码 255.255.255.128。根据图中销售部地址 .1~.20 和接口 .126,其网络为 192.168.1.0/25,广播为 192.168.1.127;技术部 .129~.208 和接口 .254 位于另一个子网,网络地址为 192.168.1.128,广播为 .255。

每个 /25 有 128 个地址,扣除网络和广播后可用 126 个。技术部已分给主机的 .129~.208 包含 208−129+1=80208-129+1=80 个地址,还需扣除路由器 F1 使用的 .254。因此可再连接 126−80−1=45126-80-1=45 台主机,不能把路由器接口的地址也分给新主机。

**(2)IP 分片。**技术部出口 MTU=800 B,包含分片自己的 IP 首部。首部长 20 B,留给数据的最大空间为 780 B;片偏移以 8 B 为单位,所以非末片数据长度必须是 8 的倍数,最大的合法值为 ⌊780/8⌋×8=776\lfloor780/8\rfloor\times8=776 B,而非 780 B。

原分组总长 1500 B,原始数据长 1500−20=14801500-20=1480 B。第一片取 776 B,剩余 1480−776=7041480-776=704 B,第二片可容纳,故至少分 2 片:

分片 数据长度 总长度 片偏移 MF
第 1 片 776 B 796 B 0 1
第 2 片 704 B 724 B 97 0

第二片数据从原数据的第 776 字节开始,片偏移字段为 776/8=97776/8=97;第一片从原数据起点开始,偏移为 0。偏移相对于原分组的数据,不包含原首部,也不以 1 B 为单位。两片分别增加自己的 20 B 首部,总长为 796 B、724 B,均不超过 MTU;第一片后面还有分片,MF=1,最后一片 MF=0。

进入练习