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