信号量和银行家算法中.ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 同步、通信与死锁 主要内容 临界区管理 信号量与PV操作 进程通信 死锁 转向 3.1.3 进程的交互:竞争与协作(1) 第一种是竞争关系 系统中的多个进程之间彼此无关 系统中的多个进程之间彼此相关 资源竞争的两个控制问题: 一个是死锁(Deadlock)问题, 一个是饥饿(Starvation) 问题 既要解决饥饿问题,又要解决死锁问题。 进程互斥是指若干个进程因相互争夺独占型资源时所产生的竞争制约关系。 进程的交往:竞争与协作(2) 第二种是协作关系 某些进程为完成同一任务需要分工协作。 进程同步指为完成共同任务的并发进程基于某个条件来协调它们的活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约关系。 进程同步指两个以上进程基于某个条件来协调它们的活动。一个进程的执行依赖于协作进程的消息或信号,当一个进程没有得到来自于协作进程的消息或信号时需等待,直到消息或信号到达才被唤醒。 进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源,是对进程使用资源次序上的一种协调。 3.2.1 互斥与临界区(1) 临界资源:一次仅允许一个进程使用的共享资源,如打印机,表格,磁带机。 临界区:在每个进程中方位临界资源的那段程序。 与同一变量有关的临界区分散在各进程的程序段中,而各进程的执行速度不可预知。 如果保证进程在临界区执行时,不让另一个进程进入临界区,即各进程对共享变量的访问是互斥的,就不会造成与时间有关的错误。 互斥与临界区(2) 访问领界区的循环描述repeat 互斥与临界区(3) 临界区调度原则: 一次至多一个进程能够进入临界区内执行; 如果已有进程在临界区,其他试图进入的进程应等待; 进入临界区内的进程应在有限时间内退出,以便让等待进程中的一个进入。 临界区调度原则总结: 互斥使用、有空让进; 忙则等待、有限等待; 择一而入,算法可行。 3.3 信号量与PV操作 3.3.1 同步与同步机制 3.3.2 信号量与PV操作 3.3.3 信号量实现互斥 3.3.4 信号量解决五个哲学家吃通心面问题 3.3.5 信号量解决生产者-消费者问题 3.3.6 记录型信号量解决读者-写者问题 3.3.7 记录型信号量解决理发师问题 转向 信号量机制 如何协调进程间的同步互斥? 1965年E.W.Dijkstra提出了新的同步工具--信号量 和P、V操作。 信号量与PV操作 信号量:一种软件资源 一种数据结构 信号量的值与相应资源的使用情况有关 信号量的值仅有P,V操作改变。 原语:内核中执行时不可被中断的过程 P操作原语和V操作原语 一个进程在某一特殊点上被迫停止执行直到接收到一个对应的特殊变量值,这种特殊变量就是信号量(semaphore),复杂的进程合作需求都可以通过适当的信号结构得到满足。 信号量与PV操作 那么信号量如何实现? 整型信号量 整型数 P操作(Wait)原语 V操作(Singal) 整型信号量 Wait(s): while s = 0 do no –option s:=s-1; Signal(s): s:=s+1; Wait (s)和Signal(s)是原子操作 注意:只要信号量=0就不断测试,不满足让权等待。 记录型信号量 记录型数据结构,有两个分量:一个是信号量的值,另一个是信号量队列的队列指针。 记录型信号量 记录型结构, 包含两个数据项 Type semaphore = record value:interger; L:list of process end: 记录型信号量 S.value 为资源信号量其初值;某类资源的数目 Wait操作:申请一个单位资源 Procedure Wait(s) var s: semaphore; begin s.value=s.value-1; if s.value0 then Block(s,l) End 记录型信号量 Singal 操作:释放一个单位资源 Procedure Signal(s) Var S:Semaphore begin S.value:=S.value+1; if S.value=0 then Wakeup(s,L) S.value 记录型信号量 S.value 大于等于0 表示系统中可用的资源数量 S.value 小于0 表示其绝对值表示申请该资源的阻塞的进程数量 S.value等于1:只允许一个进程访问临界资源,是互斥信号量。 死锁可能产生!举例!! 记录型信号量 Pa:

文档评论(0)

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

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

1亿VIP精品文档

相关文档