什麼是 Virtualization?隨著 Cloud Computing 興起,這成為最近很紅的一個字。

說到 Virtualization, 其實對於程式設計師應該至少聽過下面其中一個詞,
Java VM, Dalvik VM, Apple Rosetta, Transmeta Crusoe, VMWare ESXi,
VMWare Workstation, Xen, KVM, Parallels Desktop … etc

這些都是 VM, 差別在於某些部分是 Process VM 有些是 System VM!

Process VM ? System VM ?
Process VM: 只模擬一個 Process 的行為,可能是為了支援舊 Architecture 上的 Application ex: Apple Rosetta,也可能是為了可以在多個平台上執行 ex: Java

System VM: 模擬的是一個完整的 OS, 需要更複雜的處理 ex: VMWare, Xen, KVM

System VM
在 System VM 又分為,Hypervisor 及 Hosted VM 兩種形式。
前者是直接將 VMM(註1) 建立在硬體之上 ex: VMWare ESXi
後者則是將 VMM 建立在一個 OS 上,ex: VMWare Workstation, KVM

Popek and Goldberg Theorem
Gerald J. Popek 跟 Robert P. Goldberg 在 1974 年發表了一篇文章(註2),
說到 Virtualization 需要擁有三個特性
* Equivalence – 執行結果需與直接在機器上執行相同
* Resource control – 需要控管所有 VM 的 Resource
* Efficiency   – 要有效率, 盡量 Native Execution

Virtualizable
說到第三個 Property Efficiency, 要盡量讓程式碼在機器上 Native Execution,
可是又要做到 Resource Control, 這時會探討一個 Architecture 是否 Virtualizable
探討這個問題,我們將 Instruction 分類
* Privileged Instruction – 需要權限才能執行,若在 user mode 會發生 trap
* Sensitive Instruction – 會控制到硬體狀態的指令,ex: 更換硬體 mode
* Critical Instruction – Sensitive but non-privileged instruction

在這張圖中,最需要在意的是 粉紅色的 Critical Instructions,
倘若所有 Sensitive Instruction 皆為 Privileged Instruction
那 Virtualization 的問題會簡單很多,因為所有要控制硬體的指令皆會發生 Trap
此時我們就可稱呼這個 Architecture Virtualizable。
但不巧的是 X86, ARM 皆不是此種類型,所以 Critical Instruction handling
就成為做 Virtualization 時需要煩惱的問題。

在 Intel CPU 上,提出了 Intel-VT 的 Hardware Support 技術。
而 ARM 2012 推出的 Cortex A15 也將支援 Virtualization Hardware Support。
不難看出 Virtualization 的重要性越來越高!


註1:VMM = Virtual Machine Monitor, 負責管理 VM 的 Resource, VM 中要存取硬體上的資源時,理論上皆需經由 VMM 來控管,故有些 Security 的問題可以經由 VMM 來處理。
註2:Formal requirements for virtualizable third generation architectures, Published in: Communications of the ACM (Magazine) Volume 17 Issue 7, July 1974

廣告