2012-10-03 52 views
0

所以当我想到数据序列化及其与Windows休眠的相似性时,我想到了这一点。当您休眠系统时,操作系统不关心个别程序以及他们是否可以序列化/反序列化他们的数据。它只是把整个东西转储到磁盘上,后来你可以恢复你一直在做的任何事情。任意代码的休眠功能

下面是问题:Windows如何做到这一点而不关心每个单独的程序?是否有可能以某种方式为代码模拟此代码,以便您可以将其“转储”到磁盘,并稍后恢复它,而不必编写序列化/反序列化方法?

回答

1

Windows通过挂起每个进程的执行并将活动(已分配)内存页写出到磁盘来完成此操作。当内存稍后恢复并且内核启动时,它可以恢复所有停止的内容,因为从它的角度来看,内存并没有真正改变。就好像它只是在很长一段时间内冻结了一样。

你可以用你自己的进程做到这一点的唯一方法是在内核中运行一些其他的监督代码 - 你需要一种方法来获取你的进程的内存映射并保存它实际的内存页面,以便在稍后恢复页面时,应用程序内存中的所有现有指针保持有效。您还需要一种方法来保存其他数据(例如任何打开的文件描述符),以便可以恢复它们。

这对大多数应用程序来说并不实用。