VMware

歷史

1998年，黛安·格林、孟德爾·羅森布拉姆、斯科特·迪瓦恩、王艾倫和愛德華•比尼翁創立了VMware。格林和羅森布拉姆在加州大學伯克利分校首次見面。愛德華•比尼翁擔任VMware的首席架構師和CTO，直至2005年前去為Nuova系統服務（現在思科的一部分）。
2019年8月22日VMware分別以21億美元和27億美元收購網路安全公司Carbon Black和Pivotal

VMware Workstation

VMware Workstation是VMware公司銷售的商業軟體產品之一。該工作站軟體包含一個用於英特爾x86相容電腦的虛擬機器套裝，其允許用戶同時建立和執行多個x86虛擬機器。每個虛擬機器可以執行其安裝的作業系統，如（但不限於）Windows、Linux、BSD變生版本。用簡單術語來描述就是，VMware Workstation允許一台真實的電腦在一個作業系統中同時開啟並執行數個作業系統，其它VMware產品幫助在多個宿主電腦之間管理或移植VMware虛擬機器。免費版本為VMware Workstation Player。
VMware官方網站提供多個經過預先組態的作業系統和應用程式的免費虛擬盤映像，這之中有不少是社會募捐的。

VMware Fusion

VMware Fusion是VMware針對Mac電腦推出的一款虛擬機器軟體。

VMware Server

2006年2月6日，VMware發布了VMware Server產品的1.0版本，取代原先的VMware GSX Server。VMware伺服器可以建立、編輯、執行虛擬機器。除了具有可以執行由其它VMware產品建立的虛擬機器的功能外，它還可執行由微軟Virtual PC產品建立的虛擬機器。VMware將VMware伺服器產品作為可免費獲得的產品，這是因為希望用戶們最終能選擇更新至VMware ESX伺服器產品。
VMware不正式支援執行於Windows XP或專業版Windows 2000上的VMware伺服器產品，這不同於VMware工作站產品。然而，已有用戶報告在Windows XP專業版下成功安裝並提供VMware伺服器功能的例子（但有個別限制要求）。VMware提供一個受支援的宿主作業系統的清單。
2010年1月，VMware宣布2011年6月30日結束對VMware Server的支援。

VMware ESX伺服器

ESX伺服器使用了衍生自史丹佛大學開發的SimOS核心，該核心在硬體初始化後替換原啟動的Linux核心。ESX伺服器2.x的服務控制平台（亦稱為「COS」或「vmnix」）是基於Red Hat Linux 7.2的。ESX伺服器3.0的服務控制平台源自一個Red Hat Linux 7.2的經過修改的版本——它是作為一個用來載入vmkernel的啟動載入程式執行的，並提供了各種管理介面（如CLI、瀏覽器介面MUI、遠端控制台）。該虛擬化系統管理的方式提供了更少的管理開銷以及更好的控制和為虛擬機器分配資源時能達到的粒度（指精細的程度）；這也增加了安全性，從而使VMware ESX成為一種企業級產品。

VMware ESXi伺服器

Vmware ESXi是Vmware vSphere 4.1版本開始提供的伺服器系統。相比Vmware ESX，ESXi剔除了基於Red Hat Linux的服務控制平台，使VMware代理可以直接在VMkernel上執行。由於脫離對基於Linux的控制台作業系統的依賴，整個軟體平台的尺寸由ESX的約2GB縮減至不到150MB，並消除了底層Linux系統可能帶來的安全性和穩定性隱患，而獲得授權的第三方模組也可在VMkernel上執行。ESXi同時使用了新的管理控制台PowerCLI。
從Vmware vSphere 5.0版本開始，Vmware不再提供ESX伺服器產品，ESXi成為Vmware產品線中唯一一款伺服器平台產品。

VMware vSphere

VMware vSphere，原稱為VMware Infrastructure，是一整套虛擬化應用產品，包含VMware ESX Server 4、VMware Virtual Center 4.0、最高支援8路的虛擬對稱多處理器（Virtual SMP）和VMotion，以及例如VMware HA、VMware DRS和VMware統一備份服務等分散式服務。VMware國際公司在2009年4月發布了VMware vSphere 4。該套裝提供六個檔次的組合方案

描述

執行VMware工作站行程的電腦和作業系統被稱為宿主機（host）。在一個虛擬機器中執行的作業系統實體被稱為虛擬機器客戶（guest）。類似仿真器，VMware工作站為客戶作業系統提供完全虛擬化的硬體集–例如，客戶機只會檢測到一個AMD PCnet網路配接器，而和宿主機上真正安裝的網路配接器的製造和型號無關。VMware在虛擬環境中將所有裝置虛擬化，包括影片配接器、網路配接器、以及硬碟配接器。它還為USB、串行和並列裝置提供傳遞驅動程式（pass-through drivers，指將對這些虛擬裝置的存取傳遞到真實物理裝置的驅動程式）。
由於與宿主機的真實硬體無關，所有虛擬機器客戶使用相同的硬體驅動程式，虛擬機器實體是對各種電腦高度可移植的。例如，一個執行中的虛擬機器可以被暫停下來，並被拷貝到另外一台作為宿主的真實電腦上，然後從其被暫停的確切位置恢復執行。藉助VMware的VirtualCenter（虛擬機器中心）產品中一種稱為Vmotion的新功能，甚至可以在移動一個虛擬機器時不必將其暫停–就是說現在即使在向不同的宿主機上移植虛擬機器時，這些虛擬機器仍然可以保持執行。

實現

傳統的模擬器，如Bochs，透過調用宿主機上的軟體子程式逐條執行每一道客戶機的CPU指令，以此類比客戶機的微處理器。這種抽象化的方法，可使宿主機類比出不同於自身微處理器的環境，讓客戶機運行。然而這類模擬器運行得非常慢。
一種更有效率的方式是在初次執行客戶機指令時動態地重新編譯那些機器指令塊，以後用到這些指令時直接執行經過翻譯的程式碼。這種方式是由微軟的Virtual PC for Mac OS X產品、以及Fabrice Bellard的QEMU產品（不含KVM附加模組）所使用的方式。
和Virtual PC for Windows產品及帶有kqemu附加模組的QEMU產品一樣，VMware工作站使用了一種更加最佳化的方式，在儘可能的情況下直接執行程式碼，在x86中這是執行用戶模式和虛擬8086模式的程式碼的情況而言。當不能直接執行程式碼時，這幾種軟體產品會動態地重寫程式碼，這是在執行核心級別和真實模式的程式碼的情況而言。在VMware中，經過翻譯的程式碼是被放入記憶體的空閒區域中的，一般是在位址空間的尾部，這個區域可以隨即被保護起來並通過分段機制標記為不可見的。由於這些原因，VMware比仿真器顯著地快，能以超過在真實硬體上執行速度的80%的速度執行虛擬的客戶作業系統。VMware對在執行高強度計算的應用程式時只有小到3%-5%的效能損耗而自豪。
缺點是客戶作業系統的指令程式碼必須和宿主機的CPU相容。因此不同於仿真器，VMware工作站不能用來在一個英特爾x86處理器上執行Mac/PPC軟體。另一個缺點是通常不可能有效率地巢狀使用VMware虛擬機器（指在虛擬機器客戶中執行另一個VMware虛擬機器，即以一個虛擬機器客戶作為宿主機再執行VMware）。最後，儘管VMware虛擬機器是執行於用戶模式下的，VMware工作站宿主程式本身必須在宿主作業系統下安裝多種驅動程式，尤其是為了能動態切換GDT和IDT表。
最後一點說明：經常有人錯誤地認為象VMware或Virtual PC這類虛擬機器產品是替換不良指令或簡單地在用戶模式下執行核心程式碼。這兩種方式都不能用於x86。替換指令的意思可以這麼理解：假設要執行指令試圖讀取該指令本身的程式碼，它會吃驚地發現沒有找到預期的內容。因為實際上不可能在允許指令正常執行的同時又保護其程式碼不被讀取，要實現指令替換是複雜的。在用戶模式下不加改變地執行程式碼同樣也是不可能的，這是因為在用戶模式下，大部分僅讀取機器狀態的指令不產生異常、也不能正確反映程式的真實狀態，此外某些指令的行為會悄悄地有所變化。重寫指令總是必需的；必要時會類比初始位置的目前指令指標，寫死的斷點也特別地會被重新對映。

特點

除了為到網路配接器、CD-ROM讀盤機、硬碟機、以及USB裝置的存取提供橋樑外，VMware工作站還提供類比某些硬體的能力。例如，能將一個ISO檔案作為一張CDROM安裝在系統上、也能將.vmdk檔案作為硬碟機安裝、以及可將網路配接器驅動程式組態為通過宿主電腦使用網路位址轉換（NAT）來存取網路，而非使用與宿主機橋接的方式（該方式為：宿主網路上的每個客戶作業系統必須分配一個IP位址）。
VMware工作站還允許無須將LiveCD燒錄到真正的光碟上、也無須重新啟動電腦，而對這些LiveCD進行測試。還可以捕獲在VMware工作站下執行的某個作業系統的快照。每個快照可以用來在任何時候將虛擬機器回滾到儲存的狀態。這種多快照功能使VMware工作站成為銷售人員演示複雜的軟體產品、開發人員建立虛擬開發和測試環境的非常流行的工具。VMware工作站包含有將多個虛擬機器指定為編隊的能力，編隊可以作為一個物體來開機、關機、掛起和恢復—這使VMware工作站在用於測試用戶端-伺服器環境時特別有用。
VMware公司新的企業級伺服器和工具產品，正在使「將舊的生產伺服器移植到虛擬機器」的做法開始流行，這種做法能幾乎不費力地將多個舊式伺服器集裝到一個單個的新宿主電腦中。