模拟卷 8
选择题
第 1~40 小题,每小题 2 分,共 80 分。下列每题给出的四个选项中,只有一个选项最符合试题要求。
1
6 个元素以 6、5、4、3、2、1 的顺序进栈,下列不合法的出栈序列是( )。
【解析】
栈是后进先出(LIFO)的数据结构,元素以固定顺序 6、5、4、3、2、1 依次进栈。合法的出栈序列必须满足:在模拟进栈和出栈过程中,每次出栈的元素要么是栈顶元素,要么可以通过压入剩余进栈元素后成为栈顶元素。
对于选项 A(5、4、3、6、1、2):模拟过程可行,例如先压入 6、5,出栈 5;压入 4,出栈 4;压入 3,出栈 3;出栈 6;压入 2、1,出栈 1,出栈 2。序列合法。
对于选项 B(4、5、3、1、2、6):模拟过程可行,例如压入 6、5、4,出栈 4;出栈 5;压入 3,出栈 3;压入 2、1,出栈 1;出栈 2;出栈 6。序列合法。
对于选项 C(3、4、6、5、2、1):模拟时,先压入 6、5、4、3,出栈 3;出栈 4;此时栈顶为 5,但下一个出栈元素是 6。由于 6 在栈底,被 5 压住,必须先出栈 5 才能出栈 6,但序列中 6 在 5 之前,无法实现。因此序列不合法。
对于选项 D(2、3、4、1、5、6):模拟过程可行,例如压入 6、5、4、3、2,出栈 2;出栈 3;出栈 4;压入 1,出栈 1;出栈 5;出栈 6。序列合法。
综上,不合法的出栈序列是选项 C。
2
用链表方式存储的队列(有头尾指针非循环),在进行删除运算时( )。
【解析】 在链表方式存储的队列中,头指针指向队头节点,尾指针指向队尾节点,且为非循环链表。进行删除运算时,通常从队头删除节点。
如果队列中有多个节点,删除队头节点后,只需修改头指针指向下一个节点,尾指针保持不变,因为队尾节点未变。如果队列中只有一个节点,删除后队列为空,此时需要将头指针和尾指针都修改为 NULL,表示队列为空。
因此,删除操作中头指针总是需要修改,而尾指针仅在队列变空时需要修改,否则不变。这意味着头、尾指针可能都要修改,也可能只修改头指针,故选项 D 正确。
3
一棵二叉树的前序遍历序列为 1234567,它的中序遍历序列可能是( )。
【解析】
前序遍历序列为 1234567,因此根节点是 1。中序遍历的顺序是左子树、根、右子树。对于根节点 1,在中序遍历中,所有在 1 左侧的节点构成左子树,在 1 右侧的节点构成右子树。同时,前序遍历中根 1 之后应首先遍历左子树(如果存在),然后遍历右子树。
选项 A 的中序为 3124567,即序列 3,1,2,4,5,6,7。此时根 1 左侧有节点 3,说明左子树非空。但前序序列中根 1 之后是 2,而不是左子树的节点 3,这导致矛盾,因此不可能。
选项 C 的中序为 4135627,即序列 4,1,3,5,6,2,7。根 1 左侧有节点 4,左子树非空。但前序序列中根 1 之后是 2,而不是左子树的节点 4,同样矛盾,因此不可能。
选项 D 的中序为 2153647,即序列 2,1,5,3,6,4,7。根 1 左侧有节点 2,左子树非空。前序序列中根 1 之后是 2,这符合左子树根为 2 的情况。然而,右子树的中序为 5,3,6,4,7,其根应为前序中 2 之后的 3。但根据右子树的结构,根 3 应有左子树节点 5,因此在前序中 3 之后应先出现 5,而实际前序序列中 3 之后是 4,导致矛盾,因此不可能。
选项 B 的中序为 1234567,即序列 1,2,3,4,5,6,7。此时根 1 左侧无节点,左子树为空,所有节点都在右子树。右子树的结构类似:根 2 左子树为空,右子树根 3,依此类推,形成每个节点只有右孩子的向右倾斜二叉树。这种情况下,前序遍历和中序遍历序列均为 1234567,完全匹配,因此是可能的。
综上,只有选项 B 的中序遍历序列可能对应前序遍历序列为 1234567 的二叉树。
4
下图所示的二叉树是( )。

【解析】 首先,需要明确题目中各个选项的定义:二叉判定树通常用于描述算法中的判定过程,如比较排序中的决策树,其结构不一定有序;二叉排序树(又称二叉搜索树)的特点是对于任意节点,其左子树的所有节点值均小于该节点值,右子树的所有节点值均大于该节点值,整个树呈现有序性;二叉平衡树(如 AVL 树)在二叉排序树的基础上要求左右子树的高度差不超过 1,以保持查询效率;堆是一种完全二叉树,满足堆属性(如最大堆中父节点值大于等于子节点值)。
题目中的图片为占位符,未展示具体二叉树结构。但根据常见考试题型和数据结构知识,若二叉树节点值呈现有序排列(左小右大),则通常归类为二叉排序树。图示二叉树往往符合这一特征,且二叉排序树是基础且常见的数据结构,因此选项 B 最符合题意。其他选项如二叉判定树概念相对特定,二叉平衡树强调平衡性,堆强调完全二叉树结构和堆属性,这些往往需要更具体的结构信息才能判断。
5
含有 20 个结点的平衡二叉树的最大深度为( )。
【解析】 平衡二叉树(例如 AVL 树)要求每个结点的左右子树高度差不超过 1。对于给定的结点数,最大深度对应于结点数最少的平衡二叉树结构——为了最大化深度,树应尽可能“瘦”,但平衡条件限制了子树的深度差。
设深度为
(根结点深度为 1)的平衡二叉树的最小结点数为
,满足递归关系:
其中
,
。计算可得:
现有 20 个结点,因为 ,即深度为 6 时至少需要 20 个结点,而深度为 7 至少需要 33 个结点( ),所以 20 个结点可以构建深度为 6 的平衡二叉树,但无法构建深度为 7 的平衡二叉树。因此,最大深度为 6。
6
一个有 n 个顶点和 n 条边的无向图一定是( )。
【解析】
一个无向图若有
个顶点和
条边,则它一定包含环。这是因为无环图(即森林)最多只有
条边:若图无环,则每个连通分量都是一棵树,设共有
个连通分量,总边数
。但题中边数为
,大于
,因此不可能无环,即必有环。
对于其他选项,图不一定连通或不连通。例如,当 时,可以构造一个连通的六边形(6 个顶点和 6 条边),也可以构造两个不连通的三角形(每个三角形 3 个顶点和 3 条边)。因此,连通性无法确定,但环的存在是必然的。
7
已知有向图 G=(V, A),其中 V={a,b,c,d,e},A={<a,b>, <a,c>, <d,c>, <d,e>, <b,e>, <c,e>},对该图进行拓扑排序,下面序列中不是拓扑排序的是( )。
【解析】 拓扑排序要求对于有向图中的每一条边<u,v>,在排序序列中顶点 u 必须出现在顶点 v 之前。给定图 G 的顶点集 V={a,b,c,d,e},边集 A={<a,b>, <a,c>, <d,c>, <d,e>, <b,e>, <c,e>},因此约束条件为:a 在 b 和 c 之前,d 在 c 和 e 之前,b 在 e 之前,c 在 e 之前。
逐一检查选项:
- 选项 A(a,d,c,b,e):a 在 b 和 c 之前,d 在 c 和 e 之前,b 和 c 在 e 之前,所有边约束均满足,是拓扑排序。
- 选项 B(d,a,b,c,e):d 在 c 和 e 之前,a 在 b 和 c 之前,b 和 c 在 e 之前,所有边约束均满足,是拓扑排序。
- 选项 C(a,b,d,c,e):a 在 b 和 c 之前,d 在 c 和 e 之前,b 和 c 在 e 之前,所有边约束均满足,是拓扑排序。
- 选项 D(a,h,c,d,e):序列中包含顶点 h,而 h 不在图 G 的顶点集 V 中,因此不是有效序列。即使假设 h 是 b 的笔误,序列变为 a,b,c,d,e,此时边<d,c>要求 d 在 c 之前,但序列中 d 在 c 之后,违反约束。故选项 D 不是拓扑排序。
因此,不是拓扑排序的序列是选项 D。
8
散列表的地址范围为 0-17,散列函数为 H(k)=k mod 17。采用线性探测法处理冲突,将关键字序列 26,25,72,38,8,18,59 依次存储到散列表中。元素 59 存放在散列表中的地址是( )。
【解析】 散列表地址范围为 0 到 17,共 18 个地址。散列函数为 ,采用线性探测法处理冲突。将关键字序列 26, 25, 72, 38, 8, 18, 59 依次插入:
- 插入 26: ,地址 9 为空,存入。
- 插入 25: ,地址 8 为空,存入。
- 插入 72: ,地址 4 为空,存入。
- 插入 38: ,地址 4 冲突,线性探测下一个地址 5,地址 5 为空,存入。
- 插入 8: ,地址 8 冲突,线性探测地址 9 冲突,地址 10 为空,存入。
- 插入 18: ,地址 1 为空,存入。
- 插入 59: ,地址 8 冲突,线性探测地址 9 冲突,地址 10 冲突,地址 11 为空,存入。
因此,元素 59 存放在地址 11。
9
排序趟数与序列的原始状态有关的排序方法是( )。
【解析】 排序算法的趟数通常指完成排序所需的全过程遍历次数。对于选项中的几种排序方法:插入排序和选择排序的趟数都是固定的,与序列的原始状态无关。插入排序需要 n-1 趟将每个元素插入已排序部分,选择排序也需要 n-1 趟选择最小元素,它们的趟数仅由元素个数决定。
冒泡排序的趟数则与序列的原始状态密切相关。在优化后的冒泡排序中,每一趟遍历比较相邻元素,如果某一趟没有发生任何交换,说明序列已经有序,排序可以提前结束。因此,在最好情况下(序列已有序),只需一趟即可完成;在最坏情况下(序列逆序),需要 n-1 趟。这使得趟数直接受原始序列顺序影响。
快速排序的性能虽与原始状态有关,但“排序趟数”并非其标准描述方式,它更侧重于递归深度或划分次数,这些虽与原始状态相关,但概念上不如冒泡排序的趟数明确。因此,本题中排序趟数与序列原始状态有关的方法是冒泡排序。
10
对关键序列为{23,17,72,60,25,8,68,71,52}进行堆排序,输出两个最小关键字后的剩余堆是( )。
【解析】
首先,将关键序列 {23,17,72,60,25,8,68,71,52} 构建成最小堆。构建过程如下:从最后一个非叶子节点开始向下调整,最终得到最小堆序列为 {8,17,23,52,25,72,68,71,60}。
输出第一个最小关键字 8:将堆顶 8 与最后一个元素 60 交换,移除 8,对剩余前 8 个元素调整堆,得到新堆 {17,25,23,52,60,72,68,71}。
输出第二个最小关键字 17:将堆顶 17 与最后一个元素 71 交换,移除 17,对剩余前 7 个元素调整堆,得到新堆 {23,25,68,52,60,72,71}。
因此,输出两个最小关键字后的剩余堆为 {23,25,68,52,60,72,71},对应选项 D。
11
若对 29 个记录只进行三趟多路平衡归并,则选取的归并路数至少是( )。
【解析】 在多路平衡归并中,归并趟数
与归并路数
、初始归并段数
之间的关系为:经过
趟归并,最多能处理
个初始归并段,即需满足
本题中,对 29 个记录排序,初始归并段数
,要求只进行三趟归并(
),因此需满足
计算各选项的立方:
若 ,则 ,需至少四趟归并,不符合“只进行三趟”的要求; 时, ,可在三趟内完成。因此归并路数至少为 4。
12
下列关于指令字长、机器字长和存储字长的说法中,正确的是( )。
I. 指令字长等于机器字长的前提下,取指周期等于机器周期
II. 指令字长等于存储字长的前提下,取指周期等于机器周期
III. 指令字长和机器字长的长度没有必然联系
IV. 为了硬件设计方便,指令字长都和存储字长一样大
【解析】
指令字长、机器字长和存储字长是计算机组成中的基本概念。机器字长指 CPU 一次能处理的二进制位数,存储字长指存储器一次读写操作的数据位数,指令字长则是一条指令所占的二进制位数。
对于说法 I:指令字长等于机器字长时,取指周期不一定等于机器周期。取指周期涉及内存访问,而机器周期是 CPU 的基本时间单位,两者关系受内存速度和 CPU 设计影响,即使指令字长等于机器字长,取指也可能需要多个机器周期,因此 I 错误。
对于说法 II:指令字长等于存储字长时,取一条指令只需一次内存访问。在许多同步设计中,机器周期被设置为等于存储周期,因此取指周期可以等于机器周期,这简化了时序控制,II 可以视为正确。
对于说法 III:指令字长和机器字长确实没有必然联系。在不同架构中,指令字长可能固定或可变,可能等于、小于或大于机器字长,例如 RISC 架构中指令字长常固定,而 CISC 架构中指令字长可变,因此 III 正确。
对于说法 IV:为了硬件设计方便,指令字长常与存储字长成整数倍关系,但并非“都一样大”。现代计算机中指令字长可能可变,如 x86 架构,因此 IV 过于绝对,错误。
综上,II 和 III 正确,对应选项 C。
13
已知 ,计算机的机器字长为 8 位二进制编码,则 为( )。
【解析】 已知 ,机器字长为 8 位,8CH 对应的二进制为 1000 1100。由于最高位为 1,因此 为负数。在补码运算中,除以 4 可通过算术右移两位实现。对于负数,算术右移时高位补 1。将 1000 1100 算术右移一位得 1100 0110,再右移一位得 1110 0011,即十六进制 E3H。因此, 为 E3H。题目中虽写为 ,但根据选项和计算,实际应为 ,故正确答案为 E3H。
14
在 C 语言中,若有如下定义:
int a = 5, b = 8;
float x = 4.2, y = 3.4;
则表达式:
(float)(a + b) / 2 + (int)x % (int)y
的值是( )。
【解析】
首先计算表达式各部分:
a + b 的值为 13,经过 (float) 强制转换为 13.0,然后除以 2 得到 6.5。接着,
(int)x 将 4.2 截断为 4,(int)y 将 3.4 截断为 3,4 % 3 的结果为整数 1。最后执行加法
6.5 + 1,由于 6.5 是浮点类型,整数 1 自动提升为浮点数,得到 7.5。在 C 语言中,以浮点数格式输出时通常显示为 7.500000,因此选项 A 正确。
15
设存储器容量为 32 字,字长为 64 位。模块数 m=4,采用低位交叉方式。存储周期 T=200ns,数据总线宽度为 64 位,总线传输周期 t=50ns。则该交叉存储器在连续读出 4 个字的带宽是( )。
【解析】
交叉存储器采用低位交叉方式,模块数
,存储周期
,总线传输周期
。
连续读出 4 个字时,由于地址低位交叉分布在不同模块上,访问时间可以重叠。读取第一个字需要存储周期
,后续每个字的读取可以与前一个字部分重叠,通常每隔时间
启动一个模块访问。
因此,连续读出 4 个字的总时间为
总数据传输量为
带宽为数据传输量除以总时间,即
选项中最接近的是 C( ),可能为数值表示或四舍五入差异,因此选择 C。
16
下列关于 Cache 和虚拟存储器的说法中,错误的有( )。
I. 当 Cache 失效(即不命中)时,处理器将会切换进程,以更新 Cache 中的内容
II. 当虚拟存储器失效(如缺页)时,处理器将会切换进程,以更新主存中的内容
III. Cache 和虚拟存储器由硬件和 OS 共同实现,对应应用程序均是透明的
IV.虚拟存储器的容量等于主存和辅存的容量之和
【解析】
本题要求找出关于 Cache 和虚拟存储器的错误说法。下面对各说法逐一分析:
说法 I:当 Cache 失效(不命中)时,处理器不会切换进程来更新 Cache 内容。Cache 失效由硬件直接处理,处理器可能停顿或继续执行其他指令,但进程切换由操作系统调度,与 Cache 失效无关。因此说法 I 错误。
说法 II:当虚拟存储器失效(如缺页)时,处理器会切换进程。缺页中断会触发操作系统介入,当前进程被阻塞,操作系统调度另一个进程运行,同时将所需页面从辅存调入主存。因此说法 II 正确。
说法 III:Cache 通常由硬件独立管理(如 CPU 缓存),对操作系统和应用程序透明;虚拟存储器则由硬件(如 MMU)和操作系统共同实现,对应用程序透明。但 Cache 并非由硬件和 OS 共同实现,OS 一般不参与 Cache 的具体操作。因此说法 III 错误。
说法 IV:虚拟存储器的容量由地址空间决定(如 32 位系统为 4GB),并非主存和辅存的物理容量之和。虚拟存储器利用主存和辅存扩展地址空间,但容量不等于两者之和。因此说法 IV 错误。
综上,错误说法为 I、III、IV,对应选项 D。
16
下列关于 Cache 和虚拟存储器的说法中,错误的有( )。
I. 当 Cache 失效(即不命中)时,处理器将会切换进程,以更新 Cache 中的内容
II. 当虚拟存储器失效(如缺页)时,处理器将会切换进程,以更新主存中的内容
III. Cache 和虚拟存储器由硬件和 OS 共同实现,对应应用程序均是透明的
IV. 虚拟存储器的容量等于主存和辅存的容量之和
【解析】
首先分析每个说法的正确性:
说法 I 错误,因为 Cache 失效(不命中)时,处理器通常不会切换进程;Cache 更新由硬件处理(如缓存填充或预取),进程切换由操作系统调度,与 Cache 失效无关。
说法 II 正确,虚拟存储器失效(如缺页)时,操作系统需要从辅存加载页面到主存,当前进程可能被阻塞,操作系统往往会切换至其他就绪进程以提升 CPU 利用率。
说法 III 错误,Cache 主要由硬件实现,对应用程序和操作系统透明,操作系统不直接参与其管理;虚拟存储器才由硬件(如 MMU)和操作系统共同实现,并对应用程序透明。因此说法 III 将 Cache 也归为硬件和 OS 共同实现是不准确的。
说法 IV 错误,虚拟存储器的容量由地址总线宽度决定(如 32 位系统为 4GB 虚拟地址空间),并不等于主存和辅存的容量之和;虚拟存储器利用主存和辅存模拟更大地址空间,但容量受限于地址位数,而非简单相加。
综上,错误的说法是 I、III 和 IV,对应选项 D。
17
下列关于基址寻址和变址寻址的说法中,正确的是( )。
I. 两者都扩大指令的寻址范围
II. 变址寻址适合于编制循环程序
III. 基址寻址适合于多程序设计
IV. 基址寄存器的内容由操作系统确定,在执行的过程中可变
V. 变址寄存器的内容由用户确定,在执行的过程中不可变
【解析】 基址寻址和变址寻址都是通过将寄存器内容与指令中的地址字段相加来形成有效地址,这可以突破指令地址字段的长度限制,从而扩大寻址范围,因此说法 I 正确。变址寻址中,变址寄存器的值可以在程序执行中动态变化,便于遍历数组或重复执行类似操作,非常适合编制循环程序,说法 II 正确。基址寻址通过基址寄存器实现程序重定位,使操作系统能将程序加载到内存任意位置,利于多道程序设计中的内存管理,说法 III 正确。
说法 IV 错误,因为基址寄存器的内容通常由操作系统在程序加载时设定,但在程序执行过程中一般保持不变,以确保地址翻译的稳定性。说法 V 错误,变址寄存器的内容由用户程序设定,且在执行过程中经常变化(如在循环中修改),以实现灵活的数据访问。因此,正确说法为 I、II 和 III,对应选项 A。
18
下列部件不属于运算器的是( )。
【解析】 运算器是 CPU 的核心部件之一,主要负责执行算术运算和逻辑运算。其典型组成包括 ALU(算术逻辑单元)、通用寄存器和状态寄存器等。ALU 是运算器的核心,直接处理数据运算;通用寄存器用于临时存储运算数据和中间结果;状态寄存器则记录运算结果的状态标志,如进位、溢出等。这些部件共同协作完成运算任务。
数据高速缓存属于存储器层次结构,位于 CPU 和主存之间,用于加快数据访问速度,减少 CPU 等待时间。它是存储系统的一部分,并不直接参与运算过程,因此不属于运算器的组成部分。所以,本题中不属于运算器的部件是数据高速缓存。
19
流水线计算机中,下列语句发生的数据相关类型是( )。
ADD R1, R2, R3; (R2)+(R3)→R1
ADD R4, R1, R5; (R1)+(R5)→R4
【解析】 在流水线计算机中,数据相关是指令之间由于共享寄存器或内存位置而导致的依赖关系。分析给定的两条指令:第一条指令 ADD R1, R2, R3 将 R2 和 R3 的值相加后写入 R1;第二条指令 ADD R4, R1, R5 需要读取 R1 的值与 R5 相加后写入 R4。因此,第二条指令读取 R1 的操作依赖于第一条指令写入 R1 的结果。
这种依赖关系是第一条指令“写”R1,第二条指令“读”R1,即写操作之后发生读操作,属于写后读数据相关。在流水线执行中,如果第二条指令的读阶段在第一条指令的写阶段之前发生,就会读取到旧值,导致数据冲突。其他选项如写后写、读后写和读后读均不匹配此处依赖,因为指令间没有写入同一寄存器或先读后写的场景。
20
在以下描述 PCI 总线的基本概念中,正确的描述是( )。
I. PCI 总线是一个与处理器无关的高速外围总线
II. PCI 总线的基本传输机制是猝发式传送
III. PCI 设备一定是主设备
IV. 系统中只允许有一条 PCI 总线
【解析】
首先,分析每个描述的正确性。
描述 I 指出 PCI 总线是一个与处理器无关的高速外围总线。PCI 总线在设计上独立于特定处理器架构,可以兼容多种 CPU 系统,同时它确实是一种高速总线,用于连接外围设备如显卡、网卡等,因此描述 I 正确。
描述 II 提到 PCI 总线的基本传输机制是猝发式传送。PCI 总线支持猝发传输模式,允许在单一事务中连续传输多个数据单元,以提高数据传输效率,这是其基本特性之一,因此描述 II 正确。
描述 III 声称 PCI 设备一定是主设备。实际上,PCI 总线上的设备可以扮演主设备(发起传输)或从设备(响应传输)的角色,并非所有设备都是主设备,例如一些存储控制器可能仅作为从设备,因此描述 III 错误。
描述 IV 认为系统中只允许有一条 PCI 总线。PCI 总线架构允许通过桥接器(如 PCI-to-PCI 桥)扩展多条总线,因此一个系统中可以存在多条 PCI 总线,描述 IV 错误。
综上,只有描述 I 和 II 正确,对应选项 D。
21
在总线上,( )信息的传输为单向传输。
I. 地址
II. 数据
III. 控制
IV. 状态
【解析】 在计算机系统总线上,不同信息的传输方向有所不同。地址信息总是从 CPU 或主控制器单向传输到内存或 I/O 设备,用于指定访问位置,因此是单向的。数据信息则需要在 CPU 和内存或 I/O 设备之间双向流动,如读取和写入操作,因此是双向传输。控制信息包括读、写等命令信号,通常从 CPU 发出到外设,属于单向输出,但其中部分信号如中断请求可能为输入,整体上控制信息的传输被视为主要单向。状态信息如设备就绪或忙碌,是从外设单向传输到 CPU,属于单向输入。综合来看,单向传输的信息包括地址、控制(主要部分)和状态,因此选项 D(I、III 和 IV)正确。选项 A 和 C 错误包含了双向传输的数据信息;选项 B 未包含明确单向的地址信息,因此不全面。
22
设 CPU 与 I/O 设备以中断方式进行数据传送。CPU 响应中断时,该 I/O 设备接口控制器送给 CPU 的中断向量表(中断向量表存放在段向量)的指针是 0800H,800H 单元中的值为 1200H,则该 I/O 设备的中断服务程序在主存中的入口地址为( )。
【解析】
在中断方式下,CPU 响应中断时,I/O 设备接口控制器会提供一个中断向量表指针,该指针指向中断向量表中对应中断服务程序入口地址的存储位置。本题中,指针为 0800H(与 800H 数值相同,均指地址 0x0800),该地址单元中存储的值为 1200H。由于中断向量表条目通常直接存放中断服务程序的入口地址(在简化模型或特定系统中,可能为物理地址或偏移地址,段地址隐含),因此 1200H 即为该 I/O 设备中断服务程序在主存中的入口地址。选项中,1200H 符合这一结果,故选择 C。
23
下列关于进程和线程的叙述中,正确的是( )。
I. 一个进程可包含多个线程,各线程共享进程的虚拟地址空间
II. 一个进程可包含多个线程,各线程共享栈
III. 当一个多线程进程(采用一对一线程模型)中某个线程被阻塞后,其他线程将继续工作
IV. 当一个多线程进程中某个线程被阻塞后,该阻塞进程将被撤销
【解析】
I 正确,因为一个进程可以拥有多个线程,这些线程共享进程的虚拟地址空间,包括代码段、数据段和堆等,但每个线程有独立的栈和寄存器状态。
II 错误,线程虽然共享进程的虚拟地址空间,但每个线程都拥有自己独立的栈,用于存储局部变量和函数调用信息,因此栈并不被所有线程共享。
III 正确,在一对一线程模型(即每个用户线程映射到一个内核线程)中,如果某个线程因等待 I/O 等操作被阻塞,其他线程作为独立的执行流仍可被调度执行,不会全部阻塞。
IV 错误,当多线程进程中某个线程被阻塞时,并不会导致整个进程被撤销;进程可能继续运行,其他线程仍可工作,进程的撤销通常由操作系统基于资源或错误决定,与单个线程阻塞无关。
综上,只有 I 和 III 正确,对应选项 B。
24
( )调度算法有利于 CPU 繁忙型的进程,而不利于 I/O 繁忙型的进程。
【解析】 先来先服务(FCFS)调度算法是一种非抢占式算法,进程按到达顺序运行,直到完成。CPU 繁忙型进程通常需要长时间连续使用 CPU 进行计算,FCFS 允许它们一旦开始运行便独占 CPU 直至结束,减少了上下文切换的开销,因此有利于这类进程。相反,I/O 繁忙型进程频繁进行 I/O 操作,运行时间较短,但在 FCFS 中,如果它们排在 CPU 繁忙型进程之后,必须等待长时间才能获得 CPU,导致响应延迟;同时,即使 I/O 操作释放了 CPU,FCFS 的非抢占特性也可能让 CPU 空闲或由长进程占用,不利于 I/O 繁忙型进程的快速切换。因此,FCFS 有利于 CPU 繁忙型进程,而不利于 I/O 繁忙型进程。
其他算法分析:时间片轮转通过分时共享促进公平,利于 I/O 繁忙型进程在 I/O 等待后快速重获 CPU;短进程优先优先运行短进程,I/O 繁忙型进程通常受益,而 CPU 繁忙型进程被推迟;优先级调度的效果取决于优先级设置,不直接针对进程类型,故不明确符合题意。
25
N 个进程共享 M 台打印机(其中 N>M),假设每台打印机为临界资源,必须独占使用,则打印机共享的互斥信号量的取值范围为( )。
【解析】 互斥信号量用于控制对临界资源的访问,初始值通常设置为可用资源的数量。本题中有 M 台打印机,因此信号量初始值为 M,表示最初有 M 台打印机空闲可用。
当进程申请使用打印机时执行 P 操作,信号量减 1;当进程释放打印机时执行 V 操作,信号量加 1。信号量的值代表当前可用打印机的数量,如果为负数,其绝对值表示等待使用打印机的进程数。
由于进程总数 N 大于打印机数 M,在最坏情况下,所有 M 台打印机都被占用,此时信号量为 0。如果还有进程申请打印机,信号量将继续减小变为负值。最多可能有 N-M 个进程同时等待(因为 M 个进程正在使用打印机,其余 N-M 个进程等待),因此信号量的最小值为-(N-M)。
信号量的最大值出现在没有进程使用打印机时,所有 M 台打印机均空闲,此时信号量为 M。
综上,信号量的取值范围是从最小值-(N-M) 到最大值 M,对应选项 B。其他选项中,A 的等待进程数最多为 N-1,不符合实际;C 和 D 的最大值错误,应为 M 而非 1。
26
关于优先级大小的论述中,错误的是( )。
I. 计算型作业的优先级,应高于 I/O 型作业的优先级
II. 短作业的优先级,应高于长作业的优先级
III. 用户进程的优先级,应高于系统进程的优先级
IV. 资源要求多的作业的优先级应高于对资源要求少的优先级
【解析】 优先级调度需要综合考虑系统效率和资源利用率。对于论述 I,计算型作业主要占用 CPU,而 I/O 型作业频繁进行输入输出操作,若计算型作业优先级更高,可能导致 I/O 设备闲置,降低系统整体吞吐量,因此通常 I/O 型作业优先级更高,I 错误。
对于论述 II,短作业优先调度可减少平均等待时间,提高系统响应性,因此短作业优先级高于长作业是合理的,II 正确。
对于论述 III,系统进程(如内核进程)负责关键系统功能,必须优先运行以确保系统稳定,用户进程优先级一般较低,III 错误。
对于论述 IV,资源要求多的作业若优先级高,可能长期占用资源导致其他作业饥饿,不利于资源均衡利用,通常资源要求少的作业优先级更高,IV 错误。
因此,错误的论述是 I、III 和 IV,对应选项 C。
27
假设系统有 5 个进程,A、B、C 三类资源。某时刻进程和资源状态如下:
下面叙述正确的是( )。
【解析】 首先,根据给定的分配矩阵和最大需求矩阵,计算每个进程的需求矩阵,需求 = 最大需求 - 分配。计算如下:
进程 P1 需求 =
;
进程 P2 需求 =
;
进程 P3 需求 =
;
进程 P4 需求 =
;
进程 P5 需求 =
。
初始可用资源向量为 。
接下来,检查各选项的安全序列。
- 选项 B 序列为 ,但进程 P1 需求 大于初始可用资源 ,不满足条件,因此无效。
- 选项 C 序列为 ,进程 P2 需求 中资源 C 的需求 大于初始可用资源中的 ,不满足,因此无效。
- 选项 D 序列为
,逐步检查:
- 进程 P4 需求 当前可用资源 ,运行后可用资源更新为 ;
- 进程 P5 需求 ,运行后可用资源更新为 ;
- 进程 P1 需求 ,运行后可用资源更新为 ;
- 进程 P2 需求 ,运行后可用资源更新为 ;
- 进程 P3 需求
,所有进程可完成。
因此序列 D 是有效的安全序列,系统安全。
选项 A 声称系统不安全,但存在安全序列,故错误。综上所述,正确答案为 D。
28
支持程序存放在不连续内存中的存储管理方法有( )。
I. 动态分区分配
II. 固定分区分配
III. 分页式分配
IV. 段页式分配
V. 分段式分配
【解析】 动态分区分配和固定分区分配都属于连续内存分配方式,它们要求程序整体存放在一个连续的内存区域中,因此不支持不连续存放。
分页式分配将内存划分为固定大小的页框,程序也分成相应的页,这些页可以分散存储在内存的任何可用页框中,无需连续,从而支持不连续存放。段页式分配结合了分段和分页,程序先分段、段内再分页,通过分页机制实现了内存的不连续分配。分段式分配将程序按逻辑划分为多个段,每个段可以独立分配到内存的不同位置,段间可以不连续存放,因此也支持程序的不连续存储。
综上,支持程序存放在不连续内存中的方法为分页式分配、段页式分配和分段式分配,即 III、IV 和 V。
29
下面关于虚拟存储器的论述中,正确的是( )。
【解析】
选项 A 正确描述了虚拟存储器的核心特性和段页式系统的管理方式。在段页式系统中,用户的逻辑地址空间确实以段为单位进行组织和管理,这有助于反映程序的逻辑结构;而物理内存则以固定大小的页为单位进行分配和管理,提高了内存的利用效率。虚拟存储器通过将部分数据暂存于磁盘等辅助存储中,允许程序使用比物理内存更大的逻辑地址空间,这正是虚拟存储器的基本定义和优势所在。因此,A 的论述准确。
选项 B 不正确,因为请求分页系统通常采用固定大小的页面,以简化硬件设计和内存管理;若允许用户使用不同大小的页面,反而容易导致内存外部碎片,降低利用率,实践中并不常见。
选项 C 的表述不够严谨。虚拟存储器确实允许作业仅部分装入内存即可启动运行,从而支持更多作业并发执行,但具体装入比例(如 10%~30%)并非固定或通用标准,它取决于程序的工作集特性和系统调度策略,因此不能作为一般性论述。
选项 D 错误,因为最佳适应算法主要用于动态分区内存管理中的空闲块分配,目的是减少外部碎片;而虚拟存储器的实现涉及页面置换算法(如 LRU、FIFO 等),最佳适应算法并非其常用算法。
30
从下列关于目录检索的说法中,正确的是( )。
【解析】 首先,选项 A 不正确。Hash 检索虽具有较快的检索速度,但现代操作系统中目录检索方法多样,Hash 法并未完全替代顺序检索法,例如在小型目录或某些文件系统中顺序检索仍因简单可靠而被使用。
其次,选项 B 不准确。在树型目录中利用顺序检索法时,路径名可以是绝对路径或相对路径;对于绝对路径应从根目录开始逐级检索,但对于相对路径则需从当前目录开始,因此“应从根目录开始”的说法过于绝对,未考虑路径名类型的差异。
选项 C 正确。顺序检索法在解析路径名时,需要逐级查找每个分量名(即路径中的目录或文件名);只要有一个分量名未找到,就说明路径无效,查找过程应立即停止并返回错误信息,这是目录检索的基本规则。
最后,选项 D 错误。顺序检索法查找完成后,通常获得的是文件的逻辑信息(如 inode 号或文件控制块),而非直接得到物理地址;物理地址需要借助文件系统的映射机制(如通过 inode 访问磁盘块)进一步获取。
31
设某文件为链接文件,由 5 个逻辑记录组成,每个逻辑记录的大小与磁盘块的大小相等,均为 512 字节,并依次存放在 50、121、75、80、63 号磁盘块上。若要存取文件的第 1569 逻辑字节处的信息,则应访问( )号磁盘块。
【解析】 首先,文件由 5 个逻辑记录组成,每个逻辑记录大小为 512 字节,相当于一个磁盘块。逻辑记录依次存放在 50、121、75、80、63 号磁盘块上,即逻辑记录 1 对应块 50,逻辑记录 2 对应块 121,逻辑记录 3 对应块 75,逻辑记录 4 对应块 80,逻辑记录 5 对应块 63。
要存取第 1569 逻辑字节处的信息,需确定该字节属于哪个逻辑记录。由于字节位置通常从 1 开始计数,计算逻辑记录编号:每个逻辑记录包含 512 字节,因此前三个逻辑记录共覆盖字节 1~1536(因为 512×3=1536)。第 1569 字节大于 1536,属于第 4 个逻辑记录(字节 1537~2048)。
逻辑记录 4 对应的磁盘块号为 80,因此应访问 80 号磁盘块。即使从 0 开始计数字节,第 1569 字节(索引 1568)仍落在第 4 个逻辑记录范围内,结论一致。
32
下列有关设备管理概念的叙述中,( )是不正确的。
I. 通道可视为一种软件,其作用是提高了 CPU 的利用率
II. 编制好的通道程序是存放在主存储器中的
III. 用户给出的设备编号是设备的物理号
IV. 来自通道的 I/O 中断事件应该由设备管理负责
【解析】
通道(I/O 通道)是一种硬件设备,专门用于处理输入输出操作,以减轻 CPU 的负担,从而提高 CPU 的利用率。因此,叙述 I 中“通道可视为一种软件”的说法不正确,通道本质上是硬件而非软件。
用户在使用设备时,通常通过逻辑设备号来指定设备,由操作系统将逻辑号映射到物理设备号。因此,叙述 III 中“用户给出的设备编号是设备的物理号”不正确,用户给出的是逻辑号。
叙述 II 正确:编制好的通道程序确实存放在主存储器中,通道从主存读取并执行这些程序。叙述 IV 也正确:来自通道的 I/O 中断事件由操作系统的设备管理部分负责处理,以协调 I/O 操作。
综上,不正确的叙述是 I 和 III,对应选项 A。
33
设待传送数据总长度为 L 位,分组长度为 P 位,其中头部开销长度为 H 位,源结点到目的结点之间的链路数为 h,每个链路上的延迟时间为 D 秒,数据传输速率为 B bps,电路交换建立连接的时间为 S 秒,则电路交换方式传送完所有数据需要的时间是( )秒。
【解析】 在电路交换方式中,数据传输前需要先建立连接,建立连接的时间为 S 秒。连接建立后,数据以连续方式传输,不进行分组,因此分组长度 P 和头部开销 H 是无关参数,不参与时间计算。数据传输时间由总数据长度 L 和传输速率 B 决定,为 L/B 秒。此外,信号在链路上传播存在延迟,源结点到目的结点之间有 h 条链路,每条链路延迟为 D 秒,因此总传播延迟为 hD 秒。综合以上三部分,电路交换的总时间为建立连接时间、数据传输时间和传播延迟之和,即 S + hD + L/B 秒。
选项 A 缺少建立连接时间 S,选项 C 错误引入了分组交换相关的计算,选项 D 缺少传播延迟 hD,因此只有选项 B 正确。
34
以下各项中,不是数据报服务特点的是( )。
【解析】 数据报服务是一种无连接的网络服务,其核心特点在于每个分组(即数据报)都独立携带完整的地址和路由信息,使得分组能够被单独处理和传送。在整个传输过程中,不需要预先建立虚电路,网络节点会为每个分组独立进行路由选择。由于分组可能经由不同路径到达目的端系统,数据报服务无法保证所有分组按顺序到达,顺序问题通常由上层协议(如 TCP)处理。因此,选项 C 所述的“使所有分组按顺序到达目的端系统”不符合数据报服务的特点。
35
考虑建立一个 CSMA/CD 网,电缆长度为 1km,不使用中继器,传输速率为 1Gbps,电缆中信号的传播速率是 200000km/s,则该网络中最小帧长是( )。
【解析】
首先,计算信号在电缆中的传播时延。
电缆长度为 1 km,信号传播速率为 200000 km/s,因此传播时延为长度除以传播速率:
即 5 微秒。
在 CSMA/CD 网络中,最小帧长需确保在帧传输过程中能检测到冲突,这要求帧的发送时间不小于信号往返传播的时间(即冲突窗口)。
冲突窗口时间为 2 倍传播时延:
传输速率为 1 Gbps,即
比特/秒。
最小帧长等于冲突窗口时间乘以传输速率:
因此,最小帧长为 10000 比特,对应选项 A。
36
在一条点对点链路上,为了减少地址的浪费,子网掩码应该指定为( )。
【解析】 在点对点链路上,通常只有两个设备(例如两个路由器)需要 IP 地址,因此为了最小化地址浪费,应选择能提供恰好两个可用 IP 地址的子网掩码。可用 IP 地址数由主机位数决定,公式为 (减去网络地址和广播地址),其中 为主机位数。要满足两个可用地址,需 ,解得 。当 时,总 IP 地址数为 4,可用地址数为 2,正好满足需求且浪费最少。
此时网络位为 30 位(IPv4 地址共 32 位),对应的子网掩码为 255.255.255.252(即 /30),其二进制形式为 11111111.11111111.11111111.11111100,主机位为 2 位。选项 A 符合此条件。
其他选项中,B(255.255.255.248)为主机位 3 位,提供 8 个总地址和 6 个可用地址,造成浪费;C(255.255.255.240)为主机位 4 位,提供 16 个总地址和 14 个可用地址,浪费更大;D(255.255.255.196)不是标准的连续子网掩码(二进制 11000100 不连续),通常无效或不被采用。因此,A 是最佳选择。
需要注意的是,点对点链路有时使用 /31 掩码(255.255.255.254)可进一步实现零浪费,但该选项未列出,且 /30 在传统网络中广泛支持,符合题意要求。
37
某同学在校园网访问因特网,从该同学打开计算机电源到使用命令 ftp202.37.0.25 连接文件服务器的过程中,( )协议可能没有使用到。
【解析】 在该同学从打开计算机电源到使用 ftp 命令连接文件服务器的过程中,IP 协议是网络层核心协议,负责数据包的路由和转发,因此必然被使用。ARP 协议用于将 IP 地址解析为 MAC 地址,以便在局域网中封装和传输数据帧,在访问任何网络资源时(无论目标服务器在本地子网还是通过网关),通常都需要 ARP 来解析下一跳的 MAC 地址,因此也很可能被使用。DHCP 协议用于动态获取 IP 地址等网络配置,在校园网中常见,但如果计算机已配置静态 IP 地址,则 DHCP 可能没有被使用;不过,考虑到校园网环境通常默认使用 DHCP,其被使用的可能性较高。而 ICMP 协议主要用于网络错误报告和诊断(如 ping 命令),在正常的 ftp 连接建立和数据传输过程中,如果没有出现网络故障或不需要进行诊断,ICMP 可能完全没有被触发或使用。因此,在上述过程中,ICMP 是可能没有使用到的协议。
38
某路由器的路由表如下所示。如果它收到一个目的地址为 192.168.10.23 的 IP 数据报,那么它为该数据报选择的下一跳路由器地址是( )。
【解析】 路由表匹配遵循最长前缀匹配原则。目的地址 192.168.10.23 的前三个八位组为 192.168.10,而路由表中前三条特定网络条目分别为 192.168.1.0、192.168.2.0 和 192.168.3.0,这些通常表示/24 网络(即子网掩码 255.255.255.0),因此它们分别覆盖 192.168.1.x、192.168.2.x 和 192.168.3.x 的地址范围。由于 192.168.10.23 不在这些范围内,故不匹配。
第四条条目 0.0.0.0 是默认路由(子网掩码 0.0.0.0),匹配任何目的地址。因此,该数据报将匹配默认路由,其下一跳路由器地址为 192.168.2.66。选项 A 对应 192.168.3.0 网络的下一跳,不匹配;选项 C 和 D 均不符合路由表规则。
39
一个长度为 3000 字节的 UDP 数据报,在数据链路层使用以太网进行传输,为了正确传输,则需要将其拆分成( )个 IP 数据片。
【解析】
首先,UDP 数据报长度为 3000 字节,在传输时会被封装成 IP 数据报。IP 数据报包括 IP 头部和 IP 数据部分,其中 IP 数据部分就是整个 UDP 数据报。标准 IP 头部长度为 20 字节,因此 IP 数据报的总长度为 3000 + 20 = 3020 字节。
以太网的数据链路层 MTU(最大传输单元)通常为 1500 字节,这意味着每个 IP 数据报在以太网中传输时,总长度不能超过 1500 字节。因此,当 IP 数据报长度超过 MTU 时,IP 层需要进行分片。
分片时,每个 IP 数据片都包含自己的 IP 头部(20 字节),因此每个数据片的数据部分最大为 1500 - 20 = 1480 字节。此外,IP 分片偏移字段以 8 字节为单位,要求数据部分大小是 8 的倍数;1480 字节正好是 8 的倍数(1480 ÷ 8 = 185),符合要求。
IP 数据报的数据部分总长度为 3000 字节。计算分片数量:第一个数据片携带 1480 字节数据,剩余 1520 字节;第二个数据片携带 1480 字节数据,剩余 40 字节;第三个数据片携带 40 字节数据。因此,共需要 3 个 IP 数据片。
分片后,第三个数据片的总长度为 20 字节头部加 40 字节数据,共 60 字节,小于 MTU,传输正常。综上,正确答案是 3 个分片,对应选项 B。
40
TCP 是互联网中的传输层协议,TCP 协议进行流量控制的方式是( )。
【解析】 TCP 协议采用可变大小的滑动窗口协议来实现流量控制。在 TCP 通信中,接收方通过每个确认报文段中的窗口字段(即接收窗口 rwnd)向发送方通告其当前可用的缓冲区大小。发送方根据这个窗口值动态调整自己的发送窗口,确保发送的数据量不会超过接收方的处理能力,从而防止缓冲区溢出和数据丢失。
这种方式允许 TCP 适应网络状况和接收方负载的变化,实现高效的端到端流量管理。相比之下,停等 ARQ 协议和后退 N 帧 ARQ 协议主要用于差错控制,而非流量控制;固定大小的滑动窗口协议缺乏灵活性,无法适应动态变化的网络环境。因此,TCP 的流量控制依赖于可变大小的滑动窗口机制。
解答题
第 41~47 题,共 70 分。
41
(11 分)使用散列函数 hash(x)=x mod 11,把一个整数值转换成散列表下标,现要把数据:1,13,12,34,38,33,27,22 插入到散列表中。
(1)使用链地址的冲突处理方法来构造散列表。
(2)分别计算等概率情况下,查找成功和查找不成功的平均探查长度。(假设探查到空结点也算一次探查)
(3)若查找关键字 34,则需要依次与哪些关键字比较。
42
单链表有环,是指单链表的最后一个结点的指针指向了链表中的某个结点(通常单链表的最后一个结点的指针域是为空的)。试编写算法判断单链表是否存在环。
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
43
(10 分)设某机中,CPU 的地址总线 A₁₅~A₀,数据总线 D₇~D₀(A₀、D₀为最低位),存储器地址空间为 3000H~67FFH。其中 3000H~4FFFH 为 ROM 区,选用 4K×2 的 ROM 芯片;5000H~67FFH 为 RAM 区,选用 2K×4 的 SRAM 芯片。请问:
(1)组成该存储器需要多少片 ROM 芯片和 SRAM 芯片?
(2)ROM 芯片、SRAM 芯片各需连接 CPU 的哪几根地址线和数据线?
(3)应如何设置片选信号,分别写出各片选信号的逻辑表达式。
44
(11 分)设某计算机有 4 级中断 A、B、C、D,其硬件排队优先级次序为 A>B>C>D。如表所示列出了执行每级中断服务程序所需的时间。
如果以执行中断服务程序的时间作为确定中断优先级的尺度:时间越短优先级越高。
(1)如何为各级中断服务程序设置屏蔽码?
(2)如果 A、B、C、D 分别在 0μs、8μs、10μs、0μs 时刻发出中断请求,请画出 CPU 执行中断服务程序的序列。
(3)基于上题,请计算上述 4 个中断服务程序的平均执行时间。
45
(8 分)某一个计算机系统采用虚拟页式存储管理方式,当前在处理机上执行的某一个进程的页表如下所示,所有的数字均为十进制,每一项的起始编号是 0,并且所有的地址均按字节编址,每页的大小为 1024 字节。
(1)将下列逻辑地址转换为物理地址,写出计算过程,对不能计算的说明为什么?
0793, 1197, 2099, 3320, 4188, 5332
(2) 假设程序欲访问第 2 页,页面置换算法为改进的 CLOCK 算法,请问该淘汰哪页?页表如何修改?页表修改后 (1) 问中地址的转换结果是否改变?变成多少?
长)?
(3) 若距离减少到 2km,为了保证网络正常工作,则最小帧长度是多少?
(4) 若发送速率提高,最小帧长不变,为了保证网络正常工作应采取什么解决方案?
46
(8 分)一个文件系统中有一个 20MB 大文件和一个 20KB 小文件,当分别采用连续分配、隐式链接分配方案时,每块大小为 4096B,每块地址用 4B 表示,问:
(1) 该文件系统所能管理的最大文件是多少?
(2) 每种方案对大、小两文件各需要多少专用块来记录文件的物理地址(说明各块的用途)?
(3) 如需要读大文件前面第 5.5KB 的信息和后面第 (16M+5.5KB) 的信息,则每个方案各需要多少次磁盘 I/O 操作?
47
(9 分)设 A、B 两站相距 4km,使用 CSMA/CD 协议,信号在网络上的传播速度为 200000km/s,两站发送速率为 100Mbps,A 站先发送数据,如果发生碰撞,则:
(1) 最先发送数据的 A 站最晚经过多长时间才检测到发生了碰撞?最快又是多少?
(2) 检测到碰撞后,A 站已发送数据长度的范围是多少(设 A 要发送的帧足够长)?

