在实际的OS中,资源分配是用"银行家算法"吗

http://bbs.chinaunix.net/thread-4060467-1-1.html

Wiki百科上面对于银行家算法的解释比较详细(http://zh.wikipedia.org/wiki/%E9 ... 6%E7%AE%97%E6%B3%95)

但是我感觉要实际应用,有几个问题:
(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内核中估计就没多大用处了。




<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(458) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
posted @ 2016-02-01 00:00  张同光  阅读(123)  评论(0编辑  收藏  举报