操作系统第3章进程通信与控制讲述.ppt

  1. 1、本文档共142页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2、消息传递系统 在消息传递中,进程间的数据交换以消息为单位。程序员直接利用系统提供的通信命令(原语)来实现。 (1)直接通信方式。 发送进程直接将消息发送给接收进程并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列取得消息。 Send(B,a) ● id:B Size:5 Text:hello 发送区a a 进程A Receive(b) ● id:A Size:5 Text:hello 接收区 b b 进程B PCB(B) mq ● mutex sm Size:5 Text: hello Next: 0 Sender:A 第1个消息缓冲区 图3-22 消息缓冲通信示意图 (2)间接通信方式。 发送进程将消息发送到某种中间实体中,接收进程从中取得消息。这种中间实体一般为信箱,故也称之为信箱通信方式。 信箱通信示意图 进程 A 信箱头 … send receive 进程 B send receive 图3-23 信箱通信示意图 3、管道通信方式 管道是指用于连接一个读进程和一个写进程以实现它们之间通信的共享文件,又称为pipe文件。 管道通信须提供3方面的协调能力: (1)互斥 (2)同步 (3)对方是否存在 共享文件(管道)通信示意图 图3-24 共享文件(管道)通信示意图 发送进程 接收进程 三、直接通信和间接通信 1.直接通信方式 指发送进程利用操作系统提供的发送和接收命令(原语)进行通信。发送消息时直接指明接收者或发送者进程ID。 发送原语:send(receiver,message); 接收原语:receiver(sender,message); Send(B,a) ● id:B Size:5 Text:hello 发送区a a 进程A Receive(b) ● id:A Size:5 Text:hello 接收区 b b 进程B PCB(B) mq ● mutex sm Size:5 Text: hello Next: 0 Sender:A 第1个消息缓冲区 图3-22 消息缓冲通信示意图 举例:(UNIX中两进程利用信号通信)。 Process A ┆ send(1040, SIGUSR1); #向1040号进程发送 一个SIGUSR1信号。 Process B ┆ receive(SIGUSR1,func);#当收到SIGUSR1信 号时,就执行func(),如果SIGUSR1 信号未到,则系统登记func函数, 待其信号到时再调用执行。 ┆ ┆ 2.间接通信方式 基本思想:系统为每个信箱设一个消息队列,消息发送和接收都指向该消息队列,(每个进程可以对消息队列发送并接收/只发送/只接收) 缺点:必须有一个通信双方共享的一个逻辑消息队列(UNIX的PIPE,FIFO及IPC消息传递机制都属于这种形式),使用时消息发送者约定写方式打开信箱,消息接收者约定读方式打开信箱或同时读写打开。 优点:很容易建立双向通信链(只要对信箱说明为读写打开)。 四、用消息传递实现互斥 Program mulualexclusion Const n=…;(*进程个数*) Procedure P(I:integer); Var msg:message; Begin repeat receive(mutex,msg); critical section; send(mutex,msg); remainder forever End; Begin(*main program*) Create-mailbox(mutex); Send(mutex,null); Parbegin P(1); P(2); … P(n); Parend End. 又例:用消息传递解决有限缓冲区的生产者/消费者问题 使用两个邮箱(两个缓冲区)。 生产者将生产出的数据作为消息送到邮箱mayconsume,只要邮箱中有消息,消费者就可以消费。 最初,邮箱mayproduce充满了与缓冲区容量相同数量的空消息,mayproduce中的消息随生产者的生产而减少,随消费者的消费而增加。 Program producerconsumer Const capacity=….; null=…; Var I:integer; Procedure producer; var pmsg:message; Begin while true do begin receive(mayproduce,psmg); pmsg:=produce; send(maysonsume,pmsg)

文档评论(0)

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

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

1亿VIP精品文档

相关文档