Linux睡眠唤醒机制--Kernel态

本文介绍了Linux系统中休眠(suspend)的流程,包括冻结用户态进程和内核态任务,设备的suspend回调函数调用,以及如何通过读写`/sys/power/state`进入休眠。详细讲解了休眠的`suspend_prepare()`、`suspend_devices_and_enter()`等关键步骤,以及唤醒过程,涉及设备的恢复、进程解冻等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程

               

一、对于休眠(suspend)的简单介绍
   在Linux中,休眠主要分三个主要的步骤:
   1) 冻结用户态进程和内核态任务
   2) 调用注册的设备的suspend的回调函数, 顺序是按照注册顺序
   3) 休眠核心设备和使CPU进入休眠态, 冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存下所有进程的上下文. 当这些进程被解冻的时候,他们是不知道自己被冻结过的,只是简单的继续执行。
   如何让Linux进入休眠呢?用户可以通过读写sys文件/sys /power/state 是实现控制系统进入休眠. 比如
   # echo mem > /sys/power/state
   命令系统进入休眠. 也可以使用

   # cat /sys/power/state
   来得到内核支持哪几种休眠方式.

二、Linux Suspend 的流程
1. 相关代码

     • kernel/kernel/power/main.c
     • kernel/arch/arm/mach-xxx/pm.c
     • kernel/driver/base/power/main.c

     接下来让我们详细的看一下Linux是怎么休眠/唤醒的:
     用户对于/sys/power/state 的读写会调用到 kernel/kernel/power/main.c中的state_store(), 用户可以写入 const char * const pm_states[] 中定义的字符串, 比如"mem", "standby"。

const char *const pm_states[PM_SUSPEND_MAX] = {
#ifdef CONFIG_EARLYSUSPEND
 [PM_SUSPEND_ON]  = "on",
#endif
 [PM_SUSPEND_STANDBY] = "standby",
 [PM_SUSPEND_MEM] = "mem",
};
      常见有standby(suspend to RAM)、mem(suspend to RAM)和disk(suspend to disk),只是standby耗电更多,返回到正常工作状态的时间更短。     

     然后state_store()会调用enter_state()<注:这是经典Linux调用流程, 在Android系统中,Kernel将调用request_suspend_state,而不是enter_state>,它首先会检查一些状态参数,然后同步文件系统。
 

/** * enter_state - Do common work of entering low-power state. * @state:  pm_state structure for state we're entering. * * Make sure we're the only ones trying to enter a sl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值