- 1、本文档共141页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程间的关系——进程间并发举例 司机 P1 售票员 P2 REPEAT REPEAT 启动 关门 正常运行 售票 到站停 开门 UNTIL FALSE UNTIL FALSE 进程间的关系——进程间并发举例 进程间的关系——并发执行举例 例3:与进程的执行顺序有关的错误 进程间的关系——并发执行举例 例3:与进程的执行顺序有关的错误 正确执行顺序 生产者进程 Buffer:interger Processer producer Begin L1:produce a product; Buffer:=product; go to L1 end 4、互斥算法——使用临界区遵循的原则 空闲则入:其他进程均不处于临界区; 忙则等待:已有进程处于其临界区; 有限等待:等待进入临界区的进程不能死等; 让权等待:不能进入临界区的进程,应释放CPU(如转换到阻塞状态) 临界区的使用原则是什么? 上面4条。 5 进程互斥的软件方法 有两个进程Pi, Pj,其中: 缺点:强制轮流进入临界区,没有考虑进程的实际需要。容易造成资源利用不充分:在Pi出让临界区之后,Pj使用临界区之前,Pi不可能再次使用临界区; 算法2:双标志、先检查 设立一个标志数组flag[]:描述进程是否在临界区,初值均为FALSE。 先检查,后修改:在进入区检查另一个进程是否在临界区,不在时修改本进程在临界区的标志; 在退出区修改本进程在临界区的标志; 优点:不用交替进入,可连续使用; 缺点:Pi和Pj可能同时进入临界区。按下面序列执行时,会同时进入:Pia Pja Pib Pjb。即在检查对方flag之后和切换自己flag之前有一段时间,结果都检查通过。这里的问题出在检查和修改操作不能连续进行。 算法3:双标志、后检查 类似于算法2,与互斥算法2的区别在于先修改后检查。可防止两个进程同时进入临界区。 flag[]初值均为FALSE 缺点:Pi和Pj可能都进入不了临界区。按下面序列执行时,会都进不了临界区:Pib Pjb Pia Pja。即在切换自己flag之后和检查对方flag之前有一段时间,结果都切换flag,都检查不通过。 信号量(semaphore) 信号量和P、V原语的另一种解释 每个信号量s除一个整数值s.count(计数)外,还有一个进程阻塞队列s.queue,其中是阻塞在该信号量的各个进程的标识 信号量只能通过初始化和两个标准的原语来访问--作为OS核心代码执行,不受进程调度的打断。 初始化指定一个非负整数值,表示空闲资源总数(又称为“资源信号量”)*****若为非负值表示当前的空闲资源数,若为负值其绝对值表示当前等待临界区的进程数 二进制信号量(binary semaphore):只允许信号量取0或1值 1. P原语wait(s) --s.count; //表示申请一个资源; if (s.count 0) //表示没有空闲资源; { 调用进程进入阻塞队列s.queue; 阻塞调用进程; } 2. V原语signal(s) ++s.count; //表示释放一个资源; if (s.count = 0) //表示有进程处于阻塞状态; { 从等待队列s.queue中取出一个进程P; 进程P进入就绪队列; } P、V操作是定义在信号量S上的两个操作,其定义如下: P(S): ① S∶=S-1; ② 若S≥0,则调用P(S)的进程继续运行; ③ 若S0,则调用P(S)的进程被阻塞, 并把它插入到等 待信号量S的阻塞队列中。 V(S): ① S∶=S+1; ② 若S0,则调用V(S)的进程继续运行; ③ 若S≤0,从等待信号量S的阻塞队列中唤醒头一个进程, 然后调用V(S)的进程继续运行。 三种信号量的比较 整型信号量: 只有一个资源,只能互斥访问这个资源 记录型信号量:只可申请一类资源,该资源有n个,一次只可申请一个。 AND型信号量:可申请n类资源,每类资源有m个,每次可申请每类资源中的一个。 信号量集:可申请n类资源,每类资源有m个,每次可申请每类资源中的多个。 1、应用(一):
文档评论(0)