|
知识路径: > 计算机系统基础知识 > 软件基础知识 > 操作系统的类型、配置操作系统的功能 > 操作系统基础知识 >
|
考试要求:熟悉
相关知识点:6个
|
|
|
|
在多道程序环境中,CPU分配的主要对象是进程,操作系统通过选择一个合适的进程占有CPU来实现对CPU的管理,因此,对CPU的管理归根结底就是对进程的管理。操作系统有关进程方面的管理任务很多,主要有进程调度、进程控制、进程同步与互斥、进程通信、死锁检测与处理等。
|
|
|
|
(1)进程的定义。程序可以顺序执行也可以并发执行。程序顺序执行时处理机的操作严格按照程序所规定的顺序执行;而且程序是在封闭的环境下运行的,即程序运行时它独占全机资源,程序一旦运行,其执行结果不受外界因素的影响;只要程序执行时的环境和初始条件相同,当程序多次重复执行时,都将获得相同的结果。而程序并发执行时,由于它们共享资源或相互合作,致使在并发程序之间形成了相互制约的关系,从而导致并发程序执行具有"执行——暂停执行——执行"这种间断性的活动规律;而且程序并发执行时会失去封闭性。例如,当处理机资源被其他程序占有时,某程序必须等待;由于失去了封闭性,也将导致失去其可再现性。
|
|
|
为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,而专门为之配置了一个称为"进程控制块(PCB)"的数据结构,其中存放了进程标识符、进程运行的当前状态、程序和数据的地址,以及能保存该程序运行时CPU的环境信息。
|
|
|
由程序段、数据段及进程控制块三部分构成了一个进程的实体。可把"进程"定义为"可并发执行的程序在一个数据集合上的运行过程"。
|
|
|
(2)进程的特征。进程和程序是两个截然不同的概念,进程具有5个基本特征,而程序不具备这些特征。
|
|
|
①动态性。它是指进程对应着程序的执行过程。体现在两方面:一方面,进程动态产生,动态消亡;另一方面,在进程生命周期内,其状态动态变化。而程序只是一组有序指令的集合,并存放在某种介质上,本身并无运动的含义,可以说是静态实体。
|
|
|
②并发性。它是指多个进程实体同存于内存中,能在一段时间内同时运行。并发性是进程的重要特征,同时也是引入进程的目的。而程序是不能并发执行的。
|
|
|
③独立性。它是指进程实体是一个能独立运行的基本单位,同时也是系统获得独立资源和独立调度的基本单位。凡未建立进程的程序,都不能作为一个独立的单位参加运行。
|
|
|
④异步性。它是指进程按各自独立的、不可预知的速度向前推进。或者说,进出按异步方式运行。
|
|
|
⑤结构特征。从结构上看,进程是由程序段、数据段及进程控制块三部分组成,有人把这三部分统称为"进程映像"。
|
|
|
(3)进程的状态。进程的动态性表明进程在其生存期内需要经历一系列的离散状态。运行中的进程可以处于以下3种状态之一,即就绪、运行、等待。
|
|
|
①就绪(Ready)状态是指一个进程已经具备运行条件,但由于没有获得CPU而不能运行所处的状态。一旦把CPU分配给它,该进程就可运行。处于就绪状态的进程可以是多个。
|
|
|
②运行状态又称为执行状态,是指进程已获得CPU,并且在CPU上执行的状态。显然,在一个单CPU系统中,最多只有一个进程处于执行状态。
|
|
|
③等待状态也称为阻塞(Block)状态或封锁状态,是指进程因等待某种事件发生而暂时不能运行的状态。例如,当两个进程竞争使用同一个资源时,没有占用该资源的进程便处于等待状态,它必须等到该资源被释放后才可以去使用它。引起等待的原因一旦消失,进程便转为就绪状态,以便在适当的时候投入运行。系统中处于等待状态的进程可以有多个。
|
|
|
进程在运行期间,不断地从一个状态转换到另一个状态,可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态(但可能排在不同的阻塞队列)。这3种状态之间的典型转换如下图所示。
|
|
|
|
|
(4)进程控制块。为了便于系统控制和描述进程的活动过程,在操作系统核心中为进程定义了一个专门的数据结构,称为进程控制块(Process Control Block, PCB), PCB是进程的"灵魂"。系统利用PCB来描述进程的基本情况以及进程的运行变化过程。PCB是进程存在的唯一标志。当系统创建一个进程时,为该进程设置一个PCB,再利用PCB对进程进行控制和管理。撤销进程时,系统收回它的PCB,进程也随之消亡。PCB的内容可以分成调度信息和现场信息两大部分。调度信息供进程调度时使用,描述了进程当前所处的状况,包括进程名、进程号、存储信息、优先级、当前状态、资源清单、"家族"关系、消息队列指针、进程队列指针和当前打开文件等。现场信息刻画了进程的运行情况,由于每个进程都有自己专用的工作存储区,其他进程运行时不会改变它的内容,所以,PCB中的现场信息只记录那些可能会被其他进程改变的寄存器,如程序状态字、时钟、界地址寄存器等。一旦中断进程的运行,必须把中断时刻的内容记入PCB的现场信息。由于进程控制块中保存有进程的地址信息,通过PCB可以得到与进程对应的存储位置,也可以找到整个进程(程序和数据是进程的"躯体")。为了实现对进程的管理,将系统所有进程的PCB排成若干个队列。通常,系统中进程队列分成以下3类。
|
|
|
①就绪队列。整个系统拥有一个就绪队列,所有处于就绪状态的进程都按照某种原则排在该队列中。进程入队和出队的次序与处理机调度算法有关。在有些系统中,就绪队列可能有若干个。
|
|
|
②等待队列。每一个等待事件对应一个队列。当进程等待某一事件时,进入与该事件相应的等待队列。当某事件发生时,与该事件相关的一个或多个进程离开相应的等待队列。
|
|
|
③运行队列。实际上,一个运行队列中只有一个进程,可用一个指针指向该进程。
|
|
|
(5)进程的控制。进程的控制就是对系统中所有进程从创建到消亡全过程实施有效的控制。这意味着不仅要控制正在运行的进程,而且还要能创建新的进程,撤销已完成的进程。进程的控制机构是由操作系统内核实现的。通常将与硬件密切相关的模块放在紧挨硬件的软件层中,并使它们常驻内存,以便提高操作系统的运行效率,通常将这部分称为操作系统的内核,它为系统对进程进行控制和对存储器进行管理提供了有效的控制机制。不同的操作系统内核所包含的功能不同,但大多数操作系统的内核包含支撑功能和资源管理功能。
|
|
|
|
①中断处理。操作系统的各种重要活动最终都依赖于中断。例如,各种类型的系统调用、键盘命令的输入、设备驱动及文件系统等都依赖于中断。通常内核只对中断进行"有限次处理",然后转入有关进程继续处理。这不仅可以减少中断处理的时间,还可以提高程序的并发性。
|
|
|
②时钟管理。操作系统的许多活动要用到时钟管理。如分时系统时间片调度算法中,当时间片用完时,由时钟管理产生一个中断信号,通知调度程序重新调度。在实时系统中的截止时间控制、批处理系统中的最长运行时间控制等都要用到时钟管理。
|
|
|
③原语操作。内核在执行某些基本操作时,往往是通过原语操作来实现的。原语是由若干条机器指令构成的,用于完成特定功能的一段程序。原语在执行过程中是不可分割的。进程控制原语主要有创建原语、撤销原语、挂起原语、激活原语、阻塞原语及唤醒原语。内核中所包含的原语主要有进程控制、进程通信、资源管理及其他方面的原语。
|
|
|
(6)线程。线程是比进程更小的能独立运行的基本单位。在引入线程的操作系统中,线程是进程中的一个实体,是CPU调度和分派的基本单位。线程自己基本上不占用系统资源,只占用一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但它可与同属一个进程的其他线程共享该进程所占用的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中也呈现出间断性。相应地,线程也同样有就绪、等待和运行3种基本状态。在有的系统中线程还有终止状态。
|
|
|
|
|
|
|
④线程是处理机的独立调度单位,多个线程可以并发执行。
|
|
|
线程在生命周期内会经历等待状态、就绪状态和运行状态等各种状态变化。
|
|
|
|
(1)进程的异步。在多道程序环境下,系统中可能有许多进程,在这些进程间有资源共享关系,而这些资源往往一次只能为一个进程服务。因此,各进程间互斥使用这些资源,进程间的这种关系是进程的互斥。进程间的间接相互作用构成进程互斥。例如,多个进程在竞争使用打印机、一些变量、表格等资源时,表现为互斥关系。
|
|
|
(2)进程的同步。在多道程序环境下,系统中可能有许多进程,在这些进程间既可以有资源共享关系,也存在一种相互合作的关系。例如,有A、B两个进程,A进程负责从键盘读数据到缓冲区,B进程负责从缓冲区读数据进行计算。要完成读取数据并计算的工作,A进程和B进程要协同工作,即B进程只有等待A进程把数据送到缓冲区后才能进行计算,A进程只有等待B进程发出已把缓冲区数据取走的信号之后才能通过键盘向缓冲区中送数据;否则就会出现错误。这就是一个进程同步的问题。
|
|
|
同步是指进程之间的一种协同工作关系,使这些进程相互合作,共同完成一项任务。进程间的直接相互作用构成进程的同步。
|
|
|
(3)同步机制应遵循的准则。系统中一些资源一次只允许一个进程使用,这类资源称为临界资源。不论是硬件临界资源还是软件临界资源,多个进程必须互斥地对它进行访问,把在每个进程中访问临界资源的那段代码称为临界区(Critical Section)。为实现进程互斥,可利)用软件方法,也可在系统中设置专门的同步机制来协调进程,但所有的进程机制都应遵循下述4条准则。
|
|
|
①空闲让进。当无进程处于临界区时,相应的临界资源处于空闲状态,因而可允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。
|
|
|
②忙则等待。当已有进程进入自己的临界区时,意味着相应的临界资源正被访问,因而所有其他试图进入临界区的进程必须等待,以保证进程互斥地访问临界资源。
|
|
|
③有限等待。对要求访问临界资源的进程,应保证该进程能在有效时间内进入自己的临界区,以免陷入"死等"状态。
|
|
|
④让权等待。当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入"忙等"。
|
|
|
(4)信号量和P、V操作。用常规的程序来实现进程之间同步、互斥关系需要复杂的算法,而且会造成"忙等待",浪费CPU资源。为此引入信号量的概念,信号量是一个数据结构,定义如下:
|
|
|
|
它的表面形式是一个整型变量附加一个队列,而且它只能被特殊的操作(即P操作和V操作)使用。
|
|
|
P、V操作都是原语。原语是由若干条机器指令构成的一段程序,用以完成特定功能。原语在执行期间是不可分割的,即原语一旦开始执行,直到执行完毕之前,不允许中断。
|
|
|
可以利用信号量S(设信号量为S,S可以取不同的整数值)的取值表示共享资源的使用情况。在使用时,把信号量S放在进程运行的环境中,赋予其不同的初值,并在其上实施P操作和V操作,以实现进程间的同步与互斥。
|
|
|
|
①P(S)S=S-1;若S<0,则该进程进入S信号量的队列中等待。
|
|
|
②V(S)S=S+1;若S≤0,则释放S信号量队列上的一个等待进程,使之进入就绪队列。
|
|
|
当S>0时,表示还有资源可以分配;当S<0时,其绝对值表示S信号量等待队列中进程的数目。每执行一次P操作,意味着要求分配一个资源;每执行一次V操作,意味着释放一个资源。
|
|
|
(5)用P、V操作实现进程之间的互斥。令S初值为1,进程A、B竞争进入临界区的程序可以写成:
|
|
|
|
(6)用P、V操作实现进程间的同步。为解决前面所示的同步关系,可以设两个信号量,即S1和S2,且赋予它们的初值分别是:S1为1,S2为0。S1表示缓冲区中是否装满信息,S2表示缓冲区中信息是否取走。程序可写成:
|
|
|
|
|
并发进程在运行过程中,需要进行信息交换。交换的信息量可多可少,少的只是交换一些已定义的状态值或数值,如利用信号量和P、V操作;多的则需交换大量信息,而P、V操作只是低级通信原语,因此要引入高级通信原语,解决大量信息交换问题。
|
|
|
高级通信原语不仅保证相互制约的进程之间的正确关系,还同时实现了进程之间的信息交换。目前常用的高级通信机制有消息缓冲通信、管道通信和信箱通信。
|
|
|
(1)消息缓冲通信。消息缓冲通信的基本思想是:系统管理若干消息缓冲区,用以存放消息;每当一个进程(发送进程)向另一个进程(接收进程)发送消息时,便申请一个消息缓冲区,并把已准备好的消息送到缓冲区,然后把该消息缓冲区插入到接收进程的消息队列中,最后通知接收进程;接收进程收到发送进程发来的通知后,从本进程的消息队列中找到消息缓冲区,取出所需的信息,然后把消息缓冲区还给系统。
|
|
|
|
(2)管道通信。管道通信是以文件系统为基础。管道就是连接两个进程之间的一个打开的共享文件,专用于进程之间进行数据通信。发送进程可以源源不断地从管道一端写入数据流,接收进程在需要时可以从管道的另一端读出数据。
|
|
|
在对管道文件进行读写操作过程中,发送进程和接收进程要实施正确的同步和互斥,以确保通信的正确性。管道通信的实质是利用外存来进行数据通信,故具有传送数据量大的优点,但通信速度较慢。
|
|
|
(3)信箱通信。为了实现进程间的通信,设立一个通信机制——信箱,用来发送、接收信件。回答信件作为通信的基本方式。当一个进程希望与另一进程通信时,就创建一个链接两进程的信箱。
|
|
|
通信时发送进程只要把信件投入信箱,而接收进程可以在任何时刻取走信件。这种通信方式可以分单向信箱和双向信箱两种通信方式,后者是指发送进程要求接收进程予以回答。为了实现信箱通信,必须提供相应的原语,如创建信箱原语、撤销信箱原语、发送原语和接收原语等。
|
|
|
|
(1)进程控制原语。进程有一个从创建到消亡的生命周期,进程控制的作用就是对进程在整个生命周期中各种状态之间的转换进行有效的控制。进程控制是通过原语来实现的,用于进程控制的原语一般有创建原语、撤销原语、挂起原语、激活原语、阻塞原语、唤醒原语以及改变原语优先级等。
|
|
|
①创建原语。一个进程可以使用创建原语创建一个新的进程,前者称为父进程,后者称为子进程,子进程又可以创建新的子进程,构成新的父子关系。从而整个系统可以形成一个树形结构的进程家族。创建一个进程的主要任务是建立进程控制块(PCB)。具体操作过程是:先申请一空闲PCB区域,将有关信息填入PCB,置该进程为就绪状态,最后把它插入就绪队列中。
|
|
|
②撤销原语。当一个进程完成任务后,应当撤销它,以便及时释放它所占用的资源。撤销进程的实质是撤销PCB。一旦PCB撤销,进程就消亡了。具体操作过程是:找到要被撤销进程的PCB,将它从所在队列中消去,撤销属于该进程的一切"子孙进程",释放被撤销进程所占用的全部资源,并删去被撤销进程的PCB。
|
|
|
③阻塞原语。某进程在执行过程中,需要执行I/O操作,则由该进程调用阻塞原语把进程从运行状态转换为阻塞状态。具体操作过程是:由于进程正处于运行状态,因此首先应中断CPU执行,把CPU的当前状态保存在PCB的现场信息中,把进程的当前状态置为等待状态,并把它插入到该事件的等待队列中去。
|
|
|
④唤醒原语。一个进程因为等待事件的发生而处于等待状态,当等待事件完成后,就用唤醒原语将其转换为就绪状态。具体操作过程是:在等待队列中找到该进程,置进程的当前状态为就绪状态,然后将它从等待队列中撤出并插入到就绪队列中排队,等待调度执行。
|
|
|
|
①高级调度(High Level Scheduling),又称"长程调度"(Long-Term Scheduling)或"作业调度",它用于决定把外存上处于后备队列中的哪些作业调入内存并为它们创建进程,分配必要的资源,然后再将新创建的进程排在就绪队列上,准备执行,因此,高级调度又叫接纳调度(Admission Scheduling)。每个作业只需经过一次高级调度,每次执行时要作出以下两个决定,即接纳多少个作业和接纳哪些作业。
|
|
|
②低级调度(Low Level Scheduling),又称"短程调度"(Short-Term Scheduling)或"进程调度",它决定处于内存中的就绪队列中哪个进程可以占用处理机,运行频率很高。进程调度可采用下述两种方式。
|
|
|
.非抢占方式。一旦把处理机分配给某进程后,便让该进程一直执行,直至该进程完成或被阻塞时,才把处理机分配给其他进程,决不允许某进程抢占已经分配出去的处理机。
|
|
|
.抢占方式。允许调度程序根据某种原则,停止某个正在执行的进程,将已分配给该进程的处理机重新分配给另一进程。
|
|
|
③中级调度(Intermediate-Level Scheduling),又称"中程调度"或"对换调度",它决定处于交换区中的就绪进程哪个可以调入内存,以便直接参与对CPU的竞争。在内存资源紧张时,为了将进程调入内存,必须将内存中处于阻塞状态的进程调至交换区,以便为调入进程腾出空间。
|
|
|
(3)进程调度的主要功能及时机。进程调度记录系统中所有进程的执行状况,根据一定的调度算法,从就绪队列中选出一个进程,准备把CPU分配给它。即把选中进程的进程控制块内有关的现场信息,如程序状态字、通用寄存器等内容送入处理器相应的寄存器中,从而让它占用CPU。
|
|
|
|
|
②正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态。
|
|
|
③正在执行的进程调用了P原语操作,从而因资源不足而被阻塞;或调用了V原语操作激活了等待资源的进程。
|
|
|
|
⑤就绪队列中的某个进程的优先级变得高于当前运行进程的优先级,从而也将引起进程调度。
|
|
|
|
|
(1)先来先服务调度算法。先来先服务(FCFS)调度算法是按照作业提交或进程变为就绪状态的先后次序分配CPU。即每当进入进程调度时,总是将就绪队列队首的进程投入运行。FCFS的特点是比较有利于长作业,而不利于短作业;有利于CPU繁忙的作业,而不利于输入输出繁忙的作业。
|
|
|
(2)短进程优先(SPF)调度算法。短进程优先(SPF)调度算法是指对短作业或短进程优先调度的算法,这是一个非抢占的算法,选中一个进程后一直执行完。
|
|
|
(3)时间片轮转调度算法。时间片轮转调度算法主要是分时系统中使用的一种调度算法。时间片轮转调度算法的基本思想是:将CPU的处理时间划分成一个个时间片,就绪队列中的就绪进程轮流运行一个时间片;当一个时间片用完时,就强迫运行进程让出CPU,该进程进入就绪队列,等待下一次调度;同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。在时间片轮转调度算法中,时间片长度的选取非常重要,将直接影响系统开销和响应时间。如果时间片长度很小,则调度程序剥夺处理机的次数频繁,加重系统开销;反之,如果时间片长度选择过长,比方说一个时间片就能保证就绪队列中所有进程都执行完毕,则时间片轮转调度算法就退化成先来先服务调度算法。影响时间片大小的主要因素有系统响应时间、就绪进程数目(终端数目)和计算机处理能力。
|
|
|
(4)优先权调度算法。优先权调度算法分为静态优先权调度算法和动态优先权调度算法两种。
|
|
|
①静态优先权调度算法。进程的优先级是在创建时就已确定好了,直到进程终止都不会改变。优先级确定依据主要有进程类型(系统进程优先级较高)、对资源的需求(对CPU和内存需求较少的进程,优先级较高)和用户要求(紧迫程度和付费多少)。
|
|
|
②动态优先权调度算法。在创建进程时赋予一个优先级,在进程运行过程中还可以改变,以便获得更好的调度性能。进程每执行一个时间片,就降低其优先级,从而一个进程持续执行时,其优先级可能会降低到让出CPU为止。
|
|
|
(5)高响应比调度算法。高响应比调度算法的特点是:如果作业等待时间相同,则要求服务的时间越短优先权越高,有利于短作业;当要求服务时间相同时,作业的优先权决定于其等待时间,实现了先来先服务;对于长作业,当其等待的时间足够长时,其优先权便可升到很高,从而也可以获得处理机。
|
|
|
(6)多级反馈调度算法。多级反馈调度算法是时间片轮转算法和优先级算法的综合与发展。其优点是:照顾了短进程,提高了系统吞吐量,缩短了平均周转时间;照顾了输入输出型进程,获得较好的输入输出设备利用率和缩短响应时间;不必估计进程的执行时间,可动态调节优先级。
|
|
|
|
(1)死锁的概念。在多道程序系统中,一组进程中的每一个进程均无限期地等待被该组进程中的另一进程所占有且永远不会释放的资源,这种现象称系统处于死锁状态。处于死锁状态的进程称为死锁进程。当死锁发生后,死锁进程将一直等待下去,除非有来自死锁进程之外的某种干预。系统发生死锁时,死锁进程的个数至少为两个;所有死锁进程都在等待资源,其中,至少有两个进程已占有资源。系统发生死锁不仅浪费大量的系统资源,甚至会导致整个系统崩溃,带来灾难性的后果。
|
|
|
死锁是若干进程因使用资源不当而造成的现象。按照资源的使用性质,一般把系统中的资源分成永久性资源和临时性资源两类。永久性资源(可再使用资源)是指系统中那些可供进程重复使用、长期存在的资源,如内存、外部设备、CPU等硬件资源,以及各种数据文件、表格、共享程序代码等软件资源。临时性资源(消耗性资源)是指由某个进程所产生、只为另一个进程使用一次,或经过短暂时间后便不再使用的资源,如I/O和时钟中断、同步信号、消息等。
|
|
|
(2)产生死锁的必要条件。产生死锁的原因:一是系统提供的资源数量有限,不能满足每个进程的使用;二是多道程序运行时,进程推进顺序不合理。可再用资源和消耗性资源都可能导致死锁发生。
|
|
|
死锁的产生与各并发进程的相对速度有关,一般不可重现。它涉及进程的并发执行、资源共享和资源分配等因素。对于永久性资源,产生死锁有以下4个必要条件。
|
|
|
①互斥条件。进程互斥使用资源,任一时刻一个资源只为一个进程独占,其他进程若请求一个已被占用的资源,只有等占用者释放后才能使用。
|
|
|
②请求和保持条件。进程每次申请它所需要的一部分资源,在申请新资源的同时,继续占用已分配到的资源。
|
|
|
③不剥夺条件。进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。
|
|
|
④环路等待条件。存在一个进程环路,环路中每一个进程已获得的资源同时被下一个进程所请求。
|
|
|
进程的死锁问题可以用有向图更加准确而形象地描述,这种有向图称为资源分配图。在有向图中,用圆圈表示进程,用方框表示每类资源,方框中的圆点表示各个单位资源。申请边为从进程到资源的有向边,表示进程申请一个资源单位,但当前该进程在等待资源。分配边为从资源到进程的有向边,表示有一个资源单位分配给进程。申请边仅能指向方框,表示申请时不指定哪一个资源实例,而分配边必须由方框中的圆点引出,表明哪一个资源实例已被占用。可以证明,如果资源分配图中没有环路,则系统中没有死锁;如果图中存在环路,则系统中可能存在死锁。如果每个资源类中均只包含一个资源实例,则环路的存在即意味着死锁的存在。此时,环路是死锁的充分必要条件。
|
|
|
(3)处理死锁的基本方法。处理死锁的基本方法主要有死锁的预防、死锁的避免、死锁的检测和死锁的解除等。
|
|
|
①死锁的预防。根据产生死锁的4个必要条件,只要使其中之一不能成立,死锁就不会出现。为此,可以采取下列3种预防措施:采用资源的静态预分配策略,破坏"部分分配"条件;允许进程剥夺使用其他进程占有的资源,从而破坏"不可剥夺"条件;采用资源有序分配法破坏"环路"条件。
|
|
|
②死锁的避免。死锁的预防是设法至少破坏产生死锁的必要条件之一,严格地防止死锁的出现。而死锁的避免则不那么严格地限制产生死锁的必要条件的存在(因为即使死锁必要条件成立,也未必一定会发生死锁),而是在系统运行过程中小心地避免死锁的最终发生。最著名的死锁避免算法是Dijkstra提出的银行家算法。死锁避免算法需要很大的系统开销。
|
|
|
③死锁的检测。解决死锁的另一条途径是死锁检测方法,这种方法对资源的分配不加限制,即允许死锁发生。但系统定时地运行一个"死锁检测"程序,判断系统是否已发生死锁,若检测到死锁发生,则设法加以解除。何时进行死锁检测主要取决于死锁发生的频率和死锁所涉及的进程个数。如果死锁发生的频率高,则死锁检测的频率也应很高;否则影响系统资源的利用率,也可能使更多的进程陷入死锁。当然,死锁检测会增加系统开销。通常,可在以下时刻进行死锁检测:进程等待时检测、定时检测、系统利用率降低时检测。
|
|
|
④死锁的解除。死锁的解除常常可以采用下面两种办法。
|
|
|
.资源剥夺法。从一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态。
|
|
|
.撤销进程法。按照某种策略逐个地撤销死锁进程,直到获得为解除死锁所需要的足够可用的资源为止。按照什么原则撤销进程,实用而又简便的方法是撤销那些代价最小的进程,或者撤销进程的数量最少。
|
|
|