一、概念题
- 进程由进程控制块(PCB)、程序段和程序段组成。
- PCB是标志进程存在的唯一标识。
- 线程是处理机调度的基本单位,可以独立执行程序。线程没有自己独立的地址空间,它共享所属进程的空间。
- 进程间不能直接交换数据,但可利用操作系统提供的共享文件、消息传递、共享存储区等进行通信。
- 系统发生死锁时,所有进程都处于阻塞状态。
- 程序封闭性是指进程执行的结果只取决于进程本身,不受外界影响。进程的执行速度不会改变它的执行结果。失去封闭性后,不同速度下的执行结果不同。
- 引入线程后,进程仍然是资源分配的单位。内核级线程是处理器调度和分派的基本单位,线程本身不具有资源,它可以共享所属进程的全部资源。
- 一个内核进程映射到用户级后有多个线程,那么这些线程之间的切换不需要再内核级切换进程,也就不需要内核的支持。
- 用信箱实现进程间互通信息的通信机制要有两个通信原语,它们是发送原语和接受原语。
- 系统动态DLL库中的系统线程,被不同的进程所调用,它们是相同的线程。
- 同一进程或不同进程内的线程都可以并发执行。
- 设备分配不会创建新进程。
- 在用户级线程中,有关线程管理的所有工作都由应用程序完成,无需内核的干扰,内核意识不到线程的存在。
- 父进程和子进程共享一部分资源,但不能共享虚拟地址空间,在创建子进程时,会为子进程分配资源,如虚拟地址空间等
- 程序是静态的指令集合,进程是程序的动态执行过程。
- 进程调度的时机与进程特点有关,还取决于进程调度策略。
- 作业是从用户角度出发的,它由用户提交,以用户任务为基本单位;进程是从操作系统出发的,由系统生成,是操作系统的资源分配和独立运行的基本单位。
- 中断向量本身用于存放中断服务例行程序的入口地址,因此中断向量地址就是该入口地址的地址。
- 中断由硬件保护并完成,主要是为了保证系统运行可靠、正确。
- 当进程处在临界区时,说明进程正在占用处理机,只要不破坏临界资源的使用规则,就不会影响处理机的调度。
- 条件变量和信号量的比较:条件变量的wait/signal操作类似于信号量的P/V操作,可以实现进程的阻塞/唤醒。条件变量是“没有值”的,仅实现了“排队等待”的功能,而信号量是“有值”的,信号量的值反应了剩余资源数,而在管程中,剩余资源数用共享数据结构记录。
- 在操作系统中设置进程是为了描述程序的动态执行过程,而设置管程是为了进行进程的同步,协调进程的相互关系和对共享变量的访问。
- 操作系统中维护的进程的数据结构是PCB,而与管程相关的数据结构是等待队列。
- 管程可被进程调用。管程与操作系统中的共享资源相关,没有创建和撤销;而进程有创建和撤销。
- 临界资源是互斥共享资源。
- P/V操作是一种低级的进程通信原语,它是不能被中断的。
- 不能被任何进程修改的代码是可重入代码,也称纯代码,即允许多个进程同时访问的代码。
- 死锁指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进。
- 死锁产生的原因:1、 系统资源(不可剥夺资源) 的竞争;2、进程推进顺序非法。
- 死锁产生的条件:1、互斥条件;2、不剥夺条件;3、请求并保持条件;4、循环等待条件。
- 死锁解除的方法主要有:1、资源剥夺法;2、撤销进程法;3、进程回退法。
- 系统产死锁的原因可能是独占资源分配不当。
- 资源分配图是一个有向图,用于表示某时刻系统资源与进程之间的状态。
- 死锁检测通常采用两种方法:1、资源有向图法;2、资源矩阵法。
- 进程是程序及其数据在计算机上的一次运行活动,是一个动态的概念。
- 银行家算法的主要思想是避免系统进入不安全状态。
- 产生饥饿的主要原因是:在一个动态系统中,对于每类资源,操作系统需要确定一个分配策略,当多个进程同时申请某类资源时,由分配策略决定资源分配给进程的次序,有时资源分配策略可能是不公平的,即不能保证等待时间上界的存在。在这种情况下,即使系统没有发生死锁,某些进程也可能会长时间等待。当等待时间给进程推进和相应带来明显影响时,称发生了进程“饥饿”,当“饥饿”到一定程度的进程所赋予的任务即使完成也不再具有实际意义时,称该进程被“饿死”。
二、问答题
为什么要引入进程?
为了更好地支持和管理多道程序的并发执行,提高系统吞吐量和资源利用率。
什么是进程?
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动
父进程创建子进程和主程序调用子程序有何不同?
父进程创建子进程后,父进程与子进程同时执行(并发)。主程序调用子程序后,主程序停在调用点,子程序开始执行,直到子程序返回,主程序才开始执行。
为何进程之间的通信必须借助于操作系统内核功能?简单说明进程通信的几种方式。
每个进程有自己独立的地址空间。在操作系统和硬件的地址保护机制下,进程无法访问其他进程的地址空间,必须借助于系统调用函数实现进程之间的通信。
进程通信的主要方式有:
1、共享内存区
2、消息传递
3、管道系统
4、共享文件
什么是多线程?多线程和多任务的区别是什么?
多线程是指在一个程序中可以定义多个线程并同时运行它们,每个线程可执行不同的任务。
多线程与多任务的区别:多任务是针对操作系统而言的,代表操作系统可以同时执行的程序个数;多线程是针对一个程序而言的,代表一个程序可以同时执行的线程个数,而每个线程可以完成不同的任务。
为什么要进行处理机调度?
为了合理地处理计算机的软、硬件资源。
为什么要引入进程同步的概念?
在多道程序共同执行的条件下,进程与进程是并发执行的,不同进程之间存在不同的相互制约关系。为了协调进程之间的相互制约关系,引入了进程同步的概念。
不同的进程之间会存在什么关系?
进程之间存在同步和互斥的制约关系。
同步是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
互斥是指当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一个进程才允许去访问此临界资源。
为什么会产生死锁?
由于系统中存在一些不可剥夺资源,当两个或两个以上的进程占有自身的资源并请求对方的资源时,会导致每个进程都无法向前推进,这就是死锁。
有什么办法可以解决死锁问题?
死锁的处理策略分为预防死锁、避免死锁、死锁的检测与解除。
死锁预防是指通过设立一些限制条件,破坏死锁的一些必要条件,让死锁无法发生。
死锁避免指在动态分配资源的过程中,用一些算法防止系统进入不安全状态,从而避免死锁。
死锁的检测和解除是指在死锁产生前不采取任何措施,只检测当前系统有没有发生死锁,若有,测采取一些措施解除死锁。
为支持进程状态的变迁,系统至少要提供哪些进程控制原语?
进程创建原语
终止进程原语
阻塞原语
唤醒原语
什么是管程?管程由几部分组成?说明引入管程的必要性。
一个管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。
管程由三部分组成:1、局部于管程的共享变量说明;2、该数据结构进行操作的一组过程;3、对局部于管程的数据设置初始值的语句;此外还需要为该管程赋予一个名字。
管程的引入是为了解决临界区分散所带来的管理和控制问题。
进程存在哪几种制约关系?各是什么原因引起的?
进程存在两种制约关系,即同步和互斥。
同步是由于并发进程之间需要协调完成同一个任务时引起的一种关系,是一个进程等待另一个进程向它直接发送消息或数据时的一种制约关系。
互斥是由并发进程之间竞争系统的临界资源引起的,是一个进程等待另一个进程已经占有的必须互斥使用的资源时的一种制约关系。