Linux Suspend 之記憶體機制
休眠(Suspend)現在已經是 Laptop 必備的電源管理機制之一,而 Suspend 又分為 s2ram(Suspen to RAM)和 s2disk(Suspend to Disk) 兩種模式。若是啟動 Suspend 的機制,可以看到 Operating System 神奇的被暫停,然後 Resume 叫醒回到之前的工作狀態。如果說想深入瞭解這樣一個機制,可以從 Linux 的休眠實作來著手,swsusp 就提供了這樣一個 User-space 的實作,我們可以研究它的sourcecode。
大體上來說,Suspend 機制不過就是儲存當時系統 Memory 狀態,然後再啟動時還原回去,在實作時,必需先鎖定當時系統下所有的記憶體空間,以確保記憶體內容不再變動,可以分別用 mlockall() 和 munlockall() 來達成這樣的任務。
flags 又分成:
Linux Suspend 所相關的記憶機制大致上如此,當然更細節的部份還有待探討,可以在 source code 中找到更多可以研究的方向。 :P
大體上來說,Suspend 機制不過就是儲存當時系統 Memory 狀態,然後再啟動時還原回去,在實作時,必需先鎖定當時系統下所有的記憶體空間,以確保記憶體內容不再變動,可以分別用 mlockall() 和 munlockall() 來達成這樣的任務。
#include <sys/mman.h>
int mlockall(int flags);
int munlockall(void);
flags 又分成:
- MCL_CURRENT
- 鎖定全部現有的記憶體分頁
- MCL_FUTURE
- 鎖定未來將被新增的記憶體分頁
- SNAPSHOT_FREEZE
- 鎖定使 User Space Processes 靜止
- 鎖定使 User Space Processes 靜止
- SNAPSHOT_UNFREEZE
- 解除 User Space Processes 的鎖定
- 解除 User Space Processes 的鎖定
- SNAPSHOT_ATOMIC_SNAPSHOT
- 建立一個系統的記憶體快照映像檔
- 建立一個系統的記憶體快照映像檔
- SNAPSHOT_ATOMIC_RESTORE
- 還原系統記憶體狀態
- 還原系統記憶體狀態
- SNAPSHOT_FREE
- 釋放快照映像檔的記憶體
- 釋放快照映像檔的記憶體
- SNAPSHOT_SET_IMAGE_SIZE
- 設定映像檔最大 Size,如果無法達到指定的 Size,kernel 會盡可能建立最小的 image
- SNAPSHOT_AVAIL_SWAP
- 取得可用的 Swap 大小
- 取得可用的 Swap 大小
- SNAPSHOT_GET_SWAP_PAGE
- 建立一個 Swap 頁
- 建立一個 Swap 頁
- SNAPSHOT_FREE_SWAP_PAGES
- 釋放所有 SNAPSHOT_GET_SWAP_PAGE 產生的 Swap 頁
- 釋放所有 SNAPSHOT_GET_SWAP_PAGE 產生的 Swap 頁
- SNAPSHOT_SET_SWAP_FILE
- 設定 Swap 的儲存位置
留言
張貼留言