深入探究死锁的三种处理方法

              死锁的处理方法我们以火灾为例。要想火灾处理有三种办法,(1)提前预防,使环境没有火灾产生的环境,如降低周边温度,周边没有氧气等等(2)当出现火灾时,我们及时救火。(3)如果火灾离消防队比较远,等消防队过去火,就烧完了,我们可以自动放弃不管他。

       类似火灾死锁的三种处理方法 死锁预防;死锁避免;鸵鸟政策。

 死锁预防

      死锁出现有4个必要条件。只要确保一个必要条件不成立,就能预防死锁发生。下面我们分别讨论下每个条件不成立的情况。

        互斥 对于非共享资源必须要有互斥条件。如打印机不能同时为多个进程所共享。而对于共享的资源不要求互斥访问,因此不会出现死锁。如只读文件,多个程序同时打开只读文件。因此通过否定互斥来避免死锁是不太现实的。      占有并等待 为了确保占有并等待不在系统内出现,必须保证:当一个进程申请一个资源时,他不能占有其他资源

(1)执行前一次性请求所有的资源(不一定实现);

(2)即申请资源前先释放所有的资源。

这两种协议主要有两个缺点 第一 资源利用率可能比较低。

                         第二 可能会发生饥饿。

因此想要消除是不可能的。

        非抢占  为了确保这一条件不成立,可以使用如下协议:如果一个进程占有资源并申请另一个不能立即分配的资源,那么其已分配的资源可能被抢占。换句话说也就是被隐式释放了。抢占资源分配到进程所等待的资源的链表上。只有进程获得原有资源和所申请的新资源时。进程才可以重新执行。这个协议通常应用于状态可以保存和恢复的资源,如CPU寄存器和内存。他一般不适用于其他资源如打印机和磁带驱动器。

        循环等待  一个确保此条件不成立的方法就是对所有的资源类型进行完全排序,并要求每个进程按递增顺序来申请资源。

死锁避免——银行家算法

    死锁预防:确保四个必要条件其中之一不会发生的副作用是降低设备的使用率和系统吞吐率。

    思索避免的另一种方法是,获得之后如何申请资源的附加信息。根据这种方法,有不同的算法。死锁避免算法动态的检测资源分配状态以确保循环等待条件不可能成立。资源分配状态可能由可用资源和已分配资源,及进程最大需求所决定。下面我们研究两种死锁避免算法。

    资源分配图算法  资源分配图可修改以用于死锁避免。

    银行家算法 对于每种资源类型有多个实例的的资源分配系统,资源分配图的算法就不再适用了,那么这种情况我们就使用银行家算法。但银行家算法的的效率比资源分配图低。因为银行家算法可用于银行系统,所以叫银行家算法。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      

 

 

你可能感兴趣的:(操作系统学习)