进程间通信

本文介绍了进程间通信(IPC)的基本概念及其重要性。探讨了不同IPC机制如消息、邮箱、管道、共享内存和共享文件的特点及适用场景。重点分析了消息机制的工作原理,并通过Lenix系统的实现案例解释了如何创建和使用消息对象。
进程间通信(IPC)是指两个以上的进程之间传递数据。前面提到的同步问题实际上就属于进程间通信的问题,只是其数据量很小。进程间通信的数据量有大有小,根据不同的数据量,各种操作系统都会提供与其相适应的方法。常见的方法有消息、邮箱、管道、共享内存、共享文件等等。其中消息、邮箱、管道都属于先进先出工作方式,而共享内存、共享文件则可以随机访问。同步机制的实现大多是采用共享内存的方式。

进程间通信都会涉及同步问题,所以在实际上是出现了用进程间通信来解决进程间通信的问题,出现了循环引用。不过不要紧,进程间通信还有一个粒度的问题,同步问题大多收拾采用系统能处理的最小单位的空间来实现,一般都是一个字节,或者一个机器字长的空间,以保证单条机器指令可以完成操作。换个说法就是用小内存来控制大内存。

进程间通信最主要的一个方式就是保证同一时间内,只有一个进程能访问公共变量。简称为互斥访问。

其中消息、邮箱、管道的运行机制是相同的,都属于生产者-消费者的问题,只是在处理的数据量方面有区别,消息一般处理微小数据量的通信,例如几个字节;而邮箱则用于处理数据量较大的通信,例如几十个字节,还可以附带格式,而管道则是处理大数据量的通信,所以管道是不限制数据量的。

下面以消息为例说明进程间通信运行机制,并给出Lenix的实现。

通常的概念中,消息是直接传递给目标的,比如写个便签,简单的几句话,或者画个符号。从结构上来说,接受着首先要有一个地方可以提供给发送者,用以存放消息,比如一个篮子、或者口袋,稍大一点就变成邮箱了。

然后就是,消息一般只能是接受着才能看,但是任何人都可以向他发送消息,只要知道方消息的地方。

还有一点就是,在篮子或者口袋空的时候,接受者是取不到数据的,必须等待。而篮子或者口袋满的时候,发送者也不能发送消息,要么等待到篮子有空位,要么就直接把消息给扔了。

在具体的实现过程中,IPC都是采用了一个全局缓冲区,发送者向缓冲区写数据,接受者从缓冲区读数据。

Lenix消息机制。

要使用消息机制,首先要创建消息对象,Lenix对消息的使用做了一定的限制,只有创建者能接受消息。

要向接受者发送数据,首先要获得消息对象,Lenix提供了按消息对象名称查找的机制。

Lenix提供了两种消息发送机制,一种是传递,特点是必须发送成功,也就是如果消息缓冲区满的时候,发送者要等待到缓冲区可用,然后将消息发送成功后才返回。一种是投递,这种方式不一定确保成功,因为在缓冲区满的时候,并不等待,直接将消息丢弃,立即返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值