欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么解析KVM虛擬化原理中的CPU虛擬化

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)怎么解析KVM虛擬化原理中的CPU虛擬化,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

10多年的寧遠(yuǎn)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整寧遠(yuǎn)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“寧遠(yuǎn)網(wǎng)站設(shè)計(jì)”,“寧遠(yuǎn)網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

CPU 虛擬化簡介

虛擬機(jī)的指令集直接運(yùn)行在宿主機(jī)物理CPU上,當(dāng)虛擬機(jī)中的指令設(shè)計(jì)到IO操作或者一些特殊指令的時(shí)候,控制權(quán)轉(zhuǎn)讓給了宿主機(jī)(這里其實(shí)是轉(zhuǎn)讓給了vm monitor,下面檢查VMM),也就是一個(gè)demo進(jìn)程,他在宿主機(jī)上的表現(xiàn)形式也就是一個(gè)用戶級(jí)進(jìn)程。

用一張圖來解釋更為貼切。

怎么解析KVM虛擬化原理中的CPU虛擬化

VMM完成vCPU,內(nèi)存的初始化后,通過ioctl調(diào)用KVM的接口,完成虛擬機(jī)的創(chuàng)建,并創(chuàng)建一個(gè)線程來運(yùn)行VM,由于VM在前期初始化的時(shí)候會(huì)設(shè)置各種寄存器來幫助KVM查找到需要加載的指令的入口(main函數(shù))。所以線程在調(diào)用了KVM接口后,物理CPU的控制權(quán)就交給了VM。VM運(yùn)行在VMX non-root模式,這是Intel-V或者AMD-V提供的一種特殊的CPU執(zhí)行模式。然后當(dāng)VM執(zhí)行了特殊指令的時(shí)候,CPU將當(dāng)前VM的上下文保存到VMCS寄存器(這個(gè)寄存器是一個(gè)指針,保存了實(shí)際的上下文地址),然后執(zhí)行權(quán)切換到VMM。VMM 獲取 VM 返回原因,并做處理。如果是IO請(qǐng)求,VMM 可以直接讀取VM的內(nèi)存并將IO操作模擬出來,然后再調(diào)用VMRESUME指令,VM繼續(xù)執(zhí)行,此時(shí)在VM看來,IO操作的指令被CPU執(zhí)行了。

Intel-V 技術(shù)

Intel-V 技術(shù)是Intel為了支持虛擬化而提供的一套CPU特殊運(yùn)行模式。

Intel-V虛擬化技術(shù)結(jié)構(gòu)

Intel-V 在IA-32處理器上擴(kuò)展了處理器等級(jí),原來的CPU支持ring0~ring3 4個(gè)等級(jí),但是Linux只使用了其中的兩個(gè)ring0,ring3。當(dāng)CPU寄存器標(biāo)示了當(dāng)前CPU處于ring0級(jí)別的時(shí)候,表示此時(shí)CPU正在運(yùn)行的是內(nèi)核的代碼。而當(dāng)CPU處于ring3級(jí)別的時(shí)候,表示此時(shí)CPU正在運(yùn)行的是用戶級(jí)別的代碼。當(dāng)發(fā)生系統(tǒng)調(diào)用或者進(jìn)程切換的時(shí)候,CPU會(huì)從ring3級(jí)別轉(zhuǎn)到ring0級(jí)別。ring3級(jí)別是不允許執(zhí)行硬件操作的,所有硬件操作都需要系統(tǒng)提供的API來完成。
比如說一個(gè)IO操作:

int nread = read(fd, buffer, 1024);

當(dāng)執(zhí)行到此段代碼的時(shí)候,然后查找到系統(tǒng)調(diào)用號(hào),保存到寄存器eax,然后會(huì)將對(duì)應(yīng)的參數(shù)壓棧后產(chǎn)生一個(gè)系統(tǒng)調(diào)用中斷,對(duì)應(yīng)的是 int $0x80。產(chǎn)生了系統(tǒng)調(diào)用中斷后,此時(shí)CPU將切換到ring0模式,內(nèi)核通過寄存器讀取到參數(shù),并完成最后的IO后續(xù)操作,操作完成后返回ring3模式。

movel  $3,%eax
movel  fd,%ebx
movel  buffer,%ecx
movel  1024,%edx      
int    $0x80

Intel-V 在 ring0~ring3 的基礎(chǔ)上,增加了VMX模式,VMX分為root和non-root。這里的VMX root模式是給VMM(前面有提到VM monitor),在KVM體系中,就是qemu-kvm進(jìn)程所運(yùn)行的模式。VMX non-root模式就是運(yùn)行的Guest,Guest也分ring0~ring3,不過他并不感知自己處于VMX non-root模式下。

怎么解析KVM虛擬化原理中的CPU虛擬化

Guest與VMM之間的切換分兩個(gè)部分:VM entry 和 VM exit。有幾種情況會(huì)導(dǎo)致VM exit,比如說Guest執(zhí)行了硬件訪問操作,或者Guest調(diào)用了VMCALL指令或者調(diào)用了退出指令或者產(chǎn)生了一個(gè)page fault,或者訪問了特殊設(shè)備的寄存器等。當(dāng)Guest處于VMX模式的時(shí)候,沒有提供獲取是否處于此模式下的指令或者寄存器,也就是說,Guest不能判斷當(dāng)前CPU是否處于VMX模式。當(dāng)產(chǎn)生VM exit的時(shí)候,CPU會(huì)將exit reason保存到MSRs(VMX模式的特殊寄存器組),對(duì)應(yīng)到KVM就是vCPU->kvm_run->exit_reason。VMM根據(jù)exit_reason做相應(yīng)的處理。

VMM 的生命周期

如上圖所示,VMM 開始于VMXON 指令,結(jié)束與VMXOFF指令。
第一次啟動(dòng)Guest,通過VMLAUNCH指令加載Guest,這時(shí)候一切都是新的,比如說起始的rip寄存器等。后續(xù)Guest exit后再entry,是通過VMRESUME指令,此指令會(huì)將VMCS(后面會(huì)介紹到)所指向的內(nèi)容加載到當(dāng)前Guest的上下文,以便Guest繼續(xù)執(zhí)行。

VMCS (Virtual-Machine control structure)

顧名思義,VMCS就是虛擬機(jī)控制結(jié)構(gòu),前面提到過很多次,Guest Exit的時(shí)候,會(huì)將當(dāng)前Guest的上下文保存到VMCS中,Guest entry的時(shí)候把VMCS上下文恢復(fù)到VMM。VMCS是一個(gè)64位的指針,指向一個(gè)真實(shí)的內(nèi)存地址,VMCS是以vCPU為單位的,就是說當(dāng)前有多少個(gè)vCPU,就有多少個(gè)VMCS指針。VMCS的操作包括VMREAD,VMWRITE,VMCLEAR。

Guest exit Reason

下面是qemu-kvm定義的exit reason??梢钥吹接泻芏嗫赡軙?huì)導(dǎo)致Guest轉(zhuǎn)讓控制權(quán)。選取幾個(gè)解釋一下。

static int (*const kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = {
    [EXIT_REASON_EXCEPTION_NMI]           = handle_exception, 
    [EXIT_REASON_EXTERNAL_INTERRUPT]      = handle_external_interrupt, 
    [EXIT_REASON_TRIPLE_FAULT]            = handle_triple_fault,
    [EXIT_REASON_NMI_WINDOW]              = handle_nmi_window,
     // 訪問了IO設(shè)備
    [EXIT_REASON_IO_INSTRUCTION]          = handle_io,
     // 訪問了CR寄存器,地址寄存器,和DR寄存器(debug register)一樣,用于調(diào)試
    [EXIT_REASON_CR_ACCESS]               = handle_cr,
    [EXIT_REASON_DR_ACCESS]               = handle_dr, 
    [EXIT_REASON_CPUID]                   = handle_cpuid,
    // 訪問了MSR寄存器
    [EXIT_REASON_MSR_READ]                = handle_rdmsr,
    [EXIT_REASON_MSR_WRITE]               = handle_wrmsr,
    [EXIT_REASON_PENDING_INTERRUPT]       = handle_interrupt_window,
    // Guest執(zhí)行了HLT指令,Demo開胃菜就是這個(gè)指令
    [EXIT_REASON_HLT]                     = handle_halt,
    [EXIT_REASON_INVD]                    = handle_invd,
    [EXIT_REASON_INVLPG]                  = handle_invlpg,
    [EXIT_REASON_RDPMC]                   = handle_rdpmc,
    // 不太清楚以下VM系列的指令有什么用,猜測是遞歸VM(虛擬機(jī)里面運(yùn)行虛擬機(jī))
    [EXIT_REASON_VMCALL]                  = handle_vmcall, 
    [EXIT_REASON_VMCLEAR]                 = handle_vmclear,
    [EXIT_REASON_VMLAUNCH]                = handle_vmlaunch,
    [EXIT_REASON_VMPTRLD]                 = handle_vmptrld,
    [EXIT_REASON_VMPTRST]                 = handle_vmptrst,
    [EXIT_REASON_VMREAD]                  = handle_vmread,
    [EXIT_REASON_VMRESUME]                = handle_vmresume,
    [EXIT_REASON_VMWRITE]                 = handle_vmwrite,
    [EXIT_REASON_VMOFF]                   = handle_vmoff,
    [EXIT_REASON_VMON]                    = handle_vmon,
    
    [EXIT_REASON_TPR_BELOW_THRESHOLD]     = handle_tpr_below_threshold,
    // 訪問了高級(jí)PCI設(shè)備
    [EXIT_REASON_APIC_ACCESS]             = handle_apic_access,
    [EXIT_REASON_APIC_WRITE]              = handle_apic_write,
    [EXIT_REASON_EOI_INDUCED]             = handle_apic_eoi_induced,
    [EXIT_REASON_WBINVD]                  = handle_wbinvd,
    [EXIT_REASON_XSETBV]                  = handle_xsetbv,
    // 進(jìn)程切換
    [EXIT_REASON_TASK_SWITCH]             = handle_task_switch,
    [EXIT_REASON_MCE_DURING_VMENTRY]      = handle_machine_check,
    // ept 是Intel的一個(gè)硬件內(nèi)存虛擬化技術(shù)
    [EXIT_REASON_EPT_VIOLATION]           = handle_ept_violation,
    [EXIT_REASON_EPT_MISCONFIG]           = handle_ept_misconfig,
    // 執(zhí)行了暫停指令
    [EXIT_REASON_PAUSE_INSTRUCTION]       = handle_pause,
    [EXIT_REASON_MWAIT_INSTRUCTION]       = handle_invalid_op,
    [EXIT_REASON_MONITOR_INSTRUCTION]     = handle_invalid_op,
    [EXIT_REASON_INVEPT]                  = handle_invept,
};

KVM的CPU虛擬化依托于Intel-V提供的虛擬化技術(shù),將Guest運(yùn)行于VMX模式,當(dāng)執(zhí)行了特殊操作的時(shí)候,將控制權(quán)返回給VMM。VMM處理完特殊操作后再把結(jié)果返回給Guest。
CPU虛擬化可以說是KVM的最關(guān)鍵的核心,弄清楚了VM Exit和VM Entry。后續(xù)的IO虛擬化,內(nèi)存虛擬化都是建立在此基礎(chǔ)上。

上述就是小編為大家分享的怎么解析KVM虛擬化原理中的CPU虛擬化了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:怎么解析KVM虛擬化原理中的CPU虛擬化
本文地址:http://aaarwkj.com/article6/ipdgig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站營銷、品牌網(wǎng)站建設(shè)、App設(shè)計(jì)、做網(wǎng)站網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
99热这里只有精品中文有码| 欧美看黄网站在线观看| 亚洲av偷拍一区二区三区不卡| 国产精品原创传媒在线观看| 欧美精品一区二区毛卡片| 在线日韩中文字幕二区| 免费看av网站一区二区| 亚洲高清中文字幕专区| 日本免费一区二区三区手机在线| 日本精品在线小视频| 91国产自拍在线视频| 欧美一级黄色免费电影| 成人黄色暖暖韩日视频| 日韩人妻一级免费视频| 亚洲综合欧美自偷自拍| 一区二区三区四区中文在线 | 在线观看亚洲毛片网站| 亚洲精品一区久久狠狠欧美| 日本国产在线一区二区| 国产精品自在线拍亚洲另类| 成人免费中文字幕电影| 成年人免费视频网站国产| 日韩亚洲天堂视频免费观看| 国产欧美日韩一级二级三级| 91精品啪在线观看国产日本| 亚洲福利一区二区三区| 欧美日韩在线不卡一区| 蜜臀av免费在线观看| 日韩国产欧美亚洲一区| 日韩在线免费色视频| 日本丝袜福利在线观看| 日韩一区二区三级电影| 欧美日韩国产免费电影| 日本成人大片在线观看| 免费av在线网址网站| 四虎精品在线免费视频| 亚洲精品??一区二区| 国产精品一区二区日韩新区| 国产经典三级在线看| 国内校园性猛交视频网站| 久久热在线视频精品视频|