Wiki百科上面对于银行家算法的解释比较详细()
但是我感觉要实际应用,有几个问题:
(1)真实的操作系统如Linux/Windows当中,进程/线程的资源分配真的使用了Djikstra的银行家算法吗? 我没有看过Linux的源代码,想知道理论学到的东西和实际应用是不是一回事。
(2)既然操作系统大都是用C写的,那么如果系统资源有10种类型,那么是不是OS要为每个进程分配一个Allocation向量来记录当前的进程用了多少资源? 这个数据结构是在OS的地址空间里面呢,还是进程自己的进程空间里面?
(3)因为进程的执行是可以并行的,是否会导致:
一个进程分配一个资源的时候,必须停下其他所有的进程来保证资源矩阵的操作是同步的。否则可能两个进程同时申请了一种资源,但是这种资源的
available只是减去了1。我觉得OS不应该这样设计,否则进程越多系统越慢,但是这个同步的问题是如何解决的呢?
谢谢。
++++++++++++++++++++++++++++++++
这是个很有意思的问题,在上学的时候我也想到过很多类似的问题,包括这个。现在给你一些参考:
以下内容来自《操作系统:设计与实现》
3.3.3 鸵鸟算法
最简单的方法是像鸵鸟一样对死锁视而不见。对该方法各人的看法不同。数学家认为不管花多大代价也要防止死锁的发生;工程师们则要了解死锁发生的频率、系统
因其他原因崩溃的频率、以及死锁有多严重,如果死锁平均每50年发生一次,而系统每个月会因硬件故障、编译器错误或操作系统错误而崩溃一次,那么大多数工
程师不会不惜工本的去消除死锁。
。。。。。
3.3.5 死锁预防
。。。。。
该算法(银行家算法)有Dijkstra与1965年发表。从那之后几乎每本操作系统的专著都详细的描述它,许多内容的论文也都围绕该算法,但很少有作者
指出该算法有实用价值。因为很少有进程能够在运行前就知道其所需资源的最大值,而且进程数不是固定的,往往在不断变化,况且原本可用的资源也可能突然变成
不可用(比如磁带机可能突然坏掉)。
。。。。。
++++++++++++++++++++++++++++++++++++++++++++++++
如果执行的任务相对固定,那么预先估计每个任务的资源使用也是可能的,在当年的大型机时代这个是完全可能的。但是,这个算法在现在的通用OS内核中估计就没多大用处了。
阅读(2029) | 评论(0) | 转发(0) |