Linux和Android的IPC通信简介

2020-04-25  本文已影响0人  勇敢地追

1.Linux和Android的IPC机制种类

IPC全名为inter-Process Communication,含义为进程间通信,是指两个进程之间进行数据交换的过程。在Android和Linux中都有各自的IPC机制,这里分别来介绍下。

1.1 Linux中的IPC机制种类

Linux中提供了很多进程间通信机制,主要有管道(pipe)、信号(sinal)、信号量(semophore)、消息队列(Message)、共享内存(Share Memory)、套接字(Socket)等。

1.2 Android中的IPC机制

Android系统是基于Linux内核的,在Linux内核基础上,又拓展出了一些IPC机制。Android系统除了支持套接字,还支持序列化、Messenger、AIDL、Bundle、文件共享、ContentProvider、Binder等。

2.Linux和Binder的IPC通信原理

在讲到Linux的进程通信原理之前,我们需要先了解Liunx中的几个概念。


概念
2.1 Linux的IPC通信原理
Linux的IPC通信原理

内核程序在内核空间分配内存并开辟一块内核缓存区,发送进程通过copy_from_user函数将数据拷贝到到内核空间的缓冲区中。同样的,接收进程在接收数据时在自己的用户空间开辟一块内存缓存区,然后内核程序调用 copy_to_user() 函数将数据从内核缓存区拷贝到接收进程。这样数据发送进程和数据接收进程完成了一次数据传输,也就是一次进程间通信。
Linux的IPC通信原理有两个问题:

2.2 Binder的通信原理

Binder是基于内存映射来实现的,大致原理如下图:


Binder的通信原理

Binder通信的步骤如下

(PS:为啥需要两次映射?感觉一次就可以了)

3.Binder优势

从这四方面来看,Linux提供的大部分IPC机制根本无法和Binder相比较,而共享内存只在性能方面优于Binder,其他方面都劣于Binder,这些就是为什么Android要使用Binder来进行进程间通信,当然系统中并不是所有的进程通信都是采用了Binder,而是根据场景选择最合适的,比如Zygote进程与AMS通信使用的是Socket,Kill Process采用的是信号。

参考文章:https://www.jianshu.com/p/52e15875c81d

上一篇下一篇

猜你喜欢

热点阅读