一、选择题(2分/题)
1.设 n 是描述问题规模的非负整数,下列程序片段的时间复杂度是______。
x=2;
while(x<n/2){
x=2*x;
}
A.O() B.O(n) C.O() D.O(n^2)
解答:A
假设执行 y次,则 (2^y)*x=n/2,y=,所以时间复杂度为 A
2.元素 a,b,c,d,e 依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素 d 开头的序列个数为______。
A.3 B.4 C.5 D.6
解答:B
出栈序列以 d 开头 ,则 a,b,c,d 依次近战,d 出栈,此时有以下几种情况。
(1)e进栈,依次出栈。
(2)c出栈,e进栈,依次出栈
(3)b、c出栈,e进栈,依次出栈
(4)a、b、c出栈、e进栈,依次出栈
3.已知循环队列存储在一维数组 A[0...n-1] 中,且队列非空时 front 和 near 分别指向队头和队尾元素。若初始时队列为空,且要求第一个进入队列的元素存储在 A[0] 处,则初始时 front 和 near 的值分别是______。
A.0,0 B.0,n-1 C.n-1,0 D.n-1,n-1
解答:B
入队时,元素放置位置为 (near+1)%n,故 near 指向 A[n-1]。front 指向队头,初始时,队头仍为 A[0],因此指向 0。
4.若一颗完全二叉树有 768 个节点,则该二叉树中叶节点的个数为____。
A.257 B.258 C.384 D.385
解答:C
满二叉树第 0 层到第 n-1 层每层节点个数依次为 1,2,4.......2^(n-1),所以前 n-1 层共有 1+2+4+...+2^n=2^n-1 个节点。
完全二叉树有 768 个节点,假设有 n-1 层,则删去第 n-1 层后一共有 511 个节点,因此第 n-1 层有 768-511= 257 个叶子节点;第 n-2 层有 2^8=256 个节点,其中有 257/2+1=129个节点有子节点,因此叶子节点个数为 256-129= 127 。所以叶子节点个数为 257+127= 384。
5.若一颗二叉树的前序遍历序列和后序遍历序列分别是 1,2,3,4 和 4,3,2,1。则该二叉树的中序遍历序列不会是_______。
A.1,2,3,4 B.2,3,4,1 C.3,2,4,1 D.4,3,2,1
解答:C
A,B,D 可以得到二叉树,如下图所示。
6.已知一颗有 2011 个节点的树,其叶节点个数为 116,该数对应二叉树中无右孩子的节点个数是__________。
A.115 B.116 C.1895 D.1896
解答:D
设该树为除最后一层外,每层只有一个节点。此时共有 2011-116=1895 个节点所在层只有一个节点,转为二叉树后,前 1895 层 1895 个节点无右孩子,第 1896 层最右边节点无右孩子。因此共有 1896 个节点无右孩子。
7.对于下列关键字序列,不可能构成某二叉排序树一条查找路径的是______。
A.95,22,91,24,94,71 B.92,20,91,34,88,35
C.21,89,77,29,36,38 D.12,25,71,68,33,34
解答:A
构成二叉排序树的查找路径 指的是按序列每层一个关键字组成的二叉树。
A 项中,第二个节点为22 <95,因此后续所有节点都应小于 95;第三个节点为91>22,因此后续节点的取值区间为 [22,95];第四个节点24<91,因此后续节点的取值区间为 [22,91],存在节点 94 不在该区间内,因此不能构成查找路径。
8.下列关于图的叙述中,正确的是________。
Ⅰ 回路是简单路径 Ⅱ存储稀疏图,用邻接矩阵比邻接表更省空间
Ⅲ若有向图中存在拓扑序列,则该图不存在回路
A.Ⅱ B. ⅠⅡ C.Ⅲ D.ⅠⅢ
解答:C
简单:一条路径中,如果同一条边不出现两次,则此路径是简单路径
回路:如果一条路径的始点与终点相同,则此路径称为回路。
简单回路:没有相同边的回路。
据此可以判断,有的回路是简单路径,有的不是,故Ⅰ错误。
邻接矩阵会保存所有节点之间的位置关系,而邻接表只会保存相连的节点,因此稀疏图使用邻接表更省空间。Ⅱ错误
拓扑序列:将顶点活动网中的活动按发生的先后次序进行的排列。因此 Ⅲ 正确。
9.为提高散列(Hash)表的查找效率,可以采取的正确措施是______。
Ⅰ增大装填(载)因子 Ⅱ射击冲突(碰撞)少的散列函数
Ⅲ处理冲突(碰撞)时避免产生聚集(堆积)现象
A.Ⅰ B.Ⅱ C.ⅠⅡ D.ⅡⅢ
解答:D
装填因子越大,产生冲突的概率越大,查找效率变低的概率越大。Ⅰ 错误
冲突减少,查找效率提高。Ⅱ 正确
聚集现象少,查找效率提高。Ⅲ正确
10.为实现快速排序算法,待排序序列宜采用的存储方式是______。
A.顺序存储 B.散列存储 C.链式存储 D.索引存储
解答:A
快速排序:选定一个元素,将大于该元素的排在其左边,小于该元素的排在右边。再对其左边和右边的元素序列重复此操作直至所有元素有序。
散列存储即 hash 存储。
索引存储:分别存放数据元素和数据元素之间关系的存储方式,类似于二叉排序树。
绝大多数内部排序都只适用于顺序存储。再快速排序过程中,既要从前往后遍历,又要从后往前遍历,因此适用于顺序存储。
11.已知序列 25,13,10,12,9 是大根堆,在序列尾部插入新元素 18,再将其调整为大根堆,则调整过程中元素之间进行的比较次数是_____。
A.1 B.2 C.4 D.5
解答:B
原大根堆:
插入 18 后,位于 10 的左节点。调整大根堆时,先与 10 比较一次,大于10,交换二者位置;再与 25 比较一次,小于 25,不进行变动。因此一共进行了两次比较。
12.下列选项中,描述浮点数操作速度指标的是______。
A.MIPS B.CPI C.IPC D.MFLOPS
解答:D
MIPS:每秒执行多少百万条指令。
CPI:执行一条指令所消耗的时间。
IPC:CPU 每个时钟周期内执行的指令条数。
MFLOPS:每秒执行多少百万次浮点操作。
13.float 型数据通常用 IEEE 754 单精度浮点数格式表示。若编译器将 float 型变量 x 分配到一个 32 位的浮点寄存器 FR1 中,且 x=-8.25,则 FR1 的内容是_____。
A.C104 0000H B.C242 0000H C.C184 0000H D.C1C2 0000H
解答:A
单精度 IEEE 754 表示浮点数时使用 32 位二进制。32 位二进制由三个部分组成:1 位的符号位,8 位阶码和 23 位尾数。
(1)将十进制 -8.25 转化而二进制 -1000.01B
(2)使用科学计数法表示该二进制 -1.00001B*2^(11B)
(3)该数是负数,因此符号位为 1
阶码的真值为 11B 即 0000 0011B,但是阶码存储使用的是移码(偏置值为 0111 1111B),即在原来基础上加上 01111 1111B,所以阶码的值为1000 0010B。
尾数是取 1.00001B小数部分,因此尾数为 000 0100 0000 0000 0000 0000B
(4) 将符号位,阶码和尾数组合得到 1100 0001 0000 0100 0000 0000 0000 0000B 即C104 0000H。
14.下列各类存储器中,不采用随机存储方式的是_____。
A.EPROM B.CDROM C.DRAM D.SRAM
解答:B
EPROM:光可擦除可编程存储器,具有非易失性,采用随机存储方式。
CDROM:即光盘,采用串行存取方式(将 n 位二进制数一次性写入或读取的方式)。
DRAM:动态随机存取存储器。
SRAM:静态随机存取存储器。
15.某计算机存储器按字节编址,主存地址空间大小为 64MB,现用 4MB*8 位的 RAM 芯片组成 32 MB 的主存储器,则存储器地址寄存器 MAR 的位数至少是_____。
A.22 位 B.23 位 C.25 位 D.26 位
解答:D
主存地址空间大小为 64MB=2^6*2^10*2^10B=2^26B。因此存储器地址空间寄存器 MAR 的位数至少是 26 位(主要考虑主存理论最大情况,现有主存储器小于该容量,但以后可能会扩展。)
16.偏移寻址通过将某个寄存器内容与一个形式地址相加而形成有效地址。下列寻址方式中,不属于偏移寻址方式的是_______。
A.间接寻址 B.基址寻址 C.相对寻址 D.变址寻址
解答:A
间接寻址:实际地址=所给地址存放内容指向位置的内容。
基址寻址:实际地址=基地址(基址寄存器内容)+偏移量(形式地址、程序中指明)
相对寻址:实际地址=基地址(PC 程序计数器内容)+偏移量(形式地址、程序中指明)
变址寻址:实际地址=基地址(变址寄存器内容)+偏移量(形式地址、程序中指明)
显然,选 A。
17.某机器由一个标志寄存器,其中由进位/借位标志 CF、零标志 ZF、符号标志 SF、和溢出标志 OF,条件转移指令 bgt(无符号整数比较大于时转移)的转移条件是_____。
A.CF+OF=1 B. !SF + ZF=1 C. !(CF+ZF)=1 D. !(CF+SF)=1
解答:C
假设是 a>b 时转移,则 a-b 的计算结果为正整数,此时 CF 和 SF 为 0,选 C。因为是无符号整数,所以 符号标志 SF 一定为 0 。OF 是判断带符号数溢出的。
18.下列给出的指令系统特点中,有利于实现指令流水线的是____。
Ⅰ指令格式规整且长度一致 Ⅱ数据和指令按边界对齐存放
Ⅲ只有 Load/Store 指令才能对操作数进行存储访问
A.Ⅰ Ⅱ B.ⅡⅢ C.ⅠⅢ D.ⅠⅡⅢ
解答:D
Ⅰ可以简化指令译码的复杂度。 Ⅱ能保证在一个存取周期内能得到需要的数据和指令,不用延迟等待。Ⅲ可以简化流水线的复杂度。因此都有利于指令流水线的实现。
19.假定不采用 Cache 和指令预取技术,且机器处于 “开中断” 状态。在下列有关指令执行的叙述中,错误的是_______。
A.每个指令周期中 CPU 都至少要访问内存一次。
B.每个指令周期一定大于等于一个CPU时钟周期
C.空操作指令的指令周期中任何寄存器内容都不会被改变
D.当前程序在每条指令执行结束时都可能被外部中断打断
解答:C
A 项中每个指令周期都需要取指,因此至少要访问内存一次。
B项中时钟周期是CPU 的最小时间单位 ,因此每个指令周期一定大于等于一个 CPU 时钟周期。
C 项中 PC 会自动加一。
D 项中机器处于开中断状态,会被外部中断打断。
20.在系统总线的数据线上,不可能传输的是_____。
A.指令 B.操作数 C.握手(应答)信号 D.中断类型号
解答:C
AB显然可以。
C 项握手(应答)信号属于通信联络控制信号,在通信总线上传输。
D 项中断类型号指的是中断向量的地址。CPU 响应中断请求后,首先通过总线将中断类型码放入寄存器暂存,然后保护现场,之后再通过数据总线读取中断类型码,查找中断向量表以找到相应的中断处理程序入口。
21.某计算机有 5 级中断 L4~L0,中断屏蔽字 M4M3M2M1M0,Mi=1(0<=i<=4) 表示对 Li 级中断进行屏蔽。若中断响应优先级从高到低的顺序是 L4->L0->L2->L1->L3,则 L1 的中断处理程序中设置的中断屏蔽字是______。
A.11110 B.01101 C.00011 D.01010
解答:D
L1 的中断屏蔽字要屏蔽 L3、L1,不能屏蔽 L4,L0,L2,因此为 01010。关于中断的优先级是否屏蔽同一优先级,百度百科中中断嵌套的描述是更高一级的中断“加塞”。
22.某计算机处理器主频 50MHz,采用定时查询方式控制设备 A 的 I/O,查询程序运行一次所用的时钟周期数至少是 500。在设备 A 工作期间,为保证数据不丢失,每秒需要对其查询至少 200 次,则 CPU 用于设备 A 的 I/O 的时间占整个 CPU 时间的百分比至少是_____。
A.0.02% B.0.05% C.0.20% D.0.50%
解答:C
查询一次所用的时钟周期数至少是 500,每秒至少查询 200 次,因此每秒钟至少有 200*500=10^5 个时钟周期用于查询。计算主频为 50MHz,即每秒 50M 个时钟周期。所以,所占百分比至少为 10^5/(50*10^6)=1/500=2*10^(-3)=0.2% ,选 C。
23. 下列选项中,满足短任务优先且不会发生饥饿现象的是_______。
A.先来先服务 B.高响应比优先 C.时间片轮转 D.非抢占式短任务优先
解答:C
高响应比优先:响应比=作业周转时间/作业处理时间=(作业等待时间+作业处理时间)/作业处理时间=1+作业等待时间/作业处理时间。是一种介于先来先和短作业优先的算法,既照顾了短作业,又使长作业的等待时间不会太长。
24.下列选项中,在用户态执行的是_______。
A.命令解释程序 B.缺页处理程序 C.进程调度程序 D.时钟中断处理程序
解答:A
命令解释程序属于命令接口,面向用户,可以在用户态执行。
缺页和时钟中断都是中断,在内核态执行。
进程调度室操作系统内核进程,在内核态执行。
25.在支持多线程的系统中,进程 P 创建的若干线程不能共享的是______。
A.进程 P 的代码段 B.进程 P 打开的文件
C.进程 P 的全局变量 D.进程 P 中某线程的栈指针
解答:D
属于进程的资源可以共享,属于线程的资源独享。
26.用户发出磁盘 I/O 请求后,系统的正确处理流程是_______。
A.用户程序->系统调用处理程序->中断处理程序->设备驱动程序
B.用户程序->系统调用处理程序->设备驱动程序->中断处理程序
C.用户程序>设备驱动程序->系统调用处理程序->中断处理程序
D.用户程序>设备驱动程序->中断处理程序->系统调用处理程序
解答:B
输入/输出软件一般从上到下分为四个层次:用户层、系统调用处理程序、设备驱动程序及其中断处理程序。
27.某时刻进程资源的使用情况见下表。
进程 | 已分配资源 | 尚需分配 | 可用资源 | ||||||
R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 2 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | 1 |
P2 | 1 | 2 | 0 | 1 | 3 | 2 | |||
P3 | 0 | 1 | 1 | 1 | 3 | 1 | |||
P4 | 0 | 0 | 1 | 2 | 0 | 0 |
此时的安全序列为_______。
A.P1,P2,P3,P4 B.P1,P3,P2,P4 C.P1,P4,P3,P2 D.不存在
解答:D
P1 顺利完成,此时可用资源R1=2,R2=2,R3=1。只能满足 P4 的要求,P4 完成后,可用资源 R1=2,R2=2,R3=2。此时无法满足 P2 和 P3 的要求。因此不存在安全序列。
28.在缺页处理过程中,操作系统执行的操作可能是______。
Ⅰ修改页表 Ⅱ磁盘I/O Ⅲ分配页框
A.ⅠⅡ B.Ⅱ C.Ⅲ D.ⅠⅡⅢ
解答:D
缺页时,会根据算法将外存上保存的页面调入内存,该过程中可能会替换一个内存中的页,因此ⅠⅡⅢ 都可能成立。
29.当系统发生抖动(thrashing)时,可以采取的有效措施是_______。
Ⅰ撤销部分进程 Ⅱ增加磁盘交换区的容量 Ⅲ提供用户进程的优先级
A.Ⅰ B.Ⅱ C.Ⅲ D.ⅠⅡⅢ
解答:A
系统抖动:在请求分页存储管理中,从主存刚换出某一页面后,根据请求又马上换入该面,这种反复换入换出的现象,称之为系统颠簸,又叫系统抖动。
30.在虚拟内存管理中,地址变换机构将逻辑地址转化为物理地址,形成该逻辑地址的阶段是______。
A.编辑 B.编译 C.链接 D.装载
解答:C
编辑阶段:编写程序。
编译阶段:将高级语言代码转化为对应目标文件。会进行词法分析、语法分析、语义分析并在优化后产生相应的汇编代码文件。
链接:将多个文件加工后合并为一个文件。
装载:将可执行文件全部或部分加载到内存中。
31.某文件占 10 个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析,假设一个缓冲区与一个磁盘块大小相等,把一个磁盘块读入缓冲区的时间为 100 μs,将缓冲区内的数据传送到用户区的时间是 50 μs,CPU 对一整块数据进行分析的时间为 50 μs。在单缓冲区和双缓冲区结构下,读入并分析完成该文件的时间分别是_____。
A.1500μs,1000μs B.1550μs,1100μs C.1550μs,1550μs D.2000μs,2000μs
解答:B
单缓冲区:第一个文件读入缓冲区耗时 100 μs,送到用户区耗时 50 μs,CPU 分析耗时 50 μs,因此第一个文件耗时 200 μs。但是对于后面的 9 个文件,可以在 CPU 分析开始第一个文件时,就开始将其读入缓冲区,因此后 9 个文件,每个耗时 150 μs。因此总耗时为 150*9+200=1550 μs。
双缓冲区:第一个文件读入缓冲区耗时 100 μs,送到用户区耗时 50 μs,CPU 分析耗时 50 μs,因此第一个文件耗时 200 μs。但是对于后面的 9 个文件,在前面一个文件读入缓冲区后,立马就可以读入,每个耗时 100 μs。因此总耗时为 100*9+200=1100 μs。
32.有两个并发执行的进程 P1 和 P2,现要共享初值为 1 的变量 x。P1 对 x 加一,P2 对 x 减一。加一操作和减一操作的指令序列如下所示。
//加一操作
load R1,x //取 x 到寄存器 R1
inc R1
store x,R1 //将 R1 的内容存到 x
//减一操作
load R2,x //取 x 到寄存器 R2
dec R2
store x,R2 //将 R2 的内容存到 x
两个操作完成后,x 的值____。
A.可能为 -1 或 3 B.只能为 1 C.可能为 0,1 或 2 D.可能为 -1,0,1,2
解答:C
有以下三种情况:
(1)加一和减一顺序执行,结果为 1。
(2)加一取 x=1 和减一取 x=1,最终加一结果 2 覆盖减一结果 0。
(3)加一取 x=1 和减一取 x=1,最终减一结果 0 覆盖加一结果 2。
33.TCP/IP 参考模型中网络层提供的是_______。
A.无连接不可靠的数据报服务 B.无连接可靠的数据报服务
C.有连接不可靠的数据报服务 D.有连接可靠的数据报服务
解答:A
TCP/IP 参考模型从下到上依次是:
链路层:对电信号进行分组并形成具有特殊意思的数据帧,然后以广播的形式通过物理介质发送给接收方。(Mac 地址是由本层确立的)
网络层:定义网络地址、区分网段、子网内 Mac 寻址、对不同子网的数据包进行路由。(IP协议,ARP 协议,路由协议)
传输层:定义端口、标识应用程序身份、实现端口到端口的通信。(TCP 协议,UDP 协议)
应用层:定义数据格式并按照对应的格式解读数据。
34.某通信链路的数据传输速率为 2400bps,采用四相位调制,则该链路的波特率为_______。
A.600 波特 B.1200 波特 C.4800 波特 D.9600 波特
解答:A
波特率为每秒钟传输的码元数。
数据传输速率=波特率*单个调制状态对应的二进制位数
采用四相位调制,因此每个相位有 4 种振幅, 因此一个码元可以携带 = 2 bit 信息,因此波特率=数据传输速率/2=1200 波特。
码元:在数字通信中常常用时间间隔相同的符号来表示一个二进制数字,这样的事件间隔内的信号称为码元。(一个数字脉冲称为一个码元)
35.数据链路层采用选择重传协议(SR)传输数据,发送方发送了 0~3 号数据帧,现已收到 1 号帧的确认,而 0、2 号帧依次超时,则此时需要重传的帧数是_______。
A.1 B.2 C.3 D.4
解答:B
选择重传协议每个帧都有一个计时器,接受方的确认只对该帧进行确认。
36.下列选项中,对正确接收到的数据帧进行确认的 MAC 协议是______。
A.CSMA B.CDMA C.CSMA/CD D.CSMA/CA
解答:D
MAC 协议:多路访问控制协议。
CDMA 即码分多址。是指利用码序列相关性实现的多址通信。
CSMA/CD:带有冲突检测的载波侦听多路存取,是一种媒体访问控制方法
CSMA/CA:带有冲突避免的载波侦听多路存取。发送包是不能检测到信道上的冲突,只能尽量避免。通常 CSMA/CA 利用 ACK 信号来避免冲突的发生,客户端只有收到 ACK 信号后才确认发送的数据送达。
CSMA 一般指 CSMA/CD
37.某网络拓扑如下图所示,路由器 R1 只有到达子网 192.168.1.0/24 的路由。为使 R1 可以将 IP 分组正确地路由到图中所有的子网,则在 R1 中需要增加的一条路由(目的网络,子网掩码,下一跳)是_______。
A.192.168.2.0 255.255.255.128 192.168.1.1
B.192.168.2.0 255.255.255.0 192.168.1.1
C.192.168.2.0 255.255.255.128 192.168.1.2
D.192.168.2.0 255.255.255.0 192.168.1.2
解答:D
路由器 R1 有没有 子网 192.168.2.0/25 和子网 192.168.2.128/25 的路由,因只能增加一条路由,因此需要进行路由聚合。192.168.2.0/25 和 192.168.2.129/25 转为二进制后,前 24 位相同,因此聚合结果为 192.168.2.0/24,R2 与 R1 直接相连的是 192.168.1.2,因此选 D。
38.在子网 192.168.4.0/30 中能接收目的地址为 192.168.4.3 的IP分组的最大主机数为____。
A.0 B.1 C.2 D.3
解答:C
192.168.4.3 是广播地址,因此子网 192.168.4.0/30 不需要再次划分。
192.168.4.0/30 只有两位可用作主机号,且全 0 (网络本身)和全 1(广播地址) 不能使用,因此最大主机数为 2^2-2=2,选 C。
39.主机甲向主机乙发送了一个(SYN=1,seq=11220)的 TCP 段,期望与主机乙建立 TCP 连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的 TCP 段可能是______。
A.(SYN=0,ACK=0,seq=11221,ack=11221)
B(SYN=1,ACK=1,seq=11220,ack=11220)
C.(SYN=1,ACK=1,seq=11221,ack=11221)
D.(SYN=0,ACK=0,seq=11220,ack=11220)
解答:B
在确认段报文中,SYN 和 ACK 都必须是 1,ack 是在 对方发来的 seq 上加一,seq 由乙的 TCP 进程给出。
40.主机甲和主机乙之间已经建立一个 TCP 连接,主机甲向主机乙发送了 3 个连续的 TCP 段,分别包含 300B,400B 和 500B 的有效载荷,第三个段的序号为 900,若主机乙仅接收到第 1 段和第 3 段,则主机乙发送给主机甲的确认序号是_______。
A.300 B.500 C.1200 D.1500
解答:B
主机乙收到第 1 个段和第 3 个段,向主机乙发送对第 1 个段的确认。第三个段的序号为 900,则第二个段的起始序号为 900-400=500,选 B。
二、综合应用题
41.(8分)已知有 6 个顶点(顶点编号为 0~5)的有向带权图G,其邻接矩阵 A 为上三角矩阵,按行为主序(行优先)保存在如下的一维数组中。
4 | 6 | ∞ | ∞ | ∞ | 5 | ∞ | ∞ | ∞ | 4 | 3 | ∞ | ∞ | 3 | 3 |
要求:(1)写出图 G 的邻接矩阵 A。
(2)画出有向带权图 G
(3)求图 G 的关键路径,并计算该关键路径的长度。
知识点:关键路径:从源点到汇点的所有路径中,具有最大路径长度的路径。
解答:(1)图 G 的邻接矩阵 A 对应表如下:(横向依次为 0,1,2,3,4,5;纵向依次为0,1,2,3,4,5 )
∞ | 4 | 6 | ∞ | ∞ | ∞ |
∞ | ∞ | 5 | ∞ | ∞ | ∞ |
∞ | ∞ | ∞ | 4 | 3 | ∞ |
∞ | ∞ | ∞ | ∞ | ∞ | 3 |
∞ | ∞ | ∞ | ∞ | ∞ | 3 |
∞ | ∞ | ∞ | ∞ | ∞ | ∞ |
(2)有向带权图 G 如下所示:
(3)
顶点 | 最早发生时间e(i) | 最晚发生时间 l(i) | l(i)-e(i) |
0 | 0 | 0 | 0 |
1 | 4 | 4 | 0 |
2 | 9 | 9 | 3 |
3 | 13 | 13 | 0 |
4 | 12 | 13 | 1 |
5 | 16 | 16 | 0 |
所以关键路径为:01235,长度为16。
42.(15分)一个长度为 L(L>=1)的升序序列 S,处在第 L/2 个位置的数称为 S 的中位数。例如,若序列 S1=(11,13,15,17,19),则 S1 的中位数是 15,两个序列的中位数是含他们所有元素的升序序列的中位数。例如,若 S2=(2,4,6,8,10),则 S1 和 S2 的中位数是 11。现有两个等长升序序列 A 和 B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列 A 和 B 的中位数。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C、C++ 或 Java 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
解答:(1)假设序列 A 的中位数为 a,序列 B 的中位数为 b,序列长度为 n 。若 a=b,则 a 即为所求;若 a!=b,若 a>b,则舍弃序列 A 中区间 [0,n/2] 以外的元素和序列 B 中区间 [n/2,n]以外的元素,然后通过舍弃中位数使两区间内元素个数为偶数,再获得新的两个区间的中位数,重复此操作直至只剩下一个元素 ,此时两个元素中的较大者即为所求。若 b<a,同理。
(2)
class Solution{
public int findMiddle(int[] A, int[] B){
int lA=0;
int rA=A.length-1;
int lB=0;
int rB=A.length-1;
while(lA!=rA){
int midA=lA+(rA-lA+1)/2;
int midB=lB+(rB-lB+1)/2;
if(A[midA]==B[midB]){
return A[midA];
}else if(A[midA]>B[midB]){
rA=midA;
lB=midB;
if((rA-lA+1)%2!=0){
rA--;
}
if((rB-lB+1)%2!=0){
lB++;
}
}else{
lA=midA;
rB=midB;
if((rA-lA+1)%2!=0){
lA++;
}
if((rB-lB+1)%2!=0){
rB--;
}
}
}
return Math.max(A[lA],B[lB]);
}
}
(3)时间复杂度为 O();此空间复杂度为 O(1)
43. (11分)假定在一个 8 位字长的计算机中运行一下 C 程序段:
unsigned int x=134;
unsigned int y=246;
int m=x;
int n=y;
unsigned z1=x-y;
unsigned z2=x+y;
int k1=m-n;
int k2=m+n;
若编译器编译时将 8 个 8 位寄存器 R1~R8 分配给变量 x、y、m、n、z1、z2、k1 和 k2。青回答一下问题:
(1)执行上述程序段后,寄存器 R1、R5 和 R6 的值分别是多少(用 16 进制表示)?
(2)执行上述程序段后,变量 m 和变量 k1 的值是多少(用 10 进制表示)?
(3)上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算是否能使用用一个加法器辅助逻辑电路实现?简述理由
(4)计算机内部如何判断带符号整数加/减运算结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果发生溢出?
知识点:a-b=a+(-b)
[a+b]补=[a]补+[b]补
解答:(1)R1 保存变量 x 的值,x=134 即 86H。y =246=F6H。
R5 保存 z1 即 x-y 的值,[x-y]补=[x]补+[-y]补=1000 0110B+0000 1010B=1001 0000B,不产生进位,即 R5 中保存的是 90H
R6 保存 z2 及 x+y 的值,[x+y]补=[x]补+[y]补=1000 0110B+1111 0110B=0111 1100B,产生进位 1,即 R6 种保存的是 7CH
(2)m 用二进制表示为1000 0110B,首位符号位为 1,因此转化为 10 进制是 -122。
k1 为 m-n 的结果,因 [m-n]补=[m]补+[-n]补=1000 0110B+0000 1010B=1001 0000B,因此 k1 的值为 -112。
(3)可以,x-y 可以通过 x+(-y) 实现,此外,对于无符号数和有符号数,加法运算过程基本一致。
(4)若加法器最高位的进位与此高位的进位不同,则出现溢出;若输入端符号一致,输出端符号与输入端不一致,则出现溢出。
执行 k2=m+n; 时 溢出。
44.(12 分)某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16MB,主存(物理)空间地址大小为 1MB,页面大小为 4KB;Cache 采用直接映射方式,共 8 行;主存与 Cache 之间交换的块的大小为 32B,系统运行到某一时刻时,页表的部分内容和 Cache 的部分内容,分别如题 44-a 和题 44-b 所示,图中页框号和标记字段的内容为 16 进制形式。
请回答一下问题:
(1)虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?
(2)使用物理地址访存 Cache 时,物理地址应划分为哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3)虚拟地址 001C60H 所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否 Cache 命中?要求说明理由。
(4)假设该机配置一个四路组相联的 TLB 共可存放 8 个页表项,若其当前内容(16进制)如图 44-c 所示,则此时虚拟地址 024BACH 所在的页面是否存在主存中?要求说明理由。
解答:(1)虚拟地址空间大小为 16MB=2^4*2^10*2^10B=2^24B,按字节编址,因此虚拟地址共有 24 位。页面大小为 4KB=2^2*2^10=2^12B,因此高 12 位表示虚页号。
物理地址空间大小为 1MB=2^20B,按字节编址,因为物理地址有20位。页面大小为 4KB=2^2*2^10=2^12B,因此,高 8 位表示页框号。
(2)当采用直接映射方式时,物理地址被划分成 主存字块标记,Cache 字块标记和字块内地址三项。因主存页面大小为 2^12B,因此主存字块标记为高 12 位;因 Cahce 共 8 行, Cache 字块标记占中间 3 位;因块大小位 32B=2^5B,字块内地址 占低 5 位。
(3)虚拟地址 001C60H 高 12 位虚页号为 001H,001H 处的页表项为 1,因此,虚拟地址 001C60H 所在页面在主存中。
虚页号 001H 对应页框号为 04H,因此对印的物理地址为 04C60H。
物理地址 04C60H 即 0000 0100 1100 0110 0000B,其对应 Cache 字块标记为 011B 即 3 ,当行号为 3 时,有效位为 1,对应标记为 105H 与主存字块标记 04C 不相等,因此未命中。
(4)TLB 采用四路组相连,因此 TLB 被分为 8/4=2^1 个组,12 位虚页号中,高 11 位为TLB 标记,低 1 位为组标记。虚拟地址 024BACH 对应虚页号为 024H,TLB 标记为 000 0001 0010B 即 012H,组标记为 0B。在 TLB 中查询到对应页框号为 1F,及其对应物理地址为 1FBACH。此时访问 TLB 命中,因此虚拟地址 024BACH 所在页面在主存中。
45.(8分)某银行提供 1 个服务窗口与 10 个供顾客等待的座位,顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:
cobegin{
process 顾客i{
从取号机获取一个号码;
等待叫号;
获取服务;
}
process 营业员{
while(true){
叫号;
为顾客服务;
}
}
}coend
请添加必要的信号量和P、V(或 wait(),signal())操作,实现上述过程中的互斥与同步。要求写出完成过程,说明信号量的含义并赋值。
知识点:一般用 mutex 表示互斥信号量。P操作意味着请求分配一个资源,V操作意味着释放一个资源;semaphore 表示信号量
解答:互斥资源:取号机,一次只能有一个人取号;服务员的服务,一次只有一个顾客在被服务中。
同步问题:椅子。
cobegin{
semaphore emptyChairs=10; //空闲椅子数
semaphore mutex=0; //取号机是否被占用
semaphore service=0; //营业员是否在服务中
semaphore pocess=0; //非空椅子数量
process 顾客i{
P(emptyChair); //等待空椅子
P(mutex); //等待取号
从取号机获取一个号码;
V(mutex); //其他人可以取号
V(pocess); //占据椅子
P(service); //等待服务
获取服务;
V(service); //服务结束
}
process 营业员{
while(true){
P(pocess); //等待椅子被占据
V(emptyChair); //服务是该椅子不被占据
叫号;
为客户服务;
}
}
}coend
46.(7 分)某文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件。请回答一下问题:
(1)在连续,链式,索引三种文件的数据块组织方式中,哪种更合适?要求说明理由。为定位文件数据块,需要FCB 中设计哪些相关描述字段。
(2)为快速找到文件,对于 FCB,是集中储存好,还是与对应的文件数据块连续储存好?要求说明理由。
知识点:FCB——文件控制块。
解答:(1)使用连续的组织方式更为合适,因为磁盘寻道时间较短,文件随机访问效率更高。
应包含起始块号和块数两个字段。
(2)集中储存。寻找文件时直接遍历FCB对应的块即可。此时磁头移动和磁盘 I/O 访问次数较少。
47.(9 分)某主机的 MAC 地址为 00-15-C5-C1-5E-28,IP 地址为 10.2.128.100(私有地址)。图 题47-a 时网络拓扑,图 题47-b 是该主机进行 Web 请求的 1 个以太网数据前 80B 的 16 进制及 ASCII 码内容。
请参考图中数据回答以下问题。
(1)Web 服务器的 IP 地址是什么?该主机的默认网关的 MAC 地址是什么?
(2)该主机在构造 题47-b 图时,使用什么协议确定目的 MAC 地址?封装该协议请求报文的以太网帧的目的 MAC 地址是什么?
(3)假设 HTTP/1.1 协议以持续的非流水线方式工作,一次请求-响应时间为 RTT,rfc.html 页面引用 5 个 JPEG 的小图像,则从发出题 47-b 图中的 Web 请求开始到浏览器收到全部数据为止,需要多少个 RTT?
(4)该帧所封装 IP 分组经过路由器 R 转发时,需修改 IP 分组头中的那些字段?
知识点:持续的非流水线方式:全部文件共用一条 TCP 连接,但每个文件的请求文件过程不并行即客户机在收到前一个访问的响应后才发出下一个请求。
解答:(1)以太网帧的数据部分即为 IP分组,由图知,以太网帧前 6B+6B+2B=14B 为以太网头,IP 分组前 16B 为 IP 分组中目的 IP 地址前面的部分,因此 从 第 14B+16B=30B 开始的四个字节为 目的 IP 地址,为 40.aa.62.20H,即 64.170.98.32
源 MAC 地址为前 6 个字节,因此为 00-21-27-21-51-ee。
(2)ARP协议(ARP 协议用于解决 IP 地址到 MAC 地址的映射问题)。
目的 MAC 地址为 FF-FF-FF-FF-FF-FF(以广播的方式发送 ARP 请求分组)
(3)6 个RTT。1 个用来请求 Web 页面,剩余 5 个用来请求图片。
(4)源 IP 地址修改为 65.0C.7B.0F(即 101.12.123.15);TTL 减一;头部校验和重新计算;若 IP 分组的长度超过输出链路的 MTU (最大传输单元,Maximum Transmission Unit),则总长度字段,标志字段,片偏移字段也要发生改变。