精华内容
下载资源
问答
  • Linux系统提供了一些进程间通信方式,例如,共享内存,管道,信号,socket,消息队列等。除此之外,各种平台依据自己的特色,也会提供一些或封装一些系统调用,作为应用程序接口(API),向开发者服务,从而降低在进程...

    进程间通信,即IPC,InterProcess Communication,在不同的进程间进行数据的传递或交换。Linux系统提供了一些进程间通信方式,例如,共享内存,管道,信号,socket,消息队列等。除此之外,各种平台依据自己的特色,也会提供一些或封装一些系统调用,作为应用程序接口(API),向开发者服务,从而降低在进程间通信处理的难度。例如,Android中的binder机制。

    一. UNIX/Linux常见的进程间通信方式方式:

    1.管道: 管道分为匿名管道(pipe)和命名管道(FIFO)。

    (1)匿名管道(pipe):

    是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系一般指的是父子关系。可以简单地以特殊的文件对待,对于它的读写可以使用普通的read、write 等函数。

    (2)命名管道(FIFO):

    可以在无关的进程之间交换数据。

    FIFO是一种文件类型,有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

    2.信号量:信号量是一个计数器,可以用来控制多个线程对共享资源的访问。

    3.信号: 信号是最古老的一种进程间通信方式。用于通知一个或多个进程异步事件的发生,例如,键盘某键被按下,计时器时间到。

    4.消息队列: 消息队列是消息的链表,存放在内核中,并由消息队列标识符标识。消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。所以,需要程序员自己去进行清除。

    5.共享内存: 简单来说,就是被多个进程共享的内存。共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程可以共同使用。

    6.套接字(Socket): Socket,即套接字,是一种通信机制,主要用于客户/服务器之间的通信。凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行也可以跨网络进行。几乎所有的网络通信都是基于Socket的。

    二. Android中的binder机制:

    Binder是Android系统进程间通信(IPC)方式之一,它有如下优点:

    1.性能方面:

    在移动设备上(性能受限制的设备,比如要省电),广泛地使用跨进程通信对通信机制的性能有严格的要求,Binder相对出传统的Socket方式,更加高效。Binder数据拷贝只需要一次,而管道、消息队列、Socket都需要2次,共享内存方式一次内存拷贝都不需要,但实现方式又比较复杂。

    2.安全方面:

    传统IPC的接收方无法获得对方进程可靠的UID和PID(用户ID进程ID),从而无法鉴别对方身份。Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志。其实Binder机制主要是在本机内进行跨进程通信,而socket等IPC方式主要是用于跨网络的通信手段,因而socket不能限制了入口和出口,所以从使用场景来看,socket给用户提供的使用范围更广,而binder由于为了保证它的数据安全性,必须限制于android系统的机子中,而且在内核中就已经对UID进行了验证。

    3.易用性方面:

    Binder机制提供了一系列API,方便程序员进行应用程序的开发。程序员不必要关心底层的通信机制,而只需要关心自己的应用的业务逻辑即可完成进程间的通信,大大降低了开发者学习的难度,提高了开发效率。

    Binder的初始化(附图):

    ee1b207dde05e406862a593f3d340d7a.png

    binder初始化之service_manager.c

    5618d15db6d6e0c67cf8d4cee0f2cfe6.png

    binder初始化之binder.c

    展开全文
  • 进程通信方式

    2020-05-25 10:02:19
    进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。

     

    进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。

    这里总结下,进程间的通信方式有:

    1、管道

    2、信号量

    3、消息队列

    4、共享内存

    5、Socket

    1、管道

    1)普通管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

    主要特点:

    1. 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
    2. 它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
    3. 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

     

    2)命名管道FIFO: 命名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。FIFO的通信方式类似于在进程中使用文件来传输数据,只不过FIFO类型文件同时具有管道的特性。在数据读出时,FIFO管道中同时清除数据,并且“先进先出”。

    1. FIFO可以在无关的进程之间交换数据,与无名管道不同。
    2. FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

    2、信号量( semophore )

    信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

    1. 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
    2. 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
    3. 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
    4. 支持信号量组。

    3、消息队列( message queue )

    消息队列是消息的链表,存放在内核中,并由消息队列标识符(即队列ID)标识。

    消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。

    使用消息队列进行进程间通信,可能会受到数据块最大长度的限制约束等,这也是这种通信方式的缺点。如果频繁的发生进程间的通信行为,那么进程需要频繁地读取队列中的数据到内存,相当于间接地从一个进程拷贝到另一个进程,这需要花费时间。

    1. 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
    2. 消息队列独立于发送于接收进程。进程终止时,消息队列及其内容并不会被删除。
    3. 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。

    4、共享内存( shared memory )

    共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。

    1. 共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。它是针对其他进程间通信方式运行效率低而专门设计的。
    2. 因为多个进程可以同时操作,所以需要进行同步。
    3. 信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。

    5、套接字( socket )

    是支持TCP/IP协议的一种基本操作单元,主要用于不同主机的进程之间进行客户端和服务器的通信,用相关函数来完成。

     

     

    展开全文
  • 进程间通信方式总结

    千次阅读 2016-07-28 01:15:57
    而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system ...

    linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。

    而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。Linux则把两者继承了下来,如图示:

    这里写图片描述
    1.管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

    2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);

    3.报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

    4.共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
    信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

    5.套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

    管道的详细介绍

    一个原始的IPC方式是所有的进程通过一个文件交流。比如我在纸(文件)上写下我的名字和年纪。另一个人读这张纸,会知道我的名字和年纪。他也可以在同一张纸上写下他的信息,而当我读这张纸的话,同样也可以知道别人的信息。但是,由于硬盘读写比较慢,所以这个方式效率很低。那么,我们是否可以将这张纸放入内存中以提高读写速度呢?

    在Linux文本流中,我们已经讲解了如何在shell中使用管道连接多个进程。

    同样,许多编程语言中,也有一些命令用以实现类似的机制,比如在Python子进程中使用Popen和PIPE,在C语言中也有popen库函数来实现管道 (shell中的管道就是根据此编写的)。管道是由内核管理的一个缓冲区(buffer),相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。

    参考:
    http://www.cnblogs.com/vamei/archive/2012/10/10/2715398.html
    https://www.ibm.com/developerworks/cn/linux/l-ipc/

    展开全文
  • 进程通信:是操作系统为用户提供的进程间通信方式接口。 进程难道自己不能通信吗? 不能。因为每个进程都有自己的虚拟地址空间,通过页表映射到物理内存中,并且在页表中进行内存访问控制,因此它是没办法访问...

    进程间通信:(IPC)

    进程间通信:是操作系统为用户提供的进程间通信方式及接口。
    进程间难道自己不能通信吗?
    不能。因为每个进程都有自己的虚拟地址空间,通过页表映射到物理内存中,并且在页表中进行内存访问控制,因此它是没办法访问到其他进程的物理内存的,它访问的都是自己的虚拟地址空间,因此进程间无法直接通信。因此需要操作系统来提供进程间通信方式,并且因为通信场景不同,提供的方式也有多种
    通信的本质:
    双方拥有共同的访问空间
    进程间通信是干什么的?
    进程的独立性(都有自己的虚拟地址空间)—提供一个公共的媒介
    是干什么的:数据传输、数据共享、进程控制、时间通知。正因为有不同的应用场景(需求)因此操作系统也提供了多种不同的进程间的通信方式
    进程间通信方式:
    继承于unix而来的管道,有4种通信的方式:
    1)管道:用于进程间数据传输
    2)共享内存:用于进程间数据共享
    3)信号量:实现进程的同步与互斥
    4)消息队列:数据块传输
    管道:(传输数据资源)只要大家都能访问到它就可以通信
    其实就是内存中的一块缓冲区,半双工通信(提供双向选择,但是只能单向传输);管道创建成功后,返回文件描述符作为句柄,有两个,一个用于读入数据(fdo),一个用于写入数据(fdi)

    展开全文
  • 进程间通信方式

    2017-11-29 22:23:10
    linux下的进程通信手段基本上是从Unix平台上的...前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进
  • linux下的进程通信手段基本上是从Unix平台上的进程...前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)...
  • 【进程间通信方式

    2017-09-23 22:50:33
    进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为...
  • 而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system ...
  • 序 linux下的进程通信手段基本上是从Unix平台上的...前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket
  • 目录简介常用的进程间通信方式 简介 linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD,在进程通信方面的侧重点有所不同。前者...
  • 进程间通信方式预习2

    2017-11-30 14:38:56
    1.接口mmap()的使用方法 ...Mmap()系统调用并不完全是用于共享内存设计的,它本身提供了不同于一般对普通文件的访问形式,进程可以像读写内存一样对普通文件的操作,而posix或系统v的共享内存ipc则纯粹用
  • Bundle实现了Parcelable接口,可以在不同进程传递,在Bundle中附加数据,通过intent可以由一个进程的组件启动另一个进程的组件。 2 使用文件 一个进程在文件中写入数据,其他进程再读取(涉及到写操作,线程要...
  • 进程间通信

    2018-08-27 13:01:27
    进程间通信 进程间通信 为什么要通信(重点) ...一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并能够相互传递交换信息 为什么要通信(重点) 数据传输:一个进程需要将...
  • 进程间通信

    2018-12-11 19:46:41
    进程通信(IPC): 什么是进程通信: 为什么要进程通信:大型项目模块化,协同运行...操作系统因为提供进程通信的使用场景有所不同,因此提供的进程间通信方式也有很多种,各自有各自的特点; 管道(匿名管道/命名...
  • Linux之进程通信

    2020-04-16 21:35:09
    进程通信在实际项目中多多少少都会使用到,最常用的无名管道,有名管道,消息队列,信号,信号量,共享内存等进程通信方式。其实后面网络通信套字节 socket的方式也可以归为进程通行。 这些进程通信相关概念和...
  • 文章目录进程通信的类型共享存储器系统管道通信系统消息传递系统客户机-服务机系统消息传递通信的实现方式直接消息传递系统信箱通信直接消息传递系统实例 进程间通信的意思就是在不同进程之间传递信息。它是一组编程...
  •  我们知道,Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Proce...
  • 进程间通信简介

    2018-04-09 20:37:22
    进程间通信IPC(interprocess communication):描述的是运行在某个操作系统之上的不同进程各种消息传递方式。POSIX:可移植操作系统接口(portable operation system interface),由电气与电子工程师学会IEEE开发的...
  • 进程间通信

    千次阅读 2004-11-22 16:04:00
    COM/DCOM:通过COM系统的代理存根方式进行进程数据交换,但只能够表现在对接口函数的调用时传送数据,通过DCOM可以在不同主机传送数据。 Dynamic Data Exchange (DDE):在16位时代常使用的方式。 File Mapp
  • 进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。 如何开启多进程 正常情况下,在Android中多进程是指一个应用...
  • 进程的通信方式

    千次阅读 2018-05-05 19:08:46
    linux下的进程通信手段基本上是从Unix平台上的...前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)...
  • 不同通信方式应对不同应用场景:管道、共享内存、消息队列、信号量 管道: 实现数据资源传输,本质:内核中的一块缓冲区,通信的本质是访问同一块缓冲区 虚拟地址空间分为内核空间和用户空间,进程只能访问用户空间...
  • socket也是一种进程的通信机制,不过它与其他通信方式主要的区别是:它可以实现不同主机的进程通信。一个套接口可以看做是进程通信的端点(endpoint),每个套接口的名字是唯一的;其他进程可以访问,连接和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 381
精华内容 152
关键字:

不同系统间接口通信方式