新一轮软考备考来啦~
为了帮助大家提高备考效率,将2023上半年软考网络工程师知识点速记分享给大家,快来跟着一起打卡学习吧!
进程的死锁
进程管理是操作系统的核心,如果设计不当,就会出现死锁的问题。如果一个进程在等待一个不可能发生的事件,则其将死锁;如果一个或多个进程产生死锁,则会造成系统死锁。
如果在一个系统中以下四个条件同时成立,那么就能引起死锁:
互斥:至少有一个资源必须处于非共享模式,即一次只有一个进程可使用。如果另一进程申请该资源,那么申请进程应等到该资源释放为止。
占有并等待:—个进程应占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有。
非抢占:资源不能被抢占,即资源只能被进程在完成任务后自愿释放。
循环等待:有一组等待进程 {P 0 , P 1 ,…, P n } , P0 等待的资源为 P 1 占有, P 1 等待的资源为 P 2 占有,……, P n-1 等待的资源为 P n 占有, P n 等待的资源为 P 0 占有。
要想防止死锁的发生,其根本方法就是使得上述的必要条件之一不存在,换言之,就是破坏其必要条件使之永不成立。
解决死锁的策略包括死锁预防、死锁避免、死锁检测和死锁解除。
1. 死锁预防:例如,要求用户申请资源时一次性申请所需要的全部资源,这样就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。
2. 死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,典型算法是银行家算法。但这种算法会增加系统的开销。
所谓银行家算法,是指在分配资源之前,先看清楚,如果资源分配下去后,是否会导致系统死锁。如果会死锁,则不分配,否则就分配。
具体来说,银行家算法分配资源的原则总结如下:
( 1 )当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程。
(2)进程可以分期请求资源,但请求的总数不能超过最大需求量。
(3)当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。
注意:
如果系统中有 N 个并发进程,若规定每个进程需要申请 R 个某类资源,则当系统提供 K=N*( R-1 ) +1 个同类资源时,无论采用何种方式申请使用,一定不会发生死锁。
3. 死锁检测:前两者是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。
4. 死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将某进程所拥有的资源强行收回,分配给其他的进程。
更多内容持续更新中,欢迎一起交流学习~