Android系统内存相关—Binder机制(二)

简介

通过思维导图和相关分解,简单的介绍对Android系统的认知,方便搭建一套比较整体的Android基础框架。

本章主要介绍Android的Binder机制处理跨进程问题,其本质还是对共享内存的处理。

描述

  • Binder
    • 实现本质
      • 内存共享
    • 模型
      • server
        • transact
        • replay
        • 同步返回,挂起进程
      • client
        • transact
        • replay
        • 同步返回,挂起进程
      • binder驱动
        • Binder的核心
        • 无硬件的驱动
        • 实现
          • open
          • mmap
            • 为用户虚拟空间开辟一个真正的物理内存空间
            • 该物理内存映射到binder驱动的虚拟内存空间
          • ioctl
            • 操作的关键方法
              • 读写
              • 执行命令
          • 物理内存
            • 用户虚拟内存
            • binder驱动的虚拟内存
      • service manager
        • 大管家
        • 负责定位
        • 职责类似DNS
          • 根据名字获取IP
        • 也是Binder server
          • handle 0
        • ServiceManagerProxy
        • handle
          • binder server的句柄地址
          • 通过handle可以寻找到对应的server地址并映射为IBinder对象
          • 并非相同进程时返回
        • binder 对象
          • 相同进程直接返回IBinder对象
    • AIDL
      • 方便用户实现binder机制的文件
      • 自动Binder相关的代码
        • 包括 server、client的代理接口类等
    • 重点概念
      • ServiceManagerProxy
        • 用于代理C/C++层ServerManager
        • 方便java用户调用
      • IBinder
        • BpBinder的接口类
        • 调用其transact等接口方法,执行操作
      • BpBinder
        • native层
        • binder的调用者,在java层会转为IBinder使用
      • ProcessState
        • 进程唯一
        • 封装了与Binder驱动操作的方法
        • 提供IPC服务
      • IPCThreadState
        • 执行者
        • transact,与binder driver进行交互
        • 线程唯一
        • waitForReponse
          • talkWithDriver
            • mIn
            • mOut
            • binder_ioctl
              • 挂起调用者线程
              • 等待回执
          • 数据copy发生在此
      • BC_TRANSACTION的处理(ServiceManager.getService()流程)
        • 寻找target_proc的node(target_node)
        • 获取target_proc和target_thread
        • todo 和 wait列表
          • target_list = &target_thread ->todo
          • target_wait = &target_thread->wait
        • 生成一个binder_transaction
          • 放入target todo列表
        • 生成一个binder_work(tComplete)
          • 用于说明现在有transaction还未完成
          • 放到本线程的todo列表中
        • 编写biander_transaction内容
          • 获取t->buffer
            • 就是为完成transaction而开辟的内存
            • mmap
        • 复制内容
          • copy_from_user
    • service manager getService
      • 获取IBinder
      • getService

思维导图

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值