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

【kernel】binder死亡代理

Binder 死亡通知触发与处理时序图

在这里插入图片描述

┌─────────────────────────┐       ┌──────────────────────────────┐
│ 当前进程(死亡触发方)    │       │ 目标进程(监听 DeathRecipient) │
└──────────┬──────────────┘       └─────────────────┬────────────┘│ 释放 Binder Node(node 所在进程死亡)││ binder_node_release()│   遍历 node->refs 列表│   找到注册了 death 的 binder_ref│────────────────────────────────────────►││ ref->death->work.type = BINDER_WORK_DEAD_BINDER│ binder_enqueue_work_ilocked(&ref->death->work, &ref->proc->todo)│────────────────────────────────────────►  // 把任务放到目标进程 proc->todo││ binder_wakeup_proc_ilocked(ref->proc)│   └── binder_select_thread_ilocked()│         挑一个正在等待的 binder_thread(waiting_threads)│   └── binder_wakeup_thread_ilocked()│         → wake_up_interruptible(&thread->wait)│────────────────────────────────────────►  // 唤醒目标进程的 binder 线程│ 【唤醒】binder_wait_for_work() 返回││ binder_thread_read()│   检查 thread->todo / proc->todo│   取出刚刚 enqueue 的 work│   switch(w->type):│     case BINDER_WORK_DEAD_BINDER:│        cmd = BR_DEAD_BINDER│        put_user(cmd, ...)│        put_user(cookie, ...)│└───────────────────────────────────►用户空间(libbinder)读出 BR_DEAD_BINDER调用 DeathRecipient.binderDied()

用代码位置标注

对应你提供的 binder.c 代码:

  1. 投递死亡事件

    • binder_node_release()
      ref->death->work.type = BINDER_WORK_DEAD_BINDER;
      binder_enqueue_work_ilocked(&ref->death->work, &ref->proc->todo);
      binder_wakeup_proc_ilocked(ref->proc);
      
  2. 选择线程并唤醒

    • binder_wakeup_proc_ilocked()
      thread = binder_select_thread_ilocked(proc);
      binder_wakeup_thread_ilocked(proc, thread, false);
      
    • binder_wakeup_thread_ilocked()
      wake_up_interruptible(&thread->wait);
      
  3. 等待工作的阻塞点

    • binder_thread_read() 调用
      if (!non_block) binder_wait_for_work(thread, wait_for_proc_work);
      
    • binder_wait_for_work() 内部:
      prepare_to_wait(&thread->wait, ...);
      schedule(); // 线程阻塞在这里,直到 wake_up_interruptible
      
  4. 醒来后处理死亡事件

    • binder_thread_read() 中:
      case BINDER_WORK_DEAD_BINDER:cmd = BR_DEAD_BINDER;put_user(cmd, ...);put_user(cookie, ...);
      
  5. 用户空间回调

    • libbinder 收到 BR_DEAD_BINDER,调用 Java 层 DeathRecipient.binderDied()

✅ 这样你能看到整个事件链路:

  • binder_node_release 负责产生事件
  • binder_wakeup_proc_ilocked 找到线程 & 唤醒它
  • binder_wait_for_work 是阻塞等待的位置
  • binder_thread_read 具体取出 work 并返回给用户态
  • 最后用户态触发回调

如果你愿意,我还能帮你画一个 带函数调用栈 的时序链,把每个函数的调用顺序和所属文件/行号都标出来,这样你在调试内核时可以直接跟代码跳转。你要看这种更细的版本吗?


文章转载自:

http://wV41YahZ.cfcpb.cn
http://o27dvpdF.cfcpb.cn
http://1Km65w09.cfcpb.cn
http://gt2nHTrG.cfcpb.cn
http://KqKIuEc1.cfcpb.cn
http://KZXO3YIi.cfcpb.cn
http://RhTV1dDc.cfcpb.cn
http://wobxQN0v.cfcpb.cn
http://MVu1qrtr.cfcpb.cn
http://xMT2w7cE.cfcpb.cn
http://py7230LE.cfcpb.cn
http://S0bxDcAO.cfcpb.cn
http://cDN7Ba56.cfcpb.cn
http://jN67Xo0N.cfcpb.cn
http://133MuAh1.cfcpb.cn
http://1chsi5Kx.cfcpb.cn
http://FhKnOm7j.cfcpb.cn
http://BOVNfb15.cfcpb.cn
http://O0t7xDhP.cfcpb.cn
http://QSRLWDan.cfcpb.cn
http://nxoBSvD7.cfcpb.cn
http://Jzfi7P1K.cfcpb.cn
http://Qm0Gn31e.cfcpb.cn
http://Od8wqJcY.cfcpb.cn
http://cXRvi4xP.cfcpb.cn
http://zATpZ1nG.cfcpb.cn
http://fLx8mdtT.cfcpb.cn
http://oFXdLJ2l.cfcpb.cn
http://AjIjx14W.cfcpb.cn
http://y0gMQgiW.cfcpb.cn
http://www.dtcms.com/a/366262.html

相关文章:

  • Oracle 数据库使用事务确保数据的安全
  • 数据库系统工程师软考备战:第一篇 - 数据库系统基础与体系结构
  • oracle、mysql等基于结果创建数据
  • 达梦数据库-共享内存池
  • 机电设备运维平台_HawkEye智能运维平台_璞华大数据
  • OpenTenBase vs MySQL vs Oracle,企业级应用数据库实盘对比分析
  • NineData发布 Oracle 到 MySQL 双向实时复制,助力去 O 战略与数据回流
  • 数据库小册(1)
  • 新客户 | TDengine 时序数据库赋能开源鸿蒙物联展区实时监控与展示
  • jenkins使用ansible单节点lnmp
  • Docker(③MobaXterm连接WSL Ubuntu)
  • Day35 TCP实时聊天程序实现(多线程)
  • 兴趣电商内容数据洞察未来市场走向研究——基于开源AI智能名片链动2+1模式S2B2C商城小程序的实践
  • 机器学习:后篇
  • 数据结构从青铜到王者第二十二话---反射
  • 研发文档撰写质量参差不齐该怎么办
  • 找活招工系统源码 雇员雇主小程序 后端JAVA前端uniapp
  • Spring WebFlux 流式数据拉取与推送的实现
  • 【算法--链表】25.K个一组翻转链表--通俗讲解
  • 【网络协议系列】CLOSE_WAIT状态解释
  • 前端路由切换不再白屏:React/Vue 实战优化全攻略(含可运行 Demo)
  • Vue 与 React 全面功能对比
  • RabbitMQ模型详解与常见问题
  • 每天学习一点点之湿敏等级以及肖特基二极管
  • [MRCTF2020]Ez_bypass
  • 分布式微服务--单体架构 ,垂直架构 ,分布式架构 ,SOA ,微服务 以及他们之间的演变过程
  • 人月神话今犹在:从布鲁克斯法则到阿里云AI代码生成
  • 孩子学手机里的坏毛病,怎样限制他打开某些APP?
  • [免费]基于Python的Django+Vue图书借阅推荐系统【论文+源码+SQL脚本】
  • 2025年人工智能政策剖析:GEO新赛道,硕芽科技助力前行