购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2.1 考点精讲

1.进程状态转换图

进程状态转换图用于展现进程的状态,以及各种状态之间的转换。最为常见的有:三态模型和五态模型,其后又提出了七态模型。在考试中,要求考生掌握五态模型。五态模型是对三态模型的扩展(即五态模型已经包含了三态模型)。标准的五态模型如图 2-1 所示。

从该图可以看出,五态模型中的五态为:执行状态(运行状态)、活跃就绪状态、活跃阻塞状态、挂起就绪状态、挂起阻塞状态。其中前三种状态组成了三态模型。

执行状态:指进程占有处理机正在CPU上执行的状态。在单CPU系统中,每一时刻只有一个进程处于执行状态。

活跃就绪状态:指进程分配到除处理机以外的必需的资源(已经具备了执行的条件)的状态。进程被创建后处于就绪状态,处于就绪状态的进程可以有多个。

活跃阻塞状态:指进程因等待某个事件的发生而放弃处理机进入等待状态。系统中处于这种状态的进程可以有多个。

图 2-1 进程状态转换五态模型

挂起就绪状态:指进程被移至磁盘镜像区中,此时进程只缺处理机资源。

挂起阻塞状态:指进程被移至磁盘镜像区中,此时进程除了缺处理机资源,还缺其他资源。

2.信号量与PV操作

在操作系统中,进程之间经常会存在互斥和同步两种关系。为了有效地处理这两种情况,W. Dijkstra在 1965 年提出信号量和PV操作。

信号量是一种特殊的变量,表现形式是一个整型S和一个队列。

P操作:也称为down()、wait()操作,使S=S−1,若S<0,进程暂停执行,放入信号量的等待队列。

V操作:也称为up()、signal()操作,使S=S+1,若S≤ 0 ,唤醒等待队列中的一个进程。

(1)完成互斥控制

也就是为了保护共享资源,不让多个进程同时访问这个共享资源,换句话说,就是阻止多个进程同时进入访问这些资源的代码段,这个代码段称为临界区(也称为管程),而这种一次只允许一个进程访问的资源称为临界资源。为了实现进程互斥地进入自己的临界区,代码可以如下所示。

由于只允许一个进程进入,因此信号量中整型值的初始应该为1。该值表示可以允许多少个进程进入,当该值<0时,其绝对值就是等待使用的进程数,也就是等待队列中的进程数。而当一个进程从临界区出来时,就会将整型值加1,如果等待队列中还有进程,则调入一个新的进程进入(唤醒)。

(2)完成同步控制

最简单的同步形式是:进程A在另一个进程B到达L2 以前,不应前进到超过点L1,这样就可以使用程序,如下所示。

因此要确保进程B执行V操作之前,不让进程A的运行超过L1,因此信号量的初值就应该为 0。这样,如果进程A先执行到L1,那么执行P操作后,信号量的整型值就会小于 1,也就停止执行。直到进程B执行到L2 时,将信号量的整型值加 1,并唤醒它以继续执行。

在考试中,该知识点出题形式主要是给出一系列操作,让考生在适当位置填充P操作或V操作。

3.死锁问题

死锁是指各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源,从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。

产生死锁的根本原因在于系统提供的资源个数少于并发进程所要求的该类资源数。产生死锁有 4 个必要条件。

(1)互斥条件:即一个资源每次只能被一个进程使用,在操作系统中这是真实存在的情况。

(2)保持和等待条件:有一个进程已获得了一些资源,但因请求其他资源被阻塞时,对已获得的资源保持不放。

(3)不剥夺条件:有些系统资源是不可剥夺的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完时自己释放。

(4)环路等待条件:若干个进程形成环形链,每个都占用对方要申请的下一个资源。

对待死锁的策略主要有:

(1)死锁的预防。不让任一产生死锁的必要条件发生就可以预防死锁。

(2)死锁的避免。这种策略不对用户进程的推进顺序加以限制,在进程申请资源时先判断这次分配是否安全,只有安全才实施分配,典型的算法是银行家算法。

(3)死锁的检测。这种策略采用资源请求分配图的化简方法来判断是否发生了不安全状态。资源请求分配图是一种有向图,表示进程与资源之间的关系。死锁的检测是在需要的时刻执行的,当发现系统处于不安全状态时,即执行死锁的解除策略。

(4)死锁的解除。解除死锁的基本方法是剥夺。一种方法是把资源从一些进程处剥夺分给别的进程,被剥夺资源的进程则需回退到请求资源处重新等待执行;另一种方法是终止一个进程,剥夺其全部资源,以后再重新运行被终止的进程。

4.银行家算法

银行家算法是一种经典的死锁避免方法。银行家算法的基本思想是:当某个进程提出申请时,必须判断将资源分配给该进程后会不会引起死锁。若不会,则进行分配;否则就不分配。这样做能保证在任何时刻至少有一个进程可以得到所需的全部资源而执行结束,并将归还资源加入到系统的剩余资源中,这些资源又至少可以满足一个进程的最大需求,于是保证所有进程都能在有限的时间内得到需求的全部资源。

按照银行家算法的思想,当进程请求资源时,系统将按如下原则分配资源。

(1)当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程。

(2)进程可以分期请求资源,但请求的总数不能超过最大需求量。

(3)当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。

(4)当系统现有的资源能满足进程尚需资源数时,必须测试系统现存的资源能否满足该进程尚需的最大资源数,若能满足则按当前的申请量分配资源,否则也要推迟分配。 Ej4NW4yqTXbdE+Bjh7eMzoS2tlVKx3SA/hkWA7wVoNT4XW4ZmaKrzf+G0XTjCoc8

点击中间区域
呼出菜单
上一章
目录
下一章
×