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。优先级最低的进程。
操作系统学习笔记(12) 死锁问题
最新推荐文章于 2022-11-22 23:23:51 发布