Android-Binder相关
本文最后更新于 659 天前
1. 整体框架

1.1 底层接口 open,mmap,ioctl
  • open:打开设备节点
  • mmap:分配共享区域
  • ioctl:对共享内存读写数据,并且是一些binder调用的事务管理。
1.2 中层接口

ProcessState和IPCThreadState

ProcessState是一个singleton类,每个进程只有一个对象,这个对象负责打开Binder驱动,开辟一个共享空间,建立线程池,让其进程里面的所有线程都能通过Binder通信
每个线程都有一个IPCThreadState实例登记在Linux线程的上下文附属数据中,主要负责Binder的读取,写入和请求处理框架。
– ProcessState和IPCThreadState 是基本基础的
– 在上述基础native封装了 BpBinder和BBinder
– 在上述基础封装以便java层调用 即 Binder

2. 实名Binder和匿名Binder
  • 实名Binder利用的通信接口就是ServiceManager这个最原始的接口getServcie,addService
  • 匿名Binder利用的通信接口就是工程师自己实现的setCallBack。
  • Binder(服务端)和BinderProxy(客户端)成对出现,服务端和客户端在同一进程中,Binder驱动为了性能会自动返回Binder对象而不是BinderProxy
3. Binder通信最大可以传输多大的数据
  • mmap限制了4M
  • 如果一个进程使用ProcessState这个类来初始化Binder服务,这个进程的Binder内核内存上限就是BINDER_VM_SIZE,也就是1MB-8KB

4. 匿名共享内存

系列文章作者地址

iichen:https://iichen.cn/?p=436
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇