北航操作系统课程-20200323课堂小测-进程与线程

2020-03-23-课堂小测-进程与线程


北京航空航天大学计算机学院-2020春操作系统课程
以下题目作者为北航计算机学院操作系统课程组,客观题答案由课程组给出,解析及主观题答案均为博主原创,水平有限,如有错误敬请批评指正。


1 以下说法正确的是:(单选)

A. 多个程序并发执行一定能够比顺序执行效率高

B. 多个程序并发执行一定能够比顺序执行有更高的系统资源使用率

C. 并行是并发的特例

D. 并发是指两个进程同时活跃在不同处理机上

答:C

设有两个活动a1和a2,如果在某一指定的时间t,无论a1和a2是在同一处理机上还是在不同的处理机上执行,只要a1和a2都处在各自的起点和终点之间的某一处,则称a1和a2是并发执行的。并行仅仅指两个程序同时运行在不同的处理机上。

从上述的并发和并行的概念可以看出,并发是较为宽泛的概念,并不一定要求进程活跃在不同的处理机上,D错误。并发程序有可能仅仅是在交替轮流使用同一个处理机,因而当多个程序本身没有较多的并发需求时(例如IO请求不多时),伪并行的并发并不会在执行效率和资源利用率上优于顺序执行,反而有可能因为进程切换的开销而劣于顺序执行,A、B错误。并行是并发的特例,并发有可能是真并行,也有可能是轮流使用同一处理机的伪并行,C正确。


2 以下说法正确的是:(单选)

A. 不满足Bernstein条件的程序不能并发执行

B. 满足Bernstein条件的程序并发一定具有确定的执行结果

C. 不满足Bernstein条件的并发程序就不可能有确定的执行结果

D. 只要两个并发程序都要访问相同的存储器,就不能确定他们的并发执行结果

答:B

Bernstein条件是判断程序并发执行结果是否可再现的充分条件,也就是说满足Bernstein条件的程序一定具有确定的执行结果,而不满足的不一定具有确定的执行结果,例如两程序在读写集上看存在读写冲突,但实际上在编程时使用加锁保护等措施没有让读写冲突发生,这时候也具有确定的执行结果,B正确,C错误。不满足Bernstein条件的程序当然也可以并发执行,只不过不一定会有确定的执行结果,A错误。两个并发程序访问相同的存储器,只要满足Bernstein条件就可以确定其并发执行结果,D错误。


3 以下说法不正确的是:(单选)

A. 进程是程序的一次执行

B. 一个程序可以对应多个进程

C. 一个进程只能对应一个程序

D. 进程是程序并发执行的载体

答:C

进程是程序的一次执行,是多道程序运行下相对动态的概念,是程序并发执行的载体,A、D正确。通过多次执行,一个程序可以对应多个进程,B正确。通过调用关系,一个进程可以对应多个程序,C错误。


4 关于fork()函数以下说法不正确的是:(单选)

A. fork()函数执行成功后系统中会增加一个进程

B. fork()函数被调用一次,但产生了两个不同的返回值

C. fork()函数的返回值等于0表示当前进程是被创建的子进程

D. fork()函数的返回值大于0表示当前进程是父进程,该值就是父进程的进程号

答:D

fork()函数是在现有进程基础上“复制”创建出新进程的操作,成功后系统会增加一个新进程,A正确。fork()被调用一次,可以由两个进程产生两个返回值,在子进程中返回值为0,父进程中返回值大于0,是子进程的进程号。此时相当于在内存中创建了类似链表的结构,父进程指向子进程,子进程目前还没有他自己的子进程,因此指向0,B、C正确,D错误。


5 不可能出现的进程状态转移是:(多选)

A. 执行态 -> 就绪态

B. 执行态 -> 阻塞态

C. 就绪态 -> 执行态

D. 就绪态 -> 阻塞态

E. 阻塞态 -> 执行态

F. 阻塞态 -> 就绪态

答:D、E

在这里插入图片描述

上图是三种进程状态的相互转化关系。

  • 执行 -> 就绪:运行进程用完了时同片,或运行进程被中断,因为一高优先级进程处于就绪状态;
  • 执行 -> 阻塞:当一进程所需的资源必须等待,OS尚未完成服务,对一资源的访问尚不能进行,初始化1/O 且必须等待结果,等待某一进程提供输入(IPC)
  • 就绪 -> 执行:调度程序选择一个进程运行
  • 阻塞 -> 就绪:当所等待的事件发生时

6 进程控制块中记录的信息包括:(多选)

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正确。


7 以下关于原语正确的描述是:(单选)

A. 原语就是内核中运行的函数

B. 原语中包含的指令序列是连续执行的,不可分割的

C. 操作系统的每个系统调用都对应一个原语

D. 原语可以在内核态下运行,也可以在用户态下运行

答:B

原语:由若干条连续不可分割的指令所组成的指令序列,来实现某个特定的操作功能,B正确。原语一定是在内核态中运行的,D错误,但内核态中运行的函数并不一定都是原语,因为原语要求连续不可分割,A错误。原语和系统调用并没有对应关系,C错误。


8 以下说法正确的是:(单选)

A. 进程上下文切换过程一定会陷入内核

B. 陷入内核一定会导致进程上下文切换

C. 正在执行的程序不可以主动放弃CPU

D. 系统调用一定会导致进程上下文切换

答:A

进程上下文且换一定会陷入内核,有调度器执行,保存执行断点并且换内存映射,是消耗比较大的,而陷入内核并不一定且换上下文,陷入内核只涉及寄存器上下文的保存切换,A正确,B错误。正在执行的程序当然可以放弃CPU,如IO等操作,C错误。系统调用一定会陷入内核,但不一定会导致进程上下文切换。D错误。


9 以下关于线程的描述正确的是:(多选)

A. 每个线程拥有自己的堆栈

B. 同一个进程的线程使用相同的页表访问

C. 线程之间可以通过共享变量通信

D. 线程是可被调度的基本执行单元

答:A、B、C、D

线程是为了提高进程内并发程度,减少进程切换开销,更方便并发程序共享资源而设计的。同一个进程的线程共享了虚拟内存空间,但各自拥有自己的运行栈,A、B正确。由于同一个进程的线程贡献了页表,线程之间可以通过共享变量直接通信,C正确。线程是进程内可被调度的基本执行单元,D正确。


10 引入线程的优势包括:(多选)

A. 有利于提高运行实体的创建和撤销效率

B. 有利于提高CPU利用率

C. 有利于提高多个共享数据的计算和IO任务的切换速度

D. 有利于提高多个并发任务间的通信效率

答:A、B、C、D

引入线程后并发程序在调度过程中免去了大量进程切换的开销,无需像进程调度那样切换页表等大量进程上下文,提升了运行实体创建和撤销的效率,A正确。线程在调度过程中提升了进程内部的并发程度,进一步提高了CPU利用率,B正确。线程之间可以直接共享变量,在一个线程进行IO的过程中同一进程之内其他线程还可以继续利用CPU进行计算,且切换过程无需像进程切换那样大量消耗,C正确。线程共享了变量,有利于提高多个并发任务间的通信效率,D正确。

发布了20 篇原创文章 · 获赞 3 · 访问量 4070

猜你喜欢

转载自blog.csdn.net/JeremyZhao1998/article/details/105139252