死锁

概念
    指两个或以上进程因竞争临界资源而造成的一种僵局,即一个进程等待一个已经被占用且永不释放的资源

产生原因
    根本:系统能够提供的资源个数比要求该资源的进程数要少
    基本:资源竞争和进程推进顺序不合理

必要条件
    互斥条件
        涉及的资源是非共享的,即一次只能有一个进程使用。如果有另一个进程申请该资源,那么申请进程必须等待,直到该资源被释放
    不剥夺条件
        进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自行释放
    占有并等待
        进程每次申请它所需要的一部分资源。在等待一新资源的同时,进程继续占用已分配到的资源
    环路等待
        存在一种进程收尾相接的循环链,链中每个进程都在等待下一个进程所持有的资源,造成这组进程处于永远等待状态

处理策略
    预防死锁
        通过设置一些限制条件,破坏死锁的四个必要条件中的一个或几个,让死锁无法发生
        预防死锁的方法破坏了系统的并行性和并发性,通常会降低系统的效率
    避免死锁
        在动态分配资源的过程中,用一些算法来防止系统进入不安全状态,避免死锁的发生
        具体策略如下:
1. 如果进程请求的资源会导致死锁,系统就拒绝启动该进程;
2. 如果对一个资源的分配会导致下一步的死锁,系统就拒绝本次分配
        银行家算法,是指分配资源之前先确定资源分配是否会造成系统死锁。如果会死锁,则不分配,只有确认不会死锁后才进行分配
        银行家算法,需要按如下原则判断是否分配资源:
新进程进入系统时,它必须说明对各类资源的最大需求量,这一数量不能超过系统的资源总数。只有满足这一条件系统才接纳该进程。
当进程申请一组资源时,该算法需要检查进程对各类资源的最大需求量,如果系统现存的各类资源的数量可以满足此时的资源最大需求量时,就分配资源;否则进程必须等待,直到其他进程释放足够的资源为止。
进程需要在一定时间内无条件地归还它所申请的全部资源
    死锁的检测及解除
        死锁检测不会试图阻止死锁,即在死锁发生前不会做任何操作,只是通过设置的检测机制,检测当前是否发生死锁。若发生死锁,则采取一些措施来解除死锁
        判断死锁法则
            资源分配路径中没有环路,则系统不会出现死锁
            资源分配路径中存在环路,则系统可能出现死锁
            如果环路中的每个资料类中都只有一个资源,则系统存在死锁
            如果环路中的每个资源类的资源个数不止一个,则环路的存在是产生死锁的必要条件但不是充分条件
        解除死锁方法
            资源剥夺法
                剥夺陷入死锁的进程所占用的资源,但并不撤销此进程,再将这些资源分配给需要的进程,直至死锁解除
            进程撤销法
                一次性撤销陷入死锁的所有进程,回收所有占用的资源,等死锁解除后,再重新运行进程
                逐个撤销陷入死锁的进程,依次回收其资源并重新分配,直至死锁解除。可以优先撤销优先级低、预计剩余执行时间最长、CPU消耗时间少的进程
            进程回退法
                让所有的进程回退到系统保存的检查点,这种方法要求系统建立并保存检查点、建立回退机制
            系统重启法
                结束所有进程并重启系统。这种方法很简单,但损失很大,先前的工作可能都浪费了
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_42194332

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值