这一节也非常重要
2.4.1 死锁的概念
2.4.1 死锁的概念_StudyWinter的博客-CSDN博客
在并发环境下,各种进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象。这就是死锁,死锁发生后,如果没有外力干干涉,这些进程将都无法向前推进。
死锁、饥饿、死循环的区别
产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。
(1)互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁;
(2)不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放
(3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己己有的资源保持不放。
(4)循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。
发生死锁的条件:对不可剥夺资源的不合理分配,可能会导致死锁。
死锁的处理策略:
(1)预防死锁:破坏死锁产生的四个必要条件之一;
(2)避免死锁:用某种方法防止系统进入不按全的状态,从而避免死锁(银行家算法);
(3)死锁的检测和解除:允许死锁的发生,不过操作系统会负责检测死锁的发生,然后采取某种措施解除死锁。
2.4.2 死锁的处理策略-预防死锁
2.4.2 死锁的处理策略-预防死锁_StudyWinter的博客-CSDN博客
互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。
该策略的缺点:并不是所有资源的可以改造成可共享使用的资源。并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时候都无法破坏互斥条件。
将互斥使用的资源改为允许共享使用
不可剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。
请求和保持条件:进程已经保持了至少一个资源,但是由提出新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。
循环等待条件:存在一种进程资源的循环等待,链中每一个进程已经获得资源的同时又被下一个进程所请求。
2.4.3 死锁的处理策略-避免死锁
2.4.3 死锁的处理策略-避免死锁_StudyWinter的博客-CSDN博客
安全序列:就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。
核心思想:在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让进程先阻塞等待。
2.4.4 死锁的处理策略-检测和解除
2.4.4 死锁的处理策略-检测和解除_StudyWinter的博客-CSDN博客