专业课错题记录(操作系统)

三、启动、中断、异常和系统调用

1.下列选项中,不可能在用户态发生的是()
A.系统调用
B.外部中断
C.进程切换
D.缺页
解析:C。系统调用是提供给应用程序使用的,由用户态发出,进入内核态执行;外部中断随时可能发生;应用程序执行时可能发生缺页(缺页是一种中断,指的是当软件试图访问已映射在虚拟地址空间中,但是并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断);而进程切换完全由内核来控制

2.中断处理和子程序调用都需要压栈以保护现场。中断处理一定会保存而子程序调用不需要保存其内容的是()
A.程序计数器
B.程序状态字寄存器
C.通用数据寄存器
D.通用地址寄存器

解析:B。程序状态字(PSW)寄存器用于记录当前处理器的状态和控制指令的执行顺序,并且保留与运行程序相关的各种信息,主要作用是实现程序状态的保护和恢复。所以中断处理程序要将PSW保存,子程序调用在进程内部执行,不会更改PSW

3. 应用程序引发异常的时候,操作系统可能的反应是()

A.删除磁盘上的应用程序
B.重启应用程序
C.杀死应用程序
D.修复应用程序中的错误
解析:C。如果应用程序发生异常,说明应用程序有bug,如果应用程序无法应对这样的错误,再进一步执行应用程序意义不大。但是应用程序如果可以处理这些异常,比如基于Java和C++的异常处理机制,操作系统的signal机制,系统会转到应用程序的对应处理函数来完成后续的修补工作

4.CPU执行操作系统代码的时候称为处理机处于( )
A.自由态
B.目态
C.管态
D.就绪态
解析:C。内核态也称为管态

五、物理内存管理 连续内存分配

1.在使能分页机制的情况下,更合适的外碎片整理方法是(C)
A.紧凑(compaction)
B.分区对换(Swapping in/out)
C.都不是
解析:分页机制不会产生外碎片

2. 描述伙伴系统(Buddy System)特征正确的是(ABC)

A.多个小空闲空间可合并为大的空闲空间
B.会产生外碎片
C.会产生内碎片
D.都不对

解析:
A:释放空间会合并;
B:把一块空间对半分时,没有派上用场的那一半就变成了外碎片
C:伙伴系统分配的空间都是2的整数次幂,但是申请的空间并不一定就刚好是这么大,多余的空间便变成了内碎片

六、物理内存管理:非连续内存分配

1.描述段管理机制正确的是(ABCD)

A.段的大小可以不一致
B.段可以有重叠
C.段可以有特权级
D.段与段之间是可以不连续的

解析:这个题你漏选的是B。段是一块连续的内存地址,是物理地址中的概念。段重叠指的是不同的虚拟地址指向同一物理地址。这是piazza上陈老师的回答链接:https://piazza.com/class/i5j09fnsl7k5x0?cid=1061_f1

2.可有效应对大地址空间可采用的页表手段是(AB)

A.多级页表
B.反置页表
C.页寄存器方案
D.单级页表

解析:根据陈渝老师的回答,之所以不选页寄存器,是因为硬件开销会很大,所以现在通用的CPU都没有采用这种方式。个人觉得,页寄存器是一种仅存在于理论中的方法,没有实际意义,所以不应该选C。

3.页表项标志位包括(ABCD)

A.存在位(resident bit)
B.修改位(dirty bit)
C.引用位(clock/reference bit)
D.只读位(read only OR read/write bit)

解析:课件上没有见到D,所以你漏选了D,而页是可以只读/只写的,所以需要一个只读位来标志它的访问模式

九、页面置换算法


1. 物理页帧数量为3,虚拟页访问序列为 0,1,2,0,1,3,0,3,1,0,3,请问采用最优置换算法的缺页次数为(D)
A.1
B.2
C.3
D.4
解析:你本来选的是A,这是假定内存中已经预读入了0,1,2这3个页面;而实际上,程序在第一次运行时会有大量的缺页发生,因为内存中没有读入任何页面,这就是答案4次的由来,即在前3次读取时都会发生中断

2.物理页帧数量为4,虚拟页访问序列为 0,3,2,0,1,3,4,3,1,0,3,2,1,3,4 ,请问采用CLOCK置换算法(用2个bit表示存在时间)的缺页次数为(7次)
A.8
B.9
C.10
D.11
我看了陈渝老师的解答,应该是7次,学堂在线上的选项都是错的;通过这道题我意识到,可能是我对增强的clock算法理解有误?用标志位和修改位其实表示的是访问次数,比如第一次访问0号虚拟页时这俩标志位取01,第二次时取10,然后发生缺页异常时再通过指针扫描找出需要被替换的页面

十一、进程和线程

1.操作系统来维护一组队列,表示系统中所有进程的当前状态,有关管理进程的描述正确的是(AB )

A.就绪态进程维护在进程就绪队列中

B.等待态进程维护在进程等待队列中

C.运行态进程维护在进程运行队列中

D.zombie态进程不在任何队列中

解析:好像状态队列就仨:就绪队列,各种等待队列和僵尸态队列

十二、进程切换

1.关于创建新进程的描述正确的是()
A.fork() 创建子进程中,会复制父进程的所有变量和内存
B.子进程的fork()返回0
C.父进程的fork()在创建子进程成功后,返回子进程标识符
D.fork() 创建子进程中,会复制父进程的页表
解析:ABCD。你漏选了A,你考虑的点是变量的值可能不一样,但是子进程的确是复制了父进程的所有变量和内存,但是寄存器的值可能不一样

十五、处理机调度

1.在基于优先级的可抢占的调度机制中,当系统强制使高优先级任务等待低优先级任务时,会发生()
A 优先级反转
B 优先级重置
C 系统错误
D 死循环
解析:A。PPT上写的是优先级反置,刚好是A+B各抽一字,于是我人就傻了。我在这里强行解释一波吧,优先级反置是让低优先级的进程的优先级上去,高优先级的进程暂时等待,这和平常的低优先级等待高优先级的刚好相反,所以应该是反转

十八、信号量与管程

1.有两个并发执行的进程P1和P2,共享初值为1的变量x。P1对x加1,P2对x减一。加1和减1操作的指令序列分别如下所示:
(1)Load R1,x
(2)Load R2,x
(3)Inc Rl
(4)dec R2
(5)Store x,R1
(6)Store x,R2
两个操作完成后,x的值()
A 可能为-1或3
B 只能为1
C 可能为0、1或2
D 可能为-1、0、1、1或2
解析:C。这道题需要注意的是,x存到R1,R2里面去后,R1和R2值的修改就和x无关了,除非是后面执行store指令存到x里;所以,最后x的值,就是看两个store指令谁更晚执行。下面是3种取值的指令执行序列:
0:123546
1:135246
2:124635

2.管程的主要特点有()
A 局部数据变量只能被管程的过程访问
B 一个进程通过调用管程的一个过程进入管程
C 不会出现死锁
D 在任何时候,只能有一个进程在管程中执行
解析:ABD。管程和临界区不同的地方在于,临界区只能有1个等待队列,所有进程等待的都是同一个资源;而管程可以通过多个条件变量管理多个等待队列,不同等待队列中的进程等待的资源不同

二十、死锁和进程通信

1.银行家算法可以避免死锁。
1)预防死锁:限制资源请求
2)避免死锁:限制资源分配
用消防来说一下这俩的区别:预防就是在这个区域里不许用火;避免就是可以用火,但是如何用火,就有个严格的审批和监督流程;而银行家算法就相当于银行里有资源,但是你们线程过来借钱时银行方面会严格地审批你的请求

2.进程通信的缓冲区是有限的

3.关于消息队列和共享内存的进程通信机制的阐述正确的是()

A 消息队列是由操作系统维护的以字节序列为基本单位的间接通信机制
B 共享内存是把同一个物理内存区域同时映射到多个进程的内存地址空间的通信机制
C 消息队列机制可用于进程间的同步操作
D 共享内存机制可用于进程间的数据共享
解析:ABCD

二十一、文件系统

1.关于文件缓存和打开文件的阐述正确的是()
A 打开文件后,可通过把文件数据块按需读入内存来减少IO操作次数
B 文件数据块使用后被缓存在内存中,可用于再次读写,从而减少IO操作次数
C 在虚拟地址空间中虚拟页面可映射到本地外存文件中,这样访问文件就像访问内存一样
D 多个进程打开同一文件进行读写访问不需要用锁机制进行互斥保护
解析:ABC。看PPT。

2.RAID-0提高并行性,RAID-1提高可靠性

猜你喜欢

转载自blog.csdn.net/yuanren201/article/details/106951328