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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARM 虚拟化技术简介

發(fā)布時間:2024/2/28 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM 虚拟化技术简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一. 虛擬化技術(shù)
二. 虛擬化技術(shù)的比較
? ? ? ??2.1?全虛擬化和二進制重寫(Pure virtualization and binary rewriting)
? ? ? ??2.2 半虛擬化( Para-virtualization)
? ? ? ??2.3 虛擬化環(huán)境中的虛擬內(nèi)存(Virtual memory in virtualization environment)
三. ARM介紹
? ? ? ??3.1 ARM總體介紹
? ? ? ??3.2 ARM協(xié)處理器介紹
? ? ? ??3.3 處理器模式和TrustZone
? ? ? ??3.4 中斷控制器
? ? ? ??3.5 ARM架構(gòu)的虛擬化問題(Virtualization Issues with the ARM Architecture)
? ? ? ??3.6 ARM對虛擬化的硬件支持
? ? ? ??3.7 中斷控制


一. 虛擬化技術(shù)

? ? 虛擬化是一個概念,單從這個概念的角度來看,只要是用某一種物品去模擬另一種物品都可以稱為虛擬化,甚至于有些飯店用豆腐做出肉的味道,我認為這也可以稱為一種虛擬化。
? ??但是這里我們主要討論的是計算機領域的虛擬化,我們這樣定義虛擬化“虛擬化是將單一物理設備模擬為相互隔離的多個虛擬設備,同時保證這些虛擬設備的高效性”。
? ? ??這個概念的定義里還包含了對虛擬化的要求,也就是這里的隔離性(isolated)有效性(efficient)。我們常說的hypervisor,有些書也把它稱為 VMM(virtual machine monitor)則是一個直接運行在物理硬件上的軟件,它的功能就是管理物理硬件,以便在不同的虛擬機之間共享這些物理資源(cpu,內(nèi)存,外設等等),既然 hypervisor 直接給物理外設打交道,那它當然需要運行在特權(quán)模式了,在過去沒有 virtualization extesion 的情況下,guest os 和 guest application只能都運行在de-privileged?模式,如下圖所示。

? ? Popek 和 Goldberg 有一篇虛擬化的經(jīng)典論文,把需要在特權(quán)模式下執(zhí)行的指令分成了兩類:

  • sensitive instructions(敏感指令):操作特權(quán)資源的指令,包括修改虛擬機的運行模式或者下面物理機的狀態(tài);讀寫時鐘、中斷等寄存器;訪問存儲保護系統(tǒng)、地址重定位系統(tǒng)及所有的I/O指令。
  • privileged instructions(特權(quán)指令):系統(tǒng)中有一些操作和管理關鍵系統(tǒng)資源的指令,這些指令只有在最高特權(quán)級上能夠正確運行。如果在非最高特權(quán)級上運行,特權(quán)指令會引發(fā)一個異常,處理器會陷入到最高特權(quán)級,交由系統(tǒng)軟件處理了。

? ? Popek和Goldberg提出構(gòu)建hypervisor的要求:敏感指令是特權(quán)指令的子集。這種標準現(xiàn)在被稱為classically virtualized(經(jīng)典可虛擬化模型),雖然在不滿足這個要求的情況下也可以做虛擬化(二進制翻譯技術(shù),后面會介紹),但是如果滿足這個要求,實現(xiàn)起來會容易很多。下面介紹現(xiàn)有的虛擬化技術(shù):
? ? ? 虛擬化場景下,要求將 GuestOS 內(nèi)核的特權(quán)解除,從原來的 0 降低到1或者3。這部分特權(quán)指令在Guest OS中發(fā)生的時候,就會產(chǎn)生 Trap,被VMM捕獲,從而由VMM完成。這就是虛擬的本質(zhì)方法,特權(quán)解除和陷入模擬(Privilege deprivileging/Trap-and-Emulation)
? ? ??虛擬化場景中敏感指令必須被VMM捕獲并完成。對于一般 RISC 處理器,如 MIPS,PowerPC 以及SPARC,敏感指令肯定是特權(quán)指令,但是x86 例外,x86絕大多數(shù)的敏感指令是特權(quán)指令,但是由于部分敏感指令不是特權(quán)指令,執(zhí)行這些指令的時候不會自動trap被VMM捕獲。

?

  • Pure virtualization(完全虛擬化)
    ? ? ? ? ?完全虛擬化要求硬件架構(gòu)是可虛擬化的(符合經(jīng)典可虛擬化模型),當?捕獲(trap)?進入 hypervisor 后,由 hypervisor 去模擬敏感指令的執(zhí)行,這項技術(shù)也被稱為陷入模式(trap-and-emulate 。當一個 guest os 想要去訪問特權(quán)資源(物理外設),就會產(chǎn)生一個 trap 喚醒 hypervisor,hypervisor 去模擬這個訪問,然后返回到 guest os 的下一條指令去繼續(xù)執(zhí)行。
    ? ? ? ? 其主要采用優(yōu)先級壓縮技術(shù)(Ring Compression)和?二進制代碼翻譯技術(shù)(Binary Translation)。優(yōu)先級壓縮技術(shù)讓 VMM 和Guest運行在不同的特權(quán)級下。
    ? ? ? ??對x86架構(gòu)而言,即VMM運行在最高特權(quán)級別Ring 0下,Guest OS運行在Ring 1下,用戶應用運行在Ring 3下。因此,Guest OS的核心指令無法直接下達到計算機系統(tǒng)硬件執(zhí)行,而是需要經(jīng)過VMM的捕獲模擬執(zhí)行(部分難以虛擬化的指令需要通過二進制翻譯【Binary Translation】技術(shù)進行轉(zhuǎn)換)。如下圖所示。

  • Binary rewriting(二進制重寫)
    二進制重寫就是當硬件架構(gòu)不可虛擬化(不符合經(jīng)典可虛擬化模型)采用的方法。
    它可以分為靜態(tài)的和動態(tài)的,
    1.?靜態(tài)的二進制重寫是通過掃描ELF文件,把所有的敏感指令替換成一個 trap 指令(系統(tǒng)調(diào)用指令),或者用一些非敏感指令去仿真執(zhí)行這條敏感指令;
    2. 動態(tài)的二進制重寫對敏感指令的處理和靜態(tài)的類似,只不過它是在運行時去逐條分析指令,其實這種方法更不好,因為不管是不是敏感指令,都需要逐條分析才能確定,非常耗時。
    ? ? ? ??靜態(tài)方法在運行時的性能要好過動態(tài)方法,但是經(jīng)常出現(xiàn)一些莫名其妙的錯誤,因為運行時狀態(tài)非常復雜,靜態(tài)修改很難預料到所有情況。上述過程如下圖所示。
    ???????

  • para-virtualization(類虛擬化)
    ? ? ? ??這種虛擬化方法,很多書都把它譯為半虛擬化,其實這種譯法是不準確的,半虛擬化(partial-virtualization)是一個早已存在的技術(shù),它只虛擬化部分外設來滿足某些專門的軟件的執(zhí)行環(huán)境,但是不能運行所有可能運行在物理機上的軟件。
    ? ? ? ? 如果讀者對此有疑問,請參閱《系統(tǒng)虛擬化:原理與實現(xiàn)》,intel開源技術(shù)中心和復旦大學并行處理研究所著,書中1.3節(jié)對此有討論。其實想解釋清楚這部分內(nèi)容是很難的,還要理解各種各樣的虛擬化漏洞。
    ? ? ? ?簡單來說,類虛擬化通過修改 guest os 的源碼(API級),使得 guest os 避免這些難以虛擬化的指令(虛擬化漏洞)。? ? ? ? ?操作系統(tǒng)通常會使用到處理器提供的全部功能,例如特權(quán)級別、地址空間和控制寄存器等。類虛擬化首先要解決的問題就是如何陷入VMM。典型的做法是修改 guest os 的相關代碼,讓 os主動讓出特權(quán)級別,而運行在次一級特權(quán)上。
    ? ? ? ?這樣,當 guest os 試圖去執(zhí)行特權(quán)指令時,保護異常被觸發(fā),從而提供截獲點供 VMM 來模擬(也可以采用 hypercall的方式,下面介紹)。既然內(nèi)核代碼已經(jīng)需要修改,類虛擬化還可以進一步優(yōu)化 I/O。也就是說,類虛擬化不是去模擬真實世界中的設備,因為太多的寄存器模擬會降低性能。相反,類虛擬化可以自定義出高度優(yōu)化的 I/O協(xié)議,這種I/O協(xié)議完全基于事物,可以達到近乎物理機的速度。
    ? ? ? ??其實OKL4用的類虛擬化就是修改hypervisor提供給guest os的API(不同于底層硬件),同時修改guest os的源碼,把那些敏感指令換成hypercall(calls into hypervisor)。下圖展示的是,對于pure virtualization,硬件和hypervisor的API是相同的,但是對于para-virtualization是不同的。

二. 虛擬化技術(shù)的比較

2.1?全虛擬化和二進制重寫(Pure virtualization and binary rewriting)

? ? ? ? 全虛擬化和二進制重寫都是不修改機器的 API 的,所以任何 guest os 都可以直接運行在虛擬化環(huán)境。但是,由于所有的特權(quán)指令都會導致 trap,所以在虛擬環(huán)境下特權(quán)指令的執(zhí)行開銷要遠遠高于在?本地(native)環(huán)境下。
? ? ? ??以前,x86 和 ARM 都不符合 經(jīng)典虛擬化(classically virtualized) 時,VMWare 采用 binary rewriting 在x86架構(gòu)上實現(xiàn)虛擬化,經(jīng)過優(yōu)化后的性能開銷小于10%,但是這項技術(shù)十分復雜。
? ? ? ??由于實現(xiàn)起來的復雜,就會增加運行在特權(quán)模式下的代碼,這會增加受攻擊(attack surface )和 hypervisor出現(xiàn) bug 的幾率,所以會降低整個系統(tǒng)的安全性和隔離性。

2.2 半虛擬化( Para-virtualization)

? ? ? ? 半虛擬化Para-virtualization雖然是一個新詞,在2002年中的Denali virtual machine monitor被提出來。但是這種設計理念早在 1970 的 IBM 的 CMS 系統(tǒng)就出現(xiàn)了,當時使用 DIAG指令調(diào)用到hypervisor里去,并且一直到現(xiàn)在還有很多研究機構(gòu)在使用這種理念,如Mach,Xen和L4。
? ? ? ? 半虛擬化相比于全虛擬化可以提供更好的性能,因為它直接使用各種 API 而不是通過 trap->decode->hardware emulation 的過程來實現(xiàn)仿真。
? ? ? ??當然,它的缺點我也在之前的博客中提到過,那就是必須修改源碼,讓guest os使用新的 API,這不僅是一項繁重的任務,同時對于一些非開源的操作系統(tǒng),我們必須采用其他方法,除非這些非開源操作系統(tǒng)的廠商愿意與我們合作。

2.3 虛擬化環(huán)境中的虛擬內(nèi)存(Virtual memory in virtualization environment)

? ? ? ? 為什么要把內(nèi)存管理部分單獨拿出來討論一下呢?因為這部分很復雜,其實之前我們討論的內(nèi)容主要都是cpu運行的問題,比如各種指令和各種模式之間的切換。關于內(nèi)存,我們先討論沒有引入 guest os時的虛擬內(nèi)存管理,然后再討論引入guest os之后的變化。
? ? ? ? 虛擬內(nèi)存管理涉及的內(nèi)容很多,這里不討論各種內(nèi)存分配算法,如何降低缺頁率等等,只分析虛擬地址如何轉(zhuǎn)換成物理地址。我們知道,ARM架構(gòu)是通過 MMU+TLB 來完成從VA(virtual address,虛擬地址)到 PA(physical address,物理地址)的轉(zhuǎn)換,對于頁表的訪問實際上是由硬件自動完成的(如果不缺頁的話)。
? ? ? ??但是加入了虛擬化之后,這個轉(zhuǎn)換就復雜了,guest page table 不完成從 va 到 pa 的轉(zhuǎn)換,只是負責從 guest va 到 guest pa的轉(zhuǎn)換,而由hypervisor完成由guest pa到實際物理地址的轉(zhuǎn)換,這個轉(zhuǎn)換過程如下圖所示。

? ? ? ? 這個圖表現(xiàn)的很清晰,但是想實現(xiàn)是非常難的,因為只有一個頁表基址寄存器,所以硬件無法識別是從guest va到guest pa的轉(zhuǎn)換還是va到pa的轉(zhuǎn)換,在沒有硬件支持的情況下,只能通過影子頁表才能實現(xiàn)
? ? ? ??影子頁表的原理也是把兩步轉(zhuǎn)換(guest va->guest pa->pa)轉(zhuǎn)換為一步,中間的同步用hash來做。
? ? ? ??影子頁表在構(gòu)建的時候,每次對guest page table的訪問都需要trap,由hypervisor把guest pa轉(zhuǎn)換成實際物理地址。
? ? ? ??如果讀者想了解這一塊內(nèi)容,我建議深入學習一下KVM以前關于影子頁表的實現(xiàn)(由于x86的硬件支持,目前KVM已經(jīng)放棄影子頁表),這里我們沒辦法深入探討影子頁表,但了解它大致是怎么一回事兒之后,我們可以分析以下它的性能。
? ? ? ??首先,它的性能一定非常不好,因為每次對guest page table的訪問都需要trap,而且每次guest page table的修改還需要同步到影子頁表上面,雖然用hash的方式能提速,但是相比于native環(huán)境性能差距比較大(NOVA做過一個實驗,光訪問頁表的性能損失大約是23%),而且實現(xiàn)起來非常復雜。
? ? ? ??Intel和ARM對這一部分都提供了硬件支持,由硬件來完成這里提到的兩級頁表轉(zhuǎn)換。其實根據(jù)程序運行時的局部性原理,如果每次訪問都能TLB hit的話,這種二級頁表轉(zhuǎn)換和一級頁表轉(zhuǎn)換差別不大,但是當TLB miss的時候,需要訪問two stage的頁表訪問的性能還是差別比較大的,盡管這部分由硬件來做。舉個例子,比如KVM在Linux-64位的情況下,是4級頁表轉(zhuǎn)換,從va到pa需要訪問5次頁表,那么引入 two stage 之后,就需要 5*5=25次訪問頁表,讀者可以思考一下這里為什么是相乘的關系。

三. ARM介紹

? ? ? ? 我們首先介紹 ARM 架構(gòu)里的各個部分,介紹它們的目的是為了理解當 arm 引入 virtualization extension 之后對它們的影響。

3.1 ARM總體介紹

? ? ? ? arm是一種精簡指令集(reduced instruction set computer,RISC)架構(gòu),精簡(reduced)的意思是每條匯編指令獨自完成所有的工作,而與之相對的復雜指令集則不是它的一條匯編指令可能會翻譯成好幾條機器指令。
? ? ? ??大部分精簡指令集的指令都在單個時鐘周期內(nèi)完成,它采用一種讀取和存儲分開的架構(gòu)(load-store architecture),數(shù)據(jù)處理指令和I/O指令是分開的,數(shù)據(jù)處理指令是操作一個寄存器的值,和復雜指令集不同,關于復雜指令集的對應操作讀者請自行查閱資料。
? ? ? ??現(xiàn)在arm已經(jīng)推出v8架構(gòu),關于 v8 架構(gòu)我還不太熟,所以這里以 v7 作為介紹(后續(xù)有時間我會研究下v8,在這里進行補充)。v7架構(gòu)包含16個32bit的通用寄存器,還有一些寄存器是和特定的處理器模式相關的,還有各種協(xié)處理器的寄存器,這些寄存器將會在后面展開敘述。

3.2 ARM協(xié)處理器介紹

? ? ? ? ARM協(xié)處理器是ARM架構(gòu)的重要擴展,ARM架構(gòu)允許最多16個協(xié)處理器,其中cp15被保留完成各種控制。cp15作用非常強大,它控制整個系統(tǒng)配置,cache和TLB的管理,MMU的控制和系統(tǒng)性能監(jiān)控,我們這里主要討論cp15的內(nèi)存管理功能。
? ? ? ? 當cpu想要訪問一個虛擬地址的時候,它首先去TLB里面查這個虛擬地址和ASID,都匹配的話就可以直接返回物理地址,cpu通過物理地址去訪問物理內(nèi)存就行了。如果TLB miss,MMU就會去訪問頁表,然后找到這個虛擬地址對應的物理地址,把這個虛擬地址、當前進程的PID、物理地址加入到TLB中去,然后返回物理地址給cpu去訪問內(nèi)存。這里面涉及的很多細節(jié)這里不討論了,建議讀者去參看ARM官方介紹。

3.3 處理器模式和TrustZone

? ? ? ? ARM v7包含8種處理器模式(在v8已經(jīng)變成4種exception level了,從EL0到El3),其中包含1種非特權(quán)模式和7種特權(quán)模式:

  • 特權(quán)模式:FIQ、IRQ、supervisor、monitor、abort、undefined、system;
  • 非特權(quán)模式:user。

顯然,除了應用程序運行在user模式以外,其他全部運行在特權(quán)模式。ARM的virtualization extension需要處理器支持TrustZone extension,我們來看一下TrustZone是什么。TrustZone將處理器的執(zhí)行狀態(tài)分為兩個世界:

  • secure world:用于運行可信軟件;
  • non-secure world:用于運行不可信軟件。

? ? ? ? 這里的兩個世界和處理器模式是重疊的,軟件可以在任何模式、任何世界上運行。那么secure world和non-secure world的區(qū)別在哪呢?這里的secure又從何而來?是這樣的,secure world有自己獨有的內(nèi)存和外設,這部分內(nèi)容只有運行在secure world的軟件可以訪問,運行在non-secure world的軟件是不可以訪問的。這里引入了一個新的處理器模式,monitor mode,它運行在secure world,被用于做雙系統(tǒng)(secure and non-secure world)之間的切換,如下圖所示。

我們可以基于TrustZone去做虛擬化,因為它能夠隔離內(nèi)存、中斷并且確保non-secure world的特權(quán)軟件也不可能訪問或者修改運行在secure world的軟件的配置信息。然后這樣做的缺陷是,在non-secure world只能運行一個guest os,在secure world運行一個hypervisor。Green Hill的INTEGRITY就是這樣做的,感興趣的讀者可以去Google一下。

3.4 中斷控制器

GIC(generic interrupt controller)是ARM里的中斷控制器,現(xiàn)在也已經(jīng)支持virtualization extension。GIC可以分為兩部分:

  • Distributor(分發(fā)器):分發(fā)器負責接收中斷,設置這個中斷是否enable和它的優(yōu)先級,之后把它送到對應的cpu interface上去。
  • CPU interface(中斷接口):這部分負責屏蔽低優(yōu)先級中斷(相對于正在處理的中斷的優(yōu)先級),讓高優(yōu)先級的中斷搶占cpu。

當外設產(chǎn)生中斷的時候,這個中斷首先發(fā)送給Distributor,Distributor將這個中斷發(fā)送給對應的cpu interface。當cpu interface接受到這個中斷的時候,它會檢查這個中斷是否enable,如果enable再去比較這個中斷的優(yōu)先級和當前正在處理的中斷的優(yōu)先級,進而決定處理器是否立即處理這個中斷。

3.5 ARM架構(gòu)的虛擬化問題(Virtualization Issues with the ARM Architecture)

? ? ? ? 標準的ARM架構(gòu)是不符合可虛擬化模型的,有很多敏感指令在非特權(quán)模式下執(zhí)行卻不會產(chǎn)生trap。比如CPS指令,這條指令的作用是改變處理器狀態(tài),當這條指令在用戶態(tài)執(zhí)行時不會產(chǎn)生trap,甚至沒有任何效果,可以認為是簡單的跳過。
? ? ? ??即使所有的敏感指令都會產(chǎn)生trap,在ARM架構(gòu)上用上述的trap-and-emulate技術(shù)也是很困難的,因為ARM的敏感指令非常多,只要和特權(quán)資源交互的指令都是敏感指令,比如虛擬內(nèi)存子系統(tǒng),中斷控制子系統(tǒng)和協(xié)處理器,用上述方式的話開銷太大,對系統(tǒng)性能有很大沖擊。比如,arm-v7架構(gòu)不支持頁表訪問的虛擬化,那么就需要影子頁表,每次訪問guest pa都需要trap,同樣地,中斷控制器也需要被仿真,當中斷很頻繁的時候(timer tick),這種仿真的開銷也是非常大的,為了克服這種種弊端,ARM推出了virtualization extension。

3.6 ARM對虛擬化的硬件支持

? ? ? ? 在討論arm新增加的virtualization extension之前,我們知道對硬件虛擬化的支持主要有intel的VT-x和AMD的AMD-V,它們兩個十分類似,所以這里我們只介紹VT-x,看看它對虛擬化做了怎樣的支持(為后面做對比)。

  • 將cpu的模式分為hypervisor(VMX root operation)和guest(VMX non-root operation)。
  • 可以配置一些敏感指令和事件,讓它們產(chǎn)生或者不產(chǎn)生trap。
  • (新增)提供擴展頁表(EPT,extended page table),通過這個頁表在硬件上完成second-stage of translation,其實就是常說的二級頁表翻譯。
  • (新增)在TLB上新增加了VM tag去標識每一個虛擬機,這樣可以避免每次VM-entry和VM-exit時的TLB flush操作(其實還增加了VPID,去標識VM里虛擬進程的進程id)。
  • (新增)在Intel的 VT-d里增加了對DMA操作的支持,而且是一種安全的DMA(具體怎么實現(xiàn)的安全讀者可以自己分析下)。

接下來我們看看ARM對虛擬化的支持,這里討論的虛擬化支持主要是針對v7架構(gòu),并且需要實現(xiàn)上文提到的TrustZone。利用硬件擴展實現(xiàn)pure virtualization的總體架構(gòu)如下圖所示:

  • hypervisor運行在non-secure world里的hyp mode,這個hyp mode使hypervisor可以管理non-secure world里其他所有的模式(user mode和kernel mode)里運行的軟件。
  • guest os運行在non-secure world的特權(quán)模式(kernel mode),guest application運行在non-secure world的user mode。

上述內(nèi)容是對虛擬化擴展的一個總體介紹,具體來說,ARM新增了以下幾個feature:

  • hyp mode:hyp mode是運行在non-secure world的最高特權(quán)級模式,如上圖所示。它負責管理guest os,hypervisor運行在這個新的模式里。這個模式將hypervisor和運行中的guest os分開,guest os運行在non-secure的kernel mode。
  • Second-stage of translation:由hypervisor負責把所有的gust pa轉(zhuǎn)換成實際物理地址,其實就是從物理上支持兩級頁表轉(zhuǎn)換,而不需要使用影子頁表。
  • 中斷控制:這部分后面展開敘述。
  • 仿真支持:當trap進hypervisor時,硬件向hypervisor提供一些額外的信息,消除了hypervisor取指令然后decode的開銷。因為對外設的模擬需要采用trap-and-emulate技術(shù),削減這項技術(shù)的開銷可以有效的提升性能。
  • trap配置:不是所有的敏感指令或特權(quán)操作都需要trap進hypervisor進行處理,我們可以配置指令或操作是否trap,這樣可以減少不必要的trap,從而減少開銷,提升性能。

讀者可以自行對比Intel和ARM對虛擬化支持的相同點和不同點,分析他們?yōu)槭裁催@樣做。接下來展開敘述上文提到的中斷控制部分。

3.7 中斷控制

? ? ? ? ARM創(chuàng)建了一個新的硬件模塊,virtual CPU interface,類比我們前面在介紹GIC時提到過的CPU interface,這個硬件模塊可以直接被map到guest os里,從而避免使用trap-and-emulate去仿真CPU interface,guest os可以直接操作這個virtual CPU interface,例如開、關中斷。當然關于GIC的另一個部分,Distributor,我們?nèi)匀恍枰ㄟ^trap-and-emulate去仿真,但是它對性能的影響不大,因為它只是在初始化的時候負責enable中斷,之后就不再修改了。
當中斷到來時,所有的中斷都首先被送到hypervisor里進行處理,由hypervisor通過virtual CPU interface發(fā)送給當前正在執(zhí)行的guest os。虛擬中斷可以和物理中斷進行映射,這樣guest os就可以直接操作物理中斷而不需要通過hypervisor了。下圖所示是一個中斷處理流程:

  • 外設產(chǎn)生一個中斷發(fā)送到Distributor
  • Distributor把這個中斷發(fā)送給CPU interface
  • CPU interface告訴hypervisor去處理這個中斷
  • hypervisor對這個中斷進行檢查,發(fā)現(xiàn)這個中斷是送給guest os處理的,它會設置一個虛擬中斷,將物理中斷和虛擬中斷連接在一起,把這個虛擬中斷加入到virtual CPU interface。
  • virtual CPU interface會根據(jù)hypervisor加入的虛擬中斷向guest os發(fā)送一個中斷
  • guest os通過virtual CPU interface發(fā)來的中斷進行處理,處理之后返回
  • virtual CPU interface發(fā)現(xiàn)這個虛擬中斷來自于一個物理中斷,就會在Dirtributor上清除這個物理中斷(表示處理完畢),整個虛擬中斷處理過程結(jié)束。
  • 這里面還涉及一個硬件擴展,論文上把它稱為“priority drop”。正常情況下,當一個中斷正在處理的時候,低優(yōu)先級的中斷是不能夠搶占處理器的,但是在虛擬化環(huán)境卻不是這樣,比方說有兩個guest os,我們暫且稱之為os1和os2,假設os1正在處理一個高優(yōu)先級中斷,這時又有一個中斷是給os2處理的,這個中斷的優(yōu)先級低于os1的中斷的優(yōu)先級,但是它們應該互不影響才對。ARM加入這個硬件擴展就是為了處理上述問題,每個guest os都有自己的優(yōu)先級屏蔽策略,互不影響。

    總結(jié)

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

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