IPC 机制简介

概述

在Unix早期发展中,做出重大贡献的两大主力Bell实验室和伯克利大学(BSD)在IPC(InterProcess Communication)方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“System V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。大牛人W.Richard Stevens 著有的《UNIX Network Programming》经典大作,含两卷:卷一就是socket网络通信,卷二是单机的IPC。

POSIX是IEEE为要在各种UNIX操作系统上运行的软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由开源领袖RMS应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统界面)的缩写,而X则表明其对Unix API的传承。Linux基本上逐步实现了POSIX兼容,但并没有参加正式的POSIX认证。

从上面可以看出,Sys V IPC和POSIX IPC可以认为是对同一个东西的不同实现而已。两者有相同的IPC工具——信号量、共享内存、消息队列,虽然Sys V和POSIX提供的接口有些差异,但基本概念是一致的。

需要注意的是,POSIX提供了消息队列的通知机制(参考 mq_notify()函数),而Sys V不提供类似的功能。相对而言,Sys V IPC 的历史更为悠久,并且先后在所有的平台上都得到实现,接口比较复杂。POSIX IPC 是在Sys V IPC 出现很长一段时间以后才被设计出来的,这使得它有机会吸收Sys V的优缺点,是以POSIX在设计上能够超越它的前辈,并提供了更为简洁、对程序员也更有爱的接口。鉴于Sys V IPC年龄太大,我以为POSIX IPC API才代表未来的趋势。

进程间信息共享方式:

1、  左边的两个进程共享存留于文件系统中某个文件上的某些信息,为访问这些信息,每个进程都得穿越内核(例如read、write、lseek等)。

2、  中间两个进程共享驻留于内核中的某些信息,例如pipe、消息队列、信号量,访问共享信息的每次操作涉及对内核的一次系统调用。

3、  右边的两个进程有一个双方都能访问的共享内存区,每个进程可以不经过内核直接访问它,但共享该内存区的进程需要某种形式的同步。

IPC对象的持续性:

1、  随进程持续,IPC对象一直存在到打开该对象的最后一个进程关闭该对象为止,例如pipe和fifo;

2、  随内核持续,IPC对象一直存在到内核重新自举或显式删除该IPC对象为止,例如信号量、消息队列、共享内存;

3、  随文件系统持续,IPC对象一直存在到显式删除该对象为止;

IPC对象的标识符

当两个或多个无亲缘关系的进程使用某种类型的IPC对象来交换信息时,该IPC对象必须有一个名字,这样其中一个进程可以创建该IPC对象,其余进程则可以指定同一个IPC对象。对于一种给定的IPC类型,其可能的名字的集合称为它的name space。

IPC类型

持续性

name space

IPC打开后的标识符

pipe

fifo

随进程

(无名)

路径名

描述符

TCP socket

UPD socket

Unix socket

IP + port

IP + port

路径名

POSIX互斥锁

POSIX条件变量

POSIX读写锁

fcntl记录锁

(无名)

(无名)

(无名)

路径名

pthread_mutex_t指针

pthread_cond_t指针

pthread_rwlock_t指针

描述符

POSIX消息队列

POSIX有名信号量

POSIX基于内存信号量

POSIX共享内存

随内核

POSIX IPC名字

POSIX IPC名字

(无名)

POSIX IPC名字

mqd_t值

sem_t指针

sem_t指针

描述符

System V消息队列

System V信号量

System V共享内存

key_t键

key_t键

key_t键

System V IPC标识符


POSIX IPC

消息队列

信号量

共享内存

Include

<mqueue.h

<sys/sem.h>

<sys/shm.h>

创建或打开IPC

mq_open

mq_close

mq_unlink

sem_open

sem_close

sem_unlink

shm_open

shm_unlink

sem_init

sem_destroy

控制IPC

mq_getattr

mq_setattr

ftruncate

fstat

IPC操作函数

mq_send

mq_receive

mq_notify

sem_wait

sem_trywait

sem_post

sem_getvalue

mmap

munmap


SystemV IPC

消息队列

信号量

共享内存

Include

<sys/msg.h>

<sys/sem.h>

<sys/shm.h>

创建或打开IPC

msgget

semget

shmget

控制IPC

msgctl

semctl

shmctl

IPC操作函数

msgsnd

msgrcv

semop

shmat

shmdt


RPC

本地过程调用(local procedure call),就是被调用的过程(函数)与调用过程处于同一个进程中,这也是我们所熟悉的函数调用方式。

远程过程调用(remote procedure call, RPC),被调用过程和调用过程处于不同的进程中。通常称调用者为Client,被调用的过程为Server。

RPC又分两种情况:

1、单台主机上的RPC(门调用),即调用者和被调用者在同一台主机上面;

2、主机间的PRC,需要借助网络传输;

IPC 机制简介的更多相关文章

  1. 【Android - IPC】之Binder机制简介

    参考资料: 1.<Android开发艺术探索>第二章2.3.3 Binder 2.[Android Binder设计与实现-设计篇] 3.[Android Binder机制介绍] 1. 什 ...

  2. Android之IPC机制

    Android IPC简介 任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来实现IPC,还 ...

  3. Android的IPC机制(一)——AIDL的使用

    综述 IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互.不同的操作系统都有他们自己的一套IPC机制.例如在Linux操作系统中可以通过管道. ...

  4. 《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制

    2.1 Android IPC简介 (1)任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来 ...

  5. Android中的IPC机制

    Android IPC简介 IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程.那么什么是进程,什么是线程,进程 ...

  6. Android开发艺术探索——第二章:IPC机制(上)

    Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化 ...

  7. linux各种IPC机制(进程通信)

    linux各种IPC机制 (2011-07-08 16:58:35)      原文地址:linux各种IPC机制(转)作者:jianpengliu 原帖发表在IBM的developerworks网站 ...

  8. [转帖]linux各种IPC机制

    linux各种IPC机制 docker中的资源隔离,一种就是IPC的隔离.IPC是进程间通信. 下面的文章转载自https://blog.csdn.net/yyq_9623/article/detai ...

  9. Anciroid的IPC机制-Binder概述

    在Linux系统中,是以进程为单位分配和管理资源的.出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭.但是,在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项 ...

随机推荐

  1. U3D physics总结

    物理系统基于collider, 没有collider的物体不会发生任何主动和被动的物理交互,也不会产生trigger相关消息. 当且仅当A和B都有碰撞体时,两者才有可能发生交互,才有可能产生trigg ...

  2. Google Map API key 获取方法

    要想使用google map api 必须从google网站上获取key之后才有权限使用,但是要想申请key必须要有证明书,也就是所谓的MD5.下面一步一步来说明: 步骤1: 如果你使用的是eclip ...

  3. HTML5 IE兼容问题

    最近,为公司做产品的时候用到了HTML5,用IE11打开的时候出现了界面乱或者加载js错误的问题. IE10 or IE11 :Browser Mode is IE10 .Document Mode: ...

  4. 九幽史程博:助力国内开发者借Win10东风出海

    微软Biuld2016大会刚刚结束,会议上微软CEO纳德拉Show出的一大波黑科技,又一次让软粉们心情为之振奋,信仰充值爆棚! 尽管过去一年微软的Win10 Mobile表现不尽如人意,可是凭借PC端 ...

  5. 『片段』OracleHelper (支持 多条SQL语句)

    C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...

  6. sql server 2008 基础知识

    一.配置管理器   1.管理服务 使用配置管理器可以启动.停止.重新启动.继续或暂停服务. 服务器和客户端网络协议 2.SQLSMS 简介:SQLSMS是一个集成环境,用于访问.配置.管理和开发SQL ...

  7. 第三章:Javascript类型、值和变量。

    计算机程序的运行需要对值(value)比如数字3.14或者文本"hello world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特 ...

  8. 【Moqui业务逻辑翻译系列】--UBPL index

    h2. [UBPL Introduction] ubpl介绍h2. [Actor Definitions] 行为定义h2. General Business Process Stories 通常的商业 ...

  9. ~~圣诞节到啦, canvas雪花效果, 漂亮到简直没天理啊~~

    看到coding的主界面有雪花, 原来,哇,  真漂亮, 一看源代码, 哦了个去, angular写的, 压力好大, 分析分析分析分析.... 然后就写成jQ插件的样子给大家用了. 在线预览的页面是: ...

  10. git 的简单使用方法

    git 的简单使用方法1. 服务器 安装完成2. ssh 中的账号创建完成3. 创建 ssh 账号,会在 ssh 的安装目录下的home 目录里面,多了用户家目录4. 进入该目录 ,创建一个新的文件夹 ...