Linux 的就寝常规

主要观点:介绍 Linux 从唤醒状态到休眠状态的过程,包括各种相关函数、配置及步骤。
关键信息

  • 通过/sys/power/state/sys/power/disk系统文件控制休眠状态,state_store中写入“disk”会调用hibernate()进入休眠。
  • 涉及 autosleep 系统,其机制源于 Android,通过工作队列检查系统状态并决定是否进入休眠或挂起。
  • 休眠步骤包括检查休眠是否可用、压缩支持、获取锁(睡眠锁和休眠锁)、准备控制台(处理虚拟终端切换等)、通知电源管理回调链、同步文件系统等。
    重要细节
  • hibernation_available函数用于确认是否可进行休眠,需满足nohibernate等条件。
  • 压缩支持检查时,通过nocompress命令行参数设置,且需crypto_has_comp验证算法是否支持。
  • 休眠时获取的锁包括system_transistion_mutex防止设备不可用导致的 I/O 问题,hibernate_atomic防止其他操作打开快照或恢复。
  • 准备控制台时,根据CONFIG_VT_CONSOLE_SLEEP等条件决定是否进行虚拟终端切换,过程中需注意各种锁定和同步操作,如console_lock防止打印冲突等。
  • 通知电源管理回调链是一个具有优先级的阻塞通知链,每个回调可返回不同状态。
  • 同步文件系统通过ksys_sync函数,先唤醒写线程,然后依次同步 inodes、文件系统和块设备等。

整体来说,Linux 休眠过程涉及多个方面的配置和操作,以确保系统状态的安全保存和恢复。

阅读 27
0 条评论