死锁基本概念
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
死锁总概
在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。若无外力作用,它们都将无法推进下去.这些永远在互相等待的进程称为死锁进程.
死锁的四个必要条件:互斥,占有且等待,循环等待。
进程的死锁问题可以用有向图进行准备而形象的描述,这种有向图称为系统资源分配图.一个系统资源分配图SRAG可定义为一个二元组,即SRAG=(V,E),其中V是顶点的集合,而E是有向边的集合.顶点集合可分为两种部分:P=(P1,P2,…Pn),是由系统内的所有进程组成的集合,每一个Pi代表一个进程;R=(r1,r2,…rm),是系统内所有资源组成的集合,每一个ri代表一类资源.
基于上述资源分配图的定义,可给出判定死锁的法则,又称为死锁定理.
(1) 如果资源分配图中没有环路,则系统没有死锁
(2) 如果资源分配图中出现了环路,则系统中可能存在死锁.
预防死锁的方法:
资源一次性分配:(破坏请求和保持条件)
可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)
资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)
所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。因此,对资源的分配要给予合理的规划。
其中一个比较好的死锁避免算法是,银行家算法:
当第i个进程需要请求系统资源时,我们就将其对各个资源的需求量送入Re数组中,然后系统依次执行。
(1)若j从1到M,所有Re(j)<=Need(i,j),则程序可继续,否则说明i进程的这次请求数量,超出了事先给定的它对Rj资源的最大需求,转出错处理。
(2)若j从1到M,所有Re(j)<=Av(j),则程序可继续,否则代表系统中尚无足够的资源满足这次请求,Pi必须等待。
(3)满足Pi这次请求,j从1到M顺序执行:
(4)执行安全性算法:通过调用安全性算法,检查这次资源分配后,系统是否处于安全状态.若安全状态标志为真,说明系统是安全状态,这次分配可能进行,银行家算法运行结束。否则,要恢复刚才分配前的各资源状态,同时让Pi进程等待。
从死锁中恢复可从两种方法进行:挂起/恢复进程和杀死进程。