linux内核注释-第9章IPC
- 桑蚕
-
276 次阅读
-
67 次下载
- 共 26 页(1.18 M)
-
2022-05-03 00:02:55
点此付费下载 ¥ 2 知币
无需注册也可下载,点击付费按钮在弹框页面选择 "扫码直接下载”
在线预览效果若不佳,推荐下载后阅读 建议在PC浏览器扫码下载
文档简介(最多显示3000字):
第9章SystemVIPC-137-第第9章章SystemⅤⅤIPCUnix从开发的早期就提供了管道的机制,管道在同一机器的两个进程间的双向通信方面工作的相当出色。后来,BSD(BerkeleySoftwareDevelopment)的Unix版本又提供了通用的套接字socket,它用来在不同机器的两个进程之间进行通信(或者是同一机器的)。UnixSystemV版本增加了被视为一体的三个机制,现在它们被统称为SystemVIPC。像管道一样,这些机制都可以用于同一机器上的进程间通信,不过与管道和套接字不同的是,SystemV的IPC特性使得同一机器上的许多进程之间都可以互相通信,而不是仅限于两个进程。而且,管道——不是套接字——还有一个更大的限制就是两个通信中的进程必须相关。它们必须有一个建立管道的共同祖先进程——通常情况下,一个进程是另一个的父进程,或者这两个都是为它们建立管道的父进程的子进程。SystemVIPC像套接字一样使得进程间通信(IPC)不需要有共同的继承关系,只需要一个经过协商的的协议。组成SystemVIPC的三个进程间通信机制是:消息队列、信号量和共享内存。消息队列消息队列SystemV的消息队列(messagequeues)是进程之间互相发送消息的一种异步(asynchronously)方式,在这种情形之下,发送方不必等待接收方检查它的消息——即在发送完消息后,发送方就可以从事其它工作了——而接收方也不必一直等待消息①。对消息进行编码和解码是发送者和接受者进程的工作;消息队列的执行并不会给它们特别的帮助。这就形成了一个实现起来相对比较简单的通用机制,尽管是以增加应用程序的复杂度为代价来获得这种简明性的。这里是一个可能发生在SMP机器上的简单的应用情景。运行在一个CPU上的调度程序把工作请求发送到一个特定的消息队列上。工作请求可能以各种形式出现:用来破译代码的一组密码、需要进行计算的在不规则图形里的象素范围、在一个原子系统里要更新的一部分空间,或者诸如此类的任务。与此同时,工作者进程在其它CPU上运行,只要它们空闲就从消息队列中检索消息,然后再把结果消息发送到另一个消息队列上去。这种体系结构很容易实现,而且假定选择好了每个消息中被请求工作的粒度,就能极大的提高机器中CPU的利用效率。(还要注意的是,因为调度进程可能不用做许多工作,所以调度进程的CPU上大部分时间也可以运行一个工作者进程。)以这种方式,消息队列可以被用作是远程过程调用(RPC)的一种低级形式。新消息总是加在队列的末尾,不过它们并不总是从排头移出;你将能够在本章中看到,消息可以从队列的任何地方被移出。在某个方面,消息队列与语音邮件类似:新消息总是在末尾,不过消息接收方可以从列表的中间接收(以及删除)消息。消息队列概述消息队列概述首先对消息队列进行介绍是因为它的实现最简单,不过它仍然体现出了几个所有三种①原文为:”thereceiverdoesn’thavetogotosleepifnomessagesarewaiting.”,直译是:如果没有消息正被等待,接收方也不必进入休眠。
评论
发表评论