Binder

在本文中,我将进一步讨论  Binder,复杂而巨大的Android平台的核心子系统。我将解释Binder中提供的不同组件,应用程序进程如何与系统进程通信,以及如何共享数据。

随着智能手机的硬件性能的提升,所谓的“PC在我手中”的提升,他们正在接管个人电脑的角色。随着趋势,移动操作系统也得到了增强,以支持多任务处理和处理使用多核CPU的各种多媒体任务。大多数移动操作系统都是基于PC操作系统的。保持现有PC操作系统的架构,内核得到部分修改,以满足移动环境的要求,并添加必要的功能进行优化。基于MS Windows操作系统的Windows Phone,基于Mac OS X的iOS,基于Linux内核的Google Android是这一类中最受欢迎的。

智能手机 - 我手中的电脑...我手中的PC操作系统!

如果您有任何疑问,如果PC操作系统嵌入到智能手机中将会被修改,以及如何和为什么? “,开源  Android平台可以为您提供一个很好的答案。Android平台是最新软件技术的结果; 它通过开发人员社区提供了大量信息,并允许用户直接修改其开源代码。

Android从Linux内核继承了强大的基础系统,如内存管理,多任务和文件管理。此外,它通过提供用于开发基于Dalvik VM的Java应用程序的各种开发工具,降低了入门级。由于基础系统是用C ++实现的,所以它们带有高效的代码。实际上,Android开发人员表示,与其他嵌入式系统相比,Android的优势之一是C ++。

因此,Android是一个涵盖Linux内核,C ++,Java,Dalvik VM等众多技术的平台。

典型的android_structure.png

图1:Android平台结构

无论如何,它是一个Linux流程!

Android提供了流程单元组件模型。换句话说,提供在Eclipse上创建的应用程序或摄像头功能的系统服务或负责屏幕显示的系统服务,所有这些Android组件最终都表示为Linux进程。

process_management_of_linux-kernel.png

图2:Linux内核的进程管理。

由于Android基于Linux内存,进程和文件管理运行,系统服务也被Linux进程隔离以进行保护。系统进程以Java代码以及C ++本机代码编写,因此在这里包括在Dalvik VM中运行的服务,如Wi-Fi,位置和活动服务。

为了支持智能手机等移动设备,Android的所有默认系统功能均作为服务器进程类型提供。换句话说,要使用诸如SurfaceFlinger或AudioFlinger之类的功能,请求应作为在用户模式下运行的单独进程。

android_system_services_and_applications_run_by_linux_process.png

图3:由Linux进程运行的Android系统服务和应用程序。

例如,当我创建的应用程序调用API来获取Android SDK提供的位置信息时,应用程序会向内部提供位置服务的Linux进程发送请求并获取响应。此外,当使用相机时,它会与相机服务进行互操作。

application_process_with_call_locations_service_and_camera_service.png

图4:呼叫位置和相机服务的应用程序。

由于所有系统服务都作为服务器进程提供,因此需要向其他进程发送请求和响应的机制。在Android中,它被称为  Binder。Android使用其他进程通过Binder提供的功能。

binder_android_communication_infrastructure_between_processes.png

图5:Binder,Android在进程之间的通信基础设施。

那么为什么要开发一个新的机制,而不是使用诸如Linux提供的套接字和管道之类的进程间通信(IPC)呢?这是因为表现。如上所述,Android的所有系统功能都作为服务器进程提供,因此需要在进程之间进行优化的通信方法,而Binder是这个考虑的结果。绑定器是指在所有进程之间共享的内核内存,以最小化由内存复制引起的开销。此外,它提供了用C ++编写的远程过程调用(RPC)框架,以实现高生产率。

系统功能是通过Binder机制接收请求和响应的服务器进程提供的。“ Android平台结构有什么好处? ”你会问。

  • 易于扩展或删除功能:可以轻松添加新的系统服务或删除现有功能。
  • 易于端口:移植到新处理器需要很少的更改。提供移植工具链。
  • 易于测试:测试受组件单元限制,因此不需要测试整个服务,并且可以进行更严格的测试。
  • 支持分配系统:流程通信基于Binder,因此保证了组件之间的位置透明度。

这样的好处非常类似于Microkernel结构的OS。

我们来讨论更多关于Binder的信息。

绑定所有功能

Binder机制从一个简单的想法开始。“将请求和响应写入所有进程可以共享的区域,并让每个进程引用内存地址。 ”因此,使用内核空间。

kernel_space_shared_by_all_processes.png

图6:所有进程共享的内核空间。

实现了Binder驱动程序来使用内核空间。Binder驱动程序的作用是将每个进程映射的内存地址与内核空间的内存地址进行转换,以供参考。

binder_driver_configuration.png

图7:Binder驱动程序配置。

ioctl()系统功能可以使用Binder驱动程序,这是Linux中的一种标准方法。该机制称为Binder IPC。

transfer_structure_of_user_data_between_processes_through_binder_driver.png

图8:通过Binder驱动程序在进程之间传送用户数据的结构。

有一个C ++框架处理使用Binder IPC传输的数据,并进行远程过程调用(RPC)。它用于创建系统服务。然后,一个进程可以使用其他进程提供的功能,就像自己一样。

c ++ framefork_that_transltes_data_translated_to_rpc_through_binder_driver.png

图9:通过Binder驱动将数据翻译成RPC的C ++框架。

结论

在这篇短文中,尽管Android技术背后的巨大技术,我还是尽量提供简单的信息。我希望这将有助于您了解Android平台。

要包装,Binder是Android平台的基础。我们已经审查了Binder的三个组件:驱动程序IPCRPC。Binder驱动程序将包含在Linux内核的主版本中。以下总结了Android和Binder的说明。

  • Android是基于Linux内核的PC操作系统,针对智能手机进行了优化。
  • Android具有流程单元组件模型,并提供系统功能作为服务器进程。对于功能的进程筛选,它提供了Binder。
  • Android Binder使用内核内存引用来支持针对移动设备进行优化的进程之间的通信。

NHN公司游戏共同发展团队Joonseok Ahn。

参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值