2020年全国硕士研究生招生考试计算机学科专业基础试题(408)详细解析
2020年全国硕士研究生招生考试计算机学科专业基础试题(408)详细解析
说明:本文基于2020年408真题及标准答案整理,逐题给出答案、知识点、详细解析与计算过程。部分题目中的图片、表格在扫描版中可能有缺失,本文根据历年真题通用版本补全。全文可按 Markdown 复制到 Word 中保存为博文。
一、单项选择题(1~40 小题,每小题 2 分,共 80 分)
第1题
题目: 将一个 10×10 对称矩阵 M 的上三角部分的元素 m_{i,j}(1≤i≤j≤10)按列优先存入 C 语言的一维数组 N 中,元素 m_{7,2} 在 N 中的下标是( )。
A. 15
B. 16
C. 22
D. 23
答案:C
解析:
对称矩阵上三角按列优先存储。m_{7,2} 位于下三角,但对称矩阵中 m_{7,2} = m_{2,7}。上三角中,第 1 列有 10 个元素(行 1~10),第 2 列有 9 个元素(行 2~10),第 3 列有 8 个元素,…,第 6 列有 5 个元素。
前 1 列:10 个;前 2 列:10+9=19;前 3 列:19+8=27;前 4 列:27+7=34;前 5 列:34+6=40;前 6 列:40+5=45。
m_{2,7} 在第 7 列,第 7 列从行 7 开始?按列优先,第 7 列的元素为 m_{1,7}, m_{2,7}, …, m_{7,7}。其中 m_{2,7} 是第 7 列的第 2 个元素。前 6 列共有 45 个元素,所以 m_{2,7} 的下标 = 45 + 1 = 46?但选项最大 23,显然我理解错了。
重新审题:上三角部分的元素 m_{i,j}(1≤i≤j≤10)按列优先存入一维数组 N。按列优先:先存第 1 列(行 1~10),再第 2 列(行 2~10),…,第 10 列(行 10)。
第 1 列:10 个元素,下标 0~9。
第 2 列:9 个元素,下标 10~18。
第 3 列:8 个元素,下标 19~26。
第 4 列:7 个元素,下标 27~33。
第 5 列:6 个元素,下标 34~39。
第 6 列:5 个元素,下标 40~44。
第 7 列:4 个元素(行 7~10),下标 45~48。
m_{7,2} 不在上三角,但对称矩阵 m_{7,2}=m_{2,7}。m_{2,7} 在第 7 列,行 2 小于行 7,但上三角要求 i≤j,所以 m_{2,7} 是上三角元素。第 7 列的元素是 m_{7,7}, m_{8,7}, m_{9,7}, m_{10,7}?不对,上三角第 7 列的行范围是 1~7?按列优先,上三角第 j 列的元素是 m_{1,j}, m_{2,j}, …, m_{j,j}。
所以第 7 列有 7 个元素:m_{1,7}, m_{2,7}, …, m_{7,7}。
前 6 列元素个数:第 1 列 10 个,第 2 列 9 个,第 3 列 8 个,第 4 列 7 个,第 5 列 6 个,第 6 列 5 个,共 10+9+8+7+6+5 = 45 个。
第 7 列第 1 个元素 m_{1,7} 下标 45,第 2 个 m_{2,7} 下标 46。但选项没有 46。
可能题目是“按行优先”存入?题目写“按列优先”。也许下标从 1 开始?若从 1 开始,m_{2,7} 是第 46 个,下标 46。
再看选项:15, 16, 22, 23。说明我的列数算错了。
重新理解:对称矩阵上三角部分,按列优先存入一维数组。上三角元素总数为 10×11/2 = 55。
第 1 列(列号 1):行 1~10,共 10 个。
第 2 列:行 1~10?上三角要求 i≤j,第 2 列只有行 1 和行 2?不对,上三角 i≤j,第 j 列的行 i 从 1 到 j。所以第 1 列:行 1,1 个元素;第 2 列:行 1,2,2 个元素;…;第 10 列:行 1~10,10 个元素。
按列优先存储:先第 1 列(1 个),再第 2 列(2 个),…,第 10 列(10 个)。
总元素 1+2+…+10 = 55。
第 1 列:m_{1,1},下标 0。
第 2 列:m_{1,2}, m_{2,2},下标 1,2。
第 3 列:m_{1,3}, m_{2,3}, m_{3,3},下标 3,4,5。
第 4 列:下标 6,7,8,9。
第 5 列:下标 10~14。
第 6 列:下标 15~20。
第 7 列:下标 21~27。
第 7 列的元素:m_{1,7} 下标 21,m_{2,7} 下标 22,m_{3,7} 下标 23,…,m_{7,7} 下标 27。
所以 m_{2,7} 下标 22。因为对称,m_{7,2}=m_{2,7},下标 22。答案 C。
(注意:上三角按列优先,第 j 列有 j 个元素,行号从 1 到 j。)
知识点: 对称矩阵压缩存储、按列优先。
第2题
题目: 对空栈 S 进行 Push 和 Pop 操作,入栈序列为 a,b,c,d,e,经过 Push, Push, Pop, Push, Pop, Push, Push, Pop 操作后得到的出栈序列是( )。
A. b,a,c
B. b,a,e
C. b,c,a
D. b,c,e
答案:D
解析:
操作序列:
- Push a → 栈:a
- Push b → 栈:a,b
- Pop → 出 b,栈:a
- Push c → 栈:a,c
- Pop → 出 c,栈:a
- Push d → 栈:a,d
- Push e → 栈:a,d,e
- Pop → 出 e,栈:a,d
出栈序列:b, c, e。答案 D。
知识点: 栈的基本操作。
第3题
题目: 对于任意一棵高度为 5 且有 10 个结点的二叉树,若采用顺序存储结构保存,每个结点占 1 个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元数量至少是( )。
A. 31
B. 16
C. 15
D. 10
答案:A
解析:
顺序存储二叉树,需要按照完全二叉树的编号存储。高度为 5 的完全二叉树最多有 2^5 - 1 = 31 个结点。即使只有 10 个结点,为了表示树的结构,需要分配 31 个存储单元(可能有些为空)。答案 A。
知识点: 二叉树顺序存储。
第4题
题目: 已知森林 F 及与之对应的二叉树 T,若 F 的先根遍历序列是 a,b,c,d,e,f,中根遍历序列是 b,a,d,f,e,c,则 T 的后根遍历序列是( )。
A. b,a,d,f,e,c
B. b,d,f,e,c,a
C. b,f,e,d,c,a
D. f,e,d,c,b,a
答案:C
解析:
森林 F 的先根遍历对应二叉树 T 的先序遍历;F 的中根遍历对应 T 的中序遍历。
已知 T 的先序:a,b,c,d,e,f;中序:b,a,d,f,e,c。
可以构造二叉树 T:
先序第一个 a 是根,中序中 a 左边是 b,右边是 d,f,e,c。
左子树只有 b。右子树先序为 c,d,e,f?中序为 d,f,e,c。
右子树根为 c(先序中 c 在 d,e,f 前),中序中 c 在最后,所以 c 无右子树,左子树中序 d,f,e。
左子树先序 d,e,f,中序 d,f,e。根 d,左子树无,右子树先序 e,f,中序 f,e。根 e,左子树 f。
所以 T 后序:b, f, e, d, c, a。答案 C。
知识点: 森林与二叉树转换、遍历。
第5题
题目: 下列给定的关键字输入序列中,不能生成如下二叉排序树的是( )。
(图:根 4,左 2,右 5;2 的左 1,右 3)
A. 4,5,2,1,3
B. 4,5,1,2,3
C. 4,2,5,3,1
D. 4,2,1,3,5
答案:B
解析:
目标二叉排序树:根 4,左子树 2(左 1 右 3),右子树 5。
逐项插入:
A:4,5,2,1,3 → 4 根,5 右,2 左,1 左,3 右。得到目标树。
B:4,5,1,2,3 → 4 根,5 右,1 左,2 在 1 的右?插入 2:比 4 小,比 1 大,所以 1 的右孩子 2。再插 3:比 4 小,比 1 大,比 2 大,所以 2 的右孩子 3。得到树:4 左 1,1 右 2,2 右 3。与目标不同。所以 B 不能生成。
C:4,2,5,3,1 → 4 根,2 左,5 右,3 在 2 的右,1 在 2 的左。得到目标树。
D:4,2,1,3,5 → 4 根,2 左,1 左,3 右,5 右。得到目标树。
答案 B。
知识点: 二叉排序树构造。
第6题
题目: 修改递归方式实现的图的深度优先搜索(DFS)算法,将输出(访问)顶点信息的语句移到退出递归前(即执行输出语句后立刻退出递归)。采用修改后的算法遍历有向无环图 G,若输出结果中包含 G 中的全部顶点,则输出的顶点序列是 G 的( )。
A. 拓扑有序序列
B. 逆拓扑有序序列
C. 广度优先搜索序列
D. 深度优先搜索序列
答案:B
解析:
DFS 在退出递归前输出顶点,即后序遍历。对于有向无环图,后序遍历的逆序是拓扑排序。所以输出序列是逆拓扑有序序列。答案 B。
知识点: 图的 DFS、拓扑排序。
第7题
题目: 已知无向图 G 如下所示,使用克鲁斯卡尔(Kruskal)算法求图 G 的最小生成树,加到最小生成树中的边依次是( )。
(图略,边权:a-b:20, a-e:9, a-c:12, b-e:11, b-d:6, b-f:5, c-e:10, c-d:18, d-e:14, d-f:7, e-f:?)
A. (b,f),(b,d),(a,e),(c,e),(b,e)
B. (b,f),(b,d),(b,e),(a,e),(c,e)
C. (a,e),(b,e),(c,e),(b,d),(b,f)
D. (a,e),(c,e),(b,e),(b,f),(b,d)
答案:A
解析:
Kruskal 按边权从小到大选:5(b,f), 6(b,d), 7(d,f)? 但 d-f 可能形成环。9(a,e), 10(c,e), 11(b,e), 12(a,c), 14(d,e), 18(c,d), 20(a,b)。
选 (b,f) 5, (b,d) 6, (a,e) 9, (c,e) 10, 此时已有 4 条边,5 个顶点。还需一条边连接 {b,d,f} 和 {a,c,e},最小的是 (b,e) 11。所以顺序:(b,f),(b,d),(a,e),(c,e),(b,e)。答案 A。
知识点: 最小生成树、Kruskal。
第8题
题目: 若使用 AOE 网估算工程进度,则下列叙述中正确的是( )。
A. 关键路径是从原点到汇点边数最多的一条路径
B. 关键路径是从原点到汇点路径长度最长的路径
C. 增加任一关键活动的时间不会延长工程的工期
D. 缩短任一关键活动的时间将会缩短工程的工期
答案:B
解析:
关键路径是源点到汇点路径长度最长的路径。增加关键活动时间会延长工期,缩短关键活动时间可能缩短工期,但不一定(若有多条关键路径)。答案 B。
知识点: AOE 网、关键路径。
第9题
题目: 下列关于大根堆(至少含 2 个元素)的叙述中,正确的是( )。
I. 可以将堆视为一棵完全二叉树
II. 可以采用顺序存储方式保存堆
III. 可以将堆视为一棵二叉排序树
IV. 堆中的次大值一定在根的下一层
A. 仅 I、II
B. 仅 II、III
C. 仅 I、II 和 IV
D. I、III 和 IV
答案:C
解析:
堆是完全二叉树,可用顺序存储。堆不是二叉排序树。次大值一定在根的孩子中(因为大根堆,根最大,次大是左右孩子之一)。所以 I、II、IV 正确。答案 C。
知识点: 堆的性质。
第10题
题目: 依次将关键字 5,6,9,13,8,2,12,15 插入初始为空的 4 阶 B 树后,根结点中包含的关键字是( )。
A. 8
B. 6,9
C. 8,13
D. 9,12
答案:B
解析:
4 阶 B 树,每个结点最多 3 个关键字。插入过程:
5,6,9 → 根 [5,6,9]
插入 13 → 根满,分裂,中间 6 上移,左 [5],右 [9,13]。
插入 8 → 8 在右子树?8>6,进右 [9,13],插入 8 → [8,9,13]。
插入 2 → 2<6,进左 [5],插入 2 → [2,5]。
插入 12 → 12>6,进右 [8,9,13],插入 12 → [8,9,12,13] 满,分裂,中间 9 上移,左 [8],右 [12,13]。
根变为 [6,9]。答案 B。
知识点: B 树插入、分裂。
第11题
题目: 对大部分元素已有序的数组进行排序时,直接插入排序比简单选择排序效率更高,其原因是( )。
I. 直接插入排序过程中元素之间的比较次数更少
II. 直接插入排序过程中所需要的辅助空间更少
III. 直接插入排序过程中元素的移动次数更少
A. 仅 I
B. 仅 III
C. 仅 I、II
D. I、II 和 III
答案:A
解析:
对于基本有序的数组,直接插入排序比较次数少(每趟可能只比较一次),移动次数也少。简单选择排序比较次数固定 O(n²)。辅助空间两者都是 O(1)。所以 I 正确。答案 A。
知识点: 排序算法比较。
第12题
题目: 下列给出的部件中,其位数(宽度)一定与机器字长相同的是( )。
I. ALU
II. 指令寄存器
III. 通用寄存器
IV. 浮点寄存器
A. 仅 I、II
B. 仅 I、III
C. 仅 II、III
D. 仅 II、III、IV
答案:B
解析:
ALU 和通用寄存器的位数通常与机器字长相同。指令寄存器宽度等于指令字长,不一定等于机器字长。浮点寄存器宽度取决于浮点格式。答案 B。
知识点: 计算机字长、部件宽度。
第13题
题目: 已知带符号整数用补码表示,float 型数据用 IEEE 754 标准表示,假定变量 x 的类型只可能是 int 或 float,当 x 的机器数为 C800 0000H 时,x 的值可能是( )。
A. -7×2²⁷
B. -2¹⁶
C. 2¹⁷
D. 25×2²⁷
答案:A
解析:
C8000000H = 1100 1000 0000 …
若为 int:补码,最高位 1 负数,值为 -0x38000000 = -939524096 ≈ -7×2²⁷?2²⁷=134217728,7×2²⁷=939524096。所以 -7×2²⁷ 正确。
若为 float:符号 1,阶码 10010000 = 144,实际 17,尾数 1.0,值 = -1.0×2¹⁷ = -131072,不在选项。
所以 x 是 int,值为 -7×2²⁷。答案 A。
知识点: 补码、IEEE754。
第14题
题目: 在按字节编址,采用小端方式的 32 位计算机中,按边界对齐方式为以下 C 语言结构型变量 a 分配存储空间:
struct record {
short x1;
int x2;
} a;
若 a 的首地址为 2020 FE00H,a 的成员变量 x2 的机器数为 1234 0000H,则其中 34H 所在存储单元的地址是( )。
A. 2020 FE03H
B. 2020 FE04H
C. 2020 FE05H
D. 2020 FE06H
答案:D
解析:
结构体按边界对齐:short x1 占 2 字节,地址 2020FE00H~2020FE01H。int x2 需要 4 字节对齐,所以从 2020FE04H 开始。x2 机器数 1234 0000H,小端存放:低字节 00H 在 2020FE04H,34H 在 2020FE05H,12H 在 2020FE06H?不对,小端:最低字节在最低地址。机器数 12 34 00 00H,最低字节 00H 在 FE04H,34H 在 FE05H,12H 在 FE06H,00H 在 FE07H。所以 34H 在 2020FE05H?但选项有 FE05H。再检查:x2 机器数为 1234 0000H,即 0x12340000。小端:地址 FE04H 存 00H,FE05H 存 00H,FE06H 存 34H,FE07H 存 12H。所以 34H 在 FE06H。答案 D。
知识点: 结构体对齐、小端存储。
第15题
题目: 下列关于 TLB 和 Cache 的叙述中,错误的是( )。
A. 命中率都与程序局部性有关
B. 缺失后都需要去访问主存
C. 缺失处理都可以由硬件实现
D. 都由 DRAM 存储器组成
答案:D
解析:
TLB 由 SRAM 组成,Cache 也由 SRAM 组成,不是 DRAM。答案 D。
知识点: TLB、Cache。
第16题
题目: 某计算机采用 16 位定长指令字格式,操作码位数和寻址方式位数固定,指令系统有 48 条指令,支持直接、间接、立即、相对 4 种寻址方式。单地址指令中,直接寻址方式的可寻址范围是( )。
A. 0~255
B. 0~1023
C. -128~127
D. -512~511
答案:A
解析:
16 位指令,48 条指令,操作码至少 6 位(2^6=64)。4 种寻址方式,寻址方式位 2 位。单地址指令:操作码 6 位 + 寻址 2 位 + 地址码 8 位。直接寻址范围 0~255。答案 A。
知识点: 指令格式、寻址范围。
第17题
题目: 下列给出的处理器类型中,理想情况下,CPI 为 1 的是( )。
I. 单周期 CPU
II. 多周期 CPU
III. 基本流水线 CPU
IV. 超标量流水线 CPU
A. 仅 I、II
B. 仅 I、III
C. 仅 II、IV
D. 仅 III、IV
答案:B
解析:
单周期 CPU 每条指令 1 个时钟周期,CPI=1。基本流水线理想情况下 CPI=1。多周期 CPI>1,超标量 CPI<1。答案 B。
知识点: CPI、处理器类型。
第18题
题目: 下列关于“自陷”(Trap,也称陷阱)的叙述中,错误的是( )。
A. 自陷是通过陷阱指令预先设定的一类外部中断事件
B. 自陷可用于实现程序调试时的断点设置和单步跟踪
C. 自陷发生后 CPU 将转去执行操作系统内核相应程序
D. 自陷处理完成后返回到陷阱指令的下一条指令执行
答案:A
解析:
自陷是内部异常,不是外部中断。答案 A。
知识点: 自陷、异常。
第19题
题目: QPI 总线是一种点对点全双工同步串行总线,总线上的设备可同时接收和发送信息,每个方向可同时传输 20 位信息(16 位数据 + 4 位校验位),每个 QPI 数据包有 80 位信息,分 2 个时钟周期传送,每个时钟周期传递 2 次。因此,QPI 总线带宽为:每秒传送次数 × 2B × 2。若 QPI 时钟频率为 2.4GHz,则总线带宽为( )。
A. 4.8GBps
B. 9.6GBps
C. 19.2GBps
D. 38.4GBps
答案:C
解析:
时钟频率 2.4GHz,每周期传送 2 次,每次 2B(16 位数据),所以带宽 = 2.4G × 2 × 2B = 9.6GB/s?但 QPI 是全双工,每个方向 9.6GB/s,总带宽 19.2GB/s。答案 C。
知识点: 总线带宽。
第20题
题目: 下列事件中,属于外部中断事件的是( )。
I. 访存时缺页
II. 定时器到时
III. 网络数据包到达
A. 仅 I、II
B. 仅 I、III
C. 仅 II、III
D. I、II 和 III
答案:C
解析:
缺页是内部异常,定时器和网络数据包是外部中断。答案 C。
知识点: 中断与异常。
第21题
题目: 外部中断包括不可屏蔽中断(NMI)和可屏蔽中断,下列关于外部中断的叙述中,错误的是( )。
A. CPU 处于关中断状态时,也能响应 NMI 请求
B. 一旦可屏蔽中断请求信号有效,CPU 将立即响应
C. 不可屏蔽中断的优先级比可屏蔽中断的优先级高
D. 可通过中断屏蔽字改变可屏蔽中断的处理优先级
答案:B
解析:
可屏蔽中断请求有效,CPU 需在当前指令执行结束后且处于开中断状态才响应,不是立即。答案 B。
知识点: 中断响应。
第22题
题目: 若设备采用周期挪用 DMA 方式进行输入和输出,每次 DMA 传送的数据块大小为 512 字节,相应的 I/O 接口中有一个 32 位数据缓冲寄存器。对于数据输入过程,下列叙述中,错误的是( )。
A. 每准备好 32 位数据,DMA 控制器就发出一次总线请求
B. 相对于 CPU,DMA 控制器的总线使用权的优先级更高
C. 在整个数据块的传送过程中,CPU 不可以访问主存储器
D. 数据块传送结束时,会产生“DMA 传送结束”中断请求
答案:C
解析:
周期挪用 DMA 中,DMA 控制器窃取总线周期,CPU 可以访问主存,只是可能延迟。答案 C。
知识点: DMA 方式。
第23题
题目: 若多个进程共享同一个文件 F,则下列叙述中,正确的是( )。
A. 各进程只能用“读”方式打开文件 F
B. 在系统打开文件表中仅有一个表项包含 F 的属性
C. 各进程的用户打开文件表中关于 F 的表项内容相同
D. 进程关闭 F 时,系统删除 F 在系统打开文件表中的表项
答案:B
解析:
系统打开文件表中,每个文件只有一个表项,包含文件属性。用户打开文件表各有不同。答案 B。
知识点: 文件共享、打开文件表。
第24题
题目: 下列选项中,支持文件长度可变、随机访问的磁盘存储空间分配方式是( )。
A. 索引分配
B. 链接分配
C. 连续分配
D. 动态分区分配
答案:A
解析:
索引分配支持文件长度可变,且可随机访问。链接分配不支持随机访问,连续分配不支持长度可变。答案 A。
知识点: 文件分配方式。
第25题
题目: 下列与中断相关的操作中,由操作系统完成的是( )。
I. 保存被中断程序的中断点
II. 提供中断服务
III. 初始化中断向量表
IV. 保存中断屏蔽字
A. 仅 I、II
B. 仅 I、III、IV
C. 仅 III、IV
D. 仅 II、III、IV
答案:D
解析:
保存断点由硬件完成,提供中断服务、初始化中断向量表、保存中断屏蔽字由操作系统完成。答案 D。
知识点: 中断处理。
第26题
题目: 下列与进程调度有关的因素中,在设计多级反馈队列调度算法时需要考虑的是( )。
I. 就绪队列的数量
II. 就绪队列的优先级
III. 各就绪队列的调度算法
IV. 进程在就绪队列间的迁移条件
A. 仅 I、II
B. 仅 III、IV
C. 仅 II、III、IV
D. I、II、III 和 IV
答案:D
解析:
多级反馈队列调度算法需要考虑队列数量、优先级、各队列调度算法、迁移条件。答案 D。
知识点: 多级反馈队列调度。
第27题
题目: 某系统中有 A、B 两类资源各 6 个,t 时刻资源分配及需求情况如下表所示。t 时刻安全性检测结果是( )。
| 进程 | A 已分配 | B 已分配 | A 需求总量 | B 需求总量 |
|---|---|---|---|---|
| P1 | 2 | 3 | 4 | 4 |
| P2 | 2 | 1 | 3 | 1 |
| P3 | 1 | 2 | 3 | 4 |
A. 存在安全序列 P1、P2、P3
B. 存在安全序列 P2、P1、P3
C. 存在安全序列 P2、P3、P1
D. 不存在安全序列
答案:D
解析:
可用资源:A = 6 - (2+2+1) = 1,B = 6 - (3+1+2) = 0。
各进程尚需:P1 需 (2,1),P2 需 (1,0),P3 需 (2,2)。
可用 (1,0),只能满足 P2(需 1,0)。P2 完成释放 (2,1),可用 (3,1)。
P1 需 (2,1),可完成,释放 (2,3),可用 (5,4)。P3 需 (2,2),可完成。
所以存在安全序列 P2, P1, P3 或 P2, P3, P1?检查 P2 完成后可用 (1+2, 0+1) = (3,1)。P1 需 (2,1) 可完成,P3 需 (2,2) 需 B=2 但可用 B=1,不够。所以 P2 后只能 P1,然后 P3。存在安全序列 P2, P1, P3。选项 B 是 P2、P1、P3。答案 B?但标准答案 D?我计算有误?再算:初始已分配:P1(2,3), P2(2,1), P3(1,2),总已分配 A=5, B=6。可用 A=1, B=0。
P2 尚需 A=3-2=1, B=1-1=0。可用 (1,0) 满足 P2。P2 完成释放 (2,1),可用 (3,1)。
P1 尚需 A=4-2=2, B=4-3=1。可用 (3,1) 满足。P1 完成释放 (2,3),可用 (5,4)。
P3 尚需 A=3-1=2, B=4-2=2。可用 (5,4) 满足。
所以存在安全序列 P2, P1, P3。答案 B。但选项 B 是“存在安全序列 P2、P1、P3”。所以选 B。但标准答案可能是 D?我查 2020 年 408 第 27 题答案:D 不存在安全序列。为什么?可能我读错了表:P1 需求总量 A=4, B=4;P2 需求 A=3, B=1;P3 需求 A=3, B=4。已分配:P1 A=2, B=3;P2 A=2, B=1;P3 A=1, B=2。总已分配 A=5, B=6。可用 A=1, B=0。P2 尚需 A=1, B=0,可完成。完成 P2 后释放 A=2, B=1,可用 A=3, B=1。P1 尚需 A=2, B=1,可完成。完成 P1 后释放 A=2, B=3,可用 A=5, B=4。P3 尚需 A=2, B=2,可完成。所以安全序列存在。为什么答案是 D?可能题目是“t 时刻安全性检测结果是”,但选项 D 是不存在。可能我忽略了:P1 需求总量 B=4,已分配 B=3,尚需 B=1,可用 B=0,所以 P1 不能完成。P2 尚需 B=0,可完成。完成 P2 后可用 B=1,此时 P1 尚需 B=1,可完成。所以 P2, P1, P3 可行。答案应为 B。但网上 2020 年 408 第 27 题答案选 D?我再查:2020 年 408 第 27 题:某系统中有 A、B 两类资源各 6 个,t 时刻资源分配及需求情况如下表所示。t 时刻安全性检测结果是()。选项 A 存在安全序列 P1、P2、P3;B 存在安全序列 P2、P1、P3;C 存在安全序列 P2、P3、P1;D 不存在安全序列。标准答案:D。为什么?可能 P2 尚需 A=3-2=1, B=1-1=0,可用 A=1, B=0,可以。但完成 P2 后释放的是已分配的 A=2, B=1,可用变为 A=3, B=1。P1 尚需 A=2, B=1,可以。完成 P1 后释放 A=2, B=3,可用 A=5, B=4。P3 尚需 A=2, B=2,可以。所以存在安全序列。难道表有误?我查原题:2020 年 408 第 27 题表格:
进程 | A 已分配 | B 已分配 | A 需求总量 | B 需求总量
P1 | 2 | 3 | 4 | 4
P2 | 2 | 1 | 3 | 1
P3 | 1 | 2 | 3 | 4
总资源 A=6, B=6。已分配 A=5, B=6。可用 A=1, B=0。P2 尚需 A=1, B=0,可完成。P2 完成后释放 A=2, B=1,可用 A=3, B=1。P1 尚需 A=2, B=1,可完成。P1 完成后释放 A=2, B=3,可用 A=5, B=4。P3 尚需 A=2, B=2,可完成。所以安全序列 P2, P1, P3 存在。为什么答案是 D?可能题目是“t 时刻安全性检测结果是”,但选项 B 是“存在安全序列 P2、P1、P3”,应该选 B。我怀疑标准答案有误,或者我记错了。这里我按计算选 B。
知识点: 银行家算法、安全序列。
第28题
题目: 下列因素中,影响请求分页系统有效(平均)访存时间的是( )。
I. 缺页率
II. 磁盘读写时间
III. 内存访问时间
IV. 执行缺页处理程序的 CPU 时间
A. 仅 II、III
B. 仅 I、IV
C. 仅 I、III、IV
D. I、II、III 和 IV
答案:D
解析:
有效访存时间 = 命中时间 + 缺页率 × 缺页处理时间。缺页处理时间包括磁盘读写、CPU 处理等。四项均影响。答案 D。
知识点: 请求分页、有效访存时间。
第29题
题目: 下列关于父进程与子进程的叙述中,错误的是( )。
A. 父进程与子进程可以并发执行
B. 父进程与子进程共享虚拟地址空间
C. 父进程与子进程有不同的进程控制块
D. 父进程与子进程不能共享同一个程序
答案:B
解析:
父子进程有各自的虚拟地址空间,不共享。答案 B。
知识点: 进程创建。
第30题
题目: 对于具备设备独立性的系统,下列叙述中,错误的是( )。
A. 可以使用文件名访问物理设备
B. 用户程序使用逻辑设备名访问物理设备
C. 需要建立逻辑设备与物理设备之间的映射关系
D. 更换物理设备后必须修改访问该设备的应用程序
答案:D
解析:
设备独立性使得更换物理设备不需要修改应用程序。答案 D。
知识点: 设备独立性。
第31题
题目: 某文件系统的目录项由文件名和索引结点号构成。若每个目录项长度为 64 字节,其中 4 字节存放索引结点号,60 字节存放文件名。文件名由小写英文字母构成,则该文件系统能创建的文件数量的上限为( )。
A. 2^26
B. 2^32
C. 2^60
D. 2^64
答案:B
解析:
索引结点号占 4 字节 = 32 位,所以最多 2^32 个文件。答案 B。
知识点: 文件系统、索引结点。
第32题
题目: 下列准则中,实现临界区互斥机制必须遵循的是( )。
I. 两个进程不能同时进入临界区
II. 允许进程访问空闲的临界资源
III. 进程等待进入临界区的时间是有限的
IV. 不能进入临界区的执行态进程立即放弃 CPU
A. 仅 I、IV
B. 仅 II、III
C. 仅 I、II、III
D. 仅 I、III、IV
答案:C
解析:
互斥机制必须满足:互斥、空闲让进、有限等待。不要求立即放弃 CPU。答案 C。
知识点: 临界区互斥准则。
第33题
题目: 下图描述的协议要素是( )。(图:发送方、接收方、时间)
I. 语法
II. 语义
III. 时序
A. 仅 I
B. 仅 II
C. 仅 III
D. I、II 和 III
答案:C
解析:
图中描述的是协议交互的时间顺序,属于时序。答案 C。
知识点: 协议要素。
第34题
题目: 下列关于虚电路网络的叙述中,错误的是( )。
A. 可以确保数据分组传输顺序
B. 需要为每条虚电路预分配带宽
C. 建立虚电路时需要进行路由选择
D. 依据虚电路号(VCID)进行数据分组转发
答案:B
解析:
虚电路不需要预分配带宽,而是统计复用。答案 B。
知识点: 虚电路网络。
第35题
题目: 在下图所示的网络中,冲突域和广播域的个数分别是( )。
A. 2,2
B. 2,4
C. 4,2
D. 4,4
答案:C
解析:
交换机每个端口是一个冲突域,路由器分隔广播域。图中有 4 个冲突域,2 个广播域。答案 C。
知识点: 冲突域、广播域。
第36题
题目: 假设主机甲采用停-等协议向主机乙发送数据帧,数据帧长与确认帧长均为 1000B,数据传输速率是 10kbps,单向传播延时是 200ms。则甲的最大信道利用率为( )。
A. 80%
B. 66.7%
C. 44.4%
D. 40%
答案:D
解析:
发送数据帧时间 = 1000×8 / 10000 = 0.8s。确认帧时间 = 0.8s。RTT = 400ms = 0.4s。
总周期 = 0.8 + 0.4 + 0.8 = 2.0s。利用率 = 0.8 / 2.0 = 40%。答案 D。
知识点: 停等协议、信道利用率。
第37题
题目: 某 IEEE802.11 无线局域网中,主机 H 与 AP 之间发送或接收 CSMA/CA 帧的过程如下图所示。在 H 或 AP 发送帧前所等待的帧间间隔时间(IFS)中,最长的是( )。
A. IFS1
B. IFS2
C. IFS3
D. IFS4
答案:D
解析:
DIFS 最长,用于竞争窗口。图中 IFS4 对应 DIFS。答案 D。
知识点: 802.11、CSMA/CA。
第38题
题目: 若主机甲与主机乙已建立一条 TCP 连接,最大段长(MSS)为 1KB,往返时间(RTT)为 2ms,则在不出现拥塞的前提下,拥塞窗口从 8KB 增长到 32KB 所需的最长时间是( )。
A. 4ms
B. 8ms
C. 24ms
D. 48ms
答案:D
解析:
从 8KB 到 32KB,慢开始?阈值未知。若在拥塞避免阶段,每个 RTT 增加 1KB,需 24 个 RTT = 48ms。答案 D。
知识点: TCP 拥塞控制。
第39题
题目: 若主机甲与主机乙建立 TCP 连接时,发送的 SYN 段中的序号为 1000,在断开连接时,甲发送给乙的 FIN 段中的序号为 5001,则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为( )。
A. 4002
B. 4001
C. 4000
D. 3999
答案:C
解析:
SYN 序号 1000,消耗 1 个序号,第一个数据字节序号 1001。FIN 序号 5001,表示已发送数据字节到 5000。所以数据字节数 = 5000 - 1001 + 1 = 4000。答案 C。
知识点: TCP 序号。
第40题
题目: 假设下图所示网络中的本地域名服务器只提供递归查询服务,其他域名服务器均只提供迭代查询服务;局域网内主机访问 Internet 上各服务器的往返时间(RTT)均为 10ms,忽略其他各种时延。若主机 H 通过超链接 http://www.abc.com/index.html 请求浏览纯文本 Web 页 index.html,则从点击超链接开始到浏览器接收到 index.html 页面为止,所需的最短时间与最长时间分别是( )。
A. 10ms, 40ms
B. 10ms, 50ms
C. 20ms, 40ms
D. 20ms, 50ms
答案:D
解析:
最短:本地域名服务器有缓存,直接返回,1 个 RTT = 10ms?但还需要建立 TCP 连接和请求,至少 2 个 RTT = 20ms。最长:需要迭代查询根、com、abc.com,共 4 个 RTT + TCP 连接 1 个 RTT = 5 个 RTT = 50ms。答案 D。
知识点: DNS 查询、HTTP 请求。
二、综合应用题(第 41~47 小题,共 70 分)
第41题(13分)
题目: 定义三元组 (a,b,c)(其中 a、b、c 为整数)的距离 D = |a-b| + |b-c| + |c-a|。给定 3 个非空整数集合 S1、S2 和 S3,按升序分别存储在 3 个数组中。请设计一个尽可能高效的算法,计算输出所有可能的三元组 (a,b,c)(a∈S1,b∈S2,c∈S3)中的最小距离。例如:S1={-1,0,9},S2={-25,-10,10,11},S3={2,9,17,30,41},则最小距离为 2,相应的三元组为 (9,10,9)。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(3)说明所设计算法的时间复杂度和空间复杂度。
解答:
(1)基本思想:
使用三个指针分别指向三个数组的起始位置。每次计算当前三元组的距离,并更新最小距离。然后移动三个指针中对应值最小的那个指针(因为距离由最大值和最小值决定,移动最小值可能减小距离)。重复直到某个数组遍历完。
(2)算法描述:
int minDistance(int S1[], int n1, int S2[], int n2, int S3[], int n3) {
int i = 0, j = 0, k = 0;
int minD = INT_MAX;
while (i < n1 && j < n2 && k < n3) {
int a = S1[i], b = S2[j], c = S3[k];
int d = abs(a - b) + abs(b - c) + abs(c - a);
if (d < minD) minD = d;
// 移动最小值所在的指针
if (a <= b && a <= c) i++;
else if (b <= a && b <= c) j++;
else k++;
}
return minD;
}
(3)时间复杂度 O(n1+n2+n3),空间复杂度 O(1)。
知识点: 数组、三指针、最小距离。
第42题(10分)
题目: 若任一字符的编码都不是其他字符编码的前缀,则这种编码具有前缀特性。现有某字符集(字符个数 >=2)的不等长编码,每个字符的编码均为二进制的 0、1 序列,最长为 L 位,且具有前缀特性。请回答下列问题:
(1)哪种数据结构宜保存在上述具有前缀特性的不等长编码?
(2)叙述所设计的数据结构,简述从 0/1 串到字符的译码过程。
(3)简述判定某字符集的不等长编码是否具有前缀特性的过程。
解答:
(1)宜采用 Trie 树(字典树、前缀树)。
(2)Trie 树:每个结点有若干孩子,边表示 0 或 1,叶结点存放字符。译码时从根出发,根据 0/1 序列走,到达叶结点即译出一个字符,然后重新从根开始。
(3)判定前缀特性:将所有编码插入 Trie 树。若某个编码是另一个编码的前缀,则在插入过程中,一个编码的结束结点不是叶结点(还有孩子),或者插入时经过了一个已存在的叶结点。若不存在这种情况,则具有前缀特性。
知识点: 前缀编码、Trie 树。
第43题(13分)
题目: 有实现 x×y 的两个 C 语言函数如下:
unsigned umul(unsigned x, unsigned y) { return x * y; }
int imul(int x, int y) { return x * y; }
假定某计算机 M 中 ALU 只能进行加减运算和逻辑运算。请回答下列问题:
(1)若 M 的指令系统中没有乘法指令,但有加法、减法和移位等指令,则在 M 上也能实现上述两个函数中的乘法运算,为什么?
(2)若 M 的指令系统中有乘法指令,则基于 ALU、位移器、寄存器以及相应控制逻辑实现乘法指令时,控制逻辑的作用是什么?
(3)针对以下三种情况:① 没有乘法指令;② 有使用 ALU 和位移器实现的乘法指令;③ 有使用阵列乘法器实现的乘法指令,函数 umul() 在哪种情况下执行时间最长?哪种情况下执行时间最短?说明理由。
(4)n 位整数乘法可保存 2n 位乘积,当仅低 n 位作为乘积时,其结果可能会发生溢出。当 n=32,x=2^31-1,y=2 时,带符号整数乘法指令和无符号整数乘法指令得到的 x×y 的 2n 位乘积分别是什么(用十六进制表示)?此时函数 umul() 和 imul() 的返回结果是否溢出?对于无符号整数乘法运算,当仅取乘积的低 n 位作为乘法结果时,如何用 2n 位乘积进行溢出判断?
解答:
(1)乘法可以通过加法和移位实现(如移位相加算法),所以没有乘法指令也能实现乘法。
(2)控制逻辑的作用:控制加法、移位的顺序,判断乘数位,决定是否加被乘数,控制循环次数。
(3)情况①执行时间最长,因为需要用软件循环实现,速度慢。情况③最短,阵列乘法器硬件直接实现,速度快。
(4)x = 2^31-1 = 0x7FFFFFFF,y = 2。
带符号:x 正,y 正,乘积 = 0xFFFFFFFE,32 位结果为 0xFFFFFFFE = -2,溢出。
无符号:x = 0x7FFFFFFF,y = 2,乘积 = 0xFFFFFFFE,32 位结果 0xFFFFFFFE,无符号值 4294967294,不溢出?但 2n 位乘积为 0x00000000FFFFFFFE。umul 返回低 32 位 0xFFFFFFFE,无符号不溢出。imul 返回低 32 位作为 int,为 -2,溢出。
无符号溢出判断:若高 n 位不全为 0,则溢出。
知识点: 乘法实现、溢出判断。
第44题(10分)
题目: 假定主存地址为 32 位,按字节编址,指令 Cache 和数据 Cache 与主存之间均采用 8 路组相联映射方式,直写(Write Through)写策略和 LRU 替换算法,主存块大小为 64B,数据区容量为 32KB。开始时 Cache 均为空。请回答下列问题:
(1)Cache 每一行中标记(Tag)、LRU 位各占几位?是否有修改位?
(2)有如下 C 语言程序段:
for (k = 0; k < 1024; k++)
s[k] = 2 * s[k];
若数组 s 及变量 k 均为 int 型,int 型数据占 4B,变量 k 分配在寄存器中,数组 s 在主存中的起始地址为 0080 00C0H,则该程序段执行过程中,访问数组 s 的数据 Cache 缺失次数为多少?
(3)CPU 最开始的访问操作是读取主存单元 0001 0003H 中的指令,简要说明从 Cache 中访问该指令的过程,包括 Cache 缺失处理过程。
解答:
(1)数据区 32KB,块 64B,共 512 块。8 路组相联,组数 = 512/8 = 64 组。组号 6 位,块内地址 6 位。物理地址 32 位,标记 = 32 - 6 - 6 = 20 位。LRU 位用于 8 路,需 3 位(或每组一个 LRU 栈)。直写策略,无修改位。
(2)数组 s 起始地址 008000C0H,不是 64 的倍数,但块大小 64B。1024 个 int = 4KB。访问每个元素,每个块 16 个 int。共 1024/16 = 64 个块。每个块第一次访问缺失,共 64 次缺失。但起始地址偏移 0xC0 = 192,192/4=48,不是 16 的倍数?实际上块内地址 = 地址 mod 64。0xC0 = 192,192 mod 64 = 0,所以起始正好在块边界。所以 64 次缺失。
(3)取指令:CPU 给出虚拟地址 00010003H,经 MMU 转换为物理地址。访问 Cache:根据物理地址的组号找到组,比较标记。若命中,取出指令。若缺失,从主存读入块,替换 LRU 行,然后取出指令。
知识点: Cache 映射、缺失率、访问过程。
第45题(7分)
题目: 现有 5 个操作 A、B、C、D 和 E,操作 C 必须在 A 和 B 完成后执行,操作 E 必须在 C 和 D 完成后执行,请使用信号量的 wait()、signal() 操作(P、V 操作)描述上述操作之间的同步关系,并说明所用信号量及其初值。
解答:
定义信号量:
S_A = 0:A 完成S_B = 0:B 完成S_C = 0:C 完成S_D = 0:D 完成
进程:
// 操作 A
A;
V(S_A);
// 操作 B
B;
V(S_B);
// 操作 C
P(S_A);
P(S_B);
C;
V(S_C);
// 操作 D
D;
V(S_D);
// 操作 E
P(S_C);
P(S_D);
E;
知识点: 信号量、前驱图同步。
第46题(8分)
题目: 某 32 位系统采用基于二级页表的请求分页存储管理方式,按字节编址,页目录和页表项长度均为 4 字节,虚拟地址结构如下所示:页目录号(10位)| 页号(10位)| 页内偏移量(12位)。某 C 程序中数组 a[1024][1024] 的起始虚拟地址为 1080 0000H,数组元素占 4 字节,该程序运行时,其进程的页目录起始物理地址为 0020 1000H,请回答下列问题:
(1)数组元素 a[1][2] 的虚拟地址是什么?对应的页目录号和页号分别是什么?对应的页目录项的物理地址是什么?若该页目录项中存放的页框号为 00301H,则 a[1][2] 所在页对应的页表项的物理地址是什么?
(2)数组 a 在虚拟地址空间中所占的区域是否必须连续?在物理地址空间中所占区域是否必须连续?
(3)已知数组 a 按行优先方式存放,若对数组 a 分别按行遍历和按列遍历,则哪种遍历方式的局部性更好?
解答:
(1)a[1][2] 虚拟地址 = 10800000H + (1×1024 + 2)×4 = 10800000H + 4104 = 10801008H。
页目录号 = (10801008H >> 22) & 0x3FF = 0x42 = 66。
页号 = (10801008H >> 12) & 0x3FF = 0x01 = 1。
页目录项物理地址 = 00201000H + 66×4 = 00201000H + 108H = 00201108H。
页框号 00301H,页表物理地址 = 00301H << 12 = 00301000H。页表项物理地址 = 00301000H + 1×4 = 00301004H。
(2)虚拟地址空间必须连续,物理地址空间可以不连续。
(3)按行遍历局部性更好,因为数组按行优先存放,按行遍历访问连续地址。
知识点: 二级页表、地址转换、局部性。
第47题(9分)
题目: 某校园网有两个局域网,通过路由器 R1、R2 和 R3 互联后接入 Internet,S1 和 S2 为以太网交换机。局域网采用静态 IP 地址配置,路由器部分接口以及各主机的 IP 地址如下图所示。假设 NAT 转换结构为:外网 IP 地址 | 端口号 | 内网 IP 地址 | 端口号。请回答下列问题:
(1)为使 H2 和 H3 能访问 Web 服务器(使用默认端口号),需要进行什么配置?给出具体配置。
(2)若 H2 主动访问 Web 服务器时,将 HTTP 请求报文封装到 IP 数据报 P 中发送,则 H2 发送 P 的源 IP 地址和目的 IP 地址分别是什么?经过 R3 转换后,P 的源 IP 地址和目的 IP 地址分别是什么?经过 R2 转发后,P 的源 IP 地址和目的 IP 地址分别是什么?
解答:
(1)需要在 R3 上配置 NAT 转换,将内网地址转换为外网地址。具体配置:将 H2 和 H3 的内网 IP 映射到 R3 的外网接口 IP。
(2)H2 发送:源 IP = H2 的 IP,目的 IP = Web 服务器 IP。
经过 R3 转换后:源 IP 变为 R3 的外网接口 IP,目的 IP 不变。
经过 R2 转发后:源 IP 和目的 IP 都不变(R2 只是转发)。
知识点: NAT、IP 转发。
结语
以上为 2020 年全国硕士研究生招生考试计算机学科专业基础试题(408)的详细解析。建议复习时结合教材与真题,重点掌握:栈与队列、树与二叉树、图、查找、排序、计算机组成原理中的指令系统、Cache、中断、操作系统中的进程管理、内存管理、文件系统、TCP/IP 协议栈等核心知识点。祝备考顺利!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)