版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上Linux 既有良好的靈活性,在虛擬化方面同樣出色。但是最近,隨著內(nèi)核虛擬機(jī)(KVM)的出現(xiàn),Linux 虛擬化的前景發(fā)生了變化。KVM 是構(gòu)成主流 Linux 內(nèi)核(V2.6.20)一部分的第一個(gè)虛擬化解決方案。KVM 支持 Linux 客戶操作系統(tǒng)的虛擬化 甚至支持其硬件對(duì)虛擬化敏感的 Windows 系統(tǒng)的虛擬化。了解 Linux KVM 的架構(gòu)并了解它與內(nèi)核的緊密集成為何會(huì)改變您使用 Linux 的方式。 簡(jiǎn)介 虛擬化 概念很早就已出現(xiàn)。簡(jiǎn)單來(lái)說(shuō),虛擬化就是使用某些程序,并使其看起來(lái)類似于其他程序的過(guò)程。將這個(gè)概念應(yīng)用到計(jì)算機(jī)系統(tǒng)中可以讓不同用戶看到不同的單個(gè)
2、系 統(tǒng)(例如,一臺(tái)計(jì)算機(jī)可以同時(shí)運(yùn)行 Linux 和 Microsoft Windows)。這通常稱為全虛擬化(full virtualization)。 虛擬化也可以使用更加復(fù)雜的格式,其中單個(gè)計(jì)算機(jī)看上去具有多個(gè)架構(gòu)(對(duì)于一個(gè)用戶 來(lái)說(shuō),它是一個(gè)標(biāo)準(zhǔn)的 x86 平臺(tái);對(duì)于另外一個(gè)用戶來(lái)說(shuō),它是 IBM Power PC 平臺(tái))。這種虛擬化形式通常被稱為 硬件仿真。 最后,更加簡(jiǎn)單的一種虛擬化是操作系統(tǒng)虛擬化,其中一臺(tái)計(jì)算機(jī)可以運(yùn)行相同類型的多 個(gè)操作系統(tǒng)。這種虛擬化可以將一個(gè)操作系統(tǒng)的多個(gè)服務(wù)器隔離開來(lái)(這意味著全都必須使用相同類型和版本的操作系統(tǒng))。 虛擬化和準(zhǔn)虛擬化(para-virt
3、ualization) 虛擬化最常使用的兩種方法是全虛擬化 和準(zhǔn)虛擬化。使用全虛擬化,在虛擬化的操作系統(tǒng)和硬件之間存在一個(gè)層,用于決定訪問。這個(gè)層稱為系統(tǒng)管理程序 或虛擬機(jī)監(jiān)視器(VMM)。準(zhǔn)虛擬化與之類似,但是系統(tǒng)管理程序會(huì)以一種更具協(xié)作性的方式進(jìn)行操作。這是因?yàn)槊總€(gè)客戶操作系統(tǒng)都了解自己正在虛擬化模式中 運(yùn)行,因此每個(gè)系統(tǒng)都與系統(tǒng)管理程序協(xié)作,來(lái)實(shí)現(xiàn)底層硬件的虛擬化。 全虛擬化的例子包括商業(yè)虛擬化解決方案 VMware,以及商業(yè) IBM zSeries 計(jì)算機(jī)上使用的 IBM System z9 Virtual Machine(z/VM)操作系統(tǒng)。準(zhǔn)虛擬化的例子有 Xen 和 User-M
4、ode-Linux (UML)。 KVM 也被認(rèn)為是一個(gè)全虛擬化解決方案,不過(guò)我們稍后再介紹這個(gè)問題。 虛擬化的工作原理 我們首先簡(jiǎn)要介紹一下虛擬化技術(shù)及其涉及的元素。虛擬化解決方案的底部是要進(jìn)行虛擬 化的機(jī)器。這臺(tái)機(jī)器可能直接支持虛擬化,也可能不會(huì)直接支持虛擬化;那 么就需要系統(tǒng)管理程序 層的支持。系統(tǒng)管理程序,或稱為 VMM,可以看作是平臺(tái)硬件和操作系統(tǒng)的抽象化。在某些情況中,這個(gè)系統(tǒng)管理程序就是一個(gè)操作系統(tǒng);此時(shí),它就稱為主機(jī)操作系統(tǒng),如 圖 1 所示。 圖 1. 虛擬化的分層抽象系統(tǒng)管理程序之上是客戶機(jī)操作系統(tǒng),也稱為虛擬機(jī)(VM)。這些 VM 都是一些相互隔離的操作系統(tǒng),將底層硬件平
5、臺(tái)視為自己所有。但是實(shí)際上,是系統(tǒng)管理程序?yàn)樗鼈冎圃炝诉@種假象。 目前使用虛擬化解決方案的問題是,并非所有硬件都可以很好地支持虛擬化。較老的 x86 處理器根據(jù)執(zhí)行范圍對(duì)特定指令會(huì)產(chǎn)生不同結(jié)果。這就產(chǎn)生了一個(gè)問題,因?yàn)橄到y(tǒng)管理程序應(yīng)該只能在一個(gè)最受保護(hù)的范圍中執(zhí)行。由于這個(gè)原因,諸如 VMWare 之類的虛擬化解決方案會(huì)提前掃描要執(zhí)行的代碼,從而將這些指令替換為一些陷阱指令(trap instruction),這樣系統(tǒng)管理程序就可以正確地處理它們。Xen 可以支持一種協(xié)作的虛擬化方法,它不需要任何修改,因?yàn)榭蛻魴C(jī)知道自己正在進(jìn)行虛擬化,并已經(jīng)進(jìn)行了修改。KVM 會(huì)簡(jiǎn)單地忽略這個(gè)問題,如果您希望
6、進(jìn)行虛擬化,就強(qiáng)制必須在更新的硬件上運(yùn)行。 剛開始會(huì)覺得這有些不方便,但是考慮到目前上市的較新機(jī)器都可以支持虛擬化(例如 Intel VT 和 AMD SVM),用不了多久,這將成為標(biāo)準(zhǔn)方法而不是少數(shù)例外情況。 KVM 系統(tǒng)管理程序 考慮到虛擬化技術(shù)的發(fā)展時(shí)間并不長(zhǎng),KVM 實(shí)際上還是一種相對(duì)來(lái)說(shuō)比較新的技術(shù)。目前存在各具功能的開源技術(shù),例如 Xen、Bochs、UML、Linux-VServer 和 coLinux,但是 KVM 目前正在被大量使用。另外,KVM 不再僅僅是一個(gè)全虛擬化解決方案,而將成為更大的解決方案的一部分。 KVM 所使用的方法是通過(guò)簡(jiǎn)單地加載內(nèi)核模塊而將 Linux 內(nèi)
7、核轉(zhuǎn)換為一個(gè)系統(tǒng)管理程序。這個(gè)內(nèi)核模塊導(dǎo)出了一個(gè)名為 /dev/kvm 的設(shè)備,它可以啟用內(nèi)核的客戶模式(除了傳統(tǒng)的內(nèi)核模式和用戶模式)。有了 /dev/kvm 設(shè)備,VM 使自己的地址空間獨(dú)立于內(nèi)核或運(yùn)行著的任何其他 VM 的地址空間。設(shè)備樹(/dev)中的設(shè)備對(duì)于所有用戶空間進(jìn)程來(lái)說(shuō)都是通用的。但是每個(gè)打開 /dev/kvm 的進(jìn)程看到的是不同的映射(為了支持 VM 間的隔離)。 KVM 然后會(huì)簡(jiǎn)單地將 Linux 內(nèi)核轉(zhuǎn)換成一個(gè)系統(tǒng)管理程序(在安裝 kvm 內(nèi)核模塊時(shí))。由于標(biāo)準(zhǔn) Linux 內(nèi)核就是一個(gè)系統(tǒng)管理程序,因此它會(huì)從對(duì)標(biāo)準(zhǔn)內(nèi)核的修改中獲益良多(內(nèi)存支持、調(diào)度程序等)。對(duì)這些
8、Linux 組件進(jìn)行優(yōu)化(例如 2.6 版本內(nèi)核中的新 O(1) 調(diào)度程序)都可以讓系統(tǒng)管理程序(主機(jī)操作系統(tǒng))和 Linux 客戶操作系統(tǒng)同時(shí)受益。但是 KVM 并不是第一個(gè)這樣做的程序。UML 很久以前就將 Linux 內(nèi)核轉(zhuǎn)換成一個(gè)系統(tǒng)管理程序了。使用內(nèi)核作為一個(gè)系統(tǒng)管理程序,您就可以啟動(dòng)其他操作系統(tǒng),例如另一個(gè) Linux 內(nèi)核或 Windows 系統(tǒng)。 KVM 安裝 KVM 之后,您可以在用戶空間啟動(dòng)客戶操作系統(tǒng)。每個(gè)客戶操作系統(tǒng)都是主機(jī)操作系統(tǒng)(或系統(tǒng)管理程序)的一個(gè)單個(gè)進(jìn)程。 圖 2 提供了一個(gè)使用 KVM 進(jìn)行虛擬化的視圖。底部是能夠進(jìn)行虛擬化的硬件平臺(tái)(目前指的是 Intel
9、 VT 或 AMD-SVM 處理器)。在裸硬件上運(yùn)行的是系統(tǒng)管理程序(帶有 KVM 模塊的 Linux 內(nèi)核)。這個(gè)系統(tǒng)管理程序與可以運(yùn)行其他應(yīng)用程序的普通 Linux 內(nèi)核類似。但是這個(gè)內(nèi)核也可以支持通過(guò) kvm 工具加載的客戶操作系統(tǒng)。最后,客戶操作系統(tǒng)可以支持主機(jī)操作系統(tǒng)所支持的相同應(yīng)用程序。 圖 2. 使用 KVM 的虛擬化組件記住 KVM 只是虛擬化解決方案的一部分。處理器直接提供了虛擬化支持(可以為多個(gè)操作系統(tǒng)虛擬化處理器)。內(nèi)存可以通過(guò) kvm 進(jìn)行虛擬化(這在下一節(jié)中將會(huì)討論)。最后,I/O 通過(guò)一個(gè)稍加修改的 QEMU 進(jìn)程(執(zhí)行每個(gè)客戶操作系統(tǒng)進(jìn)程的一個(gè)拷貝)進(jìn)行虛擬化。
10、KVM 向 Linux 中引入了一種除現(xiàn)有的內(nèi)核和用戶模式之外的新進(jìn)程模式。這種新模式就稱為客戶 模式,顧名思義,它用來(lái)執(zhí)行客戶操作系統(tǒng)代碼(至少是一部分代碼)?;叵胍幌聝?nèi)核模式表示代碼執(zhí)行的特權(quán)模式,而用戶模式則表示非特權(quán)模式(用于那些運(yùn)行 在內(nèi)核之外的程序)。根據(jù)運(yùn)行內(nèi)容和目的,執(zhí)行模式可以針對(duì)不同的目的進(jìn)行定義??蛻裟J降拇嬖诰褪菫榱藞?zhí)行客戶操作系統(tǒng)代碼,但是只針對(duì)那些非 I/O 的代碼。在客戶模式中有兩種標(biāo)準(zhǔn)模式,因此客戶操作系統(tǒng)在客戶模式中運(yùn)行可以支持標(biāo)準(zhǔn)的內(nèi)核,而在用戶模式下運(yùn)行則支持自己的內(nèi)核和用戶空間應(yīng)用程序???戶操作系統(tǒng)的用戶模式可以用來(lái)執(zhí)行 I/O 操作,這是單獨(dú)進(jìn)行管理
11、的。 在客戶操作系統(tǒng)上執(zhí)行 I/O 的功能是由 QEMU 提供的。QEMU 是一個(gè)平臺(tái)虛擬化解決方案,允許對(duì)一個(gè)完整的 PC 環(huán)境進(jìn)行虛擬化(包括磁盤、圖形適配器和網(wǎng)絡(luò)設(shè)備)??蛻舨僮飨到y(tǒng)所生成的任何 I/O 請(qǐng)求都會(huì)被中途截獲,并重新發(fā)送到 QEMU 進(jìn)程模擬的用戶模式中。 KVM 通過(guò) /dev/kvm 設(shè)備提供了內(nèi)存虛擬化。每個(gè)客戶操作系統(tǒng)都有自己的地址空間,并且是在實(shí)例化客戶操作系統(tǒng)時(shí)映射的。映射給客戶操作系統(tǒng)的物理內(nèi)存實(shí)際上是映射給這個(gè)進(jìn)程 的虛擬內(nèi)存。為了支持客戶物理地址到主機(jī)物理地址的轉(zhuǎn)換,系統(tǒng)維護(hù)了一組影子頁(yè)表(shadow page table)。處理器也可以通過(guò)在訪問未經(jīng)映
12、射的內(nèi)存位置時(shí)使用系統(tǒng)管理程序(主機(jī)內(nèi)核)來(lái)支持內(nèi)存轉(zhuǎn)換進(jìn)程。 實(shí)例化新客戶操作系統(tǒng) 新客戶操作系統(tǒng)的實(shí)例化是由一個(gè)名為 kvm 的工具提供的。這個(gè)工具可以與 kvm 模塊協(xié)同工作,使用 /dev/kvm 來(lái)加載客戶操作系統(tǒng),將它與虛擬磁盤(主機(jī)操作系統(tǒng)中的一個(gè)普通文件)關(guān)聯(lián)起來(lái),然后啟動(dòng)客戶操作系統(tǒng)。 通過(guò)一組在 /dev/kvm 設(shè)備上執(zhí)行的 ioctls 可以提供控制支持。當(dāng)?shù)谝淮未蜷_這個(gè)特殊文件時(shí),就會(huì)創(chuàng)建一個(gè)新的 VM 對(duì)象,它與一個(gè)虛擬 CPU 關(guān)聯(lián)在一起。您然后可以使用幾個(gè) ioctls 來(lái)創(chuàng)建一個(gè)虛擬 CPU,檢查 kvm 版本,創(chuàng)建內(nèi)存區(qū)域,然后啟動(dòng)一個(gè)虛擬 CPU。您可以使
13、用 kvm 命令實(shí)現(xiàn)這種功能。在接下來(lái)的幾節(jié)中,我們將介紹 kvm 命令,并給出幾個(gè)受支持的 ioctls 的示例。 使用 KVM 如果硬件支持的話,使用 KVM 實(shí)際上非常簡(jiǎn)單。您需要一個(gè)具有虛擬化支持的處理器。通過(guò)查看 /proc/cpuinfo 可以知道系統(tǒng)是否支持虛擬化。這個(gè)文件指定了是否支持 vmx(Intel)或 svm(AMD)擴(kuò)展。 接下來(lái),您需要一個(gè)啟用了 KVM 支持的 Linux 內(nèi)核。您可以在 Device Drivers > Virtualization 下的內(nèi)核配置中完成這種配置。還必須啟用處理器對(duì)環(huán)境的支持。另外,還必須具有 kvm 和 qemu 用戶空間應(yīng)
14、用程序。 有了啟用了虛擬化支持的引導(dǎo)內(nèi)核,接下來(lái)的一個(gè)步驟是為客戶操作系統(tǒng)創(chuàng)建一個(gè)磁盤映 像。您可以使用 qeumu-img 來(lái)完成此操作,如下所示。注意這個(gè)映像的大小是 4GB,但是使用 QEMU 的寫時(shí)復(fù)制格式(copy-on-write,qcow)時(shí),整個(gè)文件將根據(jù)需要增長(zhǎng),而不是完全占據(jù)這 4 GB 的空間。 $ qemu-img create -f qcow vm-disk.img 4G 復(fù)制代碼在創(chuàng)建虛擬磁盤之后,就可以將客戶操作系統(tǒng)加載到其上。下面的例子假設(shè)客戶 操作系統(tǒng)是在 CD-ROM 上。除了使用 CD-ROM ISO 映像來(lái)填充虛擬磁盤之外,還必須在結(jié)束時(shí)啟動(dòng)這個(gè)映像。
15、$ kvm -no-acpi -m 384 -cdrom guestos.iso -hda vm-disk.img -boot d 復(fù)制代碼Ari Kivity 已經(jīng)編寫了一組測(cè)試工具來(lái)測(cè)試 KVM,而不需要全部的設(shè)備模型。下面的代碼片斷(來(lái)自于 kvm-12/user/main.c)從較高的層次上查看了 VM 的啟動(dòng)(請(qǐng)參見 清單 1)??刂铺匦允怯蓛?nèi)核中的 ioctls 提供的(具體來(lái)說(shuō),在 ./linux-2.6.20/drivers/kvm/kvm_main.c 文件中)。 對(duì) kvm_init 的調(diào)用會(huì)打開 /dev/kvm 設(shè)備,檢查版本號(hào)(由 KVM 內(nèi)核模塊導(dǎo)出),然后分配一個(gè)
16、 KVM 上下文對(duì)象并填充一些回調(diào)函數(shù)。kvm_create 函數(shù)會(huì)建立并映射兩個(gè)內(nèi)存區(qū)域,然后使用 ioctl(KVM_CREATE_VCPU)創(chuàng)建一個(gè)虛擬 CPU(VCPU)。 load_file 函數(shù)然后會(huì)將映像加載到給定的 VM 的地址空間中,然后調(diào)用 kvm_run 執(zhí)行該 VM(使用 ioctl KVM_RUN)。盡管這個(gè)過(guò)程非常簡(jiǎn)單,但是它解釋了如何使用 KVM 實(shí)例化新客戶操作系統(tǒng)。 清單 1. 測(cè)試 KVM 系統(tǒng)管理程序的應(yīng)用程序片斷 int main() void *vm_mem;kvm = kvm_init(&test_callbacks, 0);if (!kvm
17、) fprintf(stderr, "kvm_init failedn");return 1;if (kvm_create(kvm, 128 * 1024 * 1024, &vm_mem) < 0) kvm_finalize(kvm);fprintf(stderr, "kvm_create failedn");return 1;if (ac > 1)if (strcmp(av1, "-32") != 0)load_file(vm_mem + 0xf0000, av1);elseenter_32(kvm);if (ac > 2)load_file(vm_mem + 0x, av2);kvm_show_regs(kvm, 0);kvm_run(kvm, 0);return 0;KVM 是解決虛擬化問題的一個(gè)有趣的解決方案,但是由于它是第一個(gè)進(jìn)入內(nèi)核的虛擬化解決方案,很難想
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社交電商課程設(shè)計(jì)
- 中國(guó)鎂行業(yè)運(yùn)營(yíng)動(dòng)態(tài)及投資機(jī)遇分析研究報(bào)告(2024-2030版)
- 中國(guó)足部防護(hù)安全鞋企業(yè)競(jìng)爭(zhēng)優(yōu)勢(shì)與投資盈利性研究報(bào)告(2024-2030版)
- 中國(guó)自動(dòng)貼片機(jī)行業(yè)應(yīng)用動(dòng)態(tài)與未來(lái)發(fā)展前景預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國(guó)精密注塑行業(yè)營(yíng)銷趨勢(shì)剖析與企業(yè)前景戰(zhàn)略規(guī)劃研究報(bào)告(2024-2030版)
- 中國(guó)磁能熱水器行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告(2024-2030版)
- 中國(guó)火力發(fā)電行業(yè)發(fā)展?jié)摿εc前景戰(zhàn)略研究研究報(bào)告(2024-2030版)
- 汽車客運(yùn)站優(yōu)化課程設(shè)計(jì)
- 路基路面課程設(shè)計(jì)參考
- 離合器課程設(shè)計(jì)感想
- 注塑產(chǎn)品成本計(jì)算
- 安全意識(shí)遠(yuǎn)離危險(xiǎn)
- 凱樂石行業(yè)分析
- 肺的健康宣教課件
- 《坦克的發(fā)展歷程》課件
- 設(shè)備維保和維保服務(wù)外包
- 2018年公安機(jī)關(guān)人民警察高級(jí)執(zhí)法資格試題
- 電動(dòng)汽車的電控系統(tǒng)
- 安全運(yùn)維堡壘機(jī)部署方案
- 2024屆江蘇省蘇州市立達(dá)中學(xué)數(shù)學(xué)七年級(jí)第二學(xué)期期末綜合測(cè)試試題含解析
- 國(guó)開電大績(jī)效與薪酬實(shí)務(wù)(河北)形考任務(wù)三參考答案
評(píng)論
0/150
提交評(píng)論