您的位置:首页 > 其它

操作系统 学习笔记2-进程管理

2014-11-14 00:25 260 查看
二:进程管理

进程管理是操作系统的核心内容,其中,进程概念、进程调度、信号量机制实现同步和互斥、进程死锁等更是重中之重。

2.1进程与线程

2.1.1进程的概念和特征

为此引入了进程的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发行和共享性。为此引入了进程的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性。

为了是参与并发执行的程序能独立的运行,必须为之配置一个专门的数据结构,称之为进程控制块(process control block,PCB),系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。

程序段、数据段和PCB三部分构成了进程映像(进程实体)。所谓创建进程,实质上是创建进程映像中的PCB;而撤销进程,实质上是撤销进程的PCB。进程映像是静态的,进程是动态的。

“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。

2.1.2进程的特征

进程是由多程序的并发执行而引出的,他和程序是两个截然不同的概念。

动态性:进程是程序的一次执行,有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态的产生、变化和消亡的。动态性是进程最基本的特征

并发性:指多个进程实体,同存于内存中,能在一段时间内同时运行,并发性是进程的重要特征,同时也是操作系统的重要特征,引入进程的目的就是为了是程序能与去其他进程的程序并发执行,以提高资源利用率。

独立性:指进程实体是一个能独立运行、独立获得资源和独立接收调度的基本单位。

异步性:由于进程的相互制约,是进程具有执行的间断性。也即进程按各自独立的、不可预知的速度向前推进。异步性会导致执行结果不可再现性,为此,在操作系统中必须配置相应的进程同步机制。

结构性:每个进程都配置一个PCB对其进行描述。从结构上来看,进程实体是由程序段、数据段和进程控制端三部分组成的。

2.1.3进程的状态与转换

进程在其生命周期内,由于系统中各进程之间的相互制约关系以及系统的运行环境的变化,使的进程的状态也在不断地发生着变化。通常进程有以下五种状态。前三种是进程的基本状态。

运行状态:在单处理器的环境下,每一时刻最多只有一个进程处于运行状态。

就绪状态:进程已处于准备运行的状态,即进程获得了除CPU之外的一切所需资源,一旦得到处理器即可运行。

阻塞状态:又称为等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理器),或等待输入输出的完成。即使处理器空闲,该进程也不能运行。

创建状态:进程正在被创建,尚未转到就绪状态。创建进程通常需要多个步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时所必须的资源;最后把该进程转入到就绪状态。

结束状态:进程正在从系统中消失,这可能是进程正常结束或其他原因中断退出运行。当进程需要结束运行时,系统首先必须置该进程为结束状态,然后再进一步处理资源释放和回收工作。

注意区别就绪状态和等待状态:就绪状态是指进程仅缺少处理器,只要获得处理器资源就立即执行;而等待状态是指进程需要其他资源或等待某一事件,及时处理器空闲也不能运行。

2.1.4进程控制

进程控制的主要功能是对系统中所有进程实施有效地管理,具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段成为原语,原语的特点是执行期间不允许中断,是一个不可分割的基本单位。

2.1.5进程的创建

允许一个进程创建另一个进程。

2.1.6进程的终止

引起进程终止的事件主要有:正常结束、表示进程的任务已经完成和准备退出运行。异常结束是指进程在运行时,发生了某种异常事件,是程序无法继续运行,如:存储区越界、保护错、非法指令、特权指令错、I/O故障等。外界干预是指进程外界的请求而终止,如操作员或操作系统干预、父进程请求和父进程终止。

2.1.7进程的阻塞和唤醒

正在执行的进程,由于期待的某些时间未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作可做等,则由系统自动执行阻塞原语,使自己由运行状态变为阻塞状态。可见,进程的阻塞是进程自身的一种主动行为

2.1.8进程的切换

无论什么样的进程操作,都是在操作系统内核执行的。

进程切换是指当前正在运行的进程被转换到其他状态后,再回到运行继续执行的过程,这个过程中,进程的运行环境产生了实质性的变化。进程切换的过程如下:

保存处理器上下文,包括程序计数器和其他寄存器。

更新PCB信息。

把进程的PCB移入相应的队列,如就绪、在某时间阻塞等队列。

选择另一个进程执行,并更新其PCB。更新内存管理的数据结构。

恢复处理器的上下文。

2.1.9进程的组织

进程是操作系统的资源分配和独立运行的基本单位。

进程控制块

PCB是进程实体的一部分,是进程存在的唯一标识。

PCB主要包括:进程描述信息、进程控制和管理信息、资源分配清单和处理器相关信息等。

程序段

程序段就是能被进程调度程度调度到CPU执行的程序代码段。注意,程序可以被多个进程共享,就是说多个进程可以运行同一个程序。

数据段

一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

2.1.10进程的通信

进程通信就是进程之间的数据交换。PV操作时低级通信方式2,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法可分为共享存储、消息传递和管道通信三大类。

共享存储

在通信的进程之间存在着一块可以直接访问的共享空间,通过对这块共享空间的读写操作时间进程之间的信息交换。在共享存储方法中,需要使用同步互斥工具。

用户进程空间一般都是相互独立的,要想让两个用户进程共享空间,必须通过特殊系统调用实现,而进程内的线程是自然共享进程空间的。

消息传递

在消息传递系统中,进程间的数据交换,是以格式化的消息Message为单位的。分为直接通信方式和间接通信方式

管道通信

管道通信是消息传递的一种特殊方式。所谓管道,就是用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名为pipe文件。

2.1.11线程概念和多线程模型

线程的基本概念

引入进程的目的,是为了是多道程序能并发执行,以提高资源利用率和系统吞吐量;而引入线程,则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。

线程是一个基本的CPU执行单元,也是程序执行流的最小单元,线程是进程中的一个实体,是被系统独立调度和分派的基本单位。进程只作为除CPU以外的系统资源的分配单元,线程则作为处理器的分配单元。线程也有就绪、阻塞和运行三种基本状态。

线程和进程的比较

1.调度:线程是独立调度的基本单位,进程是资源拥有的基本单位。同一进程中,线程的切换不会引起进程的切换。在不同的进程中进行线程切换,会引起进程切换。

2.拥有资源:进程是拥有资源的基本单位,而线程不拥有系统资源,但线程可以访问其隶属进程的系统资源。

3.并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,线程之间也可以并发执行,从而是操作系统具有更好的并发性,大大提高了系统的吞吐量。

4.系统开销:线程开销极小。

5.地址空间和其他资源:进程的地址空间之间相互独立,同一进程的各线程间共享进程的资源,进程内的线程对进程外的其他进程不可见。

6.通信方面:进程间通信需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以直接读写进程数据段来进行通信。

线程的属性

在多线程操作系统中,八仙城作为独立运行的基本单位。此时的进程已不是一个基本可执行的实体。线程的主要属性如下:

线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。

不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统为他们创建不同的线程。

同一进程中的各个线程共享该进程所拥有的系统资源。

线程是处理器的独立调度单位,多个线程是可以并发执行的。

一个县城被创建后便开始了它的生命周期,直至终止,线程在生命周期内会经历等待态、就绪态和运行态等各种状态变化。

2.1.12线程的实现方法

线程的实现可以分为两类:用户级线程和内核级线程。

2.1.13多线程模型

有些系统同时支持用户线程和内核线程,由此产生了不同的多线程模型,即实现用户级线程和内核级线程的连接方式。

多对一模型。多对一模型将多个用户级线程映射到一个内核级线程。线程管理在用户空间完成。缺点:当一个线程在使用内核服务时被阻塞,那么整个进程就会被阻塞。

一对一模型。将每个用户级线程映射到一个内核级线程。特点:并发能力强,但开销较大。

多对多模型。特点:克服了多对一模型的并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

2.2线程的调度

2.2.1调度的概念

处理器调度是对处理器进行分配,就是从就绪队列中,按照一定的算法,选择一个进程并将处理器分配给它运行,以实现进程的并发执行。

处理器调度是多道程序操作系统的基础,它是操作系统设计的核心问题。

2.2.2调度的层次

一个作业从提交开始知道完成,往往要经历一下三级调度:

1)作业调度。又称高级调度:其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个或多个作业,给它们分配内存、输入输出设备等必要的资源。并建立相应的进程,以使他们获得竞争处理器的权利。(调度次数最少)

2)中级调度。又称内存调度。引入中级调度是为了提高内存利用率和系统吞吐率,应使那些暂时不能运行的进程调至外存等待,把此时的进程状态称为挂起状态。

3)进程调度。进程调度又称为低级调度,其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理器分配给它。(最基本,不可或缺,调度频率最多)

三级调度的联系

作业调度从外存的后备队列中选择一批作业进入内存,为他们建立进程。这些进程被送入就绪队列。进程调度从就绪队列中选出一个进程,并把其状态改为运行状态,把CPU分配给它。中级调度是位于高级调度和低级调度之间的一种调度。为了提高内存的利用率,系统将那些暂时不能运行的进程挂起来。当内存空间宽松式,通过中级调度选择具备运行条件的进程,将其唤醒。

2.2.3调度的时机、切换与过程

进程调度和切换程序是操作系统内核程序。

不能进行进程的调度与切换的情况有以下几种:

1.在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换。

2.进程在操作系统内核程序临界区中:进入临界区后,需要独占式的访问共享数据,理论上必须加锁,以防止其他并行程序的进入。

3.其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等等源自操作。在原子过程中,连中断都要屏蔽,更不应该进行进程的切换。

如果在上述过程中发生了引起调度的条件,并不能马上进行调度和切换,应置系统请求调度标志,知道上述过程结束后才能进行相应的调度和切换。

应该进行进程的调度与切换的情况有:

1.当发生引起调度条件且当前进程无法继续运行下去时,可以马上进行调度与切换。(非剥夺调度)。

2.当中断处理结束后或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换。(剥夺方式的调度)

现场切换时,操作系统内核将远近程的现场信息推入到当前进程的内核对战来保存他们,并更新堆栈指针。

2.2.4进程调度方式

是指当某一个进程正在处理器上执行时,若有某个更为重要或紧迫的进程需要处理,既有优先权更高的进程进入就绪队列,此时应如何分配处理器。通常有两种进程调度方式:

非剥夺调度方式

非剥夺调度方式又称为非抢占调度方式,是指当一个进程正在处理器上执行时,即使有某个更为重要或紧迫的进程进入就绪状态,仍然让正在执行的进程继续执行,知道该进程完成或发生某种事件而进入阻塞状态时,才把处理器分配给更为重要或紧迫的进程。

剥夺调度方式

剥夺调度方式又称为抢占方式,是指当一个进程正在处理器上执行时,若有某个更为重要或紧迫的进程需要使用处理器,则立即暂停正在执行的进程,将处理器分配给这个更为重要或紧迫的进程。

“剥夺”不是一种任意性行为,必须遵循一定的原则:优先权原则,短进程优先原则和时间片原则。

2.2.5调度的基本准则

不同的调度算法具有不同的特性,在选择调度算法时,必须考虑算法所具有的特性。为了比较处理器调度算法的性能,人们提出很多评价准则,下面介绍主要的几种准则:

CPU利用率:CPU是计算机系统中最重要的资源之一,所以应尽可能使CPU保持在忙状态,是这一资源利用率最高。

系统吞吐量:系统吞吐量表示单位时间内CPU完成作业的数量。长作业需要消耗较长的处理器时间,因此会降低系统的吞吐量。而对于短作业,他们所需要消耗的处理器时间端,因此能提高系统的吞吐量。

周转时间:周转时间是指从作业提交到作业完成所经历的时间,包括作业等待、在就绪队列中排队、在处理器上运行以及进行输入输出操作所花费的时间的总和。

作业的周转时间=作业完成时间-作业提交时间

等待时间:等待时间是指进程处于等处理器状态时间之和,等待时间越长,用户满意度越低。衡量一个调度算法优劣常常只需简单地考察等待时间。

响应时间:响应时间是指从用户提交请求到系统首次产生响应所有的时间。

2.2.6典型的调度算法

通常系统的设计目标不同,所采用的调度算法也不同。在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用。下面介绍几种常用的调度算法:

FIFS先来先服务调度算法:

特点:算法简单,但是效率低;有利于长作业,不利于短作业;有利于CPU繁忙型作业而不利于I/O繁忙型作业。(不可剥夺算法,不能作为分时系统和实时系统)

SJF短作业优先调度算法

短作业(进程)优先调度算法是指对短作业进程优先调度的算法。短作业优先调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。

SJF调度算法的缺点:该算法对长作业不理。该算法完全未考虑作业的紧迫程度。由于作业的长短只根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意的缩短其作业的估计运行时间,致使该算法不一定能真正做到算作业优先调度。

注意:SJF调度算法的平均等待时间、平均周转时间最少。

优先级调度算法

高响应比优先调度算法

高响应比优先调度算法主要用于作业调度。同时考虑从每个作业的等待时间和估计需要运行的时间。

响应比 =(等待时间+要求服务时间)/ 要求服务时间,即RR=(w+s)/s=1+w/s。

时间片轮转调度算法

时间片轮转调度算法主要适用于分时系统。主要目的是使得多个交互的用户能够得到及时响应。如果时间片够大,算法将退化为先来先服务调度算法。

多级反馈队列调度算法

多级反馈队列调度算法主要是时间片轮转调度算法和优先级调度算法的综合和发展。通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。

2.3进程同步

2.3.1进程同步的基本概念

为了协调进程之间的相互制约关系,达到资源共享和进程协作,避免进程之间的冲突,引入了进程同步的概念。

临界资源

多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所使用,我们把一次只允许一个进程使用的资源成为临界资源。

对临界资源的访问,必须互斥的进行。每个进程中,访问临界资源的那段代码成为临界区

为了保证临界资源的正确使用,可以把临界资源的访问过程分为四个部分。

进入区。为了进入临界区使用临界资源,在进入去要检查可否进入临界区。

临界区。进程中访问临界资源的那段代码。

退出区。将正在访问临界区的标志清除。

剩余区。代码中的其余部分。

同步

同步也称为直接制约关系,它是为完成某种任务而建立的两个或多个进程。这些进程因为需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系就是它们之间的相互合作。

互斥

互斥亦称间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一个进程才允许去访问此临界资源。

2.3.2实现临界区互斥的基本方法

软件实现方法

在进入区设置和检查一些标志来表名是否有进程在临界区中,如果已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。

硬件实现方法

硬件方法优点:适用于任意数目的进程,不管是单处理器还是多处理器:简单、容易验证其正确性。可以支持进程内有多个临界区,只需要为每个临界区设立一个布尔变量。

硬件方法的缺点:进程等待进入临界区时要耗费处理器时间,不能实现让权等待。从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,从而导致“饥饿”现象。

2.3.3信号量

信号量机构是一种功能较强的机制,可用来解决互斥与同步的问题,它只能被两个标准原语wait和signal来访问,也可以记作p操作和v操作。

原语是指完成某种功能且不被分割不被中断执行的操作序列,有时也成为原子操作,通常可用硬件来实现完成某种功能的不可分割执行特性。

利用信号量实现同步

信号量机构能用于解决进程间各种同步问题。

利用信号量实现互斥

信号量机构能很方便的解决进程互斥问题。

互斥的实现是不同进程对同一信号量进行P操作和V操作,一个进程在成功地对信号量执行了P操作后进入临界区,并在退出临界区后,由该进程本身对该信号量执行V操作,表示当前没有进城进入临界区,可让其他进程进入。

利用信号量实现前驱关系

信号量也可以用来描述程序之间或者语句之间的前驱关系。

2.3.4管程

管程是一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。

管程的组成

局部与管程的共享结构数据说明

对该数据结构进行操作的一组过程

对局部于管程的共享数据设置初始值的语句

管程的基本特性

1局部于管程的数据只能被局部于管程内的过程所访问。

2一个进程只有通过调用管程内的过程才能进入管程访问的共享数据。

3每次仅允许一个进程在管程内执行某个内部过程。

2.4、死锁

2.4.1死锁的概念

在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力。然而,多个进程的并发执行也带来了新的问题——死锁。所谓死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进

2.4.2死锁产生的原因

1.系统资源的竞争

通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中会因争夺资源而陷入僵局。只有对不可剥夺资源的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。

2.进程推进顺序非法

进程在运行过程中,请求和释放资源的顺序不当,同样会导致死锁。

信号量使用不当也会造成死锁。进程间相互等待对方发来的消息,结果也会造成某些进程间无法继续向前推进。

3.死锁产生的必要条件

产生死锁必须同时满足以下四个条件,只要其中任一个条件不成立,死锁就不会发生。

互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅为一个进程所占用。此时若有其他进程请求该资源,则请求进程只能等待。

不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放。

请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。

循环等待条件:存在一种进程资源的循环等待链,连中每一个进程已获得的资源同时被链中的下一个进程所请求。

2.4.3死锁的处理策略

为使系统不发生死锁,必须设法破坏产生死锁的四个必要条件之一,或者允许死锁产生,但当死锁发生时能检测出思索,并有能力实现恢复。

死锁处理策略有:

1死锁预防:破坏死锁的四个必要条件之一。

2死锁避免:用某种方式防止系统进入不安全状态。

3死锁的检测及解除:允许进程在运行过程中发生死锁,通过系统的检测机构及时地检测出死锁的发生,然后采取某种措施解除死锁。

1.死锁预防

防止死锁发生只需要破坏死锁产生的四个必要条件之一即可。

(1)破坏互斥条件:允许系统资源都能共享使用。(不太可行)

(2)破坏不剥夺条件

当一个以保持了某些不可剥夺资源的进程,请求新的资源时得不到满足,它必须释放已经保持的所有资源,待以后需要时再重新申请。这种方法常用于状态易于保存和恢复的资源,如CPU的寄存器及内存资源,一般不能用于打印机之类的资源。

(3)破坏请求和保持条件

采用预先静态分配方法, 即进程在运行前一次申请完他所需要的全部资源,在他的资源未满足前,不把它投入运行。一旦运行后,这些资源就一直归它所有,也不再提出其他资源请求,这样就可以保证系统不会发生死锁。

实现简单,缺点是系统资源被严重浪费,其中有些资源可能仅在运行初期或末期才使用,甚至根本不使用。而且还会导致“饥饿”现象,当由于个别资源长期被个别资源占用时,将只是等待该资源的进程迟迟不能开始运行。

(4)破坏循环等待条件

为了破坏循环等待条件,可采用顺序资源分配法。首先给系统中的资源编号,规定每个进程,必须按编号递增的顺序请求资源,同类资源一次申请完。也就是说,只要进程提出申请分配资源,则该进程在以后的资源申请中,只能申请编号比之前大的资源。

2.死锁避免

避免死锁同样是属于事先预防的策略,但并不是事先采取某种限制措施破坏死锁的必须条件,而是在资源动态分配过程中,防止系统进入不安全状态,以避免死锁发生。这种方法所施加的限制条件较弱,可以获得较好的系统性能。

(1)系统安全状态

避免死锁的方法中,允许进程动态的申请资源,但系统在进行资源分配前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源你分配给进程,否则,让进程等待。

并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;反之,只要系统处于安全状态,系统便可以避免进入死锁状态。

(2)银行家算法

银行家算法是最著名的死锁避免算法。

它提出的思想是:把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足他的最大需求量,则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过,则拒绝分配资源,若没有超过则在测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

2.4.4死锁的检测和解除

若系统为进程分配资源时不采取任何措施,则应该提供死锁检查和解除的手段。

(1)资源分配图

系统死锁,可利用资源分配图来描述。用圆圈代表一个进程,用方框代表一类资源。由于一种类型的资源可能有很多歌,用框中的一个点代表一类资源中的一个资源。从进程到资源的有向边叫请求边,表示该进程申请一个单位的该类资源;从资源到进程的边叫做分配边,表示该类资源已经有一个资源被分配到了该进程。

(2)死锁定理

可以通过将资源分配图简化的方法来检测系统状态S是否为死锁状态。简化方法如下:

1)在资源分配图中,找出既不阻塞又不是孤点的进程Pi(即找出一条有向边与它相连,且该有向边对应资源的申请数量小于系统中已有空闲资源数量。若所有的连接该进程的边都满足上述条件,则这个进程能继续运行直至完成,然后释放它所占有的所有资源)。消去它所有的请求边和分配边,使之成为孤立的节点。

2)进程Pi所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可能变为非阻塞进程。

S为死锁的条件是当且仅当S状态的资源分配图是不可简化的,该条件为死锁定理

(3)死锁的解除

一旦检测出死锁,则应立即采取相应的措施,已解除死锁。死锁解除的主要方法有:

1.资源剥夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源时,而处于资源匮乏的状态。

2.进程撤销法。强制撤销部分甚至全部进程并剥夺这些进程的资源。撤销的原则可以按进程的优先级和撤销进程代价的高低进行。

3.进程回退法。让一个或多个进程回退到足以回避死锁的地步,进程回退时资源释放资源而不是被剥夺。

一些小问题

1、进程与程序的区别与联系

(1)进程是程序以及数据在计算机上一次运行活动,是一个动态的概念。进程的运行实体是程序,离开程序的进程没有存在的意义。从静态角度来看,进程是由程序。数据和进程控制块PCB三部分组成的。而程序是一组有序的指令集合,是一种静态的概念。

(2)进程是程序一次执行的过程,它是动态的创建和消亡的,具有一定的生命周期,是暂时存在的。而程序则是一组代码的集合,它是永久存在的,可以长期保存。

(3)一个进程可以执行一个或几个程序,一个程序也可以构成多个进程。进程可创建进程,而程序不可能形成新的程序。

(4)进程和程序的组成不同,进程的组成包括程序、数据和PCB。

2、死锁与饥饿

具有等待队列的信号量的实现可能导致这样的情况:两个或多个进程无限的等待一个事件,而该事件只能由这些等待进程之一来产生。当出现这样的状态时,这些进程成为死锁。

说一组进程处于死锁状态是指:组内的每个进程都等待一个事件,而该事件只可能由组内的另一个进程产生。这里关心的主要事件是资源的获取和释放。

与死锁相关的另一个问题是无限期阻塞或“饥饿”,即进程在信号量内无穷等待的情况

产生饥饿的主要原因是:在一个动态系统中,对于每类系统资源,操作系统需要确定一个分配策略,当多个进程同时申请某类资源是,由分配策略确定资源分配给进程的次序。有的时候资源分配策略可能是不公平的,既不能保证等待时间上界的存在。在这种情况下,及时系统没有发生死锁,某些进程也可能会长时间等待。当等待时间给进程推荐和响应带来明显影响时,城发生了进程“饥饿”,当“饥饿”到一定程度的进程所赋予的任务即使完成也不再具有实际意义时就成该进程被“饿死”。

“饥饿”并不表示系统一定死锁。但至少有一个进程的执行被无限期的推迟,“饥饿”与死锁的主要区别有:

1)进入饥饿状态的进程可以只有一个,但由于循环等待条件进入死锁状态的进程却必须大于或等于两个。

2)处于饥饿状态的进程可以处于就绪状态,而处于死锁状态的进程则必定是处于阻塞状态。

3、银行家算法的工作原理

银行家算法的主要思想是避免系统进入不安全状态。在每次进行资源分配时,它首先检查系统是否有足够的资源满足要求,如果有,则先进行分配,并对分配后的新状态进行安全性检查。如果新状态安全,则正式分配上述资源,否则就拒绝分配上述资源。这样,它保证系统始终处于安全状态,从而避免死锁现象的发生。

4、进程同步、互斥的区别和联系

并发进程的执行会产生相互制约的关系:一种是进程之间竞争使用临界资源,只能让它们逐个使用,这种现象称为互斥,是一种竞争关系;另一种是进程之间协同完成任务,在关键点上等待另一个进程发来的消息,以便协同一致,是一种协作关系。

5、作业和进程的关系

进程是系统资源的使用者,系统的资源大部分都是以进程为单位分配的。而用户使用计算机是为了实现一串相关的任务,通常把用户要求计算机完成的这一串任务称为作业。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: