科目组合
数据结构 、计算机组成原理 、操作系统 、计算机网络
下列对顺序存储的有序表 (长度为 n)实现给定操作的算法中平均时间复杂度为 O(1)的是:( )
现有非空双向链表 L,其结点结构为: prev 是指向前直接前驱结点的指针,next 是指向直接后继结点的指针。若要在 L 中指针 p 所指向的结点( 非尾结点) 之后插入指针 s 指向的新结点, 则在执行了语句序列: “s->next=p->next;p->next=s”,后,还要执行( )
若采用三元组表存储结构存储系数矩阵 M。则除三元组外,下列数据中还需要保存的是( )。
在有 6 个字符组成的字符集 S 中,各个字符出现的频次分别为 3,4,5,6,8,10,为 S 构造的哈夫曼树的加权平均长度为( )
已知一棵二叉树的树形如图,若其后序遍历为 f,d,b,e,c,a,则其先序列为( )。
A、aedfbc B、acebdf C、cabefd D、dfebac
已知无向连通图 G 中各边的权值均为 1,下列算法中,一定能够求出图 G 中从某顶点到其余各个顶点最短路径的是( )。
I.普利姆算法 II.克鲁斯卡尔算法 III.图的广度优先搜索
A、仅 I B、仅 III C、仅 II 和 I D、I,II,III
下列关于非空 B 树的叙述中,正确的是( )
对含有 600 个元素的有序顺序表进行折半查找,关键字之间的比较次数最多是( )。
现有长度为 5,初始为空的散列表 HT,散列表函数 H(K)=(k+4)%5 用线性探查再散列法解决冲突。若将关键字序列 2022,12,25 依次插入 HT 中,然后删除关键字 25,则 HT 中查找失败的平均查找长度( )。
下列排序算法中,不稳定的是( )
使用快速排序算法对数据进行升序排序, 若经过一次划分后得到的数据序列是 68,11,70,23,80,77,48,81,93,88,则该次划分的轴枢( )。
数据通路由组合逻辑元件(操作元件)和时序逻辑元件(状态元件)组成。下列给出的元件中,属于操作元件的是( )。
I. 算术逻辑部件(ALU)
II. 程序计数器(PC)
III. 通用寄存器组(GPRs)
IV. 多路选择题(MUX)
A. 仅I、II
B. 仅I、IV
C. 仅II、III
D. 仅I、II、IV
I1 add s2, s1, s0 // R[s2] ← R[s1] + R[s0] I2 load s3, 0(s2) // R[s3] ← M[R[s2] + 0] I3 beq t2, s3, L1 // if R[t2] = R[s3] jump to L1 I4 addi t2, t2, 20 // R[t2] ← R[t2] + 20 I5 L1:
若采用转发(旁路)技术处理数据冒险,采用硬件阻塞方式处理控制冒险,则在 I1~I4 执行过程中,发生流水线阻塞的指令有( )。
A. 仅 I3
B. 仅 I2、I4
C. 仅 I3、I4
D. 仅 I2、I3、I4
某存储器总线宽度为 64 位,总线时钟频率为 1GHZ,在总线上传输一个数据或地址需要一个的时钟周期,不支持突发传送方式,若通过该总线连接 CPU 和主存,主存每次准备一个 64 位数据需要 6ns,主存块大小为 32B,则读取一个主存块需要的时间为( )。
A. 8ns
B. 11ns
C. 26ns
D. 32ns
下列关于硬件和异常/中断关系的叙述中,错误的是( )。
A. CPU 在执行一条指令过程中检测异常事件
B. CPU 在执行完一条指令时检测中断请求信号
C. 开中断中 CPU 检测到中断请求后就进行中断响应
D. 外部设备通过中断控制器向 CPU 发中断结束信号
下列关于 I/O 控制方式的叙述中,错误的是( )。
A. 查询方式下,通过 CPU 执行查询程序进行 I/O 操作
B. 中断方式下,通过 CPU 执行中断服务程序进行 I/O 操作
C. DMA 方式下,通过 CPU 执行 DMA 传送程序进行 I/O 操作
D. 对于 SSD、网络适配器等高速设备,采用 DMA 方式输入/输出
与宏内核操作系统相比,下列特征中微内核操作系统具有的是( )。
Ⅰ. 较好的性能
Ⅱ. 较高的可靠性
Ⅲ. 较高的安全性
Ⅳ. 较强的可扩展性
A. Ⅱ、Ⅳ
B. Ⅰ、Ⅱ、Ⅲ
C. Ⅰ、Ⅲ、Ⅳ
D. Ⅱ、Ⅲ、Ⅳ
在操作系统内核中,中断向量表适合采用的数据结构是( )。
A. 数组
B. 队列
C. 单向链表
D. 双向链表
某系统采用页式存储管理,用位图管理空闲页框。若页大小为4 KB,物理内存大小为16 GB,则位图所占空间的大小是( )。
A. 128 B
B. 128 KB
C. 512 KB
D. 4 MB
下列操作完成时,导致CPU从内核态转为用户态的是( )。
A. 阻塞过程
B. 执行 CPU 调度
C. 唤醒进程
D. 执行系统调用
下列出当前线程引起的事件或执行的操作中,可能导致该线程由执行态变为就绪态的是( )。
A. 键盘输入
B. 缺页异常
C. 主动出让CPU
D. 执行信号量的wait()操作
对于采用虚拟内存管理方式的系统,下列关于进程虚拟地址空间的叙述中,错误的是( )。
A. 每个进程都有自己独立的虚拟地址空间
B. C语言中malloc( )函数返回的是虚拟地址
C. 进程对数据段和代码段可以有不同的访问权限
D. 虚拟地址的大小由主存和硬盘的大小决定
进程P1、P2和P3进入就绪队列的的时刻,优先值(越大优先权越高)以及CPU的执行时间如下表所示。
系统采用基于优先权的抢占式CPU调度算法,从0ms时刻开始进行调度,则P1、P2和P3的平均周转时间为( )。
A. 60 ms
B. 61 ms
C. 70 ms
D. 71 ms
进程R和S共享数据data,若date在R和S中所在页的页号分别为p1和p2,两个页所对应的页框号分别为f1和f2,则下列叙述中,正确的是( )。
A. p1 和 p2 一定相等,f1 和 f2 一定相等
B. p1 和 p2 一定相等,f1 和 f2 不一定相等
C. p1 和 p2 不一定相等,f1 和 f2 一定相等
D. p1 和 p2 不一定相等,f1 和 f2 不一定相等
若文件F仅被进程P打开并访问,则当进程P关闭F时,下列操作中,文件系统需要完成的是( )。
A. 删除目录中文件F的目录项
B. 释放F的索引节点所占的内存空间
C. 释放F的索引节点所占的外存空间
D. 将文件磁盘索引节点中的链接计数减1
下列因素中,设备分配需要考虑的是( )。
Ⅰ. 设备的类型
Ⅱ. 设备的访问权限
Ⅲ. 设备的占用状态
Ⅳ. 逻辑设备与物理设备的映射关系
A. Ⅰ、Ⅱ
B. Ⅱ、Ⅲ
C. Ⅲ、Ⅳ
D. Ⅰ、Ⅱ、Ⅲ、Ⅳ
已知有向图 G 采用邻接矩阵存储,类型定义如下:
typedef struct { // 图的类型定义 int numVertices, numEdges; // 图中顶点数和有向边数 char VerticesList[MAXV]; // 顶点表,MAXV为已定义常量 int Edge[MAXV][MAXV]; // 邻接矩阵 }MGraph;
将图中出度大于入度的顶点称为 K 顶点。例如在题41图中,顶点 a 和 b 都是 K 顶点。
已知计算机M字长为32位,按字节编址,采用请求调页策略的虚拟存储管理方式,虚拟地址为32位,页面大小为4KB;数据Cache采用4路组相联映射,数据区大小为8KB,主存块大小为32B。现有C语言程序段如下:
for (i = 0; i < 24; i++) for (j = 0; j < 64; j++) a[i][j] = 10;
已知二维数组a按行优先存放,在虚拟地址空间中分配的起始地址为0042 2000H,sizeof(int)=4,假定在M上执行上述程序段之前数组a不在主存,且在该程序段执行过程中不会发生页面置换。请回答下列问题。
(1) 数组a分为几个页面存储?对于数组a的访问,会发生几次缺页异常?页故障地址各是什么?
(2) 不考虑变量i和j,该程序段的数据访问是否具有时间局部性?为什么?
(3) 计算机M的虚拟地址(A31~A0)中哪几位用作块内地址?哪几位用作Cache组号?a[1][0]的虚拟地址是多少?其所在主存块对应的Cache组号是多少?
(4) 数组a占用多少主存块?假设上述程序段执行过程中数组a的访问不会和其他数据发生Cache访问冲突,则数组a的Cache命中率是多少?若将循环中i和j的次序按如下方式调换:
for (j = 0; j < 64; j++) for (i = 0; i < 24; i++) a[i][j] = 10;
则数组a的Cache命中率又是多少?
上题中C程序段在计算机M上的部分机器级代码如下,每个机器级代码行中依次包含指令序号、虚拟地址、机器指令和汇编指令。
for(i=0; i<24; i++) 1 00401072 C7 45 F8 00 00 00 00 mov[ebp-8], 0 2 00401079 EB 09 jmp 00401084h 3 0040107B 8B 55 F8 mov eax, [ebp-8] ... ... ... 7 00401088 7D 32 jge 004010bch for(j=0; j<64; j++) 8 0040108A C7 45 FC 00 00 00 00 mov[ebp-4], 0 ... ... ... a[i][j]=10; ... ... ... 19 004010AE C7 84 82 00 20 42 00 0A 00 00 00 mov[ecx+edx*4+00422000h], 0Ah 20 ... ... ...
请回答下列问题。
(1) 第20条指令的虚拟地址是多少?
(2) 已知第2条jmp和第7条jge都是跳转指令,其操作码分别是EBH和7DH,跳转地址分别为0040 1084H、0040 10BCH,这两条指令都采用什么寻址方式?给出第2条指令jmp的跳转目标地址计算过程。
(3) 已知第19条mov指令的功能是“a[i][j]←10”,其中ecx和edx为寄存器名,0042 2000H是数组a的首地址,指令中源操作数采用什么寻址方式?已知edx中存放的是变量j,ecx中存放的是什么?根据该指令的机器码判断计算机M采用的是大端还是小端方式。
(4) 第一次执行第19条指令时,取指令过程中是否会发生缺页异常?为什么?
现要求学生使用 swap 指令和布尔型变量 lock 实现临界区互斥。lock 为线程间共享的变量。lock 的值为 TRUE 时线程不能进入临界区,为 FALSE 时线程能够进入临界区。某同学编写的实现临界区互斥的伪代码如题 45(a) 图所示。
(1) 题 45(a) 图中伪代码中哪些语句存在错误?将其改为正确的语句(不增加语句条数)。
(2) 题 45(b) 图中给出了两个变量值的函数 newSwap() 的代码是否可以用函数调用语句“newSwap(&key, &lock)”代替指令“swap key, lock”以实现临界区的互斥?为什么?
进程P通过执行系统调用从键盘接收一个字符的输入,已知此过程中与进程P相关的操作包括:①将进程P插入就绪队列;②将进程P插入阻塞队列;③将字符从键盘控制器读入系统缓冲区;④启动键盘中断处理程序;⑤进程P从系统调用返回;⑥用户在键盘上输入字符。以上编号①~⑥仅用于标记操作,与操作的先后顺序无关。请回答下列问题。
(1) 按照正确的操作顺序,操作①的前一个和后一个操作分别是上述操作中的哪一个?操作⑥的后一个操作上述操作中的哪一个?
(2) 在上述哪个操作之后CPU一定从进程P切换到其他进程?在上述哪个操作之后CPU调度程序才能选择进程P执行?
(3) 完成上述哪个操作的代码属于键盘驱动程序?
(4) 键盘中断处理程序执行时,进程P处于什么状态?CPU处于内核态还是用户态?