這篇內(nèi)容,通過從操作系統(tǒng)的虛擬地址介紹到虛擬機(jī)層面的內(nèi)存虛擬化技術(shù),并介紹這兩種技術(shù)之間的關(guān)聯(lián)。
目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、金堂縣網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。(以下實(shí)例都以intel 64位處理器和win10 x64操作系統(tǒng)位例。 )
一、虛擬地址
在保護(hù)模式下,每個(gè)進(jìn)程擁有自己獨(dú)立的虛擬內(nèi)存,程序的代碼、全局?jǐn)?shù)據(jù)、??臻g等使用自己獨(dú)立的虛擬內(nèi)存。每個(gè)進(jìn)程可以訪問自己獨(dú)立的以0開始的虛擬地址(VA),即每個(gè)進(jìn)程可以有跟其他進(jìn)程相同的虛擬地址(VA)起始地址(start address)和結(jié)束地址(end address)。
虛擬內(nèi)存被操作的時(shí)候,會(huì)分配一塊實(shí)際的物理內(nèi)存與它對(duì)應(yīng)。
這篇內(nèi)容,通過從操作系統(tǒng)的虛擬地址介紹到虛擬機(jī)層面的內(nèi)存虛擬化技術(shù),并介紹這兩種技術(shù)之間的關(guān)聯(lián)。
(以下實(shí)例都以intel 64位處理器和win10 x64操作系統(tǒng)位例。 )
一、虛擬地址
在保護(hù)模式下,每個(gè)進(jìn)程擁有自己獨(dú)立的虛擬內(nèi)存,程序的代碼、全局?jǐn)?shù)據(jù)、??臻g等使用自己獨(dú)立的虛擬內(nèi)存。每個(gè)進(jìn)程可以訪問自己獨(dú)立的以0開始的虛擬地址(VA),即每個(gè)進(jìn)程可以有跟其他進(jìn)程相同的虛擬地址(VA)起始地址(start address)和結(jié)束地址(end address)。
虛擬內(nèi)存被操作的時(shí)候,會(huì)分配一塊實(shí)際的物理內(nèi)存與它對(duì)應(yīng)。
CPU內(nèi)部的MMU(內(nèi)存管理單元)會(huì)把虛擬地址(virtual address)翻譯為對(duì)應(yīng)的物理地址(physical address),借助于CR3寄存器。CR3寄存器存儲(chǔ)該進(jìn)程的最頂級(jí)頁(yè)目錄。
每一個(gè)虛擬地址被分成幾份,每一份作為一個(gè)索引,得到多個(gè)索引值和一個(gè)頁(yè)偏移。從最頂級(jí)頁(yè)目錄找到索引所在的項(xiàng)。從項(xiàng)取出次頂級(jí)頁(yè)目錄的起始物理地址。再用下一個(gè)索引從次頂級(jí)頁(yè)目錄找到下一個(gè)頁(yè)目錄的起始物理地址。直至直到頁(yè)表的起始物理地址,外加頁(yè)偏移,計(jì)算該虛擬地址對(duì)應(yīng)的實(shí)際物理地址。
從上面描述的,從虛擬地址到實(shí)際的物理地址,需要耗費(fèi)一定的時(shí)間,TLB(translation lookaside buffer)可以省去中間過程。如果從TLB找到虛擬地址對(duì)應(yīng)的物理地址,則跳過從頁(yè)目錄到頁(yè)表的翻譯過程。TLB會(huì)維護(hù)虛擬地址到物理地址的對(duì)應(yīng)過程一定的時(shí)間。
完整的過程為:當(dāng)一個(gè)虛擬地址(VA)被訪問(access),如果該虛擬地址(VA)對(duì)應(yīng)的物理地址(PA)沒有找到或不存在,則觸發(fā)缺頁(yè)中斷(INT E),由缺頁(yè)處理程序建立該虛擬地址(VA)的頁(yè)目錄頁(yè)表(PML4、PDP、PDE、PTE),并把虛擬地址(VA)與物理地址(PA)的對(duì)應(yīng)關(guān)系記錄在TLB中。
二、內(nèi)存虛擬化
我們下面描述的是內(nèi)存虛擬化主要用于CPU支持并提供的硬件輔助虛擬化技術(shù)當(dāng)中。
在一臺(tái)計(jì)算機(jī)上安裝多個(gè)虛擬機(jī)(VM)時(shí),每個(gè)虛擬機(jī)(VM)都認(rèn)為自己獨(dú)占使用物理內(nèi)存,都可以獨(dú)立的訪問以0開始的起始物理地址。如下圖:
虛擬內(nèi)存技術(shù)用于把虛擬地址VA(virtual Address)轉(zhuǎn)化為物理地址PA(physical address),但有了內(nèi)存虛擬化技術(shù)在原本的虛擬地址翻譯為物理地址的過程中又加了一層,把原本的物理地址所(PA)處的位置叫做虛擬機(jī)(virtual machine)的物理地址,也叫做GPA(guest physical address)。從而實(shí)際的物理地址(PA)叫做VMM(virtual monitor machine)的物理地址,也叫做HPA(host physical address)。
(*注:虛擬機(jī)(VM)有的資料上也叫客戶機(jī),是一個(gè)意思)。
再由VMM(Virtual Machine Monitor)把虛擬機(jī)的GPA翻譯為HPA。最終達(dá)到的效果是VA映射到了HPA。轉(zhuǎn)換過程如下圖:
三、虛擬內(nèi)存和內(nèi)存虛擬化的關(guān)系
如果沒有內(nèi)存虛擬化技術(shù),操作系統(tǒng)通過虛擬地址(VA)訪問物理地址(PA)的過程如下:操作系統(tǒng)(OS)把一個(gè)虛擬地址分成4個(gè)索引值(Index)和一個(gè)物理內(nèi)存頁(yè)偏移(offset)。4個(gè)索引值分別是Index4、Index3、Index2、Index1,分別表示L4(第四級(jí)頁(yè)表PML4T)中的索引、L3(第三級(jí)頁(yè)表PDPT)中的索引、L2(第二級(jí)頁(yè)表PDT)中的索引、L1(第一級(jí)頁(yè)表PT)中的索引。
使用索引值在頁(yè)表中找到下一級(jí)頁(yè)表的起始物理地址,過程如下:利用CR3寄存器找到PML4T(頁(yè)表)的起始物理地址(PA),用Index4在PML4T中找到PDPT的起始物理地址(PA);再使用Index3從PDPT 找到PDT的起始物理地址(PA);再使用Index2從PDT中找到PT的起始物理地址(PA);再使用Index1從PT中取出PFN的起始物理地址(PA);最后PFN的物理起始地址加上頁(yè)內(nèi)偏移(offset)找到虛擬地址對(duì)應(yīng)的物理地址(PA)。
在內(nèi)存虛擬化技術(shù)下,所有上面提到的物理地址(PA)都將作為虛擬機(jī)的物理地址(GPA),需要把所有的GPA借助于CPU內(nèi)部的EPT(Extended Page Table)轉(zhuǎn)化為HPA,才能被CPU給訪問。所以,過程變?yōu)榱讼旅孢@樣:
虛擬機(jī)里面的操作系統(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,加上頁(yè)內(nèi)偏移(offset),得到最后的虛擬地址(VA)對(duì)應(yīng)的HPA。
最后說明下,從GPA到HPA的轉(zhuǎn)化過程如下圖:
一個(gè)GPA地址也被分成5部分,L4,L3,L2、L1和頁(yè)內(nèi)偏移offset。每一部分作為一個(gè)索引,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找到物理頁(yè)幀號(hào)PFN;PFN 加上Offset就是最終的物理地址(HPA)。
四、示例
下面簡(jiǎn)單介紹下代碼《Part 7 - Using EPT & Page-level Monitoring Features》,用于了解下EPT的一個(gè)應(yīng)用場(chǎng)景。該代碼來源于Hypervisor From Scratch – Part 7: Using EPT & Page-Level Monitoring Features | Rayanfam Blog,演示了EPT的從構(gòu)建到使用的過程。下面代碼跟上面介紹過的內(nèi)容的唯一不同的點(diǎn)是,頁(yè)目錄(PD)的Large Page標(biāo)記為1,意味著頁(yè)目錄指向PFN,省去了PTE。每一個(gè)PDTE指向的2MB大小的物理內(nèi)存。
在不同架構(gòu)的處理器下,4KB物理頁(yè)面和2MB的物理內(nèi)存說明如下圖:
該代碼演示了多CPU對(duì)應(yīng)一個(gè)EPT表,修改完EPT需要調(diào)用Invept指令使TLB失效。該代碼去除了ExAllocatePoolWithTag函數(shù)的可執(zhí)行權(quán)限,從而觸發(fā)VM Exit,進(jìn)入VMM的處理例程VmxVmexitHandler,然后再恢復(fù)ExAllocatePoolWithTag函數(shù)的執(zhí)行權(quán)限,允許其可執(zhí)行。具體過程如下:
初始化完成EPT表后,查找函數(shù)ExAllocatePoolWithTag所在的PDE,把該P(yáng)DE轉(zhuǎn)化為一個(gè)包含512個(gè)PT的表,找到函數(shù)ExAllocatePoolWithTag所在的PTE,然后去除函數(shù)ExAllocatePoolWithTag所在的PTE的執(zhí)行權(quán)限。
當(dāng)調(diào)用函數(shù)ExAllocatePoolWithTag時(shí),函數(shù)ExAllocatePoolWithTag所在PTE標(biāo)記沒有執(zhí)行權(quán)限,觸發(fā)違例進(jìn)入VmxVmexitHandler。在處理例程VmxVmexitHandler找到函數(shù)ExAllocatePoolWithTag所在的PTE,并恢復(fù)可執(zhí)行權(quán)限,最后調(diào)用Invept指令刷新TLB。
四、總結(jié)
以上,從操作系統(tǒng)層面介紹了虛擬地址與物理地址之間的關(guān)系及轉(zhuǎn)化過程,又在引入了硬件輔助虛擬化技術(shù)后,介紹了從虛擬機(jī)(操作系統(tǒng)處于虛擬機(jī)內(nèi)部)層面的物理地址再到虛擬機(jī)監(jiān)視器的實(shí)際的物理地址之間的關(guān)系及轉(zhuǎn)化過程。并通過一份開源代碼,簡(jiǎn)單介紹了一下以上內(nèi)容的一個(gè)應(yīng)用場(chǎng)景。
參考資料:
《系統(tǒng)虛擬化——原理與實(shí)現(xiàn)》
《虛擬化技術(shù)原理與實(shí)現(xiàn)》
《Intel手冊(cè)卷3》
《虛擬化與云計(jì)算》
《Windows Internals Seventh Edition Part 2》
《Part 7 - Using EPT & Page-level Monitoring Features》
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站標(biāo)題:硬件輔助虛擬化之EPT(內(nèi)存虛擬化)介紹-創(chuàng)新互聯(lián)
當(dāng)前地址:http://jinyejixie.com/article38/csdcsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、域名注冊(cè)、網(wǎng)站收錄、自適應(yīng)網(wǎng)站、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容