- 1、本文档共83页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统第二章PPT
Pba: wait(mutexba) countba=countba+1; If countba=1 then wait(s) wait(mutexba) enter; …… wait(mutexba) countba--; if countba=0 then signal(s) signal(mutexba); 进程通信 概念:进程间的信息交换。 实例: 信号量机制(一种低级通信) 缺点:效率低,通信对用户不透明 高级通信 特点: 效率高,通信实现细节对用户透明 共享存贮器系统 基于共享数据结构的通信方式: produce-consume中的缓冲区,低效,不透明。 系统只提供了一共享存贮器,适于少量通信。 基于共享存储区的通信方式: 系统提供:共享存储区。 通信过程: 向系统申请一个或多个分区 获得分区获后即可读/写. 特点:高效,速度快。 进程通信的类型 消息传递系统(可用于异种机) 信息单位:消息(报文) 是目前的主要通信方式,分为直接通信方式、间接通信方式 实现:一组通信命令(原语),具有透明性--- 同步的实现。 管道通信 管道:连接一个读进程和一个写进程之间通信的共享文件。 功能:大量的数据发收。 注意:互斥、同步、对方是否存在 进程通信的类型 直接 send(Receiver, message) receive(Sender, message) 例:解决生产—消费问题。 repeat … produce an item in nextp; … send(consumer, nextp); until false; repeat receive( producer, nextc); … consumer the item in nextc; until false; 直接/间接通信方式 间接(可以实现非实时通信) 优点:在读/写时间上的随机性 写进程― 信箱(中间实体)―读进程 原语 信息的创建与撤消: 信箱名 属性(公用、私用、共享)(共享者名字) 消息的发送和接收 Send (mailbox, message) Receive (mailbox, message) 直接/间接通信方式 间接(可以实现非实时通信) 信箱类型 私用:拥有者有读/写数,其它只有写权,(单向)存在期=进程存在期。 公用:系统创建,双向,存在期=系统存在期。 共享信箱:一般进程创建,并指明其共享者,是双向。 发送—接收进程之间的关系: 一对一关系; 多对一关系; 一对多关系; 多对多关系:公用信箱。 直接/间接通信方式 消息格式: 消息头:含控制信息如:收/发进程名,消息长度、类型、编号 消息内容: 定长消息:系统开销小,用户不便(特别是传长消息用户) 变长消息:开销大,用户方便。 消息传递系统中的几个问题 进程同步方式 发送和接收进程阻塞 用于紧密同步,无缓冲区时。 发送进程不阻塞,接收进程阻塞 相当于接收进程(可能是多个)一直等待发送进程,如:打印进程等待打印任务。 发送/接收进程均不阻塞 一般在发、收进程间有多个缓冲区时。 消息传递系统中的几个问题 数据结构 消息缓冲区 type message buffer =record sender: size: text: next:指向下一指针 PCB中应增数据项: type pcb=record mq 消息队列指针 mutex 消息队列互斥信息量 sm 消息队列资源信息量(表资源消息数) 消息缓冲队列通信机制 发送原语 procedure send(receiver, a) begin getbuf(a.size, i); i.sender:=a.sender; i.size:=a.size; i.text:=a.text; i.next:=0; getid(PCB set, receiver.j); wait(j.mutex); insert(j.mq, i); signal(j.mutex); signal(j.sm); end 消息缓冲队列通信机制 接收原语 procedure receive(b) begin j:=internal name; wait(j.sm); wait(j.mutex); remove(j.mq, i); signal(j.mutex); b.sender:=i.sender; b.size:=i.size; b.text:=i.t
文档评论(0)