进程通信

进程通信的类型
进程通信类型包括低级通信和高级通信类型。
进程通信指进程之间的信息交换,进程同步所交换的信息量少,称为低级通信。
如:信号量机制是有效的同步工具,但作为通信工具,不够理想。
缺点:(1)只能传递状态和整数值(控制信息),传送信息量小。(2)进程同步的细节由程序员实现,编程复杂。
高级进程通信是指用户可直接利用操作系统所提供的一组通信命令,高效传送大量数据的一种通信方式。
优点:其隐藏了进程通信的实现细节,减少了编程的复杂性。
高级通信机制可归结为三类:
1.共享存储器系统
(1)基于共享数据结构的通信方式
基于共享数据结构的通信方式,是指多个进程共用某些数据结构,实现进程间的信息交换。如生产者消费者问题中的有界缓冲区,只适合传输少量数据。
(2)基于共享存储区的通信方式
基于共享存储区的通信方式,是指在存储器中划出一个共享存储区,多个进程可通过对共享存储区中数据的读写,来实现通信。如复制粘贴操作,可以传输大量数据。
在UNIX中,通过不同的命令对共享存储区进行操作。
(1)创建或打开共享存储区:依据用户给出的整数值key,创建新区或打开现有区,返回一个共享存储区ID。
(2)连接共享存储区:连接共享存储区到本进程的地址空间,可以指定虚拟地址或由系统分配,返回共享存储区首地址。
(3)拆除共享存储区连接:拆除共享存储区与本进程地址空间的连接。
(4)共享存储区控制:对共享存储区进行控制。
2.消息传递系统
消息传递系统是应用最广泛的进程通信机制。程序员直接利用操作系统所提供的一组通信命令,以格式化的消息为单位,实现大量数据的传递,隐藏了进程通信的实现细节。
因实现方式的不同分为:
(1)直接通信方式
发送进程利用操作系统所提供的发送命令,直接把消息发送给目标进程。通常,系统提供下面两条通信原语:
send(receiver,message)发送一个消息给接收进程。
receive(sender,message)接收sender发来的消息。
(2)间接通信方式
在间接通信方式中,需要创建信箱;通过信箱进行消息的发送和接收。
信箱的创建和撤销
进程可利用创建信箱原语来建立一个新信箱。创建者进程应给出信箱名字、信箱属性;
信箱属性可分为以下三类:
(1)私用信箱
(2)公用信箱
(3)共享信箱
对于共享信箱,应给出共享者的名字。当进程不再需要读信箱时,可用信箱撤销原语撤销。
消息的发送和接收
send(mailbox,message)将一个消息发送到指定信箱
receive(mailbox,message)从指定信箱中接收一个消息
3.管道通信系统
管道是指用于连接一个读进程和一个写进程,以实现进程通信的一个共享文件,又名pipe文件。
向管道提供输入的发送进程,以字符流形式将大量的数据送入管道;而接受管道输出的接收过程,则从管道中接收数据。
由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。
UNIX管道
(1)通过pipe系统调用创建无名管道,得到两个文件描述符,分别用于写和读。
int pipe(int fildes[2]);
(2) 可通过mknod系统调用建立命名管道,
int mknod(const char *path, mode_ t mode, dev_ t dev)
消息传递系统实现中的若干问题
1.通信链路
根据通信链路的连接方法,又可把通信链路分为两类:
①点-点连接通信链路,一条链路只连接两个结点(进程)
②多点连接链路,用一条链路连接多个(n>2)结点(进程)。
根据通信方式的不同,则又可把链路分成两种:
①单向通信链路,只允许发送进程向接收进程发送消息
②双向链路,既允许由进程A向进程B发送消息,也允许进程B同时
向进程A发送消息
2.消息格式
消息格式分成消息头和正文两部分。
消息头包括消息在传输时所需要的控制信息,如源进程名、
目标进程名、消息长度、消息类型、消息编号、发送日期时间等;
正文是发送进程所发送的数据。
消息采用定长消息格式、不定长消息格式两种方式。
(1)采用比较短的定长消息格式,减少了对消息的处理和存储开销。
可用于办公自动化系统中;但这对要发送较长消息的用户是不方便的。
(2)不定长的消息格式,即进程所发送消息的长度是可变的。系统在
处理和存储变长消息时,须付出更多的开销,但方便了用户。
这两种消息格式各有其优缺点,在很多系统中同时都使用的。
3.进程同步方式
(1) 发送进程阻塞、接收进程阻塞。
发送进程和接收进程之间无缓冲,且进程之间紧密同步时,两进程平时处于阻塞状态,直到有消息传递时。
(2)发送进程不阻塞、接收进程阻塞。
发送进程可以发送多个消息,接收进程平时阻塞,直到发送进
程发来消息时被唤醒。
如:打印进程平时处于阻塞状态,直到发送进程发来打印消息
时被唤醒;处理完后,若无新请求,又阻塞。
(3)发送进程和接收进程均不阻塞。
这是常见的进程同步形式。发送进程和接收进程都忙于自己
的事情,仅当发生某事件无法继续执行时才阻塞。
如:多缓冲区的生产者消费者问题;只有缓冲区满时,生产
者才阻塞:只有缓冲区空时,消费者才阻塞。
消息缓冲队列通信机制
1.消息缓冲队列通信机制中的数据结构
(1) 消息缓冲区。在消息缓冲队列通信方式中,主要利用的数据结构是
消息缓冲区。它可描述如下:
type message buffer=record
sender;发送者进程标识符
size;消息长度
text;消息正文
next;指向下一个消息缓冲区的指针
end
(2) PCB中有关通信的数据项。
PCB中应增加的数据项可描述如下:
type processcontrol block=record

mq;消息队列队首指针
mutex;消息队列互斥信号量
sm;消息队列资源信号量
end
2.发送原语
(1) 发送进程先在自己的内存空间,设置一发送区a,把待发送的消息正文、发送进程标识符、消息长度等信息填入其中,然后调用发送原语,把消息发送给接收进程。
(2)发送原语根据发送区a中所设置的消息长度a. size来申请一 缓冲区i,把发送区a中的信息复制到缓冲区i中。
(3)先获得接收进程的内部标识符j,然后将i挂在j. mq上。
在这里插入图片描述
3.接收原语
接收进程调用接收原语receive (b),从自己的消息队列mq
中摘下第一个消息缓冲区i,并将其中的数据复制到以b为首址的
指定消息接收区内。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值