《KVM虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件1第五章_第1頁
《KVM虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件1第五章_第2頁
《KVM虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件1第五章_第3頁
《KVM虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件1第五章_第4頁
《KVM虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件1第五章_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

KVM內(nèi)核模塊解析KVM內(nèi)核模塊組成概述KVMAPIKVM內(nèi)核模塊重要的數(shù)據(jù)結(jié)構(gòu)5KVM內(nèi)核模塊重要流程的分析第5章KVM內(nèi)核模塊解析5.1KVM內(nèi)核模塊組成概述5.1.1Makefile文件分析KVM內(nèi)核模塊從Linux2.6.20版本開始已經(jīng)被收入到內(nèi)核樹中,在源碼中涉及KVM的主要有兩個(gè)目錄,virt和arch/x86/kvm。virt目錄主要包含內(nèi)核中非硬件體系架構(gòu)相關(guān)的部分如IOMMU、中斷控制等,其他的主要部分都包含在后者。因?yàn)镵VM除了支持x86架構(gòu)以外,還支持PowerPC、MIPS、ARM等架構(gòu)。5.1.2KVM的內(nèi)核源碼結(jié)構(gòu)KVM的基本工作原理:

用戶模式的QEMU利用接口libkvm通過ioctl系統(tǒng)調(diào)用進(jìn)入內(nèi)核模式。KVMDriver為虛擬機(jī)創(chuàng)建虛擬內(nèi)存和虛擬CPU后執(zhí)行VMLAUNCH指令進(jìn)入客戶模式,裝載GuestOS且執(zhí)行。如果GuestOS發(fā)生外部中斷或者影子頁表缺頁之類的情況,暫停GuestOS的執(zhí)行,退出客戶模式進(jìn)行一些必要的處理。處理完畢后重新進(jìn)入客戶模式,執(zhí)行客戶代碼。如果發(fā)生I/O事件或者信號(hào)隊(duì)列中有信號(hào)到達(dá),就會(huì)進(jìn)入用戶模式處理。KVM采用全虛擬化技術(shù),客戶機(jī)不用修改就可以運(yùn)行。第5章KVM內(nèi)核模塊解析圖5-1KVM工作原理第5章KVM內(nèi)核模塊解析KVM內(nèi)核模塊的實(shí)現(xiàn)主要包括三大部分:虛擬機(jī)的調(diào)度執(zhí)行、內(nèi)存管理、設(shè)備管理。KVM中的GuestOS的調(diào)度執(zhí)行

VMM調(diào)度GuestOS執(zhí)行時(shí),QEMU通過ioctl系統(tǒng)調(diào)用進(jìn)入內(nèi)核模式,在KVMDriver中通過get_cpu獲得當(dāng)前物理CPU的引用。之后將GuestOS狀態(tài)從VMCS(VirtualMachineControlStructure)中讀出,并裝入物理CPU中。執(zhí)行VMLAUNCH指令使得物理處理器進(jìn)入非內(nèi)核態(tài),然后運(yùn)行客戶代碼。第5章KVM內(nèi)核模塊解析GuestOS執(zhí)行一些特權(quán)指令或者外部事件時(shí),比如I/O訪問、對控制寄存器的操作、MSR(MicrosoftReservedPartition)的讀寫數(shù)據(jù)包到達(dá)等,都會(huì)導(dǎo)致物理CPU發(fā)生VMExit,停止運(yùn)行GuestOS代碼。將GuestOS保存到VMCS中,Host狀態(tài)裝入物理處理器中,處理器進(jìn)入內(nèi)核態(tài),KVM取得控制權(quán),通過讀取VMCS中VM_EXIT_REASON字段得到引起VMExit的原因,從而調(diào)用kvm_exit_handler處理函數(shù)。如果由于I/O獲得信號(hào)到達(dá),則退出到用戶模式的QEMU進(jìn)行處理。處理完畢后,重新進(jìn)入客戶模式運(yùn)行虛擬CPU。第5章KVM內(nèi)核模塊解析KVM中的內(nèi)存管理在KVM中提供了一個(gè)哈希列表和哈希函數(shù),以客戶機(jī)頁表項(xiàng)中的虛擬頁號(hào)和該頁表項(xiàng)所在頁表的級(jí)別作為鍵值,通過該鍵值查詢,如不為空,則表示該對應(yīng)的影子頁表項(xiàng)中的物理頁號(hào)已經(jīng)存在并且所指向的影子頁表已經(jīng)生成。如為空,則需新生成一張影子頁表,KVM將獲取指向該影子頁表的主機(jī)物理頁號(hào)填充到相應(yīng)的影子頁表項(xiàng)的內(nèi)容中,同時(shí)以客戶機(jī)頁表虛擬頁號(hào)和表所在的級(jí)別生成鍵值,在代表該鍵值的哈希表中填入主機(jī)物理頁號(hào),以備查詢。但是一旦GuestOS中出現(xiàn)進(jìn)程切換。第5章KVM內(nèi)核模塊解析KVM中的設(shè)備管理

一個(gè)機(jī)器只有一套I/O地址和設(shè)備。設(shè)備的管理和訪問是操作系統(tǒng)中的突出問題,同樣也是虛擬機(jī)實(shí)現(xiàn)的難題,另外還要提供虛擬設(shè)備供各個(gè)VM使用。在KVM中通過移植QEMU中的設(shè)備模型進(jìn)行設(shè)備的管理和訪問。操作系統(tǒng)中,軟件使用可編程I/O(ProgrammableInput/Output,PIO)和內(nèi)存映射I/O(MemoryMappingInput/Output,MMIO)與硬件交互。而且硬件可以發(fā)出中斷請求,由操作系統(tǒng)處理。第5章KVM內(nèi)核模塊解析PIO的捕獲:由硬件直接提供。當(dāng)VM發(fā)出PIO指令時(shí),導(dǎo)致VMExit然后硬件會(huì)將VMExit的原因及對應(yīng)的指令寫入VMCS控制結(jié)構(gòu)中,這樣KVM就會(huì)模擬PIO指令。MMIO的捕獲:對MMIO頁的訪問導(dǎo)致缺頁異常,被KVM捕獲,通過x86模擬器模擬執(zhí)行MMIO指令。KVM中的I/O虛擬化都是通過用戶空間的QEMU實(shí)現(xiàn)的,而所有PIO和MMIO的訪問也都是被轉(zhuǎn)發(fā)到QEMU的,QEMU模擬硬件設(shè)備提供給虛擬機(jī)使用。

第5章KVM內(nèi)核模塊解析圖5-2KVMI/O模型第5章KVM內(nèi)核模塊解析例:以虛擬機(jī)接收數(shù)據(jù)包說明虛擬機(jī)和設(shè)備的交互(1)當(dāng)數(shù)據(jù)包到達(dá)主機(jī)的物理網(wǎng)卡后,調(diào)用物理網(wǎng)卡的驅(qū)動(dòng)程序,在其中利用Linux內(nèi)核中軟件網(wǎng)橋,實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā)。(2)在軟件網(wǎng)橋這一層,會(huì)判斷數(shù)據(jù)包是發(fā)往哪個(gè)設(shè)備的,同時(shí)調(diào)用網(wǎng)橋的發(fā)送函數(shù),向?qū)?yīng)的端口發(fā)送數(shù)據(jù)包。(3)若數(shù)據(jù)包是發(fā)往虛擬機(jī)的,則要通過tap設(shè)備進(jìn)行轉(zhuǎn)發(fā)。tap設(shè)備由兩部分組成,網(wǎng)絡(luò)設(shè)備和字符設(shè)備。網(wǎng)絡(luò)設(shè)備負(fù)責(zé)接收和發(fā)送數(shù)據(jù)包,字符設(shè)備負(fù)責(zé)將數(shù)據(jù)包往內(nèi)核空間和用戶空間進(jìn)行轉(zhuǎn)發(fā)。第5章KVM內(nèi)核模塊解析(4)返回用戶模式的QEMU中,執(zhí)行設(shè)備模型。返回到KVMmain_loop中,執(zhí)行KVMmain_loop_wait,之后進(jìn)入main_loop_wait中,在這個(gè)函數(shù)里收集對應(yīng)設(shè)備的設(shè)備文件描述符的狀態(tài),此時(shí)tap設(shè)備文件描述符的狀態(tài)同樣被收集到fd_set。(5)

KVM中的main_loop不停地循環(huán),通過select系統(tǒng)調(diào)用判斷哪個(gè)文件描述符的狀態(tài)發(fā)生變化,相應(yīng)地調(diào)用對應(yīng)的處理函數(shù)。第5章KVM內(nèi)核模塊解析5.2KVM

API5.2.1KVMAPI簡介表5-1KVMAPI的三種類型第5章KVM內(nèi)核模塊解析

用戶態(tài)程序?qū)VMAPI的操作是從打開kvm設(shè)備文件開始的,通過調(diào)用open函數(shù)會(huì)獲得針對kvm模塊的一個(gè)句柄,這個(gè)句柄其實(shí)是文件描述符。在系統(tǒng)調(diào)用ioctl執(zhí)行的時(shí)候,文件描述符指定當(dāng)前設(shè)備為/dev/kvm。ioctl配合特定的控制命令告訴kvm字符設(shè)備進(jìn)行特定的操作,比如,KVM_CREATE_VM指令字表示創(chuàng)建一個(gè)虛擬機(jī)同時(shí)會(huì)返回此虛擬機(jī)對應(yīng)的fd文件描述符,利用此fd文件描述符可以執(zhí)行VM指令,對具體的虛擬機(jī)進(jìn)行控制。例如KVM_CREATE_VCPU指令字表示創(chuàng)建一個(gè)虛擬CPU并且返回此vCPU對應(yīng)的fd文件描述符。第5章KVM內(nèi)核模塊解析5.2.2KVMAPI中的結(jié)構(gòu)體

用戶空間的程序與KVM的交互中關(guān)于KVMHypervisor和GuestOS的查詢與管理,是通過使用ioctl函數(shù)與一個(gè)特殊的設(shè)備/dev/kvm之間的交互來實(shí)現(xiàn)的。KVMAPI就是一些可以用于控制虛擬機(jī)各個(gè)方面的ioctl的集合。用戶空間的程序可以通過KVMAPI獲得KVM的版本信息、創(chuàng)建虛擬機(jī)、創(chuàng)建VCPU、查詢KVM的特性支持和性能容量,而KVMAPI是通過符合Linux標(biāo)準(zhǔn)的一系列結(jié)構(gòu)體進(jìn)行支撐,主要是kvm_device_fops、kvm_vm_fops、kvm_vcpu_fops,分別對應(yīng)字符型設(shè)備、VM文件描述符和vCPU文件描述符的三種操作,結(jié)構(gòu)體都是標(biāo)準(zhǔn)file_operations結(jié)構(gòu)體。第5章KVM內(nèi)核模塊解析5.2.3Systemioctl調(diào)用ioctl是設(shè)備驅(qū)動(dòng)程序中對設(shè)備的I/O通道進(jìn)行管理的函數(shù)。所謂對I/O通道進(jìn)行管理,就是對設(shè)備的一些特性進(jìn)行控制,例如串口的傳輸波特率、電動(dòng)機(jī)的轉(zhuǎn)速,等等。它的調(diào)用參數(shù)如下:intioctl(intfd,indcmd,…);

其中,fd是用戶程序打開設(shè)備時(shí)使用open函數(shù)返回的文件標(biāo)示符,cmd是用戶程序?qū)υO(shè)備的控制命令,至于后面的省略號(hào),那是一些補(bǔ)充參數(shù),一般最多一個(gè),這個(gè)參數(shù)的有無和cmd的意義相關(guān)。第5章KVM內(nèi)核模塊解析主要的指令字包括:(1)?KVM_CREATE_VM創(chuàng)建KVM虛擬機(jī)。(2)?KVM_GET_API_VERSION查詢當(dāng)前KVMAPI版本。(3)?KVM_GET_MSR_INDEX_LIST獲得MSR索引列表。(4)?KVM_CHECK_EXTENSION檢查擴(kuò)展支持情況。(5)

KVM_GET_VCPU_MMAP_SIZE運(yùn)行虛擬機(jī)及獲得用戶態(tài)空間共享的一片內(nèi)存區(qū)域的大小。(6)?KVM_GET_VCPU_MMAP_SIZE也是其中比較重要的指令字,返回vCPUmmap區(qū)域的大小。第5章KVM內(nèi)核模塊解析(7)?KVM_CREATE_VM是其中比較重要的指令字。通過該參數(shù),KVM將返回虛擬機(jī)對應(yīng)的一個(gè)文件描述符,文件描述符指向內(nèi)核空間中一個(gè)新的虛擬機(jī)。(8)?KVM_RUNioctl通過共享的內(nèi)存區(qū)域與用戶空間進(jìn)行通信。(9)?KVM_CHECK_EXTENSION如果支持的話返回1,不支持的話返回0。(10)?KVM_GET_API_VERSION返回常量KVM_API_VERSION(=?12),此指令字會(huì)將API版本作為穩(wěn)定的KVMAPI,并且這個(gè)版本號(hào)的數(shù)字不會(huì)發(fā)生變化。如果通過KVM_GET_API_VERSION得到的版本號(hào)不是12,那么應(yīng)用程序?qū)⒕芙^運(yùn)行。第5章KVM內(nèi)核模塊解析5.2.4VMioctl調(diào)用VMioctl指令實(shí)現(xiàn)對虛擬機(jī)的控制,大多需要從KVM_CREATE_VM中返回的fd來進(jìn)行操作,具體操作包括:配置內(nèi)存、配置vCPU、運(yùn)行虛擬機(jī)等,主要指令如下:(1)?KVM_CREATE_VCPU為虛擬機(jī)創(chuàng)建vCPU。(2)?KVM_RUN根據(jù)kvm_run結(jié)構(gòu)體信息,運(yùn)行VM虛擬機(jī)。(3)?KVM_CREATE_IRQCHIP創(chuàng)建虛擬APIC,且隨后創(chuàng)建的vCPU都關(guān)聯(lián)到此APIC。(4)?KVM_IRQ_LINE對某虛擬APIC發(fā)出中斷信號(hào)。第5章KVM內(nèi)核模塊解析(5)?KVM_GET_IRQCHIP讀取APIC的中斷標(biāo)志信息。(6)?KVM_SET_IRQCHIP寫入APIC的中斷標(biāo)志信息。(7)?KVM_GET_DIRTY_LOG返回臟內(nèi)存頁的位圖。(8)?KVM_CREATE_VCPU和KVM_RUN是VMioctl指令中兩種重要的指令字,通過KVM_CREATE_VCPU為虛擬機(jī)創(chuàng)建vCPU,并獲得對應(yīng)的fd描述符后,可以對其調(diào)用KVM_RUN,以啟動(dòng)該虛擬機(jī)(或稱為調(diào)度vCPU)。第5章KVM內(nèi)核模塊解析5.2.5vCPUioctl調(diào)用表5-3vCPUioctl指令字(中斷和控制類)第5章KVM內(nèi)核模塊解析5.3KVM

內(nèi)核模塊重要的數(shù)據(jù)結(jié)構(gòu)5.3.1kvm結(jié)構(gòu)KVM虛擬機(jī)通過使用?/dev/kvm字符設(shè)備的ioctl的System指令KVM_CREATE_VM來進(jìn)行創(chuàng)建。對虛擬機(jī)來說,kvm結(jié)構(gòu)體是關(guān)鍵,一個(gè)虛擬機(jī)對應(yīng)一個(gè)kvm結(jié)構(gòu)體,虛擬機(jī)的創(chuàng)建過程實(shí)質(zhì)為kvm結(jié)構(gòu)體的創(chuàng)建和初始化過程。第5章KVM內(nèi)核模塊解析5.3.2kvm_vcpu結(jié)構(gòu)體

在用戶通過KVM_CREATE_VCPU系統(tǒng)調(diào)用請求創(chuàng)建vCPU之后,KVM子模塊將創(chuàng)建kvm_vcpu結(jié)構(gòu)體并進(jìn)行相應(yīng)的初始化操作,然后返回對應(yīng)的vcpu_fd描述符。在KVM的內(nèi)部虛擬機(jī)調(diào)度中,用kvm_vcpu和KVM中的相關(guān)數(shù)據(jù)進(jìn)行操作。kvm_vcpu結(jié)構(gòu)體中的字段較多,其中重要的成員如下:intvcpu_id;對應(yīng)vCPU的ID。第5章KVM內(nèi)核模塊解析5.3.3kvm_x86_ops結(jié)構(gòu)體kvm_x86_ops結(jié)構(gòu)體中包含了針對具體的CPU架構(gòu)進(jìn)行虛擬化時(shí)的函數(shù)指針的調(diào)用,其定義在Linux內(nèi)核文件的arch/x86/include/asm/kvm_host.h中。該結(jié)構(gòu)體主要包含以下幾種類型的操作:(1)?CPUVMM狀態(tài)硬件初始化。(2)?vCPU創(chuàng)建與管理。(3)中斷管理。(4)寄存器管理。(5)時(shí)鐘管理。第5章KVM內(nèi)核模塊解析5.4KVM

內(nèi)核模塊重要流程的分析

作為VMM,KVM分為兩部分,分別是運(yùn)行于Kernel模式的KVM內(nèi)核模塊和運(yùn)行于User模式的QEMU模塊。這里的Kernel模式和User模式,實(shí)際上指的是VMX(一種針對虛擬化的CPU指令集)根模式下的特權(quán)級(jí)0和特權(quán)級(jí)3。另外,KVM將虛擬機(jī)所在的運(yùn)行模式稱為Guest模式。所謂Guest模式,實(shí)際上指的是VMX的非根模式,其中內(nèi)核模塊的重要流程都在對應(yīng)根模式下面,主要的執(zhí)行流程圖如圖5-4所示。第5章KVM內(nèi)核模塊解析圖5-4KVM重要工作流程圖第5章KVM內(nèi)核模塊解析KVM工作流程:

初始化工作完成之后,QEMU線程以ioctl的方式向KVM內(nèi)核模塊發(fā)出運(yùn)行vCPU的指示,后者執(zhí)行VMentry操作,將處理器由Kernel模式切換到Guest模式,中止宿主機(jī)軟件,轉(zhuǎn)而運(yùn)行客戶軟件。注意,宿主機(jī)軟件被中止時(shí),此操作正處于QEMU線程上下文,且正在執(zhí)行ioctl系統(tǒng)調(diào)用的Kernel模式處理程序??蛻糗浖谶\(yùn)行過程中,如發(fā)生異?;蛲獠恐袛嗟仁录?,若執(zhí)行I/O操作,可能導(dǎo)致VMexit,將處理器狀態(tài)由Guest模式切換回Kernel模式。第5章KVM內(nèi)核模塊解析5.4.1初始化流程KVM模塊分為三個(gè)主要模塊:kvm.ko、kvm-intel.ko和kvm-amd.ko,這三個(gè)模塊在初始化階段的流程如圖5-5所示。

圖5-5KVM模塊初始化流程圖第5章KVM內(nèi)核模塊解析圖5-6KVM初始化執(zhí)行流程圖第5章KVM內(nèi)核模塊解析KVM的初始化步驟分為以下三步:(1)在平臺(tái)相關(guān)的KVM模塊中通過module_init宏正式進(jìn)入KVM的初始化階段,并且執(zhí)行相關(guān)的硬件初始化準(zhǔn)備。(2)進(jìn)入kvm_main.c中的kvm_init函數(shù)進(jìn)行正式的初始化工作,期間進(jìn)行了一系列子操作。通過kvm_arch_init函數(shù)初始化KVM內(nèi)部的一些數(shù)據(jù)結(jié)構(gòu):注冊全局變量kvm_x86_ops、初始化MMU等數(shù)據(jù)結(jié)構(gòu)、初始化Timer定時(shí)器架構(gòu)。(3)進(jìn)行后續(xù)的硬件初始化準(zhǔn)備操作。第5章KVM內(nèi)核模塊解析圖5-7函數(shù)鏈表ModuleTypeList關(guān)系圖第5章KVM內(nèi)核模塊解析5.4.2虛擬機(jī)的創(chuàng)建KVM虛擬機(jī)創(chuàng)建和運(yùn)行虛擬機(jī)分為用戶態(tài)和核心態(tài)兩個(gè)部分,用戶態(tài)主要提供應(yīng)用程序接口,為虛擬機(jī)創(chuàng)建上下文環(huán)境,在libkvm中提供訪問內(nèi)核字符設(shè)備/dev/kvm的接口;內(nèi)核態(tài)為添加到內(nèi)核中的字符設(shè)備?/dev/kvm,模塊加載進(jìn)內(nèi)核后即可進(jìn)行用戶空間的接口調(diào)用去創(chuàng)建虛擬機(jī)。在創(chuàng)建虛擬機(jī)過程中,kvm字符設(shè)備主要為客戶機(jī)創(chuàng)建kvm數(shù)據(jù)結(jié)構(gòu),創(chuàng)建該虛擬機(jī)的文件描述符及其相應(yīng)的數(shù)據(jù)結(jié)構(gòu),以及創(chuàng)建虛擬處理器及其相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。KVM創(chuàng)建虛擬機(jī)的流程如圖5-8所示。第5章KVM內(nèi)核模塊解析圖5-8KVM創(chuàng)建虛擬機(jī)的流程圖第5章KVM內(nèi)核模塊解析創(chuàng)建虛擬機(jī)的流程:

首先聲明一個(gè)kvm_context_t變量用以描述用戶態(tài)虛擬機(jī)上下文信息,然后調(diào)用kvm_init()函數(shù)初始化虛擬機(jī)上下文信息;函數(shù)kvm_create()創(chuàng)建虛擬機(jī)實(shí)例,該函數(shù)通過ioctl系統(tǒng)調(diào)用創(chuàng)建虛擬機(jī)相關(guān)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)并且返回虛擬機(jī)文件描述符給用戶態(tài)kvm_context_t數(shù)據(jù)結(jié)構(gòu);創(chuàng)建完內(nèi)核虛擬機(jī)數(shù)據(jù)結(jié)構(gòu)后,再創(chuàng)建內(nèi)核pit以及mmio等基本外設(shè)模擬設(shè)備,然后調(diào)用kvm_create_vcpu()函數(shù)來創(chuàng)建虛擬處理器。第5章KVM內(nèi)核模塊解析創(chuàng)建虛擬機(jī)過程涉及的函數(shù):(1)函數(shù)kvm_init():該函數(shù)在用戶態(tài)創(chuàng)建一個(gè)虛擬機(jī)上下文,用以在用戶態(tài)保存基本的虛擬機(jī)信息,這個(gè)函數(shù)是創(chuàng)建虛擬機(jī)第一個(gè)需要調(diào)用的函數(shù),函數(shù)返回一個(gè)kvm_context_t結(jié)構(gòu)體。該函數(shù)原型為:kvm_context_tkvm_init(structkvm_callbacks*callbacks,void*opaque);函數(shù)執(zhí)行的基本過程:打開字符設(shè)備dev/kvm,申請?zhí)摂M機(jī)上下文變量空間,初始化上下文的基本信息:設(shè)置fd文件描述符指向/dev/kvm、禁用虛擬機(jī)文件描述符、設(shè)置I/O事件回調(diào)函數(shù)結(jié)構(gòu)體、設(shè)置IRQ和PIT的標(biāo)志位以及內(nèi)存頁面記錄的標(biāo)志位。第5章KVM內(nèi)核模塊解析(2)函數(shù)kvm_create():該函數(shù)主要用于創(chuàng)建一個(gè)虛擬機(jī)內(nèi)核環(huán)境。該函數(shù)原型為intkvm_create(kvm_context_tkvm,unsignedlongphys_mem_bytes,void**phys_mem);這個(gè)函數(shù)首先調(diào)用kvm_create_vm()分配IRQ并且初始化為0,設(shè)置vcpu[0]的值為?-1,即不允許調(diào)度虛擬機(jī)執(zhí)行。然后通過ioctl系統(tǒng)調(diào)用ioctl(fd,KVM_CREATE_VM,0)來創(chuàng)建虛擬機(jī)內(nèi)核數(shù)據(jù)結(jié)構(gòu)structkvm。第5章KVM內(nèi)核模塊解析(3)內(nèi)核創(chuàng)建虛擬機(jī)kvm對象后,接著調(diào)用kvm_arch_create函數(shù)用于創(chuàng)建一些體系結(jié)構(gòu)相關(guān)的信息,主要包括kvm_init_tss、kvm_create_pit以及kvm_init_coalsced_mmio等信息。然后調(diào)用kvm_create_phys_mem創(chuàng)建物理內(nèi)存,函數(shù)kvm_create_irqchip用于創(chuàng)建內(nèi)核irq信息,通過系統(tǒng)調(diào)用ioctl(kvm->vm_fd,KVM_CREATE_IRQCHIP)。第5章KVM內(nèi)核模塊解析(4)函數(shù)kvm_create_vcpu():用于創(chuàng)建虛擬處理器。該函數(shù)原型為intkvm_create_vcpu(kvm_context_tkvm,intslot);參數(shù):kvm表示對應(yīng)用戶態(tài)虛擬機(jī)上下文,slot表示需要?jiǎng)?chuàng)建的虛擬處理器的個(gè)數(shù)。該函數(shù)通過ioctl系統(tǒng)調(diào)用ioctl(kvm->vm_fd,KVM_CREATE_VCPU,slot)創(chuàng)建屬于該虛擬機(jī)的虛擬處理器。該系統(tǒng)調(diào)用函數(shù):staticinitkvm_vm_ioctl_create_vcpu(struct*kvm,n)參數(shù)kvm為內(nèi)核虛擬機(jī)實(shí)例數(shù)據(jù)結(jié)構(gòu),n為創(chuàng)建的虛擬CPU的數(shù)目。第5章KVM內(nèi)核模塊解析(5)函數(shù)kvm_create_phys_mem():用于創(chuàng)建虛擬機(jī)內(nèi)存空間。該函數(shù)原型為void*kvm_create_phys_mem(kvm_context_tkvm,unsignedlongphys_start,unsignedlen,intlog,i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論