Android低功耗子系统的投票机制以及触发进入系统休眠的过程

news/2024/9/17 4:37:26/文章来源:https://www.cnblogs.com/jiafan-ma/p/18279033
  • 从kernel角度看,系统是否进入休眠应该由内核来控制,因此Linux引入了 wakeup source以及autosleep机制
    image

    • 关于wakeup source的介绍,请参考: Wakeup Source框架设计与实现
    • 关于autosleep机制,请参考:autosleep框架设计与实现

    在内核中,使用wakeup source提供投票机制,让各个系统模块投票是否允许系统进入休眠,当所有的模块都投票允许系统进入休眠时,autosleep机制检测到这一情况,尝试让系统进入休眠。

  • 从Android角度看,系统是否进入休眠应该由上层应用决定,因此Android引入了Wakelocks以及SystemSuspend service
    image

    • 关于wakelocks的介绍,请参考:Wakelocks 框架设计与实现
    • 关于 SystemSuspend Service,可参考:SystemSuspend 服务
      • 代码路径:system/hardware/interfaces/suspend/1.0/default/
      • 该服务创建了两个线程:
        • 主线程:响应来自Client的请求以分配wakelock, 增加/减少 suspend counter
        • 挂起线程:控制系统的休眠,判断系统是否符合进入休眠的条件(在framework中的PowerManagerService.java会根据一些事件,比如息屏亮屏,动态开关autosuspend,从而动态开启/结束该挂起线程)
          image
          挂起线程的实现与autosleep的流程类似(但需要与主线程处理好suspend counter的同步问题),其伪代码可以参考如下:
           while (1) {do {ret = read(&cnt, "/sys/power/wakeup_count"); //一般会阻塞在此处,直到cnt为0if (ret) {ret = write(cnt, "/sys/power/wakeup_count");} else {countine;}} while (!ret);write("mem", "/sys/power/state");/* goto here after wakeup */......}
        

    在Android应用层面上,使用wakelocks提供投票机制,让各个系统模块投票是否允许系统进入休眠,当所有的模块都投票允许系统进入休眠且PowerManagerService使能autosuspend时,SystemSuspend service中的挂起线程检测到这一情况,会尝试让系统进入休眠。

因Android提供了SystemSuspend service,因此autosleep机制一般不再使用,
但对于纯Linux系统,一般会使用autosleep机制来检测系统是否应尝试进入休眠。

关于Android低功耗子系统的投票机制以及触发进入系统休眠的过程,强烈建议在有此基础概念的基础上,拜读下面的文章,了解这些机制的发展过程,加深对这部分内容的理解:

  1. Linux电源管理(7)_Wakeup events framework
  2. Linux电源管理(8)_Wakeup count功能
  3. Linux电源管理(9)_wakelocks
  4. Linux电源管理(10)_autosleep

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772701.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java SE 文件上传和文件下载的底层原理

1. Java SE 文件上传和文件下载的底层原理 @目录1. Java SE 文件上传和文件下载的底层原理2. 文件上传2.1 文件上传应用实例2.2 文件上传注意事项和细节3. 文件下载3.1 文件下载应用实例3.2 文件下载注意事项和细节4. 总结:5. 最后:2. 文件上传文件的上传和下载,是常见的功能…

使用Excel画出各类统计图(3)

本章会介绍如何画出箱线图 目录一、箱线图1.箱线图的作用2.箱线图的绘制与调整(1)画出箱线图(2)调整箱线图 一、箱线图 箱线图用于反映一组或多组连续型定量数据分布的中心位置和散布范围。 箱线图上需要体现出数据的某些特性,因此需要计算上四分位数、中位数、下四分位数…

Docker 和 k8s 学习

披个甲:偷的图灵学院的笔记 docker:https://note.youdao.com/ynoteshare/index.html?id=db5365c679b7d9129cbcfab5cb682d69&type=note&_time=1722071596141 k8s:https://note.youdao.com/ynoteshare/index.html?id=b2d5991b16e43cef9ac5071fbc516026&type=not…

帝国CMS如何设置是安全最优化的

帝国CMS如何设置是安全最优化的:(注:以下选项都是非必须设置,只是优化建议。)php配置文件php.ini设置:1、magic_quotes_gpc 设置为 On 魔术引用,此项建议开启。2、register_globals 设置为 Off PHP全局变量,此项建议关闭。3、display_errors 设置为 Off 不显示PHP错…

易优CMS内容页调用下载附件-模板代码使用说明{eyou:volist name=$eyou.field.file_list id=field} 附

{eyou:volist name="$eyou.field.file_list" id="field"}附件文件名:{$field.file_name}文件提取码:{$field.extract_code}服务器名称:{$field.server_name}文件大小:{$field.file_size}下载链接:{$field.file_url} {/eyou:volist}扫码添加技术【解决…

1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL

错误记录: 1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client 错误原因: mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。 解决方案: 解决:①升级nav…

易优cms 安装常见问题汇总 Eyoucms快速入门

安装报错,请仔细核对数据库账号和密码答:请检查填写的数据库链接信息是否正确,此问题都是填写的数据库地址,账号,密码不正确导致的本地测试正常,放到虚拟主机就这样了安装的时候出现这个: 虚拟主机HPH5.5 ,数据库MYSQL 5.6 PHP Warning: include_once(./templates/step…

帝国CMS网站系统数据库配置文件是哪个文件?

帝国CMS系统数据库配置文件是哪个文件?/e/class/config.php扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTM…

【STC 相关】【转载】51单片机学习教程(简单入门)

转载自:知乎 https://zhuanlan.zhihu.com/p/628407258 作者:rakey (作者主页 https://www.zhihu.com/people/rakey-49)学习51单片机之前你一定要具备的基础知识。 1、C语言基础。 2、数字电路基础。 3、模拟电路基础。 如果你已经具备这些知识那么我们就可以来学习单片机。 …

【51系列】【转载】51单片机学习教程(简单入门)

转载自:知乎 https://zhuanlan.zhihu.com/p/628407258 作者:rakey (作者主页 https://www.zhihu.com/people/rakey-49)学习51单片机之前你一定要具备的基础知识。 1、C语言基础。 2、数字电路基础。 3、模拟电路基础。 如果你已经具备这些知识那么我们就可以来学习单片机。 …

2024暑假集训测试13

前言比赛链接。从来没见过交互题,T1 狂 CE 不止心态炸了,后面的题也没打好,T2、T3 简单题都不会了,所以为啥 T4 又放黑题。 T1 大众点评原题:AT_joisc2014_d。难点主要在交互,赛时琢磨了半场比赛终于搞明白是啥玩意儿了,可以将给定库当成压缩的一部分代码,可以调用里面…

51nod-3976-最长序列

https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338 https://class.51nod.com/Html/Textbook/Problem.html#problemId=3976&textbookChapterId=725 LIS是符号只有大于或小于,所以这道题就是LIS问题。 状态设计同LIS,由于答案就是…