1

假设我有一段可以在OS上正常运行的代码。现在,如果我在虚拟机(服务器虚拟化)上安装该操作系统并在该虚拟机上运行该代码,那么代码的行为有可能不同吗?在虚拟化服务器上​​运行时,可执行文件的行为可能会有所不同吗?

如果是这样,那么有什么先决条件?例如,是否必须编译机器代码(换句话说,解释型语言是安全的?)?它是否必须是某些操作系统指令?特定的虚拟化技术(Xen,KVM,VMware ..)?

此外,有什么可能的不同行为?

回答

3

是的。像任何机器一样,虚拟机只是另一台计算机(用软件而不是硬件实现)。

其一,大量的商业应用程序将炸毁当你运行它们的虚拟机上,由于:

  1. 拷贝保护检测VM
  2. 拷贝保护索具硬件,使用BIOS的无证功能/内核/硬件

其次,虚拟机只是另一台计算机组成的硬件,而不是电路/染料/微码/魔法。这意味着VM必须通过直通或仿真来提供仿真硬件。硬件非常多样的事实会导致各种不同的行为。还要注意可能缺少驱动程序或加速模拟硬件。

但是当然,典型的商业应用程序例如几乎不可能依赖于任何硬件细节,因为它只是调用一些GUI API。

如果解释语言向某些本地代码发出调用,所有这些都可能再次发生,那么解释型语言只有在“解释”的范围内才是安全的。

有关检测虚拟机运行情况的示例,请查看this,它只是几千种检测虚拟机的方法之一。

0

理论上,程序的运行方式应该与物理机器上的完全相同。

然而在实践中,有可能是由于

  • 机\ OS配置和差异驱动
  • 加载虚拟机主机的。

机器配置的差异与您在任何不同的物理机器之间看到的差异类似。根据应用程序对最终用户的重要程度,您应该运行相同的一组测试,以确定环境是否可以使用。

根据虚拟化技术的不同,主机可能不具备在特定时间保证客户端资源的能力。这可能会导致客户端上的怪异行为。由于IO超时而导致内存不足,可能会出现更多的应用程序错误。

要成功虚拟化生产应用程序,您需要做一些工作来了解application \ client和虚拟主机的资源配置文件。

相关问题