第5章并发性互斥和同步祥解.ppt

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

5.3 临界区问题解决方法 5.3.4 信号量方法 前面三种方法小结: 一般软件方法、关中断方法、硬件原子指令 方法 只是解决了临界区进出互斥的问题 都未解决“忙等待”情况(大量浪费CPU) 用来解决多进程同步问题还很复杂、不方便 “信号量”方法是前面方法的更“一般化”体现 信号量 ? 由伟大人物提出的伟大概念!! 信号量: 1965年,由荷兰学者Dijkstra提出的一种特殊整型变量。 信号量定义:1个数据结构+2个基本操作(ADT) struct semaphore { int value; /*记录资源个数或等待资源进程个数*/ PCB *queue; /*等待在该信号量上的进程队列*/ } P(semaphore s); /*原子操作,分配资源或组织进程排队 等待并记录排队进程数*/ V(semaphore s); /*原子操作,资源归还或唤醒等待的进程*/ 5.3 临界区问题解决方法 5.3.4 信号量方法 5.3 临界区问题解决方法 5.3.4 信号量方法 信号量的概念: 信号量是一个确定的二元组(s,q) 其中s是一个具有非负初值的整形变量,q是一个初始状态 为空的队列 整形变量s表示系统中某类资源的数目: 当其值 ≥ 0 时,表示系统中当前可用资源的数目 当其值 < 0 时,其绝对值表示系统中因请求该类资源 而被阻塞的进程数目 除信号量的初值外,信号量的值仅能由P操作和V操作改, 操作系统利用它的状态对进程和资源进行管理 5.3 临界区问题解决方法 5.3.4 信号量方法 信号量的概念: P操作: P操作记为P(s),其中s为一信号量,它执行时主要完成 以下动作: s.value = s.value - 1; /*可理解为占用1个资源,若原 来就没有则记帐“欠”1个*/ 若s.value ≥ 0,则进程继续执行 否则(即s.value 0),则进程被阻塞,并将该进程插入 到信号量s的等待队列s.queue中 说明:实际上,P操作可以理解为分配资源的计数器; 或是使进程处于等待状态的控制指令 5.3 临界区问题解决方法 5.3.4 信号量方法 信号量的概念: V操作: V操作记为V(s),其中s为一信号量,它执行时,主要完成 以下动作: s.value = s.value + 1;/*可理解为归还1个资源,若原来就没 有则意义是用此资源还1个欠帐*/ 若s.value 0,则进程继续执行; 否则(即s.value ≤ 0),则从信号量s的等待队s.queue中 移出第一个进程,使其变为就绪状态,然后返回原进程继 续执行 说明:实际上,V操作可以理解为归还资源的计数器; 或是唤醒进程使其处于就绪状态的控制指令 信号量 vs. 锁 信号量是一个一般的锁… 锁: {0,1} 信号量: {-?, … , -2, -1, 0, 1, 2, … , ?} 信号量即信号的数量,唤醒实际上就是发一个信号 开锁动作也是发一个信号 信号量:一个伟大的概念 可以用来实现互斥 可以记录资源个数(s.value ≥ 0) 可以记录等待进程个数(|s.value| ,s.value < 0) 可以用来实现复杂的进程间同步关系 5.3 临界区问题解决方法 5.3.4 信号量方法 信号量的应用1: 例1:利用信号量及其P、V操作能方便地实现进程 互斥。 设S为一互斥信号量,其初值=1,表示某临界资源未被占用。利用信号量实现并发进程P1、P2互斥访问临界区的描述如下: 进程p1 进程p2 . . . . P(S) P(S) 临界区 临界区

文档评论(0)

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

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

1亿VIP精品文档

相关文档