2014 年真题
下列程序段的时间复杂度是()。
count = 0;
for (k = 1; k <= n; k *= 2)
for (j = 1; j <= n; j++)
count++;
A.O(log₂n)
B.O(n)
C.O(nlog₂n)
D.O(n²)
[tag_link]
正确答案:C
内层循环条件 j ≤ n 与外层循环的变量无关,每次循环 j 自增 1, 每次内层循环都执行 n 次。外层循环条件为 k ≤ n , 增量定义为 k *= 2, 可知循环次数为 2 k ≤ n , 即 k ≤ l o g 2 ( n ) 。所以内层循环的时间复杂度是 O ( n ) , 外层循环的时间复杂度是 O ( l o g 2 n ) 。对于嵌套循环,根据乘法规则可知,该段程序的时间复杂度 T ( n ) = T 1 ( n ) T 2 ( n ) = O ( n ) O ( l o g 2 ( n )) = O ( n l o g 2 n ) , 选 C。
假设栈初始为空,将中缀表达式 a/b+(c*d-e*f/ g转换为等价的后缀表达式的过程中,当扫描到f 时, 栈中的元素依次是()。
A.+(*-
B.+(一*
C. /+(*一*
D. /+ 一*
[tag_link]
正确答案:B
中序转后序的过程详见 此节 。
循环队列放在一维数组 A[0..M-1] 中,end1 指向队头元素,end2 指向队尾元素的后一个位置。假设队 列两端均可进行入队和出队操作,队列中最多能容纳 M-1 个元素。初始时为空。下列判断队空和队满的 条件中,正确的是()。
A. 队空:end1=end2; 队满:end1=(end2+1)mod M
B. 队空:end1=end2; 队满:end2=(end1+1)mod(M-1)
C. 队空:end1=(end1+1)mod M; 队满:end1=(end2+1)mod M
D. 队空:end1=(end2+1)mod M; 队满:end2=(end1+1)mod(M-1)
[tag_link]
正确答案:A
本题考查 循环队列 : end1 指向队头元素,那么可知出队的操作是先从 A[end1] 读数,然后 end1 再加 1 。end2 指向队尾元素的后一个位置,那么可知入队操作是先存数到 A[end2] ,然后 end2 再加 1 。若把 A[0] 储存第一个元素,当队列初始时,入队操作是先把数据放到 A[0] ,然后 end2 自增,即可知 end2 初值为 0;end1 指向的是队头元素,队头元素的在数组 A 中的下标为 0 ,所以得知 end1 初值也为 0 ,可知队空条件为 end1-end2 。然后考虑队列满时,因为队列最多能容纳 M-1 个元素,假设队列存储在下标为 0 到下标为 M-2 的 M-1 个区域,队头为 A[0] ,队尾为 A[M-2] ,此时队列满,考虑在这种情况下 end1 和 end2 的状态, end1 指向队头元素,可知 end1-0 , end2 指向队尾元素的后一个位置,可知 end2=M-2+1=M-1 ,所以可知队满的条件为 end1-(end2+1)modM ,选 A 。
若对如下的二叉树进行中序线索化,则结点 x 的左、右线索指向的结点分别是()。
A.e、c
B.e、a
C.d、c
D.b、a
[tag_link]
正确答案:D
线索二叉树 的线索实际上指向的是相应遍历序列特定结点的前驱结点和后继结点,所以先写出二叉树的中序遍历序列 debxac, 中序遍历中在 x 左边和右边的字符,就是它在中序线索化的左、右线索,即 b、a, 选 D。
将森林F 转换为对应的二叉树T,F 中叶子的个数等于()。
A.T 中叶结点的个数
B.T 中度为 1 的结点个数
C.T 中左孩子指针为空的结点个数
D.T 中右孩子指针为空的结点个数
[tag_link]
正确答案:C
将 森林转化为二叉树 即相当于用孩子兄弟表示法表示森林。在变化过程中,原森林某结点的第一个孩子结点作为它的左子树,它的兄弟作为它的右子树。那么森林中的叶结点由千没有孩子结点,那么转化为二叉树时,该结点就没有左结点,所以 F 中叶结点的个数就等于 T 中左孩子指针为空的结点个数,选 C。此题还可以通过一 些特例来排除 A、B、D 选项。
5个字符有如下4种编码方案,不是前缀编码的是()。
A.01,0000,0001,001,1
B.011,000,001,010,1
C.000,001,010,011, 100
D.0,100,110,1110,1100
[tag_link]
正确答案:D
前缀编码 的定义是在一个字符集中,任何一个字符的编码都不是另一个字符 编码的前缀。选项 D 中编码 110 是编码 1100 的前缀,违反了前缀编码的规则,所以 D 不是前缀编码。
对如下所示的有向图进行拓扑排序,得到的拓扑序列可能是()。
A.3,1,2,4,5,6
B.3,1,2,4,6,5
C.3,1,4,2,5,6
D.3,1,4,2,6,5
[tag_link]
正确答案:D
按照 拓扑排序 的算法,每次都选择入度为 0 的结点从图中删去,此图中一开始只有结点 3 的入度为 0;删掉结点 3 后,只有结点 1 的入度为 0; 删掉结点 1 后,只有结点 4 的入度为 0;删掉结点 4 后,结点 2 和结点 6 的入度都为 0,此时选择删去不同的结点,会得出不同的拓扑序列,分别处理完毕后可知可能的拓扑序列为 3,1 4,2,6,5 和 3,1,4,6,2,5, 选 D。
用哈希(散列)方法处理冲突(碰撞)时可能出现堆积(聚集)现象,下列选项中,会受堆积现象直接 影 响 的 是 ( ) 。
A. 存储效率
B. 散列函数
C. 装填(装载)因子
D. 平均查找长度
[tag_link]
正确答案:D
产生堆积现象,即产生了冲突,它对存储效率、散列函数和装填因子均 不会有影响,而 平均查找长度 会因为堆积现象而增大,选 D。
在一棵具有15个关键字的4阶 B 树中,含关键字的结点个数最多是()。
A.5
B.6
C.10
D.15
[tag_link]
正确答案:D
关键字数量不变,要求结点数量最多,那么即每个结点中含关键字的数最最少。根据 4 阶 B 树 的定义,根结点最少含 1 个关键字,非根结点中最少含 ⌈4/2⌉-1=1 个关键字,所以每个结点中,关键字数量最少都为 1 个,即每个结点都有 2 个分支,类似于排序二叉树,而 15 个结点正好可以构造一个 4 层的 4 阶 B 树,使得叶结点全在第四层,符合 B 树定义,因此选 D。
用希尔排序方法对一个数据序列进行排序时,若第1趟排序结果为9,1,4,13,7,8,20,23,15,则该趟排 序采用的增量(间隔)可能是()。
A.2
B.3
C.4
D.5
[tag_link]
正确答案:B
首先,第二个元素为 1,是整个序列中的最小元素,所以可知该 希尔排序 为从小到大排序然后考虑增量问题,若增量为 2,第 1+2 个元素 4 明显比第 1 个元素 9 要大,A 排除;若增量为 3,第 i、i+3、i+6 个元素都为有序序列 (i=1,2,3),符合希尔排序的定义;若增量为 4,第 1 个元素 9 比第 1+4 个元素 7 要大,C 排除;若增量为 5,第 1 个元素 9 比第 1+5 个元素 8 要大,D 排除,选 B。
下列选项中,不可能是快速排序第2趟排序结果的是()。
A.2,3,5,4,6,7,9
B.2,7,5,6,4,3,9
C.3,2,5,4,7,6,9
D.4,2,3,5,7,6,9
[tag_link]
正确答案:C
快速排序 的阶段性排序结果的特点是,第 i 趟完成时,会有 i 个以上的数出现在它最终将要出现的位置,即它左边的数都比它小,它右边的数都比它大。
题目问第二趟 排序的结果,即要找不存在两个这样的数的选项。
A 选项中 2、3、6、7、9 均符合,所以 A 排除;
B 选项中,2、9 均符合,所以 B 排除;
D 选项中 5、9 均符合,所以 D 选项排除;
最后看 C 选项,只有 9 一个数符合,所以 C 不可能是快速排序第二趟的结果。
组成原理 12 程序 P 在机器 M 上的执行时间是 20 秒,编译优化后,P 执行的指令数减少到原来的 70%,而 CPI 增加到原来的 1.2 倍,则 P 在 M 上的执行时间是( )。
计算机性能指标 A. 8.4 秒 B. 11.7 秒 C. 14 秒 D. 16.8 秒 查看答案与解析 收藏 正确答案: 不妨设原来指令条数为 X,那么原 CPI 就为 20/x,经过编译优化后,指令条数减少到原来的 70%,即指令条数为 0.7x,而 CPI 增加到原来的 1.2 倍,即 24/x,那么 现在 P 在 M 上的执行时间就为 指令条数×CPI = 0.7x × 24/x = 24x0.7 = 16.8s,选 D。
程序P 在机器M 上的执行时间是20秒,编译优化后,P 执行的指令数减少到原来的70%,而CPI 增 加到原来的1.2倍,则P 在M 上的执行时间是()。
A.8.4 秒
B.11.7 秒
C.14 秒
D.16.8 秒
[tag_link]
正确答案:D
不妨设原来指令条数为 X,那么原 CPI 就为 20/x,经过编译优化后,指令条数减少到原来的 70%,即指令条数为 0.7x,而 CPI 增加到原来的 1.2 倍,即 24/x,那么 现在 P 在 M 上的执行时间就为 指令条数×CPI = 0.7x × 24/x = 24x0.7 = 16.8s,选 D。
若 x=103,y=-25, 则下列表达式采用8位定点补码运算实现时,会发生溢出的是()。
A.x+y
B.-x+y
C.x-y
D.-x-y
[tag_link]
正确答案:C
8 位 定点补码 表示的数据范围为 -128~127,若运算结果超出这个范围则会溢出,A 选项 x+y=103-25=78,符合范围,A 排除;B 选项-x+y=-103-25=-128,符合范围,B 排除;D 选项-x-y=-103+25=-78,符合范围,D 排除;C 选项 x-y=103+25=128,超过了 127,选 C.
float 型数据常用IEEE754 单精度浮点格式表示。假设两个float 型变量x 和y 分别存放在32位寄存器 f1和 f2 中,若(f1)=CC900000H,(f2)=B0C00000H, 则x 和y 之间的关系为()。
A.x<y 且符号相同
B.x<y 且符号不同
C.x>y 且符号相同
D.x>y 且符号不同
[tag_link]
正确答案:A
(f1) 和 (f2) 对应的二进制分别是 ( 110011001001 ⋯ ) 2 和 ( 101100001100 ⋯ ) 2 , 根据 IEEE754 浮点数标准,可知 (f1) 的数符为 1,阶码为 10011001,尾数为 1.001,而 (f2) 的数符为 1,阶码为 01100001,尾数为 1.1 ,则可知两数均为负数,符号相同,B、D 排除。(f1) 的绝对值为 1.001 × 2 26 , (f2) 的绝对值为 1.1 × 2 − 30 ,则 (f1) 的绝对值比 (f2) 的绝对值大,而符号为负,真值大小相反,即 (f1) 的真值比 (f2) 的真值小,即 x<y,选 A。此题还有更为简便的算法, (f1) 与 (f2) 的前 4 位为 1100 与 1011,可以看出两数均为负数,而阶码用移码表示,两数的阶码头三位分别为 100 和 011, 可知 (f1) 的阶码大于 (f2) 的阶码,又因为是 IEEE754 规格化的数,尾数部分均为 l.xxx, 则阶码大的数,真值的绝对值必然大,可知 (f1) 真值的绝对值大于 (f2) 真值的绝对值,因为都为负数,则 (fl)<(f2), 即 x<y。
某容量为256MB的存储器由若干4M×8 位的DRAM芯片构成,该 DRAM芯片的地址引脚和数据引 脚总数是()。
A.19
B.22
C.30
D.36
[tag_link]
正确答案:A
4Mx8 位的芯片数据线应为 8 根,地址线应为 l o g 2 4 M = 22 根,而 DRAM 采用 地址复用 技术,地址线是原来的 1/2,且地址信号分行、列两次传送。地址线数为 22/2 = 11 根,所以地址引脚与数据引脚的总数为 11+ 8=19 根,选 A。
采用指令Cache 与数据Cache 分离的主要目的是()。
A. 降低 Cache 的缺失损失
B. 提 高Cache 的命中率
C. 降低CPU 平均访存时间
D. 减少指令流水线资源冲突
[tag_link]
正确答案:D
把指令 Cache 与数据 Cache 分离后,取指和取数分别到不同的 Cache 中寻找,那么指令流水线中取指部分和取数部分就可以很好地避免冲突,即减少了指令流水线的冲突,选 D。
某计算机有16个通用寄存器,采用32位定长指令字,操作码字段(含寻址方式位)为8位, Store 指 令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存 器,且偏移量用补码表示,则Store 指令中偏移量的取值范围是()。
A.-32768~+32767
B.-32767+~32768
C.-65536~+65535
D.-65535~+65536
[tag_link]
正确答案:A
采用 32 位定长指令字,其中操作码为 8 位,两个地址码一共占用 32-8=24 位,而 Store 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址,机器中共有 16 个通用寄存器,则寻址一个寄存器需要 logz16 =4 位,源操作数中的寄存器直接寻址用掉 4 位,而目的操作数采用基址寻址也要指定一个寄存器,同样用掉 4 位,则留给偏移址的位数为 24-4-4=16 位,而偏移址用补码表示,16 位补码的表示范围为 -32768~+32767,选 A。
某计算机采用微程序控制器,共有32条指令,公共的取指令微程序包含2条微指令,各指令对应的微 程序平均由4条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段 的位数至少是()。
A.5
B.6
C.8
D.9
[tag_link]
正确答案:C
计算机共有 32 条指令,各个指令对应的 微程序 平均为 4 条,则指令对应的微指令为 32x4=128 条,而公共微指令还有 2 条,整个系统中微指令的条数一共为 128+ 2 = 130 条,所以需要 l o g 2 130 = 8 位才能寻址到 130 条微指令,答案选 C。
某同步总线采用数据线和地址线复用方式,其中地址/数据线有32根,总线时钟频率为66MHz, 每个 时钟周期传送两次数据(上升沿和下降沿各传送一次数据),该总线的最大数据传输率(总线带宽)是()。
A.132MB/s
B.264MB/s
C.528MB/s
D.1056MB/s
[tag_link]
正确答案:C
数据线有 32 根,也就是一次可以传送 32bit/8 = 4B 的数据,66MHz 意味着有 66M 个时钟周期,而每个时钟周期传送两次数据,可知总线每秒传送的最大数据量为 66Mx2x4B=528MB,所以总线的最大数据传输率为 528MB/s,选 C。
一次总线事务中,主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或写入 多个数据。这种总线事务方式称为()。
A. 并行传输
B. 串行传输
C. 突发传输
D. 同步传输
[tag_link]
正确答案:C
突发传输 是在一个总线周期中,可以传输多个存储地址连续的数据,即一次传输一个地址和一批地址连续的数据,并行传输是在传输中有多个数据位同时在设备之间进行的传输,串行传输是指数据的二进制代码在一条物理信道上以位为单位按时间顺序逐位传输的方式,同步传输是指传输过程由统一的时钟控制,选 C。
下列有关I/O 接口的叙述中,错误的是()。
A. 状态端口和控制端口可以合用同一个寄存器
B.I/O 接口中CPU 可访问的寄存器称为I/O 端口
C. 采用独立编址方式时,I/O 端口地址和主存地址可能相同
D. 采用统一编址方式时,CPU 不能用访存指令访问I/O 端口
[tag_link]
正确答案:D
采用 统一编址 时,CPU 访存和访问 I/O 端口用的是一样的指令,所以访存指令可以访问 I/O 端口,D 选项错误,其他三个选项均为正确陈述,选 D。
若某设备中断请求的响应和处理时间为100ns, 每 400ns 发出一次中断请求,中断响应所允许的最长延 迟时间为50ns, 则在该设备持续工作过程中,CPU用于该设备的I/O 时间占整个CPU 时间的百分比至少 是 ( ) 。
A.12.5%
B.25%
C.37.5%
D.50%
[tag_link]
正确答案:B
每 400ns 发出一次中断请求,而响应和处理时间为 100ns,其中允许的延迟为干扰信息,因为在 50ns 内,无论怎么延迟,每 400ns 还是要花费 100ns 处理中断的,所以该设备的 I/O 时间占整个 CPU 时间的百分比为 100ns/400ns = 25%,选 B。
操作系统 23 下列调度算法中,不可能导致饥饿现象的是( )。
处理机调度算法 A. 时间片轮转 B. 静态优先数调度 C. 非抢占式短作业优先 D. 抢占式短作业优先 查看答案与解析 收藏 正确答案: 采用 静态优先级调度 时,当系统总是出现优先级高的任务时,优先级低的任务会总是得不到处理机而产生饥饿现象;
短任务优先调度不管是抢占式或是非抢占的,当系统总是出现新来的短任务时,长任务会总是得不到处理机,产生饥饿现象,因此 B、C、D 都错误,选 A。
下列调度算法中,不可能导致饥饿现象的是()。
A. 时间片轮转
B. 静态优先数调度
C. 非抢占式短作业优先
D. 抢占式短作业优先
[tag_link]
正确答案:A
采用 静态优先级调度 时,当系统总是出现优先级高的任务时,优先级低的任务会总是得不到处理机而产生饥饿现象;短任务优先调度不管是抢占式或是非抢占的,当系统总是出现新来的短任务时,长任务会总是得不到处理机,产生饥饿现象,因此 B、C、D 都错误,选 A。
某系统有 n 台互斥使用的同类设备,三个并发进程分别需要3、4、5台设备,可确保系统不发生死锁 的设备数 n 最小为()。
A.9
B.10
C.11
D.12
[tag_link]
正确答案:B
本题考察 死锁产生的必要条件 ,三个并发进程分别需要 3、4、5 台设备,当系统只有 (3-1) + (4-1) + (5-1) =9 台设备时,第一个进程分配 2 台,第二个进程分配 3 台,第三个进程分配 4 台。这种情况下,三个进程均无法继续执行下去,发生死锁。当系统中再增加 1 台设备,也就是总共 10 台设备时,这最后 1 台设备分配给任意一个进程都可以顺利执行完成,因此保证系统不发生死锁的最小设备数为 10。
下列指令中,不能在用户态执行的是()。
A.trap 指令
B. 跳转指令
C. 压栈指令
D. 关中断指令
[tag_link]
正确答案:D
trap 指令 、跳转指令和压栈指令均可以在用户态执行,其中 trap 指令负责由用户态转换成为内核态,而关中断指令为特权指令,必须在核心态才能执行,选 D。
一个进程的读磁盘操作完成后,操作系统针对该进程必做的是()。
A. 修改进程状态为就绪态
B. 降低进程优先级
C. 给进程分配用户内存空间
D. 增加进程时间片大小
[tag_link]
正确答案:A
本题考察 状态种类 ,进程申请读磁盘操作的时候,因为要等待 I/O 操作完成,会把自身阻塞,此时进程就变为了阻塞状态,当 I/O 操作完成后,进程得到了想要的资源,就会从阻塞态转换到就绪态(这是操作系统的行为)。而降低进程优先级、分配用户内存空间和增加进程的时间片大小都不一定会发生,选 A。
现有一个容量为10GB 的磁盘分区,磁盘空间以簇 (Cluster) 为单位进行分配,簇的大小为4KB, 若 采用位图法管理该分区的空闲空间,即用一位 (bit) 标识一个簇是否被分配,则存放该位图所需簇的个数 为 ( ) 。
A.80
B.320
C.80K
D.320K
[tag_link]
正确答案:A
簇 的总数为 10GB/4KB = 2.5M, 用一位标识一簇是否被分配,则整个磁盘共需要 2.5M 位,即需要 2.5M/8 =320KB, 因此共需要 320KB/4KB = 80 个簇,选 A。
下列措施中,能加快虚实地址转换的是()。
I. 增大快表(TLB) 容量
II. 让页表常驻内存
ⅢI. 增大交换区(swap)
A. 仅 I
B. 仅 Ⅱ
C. 仅 I 、Ⅱ
D. 仅 IⅡ、ⅢII
[tag_link]
正确答案:C
虚实地址转换 是指逻辑地址和物理地址的转换。增大快表容量能把更多的表项装入快表中,会加快虚实地址转换的平均速率;让页表常驻内存可以省去一 些不在内存中的页表从磁盘上调入的过程,也能加快虚实地址转换;增大交换区对虚实地址转换速度无影响,因此 I、II 正确,选 C。
在一个文件被用户进程首次打开的过程中,操作系统需要做的是()。
A. 将文件内容读到内存中
B. 将文件控制块读到内存中
C. 修改文件控制块中的读写权限
D. 将文件的数据缓冲区首指针返回给用户进程
[tag_link]
正确答案:B
一个文件被用户进程首次打开即被执行了 open 操作,会把文件的 FCB 调入内存,而不会把文件内容读到内存中,只有进程希望获取文件内容的时候才会读入文件内容;C、D 明显错误,选 B。
在页式虚拟存储管理系统中,采用某些页面置换算法,会出现Belady 异常现象,即进程的缺页次数会 随着分配给该进程的页框个数的增加而增加。下列算法中,可能出现Belady 异常现象的是()。
I.LRU 算法 II.FIFO 算法
III. OPT算法
A. 仅 Ⅱ
B. 仅 I 、Ⅱ
C. 仅 I 、Ⅲ
D. 仅 I 、Ⅲ
[tag_link]
正确答案:A
只有 FIFO 算法才会导致 Belady 异常 ,选 A。
下列关于管道( Pipe) 通信的叙述中,正确的是()。
A. 一个管道可实现双向数据传输
B. 管道的容量仅受磁盘容量大小限制
C. 进程对管道进行读操作和写操作都可能被阻塞
D. 一个管道只能有一个读进程或一个写进程对其操作
[tag_link]
正确答案:D
管道 实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程在写管道会被阻塞,而当管道空时,进程在读管道会被阻塞,因此选 C。
下列选项中,属于多级页表优点的是()。
A. 加快地址变换速度
B. 减少缺页中断次数
C. 减少页表项所占字节数
D. 减少页表所占的连续内存空间
[tag_link]
正确答案:D
多级页表 不仅不会加快地址的变换速度,而且会因为增加更多的查表过程,使地址转换速度减慢;
也不会减少缺页中断的次数,反而如果访问过程中多级的页表都不在内存中,会大大增加缺页的次数,也并不会减少页表项所占的字节数,而多级页表能够减少页表所占的连续内存空间,即当页表太大时,将页表再分级,可以把每张页表控制在一页之内,减少页表所占的连续内存空间,因此选 D。
计算机网络 33 在 OSI 参考模型中,直接为会话层提供服务的是( )。
OSI模型 A. 应用层 B. 表示层 C. 传输层 D. 网络层 查看答案与解析 收藏 正确答案: 参考 ISO/OSI 模型 ,直接为会话层提供服务的是会话层的下一层,即传输层,选 C。
在 OSI 参考模型中,直接为会话层提供服务的是()。
A.应用层
B.表示层
C.传输层
D.网络层
[tag_link]
正确答案:D
参考 ISO/OSI 模型 ,直接为会话层提供服务的是会话层的下一层,即传输层,选 C。
某以太网拓扑及交换机当前转发表如下图所示,主机00-c1-d5-00-23-a1 向主机00-c1-d5-00-23-c1 发
送1个数据帧,主机00 -e1-d5-00-23-c1 机对这两个帧的转发端口分别是()。
收到该帧后,向主机00-e1-d5-00-23-a1 发送1个确认帧,交换
A.{3} 和 {1}
B.{2,3} 和 {1}
C.{2,3} 和 {1,2}
D.{1,2,3} 和 {1}
[tag_link]
正确答案:B
主机 00-el-d5-00-23-a1 向 00-el-d5-00-23-c1 发送数据帧时, 交换机 转发表中没有 00-el-d5-00-23-c1 这项,所以向除 1 接口外的所有接口广播这帧,即 2、3 端口会转发这帧,同时因为转发表中并没有 00-e1-d5-00-23-a1 这项,所以转发表会把(目的地址 00-el-d5-00-23-a1,端口 1)这项加入转发表。而当 00-el-d5-00-23-c1 向 00-e1-d5-00-23-a1 发送确认帧时,由于转发表已经有 00-el-d5-00-23-a1 这项,所以交换机只向 1 端口转发,选 B。
下列因素中,不会影响信道数据传输速率的是()。
A. 信噪比
B. 频率宽带
C. 调制速度
D. 信号传播速度
[tag_link]
正确答案:D
由 香农定理 可知,信噪比和频率带宽都可以限制信道的极限传输速率,所以信噪比和频率带宽对信道的数据传输速率是有影响的,A、B 错误;信道的传输速率实际上就是信号的发送速率,而调制速度也会直接限制数据的传输速率,C 错误;信号的传播速度是信号在信道上传播的速度,与信道的发送速率无关,选 D。
主机甲与主机乙之间使用后退 N 帧协议(GBN) 传输数据,甲的发送窗口尺寸为1000,数据帧长为 1000字节,信道带宽为100 Mbps, 乙每收到一个数据帧立即利用一个短帧(忽略其传输延迟)进行确认, 若甲乙之间的单向传播延迟是50ms, 则甲可以达到的最大平均数据传输速率约为()。
A.10 Mbps
B.20Mbps
C.80 Mbps
D.100 Mbps
[tag_link]
正确答案:C
本题间接考察 信道利用率 。考虑制约甲的数据传输速率的因素,首先,信道带宽能直接制约数据的传输速率,传输速率一定是小于等于信道带宽的;其次,主机甲、乙之间采用后退 N 帧协议,那么因为甲、乙主机之间采用后退 N 帧协议传输数据,要考虑发送一个数据到接收到它的确认之前,最多能发送多少数据,甲的最大传输速率受这两个条件的约束,所以甲的最大传输速率是这两个值中小的那一个。甲的发送窗口的尺寸为 1000,即收到第一个数据的确认之前,最多能发送 1000 个数据帧,也就是发送 1000x1000B =1MB 的内容,而从发送第一个帧到接收到它的确认的时间是一个往返时延,也就是 50+50=100ms=0.1s,即在 100ms 中,最多能传输 1MB 的数据,因此,此时的最大传输速率为 1MB/0.1s=10MB/s=80Mbps。信道带宽为 100Mbps,所以答案为 min{80Mbps,100bps}=80Mbps,选 C.
站点 A、B、C 通过 CDMA 共享链路,A、B、C的码片序列(chipping sequence) 分别是(1,1,1,1)、 (1,-1,1,-1)和(1,1,-1,-1)。若 C 从链路上收到的序列是(2,0,2,0,0,-2,0,-2,0,2,0,2),则C 收到 A 发送的数据是()。
A.000
B.101
C.110
D.111
[tag_link]
正确答案:B
本题考察 CMDA ,把收到的序列分成每 4 个数字一组,即为 (2,0,2,0)、(0,-2,0,-2)、(0,2,0,2),因为题目求的是 A 发送的数据,因此把这三组数据与 A 站的码片序列 (1,1,1,1) 做内积运算,结果分别是 (2,0,2,0)·(1,1,1,1)/4=1、(0,-2,0,-2)·(1,1,1,1)/4=-1、(0,2,0,2)·(1,1,1,1)/4=1,所以 C 接收到的 A 发送的数据是 101,选 B。
主机甲和主机乙已建立了TCP 连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙 每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t 时刻发生超时时拥塞窗口为8KB, 则从t 时刻起,不再发生超时的情况下,经过10个RTT 后,甲的发送窗口是()。
A.10KB
B.12KB
C.14KB
D.15KB
[tag_link]
正确答案:A
当 t 时刻发生超时时,根据 拥塞避免 算法,把 ssthresh 设为 8 的一半,即为 4,且拥塞窗口设为 1KB。然后经历 10 个 RTT 后,拥塞窗口的大小依次为 2,4,5,6,7,8,9,10,11,12,而发送窗口取当时的拥塞窗口和接收窗口的最小值,而接收窗口始终为 10KB,所以此时的发送窗口为 10KB,选 A。
下列关于 UDP 协议的叙述中,正确的是()。
I. 提供无连接服务
II. 提供复用/分用服务
ⅢI. 通过差错校验,保障可靠数据传输
A.仅 I
B.仅 I、II
C.仅 II、III
D.I、II、III
[tag_link]
正确答案:B
UDP 提供的是无连接的服务,I 正确;同时 UDP 也提供复用/分用服务,II 正确;UDP 虽然有差错校验机制,但是 UDP 的差错校验只是检査数据在传输的过程中有没有出错,出错的数据直接丢弃,并没有重传等机制,不能保证可靠传输,使用 UDP 协议时,可靠传输必须由应用层实现,III 错误。答案选 B。
使用浏览器访问某大学Web 网站主页时,不可能使用到的协议是()。
A.PPP
B.ARP
C.UDP
D.SMTP
[tag_link]
正确答案:D
使用浏览器访问 Web 网站主页时,涉及从输入 URL 到页面加载的完整过程。PPP 协议用于接入网络(如拨号上网),ARP 协议用于获取 MAC 地址,UDP 协议可用于 DNS 查询等。SMTP 是邮件发送协议(Simple Mail Transfer Protocol),用于发送电子邮件,而非 Web 访问,因此不可能用到 SMTP。
(10分)二叉树的带权路径长度( WPL) 是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉 树T, 采用二叉链表存储,结点结构为:
| left | weight | right |
|---|
其中叶结点的weight 域保存该结点的非负权值。设root为指向T 的根结点的指针,请设计求T的 WPL 的算法,要求:
(1)给出算法的基本设计思想;
(2)使用C 或 C++语言,给出二叉树结点的数据类型定义;
(3)根据设计思想,采用C 或 C++语言描述算法,关键之处给出注释。
[tag_link]
算法的基本设计思想: ①基于先序递归遍历的算法思想是用一个 static 变量记录 wpl,把每个结点的深度作为递归函数的一个参数传递,算法步骤如下: 若该结点是叶子结点,则变量 wpl 加上该结点的深度与权值之积; 若该结点非叶子结点,则若左子树不为空,对左子树调用递归算法,若右子树不为空,对右子树调用递归算法,深度参数均为本结点的深度参数加 1; 最后返回计算出的 wpl 即可。 ② 若考生给出能够满足题目要求的其他算法且正确,可同样给分。 ②考生答案无论使用 C 或者 C++ 语言,只要答案正确同样给分。 ③ 的标准给分。 ④若考生给出的二叉树结点的数据类型定义和算法实现中,使用的是除整型之外的其他数值,可视同使用整型类型。 ⑤若考生给出的答案中算法主要设计思想或算法中部分正确,可酌情给分。
(15分)某网络中的路由器运行OSPF路由协议,题42表是路由器R1维护的主要链路状态信息(LSI), 题42图是根据题42表的接口名构造出来的网络拓扑。
请回答下列问题。
(1)本题中的网络可抽象为数据结构中的哪种结构?
(2)针对题42表中的内容,设计合理的链式存储结构,以保存题42表中的链路状态信息( LSI) 。 要求给 出链式存储结构的数据定义,并画出对应题42表的链式存储结构示意图(示意图中仅以ID 标识结点)。
(3)按照迪杰斯特拉( Dijkstra) 算法的策略,依次给出R1 到达题42图中子网192.1.x.x的最短路径及费 用。
题42表R1所维护的LSI
| R1的LSI | R2的LSI | R3的LSI | R4的LSI | 备注 | |
|---|---|---|---|---|---|
| Router ID | 10.1.1.1 | 10.1.1.2 | 10.1.1.5 | 10.1.1.6 | 标识路由器的IP地址 |
| Link1 | |||||
| ID | 10.1.1.2 | 10.1.1.1 | 10.1.1.6 | 10.1.1.5 | 所连路由器的Router ID |
| IP | 10.1.1.1 | 10.1.1.2 | 10.1.1.5 | 10.1.1.6 | Link1的本地IP地址 |
| Metric | 3 | 3 | 6 | 6 | Link1的费用 |
| Link2 | |||||
| ID | 10.1.1.5 | 10.1.1.6 | 10.1.1.1 | 10.1.1.2 | 所连路由器的Router ID |
| IP | 10.1.1.9 | 10.1.1.13 | 10.1.1.10 | 10.1.1.14 | Link2的本地IP地址 |
| Metric | 2 | 4 | 2 | 4 | Link2的费用 |
| Link3 | |||||
| Prefix | 192.1.1.0/24 | 192.1.6.0/24 | 192.1.5.0/24 | 192.1.7.0/24 | 直连网络Net1的网络前缀 |
| Metric | 1 | 1 | 1 | 1 | 到达直连网络Net1的费用 |
[tag_link]
很多考生乍看之下以为是网络的题目,其实该题本身并没有涉及太多的网络知识点,只是 应用了网络的模型,实际上考查的还是数据结构的内容。 1)图(1 分) 题中给出的是一个简单的网络拓扑图,可以抽象为无向图。 【评分说明】只要考生的答案中给出与图含义相似的描述,例如,“网状结构”“非线性结构”等,同样 给分。 2)链式存储结构的如下图所示。
struct Arc {
uint32_t id;
uint32_t ip;
int metric;
};
struct Net {
uint32_t prefix;
uint32_t mask;
int metric;
};
struct LNode {
LNode *next; // flag == 1:链路连接到路由器
// flag == 2:链路连接到子网
int flag;
union NetOrArc {
Net net;
Arc arc;
};
};
struct HNode {
uint32_t router_id;
LNode *next;
HNode *next_hnode;
};
【评分说明】① 若考生给出的答案是将链表中的表头结点保存在一个一维数组中(即采用邻接表形式),同样给分。② 若考生给出的答案中,弧结点没有使用 union 定义,而是采用两种不同的结构分别表示 Link 和 Net,同时在表头结点中定义了两个指针,分别指向由这两种类型的结点构成的两个链表,同样给分。③ 考生所给答案的弧结点中,可以在单独定义的域中保存各直连网络 IP 地址的前缀长度,也可以与网络地址保存在同一个域中。④ ③的标准给分。⑤ 若考生给出的答案中,图示部分与其数据类型定义部分一致,图示只要能够体现链式存储结构和网络连接关系(可以不给出结点内细节信息),即可给分。⑥ ①
请根据题42描述的网络,继续回答下列问题。
(1)假设路由表结构如下表所示,请给出题42图中R1的路由表,要求包括到达题42图中子网192.1.x.x 的路由,且路由表中的路由项尽可能少。
路由表结构:
| 目的网络 | 下一跳 | 接口 |
|---|---|---|
| 192.1.1.0/24 | 直接 | E1 |
| 192.1.5.0/24 | 10.1.1.2 | L0 |
| 192.1.6.0/24 | 10.1.1.5 | L1 |
| 192.1.7.0/24 | 10.1.1.5 | L1 |
(2)当主机192.1.1.130向主机192.1.7.211发送一个TTL=64的 IP 分组时,R1通过哪个接口转发该IP 分组?主机192.1.7.211收到的IP 分组TTL 是多少?
(3)若R1 增加一条Metric 为10的链路连接Internet,则题42表中R1的 LSI 需要增加哪些信息?
[tag_link]
(1) R1 的路由表(尽可能少的表项):
| 目的网络 | 下一跳 | 接口 |
|---|---|---|
| 192.1.1.0/24 | 直接 | E1 |
| 192.1.5.0/24 | 10.1.1.2 | L0 |
| 192.1.6.0/24 | 10.1.1.5 | L1 |
| 192.1.7.0/24 | 10.1.1.5 | L1 |
(2) 主机 192.1.1.130 向 192.1.7.211 发送 IP 分组。R1 收到后查找路由表,目的网络 192.1.7.0/24 匹配下一跳 10.1.1.5(L1 接口),因此 R1 通过 L1 接口转发。TTL 初始为 64,经过 R1 转发时减 1,因此收到时 TTL = 63。
(3) 需增加一条 LSA 链路状态通告,包含:
- 所连路由器的 Router ID
- 本地接口 IP 地址
- Metric = 10
- 连接的 Internet 网络前缀信息
【评分说明】① 路由表中路由项不完全正确,酌情给分。② TTL 值计算正确给 1 分。③ LSI 需要增加的信息至少包含链路 ID、IP、Metric 三个方面,缺一项扣 1 分。
(13分)某程序中有如下循环代码段P:“for (int i=0;i<N;i++)su m +=A[i];”。假设编译时变量sum 和i 分别分配在寄存器R1 和R2 中。常量N 在寄存器R6 中,数组A 的首地址在寄存器R3 中。程序段P 起始地址为08048100H, 对应的汇编代码和机器代码如下表所示。
| 编号 | 地址 | 机器代码 | 汇编代码 | 注释 |
|---|---|---|---|---|
| 1 | 08048100H | 00022080H | loop:sll R4,R2,2 | (R2)《2→R4 |
| 2 | 08048104H | 00083020H | add R4,R4,R3 | (R4)+(R3)→R4 |
| 3 | 08048108H | 8C850000H | load R5,0(R4) | ((R4)+0)→R5 |
| 4 | 0804810CH | 00250820H | add R1,R1,R5 | (R1)+(R5)→R1 |
| 5 | 08048110H | 20420001H | add R2,R2,1 | (R2)+1→R2 |
| 6 | 08048114H | 1446 FFFAH | bne R2,R6,loop | if (R2)≠(R6) goto loop |
执行上述代码的计算机 M 采用32位定长指令字,其中分支指令 bne 采用如下格式:
| 31 26 | 25 21 | 20 16 | 15 0 |
|---|---|---|---|
| OP | Rs | Rd | OFFSET |
OP为操作码,Rs 和Rd 为寄存器编号,OFFSET为偏移量,用补码表示。请回答下列问题,并说明理由。
(1)M 的存储器编址单位是什么?
(2)已知sll 指令实现左移功能,数组A 中每个元素占多少位?
(3)表中bne 指令的OFFSET 字段的值是多少?已知bne 指令采用相对寻址方式,当前PC内容为bne 指 令地址,通过分析题44表中指令地址和bne 指令内容,推断出bne指令的转移目标地址计算公式。
(4)若M 采用如下“按序发射、按序完成”的5级指令流水线:IF ( 取指)、ID ( 译码及取数)、EXE ( 执 行 ) 、MEM ( 访存)、 WB ( 写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起3个时 钟周期阻塞,则P 中那些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒 险?为什么指令1的执行不会因为与指令5的数据相关而发生阻塞?
[tag_link]
(1) 存储器编址单位为字节。因为每条指令占 4B,指令地址差为 4 个地址单位,故一个地址单位代表 1B。
(2) 数组 A 中每个元素占 32 位(4B)。sll 指令左移 2 位相当于乘 4,用于计算数组元素地址偏移,说明每个元素占 4B = 32 位。
(3) bne 指令的机器代码为 1446 FFFAH,后 2B 为 OFFSET 字段,值为 FFFAH(补码),即 -6。bne 指令地址为 08048114H,根据指令格式,转移目标地址计算公式为:(PC) + 4 + OFFSET × 4。执行 bne 时 PC 已自动加 4 变为 08048118H,-6 × 4 = -24,08048118H - 18H = 08048100H(loop 地址)。
(4) 由于数据相关而发生阻塞的指令为第 2、3、4、6 条。第 6 条指令会发生控制冒险。指令 1(sll)与指令 5(add R2,R2,1)之间没有数据相关,因为指令 1 写 R4,指令 5 写 R2,寄存器不同,不会发生阻塞。
假设对于题44中的计算机 M 和程序段P 的机器代码,M 采用页式虚拟存储管理;P 开始执 行时,(R1)=(R2)=0,(R6)=1000, 其机器代码已调入主存但不在Cache 中;数组A 未调入主存,且所有数 组元素在同一页,并存储在磁盘同一个扇区。请回答下列问题并说明理由。
(1)P 执行结束时,R2的内容是多少?
(2)M 的指令Cache和数据Cache分离。若指令Cache共有16行,Cache 和主存交换的块大小为32字节, 则其数据区的容量是多少?若仅考虑程序段P 的执行,则指令Cache的命中率为多少?
(3)P 在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组A 的访问,需要读磁盘和TLB 至少各多少次?
[tag_link]
该题涉及指令系统、存储管理以及 CPU 三个部分内容,考生应注意各章节内容之间的联系。
已知计算机 M 采用 32 位定长指令字,即一条指令占 4B,观察表中各指令的地址可知,每条指令的地址差为 4 个地址单位,即 4 个地址单位代表 4B,一个地址单位就代表了 1B,所以该计算机是按字节编址的。(2 分)
在二进制中某数左移两位相当于乘以 4,由该条件可知,数组间的数据间隔为 4 个地址单位,而计算机按字节编址,所以数组 A 中每个元素占 4B。(2 分)
由表可知,bne 指令的机器代码为 1446 FFFAH,根据题目给出的指令格式,后 2B 的内容为 OFFSET 字段,所以该指令的 OFFSET 字段为 FFFAH,用补码表示,值为 -6(1 分)。当系统执行到 bne 指令时,PC 自动加 4,PC 的内容就为 08048118H,而跳转的目标是 08048100H,两者相差了 18H,即 24 个单位的地址间隔,所以偏移址的一位即是真实跳转地址的 -24/-6=4 位(1 分)。可知 bne 指令的转移目标地址计算公式为 (PC)+4+OFFSETx4(1 分)。
由于数据相关而发生阻塞的指令为第 2、3、4、6 条,因为第 2、3、4、6 条指令都与各自前一条指令发生数据相关。(3 分) 第 6 条指令会发生控制冒险。(1 分) 当前循环的第五条指令与下次循环的第一条指令虽然有数据相关,但由于第 6 条指令后有 3 个时钟周期的阻塞,因而消除了该数据相关。(1 分)
【评分说明】对于第 1 问,若考生回答:因为指令 1 和 2、2 和 3、3 和 4、5 和 6 发生数据相关,因而发生阻塞的指令为第 2、3、4、6 条,同样给 3 分。答对 3 个以上给 3 分,部分正确酌情给分。
(8分)文件F 由200条记录组成,记录从1开始编号。用户打开文件后,欲将内存中的一条记录插 入文件F 中,作为其第30条记录。请回答下列问题,并说明理由。
(1)若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件F 存储区域前后均有足够的空闲磁盘 空间,则完成上述插入操作最少需要访问多少次磁盘块? F 的文件控制块内容会发生哪些改变?
(2)若文件系统采用链接分配方式,每个磁盘块存放一条记录和一个链接指针,则完成上述插入操作需要 访问多少次磁盘块?若每个存储块大小为1KB, 其中4B存放链接指针,则该文件系统支持的文件最大长 度是多少?
[tag_link]
1)系统采用顺序分配方式时,插入记录需要移动其他的记录块,整个文件共有 200 条记录,要插入新记录作为第 30 条,而存储区前后均有足够的磁盘空间,且要求最少的访问存储块数,则要把文件前 29 条记录前移,若算访盘次数移动一条记录读出和存回磁盘各是一次访盘,29 条记录共访盘 58 次,存回第 30 条记录访盘 1 次,共访盘 59 次。(1 分)
F 的文件控制区的起始块号和文件长度的内容会因此改变。(1 分)
2)文件系统采用链接分配方式时,插入记录并不用移动其他记录,只需找到相应的记录,修改指针即可。插入的记录为其第 30 条记录,那么需要找到文件系统的第 29 块,一共需要访盘 29 次,然后把第 29 块的下块地址部分赋给新块,把新块存回内存会访盘 1 次,然后修改内存中第 29 块的下块地址字段,再存回磁盘(1 分),一共访盘 31 次。(1 分)
4 字节共 32 位,可以寻址 2^32=4G 块存储块,每块的大小为 1KB,即 1024B,其中下块地址部分占 4B,数据部分占 1020B,那么该系统的文件最大长度是 4G×1020B=4080GB。(2 分)
【评分说明】①第 1 小题的第 2 小问,若答案中不包含文件的起始地址和文件大小,则不给分。 ②若按 1024×232B=4096GB 计算最大长度,给 1 分。
(8分)系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初 始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费 者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出10件产品后,其
他消费者进程才可以取产品。请使用信号量P 、V(wait(),signal() 操作实现进程间的互斥与同步,要求 写出完整的过程,并说明所用信号量的含义和初值。
[tag_link]
这是典型的生产者和消费者问题,只对典型问题加了一个条件,只需在标准模型上新加一个信号量,即可完成指定要求。
设置四个变量 consumer_mutex、buffer_mutex、empty 和 full:consumer_mutex 用于控制一个消费者进程一个周期(10 次)内对于缓冲区的控制,初值为 1;buffer_mutex 用于进程单次互斥的访问缓冲区,初值为 1;empty 代表缓冲区的空位数,初值为 0;full 代表缓冲区的产品数,初值为 1000。
semaphore consumer_mutex = 1;
semaphore buffer_mutex = 1;
semaphore full = 0;
semaphore empty = 1000;
Consumer() {
while (1) {
P(consumer_mutex);
for (int i = 0; i < 10; i++) {
P(full);
P(buffer_mutex);
// 从缓冲区取出产品
V(buffer_mutex);
V(empty);
// 消费产品
}
V(consumer_mutex);
}
}
Producer() {
while (1) {
P(empty);
// 生产产品
P(buffer_mutex);
// 将产品放入缓冲区
V(buffer_mutex);
V(full);
}
}
【评分说明】 ①信号量的初值和含义都正确给 2 分。 ②生产者之间的互斥操作正确给 1 分;生产者与消费者之间的同步操作正确给 2 分;消费者之间互斥操作正确给 1 分。 ③控制消费者连续取产品数量正确给 2 分。 ④仅给出经典生产者 - 消费者问题的信号量定义和伪代码描述最多给 3 分。 ⑤若考生将题意理解成缓冲区至少有 10 件产品,消费者才能开始取,其他均正确,得 6 分。 ⑥部分完全正确,酌情给分。