3.5 进程并发与互斥.pptVIP

  1. 1、本文档共107页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.5 进程并发与互斥 3.5.1 互斥算法 3.5.2 信号量(semaphore) 3.5.3 同步算法 3.5.4 经典的进程互斥同步问题 3.5.1 互斥算法 3.5.1.1临界资源 3.5.1.2临界区的访问过程 3.5.1.3同步机制应遵循的准则 3.5.1.1 临界资源 进程间资源访问冲突 共享变量的修改冲突(空间) 操作顺序冲突(时间) 3.5.1.2 临界区的访问过程 临界区(critical section):进程中访问临界资源的一段代码。 进入区(entry section):在进入临界区之前,检查可否进入临界区的一段代码。如果可以进入临界区,通常设置相应“正在访问临界区”标志 退出区(exit section):用于将“正在访问临界区”标志清除。 剩余区(remainder section):代码中的其余部分。 3.5.1.3 互斥机制应遵循的准则 空闲则进:当没有进程在临界区时,任何需要进入临界区的进程都允许立即进入。 忙则等待:在共享同一对象的所有进程中,一次只能有一个进程进入临界区。其它要求进入临界区的进程只能等待。 有限等待:任何一个进程经有限时间等待后都能进入临界区,不允许出现进程“死等” 的情况。 让权等待:当一个进程不能进入临界区时要立即阻塞自己,释放处理机让其它进程使用,避免“忙等”。 1、进程互斥的软件方法 缺点: 多个进程可能同时进入临界区。 算法如下: Process P (1) Process P (2) Begin begin …… …… While (key[S]= 0) do skip; While (key[S]= 0) do skip; key[S] = 0; key[S] = 0; Critical section; Critical section; key[S] = 1; key[S] = 1; …… …… end. end. 2、进程互斥的硬件方法 为保证第一步和第二步执行不可分离。有些机器在硬件中设置了“测试与设置”指令, 互斥算法(TS指令) 利用TS实现进程互斥:每个临界资源设置一个公共布尔变量lock,初值为FALSE 在进入区利用TS进行检查:有进程在临界区时,重复检查;直到其它进程退出时,检查通过; Swap指令(或Exchange指令) 互斥算法(Swap指令) 利用Swap实现进程互斥:每个临界资源设置一个公共布尔变量lock,初值为FALSE。每个进程设置一个私有布尔变量key 优点 适用于任意数目的进程,在单处理器或多处理器上更显其优越 简单,容易验证其正确性 可以支持进程内存在多个临界区,只需为每个临界区设立一个布尔变量 缺点 等待要耗费CPU时间,即“忙等”,不能实现“让权等待” 可能产生“饿死”现象:有的进程可能永远执行不了 3.5.2 信号量(semaphore) 3.5.2.1 信号量和P、V原语 3.5.2.2 利用信号量实现互斥 3.5.2.1 信号量和P、V原语 为了实现进程的互斥和同步,操作系统中引进了信号量(Semaphore)的概念。 信号量具有以下特性: ( 1) 信号量是一个整形变量。 2) 每一个信号量表示一种系统资源的状况,其值表示该资源当前可用的数量,初值为非零。 ( 3) 每一个信号量都对应一个空或非空的等待队列。该队列就是信号量所代表的资源的等待队列。 4) 对信号量只能实施P、V操作,只有P、V操作原语才能改变其值。 记录型信号量 每个信号量 s 除一个整数值s.count(计数)外,还有一个进程等待队列s.queue,其中是阻塞在该信号量的各个进程的标识 1. P 原语wait(s) --s.count; //表示申请一个资源; if (s.count 0) //表示没有空闲资源; { 调用进程进入等待队列 s.queue; 阻塞调用进程; } 2. V 原语signal(s) ++s.count; //表示释放一个资源; if (s.count = 0) //表示有进程处于阻塞状态; { 从等待队列s.queue

文档评论(0)

1234554321 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档