shuatigo
只考虑主考点
计算机408

2026计算机408全卷预览

2026年计算机408真题

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

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

选择题

40 题 · 共 80 分

第 1 题

数据结构
2 分

线性表 LL 含有 nn(n≥3n≥ 3)个元素,采用顺序存储方式保存。在 LL 中原有元素相对次序保持不变且仍有空闲存储空间的情况下,下列操作中,一定会移动多个元素的是

I. 在表头插入一个元素

II. 在表头删除一个元素

III. 在表尾插入一个元素

IV. 在表尾删除一个元素

A. 仅 I、II

B. 仅 I、III

C. 仅 II、IV

D. 仅 III、IV

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

参考答案:A

答案:A。

顺序表把元素放在一段连续空间中,某个位置后的元素不能留下空洞,原有元素的相对次序也必须保持。设原表为[a,b,c,…]:

  • 表头插入x,为给x腾出第一个位置,必须从后向前把全部n个原元素各移动一次,得到[x,a,b,c,…]。
  • 删除表头a,后面n−1个元素必须向前补位。题设n≥3,所以n−1至少为2,也属于移动多个元素。
  • 表尾插入只需把新元素写入当前末尾之后的空闲位置,再增加长度;题设有空闲空间,不需要扩容搬迁。
  • 表尾删除只需减少长度,原有元素无需移动。

因此只有I、II一定移动多个原有元素,选A;B、C、D均错误地把某种表尾操作纳入。这里“写入新元素”和“移动原有元素”是不同的操作。

进入练习

第 2 题

数据结构
2 分

已知带头结点的双向链表 LL 含有 nn(n≥3n≥ 3)个元素,结点结构为

2026 年真题配图

其中,p2 和 p1 分别是指向其直接前驱和直接后继结点的指针,指针 head 指向头结点,指针 cu = head。现要将 LL 各结点中的 p2 指针修改为指向 p1 所指结点的直接后继结点。当指针指向的结点不存在时,相应的指针值为 NULL。下列选项中,可以完成修改功能的是

A. while (cu != NULL) { cu->p2 = cu->p1->p1; cu = cu->p1; }

B. while (cu != NULL && cu->p2 != NULL) { cu->p2 = cu->p1->p1; cu = cu->p1; }

C. while (cu != NULL) { if (cu->p1 != NULL) { cu->p2 = cu->p1->p1; cu = cu->p1; } }

D. while (cu != NULL) { if (cu->p1 != NULL) cu->p2 = cu->p1->p1; else cu->p2 = NULL; cu = cu->p1; }

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

参考答案:D

答案:D。

原来的p1是后继指针,沿p1能依次访问头结点及所有数据结点。本题只改p2,因此遍历方向仍应保持为cu=cu->p1。新p2应跨过一个结点,指向当前结点的“后继的后继”。

若cu->p1非空,可以安全取cu->p1->p1;这个值本身允许为NULL,例如当前是倒数第二个结点。若cu->p1已经为空,当前就是尾结点,不能再访问空指针的成员,应直接令cu->p2=NULL。无论哪种情况都要推进cu,这正是D的做法。

A在尾结点解引用空指针;B用p2控制循环,但头结点的原前驱通常为空,会立即停止,而且p2正是正在改写的字段;C把推进语句放进条件分支,到尾结点时条件为假,cu永远不动,造成死循环。安全解引用与每轮都能推进,是这类链表代码的两个检查重点。

进入练习

第 3 题

数据结构
2 分

若二叉树 TT 的中序遍历序列是 b,e,d,f,c,a,gb,e,d,f,c,a,g,层序遍历序列是 a,b,g,c,d,e,fa,b,g,c,d,e,f,则 TT 的后序遍历序列是

A. c,e,d,f,b,g,ac,e,d,f,b,g,a

B. c,e,f,d,b,g,ac,e,f,d,b,g,a

C. e,f,d,c,b,g,ae,f,d,c,b,g,a

D. e,g,f,d,b,c,ae,g,f,d,b,c,a

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

参考答案:C

答案:C。

中序是“左子树—根—右子树”,层序按深度从上到下列出结点。先用层序确定根,再用中序划分其左右子树,递归进行:

  1. 层序首项a为整树根。中序中a左侧是b,e,d,f,c,右侧只有g,所以g是a的右孩子。
  2. 左子树中层序最早出现b,因此b为左子树根。中序中b左边没有元素,右边是e,d,f,c。
  3. 在这四个结点中,层序最早出现c,因此c是b的右孩子;中序中c左侧为e,d,f,右侧为空。
  4. 剩余子树根为d,中序把e分到其左边、f分到其右边。

后序采用“左—右—根”:d子树输出e,f,d,再输出c,再输出b;随后输出右子树g,最后根a,得到e,f,d,c,b,g,a。A、B把c或d提前输出,D把右子树g放进左子树处理过程,均不符合后序规则。

进入练习

第 4 题

数据结构
2 分

已知由 5 棵树组成的森林 FF 中各棵树所含的结点个数分别是 2,3,4,5,7。若 FF 中各棵树的排列次序任意,则与 FF 对应的二叉树的高度至少是

A. 5

B. 6

C. 8

D. 10

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

参考答案:B

答案:B。

森林转换为二叉树时,使用“左孩子—右兄弟”表示:同一棵树的孩子通过左孩子及兄弟链表示,五棵树的根则连成一条右兄弟链。无论怎么排列,这条链已有五个结点,对应五层。

最后一个根所代表的树至少有2个结点,所以它还必须有孩子。从五根链的末端再向下至少一层,整体高度至少为6,A的5不可能。

还需要证明6能够达到。把五棵树按结点数7、5、4、3、2排列。可分别选择转换后高度为4、4、3、3、2的单树结构;第一棵根位于第1层,后续根依次多一层,所以整体各部分高度为4、5、5、6、6,最大为6。这样的单树结构可构造:根的右指针为空,其左侧二叉子树在所给高度内容纳其余结点;将其反向解释为孩子与兄弟即可得到一棵树。

因此最小高度是6,C、D只是更大的数值,没有给出最优下界。

进入练习

第 5 题

数据结构
2 分

已知二叉树 TT 中 7 个叶结点 a,b,c,d,e,f,ga,b,c,d,e,f,g 的权值分别是 1,2,4,5,8,10,12,当 TT 的带权路径长度最小时,与结点 ee 深度相同的叶结点仅有

A. dd

B. gg

C. dd、ff

D. ff、gg

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

参考答案:D

答案:D。

叶结点权值确定时,带权路径长度最小的二叉树可以用哈夫曼算法构造:每次把当前最小的两个权相加,形成内部结点,再放回待选集合。

合并步骤 两个最小权 新内部结点权
1 1、2 3
2 3、4 7
3 5、7 12
4 8、10 18
5 12、12 24
6 18、24 42

最后根的两个子树权为18、24。权18的两个孩子就是e=8与f=10,两者深度均为2;权24的孩子之一是原叶g=12,另一个是内部结点12,因此g深度也为2,而d=5在这个内部结点下,深度为3。

所以与e同深度的其他叶只有f、g,选D。A、C误把d放在同层,B漏掉f。两个权为12的结点,一个是原叶、一个是合并产生的内部结点,必须区分。

进入练习

第 6 题

数据结构
2 分

若用邻接表保存有向图 G=(V,E)G=(V,E),则计算 GG 中某顶点入度的时间复杂度是

A. O(∣V∣)O(|V|)

B. O(min(∣V∣,∣E∣))O(min(|V|,|E|))

C. O(∣E∣)O(|E|)

D. O(max(∣V∣,∣E∣))O(max(|V|,|E|))

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

参考答案:D

答案:D。

普通有向图邻接表中,顶点u的链表保存的是从u出发的边,因而沿自己的链表可以直接计算出度;目标顶点v的入边却可能分别出现在所有其他顶点的链表里。

求v的入度需要逐个检查|V|个表头,并访问总计|E|个边结点;每发现一条边的终点为v,计数加1。因此时间为

O(∣V∣+∣E∣)=O(max⁡(∣V∣,∣E∣)).O(|V|+|E|)=O(\max(|V|,|E|)).

两者同阶,是因为最大项不超过两项之和,而两项之和不超过最大项的两倍。

A忽略边遍历;C忽略表头检查,例如有大量孤立顶点时,边数很少仍需扫描所有顶点;B取较小者更不能覆盖两部分工作。若另行维护入边表或预存入度,查询可以更快,但那是增加了本题未给出的数据结构。

进入练习

第 7 题

数据结构
2 分

有向图 G=(V,E)G=(V,E) 的顶点个数为 nn(n≥2n≥ 2),指定一个顶点为初始点,指定若干个顶点(非初始点)为标记点,且每个顶点都在从初始点到标记点的有向路径上(一条有向路径上允许含有多个标记点)。每条有向边上均有一个字符,从初始点到任一标记点的有向路径上的所有字符组成一个字符串,所有这样的字符串构成字符串集 SS。下列关于 SS 的叙述中,错误的是

A. 若 GG 无环,则 SS 是有穷集

B. 若 GG 无环,则 SS 中存在长度等于 nn 的字符串

C. 若 GG 有环,则 SS 中存在长度大于 nn 的字符串

D. 若 GG 有环,则 SS 中存在长度小于 2n2n 的字符串

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

参考答案:B

答案:B。

本题把生成字符串的有向路线按“有向行走”理解,允许重复经过顶点和边。因此可以沿一个环反复绕行。这是题目考查“有环时能生成任意长字符串”的语境约定;不能把这里的“路径”替换成禁止重复顶点的简单路径。

每条边贡献一个字符,所以字符串长度等于该路线经过的边数。

  • A 正确。 若 G 无环,一条路线不能重复顶点,否则重复部分就构成有向环。n 个顶点最多经过 n−1 条边,路线数量有限,因此生成的字符串集 S 也是有穷集。
  • B 错误。 无环时字符串长度最多为 n−1,不可能达到 n。注意长度统计边数,而不是顶点数。
  • C 正确。 题目保证每个顶点都在从初始点到某个标记点的有向路径上,因此环上的顶点能够从初始点到达,也能继续走到标记点。先走到环,绕行任意多圈,再去标记点,就可使边数和字符串长度超过 n。
  • D 正确。 初始点能够到达至少一个标记点。删去重复绕行后,存在一条从初始点到该标记点的简单有向路径,长度最多 n−1,必然小于 2n。图中存在环不意味着每一条到达标记点的路线都很长。

题目问错误叙述,因此选 B。若另将“路径”限定为不重复顶点的简单路径,C 就不能成立;本题作答采用上述允许重复绕环的字符串生成约定。

进入练习

第 8 题

数据结构
2 分

高度为 4 的平衡二叉树中,根结点左、右子树的结点个数相差最多是

A. 1

B. 2

C. 3

D. 5

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

参考答案:D

答案:D。

AVL平衡二叉树要求每个结点的左右子树高度差不超过1。高度按层数计,空树高0、叶结点高1。整树高4时,最高子树高3,另一子树高度至少为2。

要让结点数差尽量大,较大子树取高度3的满二叉树,有1+2+4=7个结点;较小子树取高度2的最少结点AVL树,只需一个根带一个叶,共2个结点。因此可达到7−2=5。

也可用最少结点递推N(h)=1+N(h−1)+N(h−2),其中N(0)=0、N(1)=1,得到N(2)=2。若两个子树都高3,较小子树至少N(3)=4,差至多3,反而小于前面的5。故最大差为5,选D。平衡条件限制的是高度差,而不是结点数差;这正是A、B容易造成的误判。

进入练习

第 9 题

数据结构
2 分

使用直接插入排序算法分别对下列数据进行升序排序,元素之间比较次数最少的是

A. 30,27,56,41,80,95,69

B. 31,43,26,55,63,99,77

C. 61,84,51,23,34,91,40

D. 93,32,48,81,50,21,72

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

参考答案:B

答案:B。

直接插入排序从第二项开始,把当前元素插入已经有序的前缀。从前缀末端向左比较:比当前值大就后移;遇到不大于当前值的元素停止。这里仅统计关键字之间的比较,检查j是否越界不算。

例如B:插入43比较31一次;插入26依次比较43、31两次;插入55、63、99各比较一次;插入77先比较99,再比较63,共两次。因此B总计1+2+1+1+1+2=8次。

数据组 六次插入分别比较的次数 总计
A 1、1、2、1、1、3 9
B 1、2、1、1、1、2 8
C 1、2、3、4、1、5 16
D 1、2、2、3、5、3 16

所以选B。某次一直移动到表头时,不应再凭空增加一次“与不存在的前驱比较”;比较次数也不直接等于交换或移动次数。

进入练习

第 10 题

数据结构
2 分

某考试考查了课程 C1 和 C2,C1、C2 成绩及总成绩(C1、C2 成绩之和)均保存在数组 MM 中。现需根据考生的总成绩从高到低进行排名,总成绩相同者的排名由 C1 成绩从高到低决定,C1 成绩也相同者的排名由初始相对次序决定。假设先按 C1 成绩对 MM 排序,再按总成绩对 MM 排序,能得到正确的排名结果,则下列算法中,采用的是

A. 基数排序

B. 快速排序

C. 希尔排序

D. 选择排序

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

参考答案:A

答案:A。

最终排名有三个层次:先比较总成绩,再比较C1;若两项都相同,还要保留最初相对次序。稳定排序表示等关键字元素的相对次序不改变。

先对次关键字C1降序稳定排序,已保证C1同分者保持原顺序;再对主关键字总成绩降序稳定排序,同总成绩的一组内部保留第一次排序的C1顺序,而两项全相同者仍保留最初顺序。例如甲、乙总成绩都为180,C1分别90、95,第一次让乙在前,第二次必须保留该顺序。

这种从次关键字到主关键字依次稳定处理的方式,正是低位优先的基数排序思想,选A。快速排序、希尔排序、通常的直接选择排序均不保证稳定,可能破坏第一趟已经建立的同总分内部顺序。关键是两趟排序的稳定性及关键字优先级,并非只把两个分数相加后任意排序。

进入练习

第 11 题

数据结构
2 分

采用 kk-路归并对外存中保存的数据进行排序,排序的趟数记为 dd。下列叙述中,正确的是

I. 增大 kk 的值可能减小 dd 的值

II. 初始归并段的个数不影响 dd 的值

III. 可用内存大小限制了初始归并段的最大长度

A. 仅 I

B. 仅 I、II

C. 仅 I、III

D. 仅 II、III

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

参考答案:A

答案:A。

设初始归并段有r个,k路归并每趟把至多k个有序段合成一个,段数按约k倍缩小,归并趟数通常为 ⌈log⁡kr⌉\lceil\log_k r\rceil。因此增大k可能让趟数减少,I正确;“可能”也考虑了向上取整导致某些k改变后趟数不变的情况。

II错误:初始段越多,通常需要越多趟。例如k=2时,4段需2趟,8段需3趟。

III容易与普通的分块内排序混淆。若一次读满内存再排序,单段长度确实受工作区限制;但初始段还可用置换选择法产生。每输出一个当前最小记录,就读入一个新记录;若新记录不小于刚输出值,仍可进入当前段。输入本来升序时,即使工作区有限,也可持续生成一个很长、甚至覆盖全部输入的有序段。因此内存限制同时驻留的记录数,不限定所有方法所能产生的单段最大长度,III错误。

只有I成立,选A。平均段长与“最大可能长度”也必须区分。

进入练习

第 12 题

计算机组成原理
2 分

下列关于计算机系统层次结构的叙述中,错误的是

A. 最上层是应用软件层,最下层是器件及物理封装层

B. 指令集体系结构是软件和硬件之间的接口,且必不可少

C. 计算机组成(即微架构)属于指令集体系结构的物理实现层

D. 操作系统可通过指令集体系结构进行相应抽象,向上层软件提供服务

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

参考答案:C

答案:C。

计算机的层次结构从上往下可依次理解为应用、操作系统等软件,指令集体系结构(ISA),微架构,以及逻辑电路、器件和物理封装。各层解释下层能力,并向上提供相应抽象。

ISA规定软件可见的指令及其行为,是软硬件之间的接口;同一ISA可以有不同的微架构实现,例如使用不同流水线、运算单元或Cache组织。微架构描述这些部件的逻辑组织及工作方式,后面还需要电路设计、器件实现和封装,因此不能直接把它归为最下面的物理实现层,C的说法错误。

A给出的最上、最下两端符合该层次;B指出ISA接口作用,正确;D中操作系统通过指令与硬件交互,并把处理器、内存和设备进一步抽象为进程、虚拟地址、文件等服务,也正确。本题考查相邻抽象层之间的区别,并不是否认微架构实现ISA。

进入练习

第 13 题

计算机组成原理
2 分

对机器数 1010 0110B 先算术右移 3 位,再算术左移 2 位,最终结果是

A. 1101 0000B

B. 1101 0011B

C. 0101 0000B

D. 0101 0011B

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

参考答案:A

答案:A。

本题按 8 位有符号补码机器数计算,字长始终保持 8 位。对负数作算术右移时高位补 1;算术左移时丢弃移出的高位、低位补 0。题面没有另外指明码制,这里明确采用本题的常用补码约定。

原位串为 1010 0110B,最高位是 1,按补码解释为负数。连续算术右移三次:

10100110 → 11010011 → 11101001 → 11110100.10100110\ \to\ 11010011\ \to\ 11101001\ \to\ 11110100.

每次都保留符号,右端被移出的位丢弃。随后算术左移两次:

11110100 → 11101000 → 11010000.11110100\ \to\ 11101000\ \to\ 11010000.

最终结果是 1101 0000B,对应 A。

也可检查真值:原补码表示 166−256=−90166-256=-90;右移三位后为 244−256=−12244-256=-12;左移两位后为 208−256=−48208-256=-48。本次左移没有溢出,但一般固定字长的左移可能丢失有效位,因此逐位计算比直接使用十进制“除 8 再乘 4”更稳妥,特别是负数右移时不能按向零截断的整数除法来代替。

B、D 的低两位为 11,不符合本题补码左移低位补 0 的规则;C 的最高位为 0,与计算得到的位串不符。右移时已经丢弃的低位不能在左移时重新带回。

若改用负数反码等其他编码,算术移位的补位规则可能不同,例如负数反码左移低位补 1 会得到 B;所以 A 的适用前提是本题采用的补码模型。

进入练习

第 14 题

计算机组成原理
2 分

已知 float 型变量用 IEEE 754 单精度浮点格式表示,采用就近舍入(中间值取偶数)方式。若 float 型变量 xx 值为 12.1(提示:0.1 = 0.000 1100 1100 1100 1100 1100⋯B),则 xx 的机器数是

A. 4141 9999H

B. 4141 999AH

C. 41E0 CCCCH

D. 41E0 CCCDH

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

参考答案:B

答案:B。

IEEE 754单精度共32位:1位符号、8位阶码、23位显式尾数,正规化有效数前面的1不存入尾数字段。12.1为正,符号位0;其二进制是1100.000110011…,正规化为 1.100000110011⋯×231.100000110011\cdots\times2^3,实际指数3,阶码为3+127=130,即10000010B。

用精确分数也能核算尾数及舍入。小数尾数为 12.1/8−1=0.512512.1/8-1=0.5125,乘以 2232^{23} 得

0.5125×223=4299161.6.0.5125\times2^{23}=4299161.6.

截断尾数是4299161=419999H,舍弃部分为0.6个最低尾数单位,大于0.5,因此就近舍入为4299162=41999AH。本次不在恰好中间位置,无需用取偶规则处理平局。

把阶码放到位30~23,得到 (130≪23)+41999AH=4141999AH(130\ll23)+41999A_H=4141999A_H,选B。A是未正确进位的截断值;C、D的尾数字段不能表示12.1的正规化小数部分。

进入练习

第 15 题

计算机组成原理
2 分

若用 8 个 64M×864M× 8 位的 DRAM 芯片按交叉编址方式构成主存储器,并与一个宽度为 64 位的存储器总线相连,主存每次最多读写 64 位,且按字节编址,则下列地址中,与主存地址 0018 001DH 位于同一芯片中的是

A. 0000 01D5H

B. 000F A020H

C. 0018 001EH

D. 0F02 0014H

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

参考答案:A

答案:A。

每片DRAM宽8位,即每个芯片位置保存一个字节。8片低位交叉编址后,连续8个字节分别放在8片芯片中,可以通过64位总线一次取出这些字节。

按字节地址A编号,芯片号为A mod 8,也就是地址最低3位;余下高位选择片内位置。目标0018001DH末位D=1101B,低3位是101,芯片号5。

地址 最低3位 芯片号
A:000001D5H 101 5
B:000FA020H 000 0
C:0018001EH 110 6
D:0F020014H 100 4

只有A与目标同片。C虽是紧邻的字节,却正因交叉编址而落在相邻芯片;地址高位接近不能代替芯片号判断。64位总线决定一次最多传8字节,不表示每个字节地址都要先除8再取最低3位。

进入练习

第 16 题

计算机组成原理
2 分

对于下列选项中给出的相关内容,不是由指令集体系结构规定的是

A. 指令集中是否包含输入和输出指令

B. 采用向量中断还是非向量中断方式

C. 采用段式还是页式虚拟存储管理方式

D. 指令流水线是否采用超级流水线技术

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

参考答案:D

答案:D。

ISA规定程序与系统软件能观察到的机器接口,包括指令功能、寄存器、寻址和受保护的控制机制。A中是否存在专门I/O指令,直接决定软件怎样访问设备;B中向量或非向量中断影响中断入口的确定方式;C中分段、分页相关的地址转换机制影响操作系统使用的架构接口,都属于此类规定。

超级流水线把内部处理阶段进一步细分,改变一条指令如何在处理器内部执行。不同处理器可以保持同样的指令、寄存器及可见行为,同时采用不同流水线深度,因此它是微架构实现选择,D正确。

区分方法是检查“软件必须依据这个规定编程或管理硬件吗”,还是“硬件内部可以在不改变接口的情况下换一种实现”。不能因流水线执行的对象也是机器指令,就把流水线划分本身误当作ISA规定。

进入练习

第 17 题

计算机组成原理
2 分

哪个可能不改变程序下一条指令的地址?

Ⅰ 条件跳转指令

Ⅱ 过程调用指令

Ⅲ 陷入指令

Ⅳ 过程返回指令

A. Ⅰ、Ⅱ

B. Ⅰ、Ⅳ

C. Ⅱ、Ⅲ

D. Ⅱ、Ⅳ

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

参考答案:B

答案:B(Ⅰ、Ⅳ)。

解题思路。 先弄清 PC,再判断各类指令把程序带到哪里。PC 是程序计数器,用来确定接下来取哪条指令。假设当前指令的地址为 PP,长度为 LL,它在存储顺序上的后继地址是 S=P+LS=P+L。普通顺序执行接着取地址 SS 的指令;控制转移则把接下来取指的地址改成某个目标地址。

本题采用公开回忆版本的通常考试约定:条件转移按条件决定是否跳转;过程调用与陷入按正常安排转入另一个过程或处理程序的入口,入口不特意设置为当前指令的顺序后继;返回恢复调用方此前保存的正常后继地址。题目中的“程序下一条指令”按程序正常执行流理解,返回计为恢复该执行流。不能把“不改变下一条指令的地址”误读成 PC 寄存器在整个执行过程中完全不更新。

逐项分析。

项目 默认执行过程 本题判定
Ⅰ 条件跳转指令 条件满足时转到目标地址;条件不满足时继续取顺序后继 SS 可能不额外改变程序下一条指令的地址,计入
Ⅱ 过程调用指令 先保存调用指令之后的返回地址,再把 PC 置为被调用过程的入口 按通常入口安排发生转移,不计入
Ⅲ 陷入指令 保存必要的执行现场,转入规定的系统处理程序入口 按通常入口安排发生转移,不计入
Ⅳ 过程返回指令 取出先前保存的返回地址并送入 PC,使程序回到调用方原本应继续的位置 按本题公开版本的考试口径,恢复程序正常后继,计入

Ⅰ 的“可能”有明确条件:跳转条件不成立。例如“结果为零才跳转”,而计算结果不为零时,程序就继续执行顺序后继指令。条件跳转并不要求每次都发生跳转。

Ⅱ 的两个动作必须分开看:保存的是“调用方将来回来后执行哪里”,立即执行的是“进入被调用过程”。例如调用指令位于地址 100、长度为 4 字节,子程序入口是 500:CALL 保存返回地址 104,随后使 PC 指向 500。保存了顺序后继 104,并不代表 CALL 执行后立即取地址 104 的指令。

Ⅲ 是主动进入系统处理程序的控制转移,例如通过陷入指令请求系统服务。在题目采用的正常模型中,下一步执行相应处理程序,而不是继续原程序的顺序后继,所以不计入。

Ⅳ 的作用是返回。沿用上例,子程序完成后执行返回指令,将保存的 104 恢复到 PC,原程序便从调用后的那条指令继续。两份公开参考答案把这种“恢复原程序下一条”计为可能不改变程序下一条指令的地址。这里并没有说 RET 不更新 PC:RET 明明把 PC 设置成了保存的返回地址。

选项判断。 按上述约定,符合的是Ⅰ和Ⅳ,即 B。A、C、D 均包含Ⅱ,而正常的过程调用要转到被调用过程入口,因此这三个选项都不符合。D 在所采用的完整公开版本中是“Ⅱ、Ⅳ”,应按这一组合判断。

地址与参照的边界。 “调用指令的下一条”与“返回指令自身在存储顺序上的下一条”不是同一个地址。若把问题严格解释为“执行某条指令后是否取它自身的顺序后继”,RET 是否符合就取决于保存的返回地址 RR 是否恰好等于该 RET 的后继地址 SRETS_{RET},不能仅凭“返回”二字直接推出二者相等。

如果进一步允许刻意安排所有目标地址,例如把 CALL 的目标也设为它自身的顺序后继,那么 CALL 同样可能取到该后继;某些体系结构中若处理入口可配置,陷入的目标也可能出现数值重合。这些特殊地址安排超出了本题默认的正常入口模型。B 是本题所采用公开回忆版本及考试约定下的答案,不能推广成“CALL 或陷入在任何地址安排下都必然取不到自身后继”的机器规律。

进入练习

第 18 题

计算机组成原理
2 分

某计算机按字节编址,数据 Cache 共有 1024 行,采用 4 路组相联映射方式,主存块大小为 32 B。若需要访问主存地址为 1028 的 4 字节数据,则该数据所在主存块对应的 Cache 组号是

A. 4

B. 16

C. 32

D. 64

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

参考答案:C

答案:C。

4路组相联表示每组有4行,并不是整个Cache只有4组。总计1024行,因此组数为1024/4=256。

主存块大小32B,地址1028位于从1024到1055的主存块内:
块号=⌊1028/32⌋=32,组号=32 mod 256=32.\text{块号}=\lfloor1028/32\rfloor=32,\quad \text{组号}=32\bmod256=32.
数据的块内偏移为1028 mod 32=4,4字节数据占偏移4~7,没有跨块,所以只需这一个组,选C。

A的4是块内偏移而不是组号;B、D也不符合先求块号再对组数取模的映射规则。此处1028为十进制地址,没有十六进制H标记。组内哪一行保存该块由匹配和替换策略决定,不影响组号计算。

进入练习

第 19 题

计算机组成原理
2 分

某计算机按字节编址,虚拟地址为 16 位,页大小为 256 B,页表项中包含装入位(P)、页框号(PPN)等字段,TLB 采用 4 路组相联映射方式,共有 16 个 TLB 表项,TLB 表项中包含标记(Tag)、有效位(V)等字段。在 TLB 表项与主存页表同步后,若主存页表中页号 22 对应的页表项中 P = 0、PPN = 2AH,则下列选项中,不可能出现在组号为 2 的 TLB 表项中的是

A. Tag = 05H、V = 1、PPN = 1CH

B. Tag = 06H、V = 1、PPN = 2AH

C. Tag = 16H、V = 0、PPN = 2AH

D. Tag = 1AH、V = 0、PPN = 1CH

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

参考答案:A

答案:A。

页大小256B=282^8B,16位虚拟地址分为8位虚页号和8位页内偏移。TLB共有16项、每组4项,所以有4组;虚页号低2位选组,高6位作Tag。

题给页号22是十进制,二进制为00010110:组号10B=2,Tag=000101B=05H。反向验证,组2、Tag05H对应虚页号5×4+2=22。

主存页表中该页装入位P=0,表示页面不在主存;在题设TLB与页表同步后,不能还用有效翻译访问这个页。因此Tag05H、V=1不可能,选A,哪怕A里的PPN与原PPN不同也不能使它合法。

B的Tag06H对应页号26,不是页22,题目没有否定其驻留状态;C、D的V=0表示条目无效,旧Tag和PPN可以残留而不参与翻译。不能把无效表项中的残留位串当成当前有效映射,也不能把虚页号22直接写成Tag16H。

进入练习

第 20 题

计算机组成原理
2 分

在不考虑异常/中断处理和访存额外开销的前提下,下列关于数据通路结构与 CPI 之间关系的叙述中,正确的是

I. 单周期数据通路计算机的 CPI 等于 1

II. 多周期数据通路计算机的 CPI 大于 1

III. 流水线数据通路计算机的 CPI 等于 1

A. 仅 I、II

B. 仅 I、III

C. 仅 II、III

D. I、II、III

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

参考答案:A

答案:A。

CPI是完成指令所用时钟周期数除以完成的指令数。单周期数据通路规定每条指令在一个时钟周期内完成,题目又排除了额外处理开销,因此I正确。

多周期数据通路把取指、译码、执行等分到多个周期,即使不同指令所需周期不同,在本题通常的多周期结构中每条也都需要多个周期,所以II正确。它的单周期通常较短,CPI更大并不直接意味着总执行时间一定更长。

流水线让多条指令的不同阶段重叠,理想稳定状态可每周期完成一条,CPI趋近1;但仍可能有数据、控制或结构冒险产生停顿,有限指令序列还包括装入、排空。因此不能无条件断言实际CPI恰为1,III错误。

选A。不要把“某条指令经过五个流水阶段”误写成流水线CPI必为5,也不要把理想吞吐率误作所有情况下的精确平均值。

进入练习

第 21 题

计算机组成原理
2 分

I/O 子系统中,由驱动程序和中断服务程序直接控制外设与主机之间的输入/输出操作,其中需要用到一些特权指令。下列指令中,不属于特权指令的是

A. I/O 指令

B. 关中断指令

C. 中断返回指令

D. 系统调用指令

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

参考答案:D

答案:D。

特权指令只能在内核等高特权模式下执行,目的是防止普通程序直接改变设备或机器控制状态。A的I/O指令直接访问设备;B关中断会影响系统响应中断的能力;C中断返回会恢复受保护的程序状态和运行模式,都需要相应权限。

系统调用则是普通用户程序请求内核服务的受控入口,例如应用请求读文件。若系统调用指令本身也只能在内核模式执行,用户程序反而无法借它进入内核,因此D不属于题目所问的特权指令。

执行系统调用时,硬件按规定切换权限并转入内核入口;之后执行的内核操作可以是特权操作。必须区分“用户能执行的入口指令”和“进入之后由内核执行的服务”。题干指出I/O子系统需要一些特权指令,不等于它涉及的所有指令都是特权指令。

进入练习

第 22 题

计算机组成原理
2 分

中断控制 I/O 方式下,实现 I/O 需要硬件和软件协同完成。中断响应及处理过程所包含的下列工作中,必须由硬件完成的是

A. 开中断

B. 中断判优

C. 保存断点

D. 保存通用寄存器

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

参考答案:C

答案:C。

中断发生时,处理器需要暂时离开当前程序,去执行中断处理程序,之后还要回到正确位置继续。因此在控制流转入处理入口前,断点,也就是被中断程序应恢复的指令地址,必须由硬件响应过程保存,C正确。否则处理程序一开始就已经失去原来的PC信息。

A开中断可通过软件指令完成;D通用寄存器可以在处理程序入口由保存现场的指令逐个压栈,并在退出时恢复,并非所有寄存器都必须由硬件保存。

B中断判优可以通过硬件优先逻辑实现,也可以结合软件查询决定先服务哪个来源,题目没有限定为只有一种实现,所以不能说必由硬件完成。这里考的是“必须”,并不是“某台机器的硬件能否代做”。保存断点与保存通用寄存器也属于不同内容,不能因两者都叫保存现场而混为一谈。

进入练习

第 23 题

操作系统
2 分

下列程序中,在内核模式执行的是

A. 编译程序

B. 链接程序

C. 装入程序

D. 命令解释程序

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

参考答案:C

答案:C。

按本题操作系统模块的语境,装入程序负责把可执行程序放入可运行的环境,建立或调整进程地址空间、映射代码与数据并准备执行入口。这些核心装入操作涉及受保护的进程和内存管理状态,由内核完成,因此选C。

编译程序把源代码翻译为目标代码,链接程序连接目标模块与库,命令解释程序读取并解释用户命令;这些通常作为普通用户程序运行,分别排除A、B、D。它们需要文件读写或创建进程时,可以发起系统调用,由内核代为完成对应操作,但调用内核服务不等于整个程序都在内核模式执行。

题目对“装入程序”的称呼指操作系统的装入功能;实际系统中某些动态链接和装入辅助代码也可位于用户空间,应结合这里的模块定义判断,不能只按程序名称笼统推断所有现实实现。

进入练习

第 24 题

操作系统
2 分

下列是支持虚拟存储管理的系统中指令执行过程的相关叙述,其中正确的是

A. 虚实地址转换由操作系统完成

B. 存储访问权限由操作系统检测

C. 指令的合法性由操作系统验证

D. CPU 产生的异常由操作系统处理

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

参考答案:D

答案:D。

在一次正常访存中,CPU产生虚拟地址,MMU依据TLB或页表完成地址转换,并检查页表中规定的访问权限;CPU译码等硬件还检测指令编码是否合法。操作系统建立页表和权限规则,但并不为每一条普通指令的软件执行逐项检查,因此A、B、C把硬件检测工作错误地都归给了操作系统。

若硬件发现缺页、非法指令或越权访问等异常,会保存必要状态并转入异常处理入口,由操作系统决定调页、发出错误通知或终止进程等后续动作,D正确。

可以把分工理解为“操作系统设置规则—硬件高频执行检查—操作系统处理异常”。TLB未命中也不一定就是缺页:还可能查内存页表后得到有效映射。不能因页表由操作系统维护,就认为每次虚实地址转换都需要一段操作系统代码参与。

进入练习

第 25 题

操作系统
2 分

下列关于线程的叙述中,正确的是

A. 用户级线程和内核级线程均由操作系统创建

B. 多个内核级线程可以映射到同一个用户级线程

C. 同一进程的不同内核级线程共用该进程的内核栈

D. 同一进程的不同线程共享该进程虚拟地址空间中的堆

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

参考答案:D

答案:D。

同一进程的线程共享进程虚拟地址空间,其中包括代码、全局数据和堆,所以一个线程在堆中分配的对象,其他线程持有合法指针时也能访问,D正确。共享访问仍可能需要同步,不能把“共享堆”理解成所有并发读写都自动安全。

A错误:用户级线程可以由用户空间的线程库创建和管理,内核不一定直接识别每个用户线程。B把常见映射方向写反了,讨论的是一个或多个用户线程怎样映射到内核调度实体,而不是把多个内核线程映射到一个用户线程。

C错误:不同内核级线程需要分别保存各自在内核中运行的调用链和执行现场,因此各有内核栈;若共用一个栈,会互相破坏现场。线程可以共享进程资源,但程序计数器、寄存器状态和独立执行所需的栈属于每个线程自己的运行上下文。

进入练习

第 26 题

操作系统
2 分

某系统中有 8 个进程均会执行如右图所示的代码片段,其中信号量 S 的初值为 5。若某时刻 S 的值为 −2-2,已执行到代码 Q 中的进程有 mm 个,因执行 wait(S) 而被阻塞的进程有 nn 个,则 mm 和 nn 的值分别是

2026 年真题配图

A. 5、2

B. 5、3

C. 6、2

D. 7、1

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

参考答案:A

答案:A。

图中每个进程先wait(S),再执行Q,最后signal(S)。记录型信号量的wait先把S减1:结果非负就通过,结果为负则阻塞;signal归还许可并在需要时唤醒等待者。

初值5表示最多有5个进程取得许可进入Q。当S=−2时,负值的绝对值2表示有2个进程因wait而等待,故n=2;5个初始许可已经全部被占用,当前进入Q并尚未归还许可的进程有5个,故m=5,选A。

在8个进程中,另一个进程可以尚未申请,也可以处于不占用许可的其他状态;不能仅用8−5就断定阻塞3个。B正是多算了一个阻塞者,C、D则让进入Q的数量超过初始5个许可。信号量负值表示等待进程数,不表示有“负的可用资源”,也不能用5−(−2)=7当作正在执行Q的数量。

进入练习

第 27 题

操作系统
2 分

若进程 P 读、写数据的集合分别记为 R(P) 和 W(P),进程 Q 读、写数据的集合分别记为 R(Q) 和 W(Q),则进程 P 和 Q 并发执行时不会发生并发错误的充要条件是

I. W(P)∩W(Q)=∅W(P)∩W(Q)=∅

II. R(P)∩W(Q)=∅R(P)∩W(Q)=∅

III. W(P)∩R(Q)=∅W(P)∩R(Q)=∅

IV. R(P)∩R(Q)=∅R(P)∩R(Q)=∅

A. I、IV 同时成立

B. II、III 同时成立

C. I、II、III 同时成立

D. I、II、III、IV 同时成立

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

参考答案:C

答案:C。

本题采用 Bernstein 读写无冲突判定模型:两个进程独立执行,没有额外的同步保护;只根据读集、写集判断是否存在可能改变另一进程输入或覆盖其输出的冲突,不利用具体数据值、相同常量写入等特殊语义。在这个模型中,无冲突条件是三类交集都为空。

条件 排除的冲突 为什么需要
I. W(P)∩W(Q)=∅W(P)\cap W(Q)=\varnothing 写写冲突 P、Q 不写同一个数据,否则哪个结果最终保留可能取决于执行顺序
II. R(P)∩W(Q)=∅R(P)\cap W(Q)=\varnothing Q 写、P 读的冲突 Q 不能并发改写 P 要读取的输入
III. W(P)∩R(Q)=∅W(P)\cap R(Q)=\varnothing P 写、Q 读的冲突 P 不能并发改写 Q 要读取的输入
IV. R(P)∩R(Q)=∅R(P)\cap R(Q)=\varnothing 限制共享读取 两进程只读同一数据不会修改它,不必要求该交集为空

因此,需要同时成立的是 I、II、III,选择 C。A 漏掉两类读写冲突;B 漏掉写写冲突;D 额外禁止了安全的共享读取。

这里的“充要条件”是在题目采用的读写集合独立性模型内判断无冲突,并不意味着所有实际程序只要读写集合相交就必然执行错误。若程序使用同步保护,或两次写操作有特殊且已证明安全的语义,即使存在交集也可能得到正确结果;这类情形超出了本题默认模型。

进入练习

第 28 题

操作系统
2 分

某 64 位系统采用三级页式存储管理方式,虚拟地址结构如下图所示。

2026 年真题配图

若各级页表项均占 8 字节,则进程的第三级页表占用的页框数最多是

A. 512

B. 32 K

C. 256 K

D. 128 M

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

参考答案:C

答案:C。

图中一级、二级、三级页号各9位,页内偏移12位。页框大小因此为 212=40962^{12}=4096B。一张第三级页表有 29=5122^9=512 项,每项8B,大小512×8=4096B,恰好占1个页框。

题目问整个进程最多有多少第三级页表,而不只是一张表多大。一级页表的512项分别可以指向512张二级页表,每张二级页表的512项又分别可指向512张第三级页表,因此最多有

29×29=218=262144=256K2^9\times2^9=2^{18}=262144=256\mathrm K

张第三级页表,也就占256K个页框,选C。

A的512只算某一张二级表能指向的数量,漏掉一级展开;D的128M是三级索引共同可以表示的数据页数 2272^{27},不是第三级页表自身数量。64位地址顶部25位为图示保留位,不能再把它们算进页表索引。

进入练习

第 29 题

操作系统
2 分

下列页式虚拟存储管理系统的技术中,可用于降低系统平均访存时间的是

I. TLB

II. 多级页表

III. 工作集模型

IV. 页缓冲队列

A. 仅 I、II

B. 仅 I、IV

C. 仅 II、III

D. 仅 I、III、IV

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

参考答案:D

答案:D。

平均访存时间不仅包含读内存的时间,还可能包含查页表和极为昂贵的缺页处理。四种技术的作用应分别判断:

I的TLB缓存近期地址翻译,命中后直接得到页框号,减少主存页表访问,能降低平均时间。

III工作集模型尽量保留进程近期需要的页面,并依据内存需求控制运行,减少频繁缺页及抖动;IV页缓冲队列使部分换出页仍暂留在内存,近期再次引用时可能直接恢复,减少外存调页开销。两者都能减少昂贵缺页代价。

II多级页表主要通过按需分配节省页表空间;TLB未命中时,反而可能需要逐级多次访问页表,不能把它本身视为直接降低访存时间的技术。因此选I、III、IV,即D。A、B遗漏缺页控制手段,C还遗漏TLB并错误计入多级页表。查得快和尽量少缺页,是不同的优化方向。

进入练习

第 30 题

操作系统
2 分

假设两个进程共享一个页 S,其页表分别为 PT1 和 PT2,S 在两个进程虚拟地址空间中的起始地址分别为 VA1 和 VA2,则下列叙述中,正确的是

A. VA1 和 VA2 相同

B. VA1 和 VA2 映射到的物理地址相同

C. S 在 PT1 和 PT2 中的页表项内容相同

D. S 在 PT1 和 PT2 中的页表项虚拟地址相同

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

参考答案:B

答案:B。

两个进程共享页S,意味着两边访问的是同一个物理页框,而不是各自保留一份内容副本。因此各自的虚拟起始地址VA1、VA2必须映射到相同的物理页框起点,B正确;相同页内偏移也就对应相同物理字节。

A错误:两个进程的虚拟地址空间相互独立,S在其中的位置可以不同。例如一个进程放在虚拟页10,另一个放在虚拟页20,两项都填相同页框号即可共享。

C错误:两份页表项中的页框号需要一致,但权限、访问位等字段不一定相同,例如一方只读、另一方允许写入。D错误:两份页表是不同的管理结构,其表项在各自空间中的位置也没有必须相同的要求。

核心对应关系是“不同虚拟地址→同一物理页”,不能把共享物理存储误解成虚拟地址及整个页表项逐位相同。

进入练习

第 31 题

操作系统
2 分

下列关于驱动程序的叙述中,错误的是

A. 驱动程序中包含启动设备的代码

B. 驱动程序中包含一组读/写设备的代码

C. 驱动程序与内核之间需要定义统一的接口

D. 块设备和字符设备驱动程序采用相同的 I/O 控制方式

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

参考答案:D

答案:D。

设备驱动把内核的抽象I/O请求转换为特定设备可以执行的操作。它需要初始化或启动设备,也需要读写设备寄存器、提交或完成传输等代码,A、B正确;为了使内核能够按统一方式调用不同驱动,还需定义驱动与内核之间的接口,C正确。

块设备把数据组织为可寻址的数据块,常结合块缓冲、请求队列及块传输;字符设备通常按字符流或设备自身事件提供访问,未必具有按任意块定位的功能。因此两类驱动不能被笼统规定为采用完全相同的I/O控制方式,D错误。

“对内核提供统一接口”和“内部以相同方式控制所有设备”不是同一件事:接口可以统一,设备相关实现仍可不同。两类设备都可能使用中断,也不意味着它们的读写单位、缓冲和请求处理机制都相同。题目问错误叙述,选D。

进入练习

第 32 题

操作系统
2 分

下列操作中,由鼠标中断处理程序完成的是

A. 将当前进程的状态由执行态改为阻塞态

B. 将 CPU 运行模式由用户模式改为内核模式

C. 将接收到的输入数据存放到设备接口的数据寄存器中

D. 将输入数据从设备接口的数据寄存器传送到内核数据区

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

参考答案:D

答案:D。

鼠标输入的大致过程是:设备产生数据→控制器把数据放入设备接口的数据寄存器并发中断请求→CPU响应中断、转入内核入口→中断处理程序读取寄存器并把输入保存到内核数据区。最后一步由软件处理程序完成,选D。

B的用户模式到内核模式切换已经在硬件响应中完成,处理程序开始执行时通常就在内核模式;C的设备数据写入接口寄存器是设备或控制器完成的工作,不是中断程序先替设备放进去。

A也错误:鼠标中断并不要求把当前进程阻塞。响应结束后当前进程可以继续执行;处理程序还可能唤醒正在等待输入的进程,这与阻塞被中断进程是不同动作。

判断中断题时,应把“中断请求前的设备动作”“硬件响应”和“随后执行的软件处理”按时间分开,避免将整个过程都归入中断服务程序。

进入练习

第 33 题

计算机网络
2 分

下列关于分层网络体系结构的叙述中,错误的是

A. 有利于标准化

B. 层次越多效率越高

C. 有利于各层技术独立演化

D. 降低网络系统设计与实现的复杂度

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

参考答案:B

答案:B。

网络分层把大系统分为有明确职责和接口的部分。每层可以通过统一标准与其他实现互通,所以A正确;一层内部改进实现时,只要保持接口和对外行为,其他层通常无需同步重写,C正确;设计者也可以分工处理各层功能,降低整体设计和实现复杂度,D正确。

但每增加一层,都可能增加头部封装、数据传递、复制和处理开销。层次过少不利于职责划分,层次过多也可能降低效率,因此不存在“层次越多效率越高”的普遍关系,B错误。

例如应用数据依次经过传输、网络、链路等层会增加相应首部;这项成本换来了模块化和互通能力,却不能据此推出再增加任意多层都能提升速度。题目问错误叙述,选B。这里讨论分层的工程优点,不是要求以最大层数作为设计目标。

进入练习

第 34 题

计算机网络
2 分

若在带宽为 200 kHz、信噪比 S/N=1023S/N=1023 的信道上发送一个长度为 1500 B 的分组,则发送该分组的传输时延至少是

A. 0.375 ms

B. 0.75 ms

C. 3 ms

D. 6 ms

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

参考答案:D

答案:D。

给定带宽和信噪比,要用香农公式求理想最大比特率:

C=Blog⁡2(1+S/N).C=B\log_2(1+S/N).

带宽200kHz=200000Hz,信噪比1023已经是线性比值,没有dB单位,无需再指数换算。于是

C=200000log⁡2(1024)=200000×10=2000000 bit/s.C=200000\log_2(1024)=200000\times10=2000000\ \mathrm{bit/s}.

分组1500B含1500×8=12000bit,最短传输时延是把这些比特送上链路所需时间:

Tmin⁡=12000/2000000=0.006 s=6 ms.T_{\min}=12000/2000000=0.006\ \mathrm s=6\ \mathrm{ms}.

因此选D,A、B、C均小于该容量下能实现的最小值。

这里求的是传输时延,不包含传播距离、排队或处理时间。易错点是把1500字节当成1500比特,或直接把200kHz当成200kbit/s;频率带宽要通过容量公式才能转成比特率。

进入练习

第 35 题

计算机网络
2 分

假设某采用 CSMA/CA 的 IEEE 802.11 无线局域网,数据传输速率为 300 Mbps,DIFS =128μs=128 μs,SIFS =28μs=28 μs,忽略除数据帧外的其他帧的传输时延以及信号传播时延。若主机 H 发送一个总长度为 1500 B 的数据帧,则 H 从开始发送数据帧时刻起,到确认接收方接收到该帧为止,所需的时间至少是

A. 40μs40 μs

B. 68μs68 μs

C. 168μs168 μs

D. 196μs196 μs

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

参考答案:B

答案:B。

先计算数据帧本身的发送时间:
Tdata=1500×8300×106=40 μs.T_{\text{data}}=\frac{1500\times8}{300\times10^6} =40\ \mu\mathrm s.
题目从“开始发送数据帧”计时,因而发送之前争用信道所用的DIFS已经不在计时区间内。

接收方收完数据后,等待短帧间间隔SIFS=28μs,再返回ACK。题目忽略ACK等其他帧传输时间和传播时间,所以发送方最早确认接收成功需要40+28=68μs,选B。

A的40只到数据发送结束,没有等待确认;C的168把发送前DIFS加到数据时间,却漏掉SIFS;D的196把DIFS和SIFS都计入。SIFS较短,使确认能够优先于新一轮竞争得到发送机会,但这里并不需要再等待DIFS。正常CSMA/CA实际还可能有退避等时间;题目问给定条件下的最少时间。

进入练习

第 36 题

计算机网络
2 分

支持 VLAN 划分的以太网交换机,已按端口划分了 2 个 VLAN。VLAN 划分结果及部分端口连接主机的 MAC 地址如下图所示。

2026 年真题配图

下列具有不同目的 MAC 地址(DA)和源 MAC 地址(SA)的以太网帧 F1~F4 中,H3 会接收到的是

F1:DA = 00-1A-2B-3C-4D-03,SA = 00-1A-2B-3C-4D-01

F2:DA = 00-1A-2B-3C-4D-03,SA = 00-1A-2B-3C-4D-05

F3:DA = FF-FF-FF-FF-FF-FF,SA = 00-1A-2B-3C-4D-02

F4:DA = FF-FF-FF-FF-FF-FF,SA = 00-1A-2B-3C-4D-06

A. 仅 F1、F2

B. 仅 F1、F3

C. 仅 F2、F4

D. 仅 F3、F4

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

参考答案:B

答案:B。

按图中端口分组,H1、H2、H3在VLAN1,H4、H5、H6在VLAN2。VLAN隔离二层广播域,交换机不会只因目的MAC匹配另一VLAN中的主机,就把帧跨VLAN转发。

逐帧判断:

帧 来源 目的 H3能否收到
F1 VLAN1的H1 H3的单播MAC 能,同VLAN单播
F2 VLAN2的H5 H3的单播MAC 不能,跨VLAN
F3 VLAN1的H2 广播 能,广播限于VLAN1
F4 VLAN2的H6 广播 不能,只在VLAN2广播

因此仅F1、F3,选B。A误认为只要目的为H3就能跨VLAN,C、D则把另一个VLAN的广播也交给H3。交换机在同一物理机箱内不代表所有端口属于同一个逻辑局域网;跨VLAN通信通常需要三层转发机制,题目没有提供该机制。

进入练习

第 37 题

计算机网络
2 分

某网络在 t0t_{0} 时刻的网络拓扑以及 R1 的路由表如下图所示,R1~R4 为路由器,基于链路状态路由算法计算路由,S0~S4 为 R1 的接口,链路上的数值为链路费用。若 t1t_{1}(t1>t0t_{1}>t_{0})时刻 R1 检测到连接 R1 和 R2 的链路断开,则 R1 经过重新计算路由并进行充分路由聚合后的路由表中路由项(入口)的数量是

2026 年真题配图

R1 路由表

目的网络 接口
199.10.20.0/27 S1
199.10.20.32/27 S2
199.10.20.64/26 S3
199.10.20.128/25 S3
199.10.21.125/32 S4
0.0.0.0/0 S0

A. 3

B. 4

C. 5

D. 6

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

参考答案:B

答案:B。

先按链路费用重算下一跳,再聚合,不能继续沿用断链前的S1路由。R1—R2断开后:

  • 到R3,直接走S2费用6,经R4再到R3费用3+4=7,选S2。
  • 到R2,只能经R3继续前往:最短费用6+5=11,第一跳仍为S2。
  • R4的两个子网继续走S3,特定主机及Internet出口分别保持S4、S0。

所以199.10.20.0/27和199.10.20.32/27都走S2,可精确合成199.10.20.0/26。S3对应的.64/26及.128/25可用一个更大的/24覆盖,再由前面的/26更具体路由覆盖其不应走S3的部分:

目的网络 接口
199.10.20.0/26 S2
199.10.20.0/24 S3
199.10.21.125/32 S4
0.0.0.0/0 S0

最长前缀匹配使.0~.63选/26,其余.20网内地址选/24,外部地址按具体主机项或默认项处理。四种转发方向需要对应项,充分聚合后共4项,选B。网络挂在R2后面并不等于R1的本地直连网,断开的S1应退出这些目的的转发路径。

进入练习

第 38 题

计算机网络
2 分

下列路由协议中,可以将一个自治系统划分为多个区域(Area)的内部网关协议是

I. OSPF

II. RIP

III. BGP

A. 仅 I

B. 仅 II

C. 仅 I、III

D. 仅 II、III

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

参考答案:A

答案:A。

OSPF是链路状态内部网关协议,支持把一个自治系统划分为多个Area。每个区域内主要传播本区域的详细链路状态,由区域边界路由器连接,并以骨干区域Area 0组织区域间路由。这样可以减少大网络中每台路由器需要处理的详细拓扑范围,I正确。

RIP是距离向量内部网关协议,按跳数交换路由,没有题目所问的OSPF式Area层次,II不符合。BGP主要负责自治系统之间的路由交换,属于外部网关协议;它有自治系统号等概念,也有自治系统内部的BGP会话,但不能因此把它归作题目描述的区域划分内部网关协议,III不符合。

只有I,选A。C把BGP计入了区域内部协议,B、D则计入RIP。这里要同时满足“内部网关协议”和“可划分Area”,只满足其中一项不能入选。

进入练习

第 39 题

计算机网络
2 分

若将 IP 网络 123.4.4.0/22 划分为规模均等的 32 个子网,则 IP 地址 123.4.5.211 所在的子网是

A. 123.4.4.192/27

B. 123.4.4.192/28

C. 123.4.5.192/27

D. 123.4.5.192/28

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

参考答案:C

答案:C。

/22网络有32−22=10位主机位,共 210=10242^{10}=1024 个地址。等分成32=252^5个子网,需要再取5位作子网号,因此新前缀为22+5=27;每个子网剩5位主机位,块长32个地址。

123.4.5.211位于原网络覆盖的第三字节4~7范围内。/27的掩码为255.255.255.224,最后一字节211=11010011B,与224=11100000B相与得到11000000B=192,所以其子网为123.4.5.192/27,地址范围.192~.223,选C。

A、B把第三字节错误改成4;B、D使用/28会把1024地址分为64个等大子网,而不是题设32个。这里求网络地址,应保留前27位并清零后5位;不是把整个IP向原网络起点简单截断。

进入练习

第 40 题

计算机网络
2 分

电子商务类 Web 应用通常采用 Cookie 技术解决 HTTP 协议无状态的问题。下列叙述中,不属于 Cookie 技术典型用途的是

A. 用户跟踪

B. 个性化推荐

C. 构建虚拟购物车

D. 缩短 Web 对象响应时间

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

参考答案:D

答案:D。

HTTP请求之间不会自动保留上一次请求的用户状态。Cookie允许服务器给客户端保存一个标识,后续符合条件的请求带上该标识,服务器据此关联会话或用户数据。

因此A可以通过标识关联浏览行为,B可以结合历史偏好进行个性化推荐,C可以把多次请求关联到同一个购物车。这些通常由Cookie保存标识、服务器保存具体业务数据,不要求把整辆购物车或全部用户历史都写进Cookie。

D缩短Web对象响应时间,主要依靠缓存、就近部署、连接复用及减少处理开销等技术,并非Cookie的典型用途,选D。Cookie随请求发送还可能增加少量字节;它不是一种自动缓存Web对象的机制。区分Cookie和缓存时,可看前者解决“这些请求属于谁或哪个会话”,后者解决“已有对象能否复用”。

进入练习

解答题

7 题 · 共 70 分

第 41 题

数据结构
13 分

已知二叉搜索树采用二叉链表存储,类型定义如下:

c 复制代码
typedef struct BSTNode                 //二叉搜索树结点
{   int data;                          //保存结点的关键字值
    struct BSTNode * left, * right;    //指向左孩子、右孩子的指针
} BinTNode;
typedef BinTNode * BTree;              //二叉搜索树

对于给定的非空二叉搜索树 TT(root 为指向 TT 的根结点的指针)和整数 kk,请设计尽可能高效的查找算法:

void searchX( BTree root, int k )

查找 TT 中其关键字值与 kk 之差的绝对值最小的所有结点,输出差值的绝对值和结点中的关键字值。要求:

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

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

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

(1)设计思想:沿查找路径找最近值。 二叉搜索树满足左子树关键字小于根、右子树关键字大于根;按这一严格定义,关键字互异。要找与k最接近的值,不必访问整棵树,可沿查找k的路径进行,并维护当前最小绝对差best及达到它的结点。

访问结点p后:

  • 若p->data<k,左子树所有值更小,离k都比p更远;先记下p的候选资格,再只向右走。
  • 若p->data>k,右子树所有值更大,离k都比p更远;对称地只向左走。
  • 若p->data==k,差值0已经是最小值,可以结束。

新差值更小时清除原候选;差值相等时保留并列结果。非零差d最多对应k−d、k+d两个不同关键字,因此两个指针已足够,无需候选数组。

(2)完整C实现。 以下重复给出结点类型,便于单独理解代码。先提升到long long再减法,避免两个int直接相减溢出。

c 复制代码
#include <stdio.h>
#include <limits.h>

typedef struct BSTNode {
    int data;
    struct BSTNode *left, *right;
} BinTNode;
typedef BinTNode *BTree;

void searchX(BTree root, int k) {
    BTree p = root, first = NULL, second = NULL;
    long long best = LLONG_MAX;
    while (p != NULL) {
        long long diff = (long long)p->data - (long long)k;
        if (diff < 0) diff = -diff;

        if (diff < best) {
            best = diff;
            first = p;
            second = NULL;  // 更近的值使原来所有候选失效
        } else if (diff == best) {
            second = p;     // 最多另有一个不同的并列值
        }

        if (p->data == k) break;
        p = p->data < k ? p->right : p->left;
    }
    if (first == NULL) return; // 也安全处理空树
    printf("最小绝对差:%lld;关键字:%d", best, first->data);
    if (second != NULL) printf("、%d", second->data);
    printf("\n");
}

过程示例。 设根8,左孩子3,3的右孩子5,5的右孩子7,查k=6。沿8→3→5→7走,差值分别2、3、1、1:5使best更新为1,7与之并列,最终输出差1及关键字5、7。若查k=8,在根处就输出差0、关键字8。

为什么不会漏掉最近结点? 每次舍弃的子树中,所有值都在当前结点远离k的那一侧,所以其距离严格大于当前距离。当前结点已比较过,它们不可能再改善或并列当前最优结果。按这一理由逐层排除,到达空指针时所有可能最优值均已在查找路径上处理。

复杂度与边界。 每层只访问一个结点,时间O(h)、额外空间O(1),h为树高;平衡时O(log n),退化时O(n)。k比全部关键字小或大时,过程分别沿最左或最右路径找到端点。long long能容纳两个int边界值之间的差。若另外允许重复关键字结点,需扩展算法继续找同值结点,不能直接套用本题互异关键字下的“至多两个结点”结论。

进入练习

第 42 题

数据结构
10 分

一个栈的入栈序列是 1,2,…,n1,2,…,n(n≥3n≥ 3)。请回答下列问题。

(1)当 n=9n=9 时,是否能得到出栈序列 2,3,1,6,4,7,5,9,82,3,1,6,4,7,5,9,8?是否能得到出栈序列 2,3,1,5,6,7,4,9,82,3,1,5,6,7,4,9,8?(2 分)

(2)对于由 1,2,…,n1,2,…,n 组成的任意序列 P1,P2,…,PnP_{1},P_{2},…,P_{n} 中的元素 PiP_{i}、PjP_{j}、PkP_{k}(i<j<ki<j<k),当 PiP_{i}、PjP_{j}、PkP_{k} 的大小满足什么关系时,序列 P1,P2,…,PnP_{1},P_{2},…,P_{n} 不是可以得到的出栈序列?(2 分)

(3)当 n=4n=4 时,可以得到的以 2 开头的出栈序列的个数是多少?(2 分)

(4)若当 n=k−1n=k-1 时可以得到的出栈序列个数为 MM,则当 n=kn=k 时可以得到的以 1 开头的出栈序列的个数是多少?可以得到的以 2 开头的出栈序列的个数是多少?可以得到的所有出栈序列的个数是多少?(4 分)

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

(1)逐步模拟两种出栈次序。 栈后进先出,输入1、2、…、9只能按顺序入栈。

第一种2,3,1,6,4,7,5,9,8不能得到。先压1、2弹2,再压3弹3、弹1,随后为了弹6,必须把4、5、6依次压入。弹6后栈顶是5,下面才是4,而下一个要求输出4,无法越过5,故失败。

第二种2,3,1,5,6,7,4,9,8可以得到:

要输出的值 为此进行的操作
2 压1、2,弹2
3 压3,弹3
1 弹1
5 压4、5,弹5
6 压6,弹6
7 压7,弹7
4 弹4
9 压8、9,弹9
8 弹8

(2)无法实现的三项关系。 若存在i<j<k且

Pj<Pk<Pi,P_j<P_k<P_i,

则序列不合法。为了先输出最大的P_i,比它小的P_j、P_k已按递增次序入栈,较大的P_k在较小的P_j之上。只要二者还未输出,就必须先弹P_k,不能按位置j、k先弹P_j再弹P_k。第一种序列中的6、4、5就是这种“最大—最小—中间”模式。

(3)n=4、以2开头。 先压1、2并弹2,此时栈底留1,尚可依次压3、4。全部合法结果为2134、2143、2314、2341、2431,共5个。例如2413不合法:为了弹4已经压3,弹4后3挡在1上方。

(4)推广到n=k。 以1开头时,先把1压入再弹出,剩下2~k与k−1项的原问题等价,故有M种。

以2开头时,必须先压1、2并弹2。把剩下的递增元素1、3、…、k重新编号为1、2、…、k−1;最小元素1虽然已在栈底,但任意非空合法操作本来也会先压最小项,剩余可实现次序与k−1项问题一一对应,所以仍有M种。

所有合法出栈序列数为卡特兰数。k次入栈和k次出栈的操作排列共 (2kk)\binom{2k}{k} 种,排除任何前缀中出栈次数超过入栈次数的非法排列,得到

Ck=1k+1(2kk).C_k=\frac{1}{k+1}\binom{2k}{k}.

已知 M=Ck−1=(2k−2k−1)/kM=C_{k-1}=\binom{2k-2}{k-1}/k,两式相除得到
CkM=2k(2k−1)k(k+1)=4k−2k+1,Ck=4k−2k+1M.\frac{C_k}{M}=\frac{2k(2k-1)}{k(k+1)} =\frac{4k-2}{k+1},\qquad C_k=\frac{4k-2}{k+1}M.
以1、2开头只是全部序列的一部分,不能把总数写成2M。代入k=4、M=5,得到总数14,且上述两类各5种,便于核对。

进入练习

第 43 题

计算机组成原理
10 分

某 16 位计算机 C 按字节编址,通用寄存器 R0~R15 的编号为 0~15,存储器地址为 16 位,采用定长指令字,指令格式有 R、I 和 M 型,如下所示。

2026 年真题配图

其中,op1 为 0001、0010 分别表示加、左移指令,op2 为 0100 表示加立即数指令,op3 为 1110、1111 分别表示取数、存数指令,R[r] 表示寄存器 r 中的内容,num 为移位位数,M[addr] 表示存储器地址 addr 中的内容。请回答下列问题。

(1)主存单元和通用寄存器的宽度各是多少位?(2 分)

(2)op1 和 op2 的编码是否可以相同?op2 和 op3 的编码是否可以相同?(2 分)

(3)若 R[2] = ABCDH,R[9] = F001H,则指令 0000 0010 1001 0001 执行后,R2 和 R9 中内容分别是多少(用十六进制表示)?(2 分)

(4)若变量 xx、yy 均为 16 位带符号整数,在存储器中依次从低地址向高地址连续存放,xx 的地址在 R15 中,实现“y = 16 * x - 5;”的 4 条指令 I1~I4 如题 43 表所示,写出①~④处的内容。(4 分)

题 43 表

2026 年真题配图
查看答案与解析收起答案与解析

(1)主存单元与寄存器宽度。 按字节编址意味着每一个主存地址对应8位字节,因此主存单元宽8位;“16位计算机”的机器字长为16位,通用寄存器宽16位。指令16位占两个相邻字节,不能因指令字长16位就把编址单元也写成16位。

(2)操作码能否重用。 R型高4位固定0000,译码器先看到这个前缀,再以低4位op1确定具体运算;I型直接以高4位op2识别操作。因此op1和op2可以相同,它们处于不同的译码层级,例如某个低4位值在R型中表示加,而同值放高4位可标识一种I型指令。

I型与M型都用最高4位作直接类型/操作标识。如果op2与op3相同,后面位段又没有额外的类型区分信息,译码器无法唯一选择两种格式,因此二者不能相同。

(3)译码及16位加法。 机器码按四段拆为0000|0010|1001|0001,分别为R型前缀、rt=2、rs=9、op1=加,功能为R2←R2+R9。

ABCDH+F001H=19BCEH.ABCD_H+F001_H=19BCE_H.

寄存器只有16位,保留低4个十六进制位,故R2=9BCEH;源寄存器R9未被写入,仍为F001H。

(4)实现表达式。 R15保存x的地址,x、y各占2B,故y在R15+2。按“取x—乘16—减5—存y”编码:

指令 功能 需要填入的字段 完整机器码
I1 R0←M[R15+0] ①=1110 E000H
I2 R0←R0左移4位 ②=0000 0100,即rt=0、num=4 0042H
I3 R0←R0+(−5) ③=1111 1011 40FBH
I4 M[R15+2]←R0 ④=0000 0000 0010 F002H

−5的8位补码为256−5=251=FBH,扩展到16位得到FFFBH,完成减5;左移4位产生乘 24=162^4=16 的机器操作。注意I2中间8位同时包含目的寄存器号和移位位数,不是8位普通立即数;M型偏移以字节为单位,所以y的偏移是2而不是1。

进入练习

第 44 题

计算机组成原理
13 分

某 16 位计算机 C 按字节编址,通用寄存器 R0~R15 的编号为 0~15,存储器地址为 16 位,采用定长指令字,指令格式有 R、I 和 M 型,如下所示。

R、I 和 M 型指令的格式及功能

其中,op1 为 0001、0010 分别表示加、左移指令,op2 为 0100 表示加立即数指令,op3 为 1110、1111 分别表示取数、存数指令,R[r] 表示寄存器 r 中的内容,num 为移位位数,M[addr] 表示存储器地址 addr 中的内容。

计算机 C 的部分数据通路如题 44 图所示。

2026 年真题配图

图中带箭头虚线表示控制信号,IR.rt、IR.rs 分别表示 IR 中的 rt、rs 字段,IR11∼0_{11∼ 0} 为 IR 中低 12 位。要求取指令周期内完成 PC 增量操作。请回答下列问题。

(1)题 44 图中①和②是同一类部件,其名称是什么?(1 分)

(2)已知 I 型指令中 imm8 可以是带符号整数或无符号整数,M 型指令中 offset 是带符号整数,控制信号 ExtOp 至少有几位?为什么?(2 分)

(3)取指周期中,MARsrc、ALUAsrc、ALUBsrc、RegWr 的取值各是什么?(4 分)

(4)左移指令执行周期中,ALUBsrc、RegWsrc、RegDst、RegWr 的取值各是什么?ExtOp 是否可以与 M 型指令的 ExtOp 取值相同?为什么?(6 分)

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

(1)部件名称。 ①、②都是多路选择器。①从IR.rt与固定寄存器号15中选择读地址ra;②从IR.rs与固定号0中选择读地址rb。输出的是通用寄存器组的读取编号,随后busA、busB才给出相应寄存器数据。

(2)ExtOp位数。 扩展器输入IR低12位,输出16位,需要区分:

  1. I型无符号imm8:取低8位,高8位补0。
  2. I型有符号imm8:取低8位,用位7的符号补齐高8位。
  3. M型有符号offset:取低12位,用位11补齐高4位。

有3种不同扩展动作,1位只能编码2种,至少 ⌈log⁡23⌉=2\lceil\log_2 3\rceil=2 位。符号扩展是复制符号位,不是给有符号数任意补1。

(3)取指周期。 指令为16位、主存按字节编址,所以取当前指令时用PC作为主存地址,并在本周期计算下一地址PC+2。按图中输入编号:

信号 取值 原因
MARsrc 0 MAR前的选择器选PC,不选ALU结果
ALUAsrc 0 ALU A端选PC
ALUBsrc 01 B端选编号1的常数2
RegWr 0 取指不写通用寄存器组

ALU执行加法、PCin允许更新,内存读出的指令进入IR。ALUBsrc有三个输入,因此使用两位表示,图中编号1应写01。

(4)左移执行周期。 左移用R[rt]作数据、num作位数,ALU A端应取busA;B端取扩展器输出。结果写回rt指定的寄存器:

信号 取值 原因
ALUBsrc 10 选编号2的扩展器输出
RegWsrc 1 写回数据来自ALU结果
RegDst 1 目的编号来自IR.rt,不是固定R0
RegWr 1 允许写回寄存器

ExtOp可以采用与M型相同的12位符号扩展。R型的num在IR位7~4;无论这三种扩展怎样处理高位,位7~4都原样保留。左移操作从这四位获取移位位数,不把整个扩展结果当作位数,因此即使高位还含rt或符号扩展位,也不影响num。关键是本题字段位置与ALU对移位字段的使用方式。

进入练习

第 45 题

操作系统
7 分

某系统采用基于抢占式优先权(优先权值越大优先权越高)和时间片轮转的 CPU 调度算法,仅在时钟中断发生时才能抢占 CPU,时钟中断间隔时间为 10 ms。每当进程进入就绪队列时,其时间片大小均设置为 50 ms。进程因时间片用完而再次进入就绪队列时,若其优先权值大于 0,则优先权值减 1。进程因优先权低被抢占 CPU 而再次进入就绪队列时,其优先权值不变。优先权相同时,先进入就绪队列的进程先执行。假设系统中有 4 个进程 P1~P4,各进程的到达时刻、初始优先权值、所需的 CPU 执行时间如题 45 表所示。

题 45 表

进程 到达时刻 初始优先权值 CPU 执行时间
P1 10 ms 3 95 ms
P2 10 ms 4 20 ms
P3 12 ms 2 40 ms
P4 14 ms 5 60 ms

请回答下列问题。

(1)在忽略时钟中断处理及 CPU 调度时间开销的情况下,若将 10 ms 时刻发生的时钟中断记为第一次时钟中断,且从此时开始进行 CPU 调度,则从 10 ms 时刻开始到 4 个进程都运行结束为止,时钟中断和 CPU 调度各发生了多少次?第一次执行 P1、P3、P4 的时刻分别是什么?(5 分)

(2)若时间片由 50 ms 改为 100 ms,则 CPU 调度次数增加、不变还是减少?若时钟中断间隔时间由 10 ms 改为 1 ms,则系统开销增加、不变还是减少?(2 分)

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

(1)先按规则建立时间轴。 优先权越大越先执行,但新来的高优先权进程只能在时钟中断时抢占。每次进入就绪队列都获得新的50ms时间片;时间片用完才降低优先权,因更高优先权抢占则不降低。

10ms时P1、P2到达,先运行优先权4的P2。P3在12ms、P4在14ms到达,P4虽更优先,却不能立刻抢占,要等20ms时钟中断。此时P2已执行10ms,还剩10ms,重新排队但优先权保持4。

运行区间/ms 进程 区间结束原因及后续状态
10~20 P2 被P4抢占;剩10ms、优先权仍4
20~70 P4 用完50ms;剩10ms、优先权5降为4
70~80 P2 与P4同为4,但P2于20ms先排队;执行完
80~90 P4 执行剩余10ms,完成
90~140 P1 用完50ms;剩45ms、优先权3降为2
140~180 P3 与P1同为2,但P3于12ms先排队;执行完
180~225 P1 执行剩余45ms,完成

所有执行时间合计95+20+40+60=215ms,自10ms起连续运行到225ms,符合表中终点。

计数从10ms开始,10、20、…、220ms共有 (220−10)/10+1=22(220-10)/10+1=22 次时钟中断。表中7个运行区间各对应一次选定进程执行的调度,故CPU调度7次;同一进程持续运行期间的普通时钟中断不自动算一次重新调度。P1、P3、P4首次执行分别为90、140、20ms。

(2)改变参数。 时间片改100ms后,P4剩余全部60ms可从20到80一次完成,P1全部95ms也可从90到185一次完成,不再因50ms耗尽而两次重新排队。运行次序为P2、P4、P2、P1、P3,共5次调度,所以次数减少。P2的高优先权抢占仍存在,不能误写为只有4次。

时钟间隔从10ms改1ms,会更频繁进入时钟中断并检查计时、调度等状态,因此系统开销增加。更及时地响应不代表中断处理本身没有成本。

进入练习

第 46 题

操作系统
8 分

某基于索引节点(inode)的文件系统的目录项由文件名和索引节点号构成。磁盘中存放了索引节点表、位图、目录等元数据以及文件数据,盘块大小为 4 KB,盘块号占 4 B。索引节点表包含了所有文件的索引节点,位于从 100 号盘块开始的 4096 个连续盘块中,索引节点号是索引节点在该表中的序号,从 0 开始编号。每个索引节点占 128 B,包含直接地址项 5 个,一次间接地址项、二次间接地址项、三次间接地址项各 1 个。磁盘块位图和索引节点位图分别用于描述磁盘块和索引节点占用情况,0 表示未占用,1 表示已占用。某子目录树如题 46 图所示,其中各文件的文件名和索引节点号如题 46 表所示,file 大小为 30 KB。

2026 年真题配图

题 46 表

文件名 索引节点号
dir 100
dir1 201
file 1000

请回答下列问题。

(1)file 的索引节点存放在磁盘的几号盘块中?若 file 的索引节点已读入内存,则访问 file 中偏移地址为 21460 的一个字节数据,最多需要访问几个盘块?该文件系统在空间足够大的磁盘中最多能创建多少个文件?(3 分)

(2)若要删除目录 dir1,则文件系统需要对哪些元数据执行哪些操作?(5 分)

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

(1)三项定位与数量计算。

一盘块4096B,一inode128B,故每块放4096/128=32个inode。编号从0开始,inode1000前面有1000项:

1000=31×32+8.1000=31\times32+8.

它在inode表的第31个块中,物理盘块号为100+31=131,块内字节偏移为8×128=1024。不能因编号1000就直接访问1000号盘块。

文件偏移从0计,21460所在数据块序号为

⌊21460/4096⌋=5,21460 mod 4096=980.\lfloor21460/4096\rfloor=5,\qquad21460\bmod4096=980.

直接地址5项覆盖序号0~4,序号5开始使用一次间接地址。inode已在内存,若相关块尚未缓存,先读一次间接索引块,从其第0项取得第5号数据块地址,再读这个数据块。因此最多访问2个盘块。索引块保存的是数据块号,不是所要的文件数据;inode本身无需再计一次读取。

inode表共有4096块,每块32项,最多有4096×32=131072=2172^{17}个inode。每个文件对象需要inode,故空间足够时最多可创建131072个文件;目录也会占其中的inode,不能把目录当成不耗用名额的对象。

(2)删除非空目录及其中文件。 图中dir1包含file,应先处理file,再回收dir1。需要修改的元数据包括:

  • 磁盘块位图。 file长30KB=30720B,数据块数为 ⌈30720/4096⌉=8\lceil30720/4096\rceil=8。前5块由直接项指向,后3块由一次间接索引块指向,所以回收8个数据块及1个间接索引块,对应位由1置0。目录dir1自身内容占用的盘块及其实际使用的索引块也须回收;题目未给目录大小,不臆定其具体块数。
  • inode位图与对应inode。 把file的inode1000、dir1的inode201标为未占用,回收这两个inode,解除其块地址等有效占用信息。父目录dir的inode100保留。
  • 父目录内容。 从dir中删除“dir1→201”的目录项,并更新被修改目录的长度、时间等有关元数据。原来指向dir1的名字不能在回收后继续保留。

仅删名字会泄漏块和inode;仅清位图又会留下指向已释放对象的目录项。目录项、inode分配状态和磁盘块分配状态应共同完成相应更新。

进入练习

第 47 题

计算机网络
9 分

人工智能(AI)是引领未来的战略性技术,其发展高度依赖强大的算力供给,通过网络互联分散的算力中心,可以充分聚合算力资源,满足人工智能对大规模算力的需求,支撑人工智能国家发展战略。某算力调度交易平台聚合各地的算力中心的算力,向用户提供算力服务的示意场景如题 47 图所示。算力用户 C 向平台申请算力服务,平台通过优化调度各算力中心算力,向 C 授权使用算力中心 ii 的算力,SiS_{i} 为算力中心 ii 的负载均衡服务器,用于接收算力用户的计算任务描述数据文件,并向算力中心 ii 内部分派计算任务。为确保可靠传输,假设 C 建立一条 TCP 连接向服务器 SiS_{i} 上传一个总长度为 2000 B 的计算任务描述数据文件,拥塞窗口初始阈值为 8 MSS,MSS = 500 B,SiS_{i} 对收到的每个 TCP 段进行确认,且确认段不封装数据,接收窗口 rwnd 始终为 1000 B,RTT = 5 ms。C 建立连接时选择的初始序号为 1000,SiS_{i} 选择的初始序号为 2000,SYN、ACK、FIN 为标志位,seq 为序号,ack_seq 为确认序号。在整个文件传输过程中未出现任何重传或报文段丢失。

2026 年真题配图

请回答下列问题。

(1)C 与 SiS_{i} 建立 TCP 连接过程需要几次握手?C 收到的 SYN = 1、ACK = 1 的 TCP 段的确认序号(ack_seq)是多少?(2 分)

(2)当 C 接收到 SiS_{i} 发送的“ACK = 1,seq = 2001,ack_seq = 2001,rwnd = 1000”确认段后,C 的拥塞窗口增加到多少?C 的发送窗口设置为多少?(2 分)

(3)C 与 SiS_{i} 释放 TCP 连接过程需要几次挥手?C 收到的最后一个 TCP 报文段的序号(seq)、确认序号(ack_seq)、FIN 的值分别是多少?(4 分)

(4)若忽略报文段传输时延,且时间从 C 请求建立 TCP 连接时刻算起,则 C 确认 SiS_{i} 已成功接收到文件的时间是多少?(1 分)

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

本题采用教材中的常用 TCP 模型:初始拥塞窗口 cwnd=1MSScwnd=1MSS,慢开始阶段每收到一个确认新数据段的 ACK 就增加 1 MSS;文件发送并获得确认后,由 C 主动关闭,服务器的 ACK 与 FIN 分开发送,形成常规四次挥手。 题面所给“初始阈值 8 MSS”是慢开始阈值 ssthreshssthresh,不是初始 cwnd;两者不能混淆。

(1)三次握手及确认序号。

C 先发 SYN,seq=1000;服务器返回 SYN=1、ACK=1,seq=2000,并确认 C 的 SYN。SYN 消耗一个序号,因此 ack_seq=1001。C 再确认服务器的 SYN,完成 三次握手。双方首个可用数据序号分别为 1001、2001。

(2)由确认号判断已确认的数据与拥塞窗口。

C 首个数据字节的编号是 1001。ack_seq=2001 表示服务器已按序接收编号 1001~2000 的 1000 B,即两个 500 B 数据段。按逐段确认和初始 cwnd=1 MSS:

已确认的数据段数 cwnd
0 1 MSS=500 B
1 2 MSS=1000 B
2 3 MSS=1500 B

收到题给确认后,cwnd 为 1500 B,仍低于慢开始阈值 8 MSS。接收窗口始终为 1000 B,发送窗口宽度取两者较小值:

min⁡(cwnd,rwnd)=min⁡(1500,1000)=1000 B.\min(cwnd,rwnd)=\min(1500,1000)=\mathbf{1000\ B}.

若还有未确认的在途数据,实际新发送额度还要减去在途字节数。服务器 ACK 中的 seq=2001 并不表示它发送过 2001 B 数据,纯 ACK 不消耗数据序号。

(3)四次挥手及最后收到的报文段。

按 C 主动关闭、ACK 和 FIN 分开发送的约定,顺序为 C 发 FIN、服务器确认、服务器发 FIN、C 发最后确认,共 四次挥手。

C 上传的 2000 B 数据占序号 1001~3000;FIN 使用下一个序号 3001,也消耗一个序号,因此服务器确认到 3002。服务器未发送业务数据,SYN 之后的可用序号仍为 2001,纯 ACK 不消耗序号。所以 C 最后收到的服务器 FIN 段中:

seq=2001,ack_seq=3002,FIN=1.\boxed{seq=2001,\quad ack\_seq=3002,\quad FIN=1}.

C 随后发送最终 ACK,确认服务器 FIN 到 2002。题目问 C“收到”的最后一段,不能误答 C 自己发出的最终 ACK。

若服务器将确认与 FIN 合并,可减少关闭报文数;若由服务器先关闭,C 最后收到的报文性质也会变化。因此本小问按开头声明的常规关闭模型作答。

(4)从请求建连到确认文件已全部收到的时间。

忽略报文段传输时延,C 收到 SYN+ACK 后即可发送第三次握手 ACK,并开始发送数据。初始窗口为 1 MSS,接收窗口为 2 MSS,总文件为 4 MSS,发送批次为 1、2、1 个段:

相对时间 C 的动作或收到的确认
0 ms 发 SYN 请求建立连接
5 ms 收 SYN+ACK,发第三次握手 ACK 及第 1 个数据段
10 ms 收第 1 段确认,发送第 2、3 段;窗口限制为 1000 B
15 ms 收第 2、3 段确认,释放发送额度,发送剩余第 4 段
20 ms 收第 4 段确认,2000 B 文件全部获确认

建立连接需要 1 RTT,数据发送并全部获确认需要 3 RTT,故 C 确认服务器成功接收文件的时间为:

T=4RTT=4×5=20 ms.T=4RTT=4\times5=\boxed{20\ \text{ms}}.

服务器实际收到最后数据的时刻早于 C 收到最后 ACK 的时刻,但题目问的是 C 确认成功的时间。释放连接的时间不计入本小问。

若初始 cwnd 至少为 2 MSS,则同样的 rwnd 下可按 2、2 个段发送,完成确认时间会改变;20 ms 的前提是本题采用的首轮 1 MSS 教材模型。

进入练习