1

假設我有一段可以在OS上正常運行的代碼。現在,如果我在虛擬機(服務器虛擬化)上安裝該操作系統並在該虛擬機上運行該代碼,那麼代碼的行爲有可能不同嗎?在虛擬化服務器上​​運行時,可執行文件的行爲可能會有所不同嗎?

如果是這樣,那麼有什麼先決條件?例如,是否必須編譯機器代碼(換句話說,解釋型語言是安全的?)?它是否必須是某些操作系統指令?特定的虛擬化技術(Xen,KVM,VMware ..)?

此外,有什麼可能的不同行爲?

回答

3

是的。像任何機器一樣,虛擬機只是另一臺計算機(用軟件而不是硬件實現)。

其一,大量的商業應用程序將炸燬當你運行它們的虛擬機上,由於:

  1. 拷貝保護檢測VM
  2. 拷貝保護索具硬件,使用BIOS的無證功能/內核/硬件

其次,虛擬機只是另一臺計算機組成的硬件,而不是電路/染料/微碼/魔法。這意味着VM必須通過直通或仿真來提供仿真硬件。硬件非常多樣的事實會導致各種不同的行爲。還要注意可能缺少驅動程序或加速模擬硬件。

但是當然,典型的商業應用程序例如幾乎不可能依賴於任何硬件細節,因爲它只是調用一些GUI API。

如果解釋語言向某些本地代碼發出調用,所有這些都可能再次發生,那麼解釋型語言只有在「解釋」的範圍內纔是安全的。

有關檢測虛擬機運行情況的示例,請查看this,它只是幾千種檢測虛擬機的方法之一。

0

理論上,程序的運行方式應該與物理機器上的完全相同。

然而在實踐中,有可能是由於

  • 機\ OS配置和差異驅動
  • 加載虛擬機主機的。

機器配置的差異與您在任何不同的物理機器之間看到的差異類似。根據應用程序對最終用戶的重要程度,您應該運行相同的一組測試,以確定環境是否可以使用。

根據虛擬化技術的不同,主機可能不具備在特定時間保證客戶端資源的能力。這可能會導致客戶端上的怪異行爲。由於IO超時而導致內存不足,可能會出現更多的應用程序錯誤。

要成功虛擬化生產應用程序,您需要做一些工作來了解application \ client和虛擬主機的資源配置文件。

相關問題