进程与进程控制线程进程互斥与同步死锁问题进程间通信处理.pptVIP

进程与进程控制线程进程互斥与同步死锁问题进程间通信处理.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程和进程控制 线程 进程互斥和同步 死锁问题 进程间通信 处理器调度 进程互斥和同步 问题的提出 互斥算法 信号量(semaphore) 经典进程同步问题 管程(monitor) Windows 2000/XP的进程互斥和同步 进程间临界资源访问冲突 共享变量的修改冲突 操作顺序冲突 临界资源的访问过程 同步机制应遵循的准则 ①空闲则入:当没有进程处于临界区时,若有一个进程要求进入临界区,则应该允许; ②无空等待:已有进程处于其临界区,其他要求进入临界区的进程必须; ③有限等待:等待进入临界区的进程应该在有限的时间内得到满足; ④让权等待:不能进入临界区的进程,应释放CPU(如转换到阻塞状态) 进程互斥的软件方法 有两个进程Pi, Pj,其中的Pi 算法2:双标志、先检查 设立一个标志数组flag[]:描述进程是否在临界区,初值均为FALSE。 先检查,后修改:在进入区检查另一个进程是否在临界区,不在时修改本进程在临界区的标志;在退出区修改本进程在临界区的标志; 算法3:双标志、后检查 类似于算法2,与互斥算法2的区别在于先修改后检查。可防止两个进程同时进入临界区。 算法4:先修改、后检查、后修改者等待 结合算法1和算法3,满足空闲则入和无空等待要求 turn=j;描述可进入的进程(同时修改标志时) 在进入区先修改后检查,并检查并发修改的先后: 检查对方flag,如果不在临界区则自己进入--空闲则入 否则再检查turn:保存的是较晚的一次赋值,则较晚的进程等待,较早的进程进入--先到先入,后到等待 信号量(semaphore) 信号量和P、V原语 信号量集 信号量和P、V原语 1965年,由荷兰学者Dijkstra提出(P、V分别是荷兰语的 proberen=test和 verhogen=increment的首字母),是一种卓有成效的进程同步机制。 每个信号量s包含一个整数值s.count(计数)和一个进程等待队列s.queue,其中是阻塞在该信号量的各个进程的标识 信号量只能通过初始化和两个标准的原语来访问——作为OS核心代码执行,不受进程调度的打断 初始化指定一个非负整数值,表示空闲资源总数(又称为“资源信号量”)——若为非负值表示当前的空闲资源数,若为负值其绝对值表示当前等待临界区的进程数 P原语 P(s) { --s.count; //表示申请一个资源; if (s.count 0) //表示没有空闲资源; { 调用进程进入等待队列s.queue; 阻塞调用进程; } } V原语 V(s) { ++s.count; //表示释放一个资源; if (s.count = 0) //表示有进程处于阻塞状态; { 从等待队列s.queue中取出一个进程P; 进程P进入就绪队列; } } 利用信号量实现互斥 为临界资源设置一个互斥信号量mutex(MUTual Exclusion),其初值为1;在每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间 必须成对使用P和V原语:遗漏P原语则不能保证互斥访问,遗漏V原语则不能在使用临界资源之后将其释放(给其他等待的进程);P、V原语不能次序错误、重复或遗漏 利用信号量可以实现进程间的同步 前趋关系:并发执行的进程P1和P2中,分别有代码C1和C2,要求C1在C2开始前完成; 为每个前趋关系设置一个互斥信号量S12,其初值为0 经典进程同步问题 经典进程同步问题 采用信号量机制: full是“满”数目,初值为0,empty是“空”数目,初值为n。full和empty存在关系:full + empty == n mutex用于访问缓冲区时的互斥,初值是1 每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否互斥――否则可能死锁(为什么?) 2. 读者-写者问题(the readers-writers problem) 问题描述:对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多个 “读-写”互斥, “写-写”互斥, 读-读允许 2. 读者-写者问题 采用信号量机制: Wmutex表示允许写,初值是1。 公共变量Rcount表示“正在读”的进程数,初值是0; Rmutex表示对Rcount的互斥操作,初值是1。 信号量同步的缺点 同步操作分散:信号量机制中,同步操作分散在各个进程中,使用不当就可能导致各进程死锁(如P、V操作的次序错误、重复或遗漏) 易读性差:要了解对于一组共享变量及信号量的操作是否正确,必须通读整个系统中并发执行的各个程序; 不利于修改和维护:各模块的独立性差,任一组变量或一段代码的修改都可能影响全局; 正确性难以保证:操作系统或并发程序通常很大,很难保证这样一个复

文档评论(0)

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

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

1亿VIP精品文档

相关文档