Reklama

同步的问题在你

Проблемы синхронизации в ОС

该文献的业务系统载有许多令人感兴趣的问题, 这已经经过广泛讨论和分析与使用不同的方法同步. 在本节中,我们考虑的三个最为人知的问题.

问题的哲学家餐

在 1965 年Dijkstra的帐户制定和解决的同步问题, 叫一问题的哲学家餐. 自那时以来,每, 谁发明了另一个新同步的原始, 认为他有责任证明的优势的新原始的例子的问题餐哲学家. 这一问题可以制订如下: 五个哲学家坐在一次圆桌会议, 而每个人都有一盘意大利面. 意大利面很光滑的, 每一位哲学家的需要,两个叉子, 对付他们. 之间每两个板块的一个叉子 .

的生活哲学家包括交替进食和想. (当然, 这个抽象概念, 即使是哲学家, 但在其他至关重要的进程为我们的任务毫不相关。) 当哲学家是饿了, 他想把两个叉子, 左边和右边, 在任何命令. 如果他弄到两个叉子, 一段时间他吃, 把插头回去然后一直在想. 问题是: 可能是写一个计算程序, 该模式采取这些步骤的每一位哲学家从来都不会陷? (有些人相信, 需要两个叉子看起来有点人为的. 可能的, 我们应该把粮食的意大利菜肴中国菜, 意大利面米, 叉相关的棍子)

 

你可以改变的计划那么, 所以之后就离开叉核查提供的权利. 如果没有叉子, 哲学家让离开回来, 等待一段时和重复的整个过程. 这种方法也将不会起作用, 虽然原因各不相同. 如果你不是很走运, 所有五个哲学家就可以开始的进程的同时, 走左边的叉子, 查明缺乏的权利, 把你留在桌子上, 与此同时,采取离开叉子, 直至无穷. 局势, 在所有的方案继续无限期地, 但是他们不可能实现至少取得了一些进展, 呼吁程序等等 (英国乐于饥饿, 就是说你不能死于饥饿". 此

该词适用于甚至在该案, 当这个问题并不是发生在意大利的或中国餐馆, 和计算机).

你可能会觉得: "如果哲学家将思考的一个随机选择的时期内尝试失败后采取正确的叉子, 的概率, 所有进程将继续滞留至少一个小时, 小小的". 这是对的, 而对大多数使用者而言,重审之后的一段时间不是一个问题. 例如, 在局域网上网的情况, 当两个计算机发送数据包的同时, 大家都要等很随意规定的时间和再试一次—是在实践中这种解决办法很有作用. 然而,在某些应用的倾向是另一个解决办法, 总是工作,而不是取决于随机数字 (例如, 在适用安全的核电站).

作出的改进, 排除的僵局和进程挂: 保护的五个经营者, 以下的调查认为, 是二进制的旗语. 那哲学家将需要履行一项行动的一mutex变一下, 于是把要塞. 和之后的返回弗克斯去的地方应该履行的可变mutex. 从理论上观点来看,该决定是非常合适的. 从实际的角度来看有问题的效率: 在每一时刻的时候能吃意大利面只有一个哲学家. 但有五把叉子, 因此,必须解决在每次两个哲学家.

解决办法, 避免僵局和允许的最大可能的平行存在的任何数量的哲学家. 在这里我们使用一系列国家追踪他的精神状态的每一个哲学家: 他也吃, 或觉得, 或是快 (想把叉子). 哲学家就可以开始吃了, 只有在没有其邻居都不吃. 邻居的一个哲学家引我的定义是迈左右 (这就是说,如果我= 2, 左=

这一问题的读者和作家

餐哲学家的问题是有益的模特进程, 相互竞争的专门获得数额有限的资源, 例如,装置I/o. 另一个问题是问题的读者和作家 [78], 模拟数据库访问. 考虑一个数据库,预订的机票, 在获得许多进程的. 你可以允许同时读数据的数据库, 但如果这一进程写信息的数据库, 获得的其他进程必须终止, 没有读过进入. 怎么计划的读者和作家?

为了避免这种情况, 需要稍微改变的项目: 如果国家进程正在等待进入的数据库, 新读者进入不到, 并排队编写进程. 现在的写作过程的需要等等, 虽然该基地已经走了她的阅读程序, 但不需要跳过之前宣读的过程, 回到基地找他. 缺点是,这种解决办法是减少业绩, 由于减少了竞争. 在提出的解决办法, 在这写进程的更优先的事项.

这一问题的沉睡的理发师

行动的另一个典型的问题的情况interprocess通讯是在一个理发店. 在理发店里有一个理发师, 他的主席,而主席的来访者. 如果你想使用其服务的不, 《理发师坐在他的椅子睡了如果那个发型师的客户, 他必须醒过来理发. 如果某个客户进来看到, 《理发师正忙着, 他不是坐在一张椅子上 (如果有一个地方), 或者出去 (如果没有地方). 这是必要的,方案的理发师和访客, 避免竞赛的状况. 在这项任务中,有许多类似领域中的排队, 例如信息服务, 同时制造了一个有限的请求数量, 与计算机化系统等要求.

 

拟议的解决办法使用三个semaphores: 顾客, 等计算的游客 (客户, 坐在理发店里的椅子, 不算—他是不再等了); 理发师, 多理发师 (0 或 1), 空闲起来同时等待的客户, 和mutex执行相互排斥. 此外,在可变等, 目的是为计算正在等待来访者.

这是一个副本可变的客户. 在该方案的这种变化是由于事实, 阅读本价值的旗语是不可能的. 在该决定中,访客, 找的理发店, 应该数到的数目在等客人. 如果来访者不到, 比椅子, 新的访问仍然是, 否则他走.

当时的理发师工作的天早上, 他只是在执行的程序的理发师, blockerase的旗语的客户, 因为价值的旗语等 0. 然后理发师睡觉, 并睡, 直到第一批客户.

来到美发沙龙, 来访者完成的顾客, 请求进入一个mutex进入关键的区域. 如果之后将有一个人, 他不可能做什么, 虽然第一个客户未释放的入mutex. 那来访者检查的供应的椅子, 如果不能使其获得mutex去.

如果有一个空缺席位, 客人来的增加价值的一个整数的变数等. 然后进行的程序的旗语的客户, 《

最能激活流动的理发师. 在这一点上,来访者与该理发师的积极. 当一个客人稿获得mutex, 理发师抓住了它, 维修任务,并开始把客人.

后割的访客的出口的程序和离开理发店. 不同于以往的方案, 周期的客人不是, 因为每个客人切断一次. 这一周期中有理发师, 和理发师试图找到下一个客人. 如果他成功了, 他割下一个客人, 否则的理发师睡觉.

这是一个值得注意的, 是什么, 尽管缺乏数据问题的读者和作家的问题的理发师睡觉, 这些问题涉及的问题interprocess通信, 因为他们需要的步调一致的多重程序.

 

Reklama