我如何复制正在运行的应用程序的 RAM、保存它并稍后将其重新加载到 RAM 中?

Posted

技术标签:

【中文标题】我如何复制正在运行的应用程序的 RAM、保存它并稍后将其重新加载到 RAM 中?【英文标题】:How could I copy the RAM of a running application, save it, and reload it into RAM later on? 【发布时间】:2020-07-13 16:54:11 【问题描述】:

我玩过改装的 Minecraft。这样做的一个缺点是,每当我启动 Minecraft 时,编译所有模块都需要很长时间。这可能需要大约 15 分钟左右,在我看来这太长了。当计算机运行应用程序时,它所做的一切都是基于 RAM 中的输入和数据。我相当肯定,如果一个人在某个时间点复制他们计算机的 RAM,并在另一个时间将该数据放回 RAM,计算机将恢复到以前的状态。尽管如果 RAM 中的数据实际上与硬盘驱动器上的数据不一致,事情可能会崩溃(例如,如果 Windows 资源管理器在加载的 RAM 中打开并显示硬盘驱动器上可能并不存在的文件和文件夹)。

我认为可以复制应用程序的 RAM 数据(在我的情况下,在所有内容编译和加载后需要几 GB 的 RAM)。我还认为,如果稍后将其重新插入 RAM,应用程序将显示为已加载,而无需等待代码编译。我该怎么做呢?我认为这类似于模拟器中的保存状态加载。

【问题讨论】:

一个解决方法的想法 - 您可能能够摆脱使用 VMWare 或 VirtualBox 为您的游戏环境创建虚拟机,然后在超过编译延迟后快照 Minecraft 的状态。 【参考方案1】:

我相当肯定,如果一个人在某个时间点复制他们计算机的 RAM,并在另一个时间将该数据放回 RAM,那么计算机将恢复到以前的状态。

这对你很有洞察力;这正是计算机“休眠”时发生的情况[1]。你也是正确的,除非 RAM 的 total 状态被保存和恢复,或者如果计算机被允许在存储和恢复之间运行,很可能会发生奇怪的事情。

存储/恢复单个应用程序的 RAM 状态是可以想象的,但这将是一项复杂的操作,即使在 IT 领域工作了 25 年以上,我也没有听说过可以做到这一点的应用程序。

... 除了提到虚拟机的 Phil Brubaker 的评论。如果你在物理机上运行的虚拟机中运行 Minecraft,你可以像 Phil 提到的那样:在任何时候存储和恢复 VM 的运行状态——比如,在 Minecraft 会话结束时。 “快照”(同样,正如 Phil 提到的那样)是这样做的。

(VM 应用程序可能提供“暂停”功能,虽然这在某些细节上可能与该 VM 应用程序的“快照”功能不同,但效果是一样的,就像物理机的休眠一样:运行状态(即 RAM 的内容和 CPU 在那个确切时刻所做的一些细节)被保存到磁盘,并且可以稍后恢复以使 VM 回到它在快照时的确切位置/ 暂停。)

因此,我建议您在网络上搜索“[在此处填写您的操作系统] 的虚拟机应用程序”。 VMWare 和 VirtualBox 将成为热门产品;会有其他的,这取决于您的操作系统等。

[1] 请注意,“睡眠”是不同的:在睡眠中,只有一些组件被关闭,例如硬盘驱动器,它通常总是在旋转,无论它是否实际读取/写入数据。所以睡眠是为了节省能源而部分关机。休眠是一种长期的、非常低功耗的模式。

【讨论】:

以上是关于我如何复制正在运行的应用程序的 RAM、保存它并稍后将其重新加载到 RAM 中?的主要内容,如果未能解决你的问题,请参考以下文章

从 IAR stm32f2/f4 闪存复制函数到 ram 并运行它

如何在 ram 中创建目录并获取它的路径? [复制]

如何将 c++ 变量安全地保存在 RAM 中?

Delphi的内存分析工具?

如何在 Java 中每天在设定的时间运行代码? [复制]

Python,如何在 RAM 上加载视频文件?