`

【Linux的高级应用编程】进程间的通信机制

 
阅读更多


进程间的通信机制

Sailor_forever sailing_9806@163.com 转载请注明

http://blog.csdn.net/sailor_8318/archive/2008/12/30/3658912.aspx

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。因为那些通信手段的效率太低了,而人们对进程间通信的要求是要有一定的实时性。

Linux间进程的通信机制来源颇多,其中,最初Unix IPC包括:管道、FIFO、信号;System V IPC包括:System V消息队列、System V信号灯、System V共享内存区;Posix IPC包括: Posix消息队列、Posix信号灯、Posix共享内存区。

1、管道pipe:管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。适用于生产者消费者模型,是一种单向的数据流,一个进程写入数据另外一个进程读取数据。管道基于文件系统,对管道的读写采用read及write系统调用。在最后一个访问管道的进程终止后,管道就被完全删。Pipe的不足之处在于无法打开已经存在的pipe,这样不便于任意两个进程实现共享,除非此管道由共同的祖先创建。

2、FIFO命名管道:克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道存在于目录树中,在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。

3、信号:信号是比较复杂的通信方式,用于通知接收进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;除了支持Unix早期信号语义函数signal外,还支持语义符合Posix.1标准的信号函数sigaction。

4、System V IPC:

IPC资源可以由任何进程共享,当需要访问资源时动态建立IPC数据结构,并作为一个IPC标识,进程间通过此标识访问共享资源。不足是关键字KEY_T使用了内核标识,占用了内核资源,而且只能被显式删除

信号灯Semaphores:用于各个进程间的互斥,比内核信号量更为复杂,其为一个或者多个信号量的集合而非象内核一样只有一个值,另外其具备失效安全机制,防止进程异常死亡时无法释放信号量。操作顺序为:semget、semop、semop、semctl。

消息messages:一个进程将消息发往消息队列中,另外一个进程从中读取,读取之后内核将销毁此消息,因此一个消息只可能被一个进程接收。消息由一个公用头和可变长度的数据组成。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺

共享内存shared memory:多个进程可以将资源放在共享内存中进行共享,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

5、Socket套接字:允许同一个甚至是不同主机上的进程进行通信,如X windows即是利用socket进行通信。

参考文献:

UNIX环境高级编程,作者:W.Richard Stevens,译者:尤晋元等,机械工业出版社

linux内核源代码情景分析(上、下),毛德操、胡希明著,浙江大学出版社

UNIX网络编程第二卷:进程间通信,作者:W.Richard Stevens,译者:杨继张,清华大学出版社。

深入理解Linux内核 第19章进程通信

深刻理解Linux进程间通信(IPC)

http://blog.chinaunix.net/u/786/showart.php?id=16443

Linux系统下进程间通信主要几种手段


分享到:
评论

相关推荐

    LINUX系统编程之进程间通信机制

    LINUX系统编程下进程间通信机制,pdf格式,对理解进程间的通信很重要

    Linux高级编程(无加密版)

    第11章 进程间通信 第12章 PCI 第13章 中断和中断处理 第14章 设备驱动程序 第15章 文件系统 第16章 网络系统 第17章 系统内核机制 第四篇 Linux系统高级编程 第18章 Linux内核模块编程 第19章 有关进程通信的编程 ...

    操作系统实验二 进程通信机制的应用

    操作系统实验二:进程通信机制的应用实验报告。加深对于进程并发执行概念的理解。实践并发进/线程的创 建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程...

    Linux高级程序设计PPT

    08第08章 进程间通信-管道和信号.ppt 09第09章 System V进程间通信.ppt 10第10章 Linux多线程编程.ppt 11第11章 线程间同步机制.ppt 12第12章 Linux socket网络编程基础 .ppt 13第13章 网络编程工具介绍.ppt ...

    操作系统进程间通信实验

    通过对进程间通信同步/互斥问题的编程实现,加深理解信号量和 P、V 操作的原理; 对 Windows 或 Linux 涉及的几种互斥、同步机制有更进一步的了解;熟悉 Windows 或 Linux 中定义的与互斥、同步有关的函数。

    Linux高级程序设计原代码 杨宗德等主编

    详细介绍了Linux下C语言开发环境、C语言开发工具、内存管理、ANSI C文件I/O管理、POSIX文件I/O管理、文件及目录管理、进程管理、UNIX进程间通信机制、System V进程间通信、多线程编程、线程间通信机制和Linux Socket...

    Linux高级程序设计

    详细介绍了Linux下C语言开发环境、C语言开发工具、内存管理、ANSI C文件I/O管理、POSIX文件I/O管理、文件及目录管理、进程管理、 UNIX进程间通信机制、System V进程间通信、多线程编程、线程间通信机制和Linux ...

    LINUX高级程序设计(中文第二版)杨宗德 (1)

    详细介绍了linux系统下编程环境及编程工具、文件管理(文件类型、ansi以及posix标准下文件读写操作)、进程管理(创建、退出、执行、等待、属性控制)、进程间通信(管道、消息队列、共享内存)、进程间同步机制(信号量)、...

    LINUX高级程序设计(中文第二版)杨宗德 (2)end

    详细介绍了linux系统下编程环境及编程工具、文件管理(文件类型、ansi以及posix标准下文件读写操作)、进程管理(创建、退出、执行、等待、属性控制)、进程间通信(管道、消息队列、共享内存)、进程间同步机制(信号量)、...

    史上最强的嵌入式底层驱动开发课程 Linux系统开发+Linux高级程序+主板开发+ARM等

    │ ├53 - Linux高级程序_进程间通信_Semaphore1.mp4 │ ├54 - Linux高级程序_进程间通信_Semaphore2.avi │ ├55 - 线程_Thread1.avi │ ├56 - 线程_Thread2.mp4 │ ├57 - 线程_Thread3.mp4 │ ├58 - 网络编程_...

    精通LINUX下的C编程(配套光盘)第三部分

    6.1 进程间通信机制概述 6.2 信号处理 6.3 管道 6.4 System V IPC机制 6.5 小结 习题 第7章 线程操作 7.1 线程概述 7.2 线程管理 7.3 小结 习题 第8章 网络编程 8.1 概述 8.2 TCP/IP基础 8.3 BSD套接...

    精通LINUX下的C编程(配套光盘)第二部分

    6.1 进程间通信机制概述 6.2 信号处理 6.3 管道 6.4 System V IPC机制 6.5 小结 习题 第7章 线程操作 7.1 线程概述 7.2 线程管理 7.3 小结 习题 第8章 网络编程 8.1 概述 8.2 TCP/IP基础 8.3 BSD套接...

    Linux高级程序设计 (不完整版只到11.5.2章节)

    详细介绍了Linux系统下编程环境及编程工具、文件管理(文件类型、ANSI以及POSIX标准下文件读写操作)、进程管理(创建、退出、执行、等待、属性控制)、进程间通信(管道、消息队列、共享内存)、进程间同步机制...

    精通LINUX下的C编程(配套光盘)第一部分

    6.1 进程间通信机制概述 6.2 信号处理 6.3 管道 6.4 System V IPC机制 6.5 小结 习题 第7章 线程操作 7.1 线程概述 7.2 线程管理 7.3 小结 习题 第8章 网络编程 8.1 概述 8.2 TCP/IP基础 8.3 BSD套接...

    Linux编程--Linux内核

    4.3.1 System V的进程间通信机制 44 4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥...

    Linux编程从入门到精通.rar

    第4章 进程间通信机制 第5章 PCI 第6章 中断处理与设备驱动程序 第7章 文件系统 第8章 网络 第9章 内核机制与模块 第10章 处理器 第12章 Linux数据结构 ———————————————————————— 第二部分 ...

    《linux编程技术》-实验4.docx

    1.掌握管道、信号、共享内存、消息队列等进程间通信机制; 2.能够利进程间通信机制求解一些常见问题。 二、实验预备知识 1.阅读并掌握C语言基本语法,操作。 2.熟悉Linux常用命令及使用方法。

    进程间通信(华工操作系统)

    实验 4:进程间通信(IPC) 实验目的 了解IPC通信中的信号、管道、消息、共享存储区的通信原理和基本技术 掌握linux环境中构造这些通信机制的方法和步骤; 熟悉在实现通信中使用的系统调用和编程方式,以及这类程序...

    嵌入式Linux应用程序开发标准教程(第2版全)

    接着系统地讲解了嵌入式Linux的环境搭建,以及嵌入式Linux的I/O与文件系统的开发、进程控制开发、进程间通信开发、网络应用开发、基于中断的开发、设备驱动程序的开发以及嵌入式图形界面的开发等,并且还安排了丰富...

    Linux进程间通信——使用流套接字

    前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程。通常我们使用socket进行网络编程,这里将会...

Global site tag (gtag.js) - Google Analytics