十一月 13, 2009 作者:
sunchiahome
目前虛擬化的做法可以分為三種一是 Paravirtualization 但缺點是 Guest OS 需要經過修改才能使用,所以在 Paravirtualization 下是不可能運作 Windows 系統的.另外一種則是 Full Virtualization 但這作法是將硬體以模擬的方式呈現,所以又會讓 Guest OS 的效能變差.第三種則是讓 CPU 去支援虛擬化 Intel (VT) and AMD (AMD-V) ,因為有 CPU 的支援第一種 Paravirtualization 虛擬化的方式似乎變成多餘了.
這就是 KVM 所支援的方式,直接透過有虛擬化的 CPU 去讓系統支援 Full Virtualization 的 Guest OS.另外一個重點是 KVM 不須獨立的 Linux 核心當 VMM(Virtual Machine Monitor) ,它透過一般 Linux 核心加入 KVM 再讓這 Linux 核心當作 VMM ,直接讓虛擬化帶入到一般核心的世界中.也因此在 KVM 下的 Guest OS 對於 Linux 核心而言都只是一個 Process(行程).
傳統的 Linux 在執行時有以區分為 Kernel mode(supervisor mode) 和 user mode 就如下圖所示:
Linux 的核心(或是其他作業系統的核心)會運作在 Kernel mode(supervisor mode) 而一般的應用程式(Applications) 就運作在 user mode.如果應用程式(Applications)需要硬體資源時就透過 system call 向 kernel 提出請求.讓 Kernel 完成作業.這樣的架構可以確保系統的安全性.請參考 CPU - Ring 的說明
http://benjr.tw/?q=node/216
但是透 Intel (VT) and AMD (AMD-V) 的支援,Linux 的核心(就是 VMM)再加上 KVM 的功能,就可以直接實現虛擬化的環境,其實 KVM 的運作方式和 Xen 的 Full virtualization 類似,除了原本的 Kernel 和 User 模式外還多了一個 Guest mode 模式(這模式可以讓 Guest OS 自己擁有Kernel 和 User 模式),每一個 Virtual Machine 對 Linux 而言就如同一個 Process(行程).
KVM 是由兩個主要的元件(components)所組成:
1.Kernel Device Driver(managing the virtualization hardware) - 用來管理和模擬 Virtual Machine 的硬體
2.User space process - qemu 是一個 PC 硬體模擬器,經過 KVM 的修改過而成為 kqemu
這後面還會針對這兩個最主要的元件做介紹.