复习笔记|第二三章 进程管理《操作系统原理教程》
大纲问题回答(精简版)
1. 程序顺序执行的特点?
2. 何谓进程,进程由哪些部分组成?试述进程的四大特性(动态性、独立性、并发性、结构性)及进程和程序的区别。
⚫ 进程是可以和其他程序并行执行的程序关于某个数据集合的一次执行过程
程序、数据、进程控制块
进程的四大特性
⚫ 动态性。进程是程序的一次执行过程,是临时的,有生命期的。
⚫** 独立性。进程是系统进行资源分配和调度的一个独立单位。
⚫ 并发性。多个进程可在处理机上交替执行。
⚫ 结构性。系统为每个进程建立一个进程控制块。
进程和程序的区别
1. 进程是动态的,程序是静态的。程序是有序代码的集合,进程是程序的执行,没有程序就没有进程。通常,进程不可以在计算机之间迁移,而程序可以复制。
2. 进程是暂时的,程序是永久的。
3. 进程包括程序、数据和进程控制块。
4. 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序**。进程可创建其他进程,而程序不能形成新的程序。
3. 进程控制块的作用是什么?它主要包括哪几部分内容?
描述进程的运行变化情况
◆进程标识信息、处理器状态信息、进程控制信息
(一)进程标识信息
⚫ 进程标识数:用于唯一地标识一个进程,通常是一个整数。
外部标识符,由用户使用。如:send进程、print进程等。
(二)处理器状态信息
⚫ CPU现场保护区:保存进程运行的现场信息。
包括:程序计数器(PC)、程序状态字、通用寄存器、堆栈指针等。
(三)进程控制信息
⚫ 进程的状态、调度、存储器管理信息:是调度进程所必需的信息,包括进程状态、优先级、程序在主存地址、在外存的地址等。
⚫ 进程使用的资源信息:分配给进程的I/O设备、正在打开的文件等。
⚫ 进程之间的家族关系:类Unix系统,进程之间存在着家族关系,父/子进程。Windows进程之间不具有父子关系。
⚫ 进程的链接指针:链接相同状态的进程。
4. 进程的基本状态,试举出使进程状态发生变化的事件并描绘它的状态转换图。
(1) 创建态:刚刚建立,未进就绪队列。
进程创建的时机:
⚫ 系统初始化。创建 init 进程
⚫ 用户命令请求创建进程
⚫ 运行中的进程执行了创建进程的系统调用。
(2) 就绪态 (ready):已获得除CPU之外的全部资源,只要再获得CPU,就可执行。
(3) 运行态 (running):进程正在CPU上运行。单CPU系统一次只有一个运行进程;多CPU系统可能有多个运行进程。
(4) 阻塞态 (blocked):又称等待态。当进程因等待某个条件发生而不能运行时所处的状态。等待I/O完成,等待一个消息,等待需要的数据到达等。
运行态--就绪态:处于运行态的进程被剥夺CPU。
就绪态--运行态:被进程调度程序选中。
运行态--阻塞态:是由运行进程自己主动改变的。
阻塞态 --就绪态 : 是 由 外 界 事 件 引 起 的 。
(5) 终止态:已正常结束或故障中断,但尚未撤销。暂留在系统中,方便其它进程去收集该进程的有关信息。
进程结束的情形:
⚫ 正常退出(自愿的)
⚫ 错误退出(自愿的)
⚫ 致命错误(强制性的)
⚫ 被其它进程所杀(强制性的)
5. 什么是原语?什么是进程控制?
原语,一般是指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程中不可被中断。
进程控制:是指系统使用一些具有特定功能的程序段来创建、撤销进程,以及完成进程各状态之间的转换。
6. 进程调度的功能、方式、时机、算法。作业调度,交换调度。作业的周转时间和作业的带权周转时间?
进程调度的功能
(1) 管理系统中各进程的执行状况
管理进程控制块,将进程的状态变化及资源需求情况及时地记录到PCB中。
(2) 选择就绪进程占有CPU
(3) 进行进程上下文的切换
将正在执行进程的上下文保存在该进程的PCB中,将刚选中进程的运行现场恢复起来,以便执行。
进程调度的方式
① 非抢占方式(非剥夺方式)
某一进程占用CPU,直到运行完或不能运行为止,其间不被剥夺。用在批处理系统。主要优点:简单、系统开销小。
② 抢占方式(剥夺方式)
调度程序基于某种策略(优先级、时间片等)剥夺现运行进程的CPU给其它进程。用在分时系统、实时系统。
进程调度的时机
(1)进程完成或错误终止;
(2)提出I/O请求,等待I/O完成时;
(3)在分时系统,按照时间片轮转,分给进程的时间片用完时;
(4)优先级调度,有更高优先级进程就绪;
(5)进程执行了某种原语操作,如阻塞原语和唤醒原语,都可能引起进程调度。
进程调度算法
(1)先来先服务 (FCFS)
(2)最短作业优先 (SJF)
(3)响应比高者优先 (HRN)
(4)优先级调度法
(5)轮转法 (Round Robin)
(6)多级反馈队列轮转法
处理机的调度级别
⚫ 作业调度:高级调度。多道批处理系统。多个用户作业提交到外存,形成后备作业队列。被作业调度选中进内存,就处于运行态。
⚫ 交换调度:中级调度。将主存中暂不具备运行条件的进程换出到外存交换区;或将外存交换区中的已具备运行条件的进程换入主存。
⚫ 进程调度:低级调度。为进程分配处理机。功能、方式、时机、算法。
7. 线程的定义,线程与进程的比较。系统对线程的支持(用户级线程、核心级线程、两级组合)。
线程是进程中的一个可执行实体,是被操作系统调度的一个独立单位。
⚫ 进程在逻辑上表示OS要做的一个任务,线程表示完成该任务的许多可能的子任务。
⚫ 线程是进程中的一个可执行实体。
⚫ 以进程为单位分配资源,以线程为单位调度执行。
线程与进程的比较
(1)拥有的资源
⚫ 进程拥有一个独立的地址空间,用来存放若干代码段和数据段。拥有打开的文件,以及至少一个线程。
⚫ 一个进程内的多线程共享该进程的所有资源,线程自己拥有很少资源。
(2)调度
⚫ 进程调度需进行进程上下文的切换,开销大。
⚫ 同一进程内的线程切换,仅把线程拥有的一小部分资源变换了即可,效率高。同一进程内的线程切换比进程切换快得多。不同进程的线程切换…
(3)并发性
引入线程后,使得系统的并发执行程度更高。
进程之间、进程内的多线程之间可并发执行。
(4)安全性
同一进程的多线程共享进程的所有资源,一个线程可以改变另一个线程的数据,共享数据方便。多进程实现,安全性好。
2)核心级线程
➢ 有关线程的管理工作都由内核完成。应用程序通过系统调用来创建或撤销线程。
➢ 一个线程的阻塞,不影响其他线程的执行。
➢ Windows Linux 多处理机系统
3)两级组合
➢ 既支持用户级线程,也支持核心级线程。
➢ 用户级多个线程对应核心级多个线程。
➢ 当内核了解到一个线程阻塞后,通知运行时系统,重新调度其他线程。
8. 并发执行的进程在系统中通常表现为几种关系?各是在什么情况下发生的?
◆互斥关系、同步关系、前序关系
(1)对资源的共享引起的互斥关系
进程之间本来是相互独立的,但由于共享资源而产生了关系。间接制约关系,互斥关系。
(2)协作完成同一个任务引起的同步关系
一组协作进程要在某些同步点上相互等待发信息后才能继续运行。直接制约关系,同步关系。
(3)进程之间的前序关系
由于进程之间的互斥同步关系,使得进程之间具有了前序关系,这些关系决定了各个进程创建和终止的时间。
9. 什么叫临界资源?什么叫临界区?对临界区的使用应符合的四个准则(互斥使用、让权等待、有空让进、有限等待)。
⚫ 临界资源:一次仅允许一个进程使用的系统中共享资源。
⚫ 临界区 (critical section):并发进程访问临界资源的那段必须互斥执行的程序。
互斥使用;让权等待;有空让进;有限等待
➢ 不能同时有两个进程在临界区内执行
➢ 等待进入临界区的进程,应释放处理机后阻塞等待
➢ 在临界区外运行的进程不可阻止其他进程进入临界区
➢ 不应使要进入临界区的进程无限期等待在临界区之外
10.解决进程之间互斥的办法:开、关中断,加锁、开锁(又叫测试与设置,通常由一条机器指令完成),软件方法,信号量与P、V操作。
硬件实现方法
(1) 关中断 最简单的方法。在进程刚进入临界区时,立即禁止所有中断;在进程要离开之前再打开中断。因为CPU只有在发生时钟中断或其它中断时才会进行进程切换。
关中断 (disableInterrupt)
开中断 (enableInterrupt)
⚫ 优点:简单。
⚫ 缺点:限制了处理机交叉执行程序的能力
➢把禁止中断的权力交给用户进程是不明智的。(若用户进程禁止中断之后不再打开中断,其结果将会如何?整个系统可能会因此终止)。
➢若是多处理机系统,则禁止中断仅仅对执行本指令的那个CPU有效。其他CPU仍将继续运行,并可以访问临界资源。
(2) 使用测试和设置硬件指令
⚫ 锁位变量W:为每个临界资源设置一个,以指示其当前状态。W=0,表示资源空闲可用;W=1,表示资源已被占用。
⚫ test&set 硬件指令测试(读取)锁位变量的值:
boolean test&set(w){
result=w;
w=1; return result;
}//一条机器指令,其执行不可被中断。
Const int n; /*进程数 */
int w;
void p(int i){
while(1){
while(test&set(w)); //加锁
<critical section>
w=0; //开锁
<remainder section>
}}
显然,采用这种加锁语句,由于进程循环测试,白白浪费了CPU的时间。这种现象又叫做“忙等”。
(3)软件实现方法
为了进入临界区,进程Pi首先设置flag[i]为true,设置turn为j,表示Pi准备好了,礼让Pj进入临界区。如果两个进程都准备好了,最终由turn值(i或j)决定谁能进入临界区。
不能满足有限等待
⚫ 软件实现方法:复杂
⚫ 硬件实现方法:
➢关中断:影响系统效率,仅限于单处理器
➢test&set硬件指令:需要一定等级的硬件支持,单处理器或多处理器均可
11.若信号量S表示某一类资源,则对S执行P、V操作的直观含义是什么? 当进程对信号量S执行P、V操作时,S的值发生变化,当S>0、S=0和S<0时,其物理意义是什么?
P操作原语:
⚫ P(s):s.value减1,如果s.value < 0,进程等待
// wait(s);
void P (sem &s) {
s.value = s.value-1;
//表示申请一个资源(或通过信号量s等消息)
if (s.value < 0) {
add this process to s.list;
block( );
} //资源用完,调用阻塞原语。“让权等待”
}
V操作原语:
⚫ V(s):s.value加1,如果s.value ≤ 0,唤醒一个等待的进程
// signal(s);
void V (sem &s) {
s.value = s.value+1;
//释放一个资源(或通过信号量s发消息)
if (s.value <= 0) {
remove a process P from s.list;
wakeup( );
} //表示在信号链表中,仍有等待该资源的进程被阻塞。调用唤醒原语。
}
信号量S的物理意义:S>=0时表示某资源的可用数,s<0时其绝对值表示阻塞队列中等待该资源的进程数。
12.在用P/V操作实现进程通信时,应根据什么原则对信号量赋初值?
根据资源可用的数量
13.经典的IPC问题。
14.进程高级通信有哪些实现机制?
◆消息缓冲、信箱、管道、共享主存区
15.死锁产生的必要条件及解决死锁的方法。
◆互斥条件、保持和等待条件、不剥夺条件、循环等待条件
1) 互斥条件。独占性的资源。
2) 保持和等待条件。进程因请求资源而阻塞时,对已经获得的资源保持不放。
3) 不剥夺条件。已分配给进程的资源不能被剥夺,只能由进程自己释放。
4) 循环等待条件。存在一个进程循环链,链中每个进程都在等待链中的下一个进程所占用的资源。
① 鸵鸟算法。忽略死锁。
② 死锁的预防。通过破坏产生死锁的四个必要条件中的一个或几个,来防止发生死锁。
(1) 破坏互斥条件
资源的互斥使用条件是由资源本身性质决定的,不能破坏。
如果采用spooling技术,借助磁盘空间,就可以将一台独享设备改造成多台设备,以满足多个进程的共享需求。如打印机。
实际中,不是所有设备都能采用spooling技术的。即使采用了该技术,由于多个进程竞争磁盘空间,磁盘空间的不足,仍可能导致死锁。
(2) 破坏保持和等待条件
让进程在开始运行前,就获得所需的全部资源。若系统不能满足,则该进程等待。
属静态分配,资源利用率低。
许多进程在开始运行之前,不能精确提出所用资源数量。
(3) 破坏非剥夺条件
当一个进程已占有某些资源,又申请新的资源而得不到满足时,则在进入阻塞状态前强行使其释放已经占有的资源。以后运行时,再重新申请。
显然也不行,因为保护进程放弃资源时的现场以及之后的恢复现场,系统要付出很高的代价。
(4) 破坏循环等待条件
将系统全部资源按类进行全局编号排序。进程对资源的请求必须按照资源的序号递增顺序进行。这样,就不会出现进程循环等待资源,预防死锁。
但找到能满足所有进程要求的资源编号是不可能的。
③ 死锁的避免。是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
(1) 进程--资源轨迹图
(2) 银行家算法
④ 死锁的检测和恢复。允许死锁发生。通过设置检测机构,及时检测出死锁的发生,然后采取适当措施清除死锁。
(1)死锁的检测——用进程资源图检测死锁
(2)死锁的恢复
① 故障终止一些进程
② 资源剥夺
16.理解银行家算法的实质。能够利用银行家算法避免死锁。
检查一个状态是否安全
1. 检查剩余请求矩阵Need是否有一行,其剩余请求向量小于等于系统剩余资源向量Avail。若不存在这样的行,系统将会死锁。
2. 若找到这样一行,则可以假设它获得所需的资源并运行结束,并将其占用资源归还系统。
3. 重复以上两步,直到所有进程都标记为终止;或者直到死锁发生,出现不安全状态。
大纲问题回答
1. 程序顺序执行的特点?(1)
◆封闭性、可再现性
⚫ 程序的顺序(串行)执行:计算机每次只运行一道程序。如单道批处理系统。
⚫ 封闭性:程序在运行时独占全机资源,因此,这些资源的状态只由一个程序决定和改变,不受外界因素影响。
⚫** 可再现性**:只要初始条件相同,无论程序连续运行,还是断断续续地运行,程序的执行结果不变。
优点:由于顺序程序的封闭性和可再现性,为程序员调试程序带来了很大方便。
缺点:由于资源的独占性,使得系统资源利用率非常低。
2. 何谓进程,进程由哪些部分组成?试述进程的四大特性(动态性、独立性、并发性、结构性)及进程和程序的区别。(1)
⚫ 进程是可以和其他程序并行执行的程序关于某个数据集合的一次执行过程
进程=程序+数据+PCB(进程控制块);
进程的四大特性
⚫ 动态性。进程是程序的一次执行过程,是临时的,有生命期的。
⚫ 独立性。进程是系统进行资源分配和调度的一个独立单位。
⚫ 并发性。多个进程可在处理机上交替执行。
⚫ 结构性。系统为每个进程建立一个进程控制块。
进程和程序的区别
1. 进程是动态的,程序是静态的。程序是有序代码的集合,进程是程序的执行,没有程序就没有进程。通常,进程不可以在计算机之间迁移,而程序可以复制。
2. 进程是暂时的,程序是永久的。
3. 进程包括程序、数据和进程控制块。
4. 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。进程可创建其他进程,而程序不能形成新的程序。多对多。
注:程序是静态的,进程是动态的。独立的执行过程比较好管理,而且和线程一样也具有并发性,进程可以创建其他进程,所以是需要有结构来管理的。
3. 进程控制块的作用是什么?它主要包括哪几部分内容?(2)
PCB 是进程存在的唯一标识。含有进程的描述信息和管理控制信息。
◆进程标识信息、处理器状态信息、进程控制信息
(一)进程标识信息
⚫ 进程标识数:用于唯一地标识一个进程,通常是一个整数。
外部标识符,由用户使用。如:send进程、print进程等。
(二)处理器状态信息
⚫ CPU现场保护区:保存进程运行的现场信息。
⚫记帐信息:包括使用CPU时间量、帐号等。
包括:程序计数器(PC)、程序状态字、通用寄存器、堆栈指针等。
(三)进程控制信息
⚫ 进程的状态、调度、存储器管理信息:是调度进程所必需的信息,包括进程状态、优先级、程序在主存地址、在外存的地址等。
⚫ 进程使用的资源信息:分配给进程的I/O设备、正在打开的文件等。
⚫** 进程之间的家族关系**:类Unix系统,进程之间存在着家族关系,父/子进程。Windows进程之间不具有父子关系。
⚫ 进程的链接指针:链接相同状态的进程。
注:进程标识数→哪个进程,CPU现场保护区→如何恢复,进程的状态、调度、存储器管理信息→状态、调度、存储,资源信息→资源,家族关系→父子关系,链接指针→状态相同关系
4. 进程的基本状态,试举出使进程状态发生变化的事件并描绘它的状态转换图。(3)
(1) 创建态:刚刚建立,未进就绪队列。
进程创建的时机:
⚫ 系统初始化。创建 init 进程
⚫ 用户命令请求创建进程
⚫ 运行中的进程执行了创建进程的系统调用。
(2) 就绪态 (ready):已获得除CPU之外的全部资源,只要再获得CPU,就可执行。
(3) 运行态 (running):进程正在CPU上运行。单CPU系统一次只有一个运行进程;多CPU系统可能有多个运行进程。
(4) 阻塞态 (blocked):又称等待态。当进程因等待某个条件发生而不能运行时所处的状态。等待I/O完成,等待一个消息,等待需要的数据到达等。
就绪→运行:系统调度;
运行→就绪:被抢占;
运行→阻塞:等待事件;
阻塞→就绪:事件完成;
(5) 终止态:已正常结束或故障中断,但尚未撤销。暂留在系统中,方便其它进程去收集该进程的有关信息。
进程结束的情形:
⚫ 正常退出(自愿的)
⚫ 错误退出(自愿的)
⚫ 致命错误(强制性的)
⚫ 被其它进程所杀(强制性的)
5. 什么是原语?什么是进程控制?(1)
原语,一般是指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程中不可被中断。
进程控制:是指系统使用一些具有特定功能的程序段来创建、撤销进程,以及完成进程各状态之间的转换。进程控制是由操作系统内核实现的。是属于原语一级的操作,不能被中断。
6. 进程调度的功能、方式、时机、算法。作业调度,交换调度。作业的周转时间和作业的带权周转时间?(4)
进程调度的功能
(1) 管理系统中各进程的执行状况
管理进程控制块,将进程的状态变化及资源需求情况及时地记录到PCB中。
(2) 选择就绪进程占有CPU
(3) 进行进程上下文的切换
将正在执行进程的上下文保存在该进程的PCB中,将刚选中进程的运行现场恢复起来,以便执行。
进程调度的方式
① 非抢占方式(非剥夺方式)
某一进程占用CPU,直到运行完或不能运行为止,其间不被剥夺。用在批处理系统。主要优点:简单、系统开销小。
② 抢占方式(剥夺方式)
调度程序基于某种策略(优先级、时间片等)剥夺现运行进程的CPU给其它进程。用在分时系统、实时系统。
进程调度的时机
(1)进程完成或错误终止;
(2)提出I/O请求,等待I/O完成时;
(3)在分时系统,按照时间片轮转,分给进程的时间片用完时;
(4)优先级调度,有更高优先级进程就绪;
(5)进程执行了某种原语操作,如阻塞原语和唤醒原语,都可能引起进程调度。
进程调度算法
(1)先来先服务 (FCFS)
(2)最短作业优先 (SJF)
(3)响应比高者优先 (HRN)
(4)优先级调度法
(5)轮转法 (Round Robin)
(6)多级反馈队列轮转法
处理机的调度级别
⚫ 作业调度:高级调度。多道批处理系统。多个用户作业提交到外存,形成后备作业队列。被作业调度选中进内存,就处于运行态。
⚫ 交换调度:中级调度。将主存中暂不具备运行条件的进程换出到外存交换区;或将外存交换区中的已具备运行条件的进程换入主存。交换调度可以控制进程对主存的使用。
⚫ 进程调度:低级调度。为进程分配处理机。功能、方式、时机、算法。
周转时间:作业进入到退出的时间;
带权周转时间:周转时间/估计运行时间;
注:
以上除了进程调度都是进程调度的时机。以上由运行态到就绪态可能是时间片用完了(时间片轮转法)或者更高优先级的进程来了(优先级调度法),到终止态可能是进程正常完成或者由于某种错误终止运行,也有可能是执行了阻塞或者唤醒原语。
批处理系统也可以由运行态直接到就绪态,比如采用优先级调度算法。
7. 线程的定义,线程与进程的比较。系统对线程的支持(用户级线程、核心级线程、两级组合)。(5)
线程是进程中的一个可执行实体,是被操作系统调度的一个独立单位。
⚫ 进程在逻辑上表示OS要做的一个任务,线程表示完成该任务的许多可能的子任务。
⚫ 线程是进程中的一个可执行实体。
⚫ 以进程为单位分配资源,以线程为单位调度执行。
线程与进程的比较
(1)拥有的资源
⚫ 进程拥有一个独立的地址空间,用来存放若干代码段和数据段。拥有打开的文件,以及至少一个线程。
⚫ 一个进程内的多线程共享该进程的所有资源,线程自己拥有很少资源。
(2)调度
⚫ 进程调度需进行进程上下文的切换,开销大。
⚫ 同一进程内的线程切换,仅把线程拥有的一小部分资源变换了即可,效率高。同一进程内的线程切换比进程切换快得多。不同进程的线程切换…
(3)并发性
引入线程后,使得系统的并发执行程度更高。
进程之间、进程内的多线程之间可并发执行。
(4)安全性
同一进程的多线程共享进程的所有资源,一个线程可以改变另一个线程的数据,共享数据方便。多进程实现,安全性好。
1)用户级线程
➢ 有关线程的所有管理工作都由用户进程通过调用用户态运行的线程库完成。自己设计线程调度算法。
➢ 内核以进程为单位进行调度。一个线程阻塞,其依附的进程也阻塞。
➢ 多线程对应核心级一个进程。
➢ 如,POSIX的Pthread线程库
2)核心级线程
➢ 有关线程的管理工作都由内核完成。应用程序通过系统调用来创建或撤销线程。
➢ 一个线程的阻塞,不影响其他线程的执行。
➢ Windows Linux 多处理机系统
3)两级组合
➢ 既支持用户级线程,也支持核心级线程。
➢ 用户级多个线程对应核心级多个线程。
➢ 当内核了解到一个线程阻塞后,通知运行时系统,重新调度其他线程。
8. 并发执行的进程在系统中通常表现为几种关系?各是在什么情况下发生的?(2)
(1)对资源的共享引起的互斥关系
进程之间本来是相互独立的,但由于共享资源而产生了关系。间接制约关系,互斥关系。
(2)协作完成同一个任务引起的同步关系
一组协作进程要在某些同步点上相互等待发信息后才能继续运行。直接制约关系,同步关系。
(3)进程之间的前序关系
由于进程之间的互斥同步关系,使得进程之间具有了前序关系,这些关系决定了各个进程创建和终止的时间。
9. 什么叫临界资源?什么叫临界区?对临界区的使用应符合的四个准则(互斥使用、让权等待、有空让进、有限等待)。(4)
⚫ 临界资源:一次仅允许一个进程使用的系统中共享资源。
⚫ 临界区 (critical section):并发进程访问临界资源的那段必须互斥执行的程序。
互斥使用;让权等待;有空让进;有限等待
➢ 不能同时有两个进程在临界区内执行
➢ 等待进入临界区的进程,应释放处理机后阻塞等待
➢ 在临界区外运行的进程不可阻止其他进程进入临界区
➢ 不应使要进入临界区的进程无限期等待在临界区之外
注:都是针对临界区外的进程而言的,两个是关于进入的,两个是关于等待的,不能有两个进程同时进入,不能阻止其他进程进入,应释放处理机阻塞等待,不能无限期等待。
10.解决进程之间互斥的办法:开、关中断,加锁、开锁(又叫测试与设置,通常由一条机器指令完成),软件方法,信号量与P、V操作。(1)
硬件实现方法
(1) 关中断 最简单的方法。在进程刚进入临界区时,立即禁止所有中断;在进程要离开之前再打开中断。因为CPU只有在发生时钟中断或其它中断时才会进行进程切换。
关中断 (disableInterrupt)
开中断 (enableInterrupt)
⚫ 优点:简单。
⚫ 缺点:限制了处理机交叉执行程序的能力
➢把禁止中断的权力交给用户进程是不明智的。(若用户进程禁止中断之后不再打开中断,其结果将会如何?整个系统可能会因此终止)。
➢若是多处理机系统,则禁止中断仅仅对执行本指令的那个CPU有效。其他CPU仍将继续运行,并可以访问临界资源。
(2) 使用测试和设置硬件指令
⚫ 锁位变量W:为每个临界资源设置一个,以指示其当前状态。W=0,表示资源空闲可用;W=1,表示资源已被占用。
⚫ test&set 硬件指令测试(读取)锁位变量的值:
boolean test&set(w){
result=w;
w=1; return result;
}//一条机器指令,其执行不可被中断。
Const int n; /*进程数 */
int w;
void p(int i){
while(1){
while(test&set(w)); //加锁
<critical section>
w=0; //开锁
<remainder section>
}}
显然,采用这种加锁语句,由于进程循环测试,白白浪费了CPU的时间。这种现象又叫做“忙等”。
(3)软件实现方法
为了进入临界区,进程Pi首先设置flag[i]为true,设置turn为j,表示Pi准备好了,礼让Pj进入临界区。如果两个进程都准备好了,最终由turn值(i或j)决定谁能进入临界区。
不能满足有限等待
⚫ 软件实现方法:复杂
⚫ 硬件实现方法:
➢关中断:影响系统效率,仅限于单处理器
➢test&set硬件指令:需要一定等级的硬件支持,单处理器或多处理器均可
11.若信号量S表示某一类资源,则对S执行P、V操作的直观含义是什么? 当进程对信号量S执行P、V操作时,S的值发生变化,当S>0、S=0和S<0时,其物理意义是什么?(2)
P操作原语:
⚫ P(s):s.value减1,如果s.value < 0,进程等待
// wait(s);
void P (sem &s) {
s.value = s.value-1;
//表示申请一个资源(或通过信号量s等消息)
if (s.value < 0) {
add this process to s.list;
block( );
} //资源用完,调用阻塞原语。“让权等待”
}
V操作原语:
⚫ V(s):s.value加1,如果s.value ≤ 0,唤醒一个等待的进程
// signal(s);
void V (sem &s) {
s.value = s.value+1;
//释放一个资源(或通过信号量s发消息)
if (s.value <= 0) {
remove a process P from s.list;
wakeup( );
} //表示在信号链表中,仍有等待该资源的进程被阻塞。调用唤醒原语。
}
信号量S的物理意义:S>=0时表示某资源的可用数,s<0时其绝对值表示阻塞队列中等待该资源的进程数。
P操作相当于申请一个资源,得不到阻塞;V操作相当于归还一个资源,如有等待该资源的进程,则唤醒。
S>0时 S表示可使用的资源数或表示可使用资源的进程数;
S=0时 S表示无资源可供使用或表示不允许进程再进入临界区;
S<0时 S表示等待使用资源的进程个数或表示等待进入临界区的进程个数。
12.在用P/V操作实现进程通信时,应根据什么原则对信号量赋初值?(3)
根据资源可用的数量
互斥信号量:允许几个进程同时访问,就设初值为几;
同步信号量:利用生产者消费者的观点,分析资源的数目,并设置对应数值为信号量初值;
13.经典的IPC问题。(6)
14.进程高级通信有哪些实现机制?(4)
◆消息缓冲、信箱、管道、共享主存区
消息缓冲:发送进程申请一个缓冲池中的缓冲区,将消息放入其中,再将缓冲区链接到接收进程的消息队列中;
信箱:发送进程将消息发送到信箱,接收进程从中接收消息;
管道:用于连接一个读进程和一个写进程的共享文件,先进先出,通过操作系统管理的核心缓冲区实现;
共享存储区:直接在主存划出一大块共享存储区,连接到各自地址空间,通过对其读写来共享数据;
15.死锁产生的必要条件及解决死锁的方法。(4)
- 互斥条件。独占性的资源。
2) 保持和等待条件。进程因请求资源而阻塞时,对已经获得的资源保持不放。
3) 不剥夺条件。已分配给进程的资源不能被剥夺,只能由进程自己释放。
4) 循环等待条件。存在一个进程循环链,链中每个进程都在等待链中的下一个进程所占用的资源。
① 鸵鸟算法。忽略死锁。
② 死锁的预防。通过破坏产生死锁的四个必要条件中的一个或几个,来防止发生死锁。
(1) 破坏互斥条件
资源的互斥使用条件是由资源本身性质决定的,不能破坏。
如果采用spooling技术,借助磁盘空间,就可以将一台独享设备改造成多台设备,以满足多个进程的共享需求。如打印机。
实际中,不是所有设备都能采用spooling技术的。即使采用了该技术,由于多个进程竞争磁盘空间,磁盘空间的不足,仍可能导致死锁。
(2) 破坏保持和等待条件
让进程在开始运行前,就获得所需的全部资源。若系统不能满足,则该进程等待。
属静态分配,资源利用率低。
许多进程在开始运行之前,不能精确提出所用资源数量。
(3) 破坏非剥夺条件
当一个进程已占有某些资源,又申请新的资源而得不到满足时,则在进入阻塞状态前强行使其释放已经占有的资源。以后运行时,再重新申请。
显然也不行,因为保护进程放弃资源时的现场以及之后的恢复现场,系统要付出很高的代价。
(4) 破坏循环等待条件
将系统全部资源按类进行全局编号排序。进程对资源的请求必须按照资源的序号递增顺序进行。这样,就不会出现进程循环等待资源,预防死锁。
但找到能满足所有进程要求的资源编号是不可能的。
③ 死锁的避免。是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
(1) 进程--资源轨迹图
(2) 银行家算法
④ 死锁的检测和恢复。允许死锁发生。通过设置检测机构,及时检测出死锁的发生,然后采取适当措施清除死锁。
(1)死锁的检测——用进程资源图检测死锁
(2)死锁的恢复
① 故障终止一些进程
② 资源剥夺
注:必要条件,一属性三不放,属性是互斥条件,保持和等待条件是内部不放,不剥夺是外部不放,循环等待是结构上的不放
16.理解银行家算法的实质。能够利用银行家算法避免死锁。(5)
检查一个状态是否安全
1. 检查剩余请求矩阵Need是否有一行,其剩余请求向量小于等于系统剩余资源向量Avail。若不存在这样的行,系统将会死锁。
2. 若找到这样一行,则可以假设它获得所需的资源并运行结束,并将其占用资源归还系统。
3. 重复以上两步,直到所有进程都标记为终止;或者直到死锁发生,出现不安全状态。