讨论一下银行家算法,顺便散分!

lujun-cc 2005-11-27 10:06:23
今天把银行家算法实现了,但疑问的是,这个算法,在实际中到底有没有用!
...全文
256 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fflush 2005-11-29
某些系统在对待死锁上采取银行家算法来避免死锁,不过大部分的操作系统实现考虑到银行家算法的代价太高,都没有采用
回复
ohahaha 2005-11-29
讲得挺清楚的.
回复
liarking 2005-11-29
学习了!
谢谢楼主!
回复
lujun-cc 2005-11-29
只有自己顶了!
回复
xhltoo 2005-11-29
顶了!!!
回复
nFox18 2005-11-29
-_-||
回复
lujun-cc 2005-11-28
一般化的银行家算法可以处理多种资源,下面首先用一个实例来描述一下该算法的处理过程,然后再给出这个算法的一般描述。
在该实例系统中,一共有4种资源:Tap Drivers、Plotters、Scanners、CD ROMs,其数量分别是:6、3、4、2;系统有五个进程:A、B、C、D、E来请求这四种资源。
Matrix C
Tap Drivers Plotters Scanners CD ROMs
A 3 0 1 1
B 0 1 0 0
C 1 1 1 0
D 1 1 0 1
E 0 0 0 0
图a 各个进程已经分配的资源

Matrix R
Tap Drivers Plotters Scanners CD ROMs
A 1 1 0 0
B 0 1 1 2
C 3 1 0 0
D 0 0 1 0
E 2 1 1 0
图b 各个进程仍然需要的资源


E=( 6 3 4 2)
P=( 5 3 2 2)
A=( 1 0 2 0)


在某一状态,各个进程已经获得了一定数量的资源,其分配情况如图 中a所示;而此时各个进程所仍然需要的资源如图b所示。我们采用向量E表示系统中拥有的资源,P表示已经分配的资源,A表示剩余的可用资源。
有了上面的假设之后,银行家算法中判断一个状态是否安全的步骤,就可以这样来描述:

① 在矩阵R中,查看所有运行着的线程,看是否存在着向量Ri,使得Ri≤A;如果不存在这样的向量,那么系统中就没有进程可以完成,从而该系统最终将会死锁,算法中止;如果存在着一个或者多个Ri,算法执行第二步。

② 将该进程标记为“完成”状态,并将矩阵C中对应的向量Ci加到A上,即:A=A+Ci;

③ 重复步骤①和②,直至所有的线程标记为“完成”,那么这个状态是安全的;否则,若有线程没有标记为“完成”,则该状态为不安全状态。

现在回到上面的实例中,经过上述的算法判断,目前的状态是安全的。此后,如果进程B请求一个Scanners,那么如果满足这个请求的话会导致不安全状态,看下图所示。此时,进程D可以先运行完成,然后可以运行进程A,也可以运行E,接下来系统可用资源增多,系统可以顺序执行下去了。因此,这个进程B的此次资源请求是可以满足的。
Matrix C
Tap Drivers Plotters Scanners CD ROMs
A 3 0 1 1
B 0 1 1 0
C 1 1 1 0
D 1 1 0 1
E 0 0 0 0
图c 各个进程已经分配的资源

Matrix R
Tap Drivers Plotters Scanners CD ROMs
A 1 1 0 0
B 0 1 0 2
C 3 1 0 0
D 0 0 1 0
E 2 1 1 0
图d 各个进程仍然需要的资源


E=( 6 3 4 2 )
P=( 5 3 3 2)
A=( 1 0 1 0)

现在,我们再来看,当系统满足了进程B的资源请求之后,系统达到了上图中的a状态,此刻,如果进程E再请求一个Scanner,情况会怎么样呢,假设我们先满足他的请求,系统达到图5中的状态a。这样,A=(1000),那么就会使算法在第一步中止,从而导致系统死锁。因此,这次请求是不应该满足的,至少要推迟一段时间后再来满足之。
Matrix C
Tap Drivers Plotters Scanners CD ROMs
A 3 0 1 1
B 0 1 1 0
C 1 1 1 0
D 1 1 0 1
E 0 0 1 0
图e 各个进程已经分配的资源

Matrix R
Tap Drivers Plotters Scanners CD ROMs
A 1 1 0 0
B 0 1 0 2
C 3 1 0 0
D 0 0 1 0
E 2 1 0 0
图f 各个进程仍然需要的资源


E=( 6 3 4 2 )
P=( 5 3 4 2 )
A=( 1 0 0 0)
回复
pomelowu 2005-11-27
收分
回复
chenhu_doc 2005-11-27
不晓得主要的思想是怎样滴 能不能透露一点呢?
回复
chenhu_doc 2005-11-27
heihei
回复
SammyLan 2005-11-27
(=_=)
回复
xiao_xiao_zi 2005-11-27
2?
回复
kuhx 2005-11-27
1?
回复
发帖
非技术区
创建于2007-09-28

1.5w+

社区成员

C/C++ 非技术区
申请成为版主
帖子事件
创建了帖子
2005-11-27 10:06
社区公告
暂无公告