日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Intel的cpu虚拟化

發(fā)布時(shí)間:2024/1/4 综合教程 51 生活家
生活随笔 收集整理的這篇文章主要介紹了 Intel的cpu虚拟化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

intel的cpu虛擬化,就不得不提到vt-x。vt-x是intel的CPU硬件虛擬化技術(shù),但是在操作系統(tǒng)內(nèi)部查看cpu的flag時(shí),是否支持硬件虛擬化的的判斷標(biāo)準(zhǔn)是是否有vmx,vmx是什么,它和虛擬化有什么關(guān)系

幾個(gè)基礎(chǔ)概念

1.VMM:

虛擬機(jī)監(jiān)視器在宿主機(jī)上表現(xiàn)為一個(gè)提供虛擬機(jī)CPU,內(nèi)存以及一系列硬件虛擬的實(shí)體,這個(gè)實(shí)體在KVM體系中就是一個(gè)進(jìn)程,如qemu-kvm。VMM負(fù)責(zé)管理虛擬機(jī)的資源,并擁有所有虛擬機(jī)資源的控制權(quán),包括切換虛擬機(jī)的CPU上下文等。

2.Guest:

可能是一個(gè)操作系統(tǒng)(OS),也可能就是一個(gè)二進(jìn)制程序。對(duì)于VMM來說,他就是一堆指令集,只需要知道入口(rip寄存器值)就可以加載。

Guest運(yùn)行需要虛擬CPU,當(dāng)Guest代碼運(yùn)行的時(shí)候,處于VMX non-root模式,此模式下,該用什么指令還是用什么指令,該用什么寄存器還用什么寄存器,該用cache還是用cache,但是在執(zhí)行到特殊指令的時(shí)候(比如Demo中的out指令),把CPU控制權(quán)交給VMM,由VMM來處理特殊指令,完成硬件操作。

3.CPU運(yùn)行級(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í)行硬件操作的,所有硬件操作都需要內(nèi)核提供的系統(tǒng)調(diào)用來完成。

4.VMX:

為了從CPU層面支持VT技術(shù),Intel-V 在 ring0~ring3 的基礎(chǔ)上,擴(kuò)展了傳統(tǒng)的x86處理器架構(gòu),引入了VMX模式,VMX分為root和non-root。VMM運(yùn)行在VMX root模式;Guest運(yùn)行在VMX non-root模式。

CPU虛擬化

有了cpu的運(yùn)行級(jí)別和VMX,就可以看一下CPU虛擬化的基本運(yùn)行情況了。

Guest OS里的內(nèi)核運(yùn)行于VMX non-root下的ring0

Guest OS里的應(yīng)用程序運(yùn)行于VMX non-root模式下的ring3

Host OS的內(nèi)核和VMM運(yùn)行于VMX root模式下的ring0。

雖然GuestOS的內(nèi)核也運(yùn)行于ring0,但是由于是non-root模式,所以不能操作某些資源,不能運(yùn)行敏感指令。

Guest也分ring0~ring3,不過他并不感知自己處于VMX non-root模式下。

VMM與Guest的切換

1. VM entry 和 VM exit

Guest與VMM之間的切換有兩個(gè)過程:VM entry 和 VM exit。Guest運(yùn)行時(shí)處于VMX下的non-root模式,當(dāng)執(zhí)行了特殊操作的時(shí)候(具體哪種操作后面的VM exit原因中會(huì)提到),通過VM exit將cpu控制權(quán)返回給VMM,從而陷入到root模式下的ring0內(nèi)的VMM,進(jìn)行“陷入模擬”。 VMM處理完特殊操作后再通過VM entry把結(jié)果和控制權(quán)返回給Guest。

2.導(dǎo)致VM exit的原因

導(dǎo)致VM exit的原因有多種,例如Guest執(zhí)行了硬件IO訪問操作,或者Guest調(diào)用了VMCALL指令,或者調(diào)用了退出指令,或者產(chǎn)生了一個(gè)page fault,或者訪問了特殊設(shè)備的寄存器等。在內(nèi)核中有關(guān)于VM exit原因的列表。

3.VMCS:(虛擬機(jī)控制結(jié)構(gòu))

這是虛擬機(jī)的戶口本,對(duì)虛擬機(jī)至關(guān)重要。Guest Exit的時(shí)候,會(huì)將當(dāng)前Guest的上下文保存到VMCS中,Guest entry的時(shí)候把VMCS上下文恢復(fù)給VMM。VMCS是一個(gè)64位的指針,指向一個(gè)真實(shí)的內(nèi)存地址,VMCS是以vCPU為單位的,即Guest有多少個(gè)vCPU,就對(duì)應(yīng)多少個(gè)VMCS指針。VMCS的操作包括VMREAD,VMWRITE,VMCLEAR。

當(dāng)Guest發(fā)起執(zhí)行的指令處于VMX模式(包括運(yùn)行VMM的root和運(yùn)行Guest代碼的non-root)的時(shí)候,Guest不能判斷當(dāng)前CPU是否處于VMX模式還是非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)的處理。所以MSRs寄存器就成了Guest和VMX交接的中間人。

總結(jié)

以上是生活随笔為你收集整理的Intel的cpu虚拟化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。