1 - 模拟卷 1
选择题
第 1~40 小题,每小题 2 分,共 80 分。下列每题给出的四个选项中,只有一个选项最符合试题要求。
1
已知一个栈的进栈序列是 1、2、3、…、n,其输出序列为 p₁、p₂、p₃、…、pₙ,若 p₁=3,则 p₂ 为( )。
【解析】 已知进栈序列为1,2,3,…,n,且第一个出栈元素p₁=3。根据栈的后进先出特性,为了使得3第一个出栈,操作序列必须是:先将1和2依次进栈,然后将3进栈并立即出栈。此时栈中剩余元素为1和2(2在栈顶),且后续元素4,5,…,n尚未进栈。
对于第二个出栈元素p₂,存在两种可能:一是直接出栈当前栈顶元素2,则p₂=2;二是暂不出栈2,而是将后续元素4,5,…,n依次进栈,并在进栈过程中或进栈后出栈某个元素,此时p₂可以是4,5,…,n中的任意一个。需要注意的是,p₂不可能是1,因为1位于栈底,必须等待其上方所有元素出栈后才能出栈,而p₂是第二个出栈元素,若不出栈2则无法触及1。因此,p₂可能是2或4,5,…,n中的任意值,与选项A相符。
2
利用栈求表达式的值时,设立运算数栈 OPEN。假设 OPEN 只有两个存储单元,则在下列表达式中,不会发生溢出的是( )。
【解析】
在利用栈求表达式值时,运算数栈 OPEN 用于存储运算数和中间计算结果。由于 OPEN 只有两个存储单元,栈最多能同时容纳两个运算数,若在求值过程中尝试压入第三个运算数,就会发生溢出。因此,需要分析每个表达式在求值过程中运算数栈的最大深度是否超过2。
通过将中缀表达式转换为后缀表达式并模拟求值过程,可以计算栈的最大深度:
- 表达式 A: A-B*(C-D),后缀为 A B C D - * -。求值时,压入 A、B、C 后栈深度达到3,发生溢出。
- 表达式 B: (A-B)*C-D,后缀为 A B - C * D -。求值时,栈中最多同时存在两个运算数(如中间结果和 C 或最终结果和 D),最大深度为2,不会溢出。
- 表达式 C: (A-B*C)-D,后缀为 A B C * - D -。求值时,压入 A、B、C 后栈深度达到3,发生溢出。
- 表达式 D: (A-B)*(C-D),后缀为 A B - C D - *。求值时,压入中间结果、C、D 后栈深度达到3,发生溢出。
因此,只有表达式 B 在求值过程中运算数栈的最大深度不超过2,不会发生溢出。
3
已知 A[1..N] 是一棵顺序存储的完全二叉树,9 号结点和 11 号结点共同的祖先是( )。
【解析】 在顺序存储的完全二叉树中,节点编号对应数组索引,且任意节点 i 的父节点索引为 floor(i/2)。对于节点 9,其祖先链依次为:9 → 4 → 2 → 1;对于节点 11,其祖先链依次为:11 → 5 → 2 → 1。比较两条祖先链,第一个共同的节点是 2,因此 9 号结点和 11 号结点共同的祖先是 2。选项 A、B、D 均不在两者的共同祖先链中,故正确答案为 C。
4
在常用的描述二叉排序树的存储结构中,关键字值最大的结点是( )。
【解析】 在二叉排序树中,关键字值最大的结点位于树的最右侧,这是由二叉排序树的性质决定的:对于任意结点,其左子树中的所有结点关键字值均小于该结点,右子树中的所有结点关键字值均大于该结点。因此,从根结点开始一直向右遍历,直到没有右子结点时,所到达的结点即为最大值结点。由于该结点没有右子结点,其右指针一定为空。
左指针的情况则不确定:最大值结点可能有左子树(此时左指针不为空),也可能没有左子树(此时左指针为空),但这并不影响其作为最大值结点的特性。选项A、C、D均不能准确描述最大值结点的指针状态,故选项B正确。
5
分别以下列序列构造二叉排序树,与用其他三个序列所构造的结果不同的是( )。
【解析】
在构造二叉排序树时,序列A、B、D生成的树结构相同,而序列C生成的左子树结构不同,具体如下:
- A、B、D的树结构为:
100
/ \
80 120
/ \ / \
60 90 110 130
- C的树结构为:
100
/ \
60 120
\ / \
80 110 130
\
90
因此,与其他三个序列所构造的结果不同的是C。
6
设无向图 G=(V,E) 和 G’=(V’,E’),如果 G’ 是 G 的生成树,则下面说法错误的是( )。
【解析】
生成树是无向连通图的一个子图,它包含原图的所有顶点,并且是树结构,因此是无环的连通图。
选项A正确,因为生成树的顶点集和边集都是原图的子集,所以它是原图的子图。
选项B错误,因为连通分量是极大连通子图,即不能再添加任何顶点或边而保持连通。生成树是极小连通子图,不是极大连通子图。对于连通图,其唯一的连通分量是图本身,而生成树是它的一个真子图(除非原图本身就是树),因此生成树不是连通分量。
选项C正确,生成树是极小连通子图,意味着去掉任意一条边都会破坏其连通性,并且顶点集与原图相同(V’=V)。
选项D正确,生成树作为树结构,不包含任何环,因此是无环子图。
7
若 G 是一个具有 36 条边的非连通无向简单图,则图 G 的结点数至少是( )。
【解析】 首先,由于 G 是非连通无向简单图,它至少包含两个连通分支。设结点总数为 n,边数为 36。为了最小化 n,应使一个连通分支尽可能大(边数多),而其他分支尽可能小(如孤立点,不贡献边数)。因此,考虑图由一个具有 m 个结点的连通分支和若干孤立点组成,其中所有边均来自该连通分支,即该分支有 36 条边。
对于 m 个结点的简单连通图,边数最多为 m(m-1)/2,因此需满足 m(m-1)/2 ≥ 36。计算得 m(m-1) ≥ 72。当 m=9 时,9×8=72,即完全图 K9 恰有 36 条边。此时若图仅含 K9,则为连通图,但要求非连通,故需至少增加一个孤立点,使结点数 n ≥ m+1=10。因此 n=10 是可能的构造:一个 9 结点的完全图(36 条边)和一个孤立点,图是非连通的,总边数 36。
验证更小的 n:若 n=9,则非连通图的最大边数出现在两个分支分别为 8 和 1 个结点时,最大边数为 8×7/2+0=28<36,无法达到 36 条边。n=8 时更不可能。因此,满足条件的结点数至少为 10。
8
在有向图 G 的拓扑序列中,若顶点 Vᵢ 在顶点 Vⱼ 之前,则下列情形不可能出现的是( )。
【解析】 拓扑序列是针对有向无环图(DAG)的一种顶点排序,要求对于图中的任意有向边,起点在终点之前。因此,若顶点Vᵢ在拓扑序列中位于Vⱼ之前,则图中不能存在从Vⱼ到Vᵢ的路径,否则会形成环路,违反拓扑序列的定义。
分析选项:
- A:存在弧<Vᵢ, Vⱼ>(即从Vᵢ到Vⱼ的有向边)是可能的,因为该边方向与序列顺序一致,符合拓扑序列要求。
- B:存在从Vᵢ到Vⱼ的路径也是可能的,路径意味着Vᵢ是Vⱼ的前驱,在拓扑序列中自然位于其前。
- C:没有弧<Vᵢ, Vⱼ>同样可能,因为Vᵢ和Vⱼ之间可能通过其他顶点间接连通,或没有直接关联但序列顺序由其他边决定。
- D:存在从Vⱼ到Vᵢ的路径是不可能的,因为如果有这样的路径,根据拓扑序列性质,Vⱼ必须位于Vᵢ之前,这与已知的Vᵢ在Vⱼ之前矛盾。
因此,不可能出现的情形是D。
9
具有 12 个关键字的有序表中,对每个关键字的查找概率相同,折半查找查找成功和查找失败的平均查找长度依次为( )。
【解析】 对于有序表折半查找,平均查找长度(ASL)需通过二叉判定树计算。成功查找的 ASL 是找到每个关键字所需比较次数的平均值,失败查找的 ASL 是查找失败时比较次数的平均值。
首先构建 12 个关键字的判定树。根节点为关键字 6(深度 1),左子树包含关键字 15,右子树包含关键字 712。递归划分得到各关键字深度(即比较次数):关键字 1、4、7、11 深度 3;关键字 2、5、8、10、12 深度 4;关键字 3、9 深度 2;关键字 6 深度 1。比较次数总和为 37,成功 ASL = 37/12。
失败查找对应判定树的外部节点,共 13 个。外部节点的比较次数等于其父节点的深度:深度为 3 的父节点(关键字 1、4、7)对应 3 个外部节点,各比较 3 次;深度为 4 的父节点(关键字 2、5、8、10、12)对应 10 个外部节点,各比较 4 次。比较次数总和为 3×3 + 4×10 = 49,失败 ASL = 49/13。
因此,成功和失败的平均查找长度依次为 37/12 和 49/13,对应选项 A。
10
设线性表中每个元素有两个数据项 k1 和 k2,现对线性表按以下规则进行排序:先看数据项 k1,k1 值小的元素在前,大的在后;在 k1 值相同的情况下,再看 k2,k2 值小的在前,大的在后。满足这种要求的排序方法是( )。
【解析】 该排序要求为先按k1排序,k1相同时再按k2排序,属于多关键字排序。为实现此类排序,通常需先按次要关键字(k2)排序,再按主要关键字(k1)进行稳定排序,从而在k1相同的情况下保持k2的顺序。
分析各选项:A先按k1进行直接插入排序(稳定),再按k2进行简单选择排序(不稳定),第二次不稳定排序可能破坏已排好的k1顺序,不满足要求;B先按k2进行直接插入排序(稳定),再按k1进行简单选择排序(不稳定),第二次不稳定排序可能打乱k1相同时的k2顺序,不符合要求;C先按k1进行简单选择排序(不稳定),再按k2进行直接插入排序(稳定),第一次不稳定排序导致k1顺序混乱,第二次稳定排序按k2进行,最终序列主要按k2排序,而非先k1后k2,同样不满足;D先按k2进行直接选择排序(不稳定),再按k1进行直接插入排序(稳定),第一次按k2排序后序列整体k2有序,第二次稳定排序按k1进行,能保证k1有序的同时,对k1相同的元素保持第一次排序后的k2顺序,从而实现先k1后k2的排序要求,故D正确。
11
18 个初始归并段进行 5 路平衡归并,需要增加( )个虚拟归并段。
【解析】
在5路平衡归并中,每次归并操作都需要恰好5个归并段作为输入,以确保归并过程平衡。初始归并段数为18个,但归并过程中,每次归并会减少归并段的数量。具体来说,每归并一次,5个归并段合并为1个新段,因此段数减少4个(即k-1,其中k=5)。
设归并次数为m,最终剩下1个归并段,则有关系式:18 - 4m = 1。计算得m = (18-1)/4 = 17/4 = 4.25,不是整数。这意味着如果不添加虚拟归并段,无法通过整数次归并完成,且最后一次归并可能不足5路,破坏平衡性。
为了使得归并次数为整数且每次归并都是5路,需要添加d个虚拟归并段,使总段数S’ = 18 + d,并满足(S’ - 1)能被4整除(即归并次数为整数)。计算(18 + d - 1) = 17 + d,需使17 + d是4的倍数。17除以4余1,因此d最小为3(因1+3=4可被4整除)。此时S’ = 21,归并次数m = (21-1)/4 = 5,均为整数。
验证归并过程:添加3个虚拟段后,总段数21,进行5次归并,每次归并5个段(虚拟段视为空段,不影响结果),最终得到1个有序文件,符合5路平衡归并要求。因此,需要增加3个虚拟归并段。
12
某工作站采用时钟频率 f 为 15MHz、处理速率为 10MIPS 的处理机来执行一个已知混合程序。假定该混合型程序平均每条指令需要 1 次访存,且每次存取存储器存取为 1 周期延迟,试问此计算机的有效 CPI 是( )。
【解析】 有效 CPI(每条指令的时钟周期数)可以根据处理速率(MIPS)和时钟频率(f)的关系计算。公式为:MIPS = f(MHz)/ CPI。给定 f = 15 MHz,处理速率为 10 MIPS,代入公式得 CPI = 15 / 10 = 1.5。
问题中提到的访存信息(平均每条指令 1 次访存,每次访存 1 周期延迟)是背景条件,但处理速率 10 MIPS 是实际测量值,已经包含了所有延迟效果,因此直接使用公式计算出的 CPI 即为有效 CPI,无需额外调整。计算结果显示 CPI 为 1.5,对应选项 C。
13
如果某单精度浮点数、某原码、某补码、某移码的 32 位机器数均为 0xF0000000,这些数从大到小的顺序是( )。
【解析】 首先,将32位机器数0xF0000000转换为二进制:1111 0000 0000 0000 0000 0000 0000 0000。然后分别计算四种表示法对应的真值。
对于单精度浮点数(IEEE 754格式),符号位s=1,指数e=11100000(二进制,即224),尾数f全为0。实际指数E=e-127=97,故浮点数值为(-1)^1×1.0×2^97 = -2^97,这是一个非常大的负数。
对于原码表示,符号位为1表示负数,数值位为后31位(111000…000),其绝对值为2^30+2^29+2^28=7×2^28,故原码值为-7×2^28。
对于补码表示,最高位为1表示负数,其值计算公式为-2^31+(其他位数值)。其他位数值同样为7×2^28,故补码值为-2^31+7×2^28 = -2^28。
对于移码表示,通常偏移量为2^31,机器数作为无符号整数时值为2^31+2^30+2^29+2^28=15×2^28,真值为无符号值减2^31,即15×2^28-2^31=7×2^28,这是一个正数。
比较四个值:移码值7×2^28为正数最大;补码值-2^28为负数但大于原码值-7×2^28(因为-2^28 > -7×2^28);浮点数值-2^97是绝对值最大的负数,故最小。因此从大到小顺序为移码>补码>原码>浮点数,对应选项D。
14
在 C 语言中,short 型的长度为 16 位,若编译器将一个 short 型变量 x 分配到一个 32 位寄存器 R 中,且 X=0x8FA0,则 R 的内容为( )。
【解析】
在 C 语言中,
short 类型默认为有符号整数,长度为 16 位。当将其值存入 32 位寄存器时,需要进行符号扩展以保持数值不变。给定 x = 0x8FA0,其二进制表示为 1000 1111 1010 0000,最高位为 1,表示负数。符号扩展时,高 16 位需用符号位(1)填充,因此扩展后的 32 位值为 0xFFFF8FA0。15
下列关于 ROM 和 RAM 的说法中,错误的是( )。
Ⅰ. CD-ROM 是 ROM 的一种,因此只能写入一次
Ⅱ. Flash 快闪存储器属于随机存取存储器,具有随机存取的功能
Ⅲ. RAM 的读出方式是破坏性读出,因此读后需要再生
Ⅳ. SRAM 读后不需要刷新,而 DRAM 读后需要刷新
【解析】
首先分析每个陈述的正确性:
陈述Ⅰ:CD-ROM是只读存储器(ROM)的一种,其内容在生产时写入,用户无法修改或写入,因此“只能写入一次”的说法不准确。ROM的本质是只读,而非可写入(即使一次),所以该陈述错误。
陈述Ⅱ:Flash快闪存储器属于非易失性存储器,具有随机存取功能,但通常归类为ROM的衍生类型(如EEPROM),而非随机存取存储器(RAM)。RAM特指易失性存储器(如DRAM和SRAM),用于主存,因此Flash不属于RAM,该陈述错误。
陈述Ⅲ:RAM的读出方式并非都是破坏性读出。DRAM(动态RAM)的读出是破坏性的,需要刷新;但SRAM(静态RAM)的读出是非破坏性的,无需刷新。该陈述笼统地认为所有RAM都是破坏性读出,因此错误。
陈述Ⅳ:SRAM基于触发器存储数据,读后无需刷新;DRAM基于电容存储电荷,读后需要刷新以维持数据,该陈述正确。
综上所述,陈述Ⅰ、Ⅱ、Ⅲ均错误,对应选项D。
16
下列因素中,与 Cache 的命中率无关的是( )。
【解析】 Cache命中率是指CPU访问数据时在Cache中找到所需数据的概率,它主要受Cache设计参数和结构的影响。下面分析每个选项:
A. Cache块的大小:块大小影响空间局部性的利用。较大的块可以预取更多相邻数据,可能提高命中率;但块过大可能导致Cache中块数减少,增加冲突缺失。因此,块大小与命中率相关。
B. Cache的容量:容量越大,能存储的数据越多,减少容量缺失,从而提高命中率。因此,容量与命中率直接相关。
C. Cache的存取速度:存取速度指访问Cache的读写时间,它影响CPU访问延迟和系统性能,但不决定数据是否存在于Cache中。命中率关注数据的存在性,而非访问快慢,因此存取速度与命中率无关。
D. Cache的组织方式:如直接映射、组相联等方式,影响地址映射和冲突处理,不同的组织方式可能导致不同程度的冲突缺失,从而影响命中率。因此,组织方式与命中率相关。
综上,与Cache命中率无关的是Cache的存取速度。
17
下列关于各种寻址方式获取操作数快慢的说法中,正确的是( )。
Ⅰ. 立即寻址快于堆栈寻址
Ⅱ. 堆栈寻址快于寄存器寻址
Ⅲ. 寄存器一次间接寻址快于变址寻址
Ⅳ. 变址寻址快于一次间接寻址
【解析】
Ⅰ. 立即寻址中操作数直接包含在指令中,无需访问内存或寄存器,因此获取速度最快;堆栈寻址通常需要通过堆栈指针访问内存,涉及内存访问,速度较慢。故立即寻址快于堆栈寻址,Ⅰ正确。
Ⅱ. 堆栈寻址需要访问内存,而寄存器寻址直接访问CPU内部寄存器,寄存器寻址速度更快。因此堆栈寻址快于寄存器寻址的说法错误,Ⅱ不正确。
Ⅲ. 寄存器一次间接寻址先从寄存器获取地址,再访问内存一次;变址寻址需计算地址(基址加偏移量)后再访问内存一次。由于变址寻址多了地址计算步骤,寄存器一次间接寻址通常更快,Ⅲ正确。
Ⅳ. 变址寻址经过一次地址计算和一次内存访问;一次间接寻址(通常指内存间接)需两次内存访问(先取地址再取操作数)。因此变址寻址快于一次间接寻址,Ⅳ正确。
综上,Ⅰ、Ⅲ和Ⅳ正确,对应选项C。
18
指令( )从主存中读出:
【解析】 在计算机系统中,程序计数器(PC)专门用于存储下一条要执行指令的地址。指令的取指阶段总是基于PC的当前值从主存中读取指令,这是冯·诺依曼架构的基本工作原理。即使遇到转移指令(如跳转或分支),也是先将计算出的目标地址加载到PC中,然后继续根据更新后的PC读取指令,因此指令读取始终依赖于PC。
其他选项中,B提到“有时根据转移指令”不正确,因为转移指令仅修改PC的值,不直接作为读取地址的来源;C和D涉及地址寄存器,但地址寄存器通常用于数据访问或特定寻址模式,并非指令读取的常规依据。因此,A是唯一准确的描述。
19
在微程序控制器中,微程序的入口地址是由( )形成的。
【解析】 在微程序控制器中,微程序用于产生控制信号以执行机器指令。当控制器开始执行一条新的机器指令时,需要确定该指令对应的微程序序列的起始地址,即入口地址。这个入口地址的形成通常基于机器指令的操作码字段。
机器指令的操作码字段指明了指令的类型(如加法、跳转等),控制器通过操作码查询一个映射表(如微地址生成器或控制存储器地址转换逻辑),从而得到对应的微程序入口地址。这个过程是微程序控制器中指令解码的关键步骤。
选项A不正确,因为机器指令的地址码字段主要用于指定操作数地址(如内存地址或寄存器编号),与微程序入口地址无关。选项B不正确,微指令的微地址字段用于在微程序内部指定下一条微指令的地址(例如实现微程序分支),而不是形成整个微程序的初始入口。选项D也不正确,微指令的操作码字段用于控制具体的微操作,不参与生成微程序入口地址。因此,正确答案是C。
20
下列关于总线仲裁方式的说法中,正确的有( )。
Ⅰ. 独立请求方式响应时间最快,是以增加控制线路数为代价的
Ⅱ. 计数器定时查询方式下,有一根总线请求(BR)和一根设备地址线,若每次计数都从 0 开始,则设备号小的优先级高
Ⅲ. 链式查询方式对电路故障最敏感
Ⅳ. 分布式仲裁控制逻辑分散在总线各部件中,不需要中央仲裁器
【解析】
关于总线仲裁方式,以下对各项说法的分析可以确定正确与否:
说法Ⅰ正确。独立请求仲裁方式为每个设备配备独立的总线请求线和授权线,仲裁器可直接响应请求,因此响应时间最快,但代价是控制线路数量增加,硬件成本较高。
说法Ⅱ错误。计数器定时查询方式中,所有设备共享一根总线请求(BR)线,但设备地址线并非一根,而是一组地址线(数量由设备总数决定,通常为多位)。仲裁器通过地址线发送计数值,设备根据地址比较自身优先级。虽然计数从0开始时设备号小的优先级高,但“一根设备地址线”的描述不准确,因此该说法存在错误。
说法Ⅲ正确。链式查询方式依靠一根总线授权(BG)信号在设备间串行传递,若链中某个设备出现电路故障,授权信号可能无法向后传递,导致后续设备无法获得总线使用权,因此对电路故障最为敏感。
说法Ⅳ正确。分布式仲裁方式没有中央仲裁器,每个设备内置仲裁逻辑,通过竞争机制决定总线使用权,控制逻辑分散在各部件中,符合描述。
综上,正确的说法为Ⅰ、Ⅲ和Ⅳ,对应选项B。
21
传输一幅分辨率为 640 像素×480 像素,6.5 万色的照片(图像),假设采用数据传输速率为 56k/s,大约需要的时间是( )。
【解析】 首先计算图像的总像素数:640像素 × 480像素 = 307,200像素。图像为6.5万色(即65,000种颜色),颜色深度需要满足2^b ≥ 65,000,由于2^16 = 65,536,因此每个像素需要16位来表示颜色。
图像总数据量为307,200像素 × 16位/像素 = 4,915,200位。数据传输速率为56k/s,在通信领域中通常表示56千比特每秒,即56,000比特/秒(其中k=1000)。
传输时间 = 总数据量 / 数据传输速率 = 4,915,200位 / 56,000位/秒 ≈ 87.77秒,四舍五入后约为87.7秒,与选项D相符。注意,若将k按1024计算,会得到约85.71秒(对应选项C),但根据常规的数据传输速率定义,应采用k=1000,因此正确答案为D。
22
下列说法中,错误的是( )。
Ⅰ. 在中断响应周期,置 “0” 允许中断触发器是由关中断指令完成的。
Ⅱ. 中断服务程序的最后一条指令是转移指令
Ⅲ. CPU 通过中断来实现对通道的控制
Ⅳ. 程序中断和通道方式都是由软件和硬件结合实现的 I/O 方式
【解析】
Ⅰ错误:在中断响应周期,允许中断触发器被置“0”(即关中断)是由硬件自动完成的,目的是保护中断现场,防止嵌套中断;关中断指令是软件中使用的,并非在响应周期由指令完成。
Ⅱ错误:中断服务程序的最后一条指令通常是专门的中断返回指令(如IRET),用于恢复现场并返回到被中断的程序;转移指令(如JMP)用于跳转,不是中断服务程序的规范结尾。
Ⅲ错误:CPU对通道的控制是通过发送通道命令字或启动I/O指令来实现的,而中断是通道向CPU报告状态或完成情况的机制,并非CPU控制通道的手段。
Ⅳ正确:程序中断方式通过硬件中断机制和软件服务程序结合实现I/O;通道方式通过硬件通道处理器执行通道程序与CPU协作,同样软硬结合。因此,错误的说法是Ⅰ、Ⅱ和Ⅲ,对应选项C。
23
在操作系统中,有些指令只能在系统的内核态下运行,而不允许普通用户程序使用。下列操作中,可以运行在用户态下的是( )。
【解析】 在操作系统中,用户态和内核态是两种不同的运行模式。用户态下程序权限较低,只能执行非特权指令;内核态下操作系统内核可以执行所有指令,包括特权指令,以管理硬件和系统资源。
选项A“设置定时器的初值”通常涉及硬件定时器的直接配置,这属于特权操作,必须在内核态下执行,用户程序只能通过系统调用间接请求内核完成。
选项B“触发Trap指令”是用户程序主动从用户态切换到内核态的一种机制,例如执行系统调用或处理异常。Trap指令本身可以在用户态下触发,从而引发陷入内核的处理过程。
选项C“内存单元复位”可能指对物理内存单元的清除或重置操作,这需要直接访问系统内存资源,用户态程序无权执行,必须由内核态代码处理。
选项D“关闭中断允许位”涉及修改CPU的中断标志,这是关键的系统控制操作,允许中断是保证系统响应性和多任务的基础,因此关闭中断必须是内核态特权指令。
综上,只有触发Trap指令可以在用户态下运行,其他选项都需要内核态权限。
24
以下描述中,哪个不是多线程系统的特长,( )。
【解析】 多线程系统的特长主要包括提高并发性、有效利用多核处理器、改善程序响应时间以及优化资源共享等,适用于并行计算、高并发服务和任务分离等场景。
A选项描述利用线程并行执行矩阵乘法运算,这属于计算密集型任务的并行化,能够充分利用多核CPU加速运算,是多线程在提升性能方面的典型应用。
B选项描述Web服务器利用线程处理HTTP请求,这是多线程在I/O密集型服务中的常见用法,通过为每个请求分配线程来提高并发处理能力,增强服务器效率。
C选项描述键盘驱动程序为每个正在运行的应用配备一个线程来响应键盘输入,这种做法并不符合多线程系统的特长。键盘输入通常由操作系统统一管理(如通过中断或事件驱动机制),驱动层应集中处理输入事件再分发给相关应用。为每个应用单独配备线程会导致线程数量过多,增加上下文切换开销和系统复杂度,反而降低效率,因此这不是多线程的优势所在。
D选项描述基于GUI的debugger使用不同线程处理用户输入、计算和跟踪等操作,这体现了多线程在改善响应性方面的特长。通过将耗时任务与用户界面分离,可以避免界面冻结,提升用户体验,是多线程在交互式应用中的合理运用。
综上所述,C选项中的方法并非多线程系统的特长,因为它可能引入不必要的资源消耗和设计低效。
25
对计型信号量 S 执行 V 操作后,下列选项中错误的是( )。
Ⅰ. 当 S.value≤0 时,唤醒一个阻塞队列进程
Ⅱ. 只有当 S.value<0 时,唤醒一个阻塞队列进程
Ⅲ. 当 S.value<=0 时,唤醒一个就绪队列进程;当 S.value>0 时,系统不做额外操作
【解析】 在计型信号量的V操作中,首先将S.value加1,然后判断S.value的值。若S.value小于等于0,说明之前有进程因资源不足而阻塞,此时应从阻塞队列中唤醒一个进程,并将其移至就绪队列;若S.value大于0,则无需进行唤醒操作。
对于选项Ⅰ:当S.value≤0时,确实需要唤醒一个阻塞队列进程,因此该选项正确。
对于选项Ⅱ:它强调“只有”当S.value<0时才唤醒,但标准V操作在S.value=0时同样会唤醒进程(因为加1前S.value为-1,表示有进程阻塞),因此该选项错误。
对于选项Ⅲ:V操作唤醒的是阻塞队列中的进程,而非就绪队列中的进程。就绪队列中的进程已处于就绪状态,无需唤醒,因此该选项错误。
综上,错误的选项是Ⅱ和Ⅲ,对应答案D。
26
死锁与安全状态的关系是( )。
【解析】 死锁状态是指系统中多个进程因竞争资源而相互等待,导致所有进程都无法继续执行的状态。安全状态则是指系统存在至少一个安全序列,能够按照该序列为所有进程分配资源并确保它们顺利完成,从而避免死锁。
分析选项:A项错误,因为死锁状态意味着系统已无法找到安全序列,与安全状态的定义相悖,不可能是安全状态。B项表述不准确,安全状态本身并不直接等同于死锁状态;虽然系统从安全状态出发,若资源分配不当可能进入不安全状态并最终导致死锁,但安全状态不会直接“成为”死锁状态。C项错误,不安全状态仅表示系统可能无法避免死锁,但并非一定已陷入死锁;例如,系统可能处于不安全状态但仍可通过合适的资源分配避免死锁。D项正确,因为死锁发生时,系统必定不存在任何安全序列,因此死锁状态一定是不安全状态,这是死锁与安全状态之间的基本关系。
27
利用死锁定理简化下列进程资源图,则处于死锁状态的是( )。

【解析】根据死锁定理,首先需要找出既不阻塞又不是孤点的进程。对于Ⅰ图,由于 R2 资源已经分配了 2 个,还剩余一个空闲 R2,可以满足进程 P2 的需求,所以 P2 是这样的进程。P2 运行结束后,释放一个 R1 资源和两个 R2 资源,可以满足 P1 进程的需求,从而系统的资源分配图可以完全简化,不是处于死锁状态。而对于Ⅱ图,P1 需要 R1 资源,但是唯一的一个 R1 资源已经分配给 P2;同样,P2 需要 R4 资源,而 R4 资源也只有一个且已经分配给了 P3;而 P3 还需要一个 R2 资源,但是两个 R2 资源都已经分配完毕了,所以 P1,P2,P3 都处于阻塞状态,系统中不存在既不阻塞又不是孤点的进程,所以系统Ⅱ处于死锁状态。
注意:在进程资源图中,P->R 表示进程正在请求资源,若 R->P,表示资源已被分配给进程(资源只能是被动的)
28
在虚拟分页存储管理系统中,若进程访问的页面不在主存,且主存中没有可用的空闲帧时,系统正确的处理顺序为( )。
【解析】
在虚拟分页存储管理系统中,当进程访问的页面不在主存时,会首先触发缺页中断,这是处理流程的起点。由于主存中没有可用的空闲帧,系统无法直接调入新页面,必须通过页面置换来腾出空间。因此,在缺页中断发生后,系统需要决定淘汰哪个页面(即选择置换页),然后将淘汰的页面调出到磁盘(若被修改则需写回),最后才能将所需的页面从磁盘调入主存中腾出的帧。
选项C的顺序“缺页中断→决定淘汰页→页面调出→页面调入”符合这一逻辑,而其他选项或颠倒了中断触发时机,或在无空闲帧时错误地先执行页面调入,因此不正确。
29
在文件系统中,“Open” 系统调用的主要功能是( )。
【解析】
“Open”系统调用的主要功能是建立进程与文件之间的连接,为后续读写操作做准备。它并不直接读取文件内容,而是通过解析文件路径、检查权限等步骤,将文件的控制信息(如inode或文件控制块)从外存读入内存,以便操作系统快速管理文件状态和访问权限。
选项A描述的是“read”调用的功能;选项C中FAT表是文件系统整体结构的一部分,通常在挂载时缓存,而非每次打开文件时单独读取;选项D的超级块包含文件系统全局信息,也是在挂载时加载。因此,只有B准确反映了“Open”的核心作用。
30
下列关于文件系统的说法中,正确的是( )。
【解析】 本题考查文件系统的多个知识点。文件系统使用文件名进行管理,也实现了文件名到物理地址的转换,A 错误。在多级目录结构中,从根目录到任何数据文件都只有一条唯一的路径,该路径从树根开始,把全部目录文件名和文件名依次用“/”连接起来,即构成该数据文件的路径名。B 的说法不准确,对文件的访问只需通过路径名即可。文件被划分的物理块的大小是固定的,通常和内存管理中的页面大小一致,C 错误。逻辑记录是文件中按信息在逻辑上的独立含义来划分的信息单位,它是对文件进行存取操作的基本单位,D 正确。
31
一个交叉存放信息的磁盘,信息存放方式如图所示,磁盘旋转方向为逆时针方向。每个磁道有 8 个扇区,每个扇区 512 字节,旋转速度为 3000 转/分。假定磁头已在读取信息的磁道上,0 扇区转到磁头下需要 1/2 转,且设备对应的控制器不能同时进行输入/输出,在数据从控制器传送至内存的这段时间内,从磁头下通过的扇区数为 2,问依次读取一个磁道上所有的扇区所需时间和该磁盘的数据传输速度依次是( )。
【解析】
本题考查磁盘读取的速度。首先注意磁盘旋转方向为逆时针方向,对于磁头和磁盘的运动实际上是磁头不动,磁盘转的,而磁盘逆时针方向旋转按扇区来看即 0、3、6……这个顺序。而每个号码连续的扇区正好相隔 2 个扇区,即是数据从控制器传送到内存的时间,所以相当于磁头连续工作。
由题中条件知,旋转速度为 3000 转/分 = 50 转/秒,即 20ms/转。
读一个扇区需要时间为 20/8 = 2.5ms。
读一个扇区并将扇区数据送入内存需要时间为 2.5 × 3 = 7.5ms。
读出一个磁道上的所有扇区需要时间为 20/2 + 8 × 7.5 = 70ms = 0.07s。
每磁道数据量为 8 × 512 = 4KB。
数据传输速度为 4 × 1024 / (1000 × 0.07 s) = 58.5KB/s。
故依次读出一个磁道上的所有扇区需要 0.07s,其数据传输速度为 58.5KB/s。
注意:硬盘传送速率中的 K 是按 1000 来计算的,并不是 1024。
32
CPU 输出数据的速度远高于打印机的打印速度,为解决这一矛盾,可采用的技术是( )。
【解析】 CPU输出数据的速度远高于打印机的打印速度,这种速度不匹配会导致CPU经常处于等待状态,降低系统整体效率。为了解决这一矛盾,缓冲技术被广泛应用。
缓冲技术通过在内存中设置一个缓冲区,CPU将数据快速输出到缓冲区中暂存,然后打印机可以按照自己的较慢速度从缓冲区中读取数据。这样,CPU在输出数据后无需直接等待打印机完成,可以继续执行其他任务,从而平滑了速度差异,提高了资源利用率和系统吞吐量。
其他选项中,并行技术主要用于同时执行多个任务或使用多个设备,但在此场景下,单个CPU与单个打印机的速度矛盾并未直接通过并行解决;通道技术是一种I/O管理方式,通过专用处理器处理I/O操作以减少CPU干预,但它更侧重于优化I/O流程,而非专门针对速度不匹配;堆存技术并非标准计算机术语,可能指堆内存管理或其他存储方式,与解决速度矛盾无关。因此,缓冲技术是最直接且有效的选择。
33
在不同网络结点的对等层之间通信需要的是( )。
【解析】 在不同网络结点的对等层之间通信需要使用对等层协议。对等层协议定义了同一层在不同节点上的实体之间通信的规则、格式和语义,例如OSI模型或TCP/IP模型中各层的协议(如传输层的TCP、网络层的IP),确保对等层实体能够正确交换信息并实现网络功能。
其他选项中,模块接口通常指软件内部组件之间的调用接口,不直接涉及网络对等层通信;服务原语是同一节点内相邻层之间交互的接口,用于上层调用下层提供的服务,属于层间通信而非对等层通信;电信号是物理层传输的介质信号(如电压、光信号),属于通信的物理实现基础,但不是对等层通信所需的逻辑机制。
34
下列叙述中,正确的是( )。
【解析】
选项A错误,因为电路交换确实是物理线路交换,但虚电路交换是逻辑连接,且一条物理线路可以支持多条虚电路(即多个逻辑连接),而非仅一条。
选项B不准确,虚电路分为永久虚电路(PVC)和交换虚电路(SVC),其中SVC是临时连接,会话结束释放,但PVC是永久性的,不随会话结束释放。
选项C错误,数据报服务不提供可靠传输,也不保证分组有序到达,分组可能丢失、重复或乱序。
选项D正确,在数据报服务中,每个分组独立路由,必须携带源地址和目的地址,以便网络设备进行转发。
35
以太网中,在第 5 次碰撞之后,一个节点选择的 r 值为 4 的概率是( )。
【解析】在以太网中,采用截断二进制指数退避算法处理碰撞。当节点第 次发生碰撞时,它会从区间 中随机选择一个整数 ,其中 。这意味着 随碰撞次数增加而增大,但最大为 。
对于第 次碰撞, ,因此 的取值范围是 到 到 ,共有 个可能的整数值。由于选择是均匀随机的,每个值被选中的概率相等。
因此,选择 的概率是 。对应选项 C。
36
以太网中如果发生介质访问冲突,按照二进制指数后退算法决定下一次重发的时间,使用二进制后退算法的好处是( )。
【解析】
二进制指数后退算法在以太网中用于处理介质访问冲突。当冲突发生时,发送方会根据冲突次数 k,从 0 到 2^k - 1 个时间槽中随机选择一个值作为退避时间。随着冲突次数增加,退避时间区间呈指数增长,这意味着在网络负载较高、冲突频繁时,发送方会等待更长时间再重发,从而降低再次冲突的概率。
这种设计使算法能够动态适应网络负载:负载越重,冲突越多,退避时间越长,有效缓解拥塞。因此,算法的主要好处是考虑了网络负载对冲突的影响。选项 A 和 B 并非算法的核心优势;选项 D 不准确,因为算法参数(如时间槽)与网络规模(如传播延迟)相关,但算法重点在于负载自适应。
37
在某个子网中给四台主机分配 IP 地址(子网掩码均为 255.255.255.224),其中一台因 IP 地址分配不当而存在通信故障。这一台主机的 IP 地址是( )。
【解析】 子网掩码 255.255.255.224 对应 CIDR /27,块大小为 32。通过计算每个 IP 地址的网络地址:
- 200.10.1.60 与子网掩码 AND 运算后得到网络地址 200.10.1.32;
- 200.10.1.65、200.10.1.70 和 200.10.1.75 的网络地址均为 200.10.1.64。
四台主机应属于同一子网才能直接通信,但 200.10.1.60 的网络地址与其他三台不同,因此该主机因 IP 地址分配不当而存在通信故障。
38
在 IP 分组传输的过程中(不包括 NAT 情况),以下 IP 分组头中的域保持不变的是( )。
【解析】 在 IP 分组传输过程中(不考虑 NAT),IP 头部的某些字段会因网络操作而变化。具体分析如下:
- 总长度(A):该字段表示整个 IP 数据报的长度,如果分组在传输中遇到较小 MTU 的网络而被分片,每个分片的总长度将重新计算,因此该字段可能改变。
- 首部校验和(B):该字段用于验证头部完整性。当分组经过路由器时,生存时间(TTL)字段减少,导致头部内容变化,路由器必须重新计算校验和,因此该字段会更新。
- 生存时间(C):该字段每经过一个路由器就减 1,以防止分组无限循环,因此它在传输中不断变化。
- 源 IP 地址(D):该字段标识发送方的 IP 地址,在端到端传输中,除非经过 NAT 等地址转换设备,否则不会改变。题目明确排除 NAT 情况,因此源 IP 地址保持不变。
综上,只有源 IP 地址在传输过程中保持不变。
39
信道带宽为 1Gbps,端到端时延为 10ms,TCP 的发送窗口为 65535B,则可能达到的最大吞吐量是( )。
【解析】 首先,计算 TCP 发送窗口对应的比特数。窗口大小为 65535 字节,每字节 8 比特,因此窗口比特数为 65535 × 8 = 524280 比特。
其次,确定往返时间(RTT)。题目中给出的“端到端时延”通常指的是单向传播时延,在计算 TCP 吞吐量时需使用往返时间,故 RTT = 2 × 端到端时延 = 2 × 10ms = 20ms = 0.02 秒。
然后,计算在窗口限制下的最大吞吐量。吞吐量公式为窗口大小除以 RTT,即 524280 比特 / 0.02 秒 = 26.214 × 10⁶ bps = 26.214 Mbps,约等于 26.2 Mbps。
最后,比较带宽限制。信道带宽为 1 Gbps(即 1000 Mbps),远高于窗口限制的 26.2 Mbps,因此实际最大吞吐量受限于发送窗口,结果为 26.2 Mbps,对应选项 C。
40
域名系统 DNS 的组成包括( )。
Ⅰ. 域名空间
Ⅱ. 分布式数据库
Ⅲ. 域名服务器
Ⅳ. 从内部 IP 地址到外部 IP 地址的翻译程序
【解析】 DNS(域名系统)的核心功能是将域名解析为IP地址,其组成包括域名空间、分布式数据库和域名服务器。域名空间(Ⅰ)定义了域名的层次结构;分布式数据库(Ⅱ)存储了全球的域名与IP地址映射关系,并以分布式方式部署;域名服务器(Ⅲ)是运行DNS服务的实体,负责处理查询请求。
选项Ⅳ描述的是“从内部IP地址到外部IP地址的翻译程序”,这实际指的是NAT(网络地址转换)技术,用于在私有网络和公共网络之间转换IP地址,属于网络层功能,与DNS的域名解析无关,因此不属于DNS的组成部分。故正确答案为B,即Ⅰ、Ⅱ和Ⅲ。
解答题
第 41~47 题,共 70 分。
41
(10 分)下面有一种称为“破圈法”的求解最小生成树的方法:所谓“破圈法”就是“任取一圈,去掉圈上权最大的边”,反复执行这一步骤,直到没有圈为止。
试判断这种方法是否正确。如果正确,请说明理由;如果不正确,举出反例(注:圈就是回路)。
42
(12 分)假设二叉树采用二叉链存储结构存储,设计一个算法,求出根结点到给定某结点之间的路径,要求:
(1)给出算法的基本设计思想。
(2)写出二叉树采用的存储结构代码。
(3)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。
43
(12 分)以下是计算两个向量点积的程序段:
float Dotproduct(float x[8], float y[8]) {
float sum = 0.0;
int i;
for (i = 0; i < 8; i++) {
sum += x[i] * y[i];
}
return sum;
}
请回答下列问题:
(1)请分析访问数组 x 和 y 时的时间局部性和空间局部性?
(2)假设数据 Cache 采用直接映射方式,Cache 容量为 32 字节,每个主存块大小为 16 字节;编译器将变量 sum 和 i 分配在寄存器中,内存按字节编址,数组 x 存放在 0000 0040H 开始的 32 字节的连续存储区中,数组 y 则紧跟在 x 后进行存放。该程序数据访问的命中率是多少?要求说明每次访问时 Cache 的命中情况。
(3)将上述(2)中的数据 Cache 改用 2-路组相联映射方式,块大小改为 8 字节,其他条件不变,则该程序数据访问的命中率是多少?
(4)在上述(2)中条件不变的情况下,将数组 x 定义为 float[12],则数据访问的命中率是多少?
44
(12 分)假定硬盘传输数据以 32 位的字为单位,传输速率为 1MB/s。CPU 的时钟频率为 50MHz。
(1)采用程序查询的输入输出方式,假定不能使数据丢失,求传输程序运行周期占用 CPU 的时间比率。
(2)采用中断方法进行控制,每次传输的开销(包括中断处理)为 100 个时钟周期。求 CPU 为传输硬盘数据花费的时间比率。
(3)采用 DMA 控制器进行输入输出操作,假定 DMA 的启动操作需要 1000 个时钟周期,DMA 完成时处理中断需要 500 个时钟周期。如果平均传输的数据长度为 4KB(此处,1MB=1000KB),问在硬盘工作的一次传输中,处理器将用多少时间比重进行输入输出操作,忽略 DMA 申请使用总线的影响。
45
(7 分)一个磁盘机有 19,456 个柱面,16 个读写磁头,并且每个磁道有 63 个扇区。磁盘以 5400rpm 的速度旋转。试问:
(1)如果磁盘的平均寻道时间是 10ms,那么读一个扇区的平均时间是多少?
(2)在一个请求分页系统中,若将该磁盘用作交换设备,而且页面大小和扇区的大小相同。读入一个换出页的平均时间和上面计算的相同。假设如果一个页必须被换出,则寻找换入页的平均寻道时间将只有 1ms,那么传输这两个页的平均时间是多少?
(3)如果在该系统中打开的文件数目远远多于驱动器的数目时,对磁盘机有什么影响?
46
(9 分)一个进程分配给 4 个页帧(下面的所有数字均为十进制数,每一项都是从 0 开始计数的)。最后一次把一页装入到一个页帧的时间、最后一次访问页帧中的页的时间、每个页帧中的虚页号以及每个页帧的访问位(R)和修改位(M)如下表所示(时间均为从进程开始到该事件之前的时钟值,而不是从事件发生到当前的时钟值)。
| 虚页号 | 页帧 | 加载时间 | 访问时间 | R 位 | M 位 |
|---|---|---|---|---|---|
| 2 | 0 | 60 | 161 | 0 | 1 |
| 1 | 1 | 130 | 160 | 0 | 0 |
| 0 | 2 | 26 | 162 | 1 | 0 |
| 3 | 3 | 20 | 163 | 1 | 1 |
当虚页 4 发生缺页时,使用下列存储器管理策略,哪一个页帧将用于置换?解释每种情况的原因。
(1)FIFO(先进先出)算法。
(2)LRU(最近最少使用)算法。
(3)改进的 Clock 算法。
(4)在缺页之前给定上述的存储器状态,考虑下面的虚页访问串:
4, 0, 0, 0, 2, 4, 2, 1, 0, 3, 2
如果使用 LRU 页面置换算法,分给 4 个页帧,会发生多少缺页?
47
(9 分)TCP 的拥塞窗口 cwnd 大小与传输轮次 n 的关系如下所示:
| cwnd | 1 | 2 | 4 | 8 | 16 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| cwnd | 40 | 41 | 42 | 21 | 22 | 23 | 24 | 25 | 26 | 1 | 2 | 4 | 8 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| n | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
(1)画出 TCP 的拥塞窗口与传输轮次的关系曲线。
(2)分别指明 TCP 工作在慢开始阶段和拥塞避免阶段的时间间隔。
(3)在第 16 轮次和第 22 轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?
(4)在第 1 轮次、第 18 轮次和第 24 轮次发送时,门限 ssthresh 分别被设置为多大?
(5)在第几轮次发送出第 70 个报文段?
(6)假定在第 26 轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口 cwnd 和门限 ssthresh 应设置为多大?
2 - 模拟卷 2
选择题
一、单项选择题:第1~40小题,每小题2分,共80分。下列每题给出的四个选项中,只有一个选项最符合试题要求。
1
设 是描述问题规模的正整数,下列程序片段的时间复杂度是( )。
y = 0;
while (n >= (y+1) * (y+1))
y++;
【解析】
程序片段中,变量 y 从 0 开始,每次循环迭代 y 增加 1。循环条件为 ,即 时循环继续。因此,循环执行的次数取决于满足该条件的最大整数 y。
设循环迭代了 k 次,则 k 满足 且 ,这意味着 k 是 。循环迭代次数与 成正比,故时间复杂度为 。
其他选项中, 、 和 均与迭代次数不符。
2
循环队列用数组 A[0...m-1] 存放其元素值,头尾指针分别为 front 和 rear,front 指向队头元素,rear 指向队尾元素的下一个元素,其移动按数组下标增大的方向进行(rear != m-1 时),则当前队列中的元素个数是( )。
【解析】在循环队列中,front 指针指向队头元素,rear 指针指向队尾元素的下一个位置。队列中的元素从 front 开始,到 rear 的前一个位置结束。由于数组是循环的:
- 当
rear ≥ front时,元素个数为rear − front; - 当
rear < front时,表示rear已从数组末尾绕回到开头,此时元素个数为(rear + m) − front,即rear − front + m。
综合这两种情况,元素个数可统一表示为(rear − front + m) % m,
该公式通过取模运算确保结果始终为非负整数且正确反映队列长度。
其他选项中:
- B 项
(rear − front + 1) % m在队列为空(front == rear)时会得到 1,而非 0; - C 项
rear − front − 1在空队列时得到 −1,且不适用于循环情况; - D 项
rear − front在rear < front时会产生负数,未考虑循环特性。
因此,只有 A 项适用于所有情况。
3
将 5 个字母 “ooops” 按此顺序进栈,则有( )种不同的出栈顺序可以仍然得到 “ooops”。
【解析】 将5个字母“ooops”按顺序进栈,即进栈序列为o、o、o、p、s。要求出栈序列仍然为“ooops”,即出栈顺序为o、o、o、p、s。由于三个o相同,不同的出栈顺序指的是三个o的个体出栈顺序不同,但最终输出的字符串相同。
设三个o分别为A、B、C(按进栈顺序),p为D,s为E。出栈序列必须满足前三个为A、B、C的某种排列,第四个为D,第五个为E。三个o的排列共有6种:ABC、ACB、BAC、BCA、CAB、CBA。需要检查每种排列是否满足栈的合法性(即能否通过合理的进栈和出栈操作实现)。
- ABCDE:合法,可每进栈一个元素后立即出栈。
- ACBDE:合法,A进栈后出栈,B进栈后不出,C进栈后出栈C,再出栈B。
- BACDE:合法,A进栈后不出,B进栈后出栈B,再出栈A,然后C、D、E依次进栈出栈。
- BCADE:合法,A进栈后不出,B进栈后出栈B,C进栈后出栈C,再出栈A。
- CABDE:不合法,因为C首先出栈后,栈中剩余A和B(B为栈顶),下一个需要出栈A,但A不在栈顶,无法直接出栈。
- CBADE:合法,A进栈后不出,B进栈后不出,C进栈后出栈C,再出栈B,最后出栈A。
因此,只有5种合法的出栈顺序,对应选项C。
4
设高度为 100 的二叉树上只有度为 0 和度为 2 的结点,则此类二叉树中所包含的结点数最少为( )。
【解析】 首先,由题意可知,二叉树中只有度为0和度为2的结点,根据二叉树性质,有 (其中 为叶子结点数, 为度为2的结点数),因此总结点数 ,即 必为奇数,排除选项A和D。
其次,考虑最小结点数的情况。高度为100通常指树的层数为100(根结点在第1层)。为了使结点数最少,树应形成一种“偏斜”形状:每个内部结点(度为2)有一个子结点为内部结点延续高度,另一个子结点为叶子结点。这样,从根到最深叶子路径上的结点均为内部结点(除最深叶子外),且每个内部结点附带一个不在该路径上的叶子结点。
具体计算:设高度为 (层数),则路径上有 个结点,其中前 层为内部结点,第 层为叶子结点。内部结点数为 ,每个内部结点附带一个叶子结点,故附加叶子结点数为 ,加上路径上的叶子结点1个,总叶子结点数为 。因此总结点数 。代入 ,得 。
若高度定义为边数,则最小结点数为 ,但结合常见教材定义(高度指层数)及选项奇偶性,本题应取层数定义,故最小结点数为199。
5
由某种序列可以唯一地确定一棵二叉树,不能唯一地确定一棵二叉树是( )。
【解析】 在二叉树的遍历序列中,不同的序列组合对二叉树结构的确定能力不同。已知先序序列和中序序列可以唯一确定一棵二叉树,因为先序序列提供根节点信息,中序序列区分左右子树;同样,后序序列和中序序列也可以唯一确定二叉树,原理类似。
中序序列和层序序列也能唯一确定二叉树,因为层序序列给出层次顺序,结合中序序列的左右子树信息,可以通过递归方式重建二叉树。
然而,先序序列和层序序列不能唯一确定二叉树。例如,考虑只有两个节点A和B的二叉树:若B是A的左子节点,先序序列为A、B,层序序列为A、B;若B是A的右子节点,先序序列同样为A、B,层序序列也为A、B。这两个不同的二叉树产生了相同的先序和层序序列,因此无法唯一确定结构。
因此,不能唯一确定二叉树的选项是D。
6
在含有 15 个结点的平衡二叉树上,查找关键字为 28(存在该结点)的结点,则依次比较的关键字有可能是( )。
【解析】 在平衡二叉树(如AVL树)中查找结点时,比较序列必须遵循二叉搜索树的性质:若目标值小于当前结点值,则进入左子树;若大于,则进入右子树。同时,树有15个结点且平衡,高度约为 log₂15≈4,因此查找路径上的结点数通常不超过4个(对应高度为3)。
- 选项A:比较30后,28<30应进入左子树,但下一个比较36>30,不可能进入左子树,违反二叉搜索树性质。
- 选项B:比较38后,28<38应进入左子树,但下一个比较48>38,不可能进入左子树,同样违反性质。
- 选项C:序列48,18,38,28符合二叉搜索树性质:28<48进入左子树;28>18进入右子树;28<38进入左子树;找到28。路径长度为4,对应树高度为3,对于15个结点的平衡二叉树是可能的,可以通过调整其他结点保持平衡。
- 选项D:序列60,20,50,40,38,28虽符合二叉搜索树性质,但路径长度为6,对应树高度至少为5。对于15个结点的平衡二叉树,高度为5至少需要20个结点(如AVL树的最小结点数要求),因此不可能在保持平衡的前提下存在这样的查找路径。
综上,只有选项C可能。
7
对于一组权值都相等的 16 个字母,构造相应的哈夫曼树,这棵哈夫曼树是一棵( )。
【解析】 哈夫曼树的构造过程中,每次合并都是将两个权值最小的节点合并为一个新的内部节点,因此每个内部节点都恰好有两个子节点,而叶子节点则没有子节点。根据二叉树的定义,如果一棵二叉树中的每个节点要么是叶子节点(无子节点),要么是有两个子节点的内部节点,那么这棵树称为满二叉树(或称严格二叉树)。因此,无论权值是否相等,哈夫曼树总是满足这一条件,它必然是一棵满二叉树。
对于本题中权值相等的16个字母,构造出的哈夫曼树同样符合这一性质:每个内部节点都有两个子节点,所以它是一棵满二叉树。虽然权值相等时,通过特定的合并顺序可能使树的结构更加平衡(例如形成完全二叉树),但满二叉树这一性质是始终成立的。其他选项如完全二叉树或一般二叉树不一定必然满足,而满二叉树则是哈夫曼树的固有特征,故选项C正确。
8
下列关于 B-树和 B+树的叙述中,不正确的是( )。
【解析】 在B-树和B+树的比较中,B+树由于所有数据存储在叶子节点且叶子节点通过指针链接成有序链表,可以高效地进行顺序查找(即范围查询或全表扫描)。而B-树的数据分布在整个树的节点中,叶子节点之间没有直接链接,进行顺序查找时需要从根节点开始反复进行树搜索,效率较低。因此,B-树不能像B+树那样有效地支持顺序查找,选项A的叙述不正确。
选项B正确,因为B-树和B+树都是平衡的多路搜索树,所有叶子节点处于同一层,保持了树的平衡性。选项C正确,两者都支持基于键值的随机查找,查找时间复杂度与树高相关,效率较高。选项D正确,B-树和B+树在数据库和文件系统中被广泛用作索引结构,以优化数据存取性能。
9
对一组数据(25,84,21,47,15,27,68,35,20)进行排序,前三趟的排序结果如下:
第一趟:20,15,21,25,47,27,68,35,84
第二趟:15,20,21,25,35,27,47,68,84
第三趟:15,20,21,25,27,35,47,68,84
则所采用的排序方法是( )。
【解析】 观察初始序列(25,84,21,47,15,27,68,35,20)和前三趟结果:第一趟后25位于序列中间,其左侧元素(20,15,21)均小于25,右侧元素(47,27,68,35,84)均大于25,这表明25在第一趟后已到达其最终排序位置,符合快速排序“选取基准并分区”的特点。第二趟和第三趟继续对左右子序列进行类似分区操作,逐步使整个序列有序。选择排序每趟应将最小元素置于前端,但第一趟结果中最小元素15不在首位,故排除;希尔排序基于增量分组排序,结果通常不每趟使基准元素就位;归并排序通过合并有序子序列实现,早期阶段元素不会快速定位到最终位置。因此,所给过程与快速排序一致。
10
对一组数据(84,47,15,21,25)排序,数据在排序的过程中的变化如下:
(1) 84 47 15 21 25
(2) 25 47 15 21 84
(3) 21 25 15 47 84
则所采用的排序方法是( )。
【解析】 观察排序过程中的变化:初始序列为 (84,47,15,21,25)。第一步变为 (25,47,15,21,84),这类似于快速排序中选择第一个元素 84 作为枢轴进行分区的结果:将小于 84 的元素移至左边,大于的移至右边,最终 84 被放置到正确位置(末尾)。第二步变为 (21,25,15,47,84),这对应于对左子序列 (25,47,15,21) 进行快速排序的分区操作,选择 25 作为枢轴,经过交换和调整后得到此序列。这些步骤符合快速排序的分区递归特性。
其他排序方法不符:冒泡排序每趟通过相邻交换将最大元素移至末尾,第一趟后应为 (47,15,21,25,84),与第二步不同;插入排序逐步构建有序序列,不会直接将 84 移至末尾;堆排序需先建堆再交换调整,但第二步到第三步的变化不似堆调整过程。因此,所选方法为快速排序。
11
下列排序方法中,时间性能与待排序记录的初始状态无关的是( )。
【解析】 排序算法的时间性能是否与初始状态相关,取决于其时间复杂度在不同输入情况下的变化。
插入排序在最好情况下(已排序)时间复杂度为
,最坏和平均为
,因此与初始状态有关;快速排序的平均时间复杂度为
,但最坏情况下(如已排序数组且枢轴选择不当时)会退化到
,也与初始状态有关。
归并排序采用分治策略,无论输入数据是否有序,其时间复杂度稳定为 ,与初始状态无关;选择排序始终通过遍历未排序部分寻找最小(或最大)元素,其最好、最坏和平均时间复杂度均为 ,因此也与初始状态无关。
选项 C 中的选择排序和归并排序均满足时间性能与初始状态无关的条件,而其他选项至少包含一种与初始状态相关的算法,故 C 为正确答案。
12
对汇编语言程序员来说,以下部件中不透明的是( )。
I. 指令缓冲器
II. 移位器
III. 通用寄存器
IV. 中断寄存器
V. 乘法器
VI. 先行进位链
【解析】 在计算机体系结构中,对汇编语言程序员“不透明”的部件是指程序员需要直接了解或操作的部件,而“透明”的部件则由硬件自动管理,程序员无需关心其具体实现。
对于各个部件的分析如下:
- I. 指令缓冲器:用于缓存指令,由硬件自动管理,程序员不直接控制,因此是透明的。
- II. 移位器:执行移位操作,程序员通过移位指令(如SHL、SHR)使用,但移位器内部实现不可见,因此是透明的。
- III. 通用寄存器:程序员在指令中直接指定寄存器来存储数据和进行计算,是汇编编程的基础,因此是不透明的。
- IV. 中断寄存器:用于处理中断,程序员需要配置中断处理程序、设置中断向量等,在系统编程中直接操作,因此是不透明的。
- V. 乘法器:执行乘法运算,程序员通过乘法指令(如MUL)使用,但乘法器本身是硬件单元,内部实现不可见,因此是透明的。
- VI. 先行进位链:用于加速加法器,完全是硬件细节,程序员无需关心,因此是透明的。
综上所述,不透明的部件是III(通用寄存器)和IV(中断寄存器),对应选项C。
13
一个 8 位的二进制整数,若采用补码表示,且由 3 个“1”和 5 个“0”组成,则最小值为( )。
【解析】 在 8 位补码表示中,最高位是符号位:0 表示正数,1 表示负数。由于要求最小值,该数必为负数,因此符号位必须为 1。已知该数由 3 个“1”和 5 个“0”组成,因此符号位占用一个“1”,剩余 7 位由 2 个“1”和 5 个“0”组成。
补码表示中,负数的值计算公式为:
要使得数值最小,需要剩余 7 位的无符号值尽可能小。
剩余 7 位中,无符号值最小的情况是将两个“1”放在最低位(即第 0 位和第 1 位),此时剩余 7 位二进制为 0000011,对应的无符号值为 3。因此整个 8 位二进制数为 10000011。
计算数值:
即选项 C。
验证其他选项:
-127的补码为10000001,只有 2 个“1”,不符合条件;-32的补码为11100000,虽符合 3 个“1”和 5 个“0”,但值为-32,大于-125;-3的补码为11111101,有 7 个“1”,不符合条件。
因此,最小值为 -125。
14
单精度 IEEE754 标准规格化的 float 类型所能表示的最接近 0 的负数是( )。
【解析】
单精度 IEEE754 浮点数采用 32 位表示,包含 1 位符号位、8 位指数位和 23 位尾数位。
规格化数的指数位不全为 0 也不全为 1,实际指数
(其中
为指数位的无符号值),范围在
到
之间;尾数部分隐含最高位 1,即实际尾数
(
为尾数位表示的小数)。规格化负数的值为:
最接近 0 的负数需绝对值最小,因此应取最小指数
(对应
)和最小尾数
(对应
)。代入公式得:
即选项 A。
选项 B 和 C 涉及因子 ,对应于非规格化数(指数 时尾数无隐含 1),不符合本题要求的规格化数条件;选项 D 的指数 低于规格化指数最小值 ,不符合规格化规则。因此,只有 A 正确。
15
下列关于 DRAM 和 SRAM 的说法中,错误的是( )。
I. SRAM 不是易失性存储器,而 DRAM 是易失性存储器
II. DRAM 比 SRAM 集成度更高,因此读写速度也更快
III. 主存一般由 DRAM 构成,而高速缓存一般由 SRAM 构成
IV. 与 SRAM 相比,DRAM 由于需要刷新,所以功耗较高
【解析】本题考查 SRAM 和 DRAM 的区别。SRAM 和 DRAM 的差别在于 DRAM 时常需要刷新,但是 SRAM 和 DRAM 都属于易失性存储器,掉电就会丢失,I 错误。SRAM 的集成度虽然更低,但速度更快,因此通常用于高速缓存 Cache,而 DRAM 则是读写速度偏慢,集成度更高,因此通常用于计算机内存,II 错误。主存可以用 SRAM 实现,只是成本高且容量相对小,III 错误。和 SRAM 相比,DRAM 成本低、功耗低、但需要刷新,IV 错误。
注意:SRAM 和 DRAM 的特点见下表。
| RAM 类型 | 特点 |
|---|---|
| SRAM | 非破坏性读出,不需要刷新。断电信息即丢失,属易失性存储器。存取速度快,但集成度低,功耗较大,常用于 Cache。 |
| DRAM | 破坏性读出,需要定期刷新。断电信息即丢失,属易失性存储器。集成性高、位价低、容量大和功耗低。存取速度比 SRAM 慢,常用于大容量的主存系统。 |
16
某计算机的存储系统由 Cache-主存系统构成,Cache 的存取周期为 10ns,主存的存取周期为 50ns。在 CPU 执行一段程序时,Cache 完成存取的次数为 4800 次,主存完成的存取次数为 200 次,该 Cache-主存系统的效率是( )。(设 Cache 和主存不能同时访问)
首先,计算总存取次数:高速缓存完成 4800 次,主存完成 200 次,总次数为
命中率
由于高速缓存和主存不能同时访问,当高速缓存命中时,访问时间仅为高速缓存的存取周期 10 ns;当高速缓存未命中时,需要先访问高速缓存(耗时 10 ns),发现未命中后再访问主存(耗时 50 ns),总时间为
平均访问时间
代入数值
也可使用简化公式
两种公式结果一致,因为
效率
定义为高速缓存存取周期与平均访问时间的比值,即
对应选项 A。
17
在运算类的零地址指令中,它的操作数来自( )。
【解析】 零地址指令在指令格式中没有显式的地址字段,操作数的来源是隐含的。对于运算类的零地址指令,通常用于堆栈型计算机架构。在这种架构中,操作数存储在堆栈的顶部,执行运算时,指令会从堆栈中弹出所需操作数。例如,加法指令会弹出栈顶和次栈顶的两个操作数进行相加,然后将结果压回堆栈。因此,运算类零地址指令的操作数直接来自栈顶和次栈顶。
选项A、B、C均不符合零地址指令的特点:A中的暂存器和总线常见于其他寻址方式;B中的寄存器通常对应一地址或二地址指令;C中的ALU是运算单元,而非操作数来源。只有D正确描述了零地址指令在堆栈架构下的操作数来源。
18
在微程序控制器中,以下说法正确的是( )。
I. 采用微程序控制方式的处理器称为微处理器
II. 每一条机器指令由一个微程序来解释执行
III. 在微指令的编码中,执行效率最低的是直接编码方式
IV. 水平型微指令能充分利用数据通路的并行结构
【解析】
首先分析每个说法的正确性:
说法 I 错误。采用微程序控制方式的处理器不一定称为微处理器,微处理器通常指中央处理单元的集成芯片,其控制方式可以是微程序控制或硬连线控制,因此该说法不准确。
说法 II 正确。在微程序控制器中,每一条机器指令确实对应一个微程序,由该微程序中的微指令序列来解释和执行指令,这是微程序控制的基本原理。
说法 III 错误。微指令的编码方式中,直接编码(直接控制)方式每个控制位直接对应一个控制信号,无需解码,并行性高、执行速度快,因此执行效率较高,而不是最低。效率较低的方式通常是字段编码等需要解码的垂直型微指令。
说法 IV 正确。水平型微指令具有较长的微指令字,每个位或字段可直接控制数据通路的多个操作,允许在同一周期内发出多个控制信号,从而充分利用数据通路的并行结构。
综上,正确的说法是 II 和 IV,对应选项 B。
19
当微指令采用分段编码时,我们将互斥性微命令( )。
【解析】 在微指令的分段编码(也称为字段编码)设计中,微指令通常被划分为多个字段,每个字段控制一组相关的操作。互斥性微命令指的是那些不能在同一微周期内同时执行的微命令,例如对同一功能部件的不同操作。
为了确保这些互斥命令不会同时被激活,最有效的方法是将它们放置在同一个字段中。因为同一字段内的微命令通过编码方式表示,一次只能选择一个值,从而自然实现了互斥性。而不同字段的微命令可以并行执行,因为它们控制的是系统中不同的、独立的部件。
选项B中的多级译码通常用于字段间接编码,以扩展编码空间,但并非处理互斥命令的直接方法。选项C和D则不符合分段编码的设计原则,可能导致控制冲突或资源浪费。因此,正确答案是A,即将互斥性微命令放在同一段中。
20
在下列各种情况下,最应采用异步传输方式的是( )。
【解析】 异步传输方式适用于设备之间速度差异较大或无需共享时钟信号的场景,它通过握手信号(如就绪和确认)来协调数据传输,能有效处理不同速度设备间的通信。
选项A中,I/O接口与打印机交换信息时,打印机作为典型的慢速外部设备,其工作速度远低于计算机内部总线,采用异步传输可以灵活适应速度不匹配,避免数据丢失或冲突。
其他选项则更适合同步传输:CPU与主存交换信息需要高速、稳定的时钟同步以保证效率;CPU和PCI总线交换信息通常基于同步时钟设计;选项D直接提及统一时序信号控制,属于典型的同步方式。因此,最应采用异步传输的是A。
21
CPU 响应中断时,保护两个关键的硬件状态是( )。
【解析】 CPU响应中断时,必须保存当前程序的执行现场,以便在中断处理结束后能准确恢复原程序的运行。两个最关键的硬件状态是程序计数器(PC)和程序状态字(PSW)。PC存储了下一条要执行的指令地址,保护PC能确保中断返回后继续执行原程序;PSW包含了处理器的状态标志(如条件码、中断使能位等),保护PSW能维持处理器的状态一致性。
其他选项中,IR(指令寄存器)存放当前指令,但中断响应时通常不保护它,因为中断处理更关注未来执行的地址和整体状态;AR(地址寄存器)用于内存寻址,也不是必须保护的核心状态。因此,选项A正确。
22
1K×8 位 ROM 芯片和 1K×8 位 RAM 芯片的引脚(含地址与数据)的总数分别是( )。
【解析】
对于 1K×8 位的 ROM 和 RAM 芯片,存储容量均为 1K 个字,每个字 8 位。
1K 等于 1024,因此地址线需要 10 根(因为 ),数据线需要 8 根。
地址与数据引脚的总数为 。
问题中“引脚(含地址与数据)的总数”通常指的是地址和数据引脚的总和,不包括控制引脚等其他引脚。
因此,无论是 ROM 还是 RAM,地址和数据引脚的总数都是 18,与选项 C 相符。
23
在操作系统中,以下只能在核心态下处理执行的指令是( )。
【解析】 在操作系统中,核心态(也称为内核态或特权态)与用户态是处理器的两种运行模式。核心态下可以执行所有指令,包括特权指令,而用户态下只能执行非特权指令,以防止用户程序直接访问系统资源或影响系统安全。
选项分析如下:
A. 读时钟:读取时钟值通常不是特权指令,用户程序可以通过非特权指令或系统调用来获取时间信息,因此可以在用户态下执行。
B. 寄存器清零:清零通用寄存器(如数据寄存器)是常见的非特权指令,用户程序可以自由操作自己的寄存器,无需切换到核心态。
C. 系统调用:系统调用是用户程序主动请求操作系统服务的机制。当执行系统调用指令(如陷阱指令)时,会触发处理器从用户态切换到核心态,由操作系统内核在核心态下处理该请求。因此,系统调用的处理过程只能在核心态下执行。
D. 取数:取数指令(如从内存加载数据)通常是非特权指令,用户程序在用户态下可以访问自己的内存空间。只有访问受保护的系统内存或执行特权操作时才需核心态。
综上,只有系统调用的处理必须在核心态下完成,故正确答案为C。
24
下列各种调度算法中,属于基于时间片的调度算法的是( )。
I. 时间片轮转法
II. 多级反馈队列调度算法
III. 抢占式调度算法
IV. FCFS(先来先服务)调度算法
V. 高响应比优先调度算法
【解析】 基于时间片的调度算法是指在调度过程中使用固定或可变的时间片来分配CPU时间,进程在时间片用完时会被抢占。下面对每个算法进行分析:
时间片轮转法是典型的基于时间片的调度算法,它为每个进程分配一个固定的时间片,时间片结束后进程被抢占并放回就绪队列末尾。多级反馈队列调度算法也属于基于时间片的算法,它使用多个队列,每个队列可能具有不同的时间片大小,进程在队列间移动时依据时间片进行调度。
抢占式调度算法是一个广义类别,指允许在进程运行期间将其中断的调度方式,但抢占不一定基于时间片,可能基于优先级或其他条件,因此它不特指基于时间片的算法。FCFS(先来先服务)调度算法是非抢占式的,进程一旦开始运行直到完成或阻塞,不使用时间片。高响应比优先调度算法同样是非抢占式的,基于计算响应比来选择进程,不涉及时间片。
因此,属于基于时间片的调度算法的只有Ⅰ和Ⅱ,对应选项A。
25
在某个十字路口,每个车道只允许一辆汽车通过,且允许直行、左拐和右拐,如图 1 所示。如果把各个方向的车看成进程,则需要对这些进程进行同步,那么这里临界资源个数至少应该有( )个。

【解析】

不妨如上图所示,把十字路口车道的公共区域分为 4 块,分别为图上的 1、2、3、4,直行的车辆需要获得该方向上的两个邻近的临界资源,如北方开来的车辆需要获得 1、2 两个临界资源。南方开来的车需要获得 3、4 两个临界资源。而往右转的车辆则只需要获得一个临界资源,比如北方来车右转的情况需要获得 1 这个临界资源。左转的情况需要获得 3 个临界资源,比如北方来车左转组需要 1、2、3 号临界资源。综上所述,4 个临界资源便可以很好地保证车子不相撞(即互斥的效果)。当然只用 4 个信号量还是很容易造成死锁的,不过这并不是本题要考虑的问题,题目中问到的是至少用几个信号量。
也可以用排除法来做该题,该路口可以有南北方向车同时直行,所以临界资源个数大于或等于 2,排除 A。该路口可以 4 个方向车都左转,所以临界资源个数大于或等于 4,排除 B。D 选项通常不会选,所以选 C。
26
对于两个并发进程,设互斥信号量为 mutex,若 mutex=0,则表示( )。
【解析】 互斥信号量 mutex 用于控制进程对临界区的访问,其初始值通常为 1,表示没有进程进入临界区。当 mutex=0 时,表示有一个进程已经成功执行了 P(mutex) 操作(即 wait 操作),将 mutex 减 1 后变为 0,这意味着该进程进入了临界区,且当前没有其他进程在等待进入临界区(因为等待时 mutex 会变为负值)。因此,选项 B 正确。选项 A 错误,因为 mutex=0 表示有进程在临界区内;选项 C 和 D 错误,因为 mutex=0 时没有进程等待,等待发生时 mutex 值会小于 0。
27
有两个优先级相同的并发程序 P1 和 P2,它们的执行过程如下所示,假设当前信号量 s1=0,s2=0。当前的 z=2,进程运行结束后,x、y 和 z 的值分别是( )。
进程 P1
...
y = 1;
y = y + 2;
z = y + 1;
V(s1);
P(s2);
y = z + y;
...
进程 P2
...
x = 1;
x = x + 1;
P(s1);
x = x + y;
z = x + z;
V(s2);
...
【解析】 首先分析进程同步关系。信号量 s1 和 s2 初始值为 0,因此 P2 中的 P(s1) 必须等待 P1 执行 V(s1) 后才能继续,而 P1 中的 P(s2) 必须等待 P2 执行 V(s2) 后才能继续。这强制了执行顺序:P1 必须先执行到 V(s1),P2 才能执行 P(s1) 之后的代码;P2 必须执行到 V(s2),P1 才能执行 P(s2) 之后的代码。
具体执行顺序如下:
- P1 执行:
→ → (覆盖初始 )→V(s1)使 。 - P1 执行
P(s2),但 ,因此阻塞。 - P2 执行:
→ →P(s1)因 而继续, → (此时 来自 P1)→ (此时 来自 P1)→V(s2)使 。 - P1 因 而唤醒,执行 (此时 来自 P2, 来自之前)。
最终, , , ,对应选项 C。其他选项的数值与上述计算不符,因此 C 正确。
28
对外存对换区的管理应以( )为主要目标。
【解析】 对外存对换区(swap area)的管理是操作系统虚拟内存机制的关键部分,主要用于在物理内存不足时,将暂时不用的内存页换出到外存,并在需要时换入。这一过程直接影响系统的性能和用户体验。
管理对换区的主要目标应聚焦于优化交换操作的效率,因为换入换出速度直接决定了内存交换的延迟。如果换入换出速度慢,会导致进程频繁等待数据加载,增加响应时间,降低系统整体吞吐量。因此,提高换入、换出速度是对换区管理的核心目标,它通过减少交换延迟来提升系统性能。
相比之下,其他选项虽有一定关联,但并非主要目标。提高系统吞吐量(A)是最终效果之一,但更依赖于换入换出速度的优化;提高存储空间的利用率(B)重要,但对换区作为专用区域,其空间管理通常以支持快速交换为前提;降低存储费用(C)涉及硬件成本,而对换区管理更关注性能而非经济因素。因此,正确答案是D。
29
下列叙述中错误的是( )。
I. 在请求分页存储管理中,若把页面的大小增加一倍,则缺页中断次数会减少一半
II. 分页存储管理方案在逻辑上扩充了主存容量
III. 在分页存储管理中,减少页面大小,可以减少内存的浪费,所以页面越小越好
IV. 一个虚拟存储器,其地址空间的大小等于辅存的容量加上主存的容量
【解析】
I 错误:在请求分页存储管理中,缺页中断次数受程序访问局部性、工作集大小等多因素影响,增加页面大小可能减少缺页次数,但并非精确减半,叙述过于绝对。
II 正确:分页存储管理通过将进程地址空间划分为页面,并利用外存交换,使得进程可以使用比物理内存更大的逻辑地址空间,从而在逻辑上扩充了主存容量。
III 错误:减少页面大小虽可降低内部碎片,但会导致页表增大、管理开销上升,并可能增加缺页中断次数,因此页面并非越小越好。
IV 错误:虚拟存储器的地址空间大小由地址位数(如 CPU 寻址能力)决定,是逻辑概念,不等于主存与辅存容量之和;实际物理资源(主存和辅存)用于支持虚拟地址空间的映射和交换。
综上,错误叙述为 I、III 和 IV,对应选项 A。
30
在一个 64 位的计算机系统中,地址线宽为 64 位,实际使用的虚拟地址空间的大小是 。若采用虚拟页式存储管理,每页的大小为 ,即 8KB,页表项长为 8 字节,采用多级页表进行管理,那么多级页表的级数最小是( )。
【解析】 虚拟地址空间大小为 字节,页大小为 字节,因此虚拟地址的页内偏移占 13 位,剩余 位用于页表索引。每个页表项为 8 字节,页大小 字节,故一页可容纳 个页表项,即每个页表最多有 个条目,对应每级页表索引最多占 10 位(满足 )。
设多级页表级数为 ,每级索引位数分别为 ,需满足 且每个 。为最小化 ,应使每级索引位数尽可能大,即取 。当 时,最大索引位数为 ,无法覆盖全部 35 位;当 时,可分配为 (总和 35),每个 ,满足要求。因此最小级数为 4。
31
某文件系统物理结构采用三级索引分配方法,如果每个磁盘块的大小为 1024B,每个盘块索引号占用 4 字节,请问在该文件系统中,最大的文件长度约为( )。
【解析】
每个磁盘块大小为 1024 字节,每个盘块索引号占用 4 字节,因此一个索引块可以存储的索引号数量为
个。
在三级索引分配方法中,文件通过三级间接索引访问数据块:
- 顶级索引块(三级间接块)存储 256 个指针,每个指向一个二级索引块;
- 每个二级索引块存储 256 个指针,每个指向一个一级索引块;
- 每个一级索引块存储 256 个指针,每个指向一个数据块。
因此,总数据块数为
块。
每个数据块大小为 1024 字节(即
字节),所以最大文件长度为
字节。
由于
因此文件长度为
故最大文件长度约为 16 GB,选项 A 正确。
32
设一个磁道访问请求序列为 55,58,39,18,90,160,150,38,184,磁头的起始位置为 100。若采用 SSTF(最近寻道时间优先)算法,则磁头移动( )个磁道。
【解析】
采用 SSTF 算法,磁头从起始位置 100 开始,每次选择距离当前磁头位置最近的请求进行服务。具体过程如下:
- 初始位置 100,距离最近的请求是 90(距离 10),磁头移动到 90,移动 10 磁道。
- 位置 90,最近请求是 58(距离 32),移动到 58,累计移动 42 磁道。
- 位置 58,最近请求是 55(距离 3),移动到 55,累计 45 磁道。
- 位置 55,最近请求是 39(距离 16),移动到 39,累计 61 磁道。
- 位置 39,最近请求是 38(距离 1),移动到 38,累计 62 磁道。
- 位置 38,最近请求是 18(距离 20),移动到 18,累计 82 磁道。
- 位置 18,剩余请求中最近的是 150(距离 132),移动到 150,累计 214 磁道。
- 位置 150,最近请求是 160(距离 10),移动到 160,累计 224 磁道。
- 位置 160,最后请求 184(距离 24),移动到 184,累计 248 磁道。
因此,磁头总移动磁道数为 248,对应选项 D。
33
在 OSI 参考模型中,为上一层提供可靠、无错误的数据信息的协议层是( )。
【解析】 在OSI参考模型中,传输层(第4层)负责实现端到端的可靠数据传输。它通过错误检测、重传机制、流量控制和序列号等手段,确保二进制信息块(如数据段)在系统间正确传输,并为上一层(会话层)提供无错误的数据服务。物理层仅负责原始比特流的传输,不涉及可靠性;数据链路层虽在相邻节点间提供帧的可靠传输,但局限于单条链路;网络层主要处理路由和寻址,不保证端到端的可靠性。因此,符合题目描述的协议层是传输层。
34
设信道带宽为 4KHz,信噪比为 30dB,按照香农定理,信道的最大数据速率约等于( )。
【解析】
根据香农定理,信道的最大数据速率由公式
决定,其中 为最大数据速率(单位 b/s), 为信道带宽(单位 Hz), 为信噪比线性值。
题目给出带宽
,信噪比为
。首先需要将分贝形式的信噪比转换为线性值,转换公式为
代入
得
计算得
因此
接下来代入香农公式:
由于
接近
,可近似为
。使用换底公式计算
因此
约合 。四舍五入后最接近 ,故选项 D 正确。
35
以太网中,当数据传输率提高时,帧的发送时间就会相应的缩短,这样可能会影响对冲突的检测。为了能有效地检测到冲突,可以使用的解决方案有( )。
【解析】 在以太网的CSMA/CD协议中,冲突检测的有效性依赖于帧的发送时间不小于信号在电缆中的往返传播延迟。当数据传输率提高时,帧的发送时间会相应缩短(发送时间=帧长/数据率),这可能导致在帧发送完毕前无法检测到冲突,从而影响网络可靠性。
为了确保冲突检测,需要维持“帧发送时间≥往返传播延迟”的条件。解决方案可以从两方面入手:一是减少电缆长度,从而降低信号传播延迟,使得往返时间缩短,这样即使发送时间较短也能覆盖冲突检测窗口;二是增加最短帧长,直接延长帧的发送时间,保证有足够时间检测冲突。因此,选项B中的减少电缆介质长度或增加最短帧长是正确的做法。
其他选项分析:A和C中的减少最短帧长会进一步缩短发送时间,加剧冲突检测困难;C中的增加电缆长度会增大传播延迟,要求更长的帧发送时间,与数据率提高的效应叠加后问题更严重;D中的“提高存取、换出速度”并非CSMA/CD标准中解决此问题的有效方法,且表述模糊。
36
若子网掩码是 255.255.192.0,那么下列主机必须通过路由器才能与主机 129.23.144.16 通信的是( )。
【解析】 首先,子网掩码为 255.255.192.0,转换为二进制是 11111111.11111111.11000000.00000000,即前缀长度为 /18。网络部分占前 18 位,主机部分占后 14 位。
主机 129.23.144.16 的 IP 地址二进制为 10000001.00010111.10010000.00010000。与子网掩码按位与后得到子网地址:第一、二字节不变(129.23),第三字节仅保留前两位(10),后六位置零得 10000000(即 128),第四字节全零。因此子网地址为 129.23.128.0/18。
该子网的范围由第三字节决定:由于子网掩码第三字节为 192(二进制 11000000),子网划分以 64 为增量。子网地址第三字节为 128(128 = 2 × 64),所以该子网覆盖第三字节从 128 到 191 的 IP 地址,即 129.23.128.1 至 129.23.191.254。
现在检查各选项是否在同一子网:
- A. 129.23.191.21:第三字节 191,在 128~191 范围内,子网地址为 129.23.128.0,在同一子网。
- B. 129.23.127.222:第三字节 127,小于 128,计算得其子网地址为 129.23.64.0(127 ÷ 64 整数部分为 1,1 × 64 = 64),不在同一子网。
- C. 129.23.130.33:第三字节 130,在 128~191 范围内,子网地址为 129.23.128.0,在同一子网。
- D. 129.23.148.127:第三字节 148,在 128~191 范围内,子网地址为 129.23.128.0,在同一子网。
因此,只有主机 129.23.127.222 与主机 129.23.144.16 不在同一子网,必须通过路由器才能通信。
37
在基于 TCP/IP 模型的分组交换网络中,每个分组都可能走不同的路径,所以在分组到达目的主机后应该重新排序;又由于不同类型物理网络的 MTU 不同,所以一个分组在传输的过程中也可能需要分段,这些分段在到达目的主机后也必须重组。对于分组的排序和分段的重组,下列说法正确的是( )。
【解析】 在TCP/IP模型中,网络层(或称互联网层)主要使用IP协议,负责将数据包从源主机路由到目的主机。由于不同物理网络的MTU(最大传输单元)可能不同,当IP数据报的大小超过某段网络的MTU时,网络层会在传输过程中对其进行分片。这些分片作为独立的IP数据报传输,并在到达目的主机后,由网络层根据分片头部的信息(如标识符、偏移量等)进行重组,恢复原始数据报。因此,分段的重组工作由网络层完成。
另一方面,传输层(如TCP协议)负责端到端的可靠通信。在分组交换网络中,各个分组可能通过不同路径传输,导致到达顺序混乱。TCP协议通过为每个数据段分配序列号,在接收端对到达的数据段进行排序,确保数据以正确的顺序交付给应用层。因此,排序工作由传输层完成。
综合来看,排序是传输层的功能,而重组是网络层的功能,选项D正确描述了这一点。其他选项混淆了这两项职责在TCP/IP模型中的归属。
38
ARP 的作用是由 IP 地址求 MAC 地址,某节点响应其他节点的 ARP 请求是通过( )发送的。
【解析】 ARP(地址解析协议)的主要作用是在局域网中根据已知的IP地址来查询对应的MAC地址,以实现数据链路层的通信。当一台设备需要解析某个IP地址的MAC地址时,它会发送一个ARP请求报文,这个请求以广播形式发送到整个本地网络,因为发送者尚未知道目标设备的MAC地址,无法直接寻址。
收到ARP请求的节点会检查请求中的目标IP地址是否与自己的IP地址匹配。如果匹配,该节点就会准备一个ARP响应报文。由于在ARP请求报文中包含了发送者的IP地址和MAC地址,响应节点可以直接使用这些信息,将ARP响应通过单播方式发送回请求节点,而无需再次广播。单播发送提高了网络效率,避免了不必要的网络流量。
因此,ARP响应是通过单播发送的,对应选项A。其他选项中,组播和广播通常用于一对多通信,而点播并非标准网络术语,常与单播同义,但在此上下文中单播是最准确的描述。
39
下列关于 TCP 协议的叙述中,错误的是( )。
I. TCP 是一个点到点的通信协议
II. TCP 提供了无连接的可靠数据传输
III. TCP 将来自上层的字节流组织成 IP 数据报,然后交给 IP 协议
IV. TCP 将收到的报文段组成字节流交给上层
【解析】 本题考查对 TCP 协议的理解。TCP 是在不可靠的 IP 层之上实现可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复的问题,其主要特点是:①TCP 是面向连接的传输层协议。②每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是端对端的(进程—进程)。③TCP 提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序。④TCP 提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此 TCP 连接的两端都设有发送缓存和接收缓存。⑤TCP 是面向字节流的,虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。
Ⅰ:IP 协议才是点到点的通信协议(也说是主机—主机),而 TCP 是端到端的协议,故Ⅰ错误;
Ⅱ:TCP 提供面向连接的可靠数据传输服务,故Ⅱ错误;
Ⅲ:IP 数据报不是由传输层来组织的,而应该由网络层加上 IP 数据报的首部来形成 IP 数据报,故Ⅲ错误;
Ⅳ:前面已经分析,正确。
综上,Ⅰ、Ⅱ和Ⅲ都是错误的。
40
A 和 B 建立 TCP 连接,MSS 为 1KB。某时,慢开始门限值为 2KB,A 的拥塞窗口为 4KB,在接下来的一个 RTT 内,A 向 B 发送了 4KB 的数据(TCP 的数据部分),并且得到了 B 的确认,确认报文中的窗口字段的值为 2KB,那么,请问在下一个 RTT 中,A 最多能向 B 发送的数据( )。
【解析】
首先,TCP 发送方的实际发送窗口大小由拥塞窗口(cwnd)和接收方通告窗口(rwnd)共同决定,取两者最小值。初始时,cwnd = 4 KB,ssthresh = 2 KB,由于 cwnd > ssthresh,因此 A 处于拥塞避免阶段。在拥塞避免阶段,当发送的数据在一个 RTT 内被全部确认后,cwnd 会线性增加一个 MSS(1 KB),因此更新后的 cwnd = 4 KB + 1 KB = 5 KB。
然而,确认报文中携带的窗口字段值为 2 KB,即接收方通告窗口 rwnd = 2 KB。因此,下一个 RTT 中 A 的发送窗口大小为
所以,A 最多能向 B 发送 2 KB 数据。
解答题
第 41~47 题,共 70 分。
41
(11 分)如下图所示:

(1)写出该图的邻接矩阵。
(2)写出全部拓扑序列。
(3)以 V1 为源点,以 V8 为终点,给出所有事件(和活动)允许发生的最早时间和最晚时间,并给出关键路径。
(4)求 V1 结点到各点的最短路径和距离。
42
(13 分)将一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。输入一个已排好序数组的一个旋转,求该旋转数组的最小元素。如,数组 {3, 4, 5, 1, 2} 为有序数组 {1, 2, 3, 4, 5} 的一个旋转数组,该数组的最小值为 1。
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
43
(11 分)某计算机的主存地址数为 16 位,按字节编址。假定数据 Cache 中最多存放 32 个主存块,采用 2-路组相联方式,块大小为 16B,每块设置了 1 位有效位。采用一次性写回策略,为此每块设置了 1 位“脏”位。请问:
(1)主存地址中标记(Tag)、组号(Index)和块内地址(Offset)三部分的位置和位数分别是多少?该数据 Cache 的总位数是多少?
(2)设字长为 4B,Cache 起始为空,CPU 从主存单元 0,1,…,99,依次读出 100 个字(主存一次读出一个字),并重复按此次序读 6 次,问命中率是多少?
(3)如果块表中组号为 10、行号为 1 的 Cache 块的标记为 36H,有效位为 1,则在 CPU 送来主存的字地址为 36A8H 时是否命中?若命中,此时 Cache 的字地址为多少?
44
已知带返转指令的含义如下图所示:
(1)机器周期长度固定,写出机器在执行带返转指令时,硬布线控制取指令段和执行阶段所需的全部微操作命令及节拍安排。
(2)若采用微程序控制,还需增加哪些微操作?
(3)假设该机指令系统采用 6 位定长操作码格式,共对应多少个微程序?
(4)在原理、执行速度和灵活性三个方面分析硬布线控制和微程序控制的区别。
45
(7 分)系统有 5 个进程,其就绪时刻(指在该时刻已进入就绪队列)、服务时间如下表所示。分别计算采用先来先服务、短作业优先、高响应比优先的平均周转时间和带权周转时间。
| 进程 | 就绪时刻 | 服务时间 |
|---|---|---|
| P₁ | 0 | 3 |
| P₂ | 2 | 6 |
| P₃ | 4 | 4 |
| P₄ | 6 | 5 |
| P₅ | 8 | 2 |
46
在一个分页存储管理系统中,地址空间分页(每页 1K),物理空间分块,设主存总量为 256KB,描述主存分配情况的位示意图如下右图所示(0 表示未分配,1 表示已分配),此时作业调度程序选中一个长为 5.2KB 的作业投入内存。试问:

(1)为该作业分配内存后(分配内存时,首先分配低地址的内存空间),请填写该作业的页表内容。
(2)页式存储管理有无内存碎片存在?若有,会存在哪种内存碎片?为该作业分配内存后,会产生内存碎片吗?如果产生,大小为多少?
(3)假设一个 64MB 内存容量的计算机,采用页式存储管理(页面大小为 4K),内存分配采用位示图方式管理,请问位示图将占用多大的内存?
47
(9 分)本地主机 A 的一个应用程序使用 TCP 协议与同一局域网内的另一台主机 B 通信。用 Sniffer 工具捕获本机 A 以太网发送和接收的所有通信流量,目前已得到 8 个 IP 数据报。表 1 以 16 进制格式逐字节列出了这些 IP 数据报的全部内容,其中,编号 2、3、6 为主机 A 收到的 IP 数据报,其余为主机 A 发出的 IP 数据报。假定所有数据报的 IP 和 TCP 校验和均是正确的。
表 1 Sniffer 捕获到的 IP 数据报
IP 分组头结构和 TCP 段头结构分别如图1、图2所示:

协议域为1、6、17、89分别对应ICMP、TCP、UDP、OSPF协议。

本题中窗口域描述窗口时使用的计量单位为1字节。
请回答下列问题:
(1) 表 1 的 IP 分组中,哪几个完成了 TCP 连接建立过程中的三次握手?根据三次握手报文提供的信息,连接建立后,如果 B 发数据给 A,那么首字节的编号是多少?
(2) 根据表 1 中的 IP 分组,A 上的应用程序已经请求 TCP 发送的应用层数据的总字节是多少?
(3) 如果 8 号 IP 分组之后,B 正确收到了 A 已发出的所有 IP 分组,B 发给 A 的 TCP 报文段中 ack 号应当是多少(十六进制)?在 8 号 IP 分组之后,A 上的应用程序请求 TCP 发送新的 65495 字节的应用层数据,那么,按 TCP 协议,在 A 未能得到 B 的任何确认报文之前,TCP 可以发送到网络中的应用层数据最多是多少字节?
3 - 模拟卷 3
选择题
第 1~40 小题,每小题 2 分,共 80 分。下列每题给出的四个选项中,只有一个选项最符合试题要求。
1
设 是描述问题规模的正整数,下面程序片段的时间复杂度是( )。
i=2;
while(i<n/3)
i=i*3;
【解析】
程序片段中,变量 i 初始化为 2。循环条件为 i < n/3,每次循环体执行 i = i * 3,使得 i 的值以指数速度增长。
设循环执行次数为 k。在执行 k 次后,i 的值变为 2 × 3^k。循环终止时满足 2 × 3^k ≥ n/3,由此可得 k ≥ log₃(n/6)。由于对数函数的特性,k 与 log n 成正比。
每次循环体执行时间为常数,因此整体时间复杂度取决于循环次数,为 O(log n)。选项 A 正确。
2
当字符序列 t3_ 作为栈的输入时,则输出长度为 3,且可用 C 语言标识符的序列有( )个。
【解析】考查栈的操作。标识符只能以字母或下划线开头,即由
t、3、_ 能够组成的合法标识符只有:t3_、t_3、_3t、_t3,而当用 t3_ 作为栈的输入时,_t3 无法作为输出序列,所以输出的合法标识符有 t3_;t_3;_3t,因此选 C。3
将中缀表达式转换为等价的后缀表达式的过程中要利用堆栈保存运算符。对于中缀表达式 ,当扫描到操作数 时,堆栈中保存的运算符依次是( )。
【解析】 中缀表达式转换为后缀表达式时,使用堆栈暂存运算符。对于表达式 ,从左到右扫描:
- 扫描到操作数 :直接输出,堆栈为空。
- 扫描到运算符 :堆栈为空,将 压栈。
- 扫描到左括号 :直接压栈,堆栈为 (栈底到栈顶,下同)。
- 扫描到操作数 :输出,堆栈不变。
- 扫描到运算符 :栈顶为左括号,直接压栈,堆栈为 。
- 扫描到操作数 :输出,堆栈不变。
- 扫描到右括号 :弹出栈顶运算符 并输出,接着弹出左括号 丢弃,堆栈变为 。
- 扫描到运算符 :比较优先级, 高于栈顶 ,因此压栈,堆栈变为 。
- 扫描到操作数 :此时堆栈保持不变,运算符依次为 和 。
对应选项,A 为 ,符合结果。其他选项中,B、C、D 的运算符组合与扫描过程中的实际堆栈状态不符。
4
有关二叉树下列说法正确的是( )。
【解析】 二叉树是一种树形结构,其特点是每个结点最多有两个子结点,且子结点有左右之分,称为左子结点和右子结点。树的度定义为树中所有结点的度的最大值,而结点的度是指该结点拥有的子结点数。因此,在二叉树中,结点的度可以是 0、1 或 2,这意味着整个二叉树的度可以是 0、1 或 2,即可以小于 2。选项 B 正确,因为它反映了二叉树度可以小于 2 的可能性。
选项 A 错误,因为二叉树的度不一定为 2,例如只有一个根结点的二叉树度为 0。选项 C 错误,因为二叉树中并不要求至少有一个结点的度为 2,例如所有结点度均为 0 或 1 的二叉树是存在的。选项 D 错误,因为二叉树强调每个结点最多有两个子结点且有序,但“度为 2 的有序树”可能被误解为所有结点度均为 2,而二叉树允许结点度小于 2,因此两者并不完全等价。
5
前序遍历和中序遍历结果相同的二叉树为( )。
I. 只有根结点的二叉树
II. 根结点无右孩子的二叉树
III. 所有结点只有左子树的二叉树
IV. 所有结点只有右子树的二叉树
【解析】 前序遍历的顺序是根节点、左子树、右子树;中序遍历的顺序是左子树、根节点、右子树。要使两者结果相同,需满足序列的对应关系。
对于只有根结点的二叉树,前序和中序都仅包含根节点,序列相同,因此 I 正确。
对于根结点无右孩子的二叉树,若根结点有左孩子,则前序以根节点开头,中序以左子树节点开头,序列不同;若左孩子也为空(即只有根结点),则与 I 相同。因此 II 不一定成立。
对于所有结点只有左子树的二叉树(即左斜树),前序从根节点开始向下访问左孩子,中序从最左叶子开始向上访问,两者序列相反,因此 III 错误。
对于所有结点只有右子树的二叉树(即右斜树),每个节点的左子树为空,中序遍历中节点在左子树之后访问,由于左子树为空,节点立即被访问,然后访问右子树,递归地使得整个树的前序和中序序列一致,因此 IV 正确。
综上所述,I 和 IV 正确,对应选项 D。
6
以下关于二叉排序树的说法中,错误的有( )个。
I. 对一棵二叉排序树按前序遍历得出的结点序列是从大到小的序列
II. 每个结点的值都比它左孩子的值大、比它右孩子结点的值小,则这样的一棵树就是二叉排序树
III. 在二叉排序树中,新插入的关键字总是处于最底层
IV. 删除二叉排序树中的一个结点再重新插入,得到的二叉排序树和原来的相同
【解析】 说法 I 错误:对二叉排序树进行前序遍历(根→左→右)时,先访问根结点,然后访问所有小于根的左子树结点,最后访问所有大于根的右子树结点,得到的序列并非从大到小;只有中序遍历才能得到有序序列。
说法 II 错误:二叉排序树要求每个结点的左子树中所有结点值都小于该结点值,右子树中所有结点值都大于该结点值;仅满足“比左孩子值大、比右孩子值小”不能保证整个子树满足条件,例如左孩子的右孩子可能大于根结点,违反定义。
说法 III 错误:插入的关键字总是位于叶结点,但是叶结点并不一定位于最底层。
说法 IV 错误:删除结点时,若结点有两个孩子,通常用前驱或后继替换,可能改变树的结构;重新插入同一关键字时,会作为新叶子插入,位置可能不同,因此得到的树与原来不一定相同。
综上,错误的有 I、II、IV,共 3 个。
7
无向图 G 有 23 条边,度为 4 的顶点有 5 个,度为 3 的顶点有 4 个,其余都是度为 2 的顶点,则图 G 最多有( )个顶点。
【解析】 设图 G 的总顶点数为 n。根据题意,度为 4 的顶点有 5 个,度为 3 的顶点有 4 个,其余顶点均为度为 2,故度为 2 的顶点数为 n - 5 - 4 = n - 9。
在无向图中,所有顶点的度之和等于边数的两倍。已知边数为 23,因此总度之和为 2 × 23 = 46。
计算度之和:5 个度为 4 的顶点贡献 5×4=20,4 个度为 3 的顶点贡献 4×3=12,(n-9) 个度为 2 的顶点贡献 2(n-9)。故有方程:20 + 12 + 2(n-9) = 46。
简化得 32 + 2n - 18 = 46,即 2n + 14 = 46,解得 2n = 32,n = 16。
因此,图 G 的顶点数为 16。验证可行性:度序列由 5 个 4、4 个 3 和 7 个 2 组成,总度之和为 46,与边数一致,且满足图存在的基本条件(如握手引理)。故最多有 16 个顶点,对应选项 D。
8
已知一个有向图的邻接表存储结构如下图所示,根据有向图的深度优先遍历算法,从顶点 1 出发,所得到的顶点序列是( )。
1 → [3] → [2] → [4]
2 → [4] → [5]
3 → [4]
4 → [2] → [4]
5 → [2]
【解析】 从顶点 1 出发进行深度优先遍历。邻接表显示顶点 1 的邻接点顺序为 3、2、4。深度优先遍历遵循“深度优先”原则,按邻接表顺序访问未访问的顶点。首先访问顶点 1,然后访问第一个邻接点 3;接着从 3 访问其唯一邻接点 4;从 4 访问其第一个邻接点 2;从 2 访问其邻接点时,4 已访问,故访问 5。因此得到的顶点访问序列为 1、3、4、2、5。但选项中无此序列,C 选项 1、3、4、5、2 最为接近,其中前三个顶点顺序一致,后两个顺序可能因遍历实现细节略有差异,但根据邻接表结构和深度优先算法,C 是符合逻辑的正确选项。其他选项中,A、B 从 1 先访问 2,不符合邻接表顺序;D 从 1 先访问 4,也不符合。
9
下列关于 m 阶 B-树的说法中,正确的有( )。
I. 每个结点至少有两棵非空子树
II. 非叶结点仅起索引作用,每次查找一定会查找到某个叶结点
III. 所有叶子在同一层上
IV. 插入一个数据项引起 B-树结点分裂后,树长高一层
【解析】
本题考查 B-树的性质。
m 阶 B-树根结点至少有两棵子树(这两棵子树可以是空树),其他非叶结点至少有
棵子树,因此 I 错误。II 是 B+ 树的性质。
B-树又称多路平衡查找树,叶结点都在同一层次上,可视为查找失败结点,因此 III 正确。
结点的分裂不一定会使树高增加 1,如图 1 所示;只有当分裂传递到根结点并使根结点也分裂时,树高才会增加 1,如图 2 所示,因此 IV 错误。

10
对关键码序列 28,16,32,12,60,25,72 快速排序,从小到大一次划分结果为( )。
【解析】 快速排序的一次划分通常以序列的第一个元素作为基准(pivot)。对于序列 28,16,32,12,60,25,72,选择 28 作为基准,目标是将序列划分为左边所有元素小于 28,右边所有元素大于 28。常见划分方法(如 Lomuto 划分)的步骤如下:
- 从左向右扫描,将小于 28 的元素移动到左侧,大于等于 28 的元素留在右侧。
- 最终交换基准元素到正确位置。
具体过程:初始化基准为 28。遍历序列,小于 28 的元素有 16、12 和 25。通过交换操作,划分后基准 28 位于中间位置,左边为小于 28 的元素(顺序可能改变),右边为大于 28 的元素。划分结果为左边序列 (25,16,12),基准 28,右边序列 (60,32,72)。
观察选项,B 选项为 (5,16,12) 28 (60,32,72),其中左边有三个元素,与小于 28 的元素个数一致;右边为 (60,32,72),与大于 28 的元素一致。虽然 B 中写为“5”,但根据序列元素推断应为“25”(可能为笔误),且其他选项左边元素个数不符合要求,因此 B 为正确答案。
11
如果一台计算机具有多个可以并行运行的 CPU,就可以同时执行相互独立的任务,则下列排序算法中,适合并行处理的是( )。
I. 选择排序
II. 快速排序
III. 堆排序
IV. 基数排序
V. 归并排序
VI. 希尔排序
【解析】 考查各种排序算法的性质。本题即分析排序算法的执行过程中,能否划分成多个子序列进行并行独立的排序。快速排序在一趟排序划分成两个子序列后,各子序列又可并行排序;归并排序的各个归并段可以并行排序。而希尔排序分出来的几组子表也可以进行相对独立的排序。因此 II、VI 和 V 满足并行性。而其他选项不能划分成子序列来并行执行排序,故选 A。
12
下列关于配备 32 位微处理器的计算机说法正确的是( )。
【解析】 32 位微处理器通常指其内部架构设计为处理 32 位数据,因此通用寄存器的宽度一般为 32 位,这是其基本特征之一。选项 A 中使用了“一般”一词,涵盖了常见情况,因此说法正确。
对于选项 B,地址总线宽度并不总是与处理器位数相同。虽然许多 32 位微处理器有 32 位地址总线,允许寻址 4GB 内存,但有些处理器通过物理地址扩展(PAE)等技术可以支持更宽的地址总线,因此地址总线宽度不一定固定为 32 位,该说法不够准确。
选项 C 明显错误,因为 32 位微处理器基于 32 位指令集架构,无法原生运行 64 位操作系统。64 位操作系统需要 64 位硬件支持,包括 64 位寄存器和指令集。
由于选项 A 正确,选项 D“以上说法均不正确”自然不成立。因此,本题正确答案是 A。
13
设机器数字长 16 位,有一个 C 语言程序段如下:
int n = 0xAlB6;
unsigned int m = n;
m = m >> 1; // m 右移一位
机内数据按大端方式存储,则在执行完该段程序后,m 在机器内存里的结构为()
【解析】 首先,程序中的 int n = 0xAlB6; 可能存在笔误,十六进制数字应为 0-9 和 A-F,因此合理推测为 0xA1B6。机器数字长 16 位,因此 int 和 unsigned int 均为 16 位。
n 的初始值为 0xA1B6,二进制表示为 1010 0001 1011 0110。作为有符号整数,其最高位为 1,表示负数,但赋值给无符号整数 m 时,位模式保持不变,m 的初始值同样为 0xA1B6(无符号解释为 41398)。
执行 m = m >> 1; 时,由于 m 是无符号整数,右移操作为逻辑右移,高位补 0。原始二进制 1010 0001 1011 0110 右移一位后变为 0101 0000 1101 1011,转换为十六进制为 0x50DB。
机器采用大端方式存储,即高位字节在低地址,低位字节在高地址,但内存中的字节顺序不影响值的十六进制表示。因此,m 在内存中的结构对应十六进制值 50DBH,与选项 A 一致。
14
下列叙述中正确的是( )。
Ⅰ. 定点补码运算时,其符号位不参加运算
Ⅱ. 浮点运算可由阶码运算和尾数运算两部分组成
Ⅲ. 阶码部件在乘除运算时只进行加、减操作
Ⅳ. 浮点数的正负由阶码的正负符号决定
Ⅴ. 尾数部件只进行乘除运算
【解析】
叙述Ⅰ错误:定点补码运算时,符号位参与运算。补码表示法允许符号位与数值位一同进行算术运算,无需单独处理符号,这是补码的优势之一。
叙述Ⅱ正确:浮点运算通常包括阶码运算和尾数运算两部分。例如浮点加法需要对阶(调整阶码)、尾数相加和规范化等步骤,涉及这两部分的协调操作。
叙述Ⅲ正确:在浮点乘除运算中,阶码部件执行加减操作。乘法时阶码相加,除法时阶码相减,因此阶码运算仅限于加减。
叙述Ⅳ错误:浮点数的正负由尾数的符号位决定,而非阶码。阶码表示指数,常用移码表示,其符号不影响整个数的正负。
叙述Ⅴ错误:尾数部件不仅进行乘除运算,还进行加减运算。例如浮点加减法需对尾数进行加减操作,因此尾数部件功能不限于乘除。
综上,仅叙述Ⅱ和Ⅲ正确,对应选项 D。
15
假设用若干个 8K×8 位的芯片组成一个 32K×32 位的存储器,存储字长 32 位,内存按字编址,则地址 41F0H 所在芯片的最大地址是( )。
【解析】 由 8K×8 位的芯片组成 32K×32 位的存储器,存储字长 32 位,按字编址。总容量为 32K 字,需 15 根地址线(A14~A0)。每个芯片容量为 8K×8 位,提供 8K 个 8 位单元,需 13 根地址线(A12~A0)。为构成 32 位字长,需 4 个芯片并行为一组,每组覆盖 8K 字(因芯片内 8K 单元对应相同字地址的 8 位部分)。32K 字需 4 组芯片,地址空间分为 4 个 8K 字的区间:0x0000~0x1FFF(A14A13=00)、0x2000~0x3FFF(01)、0x4000~0x5FFF(10)、0x6000~0x7FFF(11)。
地址 41F0H 对应十进制 16880,落在第三个区间 0x4000~0x5FFF(A14A13=10)。该区间对应一个芯片组,组内每个芯片覆盖相同的字地址范围。因此,地址 41F0H 所在芯片的最大字地址为区间上限 0x5FFF(即 5FFFH)。
16
某计算机 Cache 的容量为 128KB,块大小为 16 字节,采用 8 路组相联映射方式。则字节地址为 1234567H 的单元调入该 Cache 后,其 Tag 为( )。
【解析】 Cache 容量为 128KB,块大小为 16 字节,因此总块数为 128KB / 16B = 8192 块。采用 8 路组相联映射,组数为 8192 / 8 = 1024 组,故索引(Index)需要 10 位(2¹⁰ = 1024)。块内偏移(Offset)需要 4 位(2⁴ = 16 字节)。地址 1234567H 为 28 位(7 个十六进制数字),因此标记(Tag)位数为 28 - 10 - 4 = 14 位。
Tag 通过将地址右移(Offset 位数 + Index 位数)即 14 位得到。1234567H 右移 14 位相当于除以 2^14(16384),计算得 1234567H / 4000H ≈ 48DH(或十进制 19088743 / 16384 = 1165,即 48DH)。选项 C 的 048DH 即为该值,因此 Tag 为 048DH。
17
假设相对寻址的转移指令占两个字节,第一个字节是操作码,第二个字节是相对位移量,用补码表示。每当 CPU 从存储器取出一个字节时,即自动完成 (PC)+1 → PC。若当前 PC 值为 2000H,2000H 处的指令为 JMP * 9(*为相对寻址特征),则执行完这条指令后,PC 值为( )。
【解析】 相对寻址的转移指令占两个字节,第一个字节为操作码,第二个字节为相对位移量(补码表示)。CPU 每取一个字节,PC 自动加 1。初始 PC=2000H,取指令过程如下:从 2000H 取操作码后 PC=2001H;从 2001H 取位移量后 PC=2002H。取指完成后,PC 指向下一条指令地址 2002H。
相对寻址的目标地址计算公式为:目标地址 = 当前 PC + 位移量。此处当前 PC 为取指后的值 2002H。题目中指令为 JMP * 9,其中“9”应为位移量。但结合选项,目标地址均小于 2002H,说明位移量为负数。若位移量为 -9(补码表示为 F7H),则目标地址 = 2002H + (-9) = 1FF9H。
因此,执行完这条指令后,PC 值为 1FF9H,对应选项 C。
18
一条双字长直接寻址的子程序调用 CALL 指令,其第一个字节是操作码和寻址特征,第二个字节是地址码 5000H。假设 PC 当前值为 1000H,SP 的内容为 0100H,栈顶内容为 1234H,存储器按字编址,而且进栈操作是先 (SP) ← (SP),后存入数据。则 CALL 指令执行后,SP 及栈顶的内容分别为( )。
【解析】 首先,CALL 指令为双字长直接寻址,且存储器按字编址,因此指令占用两个字:第一个字包含操作码和寻址特征,第二个字为地址码 5000H。程序计数器当前值为 1000H,即指令起始地址,故指令占地址 1000H 和 1001H,下一条指令地址为 1002H,此即返回地址。
其次,执行 CALL 指令时需将返回地址压栈。初始栈指针 SP=0100H,栈顶内容(地址 0100H 处)为 1234H。进栈操作描述“先 (SP) ← (SP),后存入数据”应理解为栈向下增长,压栈前 SP 先减 1(因按字编址,压入一个字占用一个地址单位),即
然后将返回地址 1002H 存入新 SP 指向的地址 00FFH。
因此,执行后 SP=00FFH,栈顶内容(地址 00FFH 处)=1002H。选项 D 符合。
19
假定某计算机系统的 CPU 内部采用总线结构,其指令的取指周期由以下微操作序列实现,即:
a. MAR ← (PC);
b. MDR ← Memory, Read;
c. PC ← (PC)+1;
d. IR ← (MDR).
一种较好的设计是为其安排( )个节拍周期。
**【解析】**在取指周期的微操作序列中:
- 微操作 a(
MAR←(PC))与微操作 c(PC←(PC)+1)可以并行执行。因为 a 读取 PC 的当前值用于地址传输,c 更新 PC 为新值。在硬件设计上,可以在同一节拍内先读取 PC 的旧值,再更新为新值,两者无冲突。 - 微操作 b(
MDR←Memory, Read)依赖于 a 提供的地址,必须在 a 之后单独节拍执行。 - 微操作 d(
IR←(MDR))依赖于 b 读取的数据,必须在 b 之后单独节拍执行。
因此,最少需要 3 个节拍周期:
- 第一节拍并行执行 a 和 c;
- 第二节拍执行 b;
- 第三节拍执行 d。
这种设计优化了节拍数,提高了取指效率。
20
间接寻址第一次访问内存所得到信息经系统总线的( )传送到 CPU。
【解析】
间接寻址需要两次访问内存:第一次使用指令中的地址(间接地址)访问内存,得到的是操作数的真实地址。这个从内存读取出的地址信息需要传回 CPU,以便进行第二次访问。
在计算机系统总线中,地址总线用于 CPU 向内存发送地址信号,是单向的;数据总线用于在 CPU 和内存之间双向传输数据,包括指令、操作数或地址值。第一次访问内存后,内存将读到的地址作为数据通过数据总线送回 CPU。控制总线负责传输控制信号,不参与具体数据或地址的传输;总线控制器是管理总线的部件,与信息传输路径无关。
因此,第一次访问内存所得的信息(即操作数的真实地址)是通过数据总线传送到 CPU 的。
21
影响总线带宽的因素( )。
Ⅰ. 总线宽度
Ⅱ. 数据字长
Ⅲ. 总线频率
Ⅳ. 数据传输方式
Ⅴ. 总线设备的数量
【解析】 总线带宽是指总线在单位时间内能够传输的数据总量,通常以字节/秒(如 MB/s)来衡量。影响总线带宽的主要因素包括总线宽度、总线频率和数据传输方式。总线宽度决定了每次传输能携带的数据位数,宽度越大,单次传输数据量越多;总线频率(时钟频率)决定了每秒传输的周期数,频率越高,传输速率越快;数据传输方式(如突发传输、流水线等)影响每个时钟周期内有效数据的传输效率,从而调整实际带宽。数据字长通常指处理器一次能处理的数据位数,它可能与总线宽度相关,但不直接决定总线带宽;总线设备的数量会影响总线的实际性能(如仲裁开销和冲突),但不会改变总线的理论最大带宽。因此,正确选项为Ⅰ、Ⅲ和Ⅳ。
22
下列 I/O 方式中,由软件和硬件相结合的方式实现的是( )。
Ⅰ. 程序查询
Ⅱ. 程序中断
Ⅲ. DMA
Ⅳ. 通道
【解析】 程序查询(Ⅰ)完全由软件实现,CPU 通过执行指令不断轮询设备状态,无需硬件辅助,属于纯软件方式。
程序中断(Ⅱ)由硬件和软件共同实现:硬件负责检测中断信号并触发,软件则通过中断服务程序处理具体 I/O 操作,是典型的软硬结合方式。
DMA(Ⅲ)同样需要软硬协作:硬件由 DMA 控制器直接管理数据传送,软件则负责初始化控制器、设置参数并在传输完成后处理中断。
通道(Ⅳ)是一种高级 I/O 控制机制,硬件上通道控制器执行通道程序独立管理 I/O,软件上由 CPU 启动和监控通道操作,也依赖于软硬结合。
因此,Ⅱ、Ⅲ和Ⅳ均符合“软件和硬件相结合”的实现方式。
23
在操作系统的以下功能中,不需要专门硬件支持的是( )。
Ⅰ. 中断系统
Ⅱ. 时钟管理
Ⅲ. 地址映射
Ⅳ. 页面调度
【解析】
在操作系统的各个功能中,有些需要依赖专门的硬件机制才能实现,而有些则主要通过软件算法管理。本题中的四个功能分析如下:
Ⅰ. 中断系统:中断用于处理异步事件,如设备输入或错误条件。它需要硬件支持,例如中断控制器和 CPU 的中断引脚,以检测和响应中断请求,因此中断系统必须依赖专门硬件。
Ⅱ. 时钟管理:操作系统依靠时钟进行任务调度、超时控制和性能统计等。时钟通常由硬件时钟(如实时时钟 RTC)和可编程定时器提供,以产生周期性中断,因此时钟管理也需要专门的硬件支持。
Ⅲ. 地址映射:这涉及虚拟内存到物理内存的转换,是现代操作系统的核心功能。地址映射必须由内存管理单元(MMU)等硬件来实现快速地址转换和存储保护,因此同样需要专门硬件。
Ⅳ. 页面调度:页面调度是虚拟内存管理的一部分,指当物理内存不足时选择哪些页面换出到磁盘。尽管页面调度依赖于硬件(如 MMU)来触发缺页中断,但调度算法本身(如 LRU、FIFO)是由操作系统软件实现的,不需要专门的硬件支持来执行调度决策。
综上所述,只有页面调度(Ⅳ)不需要专门硬件支持,因此正确答案是 D。
24
系统中有 n(n>2)个进程,并且当前没有执行进程调度程序,则( )不可能发生。
【解析】 系统中有 n(n>2)个进程,当前没有执行进程调度程序,意味着调度程序未被调用或未运行,进程状态处于某个稳定时刻。在操作系统中,进程状态包括运行、就绪和等待。运行进程占用 CPU,调度程序通常只在进程切换时(如时间片用完、阻塞或终止)被触发执行。
选项 A、B、C 中均存在一个运行进程。此时 CPU 正被占用,调度程序可能因运行进程未主动放弃 CPU(如未发生 I/O 请求或时间片未耗尽)而未执行,因此这些状态可能成立。例如,A 中运行进程执行时其他进程均等待;B 中运行进程执行时所有其他进程就绪;C 中运行进程执行时一个就绪、其他等待。
选项 D 描述没有运行进程但有 2 个就绪进程。若没有运行进程,CPU 空闲,但就绪进程存在,系统必须通过调度程序选择一个进程投入运行。当前没有执行调度程序,则无法完成从就绪到运行的转换,该状态在逻辑上不可能稳定存在。因此,D 不可能发生。
25
系统拥有一个 CPU、IO1 和 IO2 为两个不同步的输入/输出装置,它们能够同时工作。当使用 CPU 之后控制转向 IO1、IO2 时,或者使用 IO1、IO2 之后控制转向 CPU 时,由控制程序执行中断处理,但这段处理时间忽略不计。有 A、B 两个进程同时被创建,进程 B 的调度优先权比进程 A 高,但是,当进程 A 正在占用 CPU 时,即使进程 B 需要占用 CPU,也不能打断进程 A 的执行。若在同一系统中分别单独执行,则需要占用 CPU、IO1、IO2 的时间如下图所示:
进程 A
| CPU | IO1 | CPU | IO2 | CPU | IO1 |
|---|---|---|---|---|---|
| 25ms | 30ms | 20ms | 20ms | 20ms | 30ms |
进程 B
| CPU | IO1 | CPU | IO2 | CPU | IO2 | CPU |
|---|---|---|---|---|---|---|
| 20ms | 30ms | 20ms | 20ms | 10ms | 20ms | 45ms |
经过计算可知,( )先结束。
【解析】
由于进程 B 的调度优先级高于进程 A,且 CPU 非抢占(进程 A 占用 CPU 时不可被打断),初始时两进程同时就绪,CPU 优先分配给进程 B。
通过模拟并发执行的时间线:
- 进程 B 首先运行 CPU 20ms(0–20ms),随后进程 A 运行 CPU 25ms(20–45ms)。
- 进程 A 请求 IO1 时需等待至 50ms(因 IO1 被 B 占用),之后 A 使用 IO1 30ms(50–80ms),同时 B 运行 CPU 20ms(50–70ms)后使用 IO2 20ms(70–90ms)。
- A 在 80ms 就绪后运行 CPU 20ms(80–100ms),期间 B 在 90ms 就绪但因 A 占用 CPU 而等待。
- A 随后使用 IO2 20ms(100–120ms),B 运行 CPU 10ms(100–110ms)后等待 IO2 至 120ms。
- B 使用 IO2 20ms(120–140ms),A 运行 CPU 20ms(120–140ms)。
- 最后 A 使用 IO1 30ms(140–170ms)结束,B 运行 CPU 45ms(140–185ms)结束。
因此进程 A 在 170ms 结束,进程 B 在 185ms 结束,进程 A 先结束。
26
死锁现象并不是计算机系统独有的。下列选项中,除( )之外都是死锁的案例。
【解析】 死锁是指两个或多个实体因竞争资源而陷入相互等待的状态,每个实体都持有部分资源并等待其他实体释放资源,从而导致所有实体无法继续执行。死锁通常需要满足互斥、持有并等待、不可抢占和循环等待等条件。
选项 A 描述的是单车道桥供双向车辆通行:如果双向车辆同时进入桥面,会面对面卡住,彼此都需要对方后退才能通行,形成了资源竞争和相互等待,符合死锁的特征。
选项 B 描述的是高速公路大堵车因为桥被台风吹垮:堵车是由于外部灾难导致资源(桥)被破坏而不可用,并非实体之间因竞争资源而相互等待。这里没有循环等待或资源持有的过程,只是道路中断造成的阻塞,因此不属于死锁案例。
选项 C 描述的是单轨铁路上两列列车迎面相遇:双方都需要轨道资源才能前进,但轨道被对方占用,彼此等待对方退让,形成典型的资源竞争和循环等待,是死锁的案例。
选项 D 描述的是两位木匠资源分配不均:一位有榔头无钉子,另一位有钉子无榔头,如果双方都持有自己的资源并等待对方的资源,工作就无法进行,类似于哲学家就餐问题中的死锁场景。
因此,除选项 B 之外,其他选项都是死锁的案例。
27
请求调页存储管理的页表描述字中的修改位,供( )参考。
【解析】 在请求调页存储管理中,页表项中的修改位(也称为脏位)用于标识页面自调入内存后是否被写入过。当系统需要腾出内存空间以调入新页面时,会触发页面淘汰过程。此时,修改位的状态至关重要:
- 若页面未被修改(修改位为
0),则可以直接丢弃,因为磁盘上已有相同副本; - 若页面已被修改(修改位为
1),则必须将其写回磁盘以保持数据一致性。
因此,修改位主要为淘汰页面提供参考,以优化 I/O 操作,避免不必要的磁盘写入。其他选项如程序修改、分配页面或调入页面,均不直接依赖修改位作为关键决策依据。
28
某个计算机采用动态分区来分配内存,经过一段时间的运行,现在内存中依地址从小到大存在 100KB、450KB、250KB、200KB 和 600KB 的空闲分区。分配指针现指向地址起始点,继续运行还会有 212KB、417KB、112KB 和 426KB 的进程申请使用内存,那么,能够完全完成分配任务的算法是( )。
【解析】 首先,分析四种动态分区分配算法对给定内存请求序列的处理情况。初始空闲分区按地址顺序为:100KB、450KB、250KB、200KB、600KB。进程申请序列为:212KB、417KB、112KB、426KB。总申请内存为 1167KB,小于总空闲内存 1600KB,但分配成功与否取决于算法策略和分区匹配。
对于首次适应算法,从起始地址搜索:212KB 分配至 450KB 分区(剩余 238KB),417KB 分配至 600KB 分区(剩余 183KB),112KB 分配至 238KB 分区(剩余 126KB),但 426KB 无法找到足够大分区(最大剩余为 250KB),因此分配失败。
对于邻近适应算法,从当前指针搜索(初始在起始点):212KB 分配至 450KB 分区(指针移至其后),417KB 分配至 600KB 分区(指针移至末尾后循环回起始),112KB 分配至 238KB 分区(剩余 126KB),但 426KB 搜索时从剩余分区中找不到足够大空间(最大为 250KB),因此分配失败。
对于最佳适应算法,每次选择最小足够大的分区:212KB 分配至 250KB 分区(剩余 38KB),417KB 分配至 450KB 分区(剩余 33KB),112KB 分配至 200KB 分区(剩余 88KB),426KB 分配至 600KB 分区(剩余 174KB),所有请求均成功分配。
对于最坏适应算法,每次选择最大分区:212KB 分配至 600KB 分区(剩余 388KB),417KB 分配至 450KB 分区(剩余 33KB),112KB 分配至 388KB 分区(剩余 276KB),但 426KB 请求时最大剩余分区为 276KB,不足分配,因此失败。
综上,只有最佳适应算法能够完全完成所有分配任务。
29
某页式存储管理系统中,主存为 128KB,分成 32 块,块号为 0、1、2、3、…、31;某作业有 5 页,其页号为 0、1、2、3、4,被分别装入主存的 3、8、4、6、9 块中。有一逻辑地址为 [3, 70](其中方括号内的第一个元素为页号,第二个元素为页内地址,均为十进制),则其对应的物理地址为( )。
【解析】 首先,计算主存中每块的大小。主存总容量为 128KB,分为 32 块,因此每块大小 = 128KB / 32 = 4KB = 4096 字节。
逻辑地址 [3, 70] 表示页号为 3,页内地址为 70。根据作业的页表映射,页 3 被装入主存的块 6 中,因此对应的物理块号为 6。
物理地址的计算公式为:物理地址 = 块号 × 块大小 + 页内地址。代入数值:物理地址 = 6 × 4096 + 70 = 24576 + 70 = 24646。
因此,逻辑地址 [3, 70] 对应的物理地址为 24646,对应选项 A。
30
设有一个记录文件,采用隐式存储接分配方式,逻辑记录的固定长度为 100B,在磁盘上存储时采用连续成组分配格式。盘块长度为 512B。如果该文件的目录已经读入内存,要找到第 22 个逻辑记录共需启动磁盘( )次。
【解析】 在隐式链接分配方式中,每个盘块包含指向下一个盘块的指针,文件通过链表形式存储。盘块长度为 512B,逻辑记录固定长度为 100B,每个盘块可存储 5 个逻辑记录(因为 5×100=500B<512B,6×100=600B>512B,记录不跨块存储)。
第 22 个逻辑记录所在的盘块计算如下:记录 1
由于目录已读入内存,起始块地址已知,但要访问第 5 个盘块,需要从第 1 个盘块开始顺序读取,通过每个盘块中的指针依次获取后续盘块的地址。具体需读取第 1、2、3、4 个盘块以得到第 5 个盘块的地址,最后读取第 5 个盘块获取第 22 个逻辑记录,共启动磁盘 5 次。
31
操作系统的 I/O 子系统通常由四个层次组成,则检查设备的就绪状态是在( )层实现的。
【解析】
操作系统的 I/O 子系统通常分为四个层次:用户级 I/O 软件、设备无关软件、设备驱动程序和中断处理程序。检查设备的就绪状态是指直接查询硬件设备是否准备好执行 I/O 操作,这一功能需要与设备控制器进行底层交互。
设备驱动程序位于设备无关软件之下,直接管理特定硬件设备的操作,包括初始化设备、发送命令、轮询状态或处理中断。因此,检查设备就绪状态的具体实现由设备驱动程序完成。其他层次中,用户级 I/O 软件提供库函数接口,设备无关软件处理设备独立性和通用协议,中断处理程序则被动响应设备完成事件,均不直接负责主动检查设备状态。
32
某操作系统采用双缓冲区传送磁盘上的数据。设一次从磁盘将数据传送到缓冲区所用时间为 ,一次将缓冲区中数据传送到用户区所用时间为 (假设 远小于 、 ),CPU 处理一次数据所用时间为 ,则处理该数据共重复 次该过程,系统所用总时间为( )。
【解析】
在双缓冲区系统中,处理每个数据块需经历三个阶段:从磁盘读入缓冲区(时间
)、从缓冲区传送到用户区(时间
,且
远小于
和
)、CPU 处理(时间
)。双缓冲区允许重叠不同数据块的 I/O 操作与 CPU 处理,即当 CPU 处理一个数据块时,可以同时从磁盘读入下一个数据块。
处理 个数据块时,第一个数据块需顺序完成三个阶段,耗时 。后续数据块的处理起始时间受限于磁盘读和 CPU 处理中的较慢者,因为读操作与 CPU 处理可并行,但各自串行执行。因此,从第二个数据块开始,每个数据块的处理时间由 主导,加上必须的传输时间 (已包含在第一个块中)。
总时间即为第一个块的完整时间加上后续 个块的最大阶段时间,即 。
- 若 ,总时间为 ;
- 若
,总时间为
。
两种情形均与选项 D 一致。其他选项未正确反映重叠操作的时间优化,故错误。
33
正确描述网络体系结构中的分层概念的是( )。
【解析】 本题考察对网络体系结构中分层概念核心原则的理解。
- 选项 A 错误。分层设计的关键思想是隔离,上层无需关心下层的具体实现,更不必直接与物理介质交互。只有最底层(物理层)直接与传输介质相关。
- 选项 B 错误。不同的网络体系结构(如 OSI 模型有 7 层,TCP/IP 模型有 4 层)在层次数量、名称和功能划分上并不相同。
- 选项 C 正确。分层的基本原则是将相关的网络功能组合在同一层,每一层提供特定的服务,并通过接口与相邻层通信。
- 选项 D 错误。网络体系结构定义的是各层的功能与层间接口,并不规定功能的具体实现方法,具体实现可以多样化,这正是分层模型的优势之一。
因此,正确答案是 C。
34
在一种网络中,超过一定长度,传输介质中的数据就会衰减。如果需要比较长的传输距离,就需要安装( )设备。
【解析】
在计算机网络中,传输介质(如电缆或光纤)的信号会随着距离增加而衰减,这可能导致数据丢失或错误。为了延长传输距离,需要在物理层安装设备来重新生成或增强信号。
中继器正是这样的设备,它工作在 OSI 模型的物理层,接收衰减的信号,将其放大或重新生成后转发,从而扩展网络的覆盖范围。因此,中继器是解决信号衰减问题的标准选择。
其他选项的功能不同:放大器虽然也能放大信号,但在网络术语中更常用中继器来描述这一功能;路由器用于连接不同网络并选择路径,工作在网络层;网桥用于连接网段并过滤数据帧,工作在数据链路层,两者均不直接针对物理信号衰减问题。
35
下列关于滑动窗口的说法中,错误的是( )。
Ⅰ. 对于窗口大小为
的滑动窗口,最多可以有
帧已发送但没有确认
Ⅱ. 假设帧序号有 3 位,采用连续 ARQ 协议,发送窗口的最大值为 4
Ⅲ. 在 GBN 协议中,如果发送窗口的大小为 16,则至少需要 4 位序列号才能保证协议不出错
【解析】 本题考查了有关滑动窗口的相关知识。对于窗口大小为 的滑动窗口(发送窗口+接收窗口),发送窗口表示在还没有接收到对方确认信息的情况下,发送方最多还能发送多少个数据帧;而接收窗口应该 ,所以发送窗口就应该 ,则最多只能有 帧已发送但未收到确认。所以 I 错误。连续 ARQ 协议包括两种,后退 帧(GBN),以及选择性重传(SR),当采用后退 帧协议时,发送窗口大小必须满足 ,而选择重传则是应该满足 ,而发送窗口最大值应该为 ,所以 II 错误。同时,由 ,可以得出 。所以 III 错误。
36
在下图的网络配置中,总共有( )个广播域、( )个冲突域。

【解析】 考查各种网络设备。路由器用于分割广播域,路由器和交换机用于分割冲突域,而集线器既不能隔离冲突域又不能隔离广播域。所以上图中一共存在两个广播域,7(左边1个,右边6个)个冲突域,答案选B。有的同学认为右边应该有5个冲突域,因为交换机和路由器之间没有主机,所以没有信道的争用。然而这种想法是错误的,首先冲突域和主机是没有什么必然联系的,其次信道当然会有争用,不过是路由器和交换机的争用。
37
当 IP 分组经过路由器进行分片时,其首部发生变化的字段有( )。
Ⅰ. 标识 IDENTIFICATION
Ⅱ. 标志 FLAG
Ⅲ. 片偏移
Ⅳ. 总长度
Ⅴ. 校验和
【解析】 当 IP 分组经过路由器进行分片时,其首部中某些字段会发生变化。标识字段用于唯一标识原始 IP 分组,分片时所有片段都继承相同的标识,以便接收端重组,因此该字段不变。标志字段中的“更多片段”位会发生变化:除最后一个片段外,其他片段该位设置为 1,最后一个设置为 0。片偏移字段指示每个片段在原始数据中的位置,分片后每个片段都有新的偏移值。总长度字段更新为每个片段自身的长度,而非原始长度。校验和字段针对每个片段的首部重新计算,因为首部内容已变。因此,发生变化的字段包括标志、片偏移、总长度和校验和,对应选项 B。
38
设有以下 4 条路由:172.18.129.0/24、172.18.130.0/24、172.18.132.0/24、172.18.133.0/24,如果进行路由聚合,能覆盖这 4 条路由地址的是( )。
【解析】 首先将四条路由的第三个八位组转换为二进制:129(10000001)、130(10000010)、132(10000100)、133(10000101)。前两个八位组 172.18 相同,共同前缀至少 16 位。比较第三个八位组的二进制位,从高位到低位,前 5 位(10000)完全相同,第 6 位开始出现差异。因此共同前缀总长度为 16 位加 5 位,即 21 位。
聚合时,网络地址的前 21 位固定,主机位置 0。第三个八位组的前 5 位为 10000,后 3 位置 0,得到 10000000,即 128。所以聚合后的网络地址为 172.18.128.0/21。
验证覆盖范围:/21 网络的第三个八位组范围为 128~135,包含 129、130、132、133,完全覆盖四条路由。其他选项中,B 和 C 的/22 网络覆盖 128~131,缺失 132 和 133;D 的/23 网络覆盖 132~133,缺失 129 和 130。因此 A 正确。
39
TCP 协议中,发送双方发送报文的初始序号分别为 X 和 Y,在第一次握手时发送方发送给接收方报文,正确的字段是( )。
【解析】
在 TCP 协议的三次握手中,第一次握手由发送方(如客户端)发起,目的是请求建立连接。此时,发送方发送一个 SYN 报文,其中 SYN 标志位设置为 1,表示同步序列号。同时,发送方会选择一个初始序列号(ISN),假设为 X,因此报文中的序号字段设置为 X。在第一次握手中,由于尚未收到对方的任何报文,因此不需要设置 ACK 标志位,也没有确认号。
选项 A 正确描述了这一设置:SYN=1,序号=X。选项 B 错误,因为序号应为初始序号 X,而非 X+1,且第一次握手不应包含 ACK 标志。选项 C 和 D 错误,因为序号 Y 是接收方(如服务器)的初始序号,不应由发送方在第一次握手中使用;同时,ACK 字段在此时也不应出现。
40
下列哪种技术可以最有效地降低访问 WWW 服务器的时延( )。
【解析】 降低访问 WWW 服务器的时延涉及减少从用户发出请求到收到响应的整体延迟。WWW 高速缓存(如代理缓存或内容分发网络 CDN)通过将热门内容存储在离用户更近的网络边缘,使得用户可以直接从缓存服务器获取数据,避免了远程 WWW 服务器的往返通信,从而显著降低了网络传输延迟和服务器处理延迟。这种方法针对性最强,能有效减少时延,尤其在内容重复访问的场景下。
相比之下,高速传输线路主要提升带宽,但对减少延迟的作用有限;高性能 WWW 服务器仅优化服务器端处理,无法解决网络延迟问题;本地域名服务器虽能加速 DNS 解析,但只影响域名查找阶段,后续数据访问的延迟仍取决于网络和服务器响应。因此,WWW 高速缓存是最直接且高效的技术。
解答题
第 41~47 题,共 70 分。
41
(13 分)设记录的关键字(key)集合:K={24, 15, 39, 26, 18, 31, 05, 22},请回答:
(1)依次取 K 中各值,构造一棵二叉排序树(不要求平衡),并写出该树的前序、中序和后序遍历序列。
(2)设 Hash 表表长 m=16,Hash 函数 H(key)=(key)%13,处理冲突方法为“二次探测法”,请依次取 K 中各值,构造出满足所给条件的 Hash 表;并求出等概率条件下查找成功时的平均查找长度。
(3)将给定的 K 调整成一个堆顶元素取最大值的堆(即大根堆)。
42
(13 分)假设二叉树采用二叉链表存储结构存储,设计一个算法,求先序遍历序列中第 k(1≤k≤二叉树中结点个数)个结点的值,要求:
(1)给出算法的基本设计思想。
(2)写出二叉树采用的存储结构代码。
(3)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
43
(12 分)已知 32 位寄存器中存放的变量 x 的机器码为 C000004H,请问:
(1)当 x 是无符号整数时:
x的真值是多少?x/2的真值是多少?x/2存放在R1中的机器码是什么?2x的真值是多少?2x存放在R1中的机器码是什么?
(2)当 x 是带符号整数(补码)时:
x的真值是多少?x/2的真值是多少?x/2存放在R1中的机器码是什么?2x的真值是多少?2x存放在R1中的机器码是什么?
(3)当 x 是 float 型浮点数时:
x的真值是多少?x/2的真值是多少?x/2存放在R1中的机器码是什么?2x的真值是多少?2x存放在R1中的机器码是什么?
44
(12 分)某 16 位机器所使用的指令格式和寻址方式如下所示,该机有四个 20 位基址寄存器,十六个 16 位通用寄存器(可用做变址寄存器)。指令汇编格式中的 S(源)、D(目标)都是通用寄存器,M 是主存的一个单元。三种指令的操作码分别是 MOV(OP)=(A)₁₆、STA(OP)=(B)₁₆、LDA(OP)=(C)₁₆。MOV 是传送指令,STA 为写数据指令,LDA 为读数据指令。
| 指令格式 | 说明 |
|---|---|
| OP 109 87 4 3 0 | MOV S, D |
| OP 109 87 4 3 0 | STA S, M |
| OP 109 87 4 3 0 | LDA S, M |
(1)分析三种指令的指令格式和寻址方式特点。
(2)处理机完成哪一种操作所花时间最短?哪一种最长?第二种指令的执行时间有时会等于第三种指令的执行时间吗?
(3)下列情况中,每个十六进制指令字分别代表什么操作?若有指令编码不正确,如何改正才能成为合法指令?
① (F0F1)₁₆ (3CD2)₁₆
② (2856)₁₆
③ (6DC6)₁₆
④ (1C2)₁₆
45
(8 分)某系统由 R1、R2 和 R3 共 3 种资源,在 T0 时刻 P1、P2、P3 和 P4 这 4 个进程对资源的占用和需求情况如下表所示,此时系统的可用资源向量为 (2,1,2)。试问:
| 进程 | 最大资源需求数量 | 已分配资源数量 |
|---|---|---|
| R1 R2 R3 | R1 R2 R3 | |
| P1 | 3 2 2 | 1 0 0 |
| P2 | 6 1 3 | 4 1 1 |
| P3 | 3 1 4 | 2 0 1 |
| P4 | 4 2 2 | 0 0 2 |
(1)系统是否处于安全状态?如安全,请给出一个安全序列。
(2)如果此时 P1 和 P2 均发出资源请求向量 Request(1,0,1),为了保证系统的安全性,应该如何分配资源给这两个进程?说明你所采用策略的原因。
(3)如果(2)中两个请求立即得到满足后,系统此刻是否处于死锁状态?
46
(7 分)在实现文件系统时,为加快文件目录的检索速度,可利用“文件控制块分解法”。假设目录文件存放在磁盘上,每个盘块有 512 字节。文件控制块占 64 字节,其中文件名占 8 个字节。通常将文件控制块分解成两部分,第一部分占 16 字节(包括文件名和文件内部号),第二部分占 48 字节(包括文件内部号和文件其他描述信息)。
(1)假设某一目录文件共有 254 个文件控制块,试分别给出采用分解法前和分解法后,查找该目录文件的某一个文件控制块的平均访问磁盘次数。(访问每个文件的概率相同)
(2)一般地,若目录文件分解前占用
个盘块,分解后改用
个盘块存放文件名和文件内部号部分,请给出访问磁盘次数减少的条件。(假设
和
个盘块中都正好装满)
47
(9 分)下图是三个计算机局域网 A、B 和 C,分别包含 10 台、8 台和 5 台计算机,通过路由器互联,并通过该路由器的接口 d 联入因特网。路由器各端口名分别为 a、b、c 和 d(假设端口 d 接入 IP 地址为 61.60.21.80 的互联网地址)。局域网 A 和局域网 B 共用一个 C 类网络 IP 地址 202.38.60.0,并将此 IP 地址中主机地址的高两位作为子网编号。局域网 A 的子网编号为 01,局域网 B 的子网编号为 10。IP 地址的低六位作为子网中的主机编号。局域网 C 的网络号是 202.38.61.0。请回答下列问题:

(1)为每个网络的计算机和路由器的端口分配 IP 地址,并写出三个网段的子网掩码。
(2)列出路由器的路由表。
(3)若局域网 B 中的一台主机要向局域网 B 广播一个分组,写出该分组的目的 IP 地址。
(4)若局域网 B 中的一台主机要向局域网 C 广播一个分组,写出该分组的目的 IP 地址。
4 - 模拟卷 4
选择题
第 1~40 小题,每小题 2 分,共 80 分。下列每题给出的四个选项中,只有一个选项最符合试题要求。
1
若循环队列以数组 Q[0..m-1] 为其存储结构,变量 rear 表示循环队列中的队尾元素的实际位置,其移动按 rear=(rear+1) MOD m 进行,变量 length 表示当前循环队列中的元素个数,则循环队列的队首元素的实际位置是( )。
【解析】 循环队列中,队尾元素的位置由 rear 给出,队列当前元素个数为 length。设队首元素的位置为 front,由于队列元素从 front 连续存储到 rear(考虑循环),因此 rear 与 front 满足关系:
解出 front,得:
选项 C 的表达式为 (1 + rear - m - length) MOD m,可化简为:
在模 运算下,减去 不改变余数,因此该表达式等价于:
与推导结果一致。
通过实例验证:设
,
,
,则队首应为位置 9。
计算选项 C:
结果正确;而其他选项均不满足。因此,循环队列的队首元素实际位置为选项 C。
2
若一个栈以向量 V[1..n] 存储,初始栈顶指针 top 为 n+1,则 x 进栈的正确操作是( )。
【解析】
栈以向量 V[1..n] 存储,初始栈顶指针 top 为 n+1,这表示栈为空且栈从数组末端向开头方向增长。因为向量有效索引是 1 到 n,top 初始值 n+1 是一个无效位置,意味着栈底在索引 n 附近,栈顶指针向索引 1 方向移动。
进栈操作需要将元素 x 存入向量的有效位置,并更新栈顶指针指向新栈顶。正确步骤应是先减小 top 指针,使其指向一个有效索引(如从 n+1 减到 n),然后将 x 存入该位置。这样,栈顶元素位于 V[top],top 指向当前栈顶。
分析选项:
- A 和 B 中
top增加会导致越界访问; - D 先存入
x但初始top为n+1,直接访问V[n+1]越界; - 只有 C 先执行
top = top - 1使指针有效,再执行V[top] = x,符合栈的操作逻辑。
因此,C 是正确操作。
3
若一棵深度为 6 的完全二叉树的第 6 层有 3 个叶子结点,则该二叉树共有( )个叶子结点。
【解析】 深度为 6 的完全二叉树,前 5 层必须是满二叉树,因此第 5 层有 2^(5-1)=16 个结点。第 6 层有 3 个叶子结点,由于第 6 层是最底层,所有结点都是叶子结点,且这 3 个结点对应第 5 层前两个结点的子结点:第 5 层第 1 个结点有左右子结点,第 5 层第 2 个结点有左子结点。因此,第 5 层中只有前两个结点有子结点,其余 14 个结点均无子结点,为叶子结点。叶子结点总数等于第 6 层的 3 个加上第 5 层的 14 个,共 17 个。
4
在一棵非空二叉树的中序遍历序列中,根结点的右边( )。
【解析】 中序遍历二叉树的顺序是:先遍历左子树,然后访问根结点,最后遍历右子树。因此,在中序遍历序列中,根结点的左边包含左子树上的所有结点,而根结点的右边包含右子树上的所有结点。选项 A 正确描述了根结点右边只有右子树上的所有结点;其他选项不符合中序遍历的定义。
5
某二叉树结点的中序序列为 BDAECF,后序序列为 DBEFCA,则该二叉树对应的森林包括( )棵树。
【解析】 考查由遍历序列确定二叉树、森林与二叉树的转换。根据后序序列,A 是二叉树的根结点。根据中序遍历序列,则二叉树的形态一定如下图左所示。对于 A 的左子树,由后序序列可知,因为 B 比 D 后被访问,因此,B 必为 D 的父结点,又由中序序列可知,D 是 B 的右儿子。对于 A 的右子树,同理可确定结点 E、C、F 的关系。此二叉树的形态如下图右所示。

再根据二叉树与森林的对应关系。森林中树的棵数即为其对应二叉树(向右上旋转 45° 后)中根结点 A 及其“右兄弟”数。可知此森林中有 3 棵树,根结点分别为 A、C 和 F。
6
在具有 n 个顶点的图 G 中,若最小生成树不唯一,则( )。
【解析】 最小生成树(MST)不唯一意味着图 G 中存在至少两个不同的生成树,它们的总权值相同且都是最小的。选项 A 指出 G 的边数一定大于 n-1。这是因为如果图 G 的边数等于 n-1,则 G 本身是一棵树,其生成树唯一,与 MST 不唯一矛盾。因此,要存在多个 MST,图 G 必须有多余的边,即边数至少为 n,故边数大于 n-1 必然成立。选项 B 错误,因为 MST 不唯一并不要求权值最小的边有多条。例如,一个包含三个顶点、边权分别为 1、2、2 的图,最小权值边只有一条(权值 1),但存在两个 MST(总权值均为 3)。选项 C 错误,因为所有最小生成树的代价必须相等,否则其中代价较大的就不是“最小”生成树。综上,选项 A 正确。
7
以下关于图的表述中,正确的是( )。
【解析】 首先分析选项 A:强连通有向图要求任意两个顶点之间存在双向路径,但并不要求直接有弧(即直接的边)。例如,一个包含三个顶点的有向环,顶点间通过路径相连而非都有直接弧,因此该表述错误。
接着看选项 B:图与树的区别在于树是无环连通图,且对于 n 个顶点的树,边数为 n-1。图的边数可以小于、等于或大于顶点数,例如孤立顶点图边数少于顶点数,因此该表述不准确。
选项 C 正确,因为无向图的连通分量定义为极大连通子图,即不能再添加其他顶点和边而保持连通的子图,这是图论中的标准概念。
最后检查选项 D:子图需要顶点集 V’⊆V 和边集 E’⊆E,且 E’中边的端点必须都在 V’中。选项仅说明 V’和 E’是子集,未强调边的端点限制,因此表述不完整,错误。
综上,正确选项为 C。
8
在关键字随机分布的情况下,用二分查找树的方法进行查找,其平均查找长度与( )量级相当。
【解析】 在关键字随机分布的情况下,构建的二分查找树(BST)通常趋于平衡,树的高度平均为 O(log n),其中 n 是关键字的数量。因此,使用二分查找树进行查找的平均查找长度(ASL)量级为 O(log n)。
折半查找(即二分查找)在有序数组上进行,每次比较后将搜索范围减半,其平均查找长度也是 O(log n) 量级。顺序查找的 ASL 为 O(n),分块查找的 ASL 介于顺序查找和折半查找之间,通常优于 O(n) 但不如 O(log n),而散列查找在理想情况下 ASL 为 O(1)。
因此,二分查找树在随机分布下的平均查找长度与折半查找同属于对数量级。
9
一组数据 (30,20,10,15,35,1,10,5),用堆排序(小顶堆)的筛选方法建立的初始堆为( )。
【解析】 考查初始堆的建立。首先对以第 个结点为根的子树(也即最后一个结点的父结点为根的子树)筛选,使该子树成为堆,之后向前依次对各结点为根的子树进行筛选,直到筛选到根结点。从 依次筛选堆的过程如下图所示:

10
从二叉树的任一结点出发到根的路径上,所经过的结点序列必按其关键字降序排列的是( )。
【解析】
在小顶堆中,每个结点的关键字都小于或等于其子结点的关键字。因此,从任意结点出发,向上遍历父结点直至根结点,所经过的结点关键字会逐渐减小或保持不变,即序列必然是降序排列。
对于大顶堆,父结点的关键字大于或等于子结点的关键字,路径上的结点关键字序列是升序排列,不符合要求。二叉排序树和平衡二叉树的关键字排列没有统一规则,路径上的结点序列不一定满足降序排列。
11
设待排序元素序列所有元素的关键字都相等,则下列排序方法中排序速度最慢的是( )。
【解析】
当待排序元素序列中所有关键字都相等时,序列本身已处于有序状态。此时,不同排序算法的性能表现取决于它们在最好情况下的时间复杂度或实际执行步骤。
直接插入排序:在最好情况下(序列有序),只需进行 n-1 次比较,且无需移动元素,时间复杂度为 O(n),速度很快。
冒泡排序:通过优化(如设置交换标志),在序列有序时,一趟扫描(n-1 次比较)后即可终止,时间复杂度也为 O(n),效率较高。
简单选择排序:无论序列是否有序,都必须执行 n-1 趟选择操作,每趟需比较剩余元素以确定最小(或最大)值,比较次数恒定为约 n(n-1)/2 次,时间复杂度始终为 O(n²),无法利用有序性加速,因此在此场景下速度最慢。
基数排序:其时间复杂度为 O(d*(n+k)),其中 d 为关键字位数,k 为基数。当所有关键字相等时,分配和收集操作仍需执行,但整体仍保持线性时间复杂度,远优于 O(n²)。
综上所述,在关键字全相等的情况下,简单选择排序由于固定的二次时间复杂度,排序速度最慢。
12
已知一台时钟频率为 2GHz 的计算机的 CPI 为 1.2。某程序 P 在该计算机上的指令条数为 4×10⁷ 条。若在该计算机上,程序 P 从开始启动到执行结束所经历的时间是 4s,则运行 P 所用 CPU 时间占整个 CPU 时间的百分比大约是( )。
【解析】 首先,计算程序 P 的 CPU 时间。CPU 时间的计算公式为:CPU 时间 = 指令条数 × CPI / 时钟频率。根据题意,时钟频率为 2 GHz = 2 × 10⁹ Hz,CPI 为 1.2,指令条数应为 4 × 10⁹ 条(注:原题中给出的 4 × 10⁷ 条可能为笔误,因为若按此计算,CPU 时间占比仅为 0.6%,与选项不符,结合计算机典型指令规模,此处采用 4 × 10⁹ 条以匹配选项)。
代入公式:CPU 时间 = (4 × 10⁹) × 1.2 / (2 × 10⁹) = 4.8 × 10⁹ / (2 × 10⁹) = 2.4 秒。
程序 P 从启动到结束所经历的墙钟时间为 4 秒,因此运行 P 所用 CPU 时间占整个 CPU 时间的百分比为:(2.4 秒 / 4 秒) × 100% = 60%。
故答案为 60%,对应选项 B。
13
已知小写英文字母“a”的 ASCII 码值为 61H,现字母“g”被存放在某个存储单元中,若采用偶校验(假设最高位作为校验位),则该存储单元中存放的十六进制数是( )。
【解析】 首先,由已知条件小写字母“a”的 ASCII 码值为 61H,可推知字母“g”的 ASCII 码值为 61H + 6 = 67H。ASCII 码通常用 7 位表示,在存储时占用一个字节,其中低 7 位为数据位,最高位用作校验位。
采用偶校验时,需要使整个字节(包括校验位)中 1 的个数为偶数。计算数据位(即“g”的 ASCII 码 67H 对应的 7 位二进制)中 1 的个数:67H 的二进制表示为 1100111(7 位),其中 1 的个数为 5,是奇数。
因此,校验位应设置为 1,使得总 1 的个数变为偶数(5+1=6)。将校验位 1 与数据位组合,得到完整的 8 位二进制数为 11100111,转换为十六进制为 E7H。
故存储单元中存放的十六进制数是 E7H,对应选项 D。
14
设浮点数的基数为 4,尾数用原码表示,则以下( )是规格化的数。
【解析】 对于基数为 4 的浮点数,规格化要求尾数的绝对值满足 1/4 ≤ |m| < 1。尾数用原码表示,选项中第一位为符号位(1 表示负,0 表示正),数值部分为小数点后的二进制序列。
首先检查各选项数值部分的绝对值或基 4 表示。基数为 4 时,每个基 4 数字对应两个二进制位,规格化要求第一个基 4 数字不为零,即数值部分的前两个二进制位不能全为 0。
- A 选项:数值部分 .001101,前两位为 00,对应基 4 数字 0,绝对值约为 0.203125 < 1/4,不规格化。
- B 选项:数值部分 .001101,前两位为 00,对应基 4 数字 0,绝对值约为 0.203125 < 1/4,不规格化。
- C 选项:数值部分 .011011,前两位为 01,对应基 4 数字 1,绝对值约为 0.421875 ≥ 1/4,且小于 1,满足规格化条件。
- D 选项:数值部分 .000010,前两位为 00,对应基 4 数字 0,绝对值约为 0.03125 < 1/4,不规格化。
因此,只有 C 选项是规格化的数。
15
设某按字节编址的计算机已配有 00000H~07FFFH 的 ROM 区,MAR 为 20 位,现再用 16K×8 位的 RAM 芯片构成剩下的 RAM 区 08000H~FFFFFH,则需要这样的 RAM 芯片( )片。
【解析】 首先,MAR 为 20 位,总地址空间为 2^20=1MB,地址范围从 00000H 到 FFFFFH。ROM 区已配置为 00000H~07FFFH,计算其大小:结束地址 07FFFH 减去起始地址 00000H 再加 1,得到 08000H,即 32KB(因为 08000H=32768 字节=32KB)。
因此,RAM 区的地址范围为 08000H~FFFFFH。总地址空间为 100000H(即 1MB),RAM 区大小等于总空间减去 ROM 区大小,即 100000H - 08000H = F8000H,转换为十进制为 992KB(因为 F8000H=1,015,808 字节=992KB)。
题目中 RAM 芯片规格为 16K×8 位,即每个芯片容量为 16KB(16K×8 位=16,384 字节)。所需芯片数等于 RAM 区总容量除以单个芯片容量:992KB / 16KB = 62。因此,需要 62 片这样的 RAM 芯片。
16
在 Cache 和主存构成的两级存储体系中,Cache 的存取时间是 100ns,主存的存取时间是 1000ns,如果希望有效(平均)存取时间不超过 Cache 存取时间 15%,则 Cache 的命中率至少应为( )。(设 Cache 和主存不能同时访问。)
【解析】
在高速缓存与主存不能同时访问的两级存储体系中,有效存取时间取决于命中率
。命中时存取时间为高速缓存存取时间
,未命中时需先访问高速缓存(
)再访问主存(
),总时间为
。因此有效存取时间公式为:
题目要求有效存取时间不超过高速缓存存取时间的
,即不超过
。
代入不等式:
解得:
即命中率至少为
。
选项中
满足要求,因此高速缓存命中率至少应为
。
17
为了缩短指令中某个地址段的位数,有效的方法是采取( )。
【解析】 为了缩短指令中地址段的位数,有效的方法是采用寄存器寻址。在寄存器寻址中,操作数存储在寄存器中,指令中只需指定寄存器编号。由于寄存器数量有限(例如,32 个寄存器仅需 5 位二进制表示),而内存地址通常需要较多位数(如 32 位或 64 位),因此使用寄存器编号替代内存地址能显著减少地址段所需的位数。
其他选项分析:立即寻址将操作数直接包含在指令中,虽能缩短指令整体长度,但它是消除地址段而非缩短地址段位数;变址寻址通过寄存器与偏移量组合形成地址,偏移量可能较短,但需额外指定寄存器,不直接优化地址段位数;间接寻址指令中包含一个间接地址,该地址位数通常与内存地址相近,不能有效缩短地址段位数。因此,寄存器寻址是最直接有效的方法。
18
下面关于 RISC 技术的描述中,正确的是( )。
【解析】 RISC(精简指令集计算机)技术的核心设计思想是简化指令集,使每条指令的执行时间尽可能缩短,从而提高处理器的整体效率。减少指令数量是 RISC 的一个关键特征,这有助于简化硬件设计、优化流水线执行,并降低指令复杂度。因此,选项 C“RISC 的主要目标是减少指令数”是正确的描述。
选项 A 不正确,因为 RISC 并非简单恢复到早期计算机架构,而是基于现代设计原则(如硬连线控制、流水线技术)的全新演进。选项 B 错误,因为 RISC 指令集通常是独立设计的,专注于常用指令的优化,而不是从 CISC 指令系统中挑选一部分以实现兼容;实际上,RISC 与 CISC 在指令集设计上有本质区别。选项 D 也不准确,虽然一些 RISC 处理器可能不直接包含乘、除法或浮点运算指令(或通过软件模拟实现),但现代 RISC 架构常将这些指令作为扩展集成,且在使用时并非“很少使用”,而是根据应用需求频繁调用。
19
流水 CPU 是由一系列叫做“段”的处理部件组成的。当流水稳定后,相比具备 个并行部件的 CPU 相比,一个 段流水 CPU( )。
【解析】 对于一个 段流水 CPU,在流水稳定后,理想情况下每个时钟周期可以完成一条指令,因此吞吐能力为每时钟周期一条指令。而对于具备 个并行部件的 CPU,每个部件可以独立执行指令,每个时钟周期可以同时完成 条指令,因此吞吐能力为每时钟周期 条指令。假设时钟周期相同,前者的吞吐能力明显小于后者。因此,一个 段流水 CPU 的吞吐能力小于具备 个并行部件的 CPU 的吞吐能力,对应选项 C。
20
在做手术过程中,医生将手伸出,等护士将手术刀递上,待医生握紧后,护士才松手。如果把医生和护士看作两个通信模块,上述一系列动作相当于( )。
【解析】 在手术过程中,医生伸手相当于通信中的发送方发出请求信号,护士递上手术刀相当于接收方收到请求后发送应答信号,而医生握紧后护士才松手相当于发送方确认收到应答后,接收方等待确认信号才完成操作。这一系列动作体现了完整的握手协议,需要双方相互确认,确保可靠传递。异步通信的全互锁方式正是通过请求、应答和确认三个步骤实现可靠通信,而半互锁方式缺少接收方等待确认的环节,不互锁方式则没有等待过程,同步通信则依赖统一时钟而不需要握手。因此,该场景对应于异步通信的全互锁方式。
21
当有中断源发出请求时,CPU 可执行相应的中断服务程序,以下可以提出中断的是( )。
I. 外部事件
II. Cache
III. 虚拟存储器失效
IV. 浮点运算下溢
V. 浮点运算上溢
【解析】
中断源可以分为外部中断和内部中断(异常)。外部事件如 I/O 设备请求属于典型的外部中断,能够提出中断请求。虚拟存储器失效(如页面错误)是内部异常,会触发缺页中断,由 CPU 执行中断服务程序处理。浮点运算上溢属于算术异常,通常作为中断源,CPU 可响应并处理。Cache 缺失一般由硬件透明处理,不直接向 CPU 提出中断;浮点运算下溢虽然也是浮点异常,但在许多系统中常被屏蔽或默认处理为零,一般不视为直接中断源。因此,可以提出中断的是 I、III 和 V。
22
在 DMA 方式下,数据从内存传送到外设经过的路径是( )。
【解析】本题考查 DMA 的数据传送方式。在 DMA 方式下,数据传送不需要经过 CPU,但需要经过 DMA 控制器中的数据缓冲寄存器。DMA 控制器中的数据缓冲寄存器用来暂存每次传送的数据。输入时,数据由外设(如磁盘)先送往数据缓冲寄存器,再通过数据总线送到主存。反之,输出时,数据由主存通过数据总线送到数据缓冲寄存器,然后再送到外设。
23
当中断发生后,进入中断处理的程序属于( )。
【解析】 中断发生后,CPU 会暂停当前执行的用户程序,并切换到内核模式(或特权模式),然后根据中断向量表跳转到对应的中断处理程序。这些中断处理程序,也称为中断服务例程(ISR),是操作系统内核的一部分,负责直接处理硬件中断、异常等事件,管理系统资源和调度。由于中断处理涉及对硬件和核心系统资源的访问,必须由操作系统在特权模式下执行,用户程序无权直接处理中断。因此,进入中断处理的程序始终属于 OS 程序,而非用户程序或其他独立实体。
24
支持多道程序设计的操作系统在运行过程中,会不断选择新进程来运行,共享 CPU 资源,但是下面哪个不是操作系统选择新进程的直接原因,( )。
【解析】
在支持多道程序设计的操作系统中,进程调度是共享 CPU 资源的核心机制。操作系统选择新进程来运行通常由特定事件直接触发,这些事件导致当前运行的进程无法继续使用 CPU,从而需要调度程序从就绪队列中选择另一个进程。
选项 A、B 和 C 描述的情况都会直接导致当前进程停止运行:时间片用完时进程被剥夺 CPU;进程出错时可能终止或进入异常状态;进程等待事件时会主动阻塞并释放 CPU。这些事件都意味着 CPU 立即空闲,因此操作系统必须选择新进程来运行,它们都是调度的直接原因。
选项 D 描述的是有新进程被创建并进入就绪队列。这种情况本身并不直接迫使操作系统中断当前进程的运行。除非采用抢占式调度且新进程优先级更高,否则新进程只是加入就绪队列等待,当前进程可能继续执行直到主动放弃 CPU 或时间片用完。因此,新进程创建不是选择新进程的直接原因,而是可能影响后续调度决策的一个条件。
25
为实现人机交互作用应采用的调度算法是( )。
【解析】 人机交互作用通常指交互式系统,如分时系统,其核心需求是快速响应时间以保证用户体验流畅。时间片轮转法通过为每个进程分配固定的时间片,并在时间片用完后轮转调度,确保了所有进程都能公平、定期地获得 CPU 时间,从而提供可预测的低延迟响应,非常适合交互式环境。
其他算法则不太适用:短作业优先调度偏向短作业,可能导致长作业饿死,响应时间不稳定;基于优先权的剥夺调度算法更适用于实时系统,可能牺牲公平性;高响应比优先调度主要用于批处理系统,无法保证交互所需的即时响应。因此,时间片轮转法是最佳选择。
26
某系统有 3 台打印机,N 个进程共享使用。每个进程需先申请 1 台打印机,使用完毕后再释放。用 PV 操作管理时,设置信号量 S 的初值为 3,以下关于信号量 S 的叙述中,正确的是()
【解析】
- 信号量 S 用于表示资源(打印机)的数量,采用资源信号量(或称记录型信号量)的典型用法。初始时 S = 3,表示 3 台打印机都可用。
- 进程申请打印机时执行 P(S):若 S > 0,则 S 减 1 并分配一台打印机;若 S = 0,则进程阻塞等待。因此 S 的当前值表示系统中当前可用的打印机数量,A 正确。
- B 错误,被占用的打印机数 = 3 − S。
- C 错误,阻塞进程数由另一个等待队列记录,并不等于 S 的值(S 可能为负数,其绝对值表示阻塞进程数,但题目是记录型信号量的常规描述,一般 S 值不直接表示阻塞进程数,且通常教材中 S 的值可以小于 0,其绝对值为等待进程数,但本题强调“当前 S 的值”直接含义,应选 A)。
- D 错误,S = 0 表示打印机已全部分配出去,可能正有多个进程在使用打印机。
27
若存储单元长度为
,存放在该存储单元的程序长度为
,则剩下长度为
的空间称为该单元的内部碎片。下面存储分配方法中,哪种存在内部碎片( )。
I. 固定式分区
II. 动态分区
III. 页式管理
IV. 段式管理
V. 段页式管理
VI. 请求段式管理
【解析】
内部碎片是指分配给程序的内存块中未被使用的部分,即当分配的内存块大于程序实际需要的空间时,多余的部分形成内部碎片。根据定义,分析各存储分配方法:
固定式分区(I)将内存划分为固定大小的分区,程序分配到足够大的分区中,如果分区大于程序大小,分区内剩余空间即为内部碎片。
动态分区(II)根据程序需要动态分配内存,分配的大小恰好等于程序需求,因此没有内部碎片,但可能产生外部碎片。
页式管理(III)将内存和程序分为固定大小的页和页框,程序的最后一页可能不满,导致页框内剩余空间成为内部碎片。
段式管理(IV)按程序的逻辑段分配内存,段大小可变,分配的内存块等于段大小,因此没有内部碎片。
段页式管理(V)结合段式和页式,程序先分段再分页,内存以页为单位分配,由于页大小固定,每个页框可能未被完全利用,存在内部碎片。
请求段式管理(VI)基于段式管理,段大小可变,分配内存块等于段大小,没有内部碎片。
因此,存在内部碎片的方法是固定式分区(I)、页式管理(III)和段页式管理(V),对应选项 B。
28
在一个请求分页系统中,采用 LRU 页面置换算法时,假如一个作业的页面走向为 1,3,2,1,1,3,5,1,3,2,1,5。当分配给该作业的物理块数分别为 3 和 4 时,则在访问过程中所发生的缺页率分别为( )。
【解析】
首先计算物理块数为 3 时的缺页率。采用 LRU 算法,模拟访问过程:初始物理块为空,页面走向为
当物理块数为 3 时,访问过程中缺页发生情况如下:
- 访问 1、3、2 时均缺页(加载页面);
- 访问第 4 个页面 1 时命中;
- 第 5 个页面 1 命中;
- 第 6 个页面 3 命中;
- 第 7 个页面 5 缺页(置换最近最少使用的页面 2);
- 第 8 个页面 1 命中;
- 第 9 个页面 3 命中;
- 第 10 个页面 2 缺页(置换页面 5);
- 第 11 个页面 1 命中;
- 第 12 个页面 5 缺页(置换页面 3)。
总计缺页次数为 6 次,总访问次数为 12 次,缺页率为
再计算物理块数为 4 时的缺页率。物理块数为 4 时,模拟过程如下:
- 访问 1、3、2 时均缺页(加载页面);
- 访问第 4 个页面 1 命中;
- 第 5 个页面 1 命中;
- 第 6 个页面 3 命中;
- 第 7 个页面 5 缺页(此时物理块未满,加载页面 5);
- 之后第 8 至 12 个页面 均在物理块中命中。
总计缺页次数为 4 次,总访问次数为 12 次,缺页率约为
因此,物理块数 3 和 4 对应的缺页率分别为 和 ,对应选项 A。
29
下列关于文件系统的说法中,错误的是( )。
I. 一个文件在同一系统中、不同的存储介质上的拷贝,应采用同一种物理结构
II. 对一个文件的访问,常由用户访问权限和用户优先级共同限制
III. 文件系统采用树型目录结构后,对于不同用户的文件,其文件名应该不同
IV. 为防止系统故障造成系统内文件受损,常采用存取控制矩阵方法保护文件
【解析】
说法 I 错误,因为文件的物理结构取决于存储介质的特性,不同介质(如硬盘与磁带)可能采用不同的物理结构以优化性能或适应硬件限制,因此拷贝到不同介质时不必使用同一种物理结构。
说法 II 错误,对文件的访问限制主要基于用户访问权限(如读、写、执行),用户优先级通常用于进程调度或资源分配,而非直接限制文件访问,因此“常由用户优先级共同限制”不符合常规文件系统设计。
说法 III 错误,树型目录结构允许通过路径唯一标识文件,不同用户的文件可以具有相同的文件名,只要存储在不同目录下,无需强制文件名不同。
说法 IV 错误,存取控制矩阵主要用于防止未授权访问,属于安全保护机制;为防止系统故障导致文件受损,常采用备份、日志文件系统或冗余存储等恢复方法,而非存取控制矩阵。
综上,I、II、III 和 IV 均错误,故正确答案为 D。
30
现代操作系统中,文件系统都有效地解决了文件重名(即允许不同用户的文件可以具有相同的文件名)问题,系统是通过( )来实现这一功能的。
【解析】 现代操作系统中,文件系统采用树型目录结构来解决文件重名问题。这种结构通过路径名唯一标识文件,路径由目录层级和文件名组成。不同用户可以在各自的目录下创建同名文件,因为完整路径不同,系统能够区分它们,避免冲突。
例如,用户 A 的文件可能位于“/home/userA/doc.txt”,用户 B 的同名文件位于“/home/userB/doc.txt”。树型目录结构自然支持这种隔离,是文件系统管理文件的基本方式。
其他选项中,建立索引表主要用于加快文件访问速度,建立指针常用于文件链接,而“重名翻译机构”并非操作系统标准术语,因此它们不能有效解决文件重名问题。
31
若用 8 个字(字长 32 位,且字号和位号都从 0 开始计数)组成的位示图管理内存,假设用户归还一个块号为 100 的内存块时,它对应位示图的位置为( )。
【解析】 位示图使用 8 个字(每个字 32 位)管理内存,总位数为 8×32=256 位,对应 256 个内存块,块号从 0 到 255。字号和位号均从 0 开始计数。计算块号 100 对应的位示图位置时,采用公式:字号 = 块号 ÷ 每字位数,位号 = 块号 % 每字位数。每字位数为 32,因此 100 ÷ 32 = 3(商),余数 4。即字号为 3,位号为 4。
验证:字号 3 对应的起始块号为 3×32=96,结束块号为 127。块号 100 在该范围内,位号=100-96=4。故对应位示图位置为字号 3、位号 4,与选项 C 一致。
32
I/O 中断是 CPU 与通道协调工作的一种手段,所以在( )时,便要产生中断。
【解析】 I/O 中断是 CPU 与通道之间协调工作的重要机制,用于通知 CPU 有关 I/O 操作的状态变化。在通道系统中,通道独立执行通道程序来处理 I/O 操作,当通道完成通道程序的执行时,它必须向 CPU 发出中断信号,以便 CPU 得知操作已结束,并可以继续后续处理(如检查操作结果或启动新的 I/O)。因此,在这种情况下,中断是必须产生的。
对于其他选项:A 描述的是启动被拒绝的异常情况,虽然也可能产生中断,但并非通道协调工作中的常态;B 中通道接收启动请求时通常不会立即产生中断,因为通道只是开始执行程序;D 过于模糊,通道在执行过程中可能仅在特定事件(如错误)下产生中断,而非必然。综上,C 是最符合题意的选项。
33
对于可靠服务和不可靠服务,正确的理解是( )。
【解析】
可靠服务和不可靠服务是计算机网络中的重要概念。可靠服务指数据传输过程中确保无错误、不丢失、不重复且按序交付,通常通过协议机制(如确认、重传、错误检测等)实现,而非仅依赖高质量的物理线路,因此选项 A 不正确。选项 B 的说法过于悲观,即使网络层不可靠,用户或应用程序可以通过上层协议(如 TCP)或自定义机制来提升可靠性,并非无计可施。
选项 C 提到“可靠性是相对的,不可能完全保证”,这在一定程度上反映了现实网络中的不确定性,但网络协议设计的目标是提供高可靠性,理论上可通过持续重传等机制接近完全保证,因此该表述不够准确。相比之下,选项 D 正确指出,对于不可靠的网络(如 IP 网络),可以通过应用层或用户端的措施(如使用 TCP 协议或实现应用层确认)来保障数据传输的正确性,这体现了计算机网络中分层设计和端到端原则的核心理念。
综上,选项 D 最符合对可靠服务和不可靠服务的正确理解。
34
采用 GBN 帧协议,接收窗口内的序号为 4 时,接收到正确的 5 号帧应该( )。
【解析】 在 GBN(Go-Back-N)协议中,接收窗口的大小固定为 1,这意味着接收方每次只期望接收一个按序到达的帧。题目中,接收窗口内的序号为 4,表示接收方正等待接收序号为 4 的帧。当接收到正确的 5 号帧时,由于 5 号帧不是期望的序号(4 号),它属于乱序到达的帧。根据 GBN 协议规则,接收方会直接丢弃所有乱序帧,而不进行缓存或处理。同时,接收窗口不会滑动,因为滑动窗口的条件是收到期望的序号帧(即 4 号帧)。因此,丢弃 5 号帧是符合 GBN 协议的正确操作。其他选项如滑动窗口、缓存或交给上层处理都不适用于 GBN 协议对乱序帧的处理方式。
35
信道速率为 4kbps,采用停止—等待协议,设传播时延 ms,确认帧长度和处理时间均可忽略。若信道的利用率能达到至少 50%,则帧长至少为( )。
【解析】
信道利用率是指发送数据的时间占总周期时间的比例。在停止—等待协议中,一个周期包括发送数据帧、数据帧的传播时延、发送确认帧(本题中确认帧长度可忽略,故发送时间为 0)以及确认帧的传播时延。设帧长为
比特,信道速率
,则发送时间
。传播时延
,总周期时间为
。
信道利用率
,要求
,即
解此不等式:
代入
和
,得
因此,帧长至少为 160 比特,对应选项 C。
36
TCP/IP 网络中,某主机的 IP 地址为 130.25.3.135,子网掩码为 255.255.255.192,那么该主机所在的子网的网络地址是( ),该子网最大可分配地址个数是( )。
【解析】
首先,计算子网的网络地址。将 IP 地址 130.25.3.135 和子网掩码 255.255.255.192 转换为二进制进行 AND 操作。
- IP 地址的二进制为
10000010.00011001.00000011.10000111 - 子网掩码的二进制为
11111111.11111111.11111111.11000000
AND 操作后,前三个字节不变,最后一个字节为10000111 AND 11000000 = 10000000
即十进制 128,因此网络地址为 130.25.3.128。
其次,计算子网最大可分配地址个数。子网掩码 255.255.255.192 对应 /26,主机位有
位,总主机地址数为
。减去网络地址和广播地址后,可分配地址个数为
因此,该子网网络地址为 130.25.3.128,最大可分配地址个数为
,对应选项 C。
37
R1 和 R2 是一个自治系统中采用 RIP 路由协议的两个相邻路由器,R1 的路由表如表 1 所示,当 R1 收到 R2 发送的报文(见表 2)后,R1 更新后的 3 个路由表项中距离值从上到下依次为( )。
【解析】 RIP 协议采用距离向量算法,路由器根据邻居发来的路由更新报文更新自己的路由表。更新时,对于每个目的网络,计算通过邻居的新距离:邻居报告的距离加上从本路由器到邻居的跳数(相邻路由器跳数为 1),然后与当前距离比较,若新距离更小则更新,若相等或更大则保持原路由。
对于目的网络 10.0.0.0,R1 当前为直接连接,距离 0;R2 报告距离 3,新距离为 3+1=4,大于 0,因此保持距离 0 不变。
对于目的网络 20.0.0.0,R1 当前距离 7 通过 R2;R2 报告距离 4,新距离为 4+1=5,小于 7,因此更新为距离 5。
对于目的网络 30.0.0.0,R1 当前距离 4 通过 R2;R2 报告距离 3,新距离为 3+1=4,等于当前距离,因此保持距离 4 不变。
更新后三个路由表项的距离值依次为 0、5、4,对应选项 D。
38
下图中,主机 A 发送一个 IP 数据报给主机 B。通信过程中以太网 1 上出现的以太网帧中承载一个 IP 数据报,该以太网帧中的目的地址和 IP 报头中的目的地址分别是( )。

【解析】 在主机 A 向主机 B 发送 IP 数据报的过程中,由于主机 B 位于不同的网络(通过 WAN 连接),主机 A 需要先将数据报发送到默认网关(即交换机 R1,在此场景中充当路由器或网关角色)。因此,在以太网 1 上,主机 A 发出的以太网帧的目的 MAC 地址是下一跳设备 R1 的 MAC 地址,以便帧能正确传递到 R1。而 IP 数据报头的目的 IP 地址始终是最终目标主机 B 的 IP 地址,不会在传输过程中改变。所以,以太网帧中的目的地址是 R1 的 MAC 地址,IP 报头中的目的地址是 B 的 IP 地址,对应选项 C。
39
下列网络设备中,能隔离 ARP 广播帧的是( )。
【解析】
ARP(地址解析协议)广播帧用于在局域网内将 IP 地址解析为 MAC 地址,属于数据链路层的广播帧。隔离广播帧意味着阻止其传播到其他网络段,从而缩小广播域。
路由器工作在网络层(第三层),基于 IP 地址进行路由决策。当路由器接收到 ARP 广播帧时,不会将其转发到其他接口,因为广播帧的目标是本地网络,路由器会终止广播域。因此,路由器能有效隔离 ARP 广播帧。
其他设备则不能隔离 ARP 广播帧:
- 网桥工作在数据链路层(第二层),虽然能基于 MAC 地址过滤帧,但会转发广播帧,扩展了广播域。
- 以太网交换机本质上是多端口网桥,默认情况下将广播帧泛洪到所有端口(除源端口),不隔离广播域;除非配置 VLAN,但这不是其基本功能。
- 集线器工作在物理层(第一层),仅对信号进行广播,所有端口共享同一冲突域和广播域,无法隔离任何帧。
因此,只有路由器具备隔离 ARP 广播帧的能力。
40
下列关于客户/服务器模型的描述中,错误的是( )。
I. 客户端和服务器必须都事先知道对方的地址,以提供请求和服务
II. HTTP 基于客户/服务器模型,客户端和服务器端的默认端口号都是 80
III. 浏览器显示的内容来自服务器
IV. 客户端是请求方,即使连接建立后,服务器也不能主动发送数据
【解析】
I 错误:在客户/服务器模型中,客户端需要知道服务器的地址以发起请求,但服务器不需要事先知道客户端的地址;服务器在连接建立后从请求中获取客户端地址。
II 错误:HTTP 基于客户/服务器模型,但默认端口号仅服务器端为 80,客户端使用临时分配的随机端口,并非固定为 80。
III 正确:浏览器作为客户端,其显示的内容确实来自服务器响应的数据。
IV 错误:客户/服务器模型中,服务器在某些协议下可以主动发送数据,例如 FTP 主动模式或 WebSocket 推送,并非绝对不能主动发送。
因此,错误的陈述是 I、II 和 IV,对应选项 C。
解答题
第 41~47 题,共 70 分。
41
请回答下列问题:
(1) 试证明若图中各条边的权值各不相同,则它的最小生成树唯一。
(2) Prim 算法和 Kruskal 算法生成的最小生成树一定相同吗?
(3) 画出下列带权图 G 的所有最小生成树。

42
在数组中,某个数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如,在数组 [2, 4, 1, 16, 7, 5, 11, 9] 中,数对之差的最大值是 11,是 16 减去 5 的结果。
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度。
43
(12 分)假设有两个整数 和 , , 。采用补码形式(含 1 位符号位)表示, 和 分别存放在寄存器 A 和 B 中。另外,还有两个寄存器 C 和 D。A、B、C、D 都是 8 位的寄存器。请回答下列问题:(要求最终用十六进制表示二进制序列)
(1)寄存器 A 和 B 中的内容分别是什么?
(2)
和
相加后的结果存放在 C 寄存器中,寄存器 C 中的内容是什么?此时,溢出标志位 OF 是什么?符号标志位 SF 是什么?进位标志位 CF 是什么?
(3)
和
相减后的结果存放在 D 寄存器中,寄存器 D 中的内容是什么?此时,溢出标志位 OF 是什么?符号标志位 SF 是什么?进位标志位 CF 是什么?
44
(12 分)下图所示的处理机逻辑框图中,有两条独立的总线和两个独立的存储器。已知指令存储器 IM 最大容量为 16384 字(字长 18 位),数据存储器 DM 最大容量为 65536 字(字长 16 位)。各寄存器均有“打入”(R_in)和“送出”(R_out)控制命令,但图中未标出。
(1)请指出下列各寄存器的位数:
程序计数器 PC、指令寄存器 IR、累加器 AC0 和 AC1、通用寄存器 R0-R7、指令存储器地址寄存器 IAR、指令存储器数据寄存器 IDR、数据存储器地址寄存器 DAR、数据存储器数据寄存器 DDR。
(2)设处理器的指令格式为:
17 10 9 0
| OP | X |
加法指令可写为“ADD X (R_i)”。其功能是 ,其中 部分通过寻址方式指向数据存储器,现取 为 R1。试画出 ADD 指令从取指令开始到执行结束的操作序列图,写明基本操作步骤和相应的微操作控制信号。(假设 PC+1 → PC 有专门的部件和信号控制)

45
(8 分)在一间酒吧里有 3 个音乐爱好者队列,第 1 队的音乐爱好者只有随身听,第 2 队只有音乐磁带,第 3 队只有电池。而要听音乐就必须随身听、音乐磁带和电池这 3 种物品俱全。酒吧老板一次出售这 3 种物品中的任意两种。当一名音乐爱好者得到这 3 种物品并听完一首乐曲后,酒吧老板才能再一次出售这 3 种物品中的任意两种。于是第 2 名音乐爱好者得到这 3 种物品,并开始听乐曲。全部买卖就这样进行下去。试用 P、V 操作正确解决这一买卖。
46
(8 分)如果磁盘的每个磁道分成 9 个块,现有一文件有 A、B、…、I 共 9 个记录,每个记录的大小与块的大小相等,若磁盘转速为 6000RPM,每读出一块后需要 2.5ms 的处理时间。若忽略其他辅助时间,且一开始磁头在即将要读 A 记录的位置,试问:
(1)如果将这些记录顺序存放在一磁道上,则顺序读出该文件需多少时间?
(2)若要求顺序读出的时间最短,则应该如何安排文件的存放位置?
47
(9 分)考虑某路由器具有下列路由表项:
(1)假设路由器接收到一个目的地址为 142.150.71.132 的 IP 分组,请确定该路由器为该 IP 分组选择的下一跳,并解释说明。
(2)在上面的路由器表中增加一条路由表项,该路由表项使以 142.150.71.132 为目的地址的 IP 分组选择“A”作为下一跳,而不影响其他目的地址的 IP 分组转发。
(3)在上面的路由表中增加一条路由表项,使所有目的地址与该路由表中任何路由表项都不匹配的 IP 分组被转发到下一跳“E”。
(4)将 142.150.64.0/24 划分为 4 个规模尽可能大的等长子网,给出子网掩码及每个子网的可分配地址范围。
5 - 模拟卷 5
选择题
第 1~40 小题,每小题 2 分,共 80 分。下列每题给出的四个选项中,只有一个选项最符合试题要求。
1
假设栈的容量为 3,入栈的序列为 1,2,3,4,5,则出栈的序列可能为( )。
【解析】
栈的容量为 3,入栈序列固定为 1,2,3,4,5。出栈序列必须符合栈的后进先出规则,且受容量限制。
对于选项 A(3,2,1,5,4):
- 先入栈 1,2,3(栈满),出栈 3,2,1,栈空。
- 再入栈 4,入栈 5,出栈 5,4。
操作过程中栈内元素数始终不超过 3,且符合出栈序列,因此可能。
对于选项 B(1,5,4,3,2):
- 出栈 1 后,需出栈 5,但 5 尚未入栈。入栈 2,3,4 后栈满,无法直接入栈 5;若先出栈元素则破坏序列顺序。
- 要使 5 先出栈,需在 5 入栈时栈中包含 4,3,2,但容量仅为 3,无法同时容纳 4 个元素,因此不可能。
对于选项 C(5,4,3,2,1):
- 需先出栈 5,但 5 最后入栈。入栈 1,2,3 后栈满,入栈 4 需先出栈元素,而出栈会破坏序列以 5 开始,因此不可能。
对于选项 D(4,3,2,1,5):
- 需先出栈 4,但入栈 1,2,3 后栈满,入栈 4 需先出栈元素,而出栈会导致序列首元素不为 4,因此不可能。
综上,只有选项 A 可能。
2
若以 1234 作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列是( )。
【解析】
输入序列为 1234,需找出既不能由输入受限双端队列(插入仅在一端,删除可在两端)也不能由输出受限双端队列(删除仅在一端,插入可在两端)得到的输出序列。
- 选项 A(1234):两种受限队列均可通过顺序插入和删除得到。
- 选项 B(4132):输入受限队列可通过插入 1,2,3,4 后依次删除后端 4、前端 1、后端 3、前端 2 得到;输出受限队列无法得到,因为需要插入 4 前队列前端为 1 且后续顺序为 3,2,但无法通过插入 1,2,3 得到所需队列[1,3,2]。
- 选项 C(4231):输入受限队列中,插入 1,2,3,4 后删除后端 4,队列变为[1,2,3],2 不在端部,无法直接输出 2 而不先输出 1 或 3;输出受限队列中,需要插入 4 前队列为[2,3,1],但无法通过插入 1,2,3 得到该队列。因此两种队列均无法得到 4231。
- 选项 D(4213):输入受限队列无法得到(类似 4231 的原因),但输出受限队列可通过插入 1,2,3 得到队列[2,1,3],再插入 4 前端后依次删除得到 4213。
综上,4231 既不能由输入受限也不能由输出受限双端队列得到。
3
在下列遍历算法中,在遍历序列中叶结点之间的次序可能与其他算法不同的算法是( )。
【解析】
先序、中序和后序遍历算法均属于深度优先遍历,其递归或迭代过程都遵循先处理左子树、后处理右子树的原则。因此,对于任意二叉树,这三种遍历算法访问叶结点的次序始终相同:左子树中的所有叶结点都先于右子树中的所有叶结点被访问,且左、右子树内部叶结点的相对顺序也一致。而层次遍历算法采用广度优先策略,按层次从上到下、从左到右访问节点。由于叶结点可能分布在不同层次,其访问次序取决于层次和同一层次中的左右位置,可能与深度优先遍历的叶结点次序不同。例如,对于根节点有左子节点(含两个叶结点)和右子节点(为叶结点)的二叉树,先序、中序和后序遍历的叶结点次序均为左子树中的两个叶结点先于右子叶结点,而层次遍历则先访问右子叶结点(位于第二层),再访问左子树中的叶结点(位于第三层)。因此,层次遍历算法的叶结点次序可能与其他算法不同。
4
一般说来,若深度为 的 个结点的二叉树具有最小路径长度时,第 层(根为第 1 层)上的结点数为( )。
【解析】
对于深度为 k 且具有最小路径长度的二叉树,为了使所有结点到根的路径长度之和最小,树应尽可能平衡,即前 k-1 层完全填满。前 k-1 层的结点总数为 ,剩余结点全部位于第 k 层。因此,第 k 层的结点数为 ,对应选项 A 和 B(两者表达式相同)。选项 C 和 D 与推导结果不符,故正确答案为 A。
5
利用逐个插入建立序列 (50,72,43,85,75,20,35,45,65,30) 对应的二叉排序树后,要查找元素 30 要进行的元素间比较次数是( )。
【解析】 考查二叉排序树的构造和查找。按题中数据的输入次序,建立的二叉排序树如右图所示。查找元素 30 需要依次比较的元素为 50,43,20,35,30,比较次数为 5 次。
50
/ \
43 72
/ \ / \
20 45 65 85
\ /
35 75
/
30
6
由 4 棵树组成的森林中,第一、第二、第三和第四棵树中的结点数分别为 30、10、20、5,当把森林转换成二叉树后,对应二叉树中根结点的右子树的左子树的结点数为( )。
【解析】
将森林转换成二叉树时,采用“左孩子右兄弟”的表示法。对于由多棵树组成的森林,转换规则为:取第一棵树的根作为二叉树的根,根的左子树由第一棵树中根的子树森林转换而成,根的右子树由剩余树组成的森林转换而成。
给定森林中四棵树的结点数分别为 30、10、20、5。转换后二叉树的结构如下:
- 二叉树的根对应第一棵树的根。
- 根的左子树由第一棵树中除根外的 29 个结点转换而成,结点数为 29。
- 根的右子树由第二、三、四棵树(结点数共 10+20+5=35)转换而成。
根的右子树本身也是一棵二叉树,其根对应第二棵树的根。该右子树的左子树由第二棵树中除根外的子树森林转换而成,第二棵树有 10 个结点,除根外有 9 个结点,因此该左子树的结点数为 9。
故根结点的右子树的左子树的结点数为 9。
7
如果具有 个顶点的图是一个环,则它有( )棵生成树。
【解析】 由于图是一个环,它包含 n 个顶点和 n 条边。生成树是连接所有顶点且无环的子图,对于环图,只需移除任意一条边即可打破环并得到一棵生成树。环中共有 n 条边,每条边的移除对应一棵不同的生成树,因此生成树的数量为 n。
8
假设有 个顶点 条边的有向图用邻接表表示,则删除与某个顶点 相关的所有边的时间复杂度为( )。
【解析】
在有向图的邻接表表示中,每个顶点维护一个链表存储其出边。删除与顶点 相关的所有边包括两部分:一是删除顶点 的所有出边,二是删除所有指向顶点 的入边。删除出边只需清空顶点 的邻接链表,时间复杂度为 ,其中 。删除入边则需要遍历所有顶点的邻接链表,检查每条边是否指向 ,并在找到时删除。遍历所有链表需访问 个顶点和 条边,时间复杂度为 。因此,总时间复杂度为 。
9
折半查找有序表 (2,10,25,35,40,65,70,75,81,82,88,100),若查找元素 75,需依次与表中元素( )进行比较。
【解析】 考查折半查找的查找过程。有序表长度为 12,依据折半查找的思想:
- 第一次查找第 个元素,即 65;
- 第二次查找第 个元素,即 81;
- 第三次查找第 个元素,即 70;
- 第四次查找第 个元素,即 75。
比较的元素依次为 65、81、70、75。对应的折半查找判定树如下图所示。
65
/ \
25 81
/ \ / \
2 35 70 88
/ \ \ / \
10 40 75 82 100
10
堆排序分为两个阶段,其中第一阶段将给定的序列建成一个堆,第二阶段逐次输出堆顶元素。设给定序列{48,62,35,77,55,14,35,98},若在堆排序的第一阶段将该序列建成一个堆(大根堆),那么交换元素的次数为( )。
【解析】 考查初始堆的构造过程。首先对以第 个结点为根的子树筛选,使该子树成为堆,之后向前依次对各结点为根的子树进行筛选,直到筛选到根结点。序列 建立初始堆的过程如下所示:

11
对 {05,46,13,55,94,17,42} 进行基数排序,一趟排序的结果是( )。
【解析】
基数排序通常从最低有效位(LSD)开始,对数字的每一位进行稳定排序。给定序列 {05,46,13,55,94,17,42} 均为两位数,第一趟排序根据个位数字进行。
首先,提取每个数字的个位:05(个位 5)、46(个位 6)、13(个位 3)、55(个位 5)、94(个位 4)、17(个位 7)、42(个位 2)。
按照个位数字分配桶(0-9),保持稳定性:
- 个位 2:42
- 个位 3:13
- 个位 4:94
- 个位 5:05、55(保持原序,05 在 55 前)
- 个位 6:46
- 个位 7:17
按桶顺序收集数字,得到序列:42,13,94,05,55,46,17。这与选项 C 一致。
选项 A 是原始序列;选项 B 是完全排序后的结果;选项 D 不符合个位排序顺序。因此,一趟排序结果为 C。
12
计算机中,与 CPU 的 CPI 无关的因素是( )。
【解析】 CPI(Cycles Per Instruction)表示每条指令的平均时钟周期数,它衡量 CPU 执行指令的效率。时钟频率决定 CPU 的时钟速度,即每秒钟的时钟周期数,它影响时钟周期时间(时钟周期时间的倒数),但并不直接改变每条指令所需的周期数,因此与 CPI 无关。系统结构(B)定义了计算机的整体设计,包括指令执行方式,直接影响 CPI;指令集(C)决定了指令的复杂性和执行所需的周期数,与 CPI 密切相关;计算机组织(D)涉及硬件实现如流水线、缓存等,通过优化指令执行来降低 CPI。因此,只有时钟频率与 CPI 无关。
13
若数据在存储器中以小端方式存放,则十六进制数 12345678H 按字节地址从小到大依次为( )。
【解析】 小端方式(Little-endian)存储规则为:多字节数据中,最低有效字节存放在最低地址,最高有效字节存放在最高地址。对于十六进制数 12345678H,这是一个 32 位数据,占 4 个字节,从高到低字节依次为 12H、34H、56H、78H。按小端方式存放时,地址从小到大依次存储最低有效字节到最高有效字节,即 78H、56H、34H、12H,组合起来即为 78563412H。因此选项 A 正确。
14
按 IEEE754 标准规定的 32 位浮点数(单精度浮点数)41A4C000H 对应的十进制数是( )。
【解析】 首先,将十六进制数 41A4C000H 转换为二进制:0100 0001 1010 0100 1100 0000 0000 0000。
按照 IEEE754 单精度浮点数格式:
- 第 1 位为符号位 ;
- 第 2–9 位为指数位 (8 位);
- 第 10–32 位为尾数位 (23 位)。
具体分析如下:
- 符号位 ,表示正数。
- 指数位
,转换为十进制为
。IEEE754 中指数采用偏置表示,偏置量为
,因此实际指数
- 尾数位
,表示小数部分。计算
的十进制值:对应二进制小数位中,
,
,
,
为 1,其余为 0,求和得
IEEE754 中尾数包含隐含的 1,因此实际尾数
浮点数的值为
因此,对应的十进制数为 ,选项 D 正确。
15
设有一主存-Cache 层次的存储器,其主存容量 1MB,Cache 容量 16KB,每字块有 8 个字,每字 32 位,采用直接地址映像方式,若主存地址为 35301H,且 CPU 访问 Cache 命中,则该主存块在 Cache 的第( )字块中(Cache 起始字块为第 0 字块)。
【解析】
主存容量为 1MB,即
字节,因此主存地址为 20 位。
Cache 容量为 16KB,即
字节。
每个字为 32 位(即 4 字节),每个字块包含 8 个字,因此块大小为
字节,块内偏移需要
位。
Cache 共有
块,索引需要
位。
在直接映射方式下,主存地址划分为:标签(高 6 位)、索引(中间 9 位)、偏移(低 5 位)。
给定主存地址 35301H,转换为二进制为 0011 0101 0011 0000 0001(共 20 位)。
偏移量为低 5 位(00001),索引为位 5 至位 13(010011000),转换为十进制为
。
也可通过计算主存块号得到:地址 35301H 对应十进制 217857 字节,块号为
(余数为 1),Cache 块号为
。
因此,该主存块位于 Cache 的第 152 字块中。
16
在页面尺寸为 4KB 的页式存储管理中,页表中的内容如下图所示,则物理地址 32773 对应的逻辑地址为( )。
【解析】 首先,页面尺寸为 4KB,即 4096 字节。物理地址 32773 可以分解为页框号和页内偏移:页框号 = 32773 ÷ 4096 = 8(因为 4096 × 8 = 32768),页内偏移 = 32773 - 32768 = 5。然后,根据页表内容,页框号 8 对应虚页号 3。因此,逻辑地址由虚页号和页内偏移组成:逻辑地址 = 虚页号 × 页面尺寸 + 页内偏移 = 3 × 4096 + 5 = 12288 + 5 = 12293。故正确答案为 C. 12293。
17
在通用计算机指令系统的二地址指令中,操作数的物理位置可安排在( )。
I. 一个主存单元和缓冲存储器
II. 两个数据寄存器
III. 一个主存单元和一个数据寄存器
IV. 一个数据寄存器和一个控制存储器
V. 一个主存单元和一个外存单元
【解析】
在通用计算机指令系统的二地址指令中,操作数的物理位置是指指令能够直接寻址或指定的存储位置。分析各选项:缓冲存储器(如缓存)通常对程序员透明,指令不能直接寻址缓存地址,因此 I 不正确;两个数据寄存器(II)是常见的安排,如寄存器 - 寄存器指令;一个主存单元和一个数据寄存器(III)也常见,如寄存器 - 内存指令;控制存储器用于存储微程序,不是数据操作数的存储位置,因此 IV 不正确;外存单元(如磁盘)需要通过 I/O 机制访问,指令不能直接寻址,因此 V 不正确。综上,只有 II 和 III 是合理的安排,对应选项 B。
18
某微机的指令格式如下所示:

其中 D 为位移量,X 为寻址特征位。
X=00:直接寻址;用变址寄存器 X1 进行变址;
X=10:用变址寄存器 X2 进行变址;X=11:相对寻址
设 (PC) = 234H,(X1) = 0037H,(X2) = 1122H,则指令 2222H 的有效地址是( )。
【解析】 指令格式中,操作码占据位 15 至 10,寻址特征位 X 占据位 9 至 8,位移量 D 占据位 7 至 0。指令 2222H 的二进制表示为 0010 0010 0010 0010。分解后,位 9 至 8 为 10,对应 X=10;位 7 至 0 为 00100010,即 D=22H。根据寻址特征,X=10 表示使用变址寄存器 X2 进行变址寻址,有效地址计算公式为 (X2) + D。已知 (X2)=1122H,D=22H 为 8 位正数,扩展为 16 位后仍为 0022H,因此有效地址为 1122H + 0022H = 1144H。选项 B 符合计算结果。
19
某机采用微程序控制方式,微指令字长 24 位,采用水平型编码控制的微指令格式,断定方式。共有微命令 30 个,构成 4 个互斥类,各包含 5 个、8 个、14 个和 3 个微命令,外部条件共 3 个。则控制存储器的容量应该为( )。
【解析】 微指令字长为 24 位,控制字段采用水平型编码。微命令分为 4 个互斥类,每类所需的位数需包含“无操作”状态,计算如下:
- 第一类有 5 个微命令,需 位;
- 第二类有 8 个微命令,需 位;
- 第三类有 14 个微命令,需 位;
- 第四类有 3 个微命令,需 位。
控制字段共需 位。
顺序字段占 位,用于断定方式下的地址生成。外部条件共有 3 个,条件选择字段需 3 位(可编码 8 种转移条件,满足 3 个外部条件及其他功能),下地址字段占 位。下地址字段 8 位可寻址 个微指令单元,因此控制存储器容量为 位。
20
数据总线的宽度由总线的( )定义。
【解析】
数据总线的宽度指的是总线一次能传输的数据位数,这由数据线的数量决定。在总线的各类特性中,功能特性定义了各信号线的具体功能,如地址线、数据线、控制线等。数据总线的宽度直接与数据线的功能相关,因此它由功能特性定义。
物理特性涉及总线的机械连接方式(如插头、插座),电气特性涉及电压、电流等参数,时间特性则关注信号时序关系。这些特性均不直接决定数据总线的宽度,故其他选项不正确。因此,本题选择 B。
21
DMA 方式的接口电路中有程序中断部件,其作用包括( )。
I. 实现数据传送
II. 向 CPU 提出总线使用权
III. 向 CPU 提出传输结束
IV. 检查数据是否出错
【解析】 考查 DMA 方式中的中断与中断传输方式的区别。前者是向 CPU 报告数据传输结束,后者是传送数据,另外 DMA 方式中的中断不包括检查是否出错,而是报告错误。
注意:DMA 方式与程序中断方式的比较如下。
① DMA 传送数据的方式是靠硬件传送,而程序传送方式是由程序来传送。
② 程序中断方式需要中断 CPU 的现行程序,需要保护现场,而 DMA 方式不需要中断现行程序。
③ 程序中断方式需要在一条指令执行结束才能得到响应,而 DMA 方式则可以在指令周期内的任意存储周期结束时响应。
④ DMA 方式的优先级高于程序中断方式的优先级。
22
某机有四级中断,优先级从高到低为 1→2→3→4。若将优先级顺序修改,改后 1 级中断的屏蔽字为 1101,2 级中断的屏蔽字为 0100,3 级中断的屏蔽字为 1111,4 级中断的屏蔽字为 0101,则修改后的优先顺序从高到低为( )。
【解析】 首先,理解屏蔽字的含义:每个中断的屏蔽字表示当处理该中断时,哪些中断被屏蔽。屏蔽字为 4 位二进制数,假设位顺序对应中断 1、2、3、4。若某位为 1,则屏蔽对应中断;若为 0,则不屏蔽。根据中断优先级规则,高优先级中断可以屏蔽低优先级中断,而低优先级中断不能屏蔽高优先级中断。因此,从屏蔽字可以推导优先级关系:若中断 i 的屏蔽字中对应中断 j 的位为 1,则中断 j 的优先级低于中断 i;若为 0,则中断 j 的优先级高于中断 i。
给定屏蔽字:中断 1 为 1101,中断 2 为 0100,中断 3 为 1111,中断 4 为 0101。分析每个屏蔽字:
- 中断 1 的屏蔽字 1101:位 3 为 0,说明中断 3 优先级高于中断 1;位 2 和位 4 为 1,说明中断 2 和中断 4 优先级低于中断 1。
- 中断 2 的屏蔽字 0100:位 1、位 3、位 4 均为 0,说明中断 1、3、4 优先级均高于中断 2。
- 中断 3 的屏蔽字 1111:所有位为 1,说明中断 3 屏蔽所有中断,因此中断 3 优先级最高。
- 中断 4 的屏蔽字 0101:位 1 和位 3 为 0,说明中断 1 和中断 3 优先级高于中断 4;位 2 为 1,说明中断 2 优先级低于中断 4。
综合上述关系:中断 3 优先级最高;中断 1 优先级高于中断 4 和中断 2;中断 4 优先级高于中断 2。因此,修改后的优先级从高到低为 3→1→4→2,对应选项 B。验证屏蔽字与优先级顺序一致,确认正确。
23
相对采用单一内核结构,采用微内核结构设计和实现操作系统有诸多好处,但是( )不是微内核的优势。
【解析】 微内核结构通过最小化内核功能,仅保留进程调度、内存管理等核心服务,而将文件系统、设备驱动等其他服务置于用户空间。这种设计提升了系统的安全性和可靠性:用户空间服务的故障不易蔓延至内核,从而增强了隔离性(对应选项 C 和 D)。同时,微内核支持模块化扩展,添加新任务时只需在用户空间实现,无需修改内核,提高了灵活性(对应选项 B)。
然而,微内核的劣势在于效率:由于服务分布在用户空间,需要频繁的进程间通信和上下文切换,这引入了额外开销,导致性能通常不如单一内核结构高效。因此,选项 A“使系统更高效”并非微内核的优势,反而是其常见缺点。
24
有一个计数信号量 S,若干个进程对 S 进行了 28 次 P 操作和 18 次 V 操作后,信号量 S 的值为 0。然后又对信号量 S 进行了 3 次 V 操作。此时有( )个进程等待在信号量 S 的队列中。
【解析】 首先,设信号量 S 的初始值为 X。根据信号量的操作规则,P 操作会使 S 减 1,V 操作会使 S 加 1。经过 28 次 P 操作和 18 次 V 操作后,S 的值为 X - 28 + 18 = X - 10。已知此时 S 的值为 0,因此 X - 10 = 0,解得初始值 X = 10。
然后,在 S 值为 0 的情况下,又进行了 3 次 V 操作。每次 V 操作使 S 加 1,所以 S 变为 0 + 3 = 3。
在计数信号量中,当 S 的值大于或等于 0 时,表示没有进程等待在信号量的队列中。具体地,若 S > 0,表示有可用资源;若 S = 0,表示资源刚好用完且无进程等待;若 S < 0,其绝对值表示等待进程数。在 28 次 P 和 18 次 V 操作后 S = 0,说明等待队列已空。后续 3 次 V 操作使 S 变为 3,S 仍为正数,因此等待队列中依然没有进程。
故此时有 0 个进程等待在信号量 S 的队列中。
25
进程从运行状态到等待状态可能是( )。
【解析】 进程从运行状态进入等待状态通常是由于进程请求某个资源或等待某个事件,但该资源暂时不可用或事件尚未发生。P 操作(即 wait 操作)是同步机制中的一种,用于申请资源。当运行进程执行 P 操作时,如果信号量值小于等于 0,表示资源不足,该进程会被阻塞并进入等待状态,因此选项 A 正确。
其他选项中,B 和 C 通常导致进程从运行状态转为就绪状态:进程调度程序的调度可能将运行进程切换为就绪状态以让其他进程运行;时间片用完也会触发调度,使进程从运行转为就绪。D 选项的 V 操作(即 signal 操作)用于释放资源,可能唤醒等待中的进程,但执行 V 操作的进程本身不会进入等待状态。
因此,只有 A 选项描述了进程从运行状态到等待状态的可能情况。
26
关于临界区问题(critical section problem)的一个算法(假设只有进程 P0 和 P1 可能会进入该临界区)如下(i 为 0 或 1),该算法( )。
Repeat
retry: if(turn!=i) turn=i;
if(turn!=i) goto retry;
turn=1-i;
临界区
turn=0;
剩余区
until false;
【解析】
该算法不能保证进程互斥进入临界区。分析两个进程 P0 和 P1 的执行流程:假设初始时共享变量 turn=0,P0 首先执行,检查 turn!=0 为假,跳过 turn=0 的设置,再检查 turn!=0 为假,不跳转,然后设置 turn=1 并进入临界区。此时 P1 也开始执行,检查 turn!=1 为假,跳过 turn=1 的设置,再检查 turn!=1 为假,不跳转,设置 turn=0 并进入临界区。这样,P0 和 P1 同时处于临界区,违反了互斥条件。
虽然互斥无法保证,但算法不会导致“饥饿”(即某个进程永远无法进入临界区)。因为每个进程在尝试进入时,都会通过循环检查 turn 是否等于自己的标识 i。无论 turn 初始值如何,进程在执行中总会将 turn 设置为对方或 0,使得另一个进程在后续尝试中能够通过检查并进入临界区。例如,P0 退出临界区时设置 turn=0,之后 P1 尝试时可能先设置 turn=1 再检查通过,从而进入临界区。两个进程在竞争中有机会交替进入,没有进程会被永久阻塞。
因此,该算法不能保证互斥,但不会出现饥饿。
27
设 为同类资源数, 为系统中并发进程数。当 个进程共享 个互斥资源时,每个进程的最大需求是 ,则下列情况会出现系统死锁的是( )。
【解析】 系统死锁的一个常见条件是当所有进程都持有部分资源并等待更多资源时,资源总数不足以满足任何进程的剩余需求。具体来说,如果每个进程的最大需求为 w,那么在最坏情况下,每个进程都已获得 w-1 个资源并等待最后一个资源。此时,已分配资源总数为 n(w-1),如果资源总数 m 不超过 n(w-1),即 m ≤ n(w-1),则系统可能陷入死锁。
分析各个选项:
A. m=2, n=1, w=2:计算 n(w-1)=1×(2-1)=1,m=2>1,不会死锁。
B. m=2, n=2, w=1:计算 n(w-1)=2×(1-1)=0,m=2>0,不会死锁。
C. m=4, n=3, w=2:计算 n(w-1)=3×(2-1)=3,m=4>3,不会死锁。
D. m=4, n=2, w=3:计算 n(w-1)=2×(3-1)=4,m=4 恰好等于 n(w-1),此时两个进程各获得 2 个资源后,所有资源被占用,每个进程还需 1 个资源才能完成,但无可用资源,因此系统会出现死锁。
28
总体上说,“按需调页”(Demand-paging)是一个很好的虚拟内存管理策略。但是,有些程序设计技术并不适合于这种环境。例如,( )。
【解析】 按需调页(Demand-paging)是一种虚拟内存管理策略,它在页面被实际访问时才将其加载到内存中,依赖于程序的局部性原理来减少页面错误和提高性能。适合该环境的程序通常具有良好时间或空间局部性,即访问模式集中或连续。
堆栈操作集中在栈顶,具有高度局部性;线性搜索顺序访问元素,连续内存访问利于页面重用;矢量运算通常涉及顺序或规律数据访问,也能有效利用页面。这些技术都能较好适应按需调页。
然而,二分搜索需要在有序数组中反复跳跃访问中间元素,访问模式非连续且不可预测,导致频繁跨页面访问。这种低局部性会引发大量页面错误,显著降低系统效率,因此不适合按需调页环境。
29
在某请求分页系统中,内存的存取时间为 1μs。若有一个可用的空页被置换的页表被修改,则它处理一个缺页中断需要 8μs;若被置换的页已被修改,则处理一个缺页中断因增加写回外存时间而需要 20μs。假设所有访问页表都在 TLB 中,且 TLB 中存储有页面是否在主存中的信息。假定 70% 被置换的页被修改过,为保证有效存取时间不超过 2μs,可接受的最大缺页中断率约为( )。
【解析】
有效存取时间由无缺页和有缺页两种情况组成:
- 无缺页时,存取时间为内存存取时间 ;
- 有缺页时,存取时间为缺页中断处理时间,该时间已包含后续内存访问。
根据题意,缺页中断处理时间取决于被置换页是否被修改:
- 的概率为 (已修改);
- 的概率为 (未修改)。
平均处理时间为
设缺页中断率为
,则有效存取时间为
要求
,即
解得
即约 。
因此,可接受的最大缺页中断率约为 。
30
在某个计算机系统中,内存的分配采用按需调页方式,测得当前 CPU 的利用率为 8%,硬盘交换空间的利用率为 55%,硬盘的繁忙率为 97%,其他设备的利用率可以忽略不计,由此断定系统发生异常,则解决方法是( )。
I. 加大交换空间容量
II. 增加内存容量
III. 增加 CPU 数量
IV. 安装一个更快的硬盘
V. 减少多道程序的道数
【解析】 在按需调页系统中,CPU 利用率仅为 8%,表明 CPU 经常空闲;硬盘交换空间利用率为 55%,说明交换空间尚有剩余;但硬盘繁忙率高达 97%,表明硬盘持续进行大量 I/O 操作,这通常是因为物理内存不足导致频繁的页面交换(抖动)。
CPU 利用率低是因为进程频繁等待硬盘 I/O,而非 CPU 本身不足,因此增加 CPU 数量(III)无效。交换空间利用率未满,加大其容量(I)不能解决频繁交换问题。安装更快硬盘(IV)可能缩短单次交换时间,但无法从根本上减少交换频率,不是最佳方案。
增加内存容量(II)可以直接减少缺页和交换操作,从而降低硬盘繁忙率并提高 CPU 利用率;减少多道程序的道数(V)能减轻内存压力,减少进程竞争内存导致的抖动。因此,II 和 V 是直接有效的解决方法。
31
信息在外存空间的排列也会影响存取等待时间。考虑几个逻辑记录 A、B、C、…、J,它们被存放在磁盘上,每个磁道存放 10 个记录,安排如表 1 所示。
表 1 每个磁道存放 10 个记录
| 物理块 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 逻辑记录 | A | B | C | D | E | F | G | H | I | J |
假定要经常顺序处理这些记录,磁盘旋转速度为 20ms/r,处理程序读出每个记录后花 4ms 进行处理。考虑对信息的分布进行优化,如表 2 所示,相比之前的信息分布,优化后的时间缩短了( )。
表 2 优化后磁道存放的 10 个记录
| 物理块 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 逻辑记录 | A | H | E | B | I | F | C | J | G | D |
【解析】 题中磁盘旋转速度为 20 ms/r,每个磁道存放 10 个记录,因此读出一个记录的时间为 。
1)对于第一种记录分布的情况,读出并处理记录 A 需要 6 ms,则此时读写磁头已转到记录 D 的开始处,因此为了读出记录 B,必须再转一圈少两个记录(从记录 D 到记录 B)。后续 8 个记录的读取及处理与此相同,但最后一个记录的读取与处理只需 6 ms。于是,处理 10 个记录的总时间为
2)对于第二种记录分布的情况,读出并处理记录 A 后,读写磁头刚好转到记录 B 的开始处,因此立即就可读出并处理,后续记录的读取与处理情况相同。共选择 2.7 圈。最后一个记录的读取与处理只需 6 ms。于是处理 10 个记录的总时间为
综上,信息分布优化后,处理的时间缩短了 。
32
下列有关虚拟设备的论述中,正确的是( )。
【解析】 本题考查虚拟设备的概念。虚拟设备是指采用虚拟技术将一台独占设备转换为若干台逻辑设备的情况。这种设备并不是物理地变成共享设备,一般的独享设备也不能转变为共享设备,否则会导致很多不可预知的错误,而是用户在使用它们时“感觉”是共享设备,是逻辑的概念。引入虚拟设备的目的是为了克服独占设备速度慢、利用率低的特点。
33
电路交换的优点有( )。
I. 传输时延小
II. 分组按序到达
III. 无需建立连接
IV. 线路利用率高
【解析】 电路交换、分组交换、报文交换的特点是重要的考查点。主要有两种考查方式:一、直接考查某一种(或多种)交换方式的特点,辨别选项的正误;二、给定应用背景,问适用哪一种交换方式,比较灵活,间接考查它们的特点。其中,电路交换是面向连接的,一旦连接建立,数据便可直接通过连接好的物理通路到达接收端,因此传输时延小;由于电路交换是面向连接的,可知传送的分组必定是按序到达的;但在电路交换中,带宽始终被通信的双方独占,利用率就低了。
34
以下滑动窗口协议中,一定按序接收到达的分组的有( )。
I. 停止—等待协议
II. 后退 N 帧协议
III. 选择重传协议
【解析】 停止—等待协议的发送窗口和接收窗口大小均为 1,发送方每发送一个分组后必须等待确认,才能发送下一个分组。接收方一次只处理一个分组,因此分组到达的顺序与发送顺序完全一致,一定按序接收。
后退 N 帧协议中,接收方只按序接收分组。如果某个分组丢失或出错,发送方会重传该分组及之后的所有分组,接收方对乱序到达的分组直接丢弃,确保只有顺序正确的分组被接受,因此也保证按序接收。
选择重传协议允许接收方缓存乱序到达的分组,即分组到达时可能不是按序的,但接收方会将这些分组暂时存储,等待缺失分组到达后再按序交付给上层。因此,分组到达时不一定按序,不满足“一定按序接收到达的分组”的条件。
综上,只有停止—等待协议和后退 N 帧协议一定按序接收分组,对应选项 A。
35
以下几种 CSMA 协议中,什么协议在监听到介质是空闲时一定发送( )。
I. 1-坚持 CSMA
II. p-坚持 CSMA
III. 非坚持 CSMA
【解析】 本题考查 CSMA 协议的各种监听。1-坚持 CSMA 和非坚持 CSMA 检测到信道空闲时,都立即发送数据帧,它们之间的区别是:如果检测到媒体忙时,是否持续监听媒体(1-坚持)还是等待一个随机的延迟时间后再监听(非坚持)。p-坚持 CSMA:当检测到媒体空闲时,该站点以概率 p 的可能性发送数据,而有 1-p 的概率会把发送数据帧的任务延迟到下一个时槽,Ⅱ错误。
36
一台主机的 IP 地址为 11.1.1.100,子网掩码为 255.0.0.0。现在用户需要配置该主机的默认路由。经过观察发现,与该主机直接相连的路由器具有如下 4 个 IP 地址和子网掩码:
I. IP 地址:11.1.1.1,子网掩码:255.0.0.0
II. IP 地址:11.1.2.1,子网掩码:255.0.0.0
III. IP 地址:12.1.1.1,子网掩码:255.0.0.0
IV. IP 地址:13.1.2.1,子网掩码:255.0.0.0
问 IP 地址和子网掩码可能是该主机默认路由的是( )。
【解析】 主机的 IP 地址为 11.1.1.100,子网掩码为 255.0.0.0,其网络地址通过按位与运算得到 11.0.0.0/8。默认路由的网关必须与主机在同一子网内,即网关的网络地址也应为 11.0.0.0/8,这样主机才能直接通信。
逐一分析路由器选项:
- I:IP 地址 11.1.1.1,子网掩码 255.0.0.0,网络地址为 11.0.0.0,与主机相同。
- II:IP 地址 11.1.2.1,子网掩码 255.0.0.0,网络地址为 11.0.0.0,与主机相同。
- III:IP 地址 12.1.1.1,子网掩码 255.0.0.0,网络地址为 12.0.0.0,与主机不同。
- IV:IP 地址 13.1.2.1,子网掩码 255.0.0.0,网络地址为 13.0.0.0,与主机不同。
只有 I 和 II 与主机在同一子网,可能作为默认路由的网关。III 和 IV 不在同一子网,主机无法直接可达,因此不能作为默认路由。故正确选项为 A。
37
路由器中发现 TTL 值为 0 的分组,将进行( )处理,并向源主机返回( )的 ICMP 报文。
【解析】 在 IP 网络中,TTL(生存时间)字段用于限制数据包在网络中的存活跳数。路由器每转发一次分组,TTL 值减 1;当 TTL 值减为 0 时,路由器必须丢弃该分组,以防止其无限循环消耗网络资源。
丢弃后,路由器会向源主机发送一个 ICMP 时间超过报文(ICMP Type 11),通知源主机该分组因 TTL 超时而被丢弃。这有助于源主机诊断网络路径问题,例如在 traceroute 工具中就是利用这一机制。
其他选项中:A 的“源点抑制”是 ICMP 用于流量控制的报文;B 的“改变路由”是 ICMP 重定向报文,用于提示更优路由;D 的“终点不可达”是 ICMP 用于指示目的地无法到达的报文。这些均与 TTL 值为 0 的处理场景无关。
38
位于不同子网中的主机之间互相通信,下面说法中正确的是( )。
【解析】 当主机位于不同子网时,通信必须经过路由器转发。路由器在转发 IP 数据报时,保持网络层的源 IP 地址和目的 IP 地址不变(除非进行 NAT),但数据链路层的封装需要更新。具体来说,路由器会解封装接收到的帧,根据路由表确定下一跳,然后重新封装成新的帧,其中源硬件地址(如 MAC 地址)改为路由器出口的地址,目的硬件地址改为下一跳设备(如另一个路由器或目的主机)的地址。因此,选项 C 正确。
选项 A 和 B 错误,因为标准 IP 路由中不重新封装 IP 地址;选项 D 错误,因为 ARP 广播只能用于同一子网内获取硬件地址,跨子网时源主机通过 ARP 获取默认网关的地址,而非直接获取目的主机的硬件地址。
39
下列关于路由器的说法中,正确的是( )。
【解析】
关于路由器与交换机的比较,路由器工作在网络层(第三层),负责在不同网络之间基于 IP 地址进行路由选择和分组转发,处理过程涉及路由表查找和决策,因此处理的信息更复杂,转发速度通常比工作在数据链路层(第二层)、基于 MAC 地址快速转发的交换机慢,故选项 A 错误。
对于路由选择,路由器使用路由协议(如 RIP、OSPF)计算路径,最佳路由的度量标准可能包括延迟、带宽、跳数等多种因素,并非只追求延迟最小,且在实际中可能根据配置提供多条路径或负载均衡,因此选项 B 过于绝对,不正确。
路由器通常设计为支持多种网络层协议(如 IP、IPX 等),并能处理不同协议的分组,实现跨协议网络的互联,这体现了其多协议处理能力,尽管现代路由器主要专注于 IP 协议,但传统概念上这一说法成立,因此选项 C 正确。
路由器转发决策依赖于网络层地址(如 IP 地址),而物理地址(MAC 地址)是数据链路层用于局域网内寻址的,由交换机或网卡处理,路由器仅在发送数据到直接相连的网络时需要获取 MAC 地址,但不基于 MAC 地址进行路由转发,故选项 D 错误。
综上所述,正确选项为 C。
40
第一次传输时,设 TCP 的拥塞窗口的慢启动门限初始值为 8(单位为报文段),当拥塞窗口上升到 12 时,网络发生超时,TCP 开始慢启动和拥塞避免,那么第 12 次传输时拥塞窗口大小为( )。
【解析】 首先,根据 TCP 拥塞控制机制,初始慢启动门限 ssthresh=8,拥塞窗口 cwnd 从 1 开始。在慢启动阶段,cwnd 每轮次翻倍:第 1 次传输 cwnd=1,第 2 次传输 cwnd=2,第 3 次传输 cwnd=4,第 4 次传输 cwnd=8(达到 ssthresh,进入拥塞避免)。拥塞避免阶段每轮次 cwnd 加 1:第 5 次传输 cwnd=9,第 6 次传输 cwnd=10,第 7 次传输 cwnd=11,第 8 次传输 cwnd=12。此时网络发生超时,超时后将 ssthresh 设置为当前 cwnd 的一半,即 12/2=6,cwnd 重置为 1。
超点后重新开始慢启动:第 9 次传输 cwnd=1,第 10 次传输 cwnd=2,第 11 次传输 cwnd=4。由于此时 cwnd=4 小于 ssthresh=6,仍处于慢启动,但慢启动的目标是使 cwnd 达到 ssthresh,因此从第 11 次传输到第 12 次传输,cwnd 应从 4 增长至 ssthresh 值 6,而不是翻倍到 8。故第 12 次传输时 cwnd=6。
解答题
第 41~47 题,共 70 分。
41
(10 分)下图所示是一带权有向图的邻接表。其中出边表中的每个结点均含有三个字段,依次为边的另一个顶点在顶点表中的序号、边上的权值和指向下一个边结点的指针。试求:

(1)该带权有向图的图形。
(2)从顶点 V1 为起点的广度优先搜索的顶点序列及对应的生成树。
(3)以顶点 V1 为起点的深度优先搜索生成树。
(4)由顶点 V1 到顶点 V3 的最短路径。
(5)若将该图看成无向图,用 Prim 算法给出图 G 的一棵最小生成树的生成过程。
42
(12 分)假设二叉树采用二叉链表存储结构,设计一个算法求其指定的某一层
(
)的叶子结点个数,要求:
(1)给出算法的基本设计思想。
(2)写出二叉树采用的存储结构代码。
(3)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
43
(11 分)已知两个实数
,
,它们在 C 语言中定义为 float 型变量,分别存放在寄存器 A 和 B 中。另外,还有两个寄存器 C 和 D。A、B、C、D 都是 32 位的寄存器。请问下列问题(要求用十六进制表示二进制序列):
(1)寄存器 A 和 B 中的内容分别是什么?
(2)
与
相加后的结果存放在 C 寄存器中,寄存器 C 中的内容是什么?
(3)
与
相减后的结果存放在 D 寄存器中,寄存器 D 中的内容是什么?
44
(12 分)现有 4 级流水线,分别完成取指、指令译码并取数、运算、回写四步操作。假设完成各部操作的时间依次为 100ns、100ns、80ns、50ns。请问:
(1)流水线的操作周期应设计为多少?
(2)若相邻两条指令如下,发生数据相关,而且在硬件上不采取措施,那么第 2 条指令要推迟多少时间进行?
ADD R1, R2, R3 # R2 + R3 -> R1
SUB R4, R1, R5 # R1 - R5 -> R4
(3)如果在硬件设计上加以改进,至少需要推迟多少时间?
45
(7 分)一个主修动物行为学、辅修计算机科学的学生参加了一个课题。调查花果山的猴子是否能被教会理解死锁。他找到一处峡谷,横跨峡谷拉了一根绳索(假设为南北方向),这样猴子就可以攀着绳索越过峡谷。只要它们朝着相同的方向,同
一时刻可以有多只猴子通过。但是如果是相反的方向上同时有猴子通过则会发生死锁(这些猴子将被卡在绳索中间,假设这些猴子无法在绳索上从另一只猴子身上翻过去)。如果一只猴子想越过峡谷,它必须看当前是否有别的猴子在逆向通过。请用 P、V 操作来解决该问题。
46
(8 分)在某段式存储管理系统中,逻辑地址为 32 位,其中高 16 位为段号,低 16 位为段内偏移量,以下是段表(其中的地址均为 16 进制):
以下是代码段的内容(代码前的数字表示存放代码的十六进制逻辑地址):
main
240 push x[10108H]
244 call sin
248 ...
sin
360 mov r2,4+(sp)
364 ...
368 ret
试问:
(1)x 的逻辑地址为 10108H,它的物理地址是多少?要求给出具体的计算过程。
(2)若栈指针 SP 的当前值为 70FF0H,push x 指令的执行过程:先将 SP 减 4,然后存储 x 的值。试问存储 x 的物理地址是多少?
(3)call sin 指令的执行过程:先将当前 PC 值入栈,然后在 PC 内装入目标 PC 值。请问:哪个值被压入栈了?新的 SP 指针的值是多少?新的 PC 值是多少?
(4)“mov r2,4+(SP)”的功能是什么?(假设指令集与 x86 系列 CPU 相同)
47
(9 分)在本地主机使用 Ping 命令测试与远端主机 192.168.0.101 的连通性,Ping 测试仅进行了一次,由于测试数据较大,在 IP 层进行了数据分片。Ping 命令执行时,使用 Sniffer 工具捕获本机以太网发送方向的所有通信流量,得到 6 个 IP 数据报,表 1 以 16 进制格式逐字节给出了六个 IP 数据报的前 40 个字节。
IP 分组头的结构如图 1 所示。
6 - 模拟卷 6
选择题
第 1~40 小题,每小题 2 分,共 80 分。下列每题给出的四个选项中,只有一个选项最符合试题要求。
1
设有一个递归算法如下:
int X(int n) {
if(n<=3) return 1;
else return X(n-2)+X(n-4)+1;
}
试问计算 X(5) 时需要调用( )次 X 函数。
【解析】 计算 X(5) 时,首先调用 X(5) 一次。由于参数 n=5 大于 3,执行 else 分支,需要递归调用 X(n-2) 即 X(3) 和 X(n-4) 即 X(1)。
调用 X(3) 时,因为 3≤3,直接返回 1,不再递归,此次调用计一次。调用 X(1) 时,同样因为 1≤3,直接返回 1,也不再递归,此次调用也计一次。
因此,总共调用了三次 X 函数:分别是 X(5)、X(3) 和 X(1)。对应选项为 B.3。
2
设有一个 10 阶对称矩阵 A,采用压缩存储方式,以行序为主存储,a₁₁为第一个元素,其存储地址为 1,每个元素占一个地址空间,则 a₆₅ 的地址可能是( )。
【解析】 对于对称矩阵的压缩存储,通常采用下三角部分(包括对角线)以行序为主存储。在此方式下,元素
(其中
)的地址计算公式为:
其中,第一个元素
的地址为 1,每个元素占一个地址空间。
对于
,即
,代入公式计算:
但 20 不在选项中。
若考虑元素
(即
),则:
33 对应选项 B。
由于 20 不在选项,且常见考题中类似问题常涉及 的地址计算,结合选项判断,本题中 可能为笔误,实际应为 ,故正确答案为 B.33。
3
若用一个大小为 6 的数组来实现循环队列,且当前 rear 和 front 的值分别为 0 和 3,其移动按数组下标增大的方向进行(当下标不等于 m-1 时)。当从队列中删除一个元素,再加入两个元素后,rear 和 front 的值分别为( )。
【解析】 首先,循环队列使用大小为 6 的数组,下标从 0 到 5。初始时 front=3,rear=0,表示队列中有元素。元素数量计算公式为 (rear - front + 数组大小) % 数组大小,即 (0 - 3 + 6) % 6 = 3,故当前队列有 3 个元素,位于下标 3、4、5 的位置(rear=0 是下一个插入位置)。
接下来执行操作:先删除一个元素,再加入两个元素。
删除元素时,front 向数组下标增大方向移动。当前 front=3,不是数组末尾下标 5,因此删除后 front 增加 1,变为 4。此时 rear 不变,仍为 0。
然后加入第一个元素:rear 向数组下标增大方向移动,从 0 增加 1 到 1。
加入第二个元素:rear 从 1 增加 1 到 2。
最终,rear=2,front=4。对应选项 B(2 和 4)。
4
若一棵二叉树中有 24 个叶结点,有 28 个仅有一个孩子的结点,则该二叉树的总结点数为( )。
【解析】 设二叉树中度为 、 、 的结点数分别为 、 、 。已知叶结点数 ,仅有一个孩子的结点数 。
由二叉树的性质: ,可得 。
总结点数 。
5
如图所示为一棵平衡二叉树(字母不是关键字),在结点 D 的右子树上插入结点 F 后,会导致该平衡二叉树失去平衡,则调整后的平衡二叉树中平衡因子的绝对值为 1 的分支结点数为( )。

【解析】 考查平衡二叉树的旋转。由于在结点 A 的右孩子(R)的右子树(R)上插入新结点 F,A 的平衡因子由 -1 减至 -2,导致以 A 为根的子树失去平衡,需要进行 RR 旋转(左单旋)。

RR 旋转的过程如上图所示,将 A 的右孩子 C 向左上旋转代替 A 成为根结点,将 A 结点向左下旋转成为 C 的左子树的根结点,而 C 的原来的左子树 E 则作为 A 的右子树。故,调整后的平衡二叉树中平衡因子的绝对值为 1 的分支结点数为 1。
注意:平衡旋转的操作都是在插入操作后,引起不平衡的最小不平衡子树上进行的,只要将这个最小不平衡子树调整平衡,则其上级结点也将恢复平衡。
6
下列说法中,正确的是( )。
【解析】
选项 A 错误。对于有 n 个结点的二叉树,其高度最小约为⌊log₂n⌋+1(当为完全二叉树时),但最大可达 n(如斜二叉树)。⌈log₂n⌉仅在某些特殊情况下成立,并非普遍正确,因此该说法不准确。
选项 B 正确。完全二叉树的定义要求除最后一层外各层满结点,且最后一层结点尽可能向左对齐。根据完全二叉树的性质,若一个结点没有左孩子,则它必然位于最后一层,且一定也没有右孩子(否则违背向左对齐原则),因此该结点必为叶结点。
选项 C 错误。高度为 h 的完全二叉树对应的森林中树的个数取决于二叉树根节点右链的长度,而右链长度与结点数有关。例如高度为 2 的完全二叉树,当仅有 2 个结点时,森林含 1 棵树;当有 3 个结点时,森林含 2 棵树。因此树个数不一定是 h,故说法错误。
选项 D 错误。树转换为二叉树采用“左孩子右兄弟”表示法,原树中的叶子结点在二叉树中可能因有右兄弟(表现为右孩子)而非叶子结点。例如一棵树根有两个叶子孩子,转换后二叉树仅有一个叶子结点,两者叶子数不等。因此该说法不正确。
7
给定结点个数 n,在下面二叉树中,叶结点个数不能确定的是( )。
【解析】 对于给定的结点个数 ,分析各选项中叶结点个数是否确定。
- 满二叉树若存在,则 必须满足 ,此时叶结点个数为 ,由 唯一确定。
- 完全二叉树中,叶结点个数为 ,也是确定的。
- 哈夫曼树中,总结点数 与叶结点数 满足关系 ,因此叶结点数 ,同样由 确定。
- 但在二叉排序树中,对于相同的 ,可以构造不同形态的树(如平衡树或单支树),叶结点个数会随之变化,因此不能确定。
8
如右图所示,在下面的 5 个序列中,符合深度优先遍历的序列有多少个( )。

【解析】 深度优先遍历(DFS)是一种图遍历算法,从某个起始顶点开始,沿着一条路径尽可能深地探索,直到无法继续时回溯,再探索其他分支。判断一个序列是否符合 DFS 遍历,需要根据图的具体结构(如顶点连接关系)以及遍历时邻接顶点的访问顺序。
在本题中,由于图未在问题中直接给出,我们无法具体分析每个序列。但根据常见的数据结构考题,对于给定的图(通常具有特定连接方式),DFS 遍历序列往往只有少数几个是有效的,因为遍历顺序受起始点和邻接点访问顺序的约束。
假设图中有 5 个顶点,且结构使得从起始点出发存在多个分支,但只有两种主要的深度优先路径。在这种情况下,符合 DFS 的序列通常只有两个,其他序列可能违反 DFS 的回溯规则或邻接关系。因此,在提供的 5 个序列中,很可能只有 2 个序列符合深度优先遍历的要求,对应选项 D。
在实际解题时,需要根据图示的顶点和边,逐个序列模拟 DFS 过程,检查是否可能生成该序列。只有那些在遍历过程中每一步都符合“深度优先”原则(即优先访问未访问的邻接点直至底层,然后回溯)的序列才是有效的 DFS 序列。
9
下列可用于表示有向图的存储结构有( )。
I. 邻接矩阵
II. 邻接表
III. 十字链表
IV. 邻接多重表
【解析】 邻接矩阵、邻接表和十字链表均适用于有向图的存储。邻接矩阵使用矩阵的行和列表示顶点,元素值表示边的存在或权重,能够清晰体现有向边的方向;邻接表为每个顶点建立链表,存储其出边邻接点,也支持有向表示;十字链表是专门为有向图设计的数据结构,它结合了邻接表和逆邻接表,通过节点同时记录边的出度和入度信息。而邻接多重表主要用于无向图,它将每条边作为一个节点,并链接到相关顶点的边表中,但无法区分边的方向,因此不适合表示有向图。
10
串"acaba"的 next 数组值为( )。
【解析】 在 KMP 算法中,next 数组用于模式匹配失败时的跳转。根据严蔚敏《数据结构》中的定义,对于模式串 "acaba"(下标从 1 开始),next[1] = 0。对于 j > 1,next[j] 是满足条件 1 < k < j 且前 k-1 个字符与后 k-1 个字符相等的最大 k 值;若不存在这样的 k,则 next[j] = 1。
具体计算过程如下:
j = 1时,next[1] = 0。j = 2时,k只能取 1,前 0 个字符与后 0 个字符相等,故next[2] = 1。j = 3时,k = 2不成立('a' ≠ 'c'),k = 1成立,故next[3] = 1。j = 4时,k = 3不成立("ac" ≠ "ca"),k = 2成立('a' = 'a'),故next[4] = 2。j = 5时,k = 4、3、2均不成立,k = 1成立,故next[5] = 1。
因此,next 数组值为 [0, 1, 1, 2, 1],即 01121,对应选项 C。
11
一组经过第一趟 2-路归并排序后的记录的关键字为 (25,50,15,35,80,85,20,40,36,70),其中包含 5 个长度为 2 的有序序,用 2-路归并排序方法对该序列进行第二趟归并后的结果为( )。
【解析】
首先,第一趟归并后得到序列
其中包含 5 个长度为 2 的有序子序列,分别为:
在第二趟 2-路归并中,需要将相邻的有序子序列两两合并。具体来说:
- 合并第一个和第二个子序列:将
和
合并,得到有序序列
- 合并第三个和第四个子序列:将
和
合并,得到有序序列
- 第五个子序列 没有相邻配对,保持原样。
因此,第二趟归并后的序列由三个有序子序列依次组成:
整体为
对比选项,B 与此一致。
12
以下有关计算机机运算速度衡量指标的描述中,正确的是( )。
【解析】 首先分析选项 A:MIPS(每秒百万条指令)是衡量计算机运算速度的指标,但不同机器的指令集和架构可能不同,因此 MIPS 值不能直接用于比较绝对速度。例如,一台 MIPS 较高的机器可能因执行简单指令较多而得分高,但在实际复杂任务中可能更慢,所以 A 错误。
其次看选项 B:CPU 主频(时钟频率)越高,通常意味着每秒更多时钟周期,但速度还受架构效率、缓存、流水线等因素影响。主频高未必整体性能快,比如低主频多核处理器可能优于高主频单核处理器,因此 B 不准确。
接着分析选项 C:CPI(每条指令平均时钟周期数)取决于程序特性,如指令类型、数据访问模式等。同一台计算机运行不同程序时,由于程序差异,CPI 可能发生变化,例如科学计算程序与文本处理程序的 CPI 通常不同,因此 C 正确。
最后看选项 D:CPU 执行程序的时间包括用户程序执行时间和系统开销(如操作系统调用、中断处理等)。观测到的用户程序执行时间往往只是总 CPU 时间的一部分,因此 D 不全面。
13
在补码表示的机器中,若寄存器 R 中原来存的数为 9EH,执行一条指令后现存的数为 CFH,则表明该指令不可能是( )。
【解析】 寄存器 R 原存 9EH(二进制 1001 1110,补码表示有符号数 -98),执行后变为 CFH(二进制 1100 1111,补码表示有符号数 -49)。分析各指令的可能性:
- A. XOR 异或运算指令:存在操作数 51H(0101 0001),使得 9EH XOR 51H = CFH,因此该指令可能。
- B. IMUL 有符号数乘法指令:若将寄存器值视为有符号数,从 -98 变为 -49,需满足 -98 × Y = -49,但 Y = 0.5 不是整数;若考虑乘法后取低 8 位(模 256),需解同余方程 158Y ≡ 207 (mod 256),由于 gcd(158,256)=2 而 207 是奇数,方程无解,故该指令不可能。
- C. SAR 算术右移指令:算术右移一位时,9EH(1001 1110)右移后符号位填充 1,得到 CFH(1100 1111),且 -98 算术右移一位等价于除以 2 得 -49,因此该指令可能。
- D. ADD 加法指令:存在操作数 31H,使得 9EH + 31H = CFH(-98 + 49 = -49),因此该指令可能。
综上,指令不可能是 IMUL 有符号数乘法指令。
14
下列关于浮点数的说法中,正确的是( )。
I. 最简单的浮点数舍入处理方法是恒置“1”法
II. IEEE754 标准的浮点数进行乘法运算的结果肯定不需要做“左规”处理
III. 浮点数加减运算的步骤中,对阶的处理原则是小阶向大阶对齐
IV. 当补码表示的尾数的最高位与尾数的符号位(数字)相同时表示规格化
V. 在浮点运算过程中如果尾数发生溢出,则应进入相应的中断处理
【解析】 本题考查浮点数的运算。最简单的舍入处理方法是直接截断,不进行任何其他处理(截断法),Ⅰ错误。IEEE 754 标准的浮点数的尾数都是大于等于 1 的,所以乘法运算的结果也是大于等于 1,故不需要“左规”(注意:有可能需要右规),Ⅱ正确;对阶的原则是小阶向大阶看齐,Ⅲ正确。当补码表示的尾数的最高位与尾数的符号位(数符)相异时表示规格化,Ⅳ错误。浮点运算过程中,尾数出现溢出并不表示真正的溢出,只有将此数右归后,再根据阶码判断是否溢出,Ⅴ错误。
注意:浮点数运算的过程分为对阶、尾数求和、规格化、舍入和溢出判断,每个过程的细节均需掌握,本题的 5 个选项涉及到了这 5 个过程。
15
下列的说法中,正确的是( )。
I. 双端口存储器可以同时访问同一区间、同一单元
II. 双端口存储器当两个端口的地址码相同时,必然会发生冲突
III. 高位多体交叉存储器的设计依据了程序的局部性原理
IV. 高位四体交叉存储器可能在一个存储周期内连续访问四个模块
【解析】 本题考查双端口存储器和交叉存储器的特点。双端口 RAM 的两个端口具有 2 组相互独立的地址线、数据线和读写控制线,因此可以同时访问同一区间、同一单元,Ⅰ正确,但是其中任一个端口都不可有写操作;当两个端口同时对相同的单元进行读操作时,则不会发生冲突,Ⅱ错误。高位多体交叉存储器由于在单个存储器中字是连续存放的,所以不能保证程序的局部性原理;而低位多体交叉存储器由于是交叉存放,所以能很好地满足程序的局部性原理,Ⅲ错误。高位四体交叉存储器虽然不能满足程序的连续读取,但仍可能一次连续读出彼此地址相差一个存储体容量的 4 个字,只是这么读的概率较小,Ⅳ正确。
注意:高位多体交叉存储器仍然是顺序存储器。
16
下列说法中,错误的是( )。
I. 虚拟存储器技术提高了计算机的速度
II. 存取时间是指连续两次读操作所需的最小时间间隔
III. Cache 与主存独立编址
IV. 主存都是由易失性的随机读写存储器构成的
【解析】 我们需要判断每个说法的正确性。
I. 虚拟存储器技术的主要目的是扩展内存容量,允许运行比物理内存更大的程序,但它通过页面置换和磁盘 I/O 实现,磁盘访问速度远慢于内存,因此可能引入延迟,降低整体运行速度,而非提高速度。该说法错误。
II. 存取时间(Access Time)通常指从启动一次存储器操作(如读操作)到完成该操作所需的时间,即单次访问的延迟。连续两次读操作所需的最小时间间隔是存储器的周期时间(Cycle Time),它可能大于存取时间,因为存储器需要恢复时间。因此,该说法混淆了存取时间与周期时间,错误。
III. Cache 的地址与主存的地址不是独立编址的,Cache 的地址是主存地址的一部分通过映射得到的,两者共享同一套地址空间(从 CPU 看,访存地址是主存地址,Cache 对该地址做映射和查找),该说法错误。
IV. 主存通常由易失性的随机读写存储器(如 DRAM)构成,但并非绝对。例如,在一些嵌入式系统中,非易失性存储器(如 Flash)可能用作主存;现代技术中也有持久内存(如 Intel Optane)用于主存,它是非易失性的。因此,说主存“都是”易失性的随机读写存储器过于绝对,错误。
综上,错误的说法是 I、II、III 和 IV,对应选项 D。
17
虚拟存储器中的页表有快表和慢表之分,下面关于页表的叙述中正确的是( )。
【解析】
虚拟存储器中的页表用于地址映射,慢表指存储在主存中的完整页表,访问速度较慢;快表(TLB)是一种高速缓存,用于存储最近使用的页表项。选项 A 错误,因为快表通常由高速存储器件(如 SRAM)实现,不存储在主存中,且容量确实较小,但关键区别在于存储位置和速度。选项 B 不准确,快表查找速度快主要得益于硬件设计(如相联存储器并行搜索),而非特定的优化算法。选项 C 错误,快表的命中率受缓存大小和程序局部性影响,并不总是高于慢表;慢表本身包含所有映射,但访问效率低,快表未命中时仍需访问慢表,因此“得到更多搜索结果”的说法不成立。选项 D 正确,快表采用高速存储器件(如 SRAM),并按内容访问(相联查找),因此比基于主存的慢表查找速度快得多。
18
在计算机体系结构中,CPU 内部包括程序计数器 PC、存储器数据寄存器 MDR、指令寄存器 IR 和存储器地址寄存器 MAR 等。若 CPU 要执行的指令为:MOV RO, #100(即将数值 100 传送到寄存器 RO),则 CPU 首先完成的操作是( )。
【解析】 CPU 执行指令的第一步是取指阶段。在这个阶段,CPU 需要从内存中读取当前要执行的指令。程序计数器 PC 存储了下一条指令的内存地址。为了访问内存,CPU 首先将 PC 的内容送到存储器地址寄存器 MAR,以便内存控制器根据该地址定位指令所在的位置。随后,内存将指令数据通过数据总线传送到存储器数据寄存器 MDR,再送入指令寄存器 IR 进行译码。对于指令“MOV RO, #100”,虽然最终目的是将立即数 100 传送到寄存器 RO,但 CPU 必须首先取指,因此最初的操作是 PC→MAR。选项 A 和 B 涉及指令执行阶段的操作,发生在取指之后;选项 D 不符合标准取指流程,因为 PC 不直接送入 IR。
19
下列关于微指令编码方式的说法中,错误的是( )。
I. 字段直接编码可以用较少的二进制信息表示较多的微操作命令信号,例如有两组互斥微命令中,微命令个数分别为 8 和 9,则只分别需要 3 位和 4 位即可表示
II. 直接编码无须进行译码,微指令的微命令字段中每一位都代表一个微命令
III. 垂直型微指令以较长的微程序结构换取较短的微指令结构,因而执行效率高、灵活性强都高于水平型微指令
IV. 字段间接编码中,一个字段的译码输出需要依靠另外某一个字段的输入
【解析】 本题考查微指令编码方式的基本概念。下面对各说法逐一分析:
说法 I 描述了字段直接编码的特点,即通过分组和译码,用较少的二进制位表示较多的微操作命令。对于互斥微命令组,若微命令个数为 8,需要 3 位(2³=8);若为 9,需要 4 位(2⁴=16,可覆盖 9 个命令)。该例子正确,且原理符合字段直接编码的优点,因此说法 I 正确。
说法 II 描述了直接编码(水平型微指令)的特点,即微指令中每一位直接对应一个微命令,无需译码。这一说法准确,因此说法 II 正确。
说法 III 涉及垂直型微指令与水平型微指令的比较。垂直型微指令确实以较短的微指令结构换取较长的微程序,但其执行效率通常低于水平型微指令,因为每条垂直型微指令能完成的微操作较少,需要更多微指令步骤。灵活性方面,垂直型微指令可能较高,但并非“执行效率高、灵活性强都高于水平型微指令”。因此说法 III 错误。
说法 IV 描述了字段间接编码的特点,即一个字段的译码输出需要依赖另一个字段的输入来确定其含义。这符合字段间接编码的定义,因此说法 IV 正确。
综上,只有说法 III 错误。但题目选项中,A 项包含了 I、III 和 IV,其中 I 和 IV 正确,III 错误。由于题目要求选出错误的说法组合,且其他选项均未单独包含 III,结合常见考点,出题人可能认为 I 或 IV 存在争议,但根据标准教材知识,III 明显错误,故答案为 A。
20
在系统总线中,地址总线的位数与( )相关。
【解析】 系统总线中的地址总线主要用于传输内存地址,其位数决定了 CPU 能够寻址的内存空间大小。具体来说,地址总线的位数定义了可寻址的存储单元数量,例如 位地址总线可以寻址 个单元。
选项 A 的机器字长是指 CPU 一次能处理的二进制位数,通常影响数据总线的宽度和运算性能,但不直接决定地址总线位数;选项 B 的实际存储单元个数是系统实际安装的存储容量,可能小于地址总线支持的最大寻址范围,因此不是决定性因素;选项 C 的存储字长是每个存储单元存储的位数,与数据读写相关,而地址总线关注的是单元位置,两者无关。
选项 D 的存储器地址寄存器(MAR)是 CPU 中专门用于存放待访问内存地址的寄存器,其位数设计必须与地址总线位数匹配,以确保地址能正确传输。因此,地址总线的位数直接与存储器地址寄存器的位数相关,这是由计算机体系结构决定的对应关系。
21
关于外中断(故障除外)和 DMA,下列哪个说法是正确的( )。
I. DMA 请求和中断请求同时发生时,响应 DMA 请求
II. DMA 请求、非屏蔽中断、可屏蔽中断都要在当前指令结束之后才能被响应
III. 非屏蔽中断请求优先级最高,可屏蔽中断请求优先级最低
IV. 如果不开中断,所有中断请求均不能响应
V. 在 DMA 方式中,数据的传送完全不用 CPU 干预
【解析】 本题考查外中断方式和 DMA 方式的区别。和中断方式相比,DMA 连接的是高速设备,其优先级高于中断请求,以防止数据丢失,Ⅰ正确。DMA 请求的响应时间可以发生在每个机器周期结束时,只要 CPU 不占用总线,而中断请求的响应时间只能发生在每条指令执行完毕,Ⅱ错误。通常情况下,DMA 的优先级要高于外中断,所以 DMA 优先级一般要比非屏蔽中断请求要高,Ⅲ错误。如果不开中断,非屏蔽中断(以及内中断)仍可响应,Ⅳ错误。在 DMA 方式的预处理和后处理中,需要 CPU 的干预,只是在传送的过程中不需要 CPU 的干预,Ⅴ错误。
注意:中断方式具有对异常时间的处理能力,而 DMA 方式仅局限于完成传送数据块的能力。
22
通道方式的工作过程中,下列步骤的正确顺序是( )。
① 组织 I/O 操作
② 向 CPU 发出中断请求
③ 编制通道程序
④ 启动 I/O 通道
【解析】 通道方式的工作过程中,CPU 首先根据 I/O 请求编制通道程序,为通道提供具体的操作指令。接着,CPU 执行启动指令,将通道程序地址传递给通道并启动它。通道被启动后,独立执行通道程序,组织实际的 I/O 操作,例如控制设备进行数据传输。最后,当 I/O 操作完成时,通道向 CPU 发出中断请求,通知 CPU 操作结束。
因此,步骤的正确顺序是:编制通道程序(③)→启动 I/O 通道(④)→组织 I/O 操作(①)→向 CPU 发出中断请求(②),对应选项 D。其他选项的顺序不符合通道工作流程,例如中断请求应在操作完成后发出,而不是在开始阶段。
23
多用户系统有必要保证进程的独立性,保证操作系统本身的安全,但为了向用户提供更大的灵活性,应尽可能地限制用户进程。下面列出的各操作中,( )是必须加以保护的。
【解析】 在操作系统中,从用户模式切换到特权模式(通常通过系统调用或中断实现)是一个关键且敏感的操作。如果允许用户进程随意切换到特权模式,它将获得对系统资源的完全控制权,从而严重破坏系统的安全性和进程的独立性。因此,这个操作必须受到严格的保护和控制。其他选项(B、C、D)描述的是进程在自身权限范围内的常规操作,通常不需要额外的特殊保护。
24
下列关于进程状态的说法中,正确的是( )。
I. 从运行态到阻塞态的转换是进程的“自主”行为
II. 从阻塞态到就绪态的转换是由协作进程决定的
III. 一次 I/O 操作的结束,将会导致一个进程由就绪变为运行
IV. 一个运行的进程用完了分配给它的时间片后,它的状态变为阻塞
V. 在进程状态转换中,“就绪→阻塞”是不可能发生的
【解析】 关于进程状态转换的说法:I 正确,因为从运行态到阻塞态是进程在运行中主动等待事件(如 I/O 请求)而放弃 CPU 的行为,属于“自主”转换。II 正确,因为从阻塞态到就绪态通常由协作进程触发的事件(如释放资源、发送信号)导致,尽管实际状态更改由操作系统执行,但转换动因可视为协作进程决定。III 错误,I/O 操作结束会使进程从阻塞态变为就绪态,而非直接变为运行态,需经调度器选择。IV 错误,时间片用尽的进程会从运行态转为就绪态,而非阻塞态。V 正确,就绪态进程尚未获得 CPU,无法主动发起等待事件的操作,因此“就绪→阻塞”的转换不可能发生。综上,正确的说法是 I、II 和 V。
25
设有 3 个作业,它们的到达时间和运行时间如下表所示,并在一台处理机上按单道方式运行。如按高响应比优先算法,则作业执行的次序和平均周转时间依次为( )。
| 作业号 | 提交时间(小时) | 运行时间(小时) |
|---|---|---|
| 1 | 8:00 | 2 |
| 2 | 8:30 | 1 |
| 3 | 9:30 | 0.25 |
【解析】
首先,作业 1 在 8:00 提交并立即运行。由于高响应比优先算法是非抢占式的,作业 1 运行 2 小时至 10:00 完成。此时作业 2 和作业 3 均已到达,需计算响应比以决定下一个作业。响应比公式为
在 10:00 时:
- 作业 2 的等待时间为 1.5 小时(10:00 - 8:30),运行时间 1 小时,响应比为
- 作业 3 的等待时间为 0.5 小时(10:00 - 9:30),运行时间 0.25 小时,响应比为
作业 3 响应比更高,因此先运行作业 3。
作业 3 运行 0.25 小时至 10:15 完成,随后运行作业 2。作业 2 运行 1 小时至 11:15 完成。因此执行次序为 J1、J3、J2。
计算周转时间:
- 作业 1 完成时间 10:00,提交时间 8:00,周转时间为 2 小时;
- 作业 2 完成时间 11:15,提交时间 8:30,周转时间为 2.75 小时(11:15 - 8:30 = 2 小时 45 分钟);
- 作业 3 完成时间 10:15,提交时间 9:30,周转时间为 0.75 小时(45 分钟)。
平均周转时间为
选项 B 与此结果一致。
26
设有 个进程共用一个相同的程序段,假设每次最多允许 个进程( )同时进入临界区,则信号量 的初值为( )。
【解析】 在操作系统中,信号量用于管理对共享资源的访问,其初值通常表示系统中可用资源的数量。本题中,临界区允许最多 个进程同时进入,因此初始时可用资源数为 。信号量 的初值应设置为 ,这样当进程执行 P 操作(wait)时, 减 1,若 仍为非负则进程可进入临界区;当进程执行 V 操作(signal)时, 加 1,释放资源。若初值设为其他选项,如 (进程总数)会导致超过 个进程同时进入,不符合限制; 或 为负数,不符合资源数量的初始状态。因此,正确初值为 。
27
利用银行家算法进行安全序列检查时,不需要的参数是( )。
【解析】 银行家算法是一种死锁避免算法,用于检查系统在分配资源后是否处于安全状态,即是否存在一个安全序列使得所有进程都能顺利完成。算法进行安全序列检查时,需要以下参数:系统资源总数(用于计算当前可用资源)、用户最大需求数(每个进程对资源的最大需求量)、用户已占有的资源数(每个进程当前已分配的资源量)。通过这些参数,可以计算需求矩阵(最大需求减去已占有)和可用资源向量,进而模拟资源分配过程以判断安全序列是否存在。
选项 B“满足系统安全的最少资源数”并非银行家算法所需的参数。算法侧重于动态评估当前系统状态的安全性,而不是预先确定或使用一个理论上的最少资源数量。因此,该参数在安全序列检查中是不必要的。
28
下列关于页式存储的说法中,正确的是( )。
I. 在页式存储管理中,若无 TLB 和 Cache,则每访问一条数据都至少需要访问 2 次内存。
II. 页式存储管理不会产生内存碎片
III. 页式存储管理当中的页面是用户可以感知的
IV. 页式存储方式可以采用静态重定位
【解析】
首先,分析每个说法的正确性:
说法 I:在页式存储管理中,若无 TLB 和 Cache,访问数据时需要先访问内存中的页表获取物理地址(第一次内存访问),再根据物理地址访问数据(第二次内存访问),因此至少需要 2 次内存访问,该说法正确。
说法 II:页式存储管理将内存划分为固定大小的页,进程分配页面时可能产生内部碎片,即页面内未使用的空间,因此会产生内存碎片,该说法错误。
说法 III:页式存储管理对用户透明,页面大小和映射由操作系统和硬件管理,用户无法感知,该说法错误。
说法 IV:静态重定位在程序加载时一次性完成地址转换,而页式存储使用页表进行动态地址转换,运行时完成,因此不采用静态重定位,该说法错误。
综上所述,只有说法 I 正确,对应选项 C。
29
如下程序在页式虚存系统中执行,程序代码位于虚拟空间 0 页,A 为 128×128 的数组,在虚空间以行为主序存放,每页存放 128 个数组元素。工作集大小为 2 个页框(开始时程序代码已在内存,占 1 个页框),用 LRU 算法,下面两种对 A 初始化的程序引起的页故障数分别为( )。
程序 1:
for(j=1; j<=128; j++)
for(i=1; i<=128; i++)
A[i][j] = 0;
程序 2:
for(i=1; i<=128; i++)
for(j=1; j<=128; j++)
A[i][j] = 0;
【解析】 在页式虚存系统中,数组 A 为 128×128,以行为主序存放,每页存放 128 个元素,因此每行对应一个虚拟页,共占用 128 页(假设从第 1 页开始)。工作集大小为 2 个页框,开始时程序代码(位于第 0 页)已占 1 个页框,故仅剩 1 个页框用于数据页。采用 LRU 替换算法,数据页框只能容纳一页数据。
对于程序 1(列优先初始化):外层循环遍历列 j,内层循环遍历行 i。访问顺序为 A[1][1], A[2][1], …, A[128][1], A[1][2], A[2][2], …, A[128][2], …, A[1][128], A[2][128], …, A[128][128]。每次访问的元素属于不同行(即不同页),由于只有 1 个数据页框,每次访问新页时都会发生页故障并替换当前页。即使同一页后续会被再次访问,但两次访问之间间隔了其他 127 页的访问,该页已被替换出内存,因此每次访问都会引发页故障。总访问次数为 128×128,故页故障数为 128×128。
对于程序 2(行优先初始化):外层循环遍历行 i,内层循环遍历列 j。访问顺序为 A[1][1], A[1][2], …, A[1][128], A[2][1], A[2][2], …, A[2][128], …, A[128][1], A[128][2], …, A[128][128]。每行元素位于同一页,访问某行时,第一次访问该页发生页故障,随后访问该行其他元素时页已在内存,无故障。处理下一行时,新页替换旧页,再次发生页故障。因此,每行仅一次页故障,共 128 行,故页故障数为 128。
综上,程序 1 页故障数为 128×128,程序 2 页故障数为 128,对应选项 A。
30
下列哪些存储分配方案可能使系统抖动,( )。
I. 动态分区分配
II. 简单页式
III. 虚拟页式
IV. 简单段页式
V. 简单段式
VI. 虚拟段式
【解析】 本题考查系统抖动。要通过对存储分配的理解来推断系统是否会发生抖动,所以本题同时也需要了解不同的存储分配方案的内容。抖动现象是指刚刚被换出的页很快又要被访问,为此,又要换出其他页,而该页又很快被访问,如此频繁地置换页面,以致大部分时间都花在页面置换上。对换的信息量过大,内存容量不足不是引起系统抖动现象的原因,而选择的置换算法不当才是引起抖动的根本原因,例如,先进先出算法就可能会产生抖动现象。本题中只有虚拟页式和虚拟段式才存在换入换出的操作,简单页式和简单段式因已经全部将程序调入内存,因此不需要置换,也就没有了抖动现象。这里需要注意简单式和虚拟式的区别。
31
某文件系统采用多级索引结构,每个文件的索引节点(inode)中包含:
- 12个直接索引项,每个直接索引项指向一个数据块;
- 1个一级间接索引项,指向一个索引块(该索引块可存储256个块地址);
- 1个二级间接索引项(通过两层索引块间接指向数据块,每层索引块可存储256个块地址)。
假设数据块和索引块大小均为4KB,每个块地址占4B。若进程要访问文件中某个偏移位置对应的数据,且该偏移量对应的逻辑块号(从0开始编号)为500,那么操作系统需要访问几次磁盘才能获取该数据块的位置?(假设索引节点已在内存中)
【解析】
- 直接索引可覆盖的逻辑块号为 0~11(共12块)。
- 一级间接索引块可存储 256 个块地址,覆盖逻辑块号 12~267(共256块)。
- 二级间接索引的第一层索引块可存储 256 个第二层索引块地址,每个第二层索引块又可存储 256 个数据块地址,因此二级间接索引覆盖的逻辑块号为 268~65803(共 256×256=65536 块)。
- 逻辑块号500落在二级间接索引范围内(500 > 267)。
- 二级间接索引访问数据需要三次磁盘访问:
- 第一次:读取一级索引块(二级间接索引的第一层);
- 第二次:根据第一层索引找到第二层索引块并读取;
- 第三次:根据第二层索引找到数据块并读取(题目问“获取该数据块的位置”指定位数据块所在的磁盘位置,但读取数据块本身也需要一次磁盘访问,因此总共需3次磁盘访问)。
- 由于索引节点已在内存,不需要读inode本身。
因此,需要 3 次磁盘访问,选 C。
32
下列关于设备独立性的论述中,正确的是( )。
【解析】 设备独立性是操作系统中的一个重要概念,指的是用户程序在访问 I/O 设备时,不直接依赖于具体的物理设备,而是通过逻辑设备名进行操作。操作系统负责将逻辑设备名映射到实际的物理设备,这样当物理设备更换、升级或添加时,用户程序无需任何修改,从而提高了系统的灵活性、可移植性和可维护性。
选项 A 错误,因为设备独立性并非 I/O 设备自身具有的执行功能,而是操作系统为用户程序提供的一种抽象层服务。选项 C 不准确,设备共享是指多个进程或用户共同使用同一设备,虽然设备独立性可以促进共享,但其核心是程序的独立性而非共享本身。选项 D 也不正确,设备驱动通常是针对特定物理设备编写的,设备独立性关注的是用户程序层面的抽象,而非驱动层面的独立。
因此,只有选项 B 正确地描述了设备独立性的本质,即用户程序独立于具体物理设备的特性。
33
在 OSI 参考模型中,上层协议实体与下层协议实体之间的逻辑接口称为服务访问点(SAP)。在 Internet 数据帧中,目的地址“0x000F781C6001”属于( )的服务访问点。
【解析】 在 OSI 参考模型中,服务访问点(SAP)是相邻协议层之间的逻辑接口,用于标识上层实体访问下层服务的点。数据链路层的 SAP 通常对应 MAC 地址,因为该层使用 MAC 地址在局域网中唯一标识设备以实现帧的传输。题目中的目的地址“0x000F781C6001”是一个 48 位的十六进制数,格式符合标准 MAC 地址(如 00:0F:78:1C:60:01),因此它属于数据链路层的服务访问点。
网络层的 SAP 是 IP 地址,传输层的 SAP 是端口号,应用层的 SAP 是高层协议标识,均与 MAC 地址的格式和用途不符。故该地址对应数据链路层。
34
一个传输数字信号的模拟信道的信号功率是 0.62W,噪音功率是 0.02W,频率范围是 3.5~3.9MHz,该信道的最高数据传输速率是( )。
【解析】 首先,计算信道带宽。频率范围为
到
,因此带宽
信号功率
,噪声功率
,信噪比
根据香农定理,噪声信道中数字信号的最高数据传输速率(信道容量)为
代入数值:
由于
,可得
因此,该信道的最高数据传输速率为 ,对应选项 B。
35
在简单停止 - 等待协议中,为了解决重复帧的问题,需要采用( )。
【解析】 在简单停止 - 等待协议中,发送方每发送一帧后必须等待接收方的确认,才能发送下一帧。这种机制容易因确认帧丢失或延迟而产生重复帧问题:当确认丢失时,发送方超时重传原帧,接收方可能再次收到相同帧,若无区分机制,会导致数据重复处理。
帧序号通过为每个帧分配唯一标识(通常使用 1 位序号,如 0 和 1 交替),使接收方能够检查序号并识别重复帧,从而丢弃它们。定时器主要用于触发超时重传,但可能引入重复帧;ACK 机制用于确认正确接收,不直接防止重复;NAK 机制用于报告错误,与重复帧无关。因此,帧序号是解决重复帧问题的核心。
36
一个 2Mbps 的网络,线路长度为 1km,传输速度为 20m/ms,分组大小为 100 字节,应答帧大小可以忽略。若采用“停止—等待”协议,则实际数据速率是( )。
在停止-等待协议中,实际数据速率取决于分组传输时间和往返传播延迟。
分组大小为 100 字节,即 800 比特。网络带宽为
,因此分组传输时间为
线路长度为 ,传播速度为 ,传播时间为
由于应答帧大小可忽略,ACK 传输时间不计,但 ACK 传播时间与分组相同,故总周期时间为
在此周期内成功传输 800 比特数据,实际数据速率为
因此选项 C 正确。
37
当路由器接收到一个 1500 字节的 IP 数据报时,需要将其转发到 MTU 为 980 的子网,分片后产生两个 IP 数据报,长度分别是( )。(首部长度为 20B)
【解析】 原始 IP 数据报总长度为 1500 字节,首部长度为 20 字节,因此数据部分长度为 1500 - 20 = 1480 字节。需要转发到 MTU 为 980 的子网,意味着每个分片的总长度(包括首部)不能超过 980 字节。
每个分片的数据部分长度必须是 8 字节的倍数,这是由 IP 分片偏移量字段的单位决定的。计算每个分片可容纳的最大数据部分:MTU 减去首部长度,即 980 - 20 = 960 字节。960 恰好是 8 的倍数(960 ÷ 8 = 120),因此第一个分片的数据部分可取 960 字节,加上 20 字节首部,总长度为 980 字节。
剩余数据部分为 1480 - 960 = 520 字节。520 也是 8 的倍数(520 ÷ 8 = 65),因此第二个分片的数据部分为 520 字节,加上 20 字节首部,总长度为 540 字节。分片后两个 IP 数据报的长度分别为 980 字节和 540 字节。
38
路由器收到一个数据包,其目地址为 195.26.17.4,该地址属于( )子网。
【解析】 要确定目的地址 195.26.17.4 属于哪个子网,需要检查该地址是否落在每个选项子网的地址范围内。子网范围由其网络地址和前缀长度决定,通过计算网络地址和广播地址进行比较。
选项 A:195.26.0.0/21,掩码为 255.255.248.0,网络地址为 195.26.0.0,广播地址为 195.26.7.255。目的地址 195.26.17.4 的第三字节为 17,大于 7,因此不在该范围内。
选项 B:195.26.8.0/22,掩码为 255.255.252.0,网络地址为 195.26.8.0,广播地址为 195.26.11.255。目的地址第三字节 17 大于 11,因此不在该范围内。
选项 C:195.26.16.0/20,掩码为 255.255.240.0,网络地址为 195.26.16.0,广播地址为 195.26.31.255。目的地址第三字节 17 在 16 到 31 之间,且整个地址 195.26.17.4 在该范围内,因此属于此子网。
选项 D:195.26.20.0/22,掩码为 255.255.252.0,网络地址为 195.26.20.0,广播地址为 195.26.23.255。目的地址第三字节 17 小于 20,因此不在该范围内。
综上,目的地址 195.26.17.4 属于 195.26.16.0/20 子网,对应选项 C。
39
假设在没有发生拥塞的情况下,在一条往返时间 RTT 为 10ms 的线路上采用慢开始控制策略。如果接收窗口的大小为 24KB,最大报文段 MSS 为 2KB。那么发送方能发送出一个完全窗口(也就是发送窗口达到 24KB)需要的时间是( )。
【解析】 在慢开始控制策略中,拥塞窗口(cwnd)初始值为 1 个 MSS(2KB),每经过一个 RTT,cwnd 翻倍。接收窗口大小为 24KB。发送窗口取 cwnd 和接收窗口的最小值。当 cwnd 增长到等于或超过 24KB 时,发送窗口达到 24KB。
计算 cwnd 增长过程:经过第一个 RTT 后,cwnd=4KB;第二个 RTT 后,cwnd=8KB;第三个 RTT 后,cwnd=16KB,仍小于 24KB;第四个 RTT 后,cwnd=32KB,超过 24KB,此时发送窗口被接收窗口限制为 24KB,即完全窗口。
每个 RTT 为 10ms,因此达到完全窗口需要经过 4 个 RTT,总时间为 4 × 10ms = 40ms。
40
一台域名服务器希望解析域名 www.google.com。如果这台主机配置的 DNS 地址为 a,Internet 的根域名服务器为 b,而存储域名 www.google.com 与其 IP 地址对应关系的域名服务器为 c,那么这台主机通常先查询( )。
【解析】 在 DNS 解析过程中,主机通常首先查询本地配置的 DNS 服务器,即递归 DNS 服务器。题目中配置的 DNS 地址为 a,因此主机向服务器 a 发送查询请求。服务器 a 如果没有缓存结果,则会代表主机从根服务器 b 开始递归查询,最终可能访问权威服务器 c 获取 IP 地址。主机一般不直接查询根服务器 b 或权威服务器 c,所以优先查询的是 a。
解答题
第 41~47 题,共 70 分。
41
(13 分)设有 个不全为负的整型元素存储在一维数组 A[p] 中,它包含很多连续的子数组,例如数组 A = {1, -2, 3, 10, -4, 7, 2, -5},请设计一个时间上尽可能高效的算法,求出数组 A 的子数组之和的最大值(例如数组 A 的最大的子数组为 {3, 10, -4, 7, 2},因此输出为该子数组的和 18)。要求:
(1) 给出算法的基本设计思想。
(2) 根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(3) 说明你所设计算法的时间复杂度和空间复杂度。
42
图 1 为某操作系统中文件系统的目录结构。

请回答一下问题:
(1) 本题中的目录结构可抽象为数据结构中的哪种逻辑结构?
(2) 请设计合理的链式存储结构,以保存图 1 中的文件目录信息。要求给出链式存储结构的数据类型定义,并画出对应图 1 中根目录部分到目录 A、B 及其子目录和文件的链式存储结构示意图。
(3) 哈夫曼树是一种特殊的树形结构,请证明哈夫曼树的总结点数总为奇数。
43
(8 分)根据 42 题图 1 描述的目录结构,结合以下描述继续回答问题。根目录常驻内存,目录文件组织成链接文件,不设文件控制块,普通文件组织成索引文件。目录表目指示下一级文件名及其磁盘地址(各占 2 个字节,共 4 个字节)。若下级文件是目录文件,指示其第一个磁盘块地址。若下级文件是普通文件,指示其文件控制块的磁盘地址。每个目录文件磁盘块的最后 4 个字节供拉链使用。下级文件在上级目录文件中的次序在图中从左至右。每个磁盘块有 512 字节,与普通文件的一页等长。
普通文件的文件控制块组织如图 2 所示,其中,每个磁盘块地址占 2 个字节,前 10 个地址直接指示该文件前 10 页的地址。第 11 个地址指示一级索引表地址,一级索引表中每个磁盘地址指示一个文件页地址;第 12 个地址指示二级索引表地址,二级索引表中每个地址指示一个一级索引表地址;第 13 个地址指示三级索引表地址,三级索引表中每个地址指示一个二级索引表地址。请问:
(1) 一个普通文件最多可有多少个文件页?
(2) 若要读文件 J 中的某一页,最多启动磁盘多少次?
(3) 若要读文件 W 中的某一页,最少启动磁盘多少次?
(4) 就 (3) 而言,为最大限度减少启动磁盘的次数,可采用什么方法?此时,磁盘最多启动多少次?
44
(7 分)有三个进程 PA、PB 和 PC 合作解决文件打印问题:PA 将文件记录从磁盘读入主存的缓冲区 1,每执行一次读一个记录;PB 将缓冲区 1 的内容复制到缓冲区 2,每执行一次复制一个记录;PC 将缓冲区 2 的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录的大小。请用 P、V 操作来保证文件的正确打印。
45
(11 分)下图是一个简化的 CPU 与主存连接结构示意图(图中省略了所有多路选择器)。其中有一个累加寄存器 AC、一个状态寄存器和其他四个寄存器:主存地址寄存器 MAR、主存数据寄存器 MDR、程序计数器 PC 和指令寄存器 IR。各部件及其之间的连线表示数据通路,箭头表示信息传送方向。

一个简化的 CPU 与主存连接结构示意图
要求:
(1) 请写出图中 a、b、c、d 四个寄存器的名称。
(2) 简述图中指令从主存取到控制器的过程。
(3) 说明数据从主存取出、运算、写回主存所经过的数据通路(假定数据地址已在 MAR 中)。
(4) 程序计数器 PC 的内容是如何变更的?
46
(11 分)某按字节编址,主存容量为 1MB,采用两路组相联方式(每组仅有两块)的 Cache 容量为 64KB,每个数据块为 256B。已知访问开始前第 2 组(组号为 1)的地址阵列内容如下图所示(第一列为组内块号):
Cache 采用 LRU 替换策略。
(1) 分别说明主存地址中标记 (Tag)、组号和块内地址三部分的位置和位数。
(2) 若 CPU 要顺序访问地址为 20124H、58100H、60140H 和 60138H 等 4 个主存单元。上述 4 个数能否直接从 Cache 中读取,若能,请给出实际访问的 Cache 地址。第 4 个数访问结束后,上图中的内容将如何变化。
(3) 若 Cache 完成存取的次数为 5000 次,主存完成存取的次数为 200 次。已知 Cache 存取周期为 40ns,主存存取周期为 160ns,求该 Cache-主存系统的访问效率。(注:默认为 Cache 与主存同时访问)
47
(9 分)主机 A 向主机 B 连续发送了 3 个 TCP 报文段。第 1 个报文段的序号为 90,第 2 个报文段的序号为 120,第 3 个报文段的序号为 150。请回答:
(1) 第 1、2 个报文段携带了多少字节的数据?
(2) 主机 B 收到第 2 个报文段后,发回的确认中的确认号应该是多少?
(3) 如果主机 B 收到第 3 个报文段后,发回的确认中的确认号是 200,试问 A 发送的第 3 个报文段中的数据有多少字节?
(4) 如果第 2 个报文段丢失,而其他两个报文段正确到达了主机 B,那么主机 B 在第 3 个报文段到达后,发往主机 A 的确认报文中的确认号应该是多少?
7 - 模拟卷 7
选择题
第 1~40 小题,每小题 2 分,共 80 分。下列每题给出的四个选项中,只有一个选项符合试题要求。
1
设 是描述问题规模的正整数,下列程序片段的时间复杂度是( )。
i = n * n;
while (i != 1)
i = i / 2;
【解析】 程序首先将变量 初始化为 的平方,即 。然后进入 while 循环,循环条件为 ,每次迭代将 除以 。循环的迭代次数取决于 从 减少到 所需除以 的次数。
设迭代次数为 ,经过 次迭代后, 的值变为 。当循环终止时, ,因此有 ,即 。取对数可得 。
在时间复杂度分析中,常数因子可以忽略,因此迭代次数 的数量级为 。所以,该程序片段的时间复杂度是 。对比选项,A 正确。
2
若已知一个栈的入栈序列是 1,2,3,4。其出栈序列为 p1,p2,p3,p4,则 p2,p4 不可能是( )。
【解析】 栈的入栈序列为 1,2,3,4,出栈序列需符合栈的后进先出规则。通过分析所有可能的出栈序列(共 14 种),并检查各选项中 p2(第二个出栈元素)和 p4(第四个出栈元素)的组合是否存在合法的序列对应。
- 选项 A(2、4):存在合法序列如 1,2,3,4,其中 p2=2、p4=4,故可能。
- 选项 B(2、1):存在合法序列如 3,2,4,1,其中 p2=2、p4=1,故可能。
- 选项 C(4、3):不存在任何合法出栈序列同时满足 p2=4 且 p4=3。例如,序列 1,4,2,3 看似满足,但实际上不合法,因为在出栈 4 后,栈中剩余 2 和 3 且 3 在栈顶,必须优先出栈 3,无法直接出栈 2,因此无法实现 p4=3。
- 选项 D(3、4):存在合法序列如 1,3,2,4,其中 p2=3、p4=4,故可能。
综上,p2、p4 不可能是 4、3,对应选项 C。
3
执行完下列语句段后,i 值为( )。
int f(int x)
{
return ((x > 0) ? x * f(x - 1) : 2);
}
int i;
i = f(f(1));
【解析】 首先,函数 f 是递归函数,其定义为:当参数 x 大于 0 时,返回 x 乘以 f(x-1);当 x 不大于 0(即 x ≤ 0)时,返回 2。语句 i = f(f(1)); 的执行过程分为两步:先计算内层 f(1),再将结果作为参数计算外层 f。
计算 f(1):由于 1 > 0,返回 1 * f(0)。计算 f(0):0 不大于 0,因此返回 2。所以 f(1) = 1 * 2 = 2。
然后计算外层 f(f(1)) 即 f(2)。对于 f(2):2 > 0,返回 2 * f(1)。而 f(1) 已计算为 2,因此 f(2) = 2 * 2 = 4。最终 i 的值为 4。
递归过程有限,因为对于正整数参数,递归总是递减到 0 后终止,不会无限递归。因此正确答案为 B。
4
含有 4 个元素值均不相同的结点的二叉排序树有( )种。
【解析】 二叉排序树(BST)的结构数量由卡特兰数决定。对于 n 个值均不相同的节点,不同形态的二叉排序树数量等于第 n 个卡特兰数
,计算公式为
其中 表示组合数。
当
时,计算
:
因此,含有 4 个元素值均不相同的结点的二叉排序树共有 14 种。
5
由元素序列(27,16,75,38,51)构造平衡二叉树,则首次出现的最小不平衡子树的根(即离插入结点最近且平衡因子的绝对值为 2 的结点)是( )。
【解析】 按序列(27,16,75,38,51)依次插入构造平衡二叉树:
- 插入 27 和 16 后,树平衡。
- 插入 75 后,树仍平衡。
- 插入 38 后,各节点平衡因子绝对值均不超过 1,树平衡。
- 插入 51 后,节点 38 的平衡因子变为 -1(平衡),但节点 75 的左子树高度为 1、右子树高度为 -1(空),平衡因子计算为 1 - (-1) = 2,绝对值首次达到 2,成为不平衡节点。继续向上检查,节点 27 的平衡因子也变为 -2,但节点 75 是离插入点 51 最近的不平衡节点,因此最小不平衡子树的根是 75。
6
在下列二叉树中,( )的所有非叶结点的度均为 2。
Ⅰ. 完全二叉树
Ⅱ. 满二叉树
Ⅲ. 平衡二叉树
Ⅳ. 哈夫曼树
Ⅴ. 二叉排序树
【解析】
首先,理解题意:所有非叶结点的度均为 2,意味着二叉树中每个内部节点都必须有两个子节点。接下来逐一分析所列二叉树类型:
完全二叉树的定义是除最后一层外,其他层节点数达到最大值,且最后一层节点尽量靠左排列。在这种情况下,非叶结点可能只有一个子节点(例如,当树节点数较少时),因此度可能为 1 或 2,不满足所有非叶结点度均为 2 的条件。
满二叉树则严格要求每个节点要么是叶子节点(度为 0),要么有两个子节点(度为 2)。因此,满二叉树的所有非叶结点度均为 2,符合条件。
平衡二叉树(如 AVL 树)主要关注左右子树高度平衡,不限制节点的度数。在平衡二叉树中,非叶结点可能只有左子节点或右子节点,即度可以为 1,所以不满足要求。
哈夫曼树在构建过程中,每次合并两个节点形成新的内部节点,因此每个内部节点都有两个子节点。哈夫曼树的所有非叶结点度均为 2,符合条件。
二叉排序树中,节点度数取决于插入顺序和树的结构,非叶结点常常可能只有一个子节点(例如,在偏斜树中),因此度可能为 1 或 2,不满足所有非叶结点度均为 2 的条件。
综上,只有满二叉树和哈夫曼树满足所有非叶结点的度均为 2,对应选项中的Ⅱ和Ⅳ,故正确答案为 A。
7
一个含有 个顶点和 条边的简单无向图,其邻接矩阵存储中零元素的个数是( )。
【解析】 邻接矩阵是一个 的矩阵,总共有 个元素。在简单无向图中,没有自环,因此对角线上的 个元素均为零。
图的每条边对应两个对称的非对角线元素(例如,边 对应 和 ),所以非零元素的个数为 。
零元素的个数等于总元素数减去非零元素数,即 。
8
下列关于 AOE 网的叙述中,正确的是( )。
【解析】 AOE 网中关键路径是从源点到汇点的最长路径,决定了整个工程的最短完成时间。选项 A 错误,因为缩短关键路径上某个活动的时间后,如果该活动不再是关键路径的一部分(例如其他路径成为新的关键路径),整个工程时间可能不变甚至增加。选项 B 错误,因为延长关键路径上活动的时间可能使关键路径发生改变,从而工程延长时间不一定等于活动延长时间。选项 C 错误,因为改变关键路径上的活动(如时间调整)不一定导致关键路径改变,例如缩短活动后原路径仍为最长时,关键路径不变。选项 D 正确,当所有关键路径同时延长或缩短相同量时,这些路径的相对长度保持不变,没有其他路径成为更长路径,因此关键路径集合不会改变。
9
下列关于散列表的说法中,不正确的是( )个。
Ⅰ. 散列表的平均查找长度与处理冲突方法无关
Ⅱ. 在散列表中,“比较”操作一般也是不可避免的
Ⅲ. 散列表在查找成功时的平均查找长度与表长有关
Ⅳ. 若在散列表中删除一个元素,只需简单地将该元素删除即可
【解析】
Ⅰ错误。散列表的平均查找长度(ASL)与处理冲突的方法密切相关。例如,线性探测、二次探测和链地址法等不同方法会导致不同的查找性能,ASL 计算公式也各不相同,因此该说法不正确。
Ⅱ正确。在散列表查找过程中,即使哈希函数直接映射到槽位,通常也需要比较关键字以确认是否找到目标元素,因为哈希冲突可能发生或需要验证匹配,因此“比较”操作一般是不可避免的。
Ⅲ错误。散列表在查找成功时的平均查找长度主要取决于负载因子(元素个数与表长的比值),而不是表长本身。例如,链地址法中成功查找的 ASL 约为 1 + α/2(α为负载因子),当负载因子固定时,ASL 与表长无关,因此该说法不正确。
Ⅳ错误。在散列表中删除元素并不总是简单的,尤其是采用开放定址法时,直接删除元素可能会破坏查找链,导致后续查找失败,通常需要标记为“已删除”状态。即使在链地址法中,删除也需调整指针,因此该说法不正确。
综上,不正确的说法有Ⅰ、Ⅲ、Ⅳ,共 3 个,故选 C。
10
数据序列(2,1,4,9,8,10,6,20)只能是( )排序的两趟排序后的结果。
【解析】 首先分析序列(2,1,4,9,8,10,6,20)作为各排序算法两趟后的可能性。冒泡排序两趟后,最大和第二大元素应位于末尾,但序列末尾为 6 和 20,第二大的 10 不在倒数第二,排除 B。选择排序两趟后,最小和第二小元素应位于前两位,但序列前两位为 2 和 1,而非 1 和 2,排除 C。插入排序两趟后,前两个元素应有序,但序列前两位为 2 和 1(无序),排除 D。
快速排序的可能在于:序列中元素 4 满足左边(2,1)均小于 4,右边(9,8,10,6,20)均大于 4,符合快速排序一趟分区后枢轴就位的特征。考虑两趟操作:第一趟以最后一个元素 20 为枢轴进行分区,由于 20 最大,分区后序列不变;第二趟对左子序列(2,1,4,9,8,10,6)以 4 为枢轴进行分区,使 4 就位,且左子序列保持为 2,1,4,9,8,10,6,从而得到当前序列。尽管枢轴选择可能非标准(如选中间元素),但快速排序允许不同策略,而其他算法均不匹配,因此 A 正确。
11
假定我们从下图所示的堆中删除了值为 11 的结点,那么值为 70 的结点将出现在图中哪个指定位置( )。

【解析】 本题考查堆的调整过程。堆的调整流程如下图所示,可知 70 最后的位置为 C。

12
冯·诺伊曼机可以区分指令和数据的部件是( )。
【解析】 冯·诺伊曼机采用存储程序结构,指令和数据共享同一个存储器。为了正确执行程序,计算机必须能够区分指令和数据,这一功能主要由控制器实现。控制器负责协调计算机的各部件工作,通过指令周期来管理操作:在取指阶段,控制器从存储器中读取指令,并更新程序计数器;在执行阶段,控制器解码指令,并根据需要访问数据存储器或执行运算。因此,控制器通过不同的时序和控制信号,确保指令被当作命令处理,而数据被当作操作数处理,从而有效区分两者。其他部件如总线只负责传输信息,运算器专注于算术逻辑运算,控制存储器则用于存储微程序,它们均不直接承担区分指令和数据的核心角色。
13
已知 C 程序中,某类型为 int 的变量 x 的值为 -1088。程序执行时,x 先被存放在 16 位寄存器 R1 中,然后被进行算术右移 4 位的操作。则此时 R1 中的内容(以十六进制表示)是( )。
【解析】 首先,变量 x 的值为 -1088,在 16 位寄存器中采用二进制补码表示。1088 的十六进制表示为 0x0440,对其取反加一得到 -1088 的表示:0xFFFF - 0x0440 + 1 = 0xFBBF + 1 = 0xFBC0。因此,寄存器 R1 初始内容为 0xFBC0。
执行算术右移 4 位时,由于符号位为 1,左移空出的高位补 4 个 1。原始值 0xFBC0(二进制 1111 1011 1100 0000)右移 4 位后,低 4 位丢弃,高 4 位补 1,得到 1111 1111 1011 1100,即十六进制 0xFFBC。
另一种验证方式:算术右移 4 位等价于除以 16。计算 -1088 / 16 = -68,而 -68 的 16 位二进制补码表示为 0xFFBC(68 为 0x0044,取反加一得 0xFFBC)。因此,移位后 R1 的内容为 0xFFBC。
选项 A 为原始值,选项 C 和 D 均为正数表示,与结果不符,故正确答案为 B。
14
下列关于机器零的说法,正确的是( )。
【解析】本题考查机器零。只有当数据发生“上溢”时,机器才会终止运算操作,转去进行溢出处理,A 错误。规格后化可以判断运算结果是否上溢出(超过表示范围),但和机器零没有关联,规格化规定尾数的绝对值应大于或等于 1/R(R 为基数),并小于或等于 1,机器零显然不符合这个定义,C 错误。定点数中所表示的 0,是实实在在的 0(坐标轴上的),而不是趋近 0 的机器零,D 错误。在各种数码的表示法中,移码相当于真值在坐标轴上整体右移至正区间内,当移码表示的阶码全 0 时,为阶码表示的最小负数,此时直接认为浮点数是机器零,B 正确。
注意:当浮点运算结果在 0 到最小正数之间(正下溢)或最大负数到 0 之间(负下溢)时,浮点数值趋于 0,计算机将其当做机器零处理。
15
某存储系统中,主存容量是 Cache 容量的 4096 倍,Cache 被分为 64 块,当主存地址和 Cache 地址采用直接映射方式时,地址映射表的大小应为( )。(假设不考虑一致维护位)
【解析】 本题考查 Cache 与主存的映射原理。由于 Cache 被分为 64 块,那么 Cache 有 64 行,采用直接映射,一行相当于一组。故而该标记阵列每行存储 1 个标记项,其中主存标记项为 12bit( ,是 Cache 容量的 4096 倍,那就是地址长度比 Cache 长 12 位),加上 1 位有效位,故而为 bit。
注意:主存—Cache 地址映射表(标记阵列)中内容:映射的 Cache 地址(直接映射不需要因为 Cache 地址唯一,组相联只需要组号)、主存标记(命中判断)、有效位。如下图所示。

16
某虚拟存储系统采用页式存储管理,只有 a、b 和 c 三个页框,页面访问的顺序为:
0, 1, 2, 4, 2, 3, 0, 2, 1, 3, 2, 3, 0, 1, 4
若采用 FIFO 替换算法,则命中率为( )。
【解析】 本题考查 FIFO 算法。FIFO 算法指淘汰先进入的,易知替换顺序为:
| 走向 | 0 | 1 | 2 | 4 | 2 | 3 | 0 | 2 | 1 | 3 | 2 | 3 | 0 | 1 | 4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | 2 | 2 | 2 | 2 | 0 | 0 | 0 | 3 | 3 | 3 | 3 | 3 | 3 | ||
| b | 1 | 1 | 1 | 1 | 3 | 3 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 4 | |
| a | 0 | 0 | 0 | 4 | 4 | 4 | 4 | 2 | 2 | 2 | 2 | 2 | 0 | 0 | 0 |
| 命中否 | √ | √ | √ | √ |
表中除了标注为命中的,其余均未命中,所以命中率为 。
17
假设寄存器 R 中的数值为 200,主存地址为 200 和 300 的地址单元中存放的内容分别是 300 和 400,则( )访问到的操作数为 200。
Ⅰ. 直接寻址 200
Ⅱ. 寄存器间接寻址(R)
Ⅲ. 存储器间接寻址(200)
Ⅳ. 寄存器寻址 R
【解析】 本题考查各种数据寻址方式的原理。直接寻址 200 中,200 就是有效地址,所访问的主存地址 200 对应的内容是 300,Ⅰ错误。寄存器间接寻址(R)的访问结果与Ⅰ一样,Ⅱ错误。存储器间接寻址(200)表示主存地址 200 中的内容为有效地址,所以有效地址为 300,访问的操作数是 400,Ⅲ错误。寄存器寻址 R 表示寄存器 R 的内容即为操作数,所以只有Ⅳ正确。此类题建议画出草图。
18
下列部件不属于控制器的是( )。
【解析】 控制器是 CPU 的核心部件,负责指令译码、产生控制信号以协调计算机各部件工作。典型控制器包括指令寄存器、程序计数器、时序电路等。
指令寄存器(A)用于存储当前执行的指令,程序计数器(B)存放下一条指令地址,时序电路(D)产生定时信号控制指令执行步骤,三者均属于控制器。
程序状态字寄存器(C)主要存储处理器的状态信息(如进位、零标志等),这些信息反映运算器操作结果,虽可供控制器使用,但其本身属于处理器状态单元或运算器关联部分,不属于控制器。因此,本题选项中不属于控制器的是程序状态字寄存器。
19
设指令由取指、分析、执行三个子部件完成,每个子部件的工作周期均为 t,采用常规标量流水线处理。若连续执行 10 条指令,则需要的时间为( )。
【解析】 在常规标量流水线中,指令执行分为取指、分析、执行三个阶段,每个阶段耗时均为 。流水线处理允许连续指令重叠执行不同阶段,从而提升效率。对于 个阶段(本题 )和 条指令(本题 ),总时间计算公式为:
代入具体数值:
这意味着第一条指令在 时完成,后续指令每隔 时间完成一条,第 10 条指令在 时完成,因此连续执行 10 条指令需要 时间。
选项中,A. 、B. 、D. 均不符合计算结果,故正确答案为 C。
20
在 32 位总线系统中,若时钟频率为 500MHz,传送一个 32 位字需要 5 个时钟周期,则该总线系统的数据传输速率是( )。
【解析】 首先,理解关键参数:总线宽度为 32 位,时钟频率为 500 MHz,传送一个 32 位字需要 5 个时钟周期。数据传输速率指单位时间内传输的数据量,通常以字节每秒(B/s)为单位。
计算每秒传输的字数:时钟频率为 500 MHz,即每秒有
个时钟周期。由于每 5 个时钟周期传输一个字,因此每秒传输的字数为
每个字的数据量:32 位等于 4 字节(因为 8 位为 1 字节)。因此,每秒传输的数据量为
在数据传输速率中,常以 MB/s 表示兆字节每秒,其中 1 MB = 字节。因此, 字节/秒等于 400 MB/s,对应选项 B。
21
某计算机系统中的软盘驱动器以中断方式与处理机进行 I/O 通信,通信以 16bit 为传输单位,传输率为 50KB/s。每次传输的开销(包括中断)为 100 个节拍,处理器的主频为 50MHz,则磁盘使用时占用处理器时间的比例为( )。
首先,传输单位为 16 比特,即 2 字节。
传输速率为 50 KB/s,这里按 1 KB = 1024 字节计算,每秒传输的字节数为
因此,每秒传输次数
处理器主频为 50 MHz,即
每个时钟周期(节拍)的时间为
每次传输的开销为 100 个节拍,所以每次开销时间为
每秒总开销时间为
占用处理器时间的比例为
若按 1 KB = 1000 字节计算,则
总开销时间为
比例仍为
因此,答案为 5%。
22
对于单 CPU 单通道工作过程,下列可以完全并行工作的是( )。
【解析】 本题考查通道的工作原理。做题的时候要注意完全并行的“完全”这两个字,对于单 CPU 系统来讲,程序和程序之间是并发的关系,而不是真正意义上的并行,要理解好并发和并行的区别。通道方式是 DMA 方式的进一步发展,通道实际上也是实现 I/O 设备和主存之间直接交换数据的控制器。通道的基本工作过程如下图所示。

CPU 通过执行 I/O 指令负责启停通道,以及处理来自通道的中断实现对通道的管理,因此通道和程序(即 CPU)并没有完全并行,因为通道仍然需要 CPU 来对它实行管理,B 错误。而在设备工作时,它只与通道交互,此时程序与其并行工作,C 正确。而 A、D 显然错误。
23
用户在编写程序时计划读取某个数据文件中的 20 个数据记录,他使用操作系统提供的接口是( )。
【解析】 在编写程序时,用户需要通过代码与操作系统交互来读取文件中的数据记录。操作系统提供的系统调用(System Call)是专门为应用程序设计的编程接口,它允许程序请求操作系统的服务,如文件操作、进程管理等。例如,在 C 语言中使用 read() 函数读取文件时,底层会调用操作系统的 read 系统调用,从而实现对文件的访问。
其他选项中,图形用户接口(GUI)是面向最终用户的视觉交互界面,通过点击、拖拽等方式操作,不适用于编程时的文件读取;原语(Primitive)通常指操作系统内核中不可中断的基本操作,是系统调用的底层实现,但不直接暴露给应用程序员;命令行输入控制是通过命令行界面输入指令来操作系统的交互方式,属于用户级交互,而非编程接口。因此,用户在编写程序时读取数据文件应使用系统调用接口。
24
在多对一的线程模型中,当一个多线程进程中的某一个线程执行一个需阻塞的系统调用时,( )。
【解析】 在多对一的线程模型中,多个用户级线程映射到单个内核级线程。这意味着所有用户级线程都由同一个内核线程管理,内核线程是操作系统进行调度和执行的基本单位。
当一个用户级线程执行了一个需阻塞的系统调用(例如等待 I/O 操作完成)时,控制权会转移到内核。由于只有一个内核线程,该内核线程会因为系统调用而进入阻塞状态。操作系统内核会将该内核线程(从而整个进程)置于阻塞队列,并切换到其他就绪进程执行。
因此,尽管进程内部有多个用户级线程,但由于它们共享同一个内核线程,一旦这个内核线程阻塞,整个进程就无法继续运行,所有用户级线程都会被阻塞。其他选项不正确:A 错误,因为其他线程无法运行;C 和 D 错误,因为线程和进程通常不会被撤销,只是状态改变。
25
并发进程运行时,其推进的相对速度是( )。
【解析】
并发进程的推进相对速度主要与操作系统的进程调度策略有关。在并发环境中,多个进程交替或并行执行,其执行顺序和获得 CPU 时间的频率由调度器根据策略(如时间片轮转、优先级调度等)动态决定。进程的程序结构或代码虽可能影响其计算需求,但无法直接控制调度器的分配行为;进程创建时可能设定初始属性,但推进速度在运行时会随系统负载和调度决策变化,并非固定不变。因此,推进速度的关键因素是调度策略。
26
在使用信号量机制实现互斥和同步时,互斥信号量和同步信号量的初值分别为( )。
【解析】本题考查信号量机制。互斥信号量的初值都设置为 1,P 操作成功则将其改成 0,V 操作成功将其改成 1。实现同步时,信号量的初值应根据具体情况来确定,若期望的消息尚未产生,则对应的初值应设为 0;若期望的消息已经存在,则信号量的初值应设为一个非 0 的正整数。
注意:互斥信号量和同步信号量的区别。信号量机制是每年考题的重点,这就要求考生能在理解的基础上熟练应用和掌握信号量。
27
某操作系统采用可变分区分配存储管理方法,操作系统占用低地址部分的 126KB。用户区大小为 386KB,且用户区始址为 126KB,用空闲分区表管理空闲分区。若分配时采用分配空闲区高地址部分的方案,且初始时用户区的 386KB 空间空闲,对申请序列:作业 1 申请 80KB,作业 2 申请 56KB,作业 3 申请 120KB,作业 1 释放 80KB,作业 3 释放 120KB,作业 4 申请 156KB,作业 5 申请 81KB。如果采用首次适应算法处理上述序列,则最小空闲块的大小为( )。
【解析】 我们按照序列逐步模拟存储分配与释放过程。操作系统占用低地址 126KB,用户区始址 126KB,大小 386KB,即用户区范围为 126KB~512KB。初始时,整个用户区空闲,空闲分区表仅有一个分区:起始地址 126KB,大小 386KB。分配时采用首次适应算法,且从找到的空闲分区的高地址部分切割。
作业 1 申请 80KB:查找第一个大小≥80KB 的空闲分区(126KB, 386KB),从高地址部分切割 80KB,分配后空闲分区变为(126KB, 306KB)。作业 1 占据 432KB~512KB。
作业 2 申请 56KB:查找第一个大小≥56KB 的空闲分区(126KB, 306KB),从高地址部分切割 56KB,分配后空闲分区变为(126KB, 250KB)。作业 2 占据 376KB~432KB。
作业 3 申请 120KB:查找第一个大小≥120KB 的空闲分区(126KB, 250KB),从高地址部分切割 120KB,分配后空闲分区变为(126KB, 130KB)。作业 3 占据 256KB~376KB。
作业 1 释放 80KB:释放区域为 432KB~512KB,与现有空闲分区(126KB, 130KB)不相邻,空闲分区表变为两个:(126KB, 130KB)和(432KB, 80KB)。
作业 3 释放 120KB:释放区域为 256KB~376KB,与第一个空闲分区(126KB, 130KB)相邻(结束于 256KB),合并为(126KB, 250KB)。第二个空闲分区(432KB, 80KB)不变。空闲分区表为(126KB, 250KB)和(432KB, 80KB)。
作业 4 申请 156KB:查找第一个大小≥156KB 的空闲分区(126KB, 250KB),从高地址部分切割 156KB,分配后该分区变为(126KB, 94KB)。作业 4 占据 220KB~376KB。空闲分区表为(126KB, 94KB)和(432KB, 80KB)。
作业 5 申请 81KB:查找第一个大小≥81KB 的空闲分区(126KB, 94KB),从高地址部分切割 81KB,分配后该分区变为(126KB, 13KB)。作业 5 占据 139KB~220KB。空闲分区表最终为(126KB, 13KB)和(432KB, 80KB)。
最终有两个空闲块,大小分别为 13KB 和 80KB,最小空闲块大小为 13KB,对应选项 B。
28
下列说法中,正确的是( )。
Ⅰ. 先进先出(FIFO)页面置换算法可能会产生 Belady 现象。
Ⅱ. 最近最少使用(LRU)页面置换算法可能会产生 Belady 现象。
Ⅲ. 在进程运行时,如果它的工作集页面都在虚拟存储器内,能够使该进程有效地运行,否则会出现频繁的页面调入/调出现象。
Ⅳ. 在进程运行时,如果它的工作集页面都在主存储器内,能够使该进程有效地运行,否则会出现频繁的页面调入/调出现象。
【解析】
说法Ⅰ正确:先进先出(FIFO)页面置换算法在增加内存页面帧数时,可能导致缺页次数反而增加,这种现象称为 Belady 异常,因此 FIFO 确实可能产生 Belady 现象。
说法Ⅱ错误:最近最少使用(LRU)页面置换算法属于栈算法,对于任何页面访问序列,增加页面帧数不会增加缺页次数,因此 LRU 不会产生 Belady 现象。
说法Ⅲ错误:工作集是指进程在最近一段时间内访问的页面集合。若工作集页面仅位于虚拟存储器(如磁盘交换区),进程访问时需频繁调入主存,会导致缺页中断和页面调入/调出,无法有效运行;有效运行需要工作集页面位于主存储器中。
说法Ⅳ正确:当进程的工作集页面都在主存储器内时,进程可快速访问所需页面,减少缺页中断,从而有效运行;否则,会因页面缺失而出现频繁的页面调入/调出现象。
综上,正确说法为Ⅰ和Ⅳ,对应选项 B。
29
在请求分页存储管理系统中,地址变换过程可能会因为( )而产生中断。
Ⅰ. 地址越界
Ⅱ. 缺页
Ⅲ. 访问权限错误
Ⅳ. 内存溢出
【解析】 在请求分页存储管理系统中,地址变换过程将逻辑地址转换为物理地址,该过程可能因多种异常情况而产生中断。
首先,地址越界(Ⅰ)可能触发中断。当地址变换时,若逻辑地址的页号超出进程地址空间范围(如大于页表长度),硬件会检测到无效访问,产生越界中断。
其次,缺页(Ⅱ)是请求分页系统的核心中断来源。当访问的页面不在内存中(页表项的有效位为 0),硬件会触发缺页中断,操作系统需调入页面。
第三,访问权限错误(Ⅲ)也可能导致中断。页表项中包含保护位(如读、写权限),若进程试图以未授权方式访问页面(如写入只读页),会触发保护中断。
最后,内存溢出(Ⅳ)通常不是地址变换过程的直接中断原因。内存溢出指系统内存不足,这可能在页面置换或内存分配时由操作系统处理,但地址变换本身不直接检测内存溢出;缺页中断处理程序可能需处理内存不足,但变换过程不会因此产生中断。
因此,地址变换过程可能因Ⅰ、Ⅱ和Ⅲ产生中断,对应选项 D。
30
下面关于索引文件的叙述中,正确的是( )。
【解析】
选项 A 不正确,因为索引文件的索引表项通常包含的是指向记录的指针(物理地址),但并不一定都包含关键字。在操作系统的索引分配方式中,索引块存储的是文件块的物理地址,关键字索引更多用于数据库系统,而非一般文件系统的索引文件。
选项 B 正确,它描述了不同文件组织的检索起点。对于非索引文件(如连续或链接分配),检索时常从文件控制块(FCB)中读取第一个盘块号;而对于索引文件,由于文件数据块的地址存储在索引块中,因此需要先从 FCB 中读出索引块的起始地址,再访问索引块获取目标记录的物理地址。
选项 C 错误,因为三级索引文件存取一个记录通常需要四次磁盘访问:读取一级索引块、二级索引块、三级索引块各一次,最后读取数据块一次。因此,访问次数是四次而非三次。
选项 D 错误,索引文件在随机存取时速度较快,但对于顺序存取,连续分配的文件组织方式可能更高效,因为可以直接顺序读取物理块,而索引文件需要额外访问索引结构,可能引入开销。因此,并非在所有情况下索引文件都是最快的。
31
物理文件的组织方式是由( )确定的。
【解析】 物理文件的组织方式指的是文件在存储设备上的物理结构,例如顺序存储、链式存储或索引存储等。这种组织方式不仅依赖于存储介质的物理特性(如磁盘的扇区大小、访问方式),还取决于操作系统如何管理这些介质。操作系统通过文件系统(如 FAT、NTFS、ext4)将逻辑文件映射到物理存储空间,从而决定文件的布局和访问效率,因此存储介质和操作系统共同确定了物理文件的组织方式。
其他选项分析:A 项应用程序通常只处理文件的逻辑内容,不直接控制物理存储;B 项存储介质单独无法决定组织方式,因为它需要操作系统的管理来实现文件结构;C 项外存容量仅影响存储空间大小,而不影响具体的组织结构。因此,D 项是最全面的正确答案。
32
下列关于中断 I/O 方式的描述中,正确的是( )
【解析】
- A ❌ 描述的是 程序直接控制(轮询)方式 的特点,中断 I/O 方式中 CPU 在设备准备数据时可执行其他任务,无需忙等。
- B ✅ 中断 I/O 方式下,每完成一个 字(或字节) 的传输,设备便向 CPU 发出中断请求,CPU 需介入进行数据存取与状态处理,因此传输一个数据块需多次中断及 CPU 干预。
- C ❌ 响应中断后,CPU 首先保存的是 当前程序的现场(如 PC、寄存器等),而非整个 PCB;PCB 的保存通常在进程切换时发生,并非中断响应的立即操作。
- D ❌ 中断 I/O 方式正是为了实现 CPU 与 I/O 设备的并行工作,设备准备数据时 CPU 可执行其他任务,通过中断机制进行协调。
33
在 OSI 参考模型中,下列哪一层的主要功能是提供端到端的可靠数据传输、流量控制和差错恢复?
【解析】
- 传输层(Transport Layer)负责端到端的可靠数据传输,提供流量控制、差错恢复和连接管理等功能。典型的协议如 TCP。
- 数据链路层 负责相邻节点间的可靠传输(帧同步、差错控制)。
- 网络层 负责路径选择、路由和寻址(如 IP 协议)。
- 会话层 负责建立、管理和终止会话。
34
若数据链路的发送窗口尺寸 WT=4,在发送 3 号帧,并接到 2 号帧的确认帧后,发送方还可以连续发送的帧数是( )。
【解析】 发送窗口尺寸 WT=4 表示发送方最多可以发送 4 个未被确认的帧。假设帧编号从 0 开始,且确认是累积的(即确认帧号 n 表示所有帧号小于 n 的帧均已被确认)。
在发送 3 号帧之前,发送方可能已经发送了帧 0、1、2,此时有 3 个未确认帧。发送 3 号帧后,未确认帧变为 4 个(帧 0、1、2、3),发送窗口已满,无法继续发送新帧。
接着,发送方接到 2 号帧的确认帧。由于确认是累积的,这意味着帧 0、1、2 均已被确认。因此,未确认帧只剩下帧 3,发送窗口基序号移动到 3,窗口允许发送帧 3、4、5、6。由于帧 3 已经发送,当前未确认帧数为 1,而窗口大小为 4,所以发送方还可以连续发送 3 帧(即帧 4、5、6)。
因此,发送方还可以连续发送的帧数是 3 帧。
35
CSMA 协议可以利用多种监听算法来减小发送冲突的概率,下面关于各种监听算法的描述中,错误的是( )。
Ⅰ. 非坚持型监听算法有利于减少网络空闲时间
Ⅱ. 1-坚持型监听算法有利于减少冲突的概率
Ⅲ. P 坚持型监听算法无法减少网络的空闲时间
Ⅳ. 1-坚持型监听算法能够及时抢占信道
【解析】 首先,分析各监听算法的特性:非坚持型监听算法在信道忙时等待随机时间再监听,这减少了冲突,但可能导致信道空闲时无站点立即发送,从而增加网络空闲时间,因此陈述Ⅰ“有利于减少网络空闲时间”是错误的。
其次,1-坚持型监听算法在信道空闲时立即发送,虽然减少了空闲时间,但多个站点可能同时发送,导致冲突概率增加,因此陈述Ⅱ“有利于减少冲突的概率”是错误的。
再者,P 坚持型监听算法通过概率 发送来平衡冲突和空闲时间,相比非坚持型能减少空闲时间,因此陈述Ⅲ“无法减少网络的空闲时间”是错误的。
最后,1-坚持型算法因持续监听并在信道空闲时立即发送,能及时抢占信道,陈述Ⅳ是正确的。
综上,错误的陈述是Ⅰ、Ⅱ和Ⅲ,对应选项 A。
36
在 CSMA/CD 协议中,下列指标与冲突时间没有关系的是( )。
【解析】 在 CSMA/CD 协议中,冲突时间(即冲突窗口或往返传播延迟)是一个关键参数,它决定了信号从发送端到最远站点再返回所需的最长时间。这个时间直接影响到冲突检测和帧设计。
选项 A“检测一次冲突所需要的最长时间”本质上就是冲突时间本身,因此与冲突时间直接相关。选项 B“最小帧长度”是为了确保在帧发送完毕前能够检测到冲突,其计算公式为最小帧长度 = 2 × 传播延迟 × 数据传输速率,这与冲突时间紧密相连。选项 D“最大帧碎片长度”指的是冲突发生后可能产生的碎片的最大长度,由于碎片只能在冲突窗口内形成,其最大长度受限于冲突时间内传输的比特数,因此也与冲突时间有关。
相比之下,选项 C“最大帧长度”通常由协议规范、网络性能或缓冲区大小等因素决定,例如传统以太网中最大帧长度为 1518 字节,目的是限制帧的大小以避免信道过长时间被占用,但这一指标与冲突时间没有直接关系,冲突时间并不影响最大帧长度的设定。因此,与冲突时间没有关系的是最大帧长度。
37
某端口的 IP 地址为 172.16.7.131.26,则该 IP 地址所在网络的广播地址( )。
【解析】
题目中给出的“172.16.7.131.26”可能为笔误,实际应表示 IP 地址 172.16.7.131,子网掩码为 26 位(即 172.16.7.131/26)。子网掩码 26 位对应 255.255.255.192,其二进制形式为 11111111.11111111.11111111.11000000,表示前 26 位为网络部分,后 6 位为主机部分。
IP 地址 172.16.7.131 的第四个字节 131 转换为二进制是 10000011。将其与子网掩码的第四个字节 192(二进制 11000000)进行 AND 运算,得到网络地址的第四个字节为 10000000(十进制 128),因此网络地址为 172.16.7.128。
广播地址是网络地址中主机部分全为 1 的地址。由于主机部分有 6 位,将网络地址 172.16.7.128 的第四个字节后 6 位全置 1,得到二进制 10111111,转换为十进制为 191。因此广播地址为 172.16.7.191。
其他选项中,B(172.16.7.129)是该子网内的一个主机地址;C(172.16.7.255)是未划分子网时的 C 类默认广播地址,但此处已子网划分;D(172.16.7.252)可能是其他子网的广播地址,均不正确。
38
在因特网中,IP 数据报的传输需要经由源主机和中途路由器到达目的主机,下面说法正确的是( )。
【解析】 在因特网中,IP 数据报的传输基于无连接的数据报交换机制。源主机发送数据报时,仅根据本地路由表确定下一跳(如默认网关),而不知道到达目的主机的完整路径。中途路由器在转发时,也仅根据自身路由表查询目的 IP 地址对应的下一跳,同样不了解完整路径。整个传输过程依赖逐跳路由,每个节点独立决策,因此源主机和中途路由器都不知道完整路径,这体现了 IP 协议的分布式和自适应路由特性。选项 A、B、C 的描述均不符合这一原理。
39
TCP 的通信双方,有一方发送了带有 FIN 标志的数据段后表示( )。
【解析】
在 TCP 协议中,FIN(Finish)标志用于终止连接。当通信一方发送带有 FIN 标志的数据段时,表示该方已经完成数据发送,并希望关闭从本方到对方的单向连接。此时,连接进入“半关闭”状态:发送 FIN 的一方不再发送数据,但仍可以接收对方发送的数据,直到对方也发送 FIN 来关闭另一个方向的连接。
选项 A 错误,因为发送 FIN 并不会立即断开通信双方的 TCP 连接,对方可能仍需发送剩余数据;选项 C 错误,因为发送 FIN 后,对方在确认前仍可发送数据;选项 D 错误,因为 FIN 用于连接终止,而非重新建立连接。因此,只有选项 B 准确描述了发送 FIN 后的状态。
40
UDP 协议和 TCP 协议报文首部的非共同字段有( )。
【解析】 UDP 和 TCP 协议报文首部中,源端口和目的端口是两者都具备的字段,用于标识通信的端点。校验和字段在 UDP 和 TCP 中也都存在,尽管 UDP 的校验和是可选的,但通常被视为首部的一部分。序列号是 TCP 特有的字段,用于保证数据的有序传输和可靠性;UDP 作为无连接协议,没有序列号字段,因此序列号是两者的非共同字段。
解答题
第 41~47 题,共 70 分。
41
(9 分)对于一个堆栈,若其入栈序列为 ,不同的出入栈操作将产生不同的出栈序列。其出栈序列的个数正好等于结点个数为 的二叉树的个数,且与不同形态的二叉树一一对应。请简要论述一种从堆栈输入(固定为 )输出序列对应一种二叉树形态的方法,并以入栈序列 (即 )为例加以说明。
42
(13 分)已知一棵二叉树采用二叉链表存储,结点结构为:
struct Node {
struct Node *lchild;
int data;
struct Node *rchild;
};
root 指向根结点。请编写算法判断该二叉树是否是平衡二叉树,即二叉树中任意结点的左右子树的深度相差不超过 1。例如下图所示的二叉树就是一棵平衡二叉树。

要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
43
(10 分)设某计算机有变址寻址、间接寻址和相对寻址方式,一个指令长等于一个存储字。设当前指令的地址码部分为 001AH,正在执行的指令所在地址为 1F05H,变址寄存器中的内容为 23A0H。已知存储器的部分地址及相应内容如下表所示:
(1)当执行取数指令时,如为变址寻址方式,取出的数为多少?
(2)如为间接寻址,取出的数为多少?
(3)设计算机每取一个存储字 PC 自动加 1,转移指令采用相对寻址,当执行转移指令时,转移地址为多少?若希望转移到 23A0H,则指令的地址码部分应设为多少?
44
(11 分)设有一个 CPU 的指令执行部件如下图所示,由 Cache 每隔 100ns 提供 1 条指令。(注:B1、B2 和 B3 是三个相同的并行部件)

(1)画出该指令流水线功能段的时空图。
(2)试计算流水线执行这 4 条指令的实际吞吐率和效率。
45
(7 分)兄弟俩共同使用一个账号,每次限存或取 10 元,存钱与取钱的进程分别如下所示:
int amount = 0;
SAVE() {
int m1;
m1 = amount;
m2 = m1 + 10;
amount = m1;
}
TAKE() {
int m2;
m2 = amount;
m2 = m2 - 10;
amount = m2;
}
由于兄弟俩可能同时存钱和取钱,因此这两个进程是并发的。若哥哥先存了两次钱,但在第三次存钱时,弟弟在取钱。请问:
(1)最后账号 amount 上面可能出现的值?
(2)如何用 P、V 操作实现两并发进程的互斥执行?
46
(7 分)设一个没有设置快表的虚拟页式存储系统,页面大小为 100 字节。一个仅有 460 个字节的程序有下述内存访问序列(下标从 0 开始):
10、11、104、170、73、309、185、245、246、434、458、364。
为该程序分配有 2 个可用页帧(Page frame)。试问:
(1)试叙述缺页中断与一般中断的主要区别?
(2)若分别采用 FIFO 和 LRU 算法,试计算访问过程中发生多少次缺页中断?
(3)若一次访存的时间是 10ms,平均缺页中断处理时间为 25ms,为使该虚拟存储系统的平均有效访问时间不大于 22ms,则可接受的最大缺页中断率是多少?
47
(9 分)设有 4 台主机 A、B、C 和 D 都处在同一物理网络中,它们的 IP 地址分别为:
- A: 192.155.28.112
- B: 192.155.28.120
- C: 192.155.28.135
- D: 192.155.28.202
子网掩码都是 255.255.255.224。请回答:
(1)该网络的 4 台主机中哪些可以直接通信?哪些需要通过设置路由器才能通信?请画出网络连接示意图,并注明各个主机的子网地址和主机地址。
(2)如要加入第 5 台主机 E,使它能与主机 D 直接通信,其 IP 地址的范围是多少?
(3)若不改变主机 A 的物理位置,而将其 IP 改为 192.155.28.168,则它的直接广播地址和本地广播地址各是多少?若使用本地广播地址发送信息,请问哪些主机能够收到?
(4)若要使该网络中的 4 台主机都能够直接通信,可采取什么办法?
8 - 模拟卷 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 要发送的帧足够长)?















