因此,当我考虑数据序列化及其与Windows休眠的相似性时,我才想到这一点。当您休眠系统时,操作系统不关心单个程序以及它们是否可以序列化/反序列化其数据。它只是把整个东西转储到磁盘上,以后你可以恢复你正在做的任何事情。
以下是一个问题:Windows如何在不关心每个程序的情况下执行此操作?有可能以某种方式为您的代码模拟这个,以便您可以将其“转储”到磁盘上,然后在不需要编写序列化/反序列化方法的情况下恢复它吗?
答案 0 :(得分:1)
Windows通过暂停每个进程的执行并将活动(已分配)内存页写入磁盘来完成此操作。当这个内存稍后被恢复并且内核启动时,它能够恢复它停止的所有内容,因为从它的角度来看,内存实际上并没有改变。好像它只是冻结了很长一段时间。
使用您自己的一个进程执行此操作的唯一方法是在内核中运行一些其他监控代码 - 您需要一种方法来获取进程的内存映射并将其与实际的内存页面,以便在以后恢复页面时,应用程序内存中的所有现有指针仍然有效。您还需要一种方法来保存其他数据(例如任何打开的文件描述符),以便它们也可以恢复。
这对大多数应用程序来说都不实用。