操作系统2-5.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(2)间接 信箱类型 私用:拥有者有读/写数,其它只有写权,(单向) 存在期=进程存在期。 公用:系统创建,双向,存在期=系统存在期。 共享信箱:一般进程创建,并指明其共享者,是双向。 发送—接收进程之间的关系: 一对一关系; 多对一关系; 一对多关系; 多对多关系:公用信箱。 2.5 进程通信—高级通信 2.5 进程通信—高级通信 semaphore full=0; /*满格计数*/ semaphore empty=N; /*空格计数*/ receive(mailbos, message) { P(full); 选择满格F; 把满格F中的消息取出放msg中; 置F格标志为空E; V(empty); } send(mailbox, messsage) { P(empty); 选择空格E; 将消息msg放入空格E中; 置格E的标志为满; V(full); } (2)间接 2.5 进程通信—高级通信 在两个进程的执行过程中,如果一个进程的输出是另一个进程的输入,可以使用管道文件。 这是一个临时文件,输入进程向它写信息,输出进程从它读信息。 从进程A的输出区读数据,写入管道文件。 将管道文件的数据读出,写入进程B的输入区。 共用一个管道文件,进程之间的关系有: 互斥关系——输出和输入进程不可能同时读或者写; 同步关系——当管道文件为空时,输入进程等待输出进程,当管道文件为满时,输出进程等待输入进程。 3. 管道(Pipe)通信 2.5 进程通信—高级通信 通信链路 建立通信链路(显式建立链路、隐式建立链路) 通信链路的连接方法(点-点、多点) 通信方式(单向、双向) 通信链路的容量(无容量、有容量) 消息格式 消息头和消息正文 消息传递系统实现中的若干问题(了解) 返回目录 返回目录 2.5 进程通信—高级通信 消息传递系统实现中的若干问题(了解) 进程同步方式 1.发送和接收进程阻塞(汇合) 用于紧密同步,无缓冲区时。 2.发送进程不阻塞,接收进程阻塞(多个) 相当于接收进程(可能是多个)一直等待发送进程,如:打印进程等待打印任务。 3.发送/接收进程均不阻塞 一般在发、收进程间有多个缓冲区时。 1、下面是两个并发执行的进程。它们能正确执行吗?若不能,试举例说明,并修改之。 Cobegin Var x:integer; Process P1 Var y,z:integer; Begin x:=1 y:=0; if x=1 then y:=y+1; z:=y; End Process P2 Var t,u:integer; Begin x:=0 t:=0; if x1 then t:=t+2; u:=t; End Coend. 答:不能。若进程P1执行至“y:=0;“时发生进程调度选中P2,P2开始执行,执行至“x:=0”时又发生进程调度选中P1,则P1中“if x=1 then y:=y+1;”本应该执行却不会执行,因为发生进程调度时改变了x原来的值。一种简单的修改方案是互斥访问x,设置互斥访问信号灯,在P1和P2的Begin后面加P(mutex),End前面加V(mutex)(可能失去并发性)。 2、现有进程R1,R2,W1,W2,它们共享可以存放一个数的缓冲区。进程R1每次把从键盘上读一个数存到该缓冲区,供进程W1打印输出;进程R2每次从磁盘上读一个数存放到该缓冲区中,供W2打印输出。当一个进程把数存放到缓冲区后,在该数还没有被打印输出之前不准任何进程再向缓冲区中存数;当一个进程已把缓冲区中的数字打印输出后,在缓冲区中还没有存入一个新的数之前不准任何进程再从缓冲区中取数打印。试用PV原语来协调它们的工作。 设信号量mutex用来控制进程间的互斥,初值为1,信号量avail表示缓冲区是否为空的情况,初值为1,信号量full1表示控制W1输出的情况,初值为0,信号量full2表示控制W2输出的情况,初值为0。 P1 W1 P2 W2 Begin P(avail) P(mutex) Write; V(full1) V(mutex) end Begin P(full1) P(mutex) print; V(avail) V(mutex) end Begin P(avail) P(mutex) Write; V(full2) V(mutex) end Begin P(full2) P(mutex) Write; V(avail) V(mutex) end * 管

文档评论(0)

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

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

1亿VIP精品文档

相关文档