收藏 分享(赏)

处理器管理.ppt

上传人:jw66tk88 文档编号:10188200 上传时间:2019-10-18 格式:PPT 页数:78 大小:756.50KB
下载 相关 举报
处理器管理.ppt_第1页
第1页 / 共78页
处理器管理.ppt_第2页
第2页 / 共78页
处理器管理.ppt_第3页
第3页 / 共78页
处理器管理.ppt_第4页
第4页 / 共78页
处理器管理.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

1、处理器管理硬件基础 进程和进程调度 线程和线程调度 作业和作业调度,处理器管理硬件基础,特权指令和非特权指令 处理器状态 管态(核态、系统态)和目态(用户态) 硬件支持 软件模拟 状态转换时机 时钟 中断,处理器管理硬件基础(续),进程,进程的基本概念 进程控制 进程的互斥与同步 进程间通信 进程调度 死锁,进程 进程的基本概念,程序的顺序执行和并发执行 程序和进程 进程的类型 进程的基本状态及状态变迁图 进程控制块,进程进程的基本概念 程序的顺序执行和并发执行,程序顺序的特征: 顺序性 封闭性 可再现性,进程进程的基本概念 程序的顺序执行和并发执行,程序并发执行的特征: (1)制约性:由于多

2、个程序并发执行,使得资源共享,从而提高系统效率。但是资源共享,往往会导致资源竞争,当多个程序都需要使用一个不可同时使用的资源时,资源竞争便出现了。A程序得到资源P,其它需要使用资源P的程序便无法使用,可以认为是A程序制约的其它程序。在单道的情况,系统在任意时刻最多只有一个程序,这个程序拥有系统中的所有资源,没有其它程序与其竞争,所以单道系统不具有制约性。 (2)失去封闭性:由于系统中的资源被各个并发程序所共享,一个程序对资源状态的修改可能会对其它并发程序产生影响,致使程序的运行失去封闭性。 (3)不可再现性:由于失去了封闭性,也将导致失去其可再现性。一个程序的执行结果不仅仅取决于该程序的初始数

3、据,还会受到系统中其它并发程序的影响,这使得具相同初始数据的程序在不同的时候执行,其执行结果可能是不相同的,即程序的执行结果还与程序的执行时间(什么时候执行,以什么速度执行)有关。,进程进程的基本概念 程序的顺序执行和并发执行(续),与时间有关的错误,表示并发的符号,进程进程的基本概念 程序和进程,为什么需要进程这个术语 进程的定义 程序和进程的区别 习惯使用 进程(process)、任务(task)和活动(active),进程进程的基本概念 进程的类型,用户进程和系统进程 其它分类,进程进程的基本概念 进程的基本状态及状态变迁图,等待、阻塞、挂起、睡眠,进程进程的基本概念 进程控制块,进程控

4、制块的基本内容 程序名(Image file name) 进程标识 状态 优先级 CPU现场信息 进程家族信息 拥的资源信息 起始地址 队列指针 总链指针 通信信息 队列组织,进程进程的基本概念 进程控制,什么是进程控制 进程创建 进程结束 进程挂起 进程延迟 进程唤醒 什么是原语,进程 进程的互斥与同步,进程间的制约关系 什么是互斥 什么是同步 互斥与同步的联系与区别,进程进程的互斥与同步 互斥的概念,临界资源 临界区,进程进程的互斥与同步 互斥的例子(1),进程进程的互斥与同步 互斥的例子(2),进程进程的互斥与同步 互斥的定义,当某一个进程处于临界区中时,就不允许其它进程进入关于相同临界

5、资源的临界区,否则就可能会出现错误,将进程间的这种制约关系称为互斥。对于互斥问题,可以使用在后面介绍的锁机制或信号量的方法解决。,进程进程的互斥与同步 同步的概念,一个进程到达了某些点后,除非另一进程已完成了某个操作,否则就不得不停下来等待这个操作的结束,这就是进程间的同步。简单一点说就是,一个进程要执行某个操作,必须依赖于另一个进程的某个操作的结束。,进程进程的互斥与同步 同步的例子,可以将司机和售票员看成是并发进程,他们合作运送乘客。对于这两个并发进程,存在以下制约关系: 对于司机,要想执行启动车辆的操作,必须依赖于售票员的将门关好操作的结束,这是售票员对司机的制约。 对于售票员,要想执行

6、开车门的操作,必须依赖于司机将车停好操作的结束,这是司机对售票员的制约。 显然,对于上述任何一个同步制约关系不能正确处理,就会出现不希望的错误。对于同步问题,可以使用后面介绍的信号量的方法解决。,进程进程的互斥与同步 锁机制及使用锁机制解决互斥问题,进程进程的互斥与同步 锁机制实现方案1,Lock(w) test:if(w=1)goto test;elsew=1; ,Unlock(w) w=0; ,进程进程的互斥与同步 锁机制实现方案2,Lock(w) while(w=1)保护调用进程的CPU现场到PCB中;将调用进程的PCB插入到因w而等待的等待队列中;将调用进程的状态设为“等待”;转系统的

7、进程调度程序;w=1; /* 上锁 */ Unlock(w) if(w的等待队列不空)移除等待队列的首元素(PCB);将该进程的PCB插入到就绪队列;置该进程为“就绪”状态;w=0; /* 开锁 */ ,进程进程的互斥与同步 信号灯,struct 信号灯 int s;struct PCB *q; ;其中, s是一个具非负初始值的整形变量,当s=0时,s表示该类资源中空闲资源的个数;当sn),在极端的情况下,n个资源均空闲,则s=n,此时s具最大值;在另一个极端的情况下,n个资源全被n个进程分配出去,还m-n个进程因该类资源等待,则s=n-m,此时s具最小值。另外,还有几点需要说明。 第一,习惯

8、上就用一个整型变量s表示整个信号灯,即可能见到“s信号灯”这样的句子。 第二,设P类资源使用整型变量s表示,“进程因为P(类资源)等待”与“进程因为s等待”两种说法是等价的,“资源P的等待队列”与“s的等待队列”两种说法也是等价的,且后一种说法更常见。 第三,s的等待队列即为q。,进程进程的互斥与同步 使用信号灯解决互斥问题,使用信号灯解决互斥问题很简单,其要点为: 对于每个临界资源,定义一个初始值为1的信号灯,比如mutex=1。之所以初始值为1,是因为资源在系统初始时是空闲的。另外,由于是对每个(而不是每类,所以用于互斥的信号灯的最大值即为1,最小值为1减去共享此资源的进程个数。 对于每个

9、关于此临界资源的临界区,在临界区的前面调用P(mutex),在临界区的后面调用V(mutex)。,进程进程的互斥与同步 使用信号灯解决互斥问题(续),int sp=1; int sq=1;,进程进程的互斥与同步 使用信号灯解决同步问题,合作进程的执行次序 共享缓冲区的合作进程的同步注意:有些问题不仅涉及同步问题,还涉及互斥问题。相对而言,解决互斥问题简单得多,所以,先考虑解决同步,再考虑解决互斥。,进程进程的互斥与同步 合作进程的执行次序,进程进程的互斥与同步 共享缓冲区的合作进程的同步,while(计算未完成) cp得到一个计算结果;cp将计算结果送至buf;iop从buf中得到数据;iop

10、将数据打印; ,进程进程的互斥与同步 共享缓冲区的合作进程的同步,cobegin while(计算未完成) cp得到一个计算结果;cp将计算结果送至buf; while(打印未完成) iop从buf中得到数据;iop将数据打印; coend,进程进程的互斥与同步 共享缓冲区的合作进程的同步,int sempty=1; int sfull=0; cobegin while(计算未完成) cp得到一个计算结果;P(sempty);cp将计算结果送至buf;V(sfull); while(打印未完成) P(sfull);iop从buf中得到数据;P(sempty);iop将数据打印; coend,进

11、程进程的互斥与同步经典同步问题 生产者消费者问题,进程进程的互斥与同步经典同步问题 哲学家就餐问题,进程进程的互斥与同步经典同步问题 读者写者问题,另一个著名的问题是读者-写者问题(Courtois 等人,1971),它为数据库访问建立了一个模型。例如,设想一个飞机订票系统,其中有许多竞争的进程试图读写其中的数据。多个进程同时读数据库是可以接受的,但如果一个进程正在更新(写)数据库,则所有的其他进程都不能访问该数据库,即使读操作也不行。这里的问题是如何对读者和写者进行编程?图2-47给出了一种解法。 在该解法中,第一个读者对信号量db 执行down操作。随后的读者只是递增一个计数器rc。当读者

12、离开时,它们递减这个计数器,而最后一个读者则对信号量执行up,这样就允许一个被阻塞的写者(如果存在的话)可以访问该数据库。 在该解法中,隐含着一个需要注解的条件。假设一个读者正使用数据库,另一个读者来了。同时有两个读者并不存在问题,第二个读者被允许进入。如果有第三个和更多的读者来了也同样允许。 现在,假设一个写者到来。由于写者的访问是排他的,不能允许写者进入数据库,只能被挂起。只要还有一个读者在活动,就允许后续的读者进来。这种策略的结果是,如果有一个稳定的读者流存在,那么这些读者将在到达后被允许进入。而写者就始终被挂起,直到没有读者为止。如果来了新的读者,比如,每2秒钟一个,而每个读者花费5秒

13、钟完成其工作,那么写者就永远没机会了。,进程进程的互斥与同步经典同步问题 睡眠理发师问题,进程 进程间通信,进程间的信息交换称为进程通信或进程间通信(InterProcess Communication,IPC)。进程间通信的方式很多,例如: 信号(signal)通信机制; 信号量及其原语操作(PV、读写锁、管程)控制的共享存储区(shared memory)通信机制; 管道(pipeline)提供的共享文件(shared file)通信机制; 信箱和发信/收信原语的消息传递(message passing)通信机制。其中前两种通信方式由于交换的信息量少且效率低下,故称为低级通信机制,所谓高级

14、通信方式是指进程之间以较高的效率传送大量数据的通信方式。,进程进程间通信 信号通信机制,信号(signal)机制又称软中断,是一种进程之间进行通信的简单通信机制,通过发送一个指定信号来通知进程某个异常事件发生。在进程B的运行过程中,可能得到来自于进程B自己、其它进程(比如进程A)或内核的信号。进程B在运行时不时地检查有无信号到达,如果有,则中断原来正在执行的程序,转向该信号的处理程序对该事件进行处理,处理结束后便可返回原程序的断点执行。这种机制类似硬件中断,不分优先级,简单有效,但不能传送数据。软中断与硬中断的差别在于:软中断运行在用户态,往往延时较长,而硬中断运行在核心态,由于是硬件实现,故

15、都能及时响应。举例来说,当系统正在运行一个耗时的前台程序,如若已发现有错误,并断定该程序要失败,为了节省时间,用户可以软中断键(一般为ctrl+c)停止程序的执行,这一过程中就用到了信号。系统具体的操作为:响应键盘输入的中断处理程序向发来中断信号的终端进程发一个信号,进程收到信号后,完成相关处理,然后执行终止。,UNIX/Linux使用信号的程序框架,进程A main() .kill(进程B的pid,SIGXXX1);. 进程B void CatchSignal(int signo) switch(signo)case SIGXXX1:/* signal(SIGXXX1,SIG_IGN); 使

16、用此句时,当再SIGXXX1时,不采取任何动作 */. /* 处理 SIGXXX1 的代码 */* signal(SIGXXX1, CatchSignal); 使用此句时,每次发生SIGXXX1时都会处理 */break;case SIGXXX2:. main() /* 安装信号句柄 */signal(SIGXXX1, CatchSignal);signal(SIGXXX2, CatchSignal);. ,一般地可以分成标准信号和用户进程自定义信号,一像UNIX 系统信号多达几十种(不超过32 种),主要分成以下几类: 与进程终止相关的信号 SIGCLD、SIGHUP、SIGKILL、SIG

17、CHLD、SIGSTOP等,如进程结束、父进程杀死子进程; 与进程例外事件相关的信号 SIGBUS、SIGSEGV、SIGPWR、SIGFPE 等,如进程执行特权指令、写只读区、地址越界、总线超时、硬件故障; 与进程执行系统调用相关的信号 SIGPIPE、SIGSYS、SIGILL 等,如进程执行非法系统调用、管道存取错; 与进程终端交互相关的信号 SIGINT、SIGQUIT 等,如进程挂断终端、用户delete 键或break 健。 用户进程发信号 SIGTERM、SIGALRM、SIGUSR1、SIGUSR2 等,如进程向另一进程发一个信号、要求报警; 跟踪进程执行的信号 SIGTRAP

18、 等。Windows也支持信号机制,与UNIX/Linux的差别是: (1)Windows中也signal函数,原型与UNIX/Linux中的signal基本一致,但是Windows中没kill(pid,signo)函数,取而代之的是raise(signo)函数,而raise似乎只能自己给自己发信号,无法进行进程通信。 (2)Windows中预定义的SIGXXX数量很少,大约仅为6个。,进程进程间通信 管道,管道(pipeline, pipe)是连接读写进程的一个特殊文件,允许进程按先进先出方式传送数据,也能使进程同步执行操作。发送进程视管道文件为输出文件,以字符流形式把大量数据送入管道;接收

19、进程将管道文件视为输入文件,从管道中接收数据,所以,也叫管道通信。由于方便有效,能在进程间作大量信息的通信,目前已被引入到许多操作系统中。管道是UNIX的传统通信方式,也是UNIX 发展最有意义的贡献之一。管道通信方式是发送者进程和接收者进程之间通过一个管道交流信息,管道是单向的,发送者进程只能写入(字节流)信息,接收者进程也只能接收(字节流)信息,先写入的必定先读出。管道的实质是一个共享文件,因此,管道通信基本上可以借助于文件系统原有的机制实现,包括(管道)文件的创建、打开、关闭和读写。但是,写入进程和读出进程之间的相互协调单靠文件系统机制是解决不了的。,进程进程间通信 共享存储区通信机制,

20、内存中开辟一个共享存储区,各进程通过该存储区实现通信,这是进程通信中最快捷和有效的方法。进程通信之前,向共享存储区申请一个分区段,并指定关键字;若系统己为其他进程分配了这个分区,则返回关键字给申请者,于是该分区段就可映射到进程的虚地址空间,以后,进程便像通常存储器一样共享存储区段,通过对该区段的读、写来直接进行通信。,进程进程间通信 信箱通信,在支持信箱通信的系统中,每个进程拥一个邮箱,一个邮箱就是一个消息队列。 邮箱可以位于用户空间中,由用户进程管理邮箱;邮箱可以位于系统空间中,由系统进程管理邮箱。由系统进程管理邮箱,方便了用户,但可能使得系统空间紧张。 消息的结构可以由两个要通信的进程协议

21、,也可以由系统给出统一的结构。 系统应该定义发送原语send和接收原语receive。send和receive均可以是同步的或异步的。 若发送进程使用同步的send,send后需要等待接收进程接收消息后才会返回; 若发送进程使用异步的send,send后不需要等待接收进程接收消息就会返回; 若接收进程使用同步的reciive,若邮箱中没消息或没希望的消息,接收进程会被挂起,直到发送进程发送消息。 若接收进程使用异步的reciive,即使邮箱中没消息或没希望的消息,接收进程的receive也会立即返回,通过返回告诉接收进城接收失败。,进程 进程调度,进程调度的基本概念 进程调度算法,进程进程调度

22、 进程调度的基本概念,进程调度程序和进程调度算法 非剥夺与可剥夺调度 进程调度时机 进程调度性能 进程状态变迁图,进程进程调度进程调度的基本概念 进程调度程序和进程调度算法,当CPU空闲,且有多个就绪进程时,系统需要确定哪一个先运行。系统中作出此决策的部分称为进程调度程序(scheduler),它所使用的算法称为进程调度算法(scheduling algorithm)。,进程进程调度进程调度的基本概念 非剥夺与可剥夺调度,设进程A处于运行状态,此时进程B成为就绪状态,而B的优先级比A高,若采用非剥夺调度方式,B须等待A的时间片结束或A因I/O被挂起后,B才能成为运行状态;若采用可剥夺调度方式,

23、B立即成为运行状态,而A成为就绪状态。非剥夺亦称为不可抢占,可剥夺亦可称为可抢占。 非剥夺和可剥夺调度方式各有优缺点,而选择可剥夺界于非剥夺和可剥夺调度之间,选择可剥夺亦可称为选择可抢占。在支持选择可剥夺的系统中,每个进程拥有一对标记(U,V),其中U表示进程可以(U=1)或不可以(U=0)抢占其它进程,V表示进程可以(V=1)或不可以(V=0)被其它进程抢占。,进程进程调度进程调度的基本概念 进程调度时机,进程调度时机指的是在什么时机进行进程调度。以下列举了一些较典型的进程调度时机。 (1)进程终止。 (2)I/O请求导致进程被挂起。 (3)进程运行出错导致被挂起。 (4)在分时系统中,进程

24、用完时间片。 (5)在允许可剥夺调度方式的系统中,一个比当前运行态进程的优先级更高的进程成为就绪状态。,进程进程调度进程调度的基本概念 进程调度性能,在讨论各种具体的进程调度算法之前,先讨论进程调度算法的性能目标。一个好的进程调度算法会考虑多方面的因素,比如:公平。确保每个进程获得合理的CPU份额。 效率。最好使CPU100%地忙碌。 相应时间。使交互用户的响应时间尽可能地短。 周转时间。使批处理用户等待输出的时间尽可能地短。 吞吐量。使单位时间内处理的作业尽可能地多。上述这些评价调度性能的因素彼此之间可能存在矛盾,比如公平和效率往往就是天生的一对矛盾。不同的进程调度策略可能倾向于某部分因素,

25、这必然会损坏其它因素。,进程进程调度进程调度的基本概念 进程状态变迁图,进程进程调度进程调度的基本概念 进程状态变迁图(续),进程进程调度 进程调度算法,先来先服务 轮转调度 优先级调度算法 多级反馈队列调度,进程进程调度进程调度算法 先来先服务,先来先服务(First-Come-First-Serve,FCFS),也可称之为先进先出(FIFO)。在所的就绪态进程中,最先进入就绪态的进程,则最先进入运行态。,进程进程调度进程调度算法 轮转调度,轮转调度(Round Robin,RR),也称为时间片法。 若运行态的进程的时间片结束,即使进程未结束,进程也必须撤出,将CPU交给另外一个就绪进程。

26、轮转调度通常与FIFO或优先级调度算法结合使用。 轮转调度的一个主要问题是时间片长度的确定,时间片长度可以是静态的或动态的。设nmax为系统中最大的进程个数,t为响应时间,则时间片长度q可以简单地定义为t/nmax。这种静态时间片的方法简单,但效率却不高。设nmax=30,t=3s,则q=0.1s,另设系统中当前实际进程个数n为6。由于n=6,响应时间为0.6s,对于用户来说,响应时间为3s已经很满意,响应时间缩短为0.6s并不会更好的性能提升的感觉。此时若使响应时间保持为3s,而将时间片增加为0.5s,则这种动态时间片的方法可以显著减少进程切换次数(须知进程切换是很耗时的工作),从而助于提高

27、系统效率。 总结一下,根据系统中最大的进程个数确定的时间片是静态时间片,根据系统中实际的进程个数确定的时间片是动态时间片。,进程进程调度进程调度算法 优先级调度算法,基本原理 优先级调度算法,给每个进程赋予一个优先级,使具有最高优先级的进程最先执行。 静态优先级和动态优先级 进程的优先级可以是静态的或动态的。在进程创建时,指定进程的初始优先级,在以后进程的运行过程中,若进程的优先级不会随着运行而变化,则优先级是静态的,反之则是动态的。 初始优先级 进程的初始优先级可以由用户或系统确定,或用户系统共同确定,比如具不同权限的用户可以指定不同范围内的优先级。 动态优先级的调整方法举例 在进程运行过程

28、中,系统可以根据进程的运行情况和系统的运行情况对进程的优先级作动态调整。比如,每当进程用完一个时间片(比如20ms),该进程的优先级下降一级;每当一个时间间隔(比如1s)后,所的进程的优先级上升一级,这种做法达到的效果是:一个进程使用CPU的时间越长,其优先级变得越低,一个进程等待CPU的时间越长,其优先级变得越高;再比如,当等待某个外设的进程较多时,提高正在使用此设备的进程的优先级,使得此进程尽快释放此设备,以满足其它进程的需要。,进程进程调度进程调度算法 多级反馈队列调度,多级反馈队列调度(Multilevel Feedback Queue Scheduling)以多个就绪队列为特征。将系

29、统中所具相同优先级的就绪态的进程(的PCB)组织成一个就绪队列,这样就形成多个就绪队列, 另外就绪队列的优先级越高,对应的时间片越短。当一个就绪态进程被调度,它将获得与其优先级对应的时间片大小;当此进程的此时间片用完,此进程会被插入到下一级就绪队列中,其被调度的机会减少,但一旦被调度,可以使用更长的时间片。另一方面,与优先级调度算法类似,每到一定的时间,系统将所有的进程的优先级递增一级。一个进程从I/O阻塞态变为就绪态时,其优先级也会递增一级。这种调度算法所达到的效果之一是,用较短的时间片处理较小的进程(需要CPU的时间少)的进程;用较长的时间片处理较大的进程(需要CPU的时间多)的进程,避免

30、较大的进程因为多次时间片用完而导致的进程切换。在Solaris和Windows中均采用此算法。,进程 死锁,死锁是一个进程处于永远等待的一种状态。死锁通常发生在两个或多个进程之间。死锁问题举例 产生死锁的原因 产生死锁的必要条件 解决死锁问题的方法,进程死锁 死锁问题举例(1),进程死锁 死锁问题举例(2),进程死锁 死锁问题举例(3),若系统中m 个资源被n 个进程共享,当每个进程都要求个资源,而m nK时,即资源数小于进程所要求的总数时,如果分配不得当就可能引起死锁。 例如,m=5,n=5,k=2,采用的分配策略是为每个进程轮流分配。首先,为每个进程轮流分配一个资源,这时,系统中的资源都已

31、分配完了;于是第二轮分配时,各进程都处于等待状态,导致了死锁。,进程死锁 死锁问题举例(4),进程死锁 产生死锁的原因,进程死锁 产生死锁的原因(续),同样是两个进程并发运行,有时死锁,有时不死锁。而产生死锁的原因是: (1)资源不足。若有足够的资源,比如R1和R2资源分别有两个,则进程P1和P2是不会死锁的。但毕竟在资源不足的情况下,进程也不一定死锁。 (2)进程推进次序非法。一般,若一个推进次序使得系统中的所进程都能够顺利结束,则此推进次序是合法的,比如路线1和2;反之,此推进次序是非法的,比如路线3。在这个例子中,导致进入危险区域的推进次序是非法的。以上的说明的死锁原因对于我们解决死锁问

32、题没有太大的帮助,需要进一步研究死锁问题。 时至如今,死锁仍然是一个未能足够有效解决的问题。,进程死锁 产生死锁的必要条件(1),互斥条件(mutual exclusion) 任一时刻一个资源仅为一个进程独占 这个条件对于解决死锁问题没有太大的帮助,因为一个资源是互斥资源还是共享资源,是由这个资源天生的物理特性所决定的。,进程死锁 产生死锁的必要条件(2),占有和等待条件(hold and wait) 这个条件亦称为“部分分配”条件。 一个进程请求资源得不到满足而等待时,不释放已占有的资源。反之,若一个拥有一部分资源的进程在申请更多的资源失败时,释放已拥有的资源,则不会出现死锁。 一个进程请求

33、资源得不到满足而等待时,必须释放已占有的资源,这样就解决了死锁问题。 局限性 效率问题,进程死锁 产生死锁的必要条件(3),不剥夺条件(no preemption) 任一进程不能从另一进程那里抢夺资源,即已被占用的资源,只能由占用进程自己来释放。反之,若允许剥夺,就可以解决死锁问题。 局限性 效率问题,进程死锁 产生死锁的必要条件(4),循环等待条件(circular wait) 资源分配图介绍,循环等待条件对于解决死锁问题极有帮助。其思路是:每当进程发出资源申请时,系统可以绘制资源分配图,若此次资源分配会导致环路的出现,即有出现死锁的可能,则拒绝此次资源分配。由于环路仅仅只是死锁的必要条件,

34、所以这种方法是一种保守的做法,会在一定程度上降低系统效率。,进程死锁 解决死锁问题的方法,死锁预防(deadlock prevention) 死锁避免(deadlock avoidance) 死锁检测和恢复(deadlock detection and recovery) 死锁忽略,进程死锁解决死锁问题的方法 死锁预防,死锁预防即采用资源的静态分配策略。 原理 所谓静态分配是指一个进程必须在执行前就申请它所要的全部资源,并且直到它所要的资源都得到满足后才开始执行。采用静态分配后,进程在执行中不再申请资源,因而,不会出现占有了某些资源再等待另一些资源的情况,即破坏了占有和等待条件的出现。 优点

35、实现简单,被许多操作系统采用。 缺点 (1)资源效率低。在程序执行过程中,通常不会同时用到所有资源,这使得程序占有资源而未使用。导致其它需要被此程序占用,而需要实际空闲的资源的程序无法运行。 (2)程序效率低。程序并非需要在具备所的资源时才可以执行。 (3)很难在程序执行之前预测程序在执行过程中需要的所资源。,进程死锁解决死锁问题的方法 死锁避免,原理 (1)前面所述的死锁预防的方法采用静态分配策略,其主要缺点是低效。死锁的避免是在基于采用动态分配策略的基础上解决死锁问题。 (2)死锁避免方法的本质是确保系统在任意时刻都处于安全状态。在前面介绍死锁原因时,给出了死锁图解。从此图可以说明安全状态

36、的几何意义。只要进程轨迹不进入危险区域(包括边框),系统就处于安全状态。进程轨迹一旦进入危险区域,就存在死锁的可能。这种方法的基本思想是,在每次资源申请时,系统使用某种方法计算死锁的可能,若此次资源分配可能导致死锁,则拒绝分配,否则接受申请。实现方法 有序资源分配法 银行家算法,进程死锁解决死锁问题的方法死锁避免 有序资源分配法,方法 在这一方法中,系统给所有的资源指定一个唯一的号码,比如,输入机为1,图像输入设备为2,打印机为3,磁带机为4,磁盘为5等等。要求: (1)所的分配请求必须以上升的次序申请。 (2)对于同一类中的各个资源的申请,必须一次性申请。 原理 优点:与静态分配方法相比,由

37、于此方法是基于动态分配的,所以效率较高,且不必事先说明资源的最大需求量。 缺点:资源编号的次序与资源使用次序不一致会导致资源使用效率降低。 问题:资源编号方法,进程死锁解决死锁问题的方法死锁避免 银行家算法,Dijkstra(1965)提出了一种能够避免死锁的调度方法,称为银行家算法,它的模型基于一个小城镇的银行家,现将该算法描述如下:假定一个银行家拥有资金,数量为,被N 个客户共享。银行家对客户提出下列约束条件: 每个客户必须预先说明自己所要求的最大资金量; 每个客户每次提出部分资金量申请和获得分配; 如果银行满足了客户对资金的最大需求量,那么,客户在资金运作后,应在有限时间内全部归还银行。

38、只要每个客户遵守上述约束,银行家将保证做到: 若一个客户所要求的最大资金量不超过,则银行一定接纳该客户,并可处理他的资金需求; 银行在收到一个客户的资金申请时,可能因资金不足而让客户等待,但保证在有限时间内让客户获得资金。在银行家算法中,客户可看作进程,资金可看作资源,银行家可看作操作系统,这里叙述的是单资源银行家算法,还可以扩展到多资源银行家算法。,进程死锁解决死锁问题的方法死锁避免银行家算法 单种资源的银行家算法,一个状态被称为是安全状态,其条件是存在一个状态序列能够使所有的客户均得到其所有的贷款(即所有的进程得到所需的全部资源并终止)。 不安全状态并不一定导致死锁,而仅仅是可能产生死锁,

39、因为,客户未必需要其最大贷款额度,但银行家不敢抱这种侥幸心理。银行家算法就是对每一个请求进行检查,检查这次资源申请是否会导致不安全状态。若是,则不满足该请求;否则便满足。,进程死锁解决死锁问题的方法死锁避免银行家算法 多种资源的银行家算法,进程死锁解决死锁问题的方法 死锁的检测和恢复,死锁检测和恢复的原理 对于有些问题,发生死锁的概率极低,而我们使用某种死锁避免的算法,每分每秒去担心死锁的发生,算法本身就会占用不少CPU时间,且所的死锁避免算法都是保守的,这也会降低资源使用效率。所以我们可以使用一种较为大胆的做法,即,对资源的分配不加任何限制,也不采取死锁避免措施,但系统定时地运行一个“死锁检

40、测”程序,判断系统内是否已出现死锁,如果检测到系统已发生了死锁,再采取措施解除它。这种做法涉及到死锁检测和死锁解除两个方面,存在着多种死锁检测和恢复的方法或策略。死锁的检测 系统中是否存在死锁?若存在,哪些进程死锁了?,进程死锁解决死锁问题的方法 死锁的检测和恢复(续),死锁的恢复 系统重启法恢复 杀死进程法恢复 将环中的所有进程杀死,使这些进程重新运行,重新运行后,也许就不再死锁了。显然这种做法简单但低效。可以通过逐步杀死系统中的一个或多个进程解决死锁。 选择环中的一个进程,将其杀死,环中的其它进程可以继续运行。也许不久后发现还是不行,则需要杀死环中的更多的进程。 杀死环外的一个进程。比如,

41、进程1拥有A需要B,进程2拥有B需要A,进程1和进程2死锁。进程3拥有A和B。通过将环外进程3杀死而解决进程1和进程2的死锁。 易于重复执行(重复执行的副作用小)。有些进程是不适合于重复执行的,比如打印进程或数据库更新进程。 消耗的CPU 时间最少者 产生的输出最少者 预计剩余执行时间最长者 分得的资源数量最少者 优先级最低者 资源剥夺法恢复 剥夺陷于死锁的进程占用的资源,但并不撤销它,直至死锁解除。可仿照撤销陷于死锁进程的条件一样来选择剥夺资源的进程。 进程回退法恢复 系统周期性的存储各进程状态。当一个进程出现死锁时,将此进程恢复到最近的状态,希望其不再死锁。,进程死锁解决死锁问题的方法 死

42、锁的忽略,为了解决死锁问题: 可以象死锁避免那样,在每次资源分配时,总是担心会导致死锁发生,不仅浪费CPU时间,且其保守的资源分配策略也会降低资源使用效率; 或者象死锁检测和恢复那样,认为死锁发生的概率很低,允许死锁发生,只不过在死锁万一发生时再恢复,这种做法需要周期性的对死锁进行检测,同样会降低一点系统效率,尽管其可能微不足道。与上述做法不同的是,死锁忽略认为有些问题在理论上会发生的死锁,而在实际中发生的概率为0,或者每100年发生一次。死锁忽略也称为鸵鸟算法,象鸵鸟一样对死锁视而不见是解决死锁问题的最简单的方法,认为死锁不会发生,系统也不必存在与解决死锁问题相关的代码。UNIX在一些地方就

43、受到死锁的威胁,但是这些死锁从未发生过。即使发生了,稍有经验的用户也可以通过杀死某些进程或其它方法解决这种问题。,进程死锁解决死锁问题的方法 方法的选择,这些方法各有其优缺点,不存在通用的解决死锁的方法。至于具体使用上述何种方法,取决于具体的情况,比如: (1)正确性、效率和方便性的取舍。为了解决死锁问题,以确保正确性,需要由用户在编程时仔细考虑程序代码以避免死锁,或由系统程序统一处理死锁问题,这会增加编程负担,使得编程不方便,解决死锁还会降低效率。为了方便和效率,不考虑死锁问题,但这又无法保证正确性。 (2)针对不同的对象,使用不同的解决死锁问题的方法。比如针对不同的对象发生死锁的概率,选择不同的解决死锁的方法。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报