虛擬機和和沙盒具有很多相同的特點,因而容易混淆。在討論虛擬機和沙盒區(qū)別之前,我們先來看下一般計算機的大致結構(在一個很高的抽象層次上)。
一般的計算機結構:

從圖1-1可以看出,操作系統(tǒng)operation system(簡稱os)windows作為應用程序application和硬件hardware的驅動程序driver的橋梁。application運行在windows之上并通過windows與用戶user和機器硬件進行“互動”(在操作系統(tǒng)出現之前只有專業(yè)人員會操作計算機,正是因為有了操作系統(tǒng)的出現,普通人也能夠操作計算機)。此外,操作系統(tǒng)負責訪問硬盤上的文件資源,并通過驅動程序來控制機器硬件。驅動程序有很多,針對不同的硬件需要配置不同的驅動程序。
沙盒sandbox:
沙盒的特點在于很好的系統(tǒng)隔離性。在某種程度上,沙盒sandbox可以視為一個容器container,application運行在沙盒中,沙盒運行在windows操作系統(tǒng)上。運行在沙盒中的application和沙盒外的application一樣可以訪問硬盤中的文件等資源。運行在沙盒中的application和沙盒外的application的主要區(qū)別在于:
1. 對于沙盒外的application而言,沙盒內的application是透明的(即不可見的);
2. 當沙盒內的application退出后,所做的更改將不會被保存。
一個很好的例子是:當沙盒內的application退出后,沙盒內的application已下載或“安裝”的惡意軟件都將被丟棄。
虛擬機virtual machine:
虛擬機簡稱VM,其本質上是一個運行在操作系統(tǒng)之上的application,其特殊之處在于,虛擬機通過軟件的方法模擬出一個完整獨立的計算機的環(huán)境(但是并不是真是的計算機環(huán)境),這也是虛擬機名字的由來。因此,虛擬機就像是真實計算機的一個copy副本,虛擬機可以視為“機器內部的機器”。比如我們經常在windows操作系統(tǒng)上安裝一個linux虛擬機,在這種情況下windows被稱為host,linux被稱為guest,一個host上可以安裝多個guest虛擬機,就像是一個windows上可以安裝多個application。
帶有sandbox的計算機結構:

運行在沙盒中的application和沙盒外的application共享機器的存儲內存和計算資源。
帶有虛擬機的計算機結構:

在一個虛擬機內部,可以安裝很多個application,這些application可以使用虛擬機內部的資源,包括虛擬硬盤和計算資源。此外虛擬機內部可以享有屬于自身的驅動程序,因此虛擬機是作為一個application,利用真是的硬件資源來模擬了屬于自己的硬件資源和軟件環(huán)境。因此當虛擬機退出后,發(fā)生在虛擬機內部的更改(包括下載、設置、更新、安裝等操作)會被保存下來。
帶有多個虛擬機的計算機結構:

經過上面的討論,我們可以看出虛擬機和沙盒的主要區(qū)別在于:
1. 當沙盒中的應用程序退出后,其所做的更改會被丟棄;而當虛擬機退出后,其所做的更改會被保存下來;
2. 沙盒中的application和其他application共享機器的硬件資源;而虛擬機在安裝時需要為其指定內存memory和cpu核且虛擬機不和其他application共享硬件資源。因此虛擬機實際上是很耗系統(tǒng)資源的。