您的位置:首页 > 其它

理解死锁

2016-09-01 21:11 274 查看
产生的必要条件:

1.互斥条件:一段时间内,某资源只能由一个进程占用。如果其他人想请求这个资源,只能等待,直到占有这个资源的进程使用完毕。

2.请求和保持:占着茅坑不那啥条件。进程已经持有一些资源,但提出了新的资源要求,可是该资源被其他人占用了,这个时候该进程阻塞,且不会释放自己已经占有的资源。

3.不剥夺条件:进程已经获得的资源,未使用完之前,不能被剥夺,只能在使用完之后呢,自己释放。

4.环路等待条件:发生死锁时,必然存在一个进程-资源的环形链。

处理死锁的基本方法:

1.预防死锁:简单,直观。策略是设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个。

缺点:限制太严格会导致系统的资源利用率降低和系统吞吐量下降。

2.避免死锁:也是一种实现预防的策略,但是呢,不是用各种限制去破坏四个基本条件,而是在分配时,用一点策略防止进入不安全状态。限制条件较弱,因此不会对系统的资源利用率和系统吞吐量有太大影响。但是缺点是实现并不容易。

3.检测死锁:这个就更酷了,没有任何限制条件,任你随便搞,搞出来死锁,会被即时检测出来,斌精确的确定是哪些进程和资源。然后,然后,清除。。。

4.解除死锁:与3配合使用。

3和4的组合,实现上也有难度。

重点是避免死锁的策略。

分配策略:首先是允许进程动态地申请资源,但是申请资源之前,要计算此次资源分配的安全性。若是此次分配,系统不会进入不安全状态,则分配给他,否则,让进程等待。

安全状态的概念:系统能够按照某种进程顺序(P1,P2,P3,…,Pn)这个安全序列,来为每个Pi分配所需资源,直到满足每个进程对资源的最大需求,使得每个进程都能顺利地完成。如果找不到这样的序列,则系统处于不安全状态。

应当注意的是,即使是不安全状态,也不意味着一定不安全,只是风险较高。我们的目的是规避这个风险。

即,只要是安全状态,那么系统就不会进入不安全状态。

重点研究银行家算法(其实很简单啦!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: