Wakeup events framework
系统处于 suspend 状态,可通过 wakeup events 唤醒。具体的 wakeup events 可以是按键按下,可以是充电器插入等。但是,如果在 suspend 的过程中,产生了 wakeup events,怎么办?答案很肯定,“wakeup”系统。由于此时系统没有真正 suspend,所以这的“wakeup”是个假动作,实际上只是终止 suspend。
但由于系统在 suspend 的过程中,会进行 process freeze、 device suspend 等操作,而这些操作可能导致内核或用户空间程序不能及时获取 wakeup events,从而使系统不能正确 wakeup,这就是 wakeup events framework 要解决的问题:system suspend 和 system wakeup events 之间的同步问题。
同步问题包括两种情况:
情况1:内核空间的同步
wakeup events 产生后,通常是以中断的形式通知 device driver。driver 会处理events,处理的过程中,系统不能 suspend。
情况2:用户空间的同步
一般情况下,driver 对 wakeup events 处理后,会交给用户空间程序继续处理,处理的过程,也不允许 suspend。这又可以分为两种情况:
1)进行后续处理的用户进程,根本没有机会被调度,即该 wakeup events 无法上报到用户空间。
2)进行后续处理的用户进程被调度,处理的过程中(以及处理结束后,决定终止 suspend 操作),系统不能 suspend。
全部0条评论
快来发表一下你的评论吧 !