进程间通信

来源:互联网 发布:火烈鸟彩妆 知乎 编辑:程序博客网 时间:2024/05/22 05:53

    进程间通信分为两大类即低级通信 高级通信

   低级通信 是指 进程间只能传递很少量的控制信息,一般来说只有一个字节或一个整型变量,例如,信号量和信号就是低级通信方式。
   信号量:记录当前可用资源的数量(如饭店空闲桌子的数量。)
   信号量由操作系统来维护,用户进程只能通过初始化和两个标准原语 P原语V原语 访问它。在初始化的时候,可以指定一个非负整数值来表示空闲资源的个数;原语是就是一个函数,用来实现某个特定的操作,是操作系统内核的一个组成部分,所以必须在管态下执行且执行过程中不会被中断所打断。
利用信号量对临界资源互斥访问的过程:首先定义一个信号量mutex,并初始化为1.表示在任何时刻,最多允许一个进程进入临界区,然后,每个进程要进入临界区时,要调用一个P原语,判断当前能否进入,若能,则P原语结束,进入临界区,若不能,该进程就会被阻塞起来。在退出临界区时,需要调用V原语句来释放资源。
高级通信: 指 进程之间可以传送任意数量的数据,一般不是一个或几个字节而是一大块数据,如一个文件或者一个缓冲区的内容。这种方式主要包括 共享内存、消息传递、管道。
下面详细介绍以上几种高级通信方式。
(1)共享内存:现代操作系统普遍采用虚拟存储管理,每个进程都有自己的虚拟地址空间,操作系统可以把这些虚拟的地址空间映射到物理内存。共享内存就是操作系统提供一些API函数,允许多个进程吧自己地址空间中的某些部分共享出来,映射到相同的一块物理内存区域,就可以实现进程间的信息交流和共享,如果一个进程对这块区域内容进行了修改,另一个进程立即就能看到修改后的结果。
(2)消息传递:所谓消息就是 若干的数据位所组成的一段信息。消息传递就是由操作系统调用发送和接收操作实现进程之间信息的交换。如果两个进程要进行通信首先在两个进程间建立一个通信链路然后调用发送和接受操作来交换消息。

(3)管道 :以文件系统为基础,管道就是一个共享文件,用于要同信的两个进程之间的数据通信,进程对管道的读写操作就相当于对文件的write/read,而且数据流的长度、格式没有限制。管道通信的过程:发送进程可以不断地从管道一段写入数据流,接受进程在需要的时候可从管道的另一端按先进先出的顺序读取数据,这样就实现了两个进程间的通信。另外,在对管道文件进行读写操作的过程中,在发送进程和接受进程之间也要进行正确的同步和互斥,以确保通信的正确性。

关于共享内存系统:

  采用共享内存的进程间通信需要通信进程建立共享内存区域,进程通过向此区域读写或交换信息。共享内存是解决生产者与消费者问题方法中的一种。为了允许生产者进程和消费者进程能并发执行,必须在共享内存区域有一个缓冲来被生产者填充并且被消费者使用。
   缓冲分为无限缓冲和有限缓冲。无限缓冲顾名思义,就是对大小没有限制,因此生产者总是可以产生新项,而消费者有时候却需要等待新项的产生。有限缓冲就是缓冲大小固定,如果缓冲为空,那么消费者必须等待,如果缓冲为满,那么生产者必须等待。

关于消息传递系统:

  消息传递系统通过报文的方式来传递消息,消息传递系统的接收与发送有如下几种操作方法:
1、直接或者间接通信
  直接就是一个发送端,一个接收端,每对进程间只有一条线路。间接就是发送端发送到第三方邮箱(或者称为对象)中,再由第三端发到接收端。对于间接通信,一个进程可能通过许多不同的邮箱与其他进程通信,但两个进程仅在其共享至少一个邮箱时可以相互通信。
2、同步与异步通信
 同步与异步也称为阻塞与非阻塞
发送者阻塞:发送进程阻塞,直到消息被接收进程或者邮箱接收。
发送者非阻塞:发送进程发送消息并且继续操作。
接收者阻塞:接受者阻塞,直到有消息可用。
接收者非阻塞:接收者收到一个有效消息或者空消息。
3、缓冲
  零容量:线路中不能有任何信息处于等待,因此必须阻塞发送,直到接收者接收信息
  有限容量:就是缓冲大小固定,如果缓冲为空,那么消费者必须等待,如果缓冲为满,那么生产者必须等待。
   无限容量:就是对大小没有限制,因此生产者总是可以产生新项,而消费者有时候却需要等待新项的产生。

0 0
原创粉丝点击