欢迎来到天天文库
浏览记录
ID:59013776
大小:378.00 KB
页数:32页
时间:2020-09-26
《第二章C - 进程的通信与线程ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机操作系统2021/8/152.5进程间通信进程通信:指进程之间的信息交换。2.5.1进程间通信的类型2.5.2共享存储器系统2.5.3消息传递系统2.5.4管道通信2021/8/152.5.1进程间通信的类型低级通信:只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量机制。优点是速度快。缺点是:传送信息量小:效率低,每次通信传递的信息量固定,若传递较多信息则需要进行多次通信。编程复杂:用户直接实现通信的细节(共享的数据结构、传送函数、互斥与同步),编程复杂,容易出错。高级通信:指用户可直接利用操作系统所
2、提供的一组通信命令,高效地传送大量数据的一种通信方式。包括三类:共享存储器系统消息传送系统管道通信系统。返回2021/8/15基于共享数据结构的通信方式没有屏蔽公用数据结构的设置以及同步处理等细节只能传递相对少量的数据基于共享存储区的通信方式在存储器中划出一块共享存储区,诸进程可通过对共享存储区中数据的读写来实现通信。通信前,先向系统申请获得共享存储区中的一个分区shmget()由申请者把获得的共享存储分区链接到本进程上:将共享内存的物理区域映射到该进程的虚空间shmat()向读写普通存储器一样读写该公用存储分区2.5.2共
3、享存储器系统2021/8/15A正文A数据A栈共享存储器B正文B数据B栈进程A虚空间进程B虚空间内存空间返回基于共享存储区的通信方式2021/8/152.5.3消息传递系统消息传递系统是指:进程间的数据交换是以格式化的消息为单位的。消息传递系统分为直接通信方式和间接通信方式两种。1.直接通信方式这是指发送进程利用OS提供的发送命令直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上。接收进程利用OS提供的接收命令直接从消息缓冲队列中取得消息。此时要求发送进程和接收进程都以显示的方式提供对方的标识符,通常系统提供下述两
4、条通信原语:Send(Receiver,message);Receive(Sender,message);或(Receive(message));直接通信的实例-消息缓冲队列通信机制。2021/8/152.直接通信的实例:消息缓冲队列通信机制消息缓冲队列通信原理消息缓冲队列通信机制的原理是:由系统管理一组缓冲区(供所有进程使用),其中每个缓冲区可以存放一个消息。当发送进程要发送消息时先要向系统申请一个缓冲区,然后把消息写进去,接着把该缓冲区链接到接收进程的消息缓冲队列中。接收进程可以在适当的时候从消息缓冲队列中摘下消息缓冲
5、区,读取消息,并释放该缓冲区。2021/8/15消息缓冲队列通信的数据结构有:消息缓冲区typemessagebuffer=recordsender;发送进程的标识符size;消息长度text;消息正文next;指向下一个消息缓冲区的指针end进程PCB中有关通信的扩充数据项typePCB=record.mutex;消息缓冲队列互斥信号量;Sm;消息缓冲队列资源信号量;mq;消息缓冲队列首指针;.end消息缓冲队列通信机制2021/8/15发送原语send(receiver,a){getbuf(a.size,i);i.sen
6、der=a.senderi.size=a.size;i.text=a.text;i.next=0;getid(PCBset,receiver,j);P(j.mutex);//消息链是临界资源,需互斥insert(j.mq,i);V(j.mutex);V(j.Sm);}消息缓冲队列通信机制2021/8/15接收原语receive(sender,b){j=internalname;P(j.Sm);//从消息链上申请一个消息P(j.mutex);Remove(j.mq,i);V(j.mutex);b.sender=i.sender
7、;b.size=i.size;b.text=i.text;Releasebuf(i);}消息缓冲队列通信机制2021/8/15.mutexsmmqsend(B,a);sender:Asize:13text:Howareyou?Nextsender:Asize:5text:HelloNext:sender:Asize:13text:Howareyou?Next:0receive(b);sender:Asize:5text:Hello进程B进程A进程BPCB消息缓冲队列通信机制的发送和接收2021/8/15在间接通信情况,消息不
8、直接从发送者发送到接收者,而是发送到暂存消息的共享数据结构组成的队列,这个实体称为信箱(mailbox,仅为相互通信的进程所有)。因此两个进程通信情况是,一个进程发送一个消息到某个信箱,而另一个进程从信箱中摘取消息。系统为信箱提供的原语:创建、撤销信箱、消息发送send(mailbox,m
此文档下载收益归作者所有