每当我想使用另一个操作系统或运行耗电的虚拟机时,我都得重新启动计算机,这让我很厌烦。随着如今计算机内存容量的不断增加,我开始认为一定有某种方法可以在内存中运行两个操作系统,并可以在两者之间切换。在我看来,这似乎并不太难;
- 兼容层在 bios 之后启动,然后 bios 又启动到 OS1。在 OS1 中,运行触发保存到 RAM 的软件,然后启动到兼容层,然后启动到 OS2。这样,操作系统可以并排使用,并且启动时间大大缩短,因为两个操作系统都已在 RAM 中。
这两个操作系统都有自己指定和受保护的内存,所以这没什么问题……我的意思是,这看起来不错,但没人这样做过,所以肯定有原因。我很想了解一下。
答案1
您所说的完全有可能,只是大多数操作系统不会容忍意外切换外围设备的状态。
示例 - OS1 正在运行,您将其暂停到 RAM,然后启动 OS2。所有设备(如 PCI、USB 等)都处于特定状态,但 OS2 将更改此状态。当您返回 OS1 时,所有设备驱动程序都将与 OS1 认为处于意外状态的设备一起工作。OS1 可能会崩溃,因为其设备驱动程序将执行设备不喜欢的操作,因为设备不在正确的状态。
保存和恢复设备状态的方式并不总是像 RAM 那样。设备可能很古怪。通常,操作系统要与设备交互,必须使用其驱动程序。驱动程序可能有错误,等等。
现在,您可能会认为可以将设备分配给一个或另一个操作系统。问题是,要访问某个设备,您需要遍历总线,而在标准 PC 硬件上,您只有 1 或 2 个 PCI-E 总线,例如,所有 PCI-E 卡都连接到这些总线。因此,至少总线必须在您的操作系统实例之间共享。除非中间存在某个活动层(如虚拟机管理程序),否则一个操作系统可能会“踩到”另一个操作系统的设备。完全分离两个操作系统之间的硬件非常困难。
虚拟化确实是你能做的最好的事情。
答案2
听上去像执行.但它仅适用于基于 *nix 的操作系统。
Kexec 是一个系统调用,它使您可以从当前正在运行的内核加载并启动到另一个内核。这对于内核开发人员或其他需要快速重启而无需等待整个 BIOS 启动过程完成的人员非常有用。