1.下列程序段的时间复杂度是_______。
count=0;
for(k=1;k<=n;k=k*2)
for(j=1;j<=n;j++)
count++;
A.O() B.O(n) C.O() D.O(n*n)
解答:C
外层循环的时间复杂度为 O() ,内层循环的时间复杂度为 O(n),因此结果为C。
2.假设栈初始为空,将中缀表达式 a/b+(c*d-e*f)/g 转换为等价的后缀表达式的过程中,当扫描到 f 时,栈中的元素依次是_____。
A.+(*- B.+(-* C./+(*-* D./+-*
解答:B
根据优先级计算, a/b+,当前符号是 +, / 优先级比 + 高,且后面是 + ,无更高优先级,因此计算 a/b
a/,/ 入栈
a/b+, /出栈, 计算 a/b,+ 入栈
a/b+(,(入栈
a/b+(c*,* 入栈
a/b+(c*d-, *出栈,计算 c*d,-入栈
a/b+(c*d-e*f *入栈
因此选B
3.循环队列放在一维数组 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.队空:end2==(end1+1)mod m 队满:end1==(end2 +1)mod m
D.队空:end1==(end2 +1) mod m 队满:end2==(end1+1)mod (m-1)
解答:A
假设队头为 A0,只在 end1 处出队,只在 end2 处入队。 end1 指向队头元素,因此出队时 end1 是在出队后后移一个单位;end2 指向队尾元素的后一个位置,因此 end2 是在入队后后移一个位置。因此初始时,end1=end2。
若只在 end2 处入队直至队满。此时 end1 指向 A[0],end2 指向 A[m-1],end1== (end2+1)mod m。
综上所述,选 A
4.若对如下二叉树进行中序线索化,则节点 x 的左、右线索分别是_____.
A.e、c B.e、a C.d、c D.b、a
解答:D
中序遍历得到序列 debxac,因此左右节点的线索分别是 b、a,选D
5.将森林 F 转换为对应的二叉树 T,F 中叶节点的个数等于______。
A.T 中叶节点的个数 B.T 中度为 1 的节点的个数
C.T 中左孩子指针为空的节点个数 D.T 中右孩子节点为空的个数
解答:
森林 F 转换为对饮二叉树 T 时,左子节点指向左边第一个孩子,右子节点指向兄弟节点,故选 C。
6. 5 个字符有如下四种编码方案,不是前缀编码的是_____.
A.01,0000,0001,001,1 B.011,000,001,010,1
C.000,001,010,011,100 D.0,100,110,1110,1100
解答:D
前缀编码:如果在一个编码方案中,任何一个编码都不是其他任何一个编码的前缀(最左子串),则该编码称为前缀编码。
选项 D 中 110 是 1100 的前缀,因此该方案不是前缀编码
7.对如下所示有向图进行拓扑排序,得到的拓扑序列可能是____。
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
解答:D
A 项 和 B 项 ,4 应该在 2 之前
C 项,6 应当在 5 之前
8.用哈希(散列)方式处理冲突(碰撞)时可能出现堆积(聚集)现象。下列选项中,会受堆积现象直接影响的是_____。
A.存储效率 B.散列函数 C.装载(装填)因子 D.平均查找长度
解答:D
哈希表的存储效率:哈希表中的元素和存储空间的比例。不会收到堆积现象的直接影响。
散列函数明显不会收到直接影响。
装载因子指的哈希表中已使用的元素个数与哈希表的大小之比。
平均查找长度:找到一个特定元素的期望关键字比较次数。
9.在一颗具有 15 个关键字的 4 阶 B 树中,含关键字的节点个数最多是_______。
A.5 B.6 C.10 D.15
解答:D
一颗 M 阶 B 树的定义如下:
(1)每个节点最多有 m-1 个关键字
(2)根节点最少可以有 1 个关键字
(3)非根节点至少有 Math.ceil(m/2)-1个关键字
(4)每个节点中的关键字都按照从小到大排序,每个关键字的左子树中的所有关键字均小于他,每个关键字的右子树的所有关键字均大于他
(5)所有叶子节点都位于同一层。
节点数目最多时,每个节点的关键字最少,根节点含有 2 个关键字,非根节点至少有Math.ceil(4/2) -1=1 个关键字。
第一层,根节点。本层需要至少 1 个关键字
第二层,2 个节点。本层需要至少 2 个关键字
第三层,4 个节点。本层需要至少 4 个关键字
第四层,8 个节点。本层需要至少 8 个关键字。本层及以上需要至少 15 个关键字。故最多有8 +4+2+1=15 个节点。
10.用希尔排序方法对一个数据序列进行排序时,若第一趟的排序结果为 9,1,4,13,7,8,20,23,15,则该趟排序所采用的增量(间隔)可能是_____。
A.2 B.3 C.4 D.5
解答:
间隔为 2 时,9,4,7,20,15 无序,排除。
间隔为 3 时,9,13,20有序,1,7,24 有序,4,8,15 有序,因此可能是 2。选 B。
11.下列选型中,不可能是快速排序第 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
解答:C
A 项, 第一趟选 3,第二趟选 6
B 项,第一趟选 2,第二趟选 9
C 项,第一趟选 9,第二趟选无可选,因此选 C
12.程序 P 在机器 M 上的执行时间是 20 秒,遍历优化后,P 执行指令数减少到原来的 70%,而 CPI 增加到原来的 1.2 倍,则 P 在 M 上的执行时间为______。
A.8.4s B.11.7s C.14s D.16.8s
解答:D
20*0.7*1.2=0.84*20=16.8s
13.若 x=103,y=-25,则下列表达式采用 8 位定点补码运算是实现时,会发生溢出的是______。
A.x+y B.-x+y C.x-y D.-x-y
解答:C
8 位定点补码表示范围是 -128~127。故选 C
14.float 型数据常用 IEEE754 单精度浮点格式表示。假设两个 float 型变量 x 和 y 分别存放在 32 位寄存器 f1 和 f2 中 ,若 (f1)=CC90 0000H,(f2)=B0C0 0000H,则 x 和 y 之间的关系是____。
A.x C.x>y 且符号相同 D.x>y 且符号不同 解答:A IEEE754 单精度浮点格式表示: 1 位符号位,8 位指数位(真正指数值位 E-127),23 位尾数。 f1=CC90 0000H 对应二进制为 1100 1100 1001 0000 0000 0000 0000 0000B f2=B0C0 0000H 对应二进制为 1011 0000 1100 0000 0000 0000 0000 0000B f1 于 f2 符号位均为 1,因此符号相同。 f1 的指数部分为 1001 1001B即 153 ,真正指数位为 153-127= 26,尾数部分为 0010B,因此 f1 为 -1.001*2^26。 f2 的指数部分为 0110 0001B,真正指数为 0110 0001B-0111 1111B=1110 0010B 即 -30,因此 f2 为 -1.1*2^-30 综上所述,f1 15.某容量为 256MB 的存储器由若干 4M*8 位的 DRAM 芯片构成,该 DRAM 的地址引脚和数据引脚总数是_____. A.19 B.22 C.30 D.36 解答:A DRAM (Dynamic Random Access Memory)即动态随机存取存储器。 地址引脚主要用于传输内存地址信号,控制芯片的读写操作。 数据引脚主要用于传输数据信号,负责传输数据的输入于输出。 芯片容量为 4M*8 即 2^22 * 8。因此需要 22 条地址线,8 条数据线。DRAM 芯片采用地址复用技术(地址分两次发送,是地址线条数降低)的,因此仅需 22/2=11 条地址线和 8 条数据线。总数为 19。 16.采用指令 Cache 和 数据 Cache 分离的主要目的是_______。 A.降低 Cache 的缺失损失 B.提高 Cache 的命中率 C.降低 CPU 平均访存时间 D.减少指令流水线资源冲突 解答:D 指令 Cache 和数据 Cache 分离后,取值和取数在不同的Cache 中寻找,那么指令流水线中的取值部分和取数部分可以很好的避免冲突。 17.某计算机有 16 个通用寄存器,采用 32 位定长指令字,操作码字段(含寻址方式位)为 8 位,Store 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则 Store 指令中的偏移量的取值范围是_____。 A.-32768~+32767 B.-32767~+32768 C.-65536~+65535 D.-65535~+65536 解答: 基址寻址方式 操作码字段占 8 位,因此操作数占 32-8=24 位,源操作数采用寄存器直接寻址,有 16=2^4 个通用寄存器,因此需要 4 位来表明源操作数的寄存器和基址寄存器,剩余 24-4-4=16 位来表明偏移量。16 位补码表示范围为 B。 18.某计算机采用微程序控制器,共有 32 条指令,公共的取指令微程序包含 2 条微指令,各指令对应的微程序平均由 4 条微指令产生,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段至少为____。 A.5 B.6 C.8 D.9 解答: 下地址字段法:下断地址指明下一条执行的微指令地址。 有 32 条指令,每个指令由 4 条微指令产生,因此需要 32*4=2^7= 128条指令。公共的取指令微程序包含 2 条 微指令。因此一共需要 130 条微指令,至少要有 8 位。 19.某同步总线采用数据线和地址线复用方式,其中地址/数据线有 32 根,总线时钟频率为 66MHz,每个时钟周期传输两次数据(上升沿和下降沿各传送一次数据),则该总线的最大数据传输速率(总线带宽)为______ A.132MB/s B.264MB/s C.528MB/s D.1056MB/s 解答:C 地址/数据线有 32 根,则每次传送 4B。总线时钟频率为 66MHz,每个时钟周期传输两次,因此1 s 内传输 132M 次。则总线带宽为 132M*4B/s=528MB/s。 20.一次总线事务中,主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或吸入多个数据。这种总线事务方式称为______。 A.并行传输 B.串行传输 C.突发传输 D.同步传输 解答:C 并行传输,传输中有多个数据位同时在设备之间进行的传输. 串行传输,数据的二进制代码在一条物理信道上以位为单位按时间顺序逐位传输的方式. 突发传输,在一个总线周期内,可以传输多个存储地址连续的数据,即一次传输一个地址和一批地址连续的数据. 同步传输,传输的过程由统一的时钟控制. 21.下列有关 I/O 接口的叙述中,错误的是____. A.状态端口和控制端口可以合用一个寄存器 B.I/O 接口中 CPU 可访问的寄存器称为 I/O 端口 C.采用独立编址方式时,I/O 端口地址和主存地址可能相同 D.采用统一编址方式时,CPU 不能用访存指令访问 I/O 端口 解答: A项,I/O 端口的状态端口是用来存放外设或者接口部件本身状态的寄存器,通过接口,状态信息可以从外设传送到CPU. I/O 端口的控制端口是用来控制外设或者接口部件的.通过接收来自 CPU 的信号来控制外设的工作状态.由于 控制端口和状态端口的传输方向相反以及 CPU 对他们的访问时间通常是错开的,因此可以合用一个寄存器. B 项 正确 C 项,独立编址方式,I/O 地址空间和存储器地址空间分别编址.I/O 端口地址和主存地址可能相同 D 项,统一编址方式,I/O 地址空间和存储器地址空间统一编址.此时,将外设结构中的 I/O 寄存器与主存单元一样看待,每个端口占据一个存储单元地址.因此 CPU 可以使用访存指令访问 I/O 端口. 22.若某设备中断请求的响应和处理时间为 100ns,每 400ns 发出一次中断请求,中断响应所允许的最长延迟时间为 50ns, 则在该设备持续工作过程中,CPU 用于该设备的 I/O 时间占整个 CPU 时间的百分比至少是_____. A.12.5% B.25% C.37.5% D.50% 解答:B 每 400ns 发出一次中断请求,这意味着 400ns 内可以处理一个中断,且处理时间为 100ns,因此是 100ns/400ns=25% 23.下列调度算法中,不可能导致饥饿现象的是______. A.时间片轮转 B.静态优先数调用 C.非抢占式短作业优先 D.抢占式短作业优先 解答:A 饥饿现象:某个进程无限等待或因等待导致该进程完成时该进程已失去意义. B项,优先级低的可能产生饥饿现象 C项和D项 ,长作业可能产生饥饿现象. 24.某系统有 n 台互斥使用的同类设备,三个并发进程分别需要 3,4,5 台设备,可确保系统不发生死锁的设备数 n 至少为_____. A.9 B.10 C.11 D.12 解答:B 至少需要 2+3+4+1=10 台设备,故选B 25.下列指令中,不能再用户态执行的是______. A.trap 指令 B.跳转指令 C.压栈指令 D.关中断指令 解答:D trap 指令用于处理信号,当特定的信号被接收时,trap 命令可以执行特定的命令 D 项是特权指令只能在核心态执行. 26.一个进程的读磁盘操作完成后,操作系统针对该进程必做的是_____. A.修改进程状态为就绪态 B.降低进程优先级 C.给进程分配用户内存空间 D.增加进程时间片大小 解答:A 读操作未完成时,该进程是阻塞态,读操作完成后,该进程应变更为就绪态. 27.现有一个容量为 10GB 的磁盘分区,磁盘空间以簇(cluster)为单位进行分配,簇的大小为 4KB,采用位图法管理该分区的空闲空间,即用一位(bit) 标识一个簇是否被分配,则存放该位图所需簇的个数是_____. A.80 B.320 C.80K D.320K 解答:A 容量为 10GB 即10*2^20KB,簇的大小为 4KB 即 2^15b,因此一共有 10*2^20/4=5*2^19 个簇,即共需要 5*2^19 位, 因此需要 (5*2^19)/(2^15)=5*2^4=80 个簇. 28.下列措施中,能加快虚实地址转换的是_____. I.增大块表(TLB)的容量 II.让页表常驻内存 III.增大交换区(swap) A.I B.II CI,II D.II,III 解答:C 增大块表容量,块表的表项增多,平均转换时间变低 让页表常驻内存可以省去将不在内存中的页表从磁盘中调入的过程. 交换区:当系统的物理内存不够用时,可以把硬盘内存中的一部分空间释放以供当前程序运行.而那些被释放的空间来自一些很长时间都不曾操作过的程序,这些程序会被移至交换区,等要运行时,再从交换区中恢复保存的数据到内存中. 29.在一个文件被用户进程首次打开的过程中,操作系统需要做的是_____ A.将文件内容读到内存中 B.将文件控制块读入内存 C.修改文件控制块的读写权限 D.将文件的数据缓冲区首指针返回给用户进程 解答:B A项,在进行读写操作时,才会将文件内容读到内容中 C项明显错误 D项一般在文件读,写和定位操作时将文件缓冲区首指针返回给用户进程 30.在页式虚拟存储管理系统中,采用某些置换算法,会产生 Belady 现象,即进程的缺页次数会随着分配给该进程的页框个数的增加而增加.下列算法中,可能会出现 Belady 现象的有_____ I.LRU 算法 II.FIFO 算法 III.OPT 算法 A.II B.I,II C.I,III D.II,III 解答:A LRU (last recently used) 算法,最近最少使用算法 OPT(Optimal Scheduling Algorithm)算法,最佳页面替换算法 31.一个关于管道(pipe)通信的叙述中,正确的是____ A.一个管道可实现双向数据传输 B.管道的容量仅受磁盘容量大小限制 C.进程对管道进行读操作和写操作都可能被阻塞 D.一个管道只能有一个读进程或一个写进程对其操作 解答:C A项,一个管道可以实现双向数据传输,但不能两个方向同时进行 B项,管道的容量通常为内存上的一页,其大小并不受磁盘容量大小限制 C项,当管道满时,写进程会被阻塞;当管道为空时,读进程会被阻塞 D项,可以同时有多个读进程比如该进程的多个子进程 32.下列选项中,属于多级页表优点的是____. A.加快地址变换速度 B.减少缺页中断次数 C.减少页表项所占字节数 D.减少页表所占连续空间 解答:D A项,多级页表会减慢地址变换速度. B项,不会减少缺页中断次数,可能会增多 C项,页表项所占字节数可能增多 D项,多级页表在页表太大时,通过分级控制页表大小,减少所占连续空间 33.在 OSI 参考模型中,直接为会话层提供服务的是_____ A.应用层 B.标识层 C.传输层 D.网络层 解答:C OSI 七层参考模型从下到上依次为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 34.某以太网拓扑及交换机当前转发表如下图所示,主机 00-e1-d5-00-23-a1 向主机 00-e1-d5-00-23-c1 发送一个数据帧,主机 00-e1-d5-00-23-c1 在收到该帧后, 向主机 00-e1-d5-00-23-a1 发送一个确认帧,交换机对这两个帧的转发端口分别是_____. A.{3} 和 {1} B.{2,3} 和 {1} C.{2,3}和{1} D.{1,2,3}和{1} 解答:B 转发数据帧时,由于不知道主机 00-e1-d5-00-23-c1 所在,会通过除 1 外所有端口转发;转发确认帧时,由于在转发数据帧时,得到了主机 00-e1-d5-00-23-a1 所在,直接转发即可. 35.下列因素中,不会影响信道数据传输速率的是______ A.信噪比 B.频率宽带 C.调制速率 D.信号传播速率 解答:D 信噪比:信噪比用来表示接收到的有用信号强度与接收到的干扰信号(噪声)强度的比值. 香农定理:在有随机热噪声的信道上传输数据信号时,数据传输率 Rmax 与信道带宽 B,信噪比 S/N 的关系为 由香农定理可知, A,B会影响信道传输速率 C 项调制速率指的是信号在调制过程中变化的速率即单位时间内信号变化次数.调制速率会限制数据的传输速率. D 项信道数据传输速率为信号的上传速率,与信号传播速率无关 36.主机甲与主机乙之间使用后退 N 帧协议(GBN)传输数据,甲的发送窗口尺寸为 1000,数据帧长为 1000 字节,信道带宽为 100Mbps,乙每收到一个数据帧立即利用一个短帧(忽略其传输时延),进行确认,若 甲乙之间的单向传播时延是 50ms,则甲可以达到的最大平均传输速率为_____ A.10Mbps B.20Mbps C.80Mbps D.100Mbps 解答:C GBN (Go-Back-N) 协议,发送方发送 N个分组,无需确认,但发送方未被确认的分组数不能超过 N. 发送窗口尺寸未 1000,单个数据帧长度为 1000B,因此单次最多未被确认的字节数为 1000*1000B=1MB.甲发送 1000b 的数据需要 1000*8/100*1000*1000=0.08 ms, 收到该帧的确认帧需要经过 100.08ms.因此甲100ms内最多发送 1MB 数据,因此其最大传输速率为 10MBps=80Mbps 37.站点 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 解答: B CDMA (code division multiple access)码分多址 (1) 2 0 2 0 0 -2 0 -2 0 2 0 2 A 1 1 1 1 -1 -1 -1 -1 1 1 1 1 B 1 -1 1 -1 1 -1 1 -1 -1 1 -1 1 因此 A发送的是 101 (2)将其分为三组,四个一组,做内积运算 (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 所以A发送的是 101 38.主机甲和主机乙已经建立了 TCP 连接,甲始终以 MSS=1KB 大小发送数据,并一直有数据发送;乙每接收到一个数据段就会发出一个接收窗口为 10KB 的确认段.若甲在 t 时刻发生超时时的拥塞窗口为 8KB ,则从 t 时刻起,不再发生超时的情况下,经过 10 个 RTT后,甲的发送窗口是_____. A.10KB B.12KB C.14KB D.15KB 解答:A MSS(maximum segment size) 最大段大小 RTT=0, 发送窗口:1KB RTT=1, 发送窗口:2KB RTT=2, 发送窗口:4KB RTT=3, 发送窗口:5KB RTT=4, 发送窗口:6KB ... RTT=8, 发送窗口:10KB RTT=3 此后由于接收窗口大小为 10KB,一直保持 10KB 39.下列关于 UDP 的叙述中,正确的是_____ I.提供无连接服务 II.提供复用/分用服务 III.通过差错校验,保障可靠数据传输 A.I B.I,II C.II,III D.I,II,III 解答:B UDP 提供无连接,不可靠的服务. 复用/分用服务是传输层协议必须提供的服务.复用是指多个应用层进程可同时使用下面运输层的服务.分用是指把收到的信息分别交付给上面应用层中相应的进程. 40.使用浏览器访问某大学的 Web 网页时,不可能使用到的协议是_____ A.PPP B.ARP C.UDP D.SMTP 解答:D PPP 协议,点对点协议,是一种广泛应用于网络接入的协议. ARP 地址解析协议,在不知道某主机的MAC 地址时,可能会用到. DNS 协议基于UDP 协议,因此可能会用到 UDP 协议 SMTP 协议只有在向邮件服务器发送发送邮件时才会用到. 41.二叉树的带权路径长度(WPL)是二叉树中所有叶节点的带权路径长度之和。给定一颗二叉树 T,采用二叉链表存储,节点结构如下: 其中叶节点的 weight 保存该节点的非负权值。设 root 为指向 T 的根节点的指针,请设计求 T 的 WPL 的算法,要求: (1)给出算法的基本设计思想 (2)使用 C 或 C++语言,给出二叉树节点的数据类型定义 (3)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。 解答:(1)递归遍历二叉链表。对于某个节点,若该节点左子节点与右子节点为空,返回当前层数与非负权值之积,否则返回左子节点下叶节带权路径长度与右边子节点带权路径长度之和。 (2) (3) 42. 某网络中的路由器运行 OSPF 路由协议,题 42 表是路由器 R1 维护的主要链路状态信息(LSI),题 42 图是根据题 42 表及 RI 的接口名构造出的网络拓扑。 请回答一下问题: (1)本题中的网络可以抽象为数据结构中的哪种逻辑结构? (2)针对题 42 表中的内容,设计合理的链式存储结构,以保存题 42 表中的链路状态信息(LSI),要求给出链式存储结构的数据类型定义,并画出对应题 42 表的链式存储结构示意图(示意图可以仅用 ID 表示节点) (3)按照迪杰斯特拉算法(Dijkstra)算法的策略,依次给出 R1 到题 42 图中子网 192.1.x.x 的最短路径及费用 解答:(1)无向图 (2) 链式存储结构: (3) R1->R2->192.1.6.0/24 R1->R2->R4->192.1.5.0/24 43.请根据题 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) L1 (2)接口 L0,TTL 为 61 (3)增加一条 Prefix 为 0.0.0.0/0 ,Metric 为 10 的特殊直连网络。 44.某程序中有如下循环代码段 P :“for(int i=0;i 执行上述代码的计算机 M 采用 32 位定长指令字,其中分支指令 bne 采用如下格R式。 OP 为操作码;Rs 和 Rd 为寄存器编号;OFFSET 为偏移量,用补码表示。请回答以下问题,并说明理由。 (1)M 的存储器编址单位是什么? (2)已知 sll 指令实现左移功能,数组 A 中每个元素占多少位? (3)表中 bne 指令的 OFFSET 字段的值是多少?已知 bne 指令采用相对寻址方式,当前 PC 内容为 bne 指令,通过分析表中指令地址和 bne 指令内容,推断出 bne 指令的转移目标地址计算公式。 (4)若 M 采用如下 “按序发射,按序完成” 的 5 级流水指:IF(取值),ID(译码及取值)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不会采取任何转发措施,分支指令的执行均引起 3 个时钟周期的阻塞,则 P 中哪些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令 1 的执行不会因为与指令 5 的数据相关而发生阻塞? 知识点:数据冒险:当指令在流水线中重叠执行时,后面的指令需要用到前面指令的执行结果,而前面的指令尚未写回而造成的冲突。 控制冒险:现在想要执行哪条指令是由之前指令的运行结果决定,而现在那条指令之前的指令结果还未产生,就产生控制冒险。 解答:(1)一条指令长度为 32 位,相邻两个地址相差 4,则单个地址长度为 8 位。因此存储器编址单位是 字节。 (2)编号 1 中将 R2 的内容(i 的值)左移两位得结果存放在 R4 中;编号 2 将 R3 的内容(数组 A 首地址)与 R4 的内容求和结果放置在 R4 中;编号 3 将取 R4 的内容指向地址放入 R5 中;编号 4 将 R5 中的内容和 R1 中的内容求和放置在 R1 中。因此 编号 4 是 sum+=A[i],编号 3 是取 A[i] 的值,编号 2 是求 A[i] 地址,编号 1 是计算当前 A[i] 需要的偏移量,左移两位,即*4 ,因此 每两个 数组元素间相差 4 个编址单位,即数组 A 中每个元素占 32 位 。 (3)OFFSET 字段为 FFFAH,因此其值为 -6。 当指令执行到 bne 指令时,首先,PC 中的内容自动加 4(指向下一条指令),内容为 08048118H 与目标地址相差 18H 即 24,而 24/6=4,因此 bne 指令的转移目标地址计算公式为 (PC)+4+OFFSET*4。 (4)编号为 2,3,4,6 的指令会由于数据相关而发生流水线阻塞。 编号为 6 的指令会发生控制冒险。 指令 6 属于分支指令,会引起 3 个时钟周期的阻塞,消除了数据相关,因此指令 1 的执行不会因为与指令 5 的数据相关而发生阻塞。 45.假设对于 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 各多少次? R1(SUM)=0,R2(i)=0,N=1000 解答:(1)当 i=1000 时,不满足条件,退出循环,因此 R2 的值为1000。 (2)指令 Cache 与数据 Cache 的大小一致。指令 Cache 共有 16 行,每行 32 字节,因此指令 Cache 的大小为 16*32B=512B。 程序 P 共有 6 条指令,每条指令占4B,总大小为 24B,大小小于一个块的大小 32B。因此可以一次将全部内容调入Cache 中。程序 P 有 6 条指令,循环会执行 1000 次,因此会执行 1000*6条指令,除了第一条指令执行时,不在 Cache 中,其余指令均命中,因此命中率为 5999/6000=99.98%。 (3)指令 4 可能发生溢出异常,求 sum+=A[i] 时可能溢出。 指令 3 执行时可能发生缺页异常,A[i] 可能不在 Cache 中。 读磁盘 1 次,将数组元素所在页面调入内存中。读 TLB 1001 次,每访问一次内存数据,就会查 TLB 一次,除元素 A[0] 会因为缺页访问 TLB 2 次外,其余元素均访问 TLB 一次。 46.文件 F 由 200 条记录组成,记录从 1 开始编号。用户打开文件后,欲将内存中的一条记录插入到 F 中,作为其第 30 条记录。请回答一下问题,并说明理由。 (1)若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件 F 存储区域前后均有足够的磁盘空间,则完成上述插入操作最少需要访问多少次磁盘块?F 的文件控制块内容会发生哪些改变? (2)若文件系统采用链式分配方式,每个磁盘块存放一条记录和一个链接指针 ,则完成上述插入操作最少需要访问多少次磁盘块?若每个存储块大小为 1KB,其中 4 字节存放链接指针,则该文件系统支持的文件最大长度是多少? 解答:(1) 将前 29 条记录前移时访问磁盘块次数最少。若读出和存放一条记录各算一次访问,则共需 29*2+1=59 次访问。 文件控制块的起始块号和文件长度会发生改变。 (2)遍历前 29 条记录需要读出 29 次,修改第 29 条记录和写入该条记录各需一次,因此修改最少需要访问 31 次磁盘块。 4 字节存放链接指针,则最多有 2^32=4G 个存储块,每个存储块数据部分有 1024B-4B=1020B,因此文件最大长度为 4080GB。 47.系统中有多个生产者和消费者进程,共享一个能存放 1000 件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区非空时,消费者可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取走 10 件产品时,其他消费者进程才能取产品。请使用信号量 P,V(或 wait(), signal())操作实现进程间的同步与互斥,要求写出完整过程,并说明所使用信号量的意义。 解答: 二、综合应用题
left
weight
right
struct TreeNode{
int weight;
TreeNode *left;
TreeNode *right;
};
class Solution{
public:
int sumOfWPL(TreeNode *head){
if(head==null){
return 0;
}
return assistSum(head.left,1)+assistSum(head.right,1); //左右子树的叶节点的带权路径长度之和
}
int assistSum(TreeNode *node,int layer){
if(node==null){
return 0;
}else if(node.left==null && node.right==null){ //左右子节点均为空时,该节点为叶节点
return layer*node.weight;
}else{
return assistSum(node.left,layer+1)+assistSum(node.right,layer+1);
}
}
}
typedef struct{
unsigned int ID,IP;
}LinkNode; //link 的结构
typedef struct{
unsigned int prefix,mask;
}NetNode; //Net 的结构
typedef struct Node{
int Flag;//flag为 1 时是 Link,flag为 2 时是Net
union{
ListNode Lnode;
NetNode Nnode;
}LinkOrNet;
unsigned int Metric;
structNode *next;
}ArcNode; //弧节点
typedef struct HNode{
unsigned int RouterID;
Arc *LN_link;
struct HNode *next;
}HNode; //表头节点
目的网络
路径
代价
步骤一
192.1.1.0/24
直达
1
R2
192.1.5.0/24
R1->R3->192.1.5.0/24
3
R3
192.1.6.0/24
4
R4
192.1.7.0/24
8
目的网络
下一跳
接口
目的网络
下一跳
接口
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
semaphore mutex1=1; //一个周期内访问缓冲区时互斥
semaphore mutex2=1; //单次访问缓冲区时互斥
semaphore empty=1000;//缓冲区内能装入产品数
semaphore full=0; //缓冲区内产品数
producer(){
while(1){
生产产品;
P(empty); //判断缓冲区是否有空位
P(mutex2); //互斥访问缓冲区
放入产品;
V(mutex2); //互斥访问缓冲区
V(empty); //产品数量加一
}
}
consumer(){
while(1){
P(mutex1); //一个周期内互斥访问缓冲区
for(int i=0;i<10;i++){
P(full); //判断缓冲区内是否有产品
P(mutex2); //单次互斥访问缓冲区
取产品;
V(mutex2); //单次互斥访问缓冲区
V(full); //产品数量减一
}
P(mutex1); //一个周期内互斥访问缓冲区
}
}