操作系统学习笔记(12) 死锁问题

来源:互联网 发布:同志交友软件blued 编辑:程序博客网 时间:2024/05/16 11:53

  1 例子,
  2 P进程:get(A), get(B), relese(A), relase(B)
  3 Q进程:get(A), get(B), relese(A), relase(B)
  4
  5 死锁区:
  6 P获得了A,还没获得B,下面将申请B
  7 Q获得了B,还没获得A,下面将申请A
  8
  9 修改P、Q代码:
 10 P进程:get(A), relase(A), get(B), relase(B)
 11 Q进程:get(B), relase(B), get(A), relase(A)
 12
 13 引起死锁的原因:
 14     1。竞争可重用资源
 15     2。竞争可消耗资源
 16
 17 产生死锁的条件:
 18     1。互斥
 19     2。占有且等待。
 20     3。非剥夺:进程占有的资源不能被其他进程强行剥夺。
 21     4。循环等待。
 22
 23 解决死锁的方法:
 24     1。预防死锁:破坏产生死锁的必要条件,降低系统资源的利用率。
 25     2。避免死锁:预测判断,如果可能有死锁可能就不分配资源。
 26         如何避免系统进入不安全状态。
 27         安全状态可能向不安全状态转换。
 28         银行家算法:
 29             数据结构,
 30             (1).可利用资源向量available[s]。
 31             (2).最大需求矩阵:max(n,m)。max(i, j)表示进程i需要j类资源的最大数。
 32             (3).分配矩阵:allocation。allocation(i, j)表示进程i已获得的j类资源的数目。
 33             (4).需求矩阵:need。need(i, j)表示进程i还需要j类资源的个数。
 34                 进程P,request.将进行下面步骤检查:
 35                 1。if( request <= need ){
 36                         if( request <= available ){
 37                             available -= request;
 38                             allocation += request;
 39                             need -= request;
 40                             //安全性检查算法
 41                             var finish[n];//finish[i]表示进程i获得所有需要的资源,而顺利完成。
 42                             var work;//表示系统可提供给进程继续运行的资源的集合。
 43                         100:if(finish(i) = false && need <= work){
 44                                 work = work + allocation;
 45                                 finish(i) = true;
 46                                 goto 100;
 47                             }else{
 48                                 if(all_finish = true){
 49                                     系统处于安全状态;
 50                                 }else{
 51                                     系统处于不安全状态;
 52                                 }
 53                             }
 54                         }else{
 55                             阻塞;
 56                         }
 57                     }else{
 58                         ERROR;
 59                     }
 60
 61
 62         避免死锁的限制条件:
 63             1。预先申明每个进程需要的资源总量。
 64             2。进程之间相互独立,影响进程的并发。
 65             3。系统必须提供固定数量的资源。
 66             4。若进程占有资源,则不让进程退出系统。
 67
 68     检测死锁的方法:
 69         死锁定理:当且仅当系统某个状态S所对应的资源分配图是不可完全简化的,则S是死锁状态。
 70
 71     解除死锁:
 72         1。撤销死锁进程。
 73         2。把死锁进程恢复到前一个检查点,重新执行每个进程。
 74         3。按照某种原则一个一个撤销死锁进程。
 75         4。按照某种原则一个一个剥夺进程资源,直到解除死锁。
 76
 77     最小代价原则:
 78         1。花费处理机时间最少的进程。
 79         2。产生输出最少的进程。
 80         3。估计未执行部分最多的进程。
 81         4。获得资源最少的进程。
 82         5。优先级最低的进程。

原创粉丝点击