为什么android在linux内核中引入binder?

np8igboo  于 2022-12-21  发布在  Android
关注(0)|答案(1)|浏览(115)

我正在努力学习android(linux)内核,我知道android需要非常快的(零拷贝)IPC,但我仍然不明白为什么需要binder。
unix socket + mmap /dev/shm文件也能做同样的事情吗?
让我们假设使用dbus,但是为了实现零拷贝,在tmpfs(例如/dev/shm)中创建并打开文件,删除它(这样其他进程可能会意外地打开它),将文件描述符发送给其他进程并对其进行mmap。
编辑:除了在tmpfs中创建文件,您还可以使用shm_open

mmvthczy

mmvthczy1#

创建新型粘结剂粘结机理的原因主要有三
1.复杂性
1.业绩
1.安全
复杂性--在智能手机平台,尤其是Android系统中,为了给应用程序开发者提供多种功能,这种通信方式无处不在,比如媒体播放、视频和音频捕获,以及各种让手机变得更智能的传感器(加速度、方向、温度、亮度等)都由不同的服务器管理,并且应用程序只能通过作为客户端与这些服务器建立连接来使用这些服务
示例:MediaPlayBack-媒体播放、视频和音频捕获以及各种传感器,使手机更加智能(加速度、方向、温度、亮度等)都由不同的服务器管理,应用程序只需以客户端的身份与这些服务器建立连接,就可以使用这些服务,开发令人眼花缭乱的功能只需要花费很少的时间和精力,客户端的广泛采用-服务器方法对进程间通信(IPC)机制提出了挑战
性能--socket作为通用接口,传输效率低,开销大,主要用于跨网络的进程间通信和机器上进程间的低速通信,消息队列和流水线采用存储转发的方式,即先将数据从发送方缓冲区复制到内核打开的缓冲区,然后从内核缓冲区复制到接收方缓冲区,复制过程至少有两个,共享内存虽然不需要复制,但控制复杂,使用困难。
安全性-Android作为一个开放平台,开发者众多,来源广泛,因此保证智能终端的安全性非常重要,传统的IPC没有任何安全措施,完全依靠上层协议来保证,首先传统IPC的接收方无法获得可靠的UID/PID对方进程的(用户ID/进程ID),因此无法识别对方的身份。
Android为每个安装的应用分配自己的UID,因此进程的UID是识别进程身份的重要标志,使用传统IPC,只有用户才能在数据包中填写UID/PID,但这不可靠,容易被恶意程序利用。
其次,传统的IPC接入点是开放的,无法建立私有通道。

    • 基于以上原因,Android需要建立新的IPC机制来满足系统对通信方式、传输性能和安全性的要求,这就是Binder**

相关问题