第 1 题
下列程序段的时间复杂度是( )。
count = 0;
for (k = 1; k <= n; k *= 2)
for (j = 1; j <= n; j++)
count++;
查看答案与解析
正确答案:C
做题模式
作答方式
默认进入做题模式,仅包含可评分的选择题。提交试卷后统一评分并展示解析。
做题模式
当前试卷的选择题会集中在这里作答,提交前可随时修改答案,提交后统一查看结果与解析。
下列程序段的时间复杂度是( )。
count = 0;
for (k = 1; k <= n; k *= 2)
for (j = 1; j <= n; j++)
count++;
正确答案:C
假设栈初始为空,将中缀表达式 a/b+(c*d-e*f)/g 转换为等价的后缀表达式的过程中,当扫描到 f 时,栈中的元素依次是( )。
正确答案:B
循环队列放在一维数组 A[0..M-1] 中,end1 指向队头元素,end2 指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳 M-1 个元素。初始时为空。下列判断队空和队满的条件中,正确的是( )。
正确答案: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 的左、右线索指向的结点分别是( )。
正确答案:D
将森林 F 转换为对应的二叉树 T,F 中叶子的个数等于( )。
正确答案:C
5 个字符有如下 4 种编码方案,不是前缀编码的是( )。
正确答案:D
对如下所示的有向图进行拓扑排序,得到的拓扑序列可能是()
正确答案:D
用哈希(散列)方法处理冲突(碰撞)时可能出现堆积(聚集)现象,下列选项中,会受堆积现象直接影响的是()
正确答案:D
在一棵具有 15 个关键字的 4 阶 B 树中,含关键字的结点个数最多是()
正确答案:D
用希尔排序方法对一个数据序列进行排序时,若第 1 趟排序结果为 9,1,4,13,7,8,20,23,15,则该趟排序采用的增量(间隔)可能是()
正确答案:B
下列选项中,不可能是快速排序第 2 趟排序结果的是()
正确答案:C
程序 P 在机器 M 上的执行时间是 20 秒,编译优化后,P 执行的指令数减少到原来的 70%,而 CPI 增加到原来的 1.2 倍,则 P 在 M 上的执行时间是( )。
正确答案:D
若 x=103,y=-25,则下列表达式采用 8 位定点补码运算实现时,会发生溢出的是( )。
正确答案:C
float 型数据常用 IEEE754 单精度浮点格式表示。假设两个 float 型变量 x 和 y 分别存放在 32 位寄存器 f1 和 f2 中,若 (f1)=CC90 0000H,(f2)=B0C0 0000H,则 x 和 y 之间的关系为( )。
正确答案:A
(f1) 和 (f2) 对应的二进制分别是 和 , 根据 IEEE754 浮点数标准,可知 (f1) 的数符为 1,阶码为 10011001,尾数为 1.001,而 (f2) 的数符为 1,阶码为 01100001,尾数为 ,则可知两数均为负数,符号相同,B、D 排除。 (f1) 的绝对值为 , (f2) 的绝对值为 ,则 (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
采用指令 Cache 与数据 Cache 分离的主要目的是( )。
正确答案:D
某计算机有 16 个通用寄存器,采用 32 位定长指令字,操作码字段(含寻址方式位)为 8 位,Store 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则 Store 指令中偏移量的取值范围是( )。
正确答案:A
某计算机采用微程序控制器,共有 32 条指令,公共的取指令微程序包含 2 条微指令,各指令对应的微程序平均由 4 条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是( )。
正确答案:C
某同步总线采用数据线和地址线复用方式,其中地址/数据线有 32 根,总线时钟频率为 66MHz,每个时钟周期传送两次数据(上升沿和下降沿各传送一次数据),该总线的最大数据传输率(总线带宽)是( )。
正确答案:C
一次总线事务中,主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或写入多个数据。这种总线事务方式称为( )。
正确答案:C
下列有关 I/O 接口的叙述中,错误的是( )。
正确答案:D
若某设备中断请求的响应和处理时间为 100ns,每 400ns 发出一次中断请求,中断响应所允许的最长延迟时间为 50ns,则在该设备持续工作过程中,CPU 用于该设备的 I/O 时间占整个 CPU 时间的百分比至少是( )。
正确答案:B
下列调度算法中,不可能导致饥饿现象的是( )。
正确答案:A
某系统有 n 台互斥使用的同类设备,三个并发进程分别需要 3、4、5 台设备,可确保系统不发生死锁的设备数 n 最小为( )。
正确答案:B
下列指令中,不能在用户态执行的是( )。
正确答案:D
一个进程的读磁盘操作完成后,操作系统针对该进程必做的是( )。
正确答案:A
现有一个容量为 10GB 的磁盘分区,磁盘空间以簇 (Cluster) 为单位进行分配,簇的大小为 4KB,若采用位图法管理该分区的空闲空间,即用一位 (bit) 标识一个簇是否被分配,则存放该位图所需簇的个数为( )。
正确答案:A
下列措施中,能加快虚实地址转换的是( )。
I. 增大快表 (TLB) 容量
II. 让页表常驻内存
III. 增大交换区 (swap)
正确答案:C
在一个文件被用户进程首次打开的过程中,操作系统需要做的是( )。
正确答案:B
在页式虚拟存储管理系统中,采用某些页面置换算法,会出现 Belady 异常现象,即进程的缺页次数会随着分配给该进程的页框个数的增加而增加。下列算法中,可能出现 Belady 异常现象的是( )。
I. LRU 算法
II. FIFO 算法
III. OPT 算法
下列关于管道(Pipe)通信的叙述中,正确的是( )。
正确答案:C
下列选项中,属于多级页表优点的是( )。
正确答案:D
在 OSI 参考模型中,直接为会话层提供服务的是( )。
正确答案:C
某以太网拓扑及交换机当前转发表如下图所示,主机 00-e1-d5-00-23-a1 向主机 00-e1-d5-00-23-c1 发送 1 个数据帧,主机 00-e1-d5-00-23-c1 收到该帧后,向主机 00-e1-d5-00-23-a1 发送 1 个确认帧,交换机对这两个帧的转发端口分别是( )。
正确答案:B
下列因素中,不会影响信道数据传输速率的是( )。
正确答案:D
主机甲与主机乙之间使用后退 N 帧协议 (GBN) 传输数据,甲的发送窗口尺寸为 1000,数据帧长为 1000 字节,信道带宽为 100 Mbps,乙每收到一个数据帧立即利用一个短帧(忽略其传输延迟)进行确认,若甲乙之间的单向传播延迟是 50ms,则甲可以达到的最大平均数据传输速率约为( )。
正确答案: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 发送的数据是( )。
正确答案:B
主机甲和主机乙已建立了 TCP 连接,甲始终以 MSS=1KB 大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段。若甲在 t 时刻发生超时时拥塞窗口为 8KB,则从 t 时刻起,不再发生超时的情况下,经过 10 个 RTT 后,甲的发送窗口是( )。
正确答案:A
下列关于 UDP 协议的叙述中,正确的是( )。
I. 提供无连接服务
II. 提供复用/分用服务
III. 通过差错校验,保障可靠数据传输
正确答案:B
使用浏览器访问某大学 Web 网站主页时,不可能使用到的协议是( )。
| 1 | C | 2 | B | 3 | A | 4 | D | 5 | C |
| 6 | D | 7 | D | 8 | D | 9 | D | 10 | B |
| 11 | C | 12 | D | 13 | C | 14 | A | 15 | A |
| 16 | D | 17 | A | 18 | C | 19 | C | 20 | C |
| 21 | D | 22 | B | 23 | A | 24 | B | 25 | D |
| 26 | A | 27 | A | 28 | C | 29 | B | 30 | A |
| 31 | C | 32 | D | 33 | C | 34 | B | 35 | D |
| 36 | C | 37 | B | 38 | A | 39 | B | 40 | D |
下列程序段的时间复杂度是( )。
count = 0;
for (k = 1; k <= n; k *= 2)
for (j = 1; j <= n; j++)
count++;
正确答案:C
正确答案:C假设栈初始为空,将中缀表达式 a/b+(c*d-e*f)/g 转换为等价的后缀表达式的过程中,当扫描到 f 时,栈中的元素依次是( )。
循环队列放在一维数组 A[0..M-1] 中,end1 指向队头元素,end2 指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳 M-1 个元素。初始时为空。下列判断队空和队满的条件中,正确的是( )。
正确答案:A
正确答案:Aend1 指向队头元素,那么可知出队的操作是先从 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 的左、右线索指向的结点分别是( )。
正确答案:D
正确答案:D将森林 F 转换为对应的二叉树 T,F 中叶子的个数等于( )。
正确答案:C
正确答案:C5 个字符有如下 4 种编码方案,不是前缀编码的是( )。
正确答案:D
正确答案:D对如下所示的有向图进行拓扑排序,得到的拓扑序列可能是()
正确答案:D
正确答案:D用哈希(散列)方法处理冲突(碰撞)时可能出现堆积(聚集)现象,下列选项中,会受堆积现象直接影响的是()
在一棵具有 15 个关键字的 4 阶 B 树中,含关键字的结点个数最多是()
正确答案:D
正确答案:D用希尔排序方法对一个数据序列进行排序时,若第 1 趟排序结果为 9,1,4,13,7,8,20,23,15,则该趟排序采用的增量(间隔)可能是()
正确答案:B
正确答案:B下列选项中,不可能是快速排序第 2 趟排序结果的是()
正确答案:C
正确答案:C程序 P 在机器 M 上的执行时间是 20 秒,编译优化后,P 执行的指令数减少到原来的 70%,而 CPI 增加到原来的 1.2 倍,则 P 在 M 上的执行时间是( )。
正确答案:D
正确答案:D若 x=103,y=-25,则下列表达式采用 8 位定点补码运算实现时,会发生溢出的是( )。
正确答案:C
正确答案:Cfloat 型数据常用 IEEE754 单精度浮点格式表示。假设两个 float 型变量 x 和 y 分别存放在 32 位寄存器 f1 和 f2 中,若 (f1)=CC90 0000H,(f2)=B0C0 0000H,则 x 和 y 之间的关系为( )。
正确答案:A
正确答案:A(f1) 和 (f2) 对应的二进制分别是 和 , 根据 IEEE754 浮点数标准,可知 (f1) 的数符为 1,阶码为 10011001,尾数为 1.001,而 (f2) 的数符为 1,阶码为 01100001,尾数为 ,则可知两数均为负数,符号相同,B、D 排除。 (f1) 的绝对值为 , (f2) 的绝对值为 ,则 (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
正确答案:A采用指令 Cache 与数据 Cache 分离的主要目的是( )。
正确答案:D
正确答案:D某计算机有 16 个通用寄存器,采用 32 位定长指令字,操作码字段(含寻址方式位)为 8 位,Store 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则 Store 指令中偏移量的取值范围是( )。
正确答案:A
正确答案:A某计算机采用微程序控制器,共有 32 条指令,公共的取指令微程序包含 2 条微指令,各指令对应的微程序平均由 4 条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是( )。
正确答案:C
正确答案:C某同步总线采用数据线和地址线复用方式,其中地址/数据线有 32 根,总线时钟频率为 66MHz,每个时钟周期传送两次数据(上升沿和下降沿各传送一次数据),该总线的最大数据传输率(总线带宽)是( )。
正确答案:C
正确答案:C一次总线事务中,主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或写入多个数据。这种总线事务方式称为( )。
正确答案:C
正确答案:C下列有关 I/O 接口的叙述中,错误的是( )。
若某设备中断请求的响应和处理时间为 100ns,每 400ns 发出一次中断请求,中断响应所允许的最长延迟时间为 50ns,则在该设备持续工作过程中,CPU 用于该设备的 I/O 时间占整个 CPU 时间的百分比至少是( )。
正确答案:B
正确答案:B下列调度算法中,不可能导致饥饿现象的是( )。
正确答案:A
正确答案:A某系统有 n 台互斥使用的同类设备,三个并发进程分别需要 3、4、5 台设备,可确保系统不发生死锁的设备数 n 最小为( )。
正确答案:B
正确答案:B下列指令中,不能在用户态执行的是( )。
一个进程的读磁盘操作完成后,操作系统针对该进程必做的是( )。
正确答案:A
正确答案:A现有一个容量为 10GB 的磁盘分区,磁盘空间以簇 (Cluster) 为单位进行分配,簇的大小为 4KB,若采用位图法管理该分区的空闲空间,即用一位 (bit) 标识一个簇是否被分配,则存放该位图所需簇的个数为( )。
正确答案:A
正确答案:A下列措施中,能加快虚实地址转换的是( )。
I. 增大快表 (TLB) 容量
II. 让页表常驻内存
III. 增大交换区 (swap)
正确答案:C
正确答案:C在一个文件被用户进程首次打开的过程中,操作系统需要做的是( )。
正确答案:B
正确答案:B下列关于管道(Pipe)通信的叙述中,正确的是( )。
正确答案:C
正确答案:C下列选项中,属于多级页表优点的是( )。
正确答案:D
正确答案:D在 OSI 参考模型中,直接为会话层提供服务的是( )。
某以太网拓扑及交换机当前转发表如下图所示,主机 00-e1-d5-00-23-a1 向主机 00-e1-d5-00-23-c1 发送 1 个数据帧,主机 00-e1-d5-00-23-c1 收到该帧后,向主机 00-e1-d5-00-23-a1 发送 1 个确认帧,交换机对这两个帧的转发端口分别是( )。
正确答案:B
正确答案:B下列因素中,不会影响信道数据传输速率的是( )。
正确答案:D
正确答案:D主机甲与主机乙之间使用后退 N 帧协议 (GBN) 传输数据,甲的发送窗口尺寸为 1000,数据帧长为 1000 字节,信道带宽为 100 Mbps,乙每收到一个数据帧立即利用一个短帧(忽略其传输延迟)进行确认,若甲乙之间的单向传播延迟是 50ms,则甲可以达到的最大平均数据传输速率约为( )。
正确答案:C
正确答案: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 发送的数据是( )。
正确答案:B
正确答案:B主机甲和主机乙已建立了 TCP 连接,甲始终以 MSS=1KB 大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段。若甲在 t 时刻发生超时时拥塞窗口为 8KB,则从 t 时刻起,不再发生超时的情况下,经过 10 个 RTT 后,甲的发送窗口是( )。
正确答案:A
正确答案:A下列关于 UDP 协议的叙述中,正确的是( )。
I. 提供无连接服务
II. 提供复用/分用服务
III. 通过差错校验,保障可靠数据传输
正确答案:B
正确答案:B二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树 T,采用二叉链表存储,结点结构为:
其中叶结点的 weight 域保存该结点的非负权值。设 root 为指向 T 的根结点的指针,请设计求 T 的 WPL 的算法,要求:
(1) 给出算法的基本设计思想;
(2) 使用 C 或 C++ 语言,给出二叉树结点的数据类型定义;
(3) 根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
①基于先序递归遍历的算法思想是用一个 static 变量记录 wpl,把每个结点的深度作为递归函数的一个参数传递,算法步骤如下:
若该结点是叶子结点,则变量 wpl 加上该结点的深度与权值之积;
若该结点非叶子结点,则若左子树不为空,对左子树调用递归算法,若右子树不为空,对右子树调用递归算法,深度参数均为本结点的深度参数加 1;
最后返回计算出的 wpl 即可。
②基于层次遍历的算法思想是使用队列进行层次遍历,并记录当前的层数,
当遍历到叶子结点时,累计 wpl;
当遍历到非叶子结点时,把该结点的子树加入队列;
当某结点为该层的最后一个结点时,层数自增 1;
队列空时遍历结束,返回 wpl。
typedef struct BiTNode(
int weight;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int _wpl(Node *root, int depth) {
if (!root) {
return 0;
}
int sum = 0;
if (root->lchild == NULL && root->rchild == NULL) {
sum += (depth * root->weight);
}
sum += _wpl(root->left, depth+1);
sum += _wpl(root->right, depth+1);
return sum;
}
int wpl(Node *root) {
return _wpl(root, 0);
}
【评分说明】
①若考生给出能够满足题目要求的其他算法且正确,可同样给分。
②考生答案无论使用 C 或者 C++ 语言,只要答案正确同样给分。
③若对算法的基本设计思想和主要数据结构描述不十分准确,但在算法实现中能够清晰反映出算法思想且正确,参照①的标准给分。
④若考生给出的二叉树结点的数据类型定义和算法实现中,使用的是除整型之外的其他数值,可视同使用整型类型。
⑤若考生给出的答案中算法主要设计思想或算法中部分正确,可酌情给分。
某网络中的路由器运行 OSPF 路由协议,题 42 表是路由器 R1 维护的主要链路状态信息(LSI),题 42 图是根据题 42 表的接口名构造出来的网络拓扑。
请回答下列问题。
⑴ 本题中的网络可抽象为数据结构中的哪种结构?
⑵ 针对题 42 表中的内容,设计合理的链式存储结构,以保存题 42 表中的链路状态信息(LSI)。要求给出链式存储结构的数据定义,并画出对应题 42 表的链式存储结构示意图(示意图中仅以 ID 标识结点)。
⑶ 按照迪杰斯特拉(Dijkstra)算法的策略,依次给出 R1 到达题 42 图中子网 192.1.x.x 的最短路径及费用。
很多考生乍看之下以为是网络的题目,其实该题本身并没有涉及太多的网络知识点,只是 应用了网络的模型,实际上考查的还是数据结构的内容。
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,同时在表头结点中定义了两个指针,分别指向由这两种类型的结点构成的两个链 表,同样给分。
③考生所给答案的弧结点中,可以在单独定义的域中保存各直连网络 P 地址的前缀长度, 也可以与网络地址保存在同一个域中。
④数据类型定义中,只要采用了可行的链式存储结构,并保存了题目中所给的 LS 信息, 如将网络抽象为一类结点,写出含 8 个表头结点的链式存储结构,均可参照①③的标准给分。
⑤若考生给出的答案中,图示部分与其数据类型定义部分一致,图示只要能够体现链式 存储结构和网络连接关系(可以不给出结点内细节信息),即可给分。
⑥若解答不完全正确,酌情给分。
3)计算结果如下表所示:
| 目的网络 | 路径 | 代价(费用) | |
|---|---|---|---|
| 步骤 1 | 192.1.1.0/24 | 直接到达 | 1 |
| 步骤 2 | 192.1.5.0/24 | R1→R3→192.1.5.0/24 | 3 |
| 步骤 3 | 192.1.6.0/24 | R1→R2→192.1.6.0/24 | 4 |
| 步骤 4 | 192.1.7.0/24 | R1→R2→R4→192.1.7.0/24 | 8 |
【评分说明】
①若考生给出的各条最短路径的结果部分正确,可酌情给分。
②若考生给出的从 R1 到达子网 192.1.x.x 的最短路径及代价正确,但不完全符合代价不减 的次序,可酌情给分。
请根据题 42 描述的网络,继续回答下列问题。
(1) 假设路由表结构如下表所示,请给出题 42 图中 R1 的路由表,要求包括到达题 42 图中子网 192.1.x.x 的路由,且路由表中的路由项尽可能少。
(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 需要增加哪些信息?
(1) 因为题目要求路由表中的路由项尽可能少,所以这里可以把子网 192.1.6.0/24 和 192.1.7.0/24 聚合为子网 192.1.6.0/23。其他网络照常,可得到路由表如下:(6分)
| 目的网络 | 下一条 | 接口 |
|---|---|---|
| 192.1.1.0/24 | - | E0 |
| 192.1.6.0/23 | 10.1.1.2 | L0 |
| 192.1.5.0/24 | 10.1.1.10 | L1 |
【评分说明】
(2) 通过查路由表可知:R1 通过 L0 接口转发该 IP 分组。(1分)因为该分组要经过 3 个路由器(R1, R2, R4),所以主机 192.1.7.211 收到的 IP 分组的 TTL 是 64-3=61。(1分)
(3) R1 的 LSI 需要增加一条特殊的直连网络,网络前缀 Prefix 为 “0.0.0.0/0”,Metric 为 10。(1分)
【评分说明】
考生只要回答:增加前缀 Prefix 为 “0.0.0.0/0”,Metric 为 10,同样给分。
某程序中有如下循环代码段 P:“for (int i=0; i<N; i++) sum += A[i];”。假设编译时变量 sum 和 i 分别分配在寄存器 R1 和 R2 中。常量 N 在寄存器 R6 中,数组 A 的首地址在寄存器 R3 中。程序段 P 起始地址为 08048100H,对应的汇编代码和机器代码如下表所示。
| 编号 | 地址 | 机器代码 | 汇编代码 | 注释 |
|---|---|---|---|---|
| I | 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 | 1446FFFAH | bne R2, R6, loop | if (R2)≠(R6) goto loop |
执行上述代码的计算机 M 采用 32 位定长指令字,其中分支指令 bne 采用如下格式:
Op 为操作码,Rs 和 Rd 为寄存器编号,OFFSET 为偏移量,用补码表示。请回答下列问题,并说明理由。
(1) M 的存储器编址单位是什么?
(2) 已知 sll 指令实现左移功能,数组 A 中每个元素占多少位?
(3) 题 44 表中 bne 指令的 OFFSET 字段的值是多少?已知 bne 指令采用相对寻址方式,当前 PC 内容为 bne 指令地址,通过分析题 44 表中指令地址和 bne 指令内容,推断出 bne 指令的转移目标地址计算公式。
(4) 若 M 采用如下“按序发射、按序完成”的 5 级指令流水线:IF(取指)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起 3 个时钟周期阻塞,则 P 中那些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令 1 的执行不会因为与指令 5 的数据相关而发生阻塞?
该题涉及指令系统、存储管理以及 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 分,部分正确酌情给分。
假设对于题 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 至少各多少次?
1)R2 里装的是 i 的值,循环条件是 i < N (1000),即当 i 自增到不满足这个条件时跳出循环,程序结束,所以此时 i 的值为 1000。(1 分)
2)Cache 共有 16 块,每块 32 字节,所以 Cache 数据区的容量为 16x32B=512B。(1 分)
P 共有 6 条指令,占 24 字节,小于主存块大小 (32B),其起始地址为 08048100H,对应一块的开始位置,由此可知所有指令都在一个主存块内。读取第一条指令时会发生 Cache 缺失,故将 P 所在的主存块调入 Cache 某一块,以后每次读取指令时,都能在指令 Cache 中命中。因此在 1000 次循环中,只会发生 1 次指令访问缺失,所以指令 Cache 的命中率为 (1000x6-1)/(1000×6)=99.98%。(2 分)
【评分说明】若考生给出正确的命中率,而未说明原因和过程,给 1 分。若命中率计算错误,但解题思路正确,可酌情给分。
3)指令 4 为加法指令,即对应 sum+=A[i],当数组 A 中元素的值过大时,则会导致这条加法指令发生溢出异常;而指令 2、5 虽然都是加法指令,但它们分别为数组地址的计算指令和存储变量 i 的寄存器进行自增的指令,而 i 最大到达 1000,所以它们都不会产生溢出异常。(2 分)
只有访存指令可能产生缺页异常,即指令 3 可能产生缺页异常。(1 分)
因为数组 A 在磁盘的一页上,而一开始数组并不在主存中,第一次访问数组时会导致访盘,把 A 调入内存,而以后数组 A 的元素都在内存中,则不会导致访盘,所以该程序一共访盘一次。(2 分)
每访问一次内存数据就会查 TLB 一次,共访问数组 1000 次,所以此时又访问 TLB 1000 次,还要考虑到第一次访问数组 A,即访问 A[0] 时,会多访问一次 TLB(第一次访问 A[0] 会先查一次 TLB,然后产生缺页,处理完缺页中断后,会重新访问 A[0],此时又查 TLB),所以访问 TLB 的次数一共是 1001 次。(2 分)
【评分说明】
①对于第 1 问,若答案中除指令 4 外还包含其他运算类指令(即指令 1、2、5),则给 1 分,其他情况,则给 0 分。
②对于第 2 问,只要回答“1oad 指令”,即可得分。
③对于第 3 问,若答案中给出的读 TLB 的次数为 1002,同样给分。若直接给出正确的 TLB 及磁盘的访问次数,而未说明原因,给 3 分。若给出的 TLB 及磁盘访问次数不正确,但解题思路正确,可酌情给分。
文件 F 由 200 条记录组成,记录从 1 开始编号。用户打开文件后,欲将内存中的一条记录插入文件 F 中,作为其第 30 条记录。请回答下列问题,并说明理由。
(1) 若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件 F 存储区域前后均有足够的空闲磁盘空间,则完成上述插入操作最少需要访问多少次磁盘块?F 的文件控制块内容会发生哪些改变?
(2) 若文件系统采用链接分配方式,每个磁盘块存放一条记录和一个链接指针,则完成上述插入操作需要访问多少次磁盘块?若每个存储块大小为 1KB,其中 4B 存放链接指针,则该文件系统支持的文件最大长度是多少?
1)系统采用顺序分配方式时,插入记录需要移动其他的记录块,整个文件共有 200 条记录,要插入新记录作为第 30 条,而存储区前后均有足够的磁盘空间,且要求最少的访问存储块数,则要把文件前 29 条记录前移,若算访盘次数移动一条记录读出和存回磁盘各是一次访盘,29 条记录共访盘 58 次,存回第 30 条记录访盘 1 次,共访盘 59 次。(1 分)
F 的文件控制区的起始块号和文件长度的内容会因此改变。(1 分)
2)文件系统采用链接分配方式时,插入记录并不用移动其他记录,只需找到相应的记录,修改指针即可。插入的记录为其第 30 条记录,那么 需要找到文件系统的第 29 块,一共需要访盘 29 次,然后把第 29 块的下块地址部分赋给新块,把新块存回内存会访盘 1 次,然后修改内存中第 29 块的下块地址字段,再存回磁盘(1 分),一共访盘 31 次。(1 分)
4 字节共 32 位,可以寻址 232=4G 块存储块,每块的大小为 1KB,即 1024B,其中下块地址部分占 4B,数据部分占 1020B,那么该系统的文件最大长度是 4G×1020B=4080GB。(2 分)
【评分说明】
①第 1 小题的第 2 小问,若答案中不包含文件的起始地址和文件大小,则不给分。
②若按 1024×232B=4096GB 计算最大长度,给 1 分。
系统中有多个生产者进程和多个消费者进程,共享一个能存放 1000 件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出 10 件产品后,其他消费者进程才可以取产品。请使用信号量 P、V(wait(),signal())操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和初值。
这是典型的生产者和消费者问题,只对典型问题加了一个条件,只需在标准模型上新加一 个信号量,即可完成指定要求。
设置四个变量 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 分。
⑥部分完全正确,酌情给分。