2012-10-03 54 views
0

所以當我想到數據序列化及其與Windows休眠的相似性時,我想到了這一點。當您休眠系統時,操作系統不關心個別程序以及他們是否可以序列化/反序列化他們的數據。它只是把整個東西轉儲到磁盤上,後來你可以恢復你一直在做的任何事情。任意代碼的休眠功能

下面是問題:Windows如何做到這一點而不關心每個單獨的程序?是否有可能以某種方式爲代碼模擬此代碼,以便您可以將其「轉儲」到磁盤,並稍後恢復它,而不必編寫序列化/反序列化方法?

回答

1

Windows通過掛起每個進程的執行並將活動(已分配)內存頁寫出到磁盤來完成此操作。當內存稍後恢復並且內核啓動時,它可以恢復所有停止的內容,因爲從它的角度來看,內存並沒有真正改變。就好像它只是在很長一段時間內凍結了一樣。

你可以用你自己的進程做到這一點的唯一方法是在內核中運行一些其他的監督代碼 - 你需要一種方法來獲取你的進程的內存映射並保存它實際的內存頁面,以便在稍後恢復頁面時,應用程序內存中的所有現有指針保持有效。您還需要一種方法來保存其他數據(例如任何打開的文件描述符),以便可以恢復它們。

這對大多數應用程序來說並不實用。