[信息与通信]OS之分布式系统中的同步问题.ppt

[信息与通信]OS之分布式系统中的同步问题.ppt

  1. 1、本文档共132页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[信息与通信]OS之分布式系统中的同步问题

另外一种预防 让等待进程的时间戳比被等待进程的时间戳大 (即更年轻)时允许进程等待 这时等待链上的时间戳是不断减小的 分布式死锁的预防(5) 等待-死亡算法 为启动早的进程指定高的优先级更明智 这些进程的执行时间较长 占用的系统时间较多 而且可能占有较多的资源 等待-死亡的死锁预防算法 老进程 10 年轻进程 20 需要资源 保持资源 等待 (a) 老进程 10 年轻进程 20 需要资源 保持资源 死亡 (b) 负伤-等待算法 假定一个事务负伤(实际上是被杀死) 而另一个事务等待而得名 如果一个老进程申请的资源被年轻的进程占用 老进程就可以抢占年轻的进程的资源 对应的事务也就被杀死了 年轻的进程可能会立即再次启动,并试图获得资源,结果被迫等待 负伤-等待死锁预防算法 老进程 10 年轻进程 20 申请资源 保持资源 优先 (a) 老进程 10 年轻进程 20 保持资源 (b) 申请资源 等待 两段加锁的优点 每个事务读到的值都是由已经提交的事务修改过的值 不会因为基于一个还不能使用的文件的原因,而终止该事务 所有锁的分配和释放都由系统处理 不需要事务了解这些过程: 文件被访问时,系统为它加锁; 事务结束时,释放相关的锁 避免了级连式的事务终止的情况发生: 由于使用了不该使用的文件而必须中止事务 九、常用的避免死锁的方法(1) 以某种规范的顺序分配锁,避免出现占有一等待循环 明确地维护一张图,说明哪个进程占有哪些锁,等待哪些锁 然后通过检查该图中是否有回路就可以确定是否发生了死锁 常用的避免死锁的方法(2) 超时方案 限定锁的占有时间不超过T秒 如果某个锁连续被同一事务占有的时间超过T秒 断定发生了死锁 并发控制优化 隐含的技术思想惊人地简单: 尽管继续做自己的事务,不必关心别人正在做什么 如果有问题,以后再处理 实际上, 冲突很少发生 因此大多数时间这种策略的效果很好 优化的并发控制方法(1) 通过记录被事务读过和写过的文件处理冲突 提交某个事务时,先检查所有其它事务 确定事务启动之后,它的文件是否被修改过 如果有,事务终止 如果没有,事务提交 优化的并发控制方法(2) 优化的并发控制最适合基于私有空间的实现方式 每个事务以私有方式修改文件,不会互相干扰 结果,新文件或者被提交,或者被释放 优点,它不会引起死锁 所有的进程不必等待所需要的锁,达到最大的并行度 缺点是,有时会失败,要重新执行事务 在负载较重的情况下,失败可能性聚增 1. 时间戳(1) 系统中每个文件都有相关的一个读时间戳和一个写时间戳 Lamport算法可以保证这个时间戳是唯一的 它们分别说明是哪个已提交的事务最后读,写了该文件 时间戳(2) 某个进程试图访问文件时 文件的读时间戳和写时间戳应比当前事务的时间戳更早(老) 顺序关系说明事务正按照正常的次序执行,一切正常 时间戳方法并不关心并发事务是否使用相同的文件 只要有较小数字的事务总是在先即可 利用时间戳进行并发控制 利用时间戳进行并发控制 时间戳(3) 事务碰到时间戳较大的文件时,必须终止 时间戳方法不会发生死锁 大大提升了它的优势 十、分布式系统中的死锁 两种死锁:通信死锁和资源死锁 一个例子:进程A试着向进程B发送消息 而进程B试图向进程C发送消息 同时进程C又试图向进程A发送消息 这种情况下导致死锁的原因很多 比如,没有可用的缓冲区时就会发生死锁 资源死锁 发生在多个进程抢占需要互斥访问的 I/O设备,文件,锁或其它资源的情况下 通信信道,缓冲区等也是资源 因此通信死锁也可以认为是资源死锁 处理死锁的通用策略: 无视死锁 (忽略问题) 检测 (允许发生死锁,检测死锁, 并试图从死锁中恢复) 预防 (静态的结构处理使死锁不可能发生) 避免 (通过仔细分配资源避免发生死锁) 在分布式系统中,第一种方法应用普遍,效果好 1. 分布式死锁的检测 只检测死锁,而不是禁止死锁的发生 在基于原子事务的系统中检测到死锁时 可以通过终止一个或多个事务解除死锁 由于导致死锁而中止某事务时 系统首先恢复到事务启动前的状态 这时事务可以再次被启动 第二次启动成功也是可能有的 集中式死锁检测方法(1) 模拟非分布式的算法 每台机器维护它上面运行的进程和资源构成的资源图 用中心协调者维护整个系统的资源图 (所有单个图的并集) 在协调者检测到系统资源图中存在回路时 杀死某个进程结束死锁 集中式死锁检测方法(2) 分布式系统中,信息必须明确发送给某台机器 每台机器维护自己的进程和资源图 不论资源图中增加/减少弧线,消息都可送给协调器更新 周期性地,送出相对先前所更新的弧线增加或删除的清单 方法需要比较少的消息 协调器在

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档