进程间通信就是在不同进程之间传播或交换信息,进程间控制信息的交换称为低级通信,进程间大批量数据的交换称为高级通信。
进程通信分为3种:
1.共享存储器系统:为了传送大量数据,在存储器中划出一块共享存储区,诸进程可通过对共享存储区进行读数据或写数据以实现通信。
2.消息传递系统:又分为直接通信方式、间接通信方式.
3.管道通信系统:向管道提供输入的发送进程,以字符流方式将大量的数据送入管道,而接收进程从管道中接收数据
消息缓冲队列通信机制:
由于消息缓冲机制中所使用的缓冲区为公用缓冲区,因此使用消息缓冲机制传送数据时,两通信进程必须满足如下条件:
第一,在发送进程把写入消息的缓冲区挂入消息队列时,应禁止其他进程对该消息队列的访问,否则,将引起消息队列的混乱。同理,当接收进程正从消息队列中取消息时,也应禁止其他进程对该队列的访问。
第二,当缓冲区中无消息存在时,接收进程不能接收到任何消息;而发送进程是否可以发送消息,则只由发送进程是否能够申请到缓冲区决定。
缓冲队列通信机制中的数据结构:
(1)消息缓冲区
typedefstruct message buffer
{
sender; //发送者进程标识符
size; //消息长度
text; //消息正文
next; //指向下一个消息缓冲区的指针
}
(2)PCB中有关进程通信的数据项
typedefstruct message block
{
…
mq; //消息队列队首指针
mutex;//消息队列互斥信号量,初值为1
sm; //消息队列资源信号量,用于消息队列中的消息计数,初值为0
…
}