计算机操作系统中死锁问题研究
2016-08-19黄正鹏
黄正鹏
摘要:死锁问题是计算机操作系统中重要的内容,本文从死锁概念、产生的原因以及死锁的预防、检测、处理等几个方面分别进行讨论,较为全面的探讨了常见的操作系统中死锁问题。
关键词:计算机;操作系统;死锁;问题
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)20-0034-02
1 计算机操作系统中死锁简介
计算机操作系统是管理计算机各种软硬件资源的软件系统,其中死锁问题是操作系统必须处理的一种资源分配问题。通常而言计算机操作系统死锁指的是,由于可分配资源的有限性或者彼此进程通信而引起的一种在多个进程之间产生的阻塞现象。计算机操作系统如果不对其进行强制性的资源回收或者资源重新分配,这种阻塞现象将一直存在下去,影响操作系统进行正常的资源管理。由此可见,计算机操作系统中的死锁问题必须发生多个进程之间,在单进程系统中必然不会产生死锁问题。简言之,死锁问题,就是一种资源等待与资源释放之间产生的矛盾,由于存在系统资源的持续占用必然引起资源空间严重浪费,常见的用户等待以及死机现象都可能是由于死锁问题导致的,因此处理好死锁问题无论从计算操作系统资源有序合理分配方面还是良好用户体验方面都是必须解决重要问题。下文则具体从死锁产生原因、产生条件、死锁避免手段以及死锁解决措施等方面进行探讨。
2 计算机操作系统死锁产生原因分析
计算机操作系统产生死锁的原因主要体现在两个方面,首先,是由于计算机系统资源数量有限性的原因造成的,如果任何进程所需的资源都能得到满足,那么肯定不会出现死锁的现象,当然让计算机系统资源无限制供给是不现实的;其次,产生死锁的原因则是由于系统资源在分配策略上出现问题,而引发的死锁问题,由于分配环节以及进程推进过程中产生了进程间的循环等待,不同进程之间都占据了其他进程所需要的系统资源,而所占用的资源又不进行释放,必然引起死锁现象的出现。
通过分析计算机死锁产生原因可以看出发生死锁必然产生四个方面的必要条件,概括如下:第一是资源的互斥性(Mutual exclusion),即资源在任意时刻只能由一个进程所占用,而不能被多个进程所共享;第二是请求与保持条件(Hold and wait),进程因请求资源而被陷入阻塞状况时,可以不释放已获得的资源;第三是不剥夺条件(No pre-emption),进程已经获得的资源在使用完成之前不可以被剥夺;第四是循环等待条件(Circular wait),若干个进程之间形成了一个资源等待环。上述四个条件是操作系统产生死锁的必要条件,只要其中一个条件不被满足,就不会发生死锁。
通过对计算机操作系统死锁产生原因进行分析,那么在操作系统设计、进程调度、资源分配时,如何有效的破坏其产生条件或者在资源分配时进行有效的规避,就能尽可能地减少死锁现象的发生;除此之外,通过一定的死锁检测手段,在操作系统进行实时分析资源分配时可以进行动态的判断,对于有可能发生死锁的资源分配不予以分配。
3 计算机操作系统中死锁预防手段
1) 计算机操作系统中死锁预防处理分析
正如上文所述,死锁产生有四个必要条件,除去第一个互斥性条件,只要破坏任意其他三个产生条件即可避免死锁现象的出现。因此,常见的预防手段也是按照这样的思路进行预防处理的,具体而言:首先,即破坏其请求和保持条件,可以一次性的将进程所需要资源进行分配,来避免死锁情况的出现,这种做法最大的缺点在于其系统资源浪费情况比较严重;其次,是破坏资源“不剥夺条件”,通过一定的设计(如优先级手段),使得占有资源的进程可以释放其已经占有的资源,先供其他进程使用,在其使用完成以后,原资源占有进程可以再通过向CPU重新申请来获得资源,这种预防处理方式在系统设计实现时复杂度较高;再次,即通过破坏“环路等待条件”实现死锁避免,通过对系统资源进行编号标识,各个进程对资源申请按照一定的次序进行,通过这样的动态资源分配来破除环路的形成,以此达到死锁情况的避免,相对而言这是一种较为高效的死锁预防处理手段。
2)预防死锁代表性的算法——银行家算法
Dijkstra E.W(中文名艾兹格·迪杰斯特拉)于1965年提出来的银行家算法是经典的死锁避免算法。该算法是基于银行贷款业务产生的,具体思路是认为银行可供贷款的总钱数是有限的,任何一个客户申请贷款时需要提供其最大贷款额度,并且应保障按时归还,银行家在贷出欠款时不能超过自身最大的钱数,并且尽量满足更多客户的贷款需求。这里的银行家与计算机操作系统对于资源的掌握是一致的,而每个进程对于资源的请求情况则与客户贷款的情况较为类似,当某个进程向操作系统申请资源时,操作系统需要分析该进程最大的资源需求量,当满足其要求时进行分配,否则将延迟分配;当进程再次向操作系统申请资源分配时,系统会对资源的申请量与该类资源的剩余量的关系,一旦超出则继续延迟分配。很显然的,银行家算法能够实现系统的资源分配时出现进程间的死锁现象。银行家算法是经典的死锁预防算法,是计算机操作系统内容学习过程中,必然会遇到的内容。
4 解决计算机操作系统中死锁问题的措施
当系统中出现了死锁,一般通过死锁检测以及死锁排除两个步骤进行死锁问题的解决。死锁检测思路主要是通过两个容器完成的,其中一个是用来一个容器是用来保存各个进程正在请求的资源,另一个容器则是保存各个进程中已经占有的资源,具体的检测手段是通过遍历正在请求资源的进程的请求资源是否已经被其他进程所占有,反方向再遍历一次,即可发现系统中是否出现了死锁问题。除了这种直接的进程资源方式的检测以外,还可以通过侧面的系统效率检测、进程等待时检测等手段来实现死锁问题的发现。相对而言,计算机操作系统对于进程死锁检测的手段实现起来还是相对比较容易的。
一旦发现了操作系统中出现了死锁的现象,那么处理死锁问题则成为了下一步应当解决的问题。处理死锁问题的方法,主要有四种方式,其一,通过撤销所有死锁进程来实现;其二通过依次撤销死锁进程,每撤销一个后进行死锁检测,直至死锁不存在为止;其三,通过释放死锁程序所占资源,来实现死锁问题的解决;最后,则是通过强制性满足被等待进程的一方资源请求来解除死锁。总之,死锁处理方式是围绕资源满足或者资源剥夺的方式进行的。
除了上述,操作系统中资源分配的死锁问题以外,计算机网络中也存在死锁情况,最为常见的就是“存储转发死锁”,另外数据库系统中也存在死锁的情况,其解决措施是通过事务的手段来进行的,在此就不具体讨论了。
5 小结
计算机操作系统中死锁问题究其本质是由于资源有限性以及资源分配策略问题引发的一种存在于多个进程之间无限阻塞的现象。本文以死锁的概念为切入点,分析了操作系统中死锁产生的原因以及必要条件,并以此给出了解决死锁问题的常见思路,即通过“死锁避免——死锁检测——死锁处理”这种死锁处理流程来有效解决死锁问题。
参考文献:
[1] 张伟杰. 计算机操作系统中死锁问题研究[J].计算机光盘软件与应用,2014(18):81+83.
[2] 齐鹏. 基于未来锁集的死锁规避技术研究[D].哈尔滨工业大学,2015.
[3] 徐本胜. 智能空间中的冲突问题和死锁问题研究[D].北京工业大学,2015.
[4] 周南凤. 探究计算机操作系统中死锁问题[J].信息与电脑(理论版),2015(13):69-70.