C++ 针对任意代码的休眠功能

C++ 针对任意代码的休眠功能,c++,serialization,C++,Serialization,所以,当我想到数据序列化及其与windows休眠的相似性时,我就想到了这一点。当您休眠系统时,操作系统不关心单个程序以及它们是否可以序列化/反序列化其数据。它只是将整个过程转储到磁盘上,以后您可以继续您一直在做的任何事情 问题是:Windows如何做到这一点而不关心每个单独的程序?是否可以对代码进行模拟,以便您可以将其“转储”到磁盘,然后再恢复,而无需费心编写序列化/反序列化方法?Windows通过暂停每个进程的执行并将活动(分配的)内存页写入磁盘来实现这一点。当这个内存稍后被恢复并且内核启动时

所以,当我想到数据序列化及其与windows休眠的相似性时,我就想到了这一点。当您休眠系统时,操作系统不关心单个程序以及它们是否可以序列化/反序列化其数据。它只是将整个过程转储到磁盘上,以后您可以继续您一直在做的任何事情


问题是:Windows如何做到这一点而不关心每个单独的程序?是否可以对代码进行模拟,以便您可以将其“转储”到磁盘,然后再恢复,而无需费心编写序列化/反序列化方法?

Windows通过暂停每个进程的执行并将活动(分配的)内存页写入磁盘来实现这一点。当这个内存稍后被恢复并且内核启动时,它能够恢复它停止的所有内容,因为从它的角度来看,内存实际上没有改变。好像它只是冻结了很长一段时间

使用自己的进程实现这一点的唯一方法是在内核中运行一些其他管理代码——您需要一种方法来获取进程的内存映射,并将其与实际内存页一起保留,以便在以后恢复页面时,应用程序内存中的所有现有指针仍然有效。您还需要一种持久化其他数据(如任何打开的文件描述符)的方法,以便它们也可以恢复

这对于大多数应用程序都不实用