Android Frameworks源码分析之Binder(一)---Binder概述

在Android系统中,进程间通信(IPC)用的是Binder机制。Binder在Android中起着非常重要的作用,几乎所有的服务都要涉及到Binder的通信。所以要想以后更好的看懂Android代码,弄懂Binder就显得格外重要,如果不彻底弄懂Binder, 后面的路会走的很辛苦!

所以从这篇文章开始,我们就开始分析Binder的设计和实现。

Binder是块难啃的骨头,涉及的东西很多,从内核驱动层,到Frameworks层,再到Java应用层都有Binder的身影。

在这篇文章中,我们先对Binder做一个概述,以便我们能从整体上对Binder有一个了解。

Android系统是基于Linux的,我们知道Linux提供了很多中IPC,那为什么还要在提供Binder呢?那是因为在手机资源比较紧张的情况下,Binder有以下几个优点:

第一,Binder采用了Client-Server方式来处理进程间通信。各个功能模块将各个功能封装在一个Server中,应用程序只需要作为Client与这些Server建立连接便可以使用这些服务。采用Client-Server方式就可以花很少的时间和精力就能实现很多很复杂的功能。

第二,Binder在传输性能上有优势。在Linux传统的IPC中,消息队列和管道是采用存储转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区中,至少要两次拷贝工程。而比较常用的空闲内存无需拷贝,但是控制比较复杂,使用起来不太方便. 而Binder只需要一次数据拷贝,只需要将数据拷贝到内核缓存区就可以,而不需要在拷贝到接收方缓存区,这样就提高了效率。在以后的文章中,我们能明白Binder是如何做到这一点的。

第三,安全性。Android为每个安装好的应用程序分配了自己的UID,进程的UID是鉴别进程身份的重要标志,Binder在通信的过程中可以为发送方添加UID/PID,从而可以进行安全检查,而传统的IPC没有任何安全措施,只能由用户在数据包中填入UID/PID, 但这样做是不可靠的,容易被恶意程序所利用。

如上所说,Binder使用Client-Server通信方式,所以Binder制定了Command-Reply协议来传输数据。Binder协议以命令+数据的方式来定义基本格式,使用ioctl(fd, cmd, arg)函数来实现交互。命令由参数cmd承载,数据由参数arg承载,arg是随cmd不同而不同。在后面分析Binder驱动的源码时,我们会看到详细的对各个cmd的分析。

Android BinderAndroid操作系统中的一个IPC(进程间通信)机制,用于实现进程之间的通信和数据传输。Binder源码主要位于frameworks/native目录下。 在Binder源码中,最核心的部分是Binder驱动和Binder服务。Binder驱动是位于内核空间的组件,负责处理进程间的数据传输和交互。Binder服务是位于用户空间的组件,负责提供接口和功能来进行进程间通信。 在Binder源码中,主要涉及到以下几个重要的文件和目录: 1. drivers目录:包含了Binder驱动的代码,其中最重要的文件是binder.c,它实现了Binder驱动的核心逻辑。 2. include目录:包含了Binder的头文件,其中最重要的文件是binder.h,它定义了Binder的接口和数据结构。 3. libbinder目录:包含了Binder服务的代码,其中最重要的文件是IBinder.cpp和BpBinder.cpp,它们分别实现了Binder服务的接口和代理类。 4. services目录:包含了一些系统级别的Binder服务,例如Package Manager Service和Activity Manager Service。 如果你想深入了解Android Binder源码,可以参考以下资源: 1. Android 源码:你可以从Android官网或者GitHub上获取Android源码,并在frameworks/native目录下查看Binder相关的代码。 2. Android系统架构指南:Android官网提供了关于Android系统架构的详细文档,其中有关IPC和Binder的章节对于理解Binder的实现原理和源码结构很有帮助。 3. 《深入理解Android:卷2》一书中有关于Binder的详细介绍和源码解析,可以作为参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值