北京航空航天大学计算机学院-2020春操作系统课程
以下题目作者为北航计算机学院操作系统课程组,客观题答案由课程组给出,解析及主观题答案均为博主原创,水平有限,如有错误敬请批评指正。
A. 多个程序并发执行一定能够比顺序执行效率高
B. 多个程序并发执行一定能够比顺序执行有更高的系统资源使用率
C. 并行是并发的特例
D. 并发是指两个进程同时活跃在不同处理机上
答:C
设有两个活动a1和a2,如果在某一指定的时间t,无论a1和a2是在同一处理机上还是在不同的处理机上执行,只要a1和a2都处在各自的起点和终点之间的某一处,则称a1和a2是并发执行的。并行仅仅指两个程序同时运行在不同的处理机上。
从上述的并发和并行的概念可以看出,并发是较为宽泛的概念,并不一定要求进程活跃在不同的处理机上,D错误。并发程序有可能仅仅是在交替轮流使用同一个处理机,因而当多个程序本身没有较多的并发需求时(例如IO请求不多时),伪并行的并发并不会在执行效率和资源利用率上优于顺序执行,反而有可能因为进程切换的开销而劣于顺序执行,A、B错误。并行是并发的特例,并发有可能是真并行,也有可能是轮流使用同一处理机的伪并行,C正确。
A. 不满足Bernstein条件的程序不能并发执行
B. 满足Bernstein条件的程序并发一定具有确定的执行结果
C. 不满足Bernstein条件的并发程序就不可能有确定的执行结果
D. 只要两个并发程序都要访问相同的存储器,就不能确定他们的并发执行结果
答:B
Bernstein条件是判断程序并发执行结果是否可再现的充分条件,也就是说满足Bernstein条件的程序一定具有确定的执行结果,而不满足的不一定具有确定的执行结果,例如两程序在读写集上看存在读写冲突,但实际上在编程时使用加锁保护等措施没有让读写冲突发生,这时候也具有确定的执行结果,B正确,C错误。不满足Bernstein条件的程序当然也可以并发执行,只不过不一定会有确定的执行结果,A错误。两个并发程序访问相同的存储器,只要满足Bernstein条件就可以确定其并发执行结果,D错误。
A. 进程是程序的一次执行
B. 一个程序可以对应多个进程
C. 一个进程只能对应一个程序
D. 进程是程序并发执行的载体
答:C
进程是程序的一次执行,是多道程序运行下相对动态的概念,是程序并发执行的载体,A、D正确。通过多次执行,一个程序可以对应多个进程,B正确。通过调用关系,一个进程可以对应多个程序,C错误。
A. fork()函数执行成功后系统中会增加一个进程
B. fork()函数被调用一次,但产生了两个不同的返回值
C. fork()函数的返回值等于0表示当前进程是被创建的子进程
D. fork()函数的返回值大于0表示当前进程是父进程,该值就是父进程的进程号
答:D
fork()函数是在现有进程基础上“复制”创建出新进程的操作,成功后系统会增加一个新进程,A正确。fork()被调用一次,可以由两个进程产生两个返回值,在子进程中返回值为0,父进程中返回值大于0,是子进程的进程号。此时相当于在内存中创建了类似链表的结构,父进程指向子进程,子进程目前还没有他自己的子进程,因此指向0,B、C正确,D错误。
A. 执行态 -> 就绪态
B. 执行态 -> 阻塞态
C. 就绪态 -> 执行态
D. 就绪态 -> 阻塞态
E. 阻塞态 -> 执行态
F. 阻塞态 -> 就绪态
答:D、E
上图是三种进程状态的相互转化关系。
A. 进程全部页表
B. 进程断点处通用寄存器值
C. 进程断点处程序指针(PC)
D. 进程打开文件列表
E. 进程标识符
F. 进程状态
G. 进程对应程序的代码段长度
H. 进程对应程序的符号表
答:B、C、D、E、F
进程标识符,每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数字。Linux系统中就是一个整型数。在进程创建时由系统赋予,F正确。现场保护区,当进程因某种原因不能继续占用CPU时, 释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行,其中包含了断点处通用寄存器的值和程序指针,B、C正确。资源清单,列出所拥有的除CPU外的资源记录,如拥有的IO设备,打开的文件列表等,D正确。当前状态,记录进程的就绪、执行等状态,F正确。
A. 原语就是内核中运行的函数
B. 原语中包含的指令序列是连续执行的,不可分割的
C. 操作系统的每个系统调用都对应一个原语
D. 原语可以在内核态下运行,也可以在用户态下运行
答:B
原语:由若干条连续不可分割的指令所组成的指令序列,来实现某个特定的操作功能,B正确。原语一定是在内核态中运行的,D错误,但内核态中运行的函数并不一定都是原语,因为原语要求连续不可分割,A错误。原语和系统调用并没有对应关系,C错误。
A. 进程上下文切换过程一定会陷入内核
B. 陷入内核一定会导致进程上下文切换
C. 正在执行的程序不可以主动放弃CPU
D. 系统调用一定会导致进程上下文切换
答:A
进程上下文且换一定会陷入内核,有调度器执行,保存执行断点并且换内存映射,是消耗比较大的,而陷入内核并不一定且换上下文,陷入内核只涉及寄存器上下文的保存切换,A正确,B错误。正在执行的程序当然可以放弃CPU,如IO等操作,C错误。系统调用一定会陷入内核,但不一定会导致进程上下文切换。D错误。
A. 每个线程拥有自己的堆栈
B. 同一个进程的线程使用相同的页表访问
C. 线程之间可以通过共享变量通信
D. 线程是可被调度的基本执行单元
答:A、B、C、D
线程是为了提高进程内并发程度,减少进程切换开销,更方便并发程序共享资源而设计的。同一个进程的线程共享了虚拟内存空间,但各自拥有自己的运行栈,A、B正确。由于同一个进程的线程贡献了页表,线程之间可以通过共享变量直接通信,C正确。线程是进程内可被调度的基本执行单元,D正确。
A. 有利于提高运行实体的创建和撤销效率
B. 有利于提高CPU利用率
C. 有利于提高多个共享数据的计算和IO任务的切换速度
D. 有利于提高多个并发任务间的通信效率
答:A、B、C、D
引入线程后并发程序在调度过程中免去了大量进程切换的开销,无需像进程调度那样切换页表等大量进程上下文,提升了运行实体创建和撤销的效率,A正确。线程在调度过程中提升了进程内部的并发程度,进一步提高了CPU利用率,B正确。线程之间可以直接共享变量,在一个线程进行IO的过程中同一进程之内其他线程还可以继续利用CPU进行计算,且切换过程无需像进程切换那样大量消耗,C正确。线程共享了变量,有利于提高多个并发任务间的通信效率,D正确。