在虚拟化服务器上​​运行时,可执行文件的行为可以不同吗?

时间:2010-08-01 03:42:04

标签: language-agnostic cross-platform operating-system virtualization

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

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

此外,有哪些可能的不同行为?

2 个答案:

答案 0 :(得分:3)

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

首先,由于以下原因,当您在VM上运行时,许多商业应用程序会爆炸:

  1. 检测VM的复制保护
  2. 使用BIOS /内核/硬件的未记录功能
  3. 复制保护装配您的硬件
  4. 其次,VM只是另一台计算机,由在汇编中实现的硬件而不是电路/染料/微码/魔术组成。这意味着VM必须通过直通或仿真提供仿真硬件。硬件非常多样化的事实可能导致各种不同的行为。另请注意可能缺少模拟硬件的驱动程序或加速。

    但是,例如,典型的业务应用程序不太可能依赖于任何硬件细节,因为它所做的只是调用一些GUI API。

    解释语言只有在被“解释”的范围内才是安全的,如果解释语言调用某些本机代码,所有这些都可以再次使用。

    有关检测到它在VM下运行的某些内容的示例,请检查this,它只是成千上万种检测VM的方法之一。

答案 1 :(得分:0)

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

但在实践中,由于

可能存在差异
  • 计算机\操作系统配置和驱动程序
  • 加载虚拟机主机。

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

根据虚拟化技术,主机可能无法在特定时间保证客户端资源。这可能会导致客户端出现奇怪的行为。由于IO超时导致内存不足,您可能会看到更多应用程序错误。

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