当前位置: 首页 > news >正文

Binder

Binder架构

在这里插入图片描述

Binder进程与线程

在这里插入图片描述
对于底层Binder驱动,通过 binder_procs 链表记录所有创建的 binder_proc 结构体,binder 驱动层的每一个 binder_proc 结构体都与用户空间的一个用于 binder 通信的进程一一对应,且每个进程有且只有一个 ProcessState 对象,这是通过单例模式来保证的。在每个进程中可以有很多个线程,每个线程对应一个 IPCThreadState 对象,IPCThreadState 对象也是单例模式,即一个线程对应一个 IPCThreadState 对象,在 Binder 驱动层也有与之相对应的结构,那就是 Binder_thread 结构体。在 binder_proc 结构体中通过成员变量 rb_root threads,来记录当前进程内所有的 binder_thread。
作用是给每一个进程的每一个线程固定一个biner,别通信的时候搞错了

Binder 线程池:每个 Server 进程在启动时创建一个 binder 线程池,并向其中注册一个 Binder 线程;之后 Server 进程也可以向 binder 线程池注册新的线程,或者 Binder 驱动在探测到没有空闲 binder 线程时主动向 Server 进程注册新的的 binder 线程。对于一个 Server 进程有一个最大 Binder 线程数限制,默认为16个 binder 线程,例如 Android 的 system_server 进程就存在16个线程。对于所有 Client 端进程的 binder 请求都是交由 Server 端进程的 binder 线程来处理的。

一次完整的通讯

在这里插入图片描述
为什么说binder通信只有一次拷贝,就是因为服务端将自己的能力注册到service_manager中时,是将代理通过mmap,将用户空间的地址映射到了内核空间。用户在请求这个能力的时候,实际上是将数据通过service_manager拷贝到内核空间,然后直接在这个地址跑出结果,再把结果回传到用户空间。

相关文章:

  • ONLYOFFICE 协作空间 企业版使用秘籍-1.如何使用外部存储
  • 达梦数据库部署veri数据对比工具
  • 3.3.2 纠错编码(海明校验码)
  • 板凳-------Mysql cookbook学习 (十--5)
  • 鸿蒙Next仓颉语言开发实战教程:订单列表
  • Spring Cloud与Alibaba微服务架构全解析
  • Android GreenDAO 通过 Key 查询数据库数据慢问题优化
  • 力扣hot100--反转链表
  • 多线程应用
  • 详细解释aruco::markdetection _detectInitialCandidates函数
  • Java八股文——Spring「MyBatis篇」
  • Linux开发工具之VsCode(Filezila、MobaXterm、Vim三合一)
  • git的常用方法
  • 【Unity优化】提高热更新和打包速度
  • 架空线路智能监控系统的应用与优势剖析
  • Android Studio 无法安装HAXM,点击之后无反应
  • Vue-Typed-JS打字动画效果
  • C#.Net 使用NPOI库导出Excel(含列宽度自适应) 及 根据Excel文件生成DataTable
  • c#实现绝对路径和相对路径的转换
  • 【网络】每天掌握一个Linux命令 - netperf
  • 现在做网站还用dw做模板了吗/免费下优化大师
  • 网站做页游推广/最好的seo外包
  • 在线详情页制作/seo发帖网站
  • 手机网页游戏平台/深圳谷歌seo推广
  • 中建八局第一建设有限公司设计院/seoshanghai net
  • 餐饮加盟网站怎么做/中国seo