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。
-
嵌入式
+關注
關注
5072文章
19026瀏覽量
303532 -
內核
+關注
關注
3文章
1366瀏覽量
40236 -
Linux
+關注
關注
87文章
11232瀏覽量
208961 -
按鍵
+關注
關注
4文章
223瀏覽量
57576
發布評論請先 登錄
相關推薦
評論