银行家算法实例|操作系统
Posted 桃陉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了银行家算法实例|操作系统相关的知识,希望对你有一定的参考价值。
1.算法准备
∙
\\bullet
∙ 银行家算法
(资源分配拒绝策略)目的是选择合适的资源分配顺序从而避免死锁的发生。
∙
\\bullet
∙ 该方法允许进程动态的申请资源,使得系统一直保持安全状态
。那么什么是安全状态呢?
我们考虑一个系统它有固定的进程数目与资源数目,比如说有n个进程和m个不同类型的资源,现在已知如下矩阵(题目中会给出):
R
e
s
o
u
r
c
e
=
(
R
1
,
R
2
,
.
.
.
R
m
)
系
统
中
每
种
资
源
的
总
量
{\\color{Violet}Resource = (R_{1},R_{2},...R_{m})} \\ 系统中每种资源的总量
Resource=(R1,R2,...Rm) 系统中每种资源的总量
A
v
a
i
l
a
b
l
e
=
(
V
1
,
V
2
,
.
.
.
V
m
)
没
有
分
配
的
每
种
资
源
总
量
{\\color{Violet}Available = (V_{1},V_{2},...V_{m})} \\ 没有分配的每种资源总量
Available=(V1,V2,...Vm) 没有分配的每种资源总量
M
a
x
=
[
C
11
C
12
⋯
C
1
m
C
21
C
22
⋯
C
2
m
⋮
⋮
⋮
C
n
1
C
n
2
⋯
C
n
m
]
每
个
进
程
对
每
种
资
源
的
最
大
需
求
{\\color{Violet}Max = \\begin{bmatrix} C_{11} & C_{12} & \\cdots & C_{1m}\\\\ C_{21} & C_{22} & \\cdots & C_{2m}\\\\ \\vdots & \\vdots & & \\vdots \\\\ C_{n1} & C_{n2} & \\cdots & C_{nm} \\end{bmatrix}} \\ 每个进程对每种资源的最大需求
Max=⎣⎢⎢⎢⎡C11C21⋮Cn1C12C22⋮Cn2⋯⋯⋯C1mC2m⋮Cnm⎦⎥⎥⎥⎤ 每个进程对每种资源的最大需求
A
l
l
o
c
a
t
i
o
n
=
[
A
11
A
12
⋯
A
1
m
A
21
A
22
⋯
A
2
m
⋮
⋮
⋮
A
n
1
A
n
2
⋯
A
n
m
]
资
源
当
前
分
配
情
况
{\\color{Violet}Allocation= \\begin{bmatrix} A_{11} & A_{12} & \\cdots & A_{1m}\\\\ A_{21} & A_{22} & \\cdots & A_{2m}\\\\ \\vdots & \\vdots & & \\vdots \\\\ A_{n1} & A_{n2} & \\cdots & A_{nm} \\end{bmatrix}} \\ 资源当前分配情况
Allocation=⎣⎢⎢⎢⎡A11A21⋮An1A12A22⋮An2⋯⋯⋯A1mA2m⋮Anm⎦⎥⎥⎥⎤ 资源当前分配情况
∙ \\bullet ∙ 安全状态就是至少存在一个安全序列 < P 1 , P 2 , . . . , P m > {\\color{Red}<P_{1},P_{2},...,P_{m}>} <P1,P2,...,Pm>,按照这个顺序为进程分配资源可以使每个进程都顺利完成,保证系统不进入死锁状态。
2.算法实例
∙ \\bullet ∙ 假设现在系统中有 R 1 、 R 2 、 R 3 {\\color{Red}R_{1}、R_{2}、R_{3}} R1、R2、R3三种资源,它们资源总数为(9,3,6),目前已经分配给了4个进程,并且分配状态如下,那么这4个进程是否处于安全状态呢?
目前给出的信息如下(我们需要计算Need
矩阵来表示剩下每个进程所需的资源个数,计算方法为Max矩阵减去Allocation矩阵):
此时我们未分配的资源总数为(0,1,1),对比Need矩阵进行观察后发现唯一可以满足
P
2
P_{2}
P2进程的需求,所以先分配给该进程使其完成任务,完成任务以后就会释放
P
2
P_{2}
P2进程占有的所有资源,所以现在Available矩阵的值为(6,1,2)+(0,1,1)=(6,2,3),安全序列中放入
P
2
P_{2}
P2。
继续看下去,此时未分配的资源数可以满足进程
P
1
和
P
4
P_{1}和P_{4}
P银行家算法 C语言编程
操作系统 银行家算法的java图形界面实现代码 jixiangiop@qq.com