真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

硬件輔助虛擬化之EPT(內(nèi)存虛擬化)介紹-創(chuàng)新互聯(lián)

這篇內(nèi)容,通過從操作系統(tǒng)的虛擬地址介紹到虛擬機層面的內(nèi)存虛擬化技術(shù),并介紹這兩種技術(shù)之間的關(guān)聯(lián)。

目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、金堂縣網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

(以下實例都以intel 64位處理器和win10 x64操作系統(tǒng)位例。 )

一、虛擬地址

在保護模式下,每個進程擁有自己獨立的虛擬內(nèi)存,程序的代碼、全局?jǐn)?shù)據(jù)、??臻g等使用自己獨立的虛擬內(nèi)存。每個進程可以訪問自己獨立的以0開始的虛擬地址(VA),即每個進程可以有跟其他進程相同的虛擬地址(VA)起始地址(start address)和結(jié)束地址(end address)。

虛擬內(nèi)存被操作的時候,會分配一塊實際的物理內(nèi)存與它對應(yīng)。

這篇內(nèi)容,通過從操作系統(tǒng)的虛擬地址介紹到虛擬機層面的內(nèi)存虛擬化技術(shù),并介紹這兩種技術(shù)之間的關(guān)聯(lián)。

(以下實例都以intel 64位處理器和win10 x64操作系統(tǒng)位例。 )

一、虛擬地址

在保護模式下,每個進程擁有自己獨立的虛擬內(nèi)存,程序的代碼、全局?jǐn)?shù)據(jù)、棧空間等使用自己獨立的虛擬內(nèi)存。每個進程可以訪問自己獨立的以0開始的虛擬地址(VA),即每個進程可以有跟其他進程相同的虛擬地址(VA)起始地址(start address)和結(jié)束地址(end address)。

虛擬內(nèi)存被操作的時候,會分配一塊實際的物理內(nèi)存與它對應(yīng)。

CPU內(nèi)部的MMU(內(nèi)存管理單元)會把虛擬地址(virtual address)翻譯為對應(yīng)的物理地址(physical address),借助于CR3寄存器。CR3寄存器存儲該進程的最頂級頁目錄。

每一個虛擬地址被分成幾份,每一份作為一個索引,得到多個索引值和一個頁偏移。從最頂級頁目錄找到索引所在的項。從項取出次頂級頁目錄的起始物理地址。再用下一個索引從次頂級頁目錄找到下一個頁目錄的起始物理地址。直至直到頁表的起始物理地址,外加頁偏移,計算該虛擬地址對應(yīng)的實際物理地址。

從上面描述的,從虛擬地址到實際的物理地址,需要耗費一定的時間,TLB(translation lookaside buffer)可以省去中間過程。如果從TLB找到虛擬地址對應(yīng)的物理地址,則跳過從頁目錄到頁表的翻譯過程。TLB會維護虛擬地址到物理地址的對應(yīng)過程一定的時間。

完整的過程為:當(dāng)一個虛擬地址(VA)被訪問(access),如果該虛擬地址(VA)對應(yīng)的物理地址(PA)沒有找到或不存在,則觸發(fā)缺頁中斷(INT E),由缺頁處理程序建立該虛擬地址(VA)的頁目錄頁表(PML4、PDP、PDE、PTE),并把虛擬地址(VA)與物理地址(PA)的對應(yīng)關(guān)系記錄在TLB中。

二、內(nèi)存虛擬化

我們下面描述的是內(nèi)存虛擬化主要用于CPU支持并提供的硬件輔助虛擬化技術(shù)當(dāng)中。

在一臺計算機上安裝多個虛擬機(VM)時,每個虛擬機(VM)都認(rèn)為自己獨占使用物理內(nèi)存,都可以獨立的訪問以0開始的起始物理地址。如下圖:

虛擬內(nèi)存技術(shù)用于把虛擬地址VA(virtual Address)轉(zhuǎn)化為物理地址PA(physical address),但有了內(nèi)存虛擬化技術(shù)在原本的虛擬地址翻譯為物理地址的過程中又加了一層,把原本的物理地址所(PA)處的位置叫做虛擬機(virtual machine)的物理地址,也叫做GPA(guest physical address)。從而實際的物理地址(PA)叫做VMM(virtual monitor machine)的物理地址,也叫做HPA(host physical address)。

(*注:虛擬機(VM)有的資料上也叫客戶機,是一個意思)。

再由VMM(Virtual Machine Monitor)把虛擬機的GPA翻譯為HPA。最終達(dá)到的效果是VA映射到了HPA。轉(zhuǎn)換過程如下圖:

三、虛擬內(nèi)存和內(nèi)存虛擬化的關(guān)系

如果沒有內(nèi)存虛擬化技術(shù),操作系統(tǒng)通過虛擬地址(VA)訪問物理地址(PA)的過程如下:操作系統(tǒng)(OS)把一個虛擬地址分成4個索引值(Index)和一個物理內(nèi)存頁偏移(offset)。4個索引值分別是Index4、Index3、Index2、Index1,分別表示L4(第四級頁表PML4T)中的索引、L3(第三級頁表PDPT)中的索引、L2(第二級頁表PDT)中的索引、L1(第一級頁表PT)中的索引。

使用索引值在頁表中找到下一級頁表的起始物理地址,過程如下:利用CR3寄存器找到PML4T(頁表)的起始物理地址(PA),用Index4在PML4T中找到PDPT的起始物理地址(PA);再使用Index3從PDPT 找到PDT的起始物理地址(PA);再使用Index2從PDT中找到PT的起始物理地址(PA);再使用Index1從PT中取出PFN的起始物理地址(PA);最后PFN的物理起始地址加上頁內(nèi)偏移(offset)找到虛擬地址對應(yīng)的物理地址(PA)。

在內(nèi)存虛擬化技術(shù)下,所有上面提到的物理地址(PA)都將作為虛擬機的物理地址(GPA),需要把所有的GPA借助于CPU內(nèi)部的EPT(Extended Page Table)轉(zhuǎn)化為HPA,才能被CPU給訪問。所以,過程變?yōu)榱讼旅孢@樣:

虛擬機里面的操作系統(tǒng)使用的CR3寄存器存放的PML4T的起始物理地址(GPA)需要被VMM(Virtual Machine Monitor)轉(zhuǎn)化為HPA,然后才能使用Index4找到PDPT的起始物理地址(GPA)。繼續(xù)借助于EPT把PDPT的GPA轉(zhuǎn)化為HPA,再利用Index3找到PDT的起始物理地址(GPA)。繼續(xù)借助于EPT把PDT的GPA轉(zhuǎn)化為HPA,再利用Index2找到PT的起始物理地址(GPA)。繼續(xù)借助于EPT把PT的GPA轉(zhuǎn)化為HPA,再利用Index1找到PFN的起始物理地址(GPA)。最后借助于EPT把PFN的GPA轉(zhuǎn)化為HPA,加上頁內(nèi)偏移(offset),得到最后的虛擬地址(VA)對應(yīng)的HPA。

最后說明下,從GPA到HPA的轉(zhuǎn)化過程如下圖:

一個GPA地址也被分成5部分,L4,L3,L2、L1和頁內(nèi)偏移offset。每一部分作為一個索引,Index4,Index3,Index2,Index1,Offset。從EPT取出PML4 Table的基地址,加上Index4*4找到PML4 Entry;并取出PML4 Entry中存放的PDP Table的基地址,加上Index3*4找到PDP Entry;取出PDP Entry中存放的PD Table的基地址,加上Index2*4找到PD Entry;取出PD Entry中存放的PT Table的基地址,加上Index1*4找到物理頁幀號PFN;PFN 加上Offset就是最終的物理地址(HPA)。

四、示例

下面簡單介紹下代碼《Part 7 - Using EPT & Page-level Monitoring Features》,用于了解下EPT的一個應(yīng)用場景。該代碼來源于Hypervisor From Scratch – Part 7: Using EPT & Page-Level Monitoring Features | Rayanfam Blog,演示了EPT的從構(gòu)建到使用的過程。下面代碼跟上面介紹過的內(nèi)容的唯一不同的點是,頁目錄(PD)的Large Page標(biāo)記為1,意味著頁目錄指向PFN,省去了PTE。每一個PDTE指向的2MB大小的物理內(nèi)存。

在不同架構(gòu)的處理器下,4KB物理頁面和2MB的物理內(nèi)存說明如下圖:

該代碼演示了多CPU對應(yīng)一個EPT表,修改完EPT需要調(diào)用Invept指令使TLB失效。該代碼去除了ExAllocatePoolWithTag函數(shù)的可執(zhí)行權(quán)限,從而觸發(fā)VM Exit,進入VMM的處理例程VmxVmexitHandler,然后再恢復(fù)ExAllocatePoolWithTag函數(shù)的執(zhí)行權(quán)限,允許其可執(zhí)行。具體過程如下:

初始化完成EPT表后,查找函數(shù)ExAllocatePoolWithTag所在的PDE,把該PDE轉(zhuǎn)化為一個包含512個PT的表,找到函數(shù)ExAllocatePoolWithTag所在的PTE,然后去除函數(shù)ExAllocatePoolWithTag所在的PTE的執(zhí)行權(quán)限。

當(dāng)調(diào)用函數(shù)ExAllocatePoolWithTag時,函數(shù)ExAllocatePoolWithTag所在PTE標(biāo)記沒有執(zhí)行權(quán)限,觸發(fā)違例進入VmxVmexitHandler。在處理例程VmxVmexitHandler找到函數(shù)ExAllocatePoolWithTag所在的PTE,并恢復(fù)可執(zhí)行權(quán)限,最后調(diào)用Invept指令刷新TLB。

四、總結(jié)

以上,從操作系統(tǒng)層面介紹了虛擬地址與物理地址之間的關(guān)系及轉(zhuǎn)化過程,又在引入了硬件輔助虛擬化技術(shù)后,介紹了從虛擬機(操作系統(tǒng)處于虛擬機內(nèi)部)層面的物理地址再到虛擬機監(jiān)視器的實際的物理地址之間的關(guān)系及轉(zhuǎn)化過程。并通過一份開源代碼,簡單介紹了一下以上內(nèi)容的一個應(yīng)用場景。

參考資料:

《系統(tǒng)虛擬化——原理與實現(xiàn)》

《虛擬化技術(shù)原理與實現(xiàn)》

《Intel手冊卷3》

《虛擬化與云計算》

《Windows Internals Seventh Edition Part 2》

《Part 7 - Using EPT & Page-level Monitoring Features》

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前名稱:硬件輔助虛擬化之EPT(內(nèi)存虛擬化)介紹-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://weahome.cn/article/csdcsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部