目录
进程通信
分类
类型
直接通信
空缓冲块个数+消息缓冲队列中消息的个数=缓冲池中缓冲块总个数
PCB中有关通信的数据项:
发送原语:send(Receiver,a)
接收原语:Receive(b)
互斥
同步
定义:就是进程间进行数据交换
1低级:控制进程的执行速度
2高级:交换进程间数据
向系统申请一个或多个分区,获得分区后即可读/写
2消息传递系统:-----是目前主要的通信方式分为直接通信和间接通信
3管道通信:-------用于大量通信连接读进程和写进程文件,以文件为基础,实质上是以外存进行通信
生产者和消费者利用公用缓冲池对信息进行交换
发送者进程直接将消息送入内存公用消息缓冲池,并将它挂接在接收者进程的消息缓冲队列上,接收进程从消息缓冲队列中取走消息。
mq :消息队列头指针;
mutex :消息队列互斥信号量,初值为1;
sm 同步信号量,用于消息队列中的消息计数,初值为0;
Emphead:空缓冲队列头指针;
Bufmutex:缓冲池的互斥信号量,初值为1;
Bufempty:缓冲池的同步信号量,初值为n;
----用来发送消息,其中receiver 是接收者进程,a是发送区起始地址
申请一个空缓冲块,将以a为首址的信息写入空缓冲块,将该缓冲块挂入消息缓冲队列
摘链:从缓冲池中摘取结点i(类C代码)
if(Empty!=null){ i=EmptyHead.next; EmptyHead->next=i->next; } 挂链:链入消息缓冲队列 if(mq!=null){ i->next=mq->next; mq->next=i; }用来接收消息,b是接收区首地址;
从消息缓冲队列中取一条消息,将该消息链入以b为首址的接收区,释放消息缓冲块
同步互斥关系实现:
发送者进程和接受者进程对缓冲池的互斥访问,互斥信号量BufMutex初=1,表示缓冲池空闲
发送者进程和接受者进程对消息缓冲队列的互斥访问,互斥信号量Mutex=1,表示消息缓冲队列空闲
每发送一条消息:EmptyHead-1 sm+1