一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ARM平臺(tái)的虛擬化介紹

 sofes 2017-12-01

本篇博文主要介紹虛擬化的基本思想以及在arm平臺(tái)如何做虛擬化,arm提供的硬件feature等等。

虛擬化技術(shù)簡(jiǎn)介

虛擬化技術(shù)

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

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

  • sensitive instructions(敏感指令):這些指令試圖去更改系統(tǒng)資源的配置信息,或者它的執(zhí)行結(jié)果依賴于系統(tǒng)的狀態(tài)。
  • privileged instructions(特權(quán)指令):這些指令在非特權(quán)模式下會(huì)trap(產(chǎn)生異常,陷入中斷向量表),在特權(quán)模式下可以正常執(zhí)行。

Popek和Goldberg提出構(gòu)建hypervisor的要求:敏感指令是特權(quán)指令的子集。這種標(biāo)準(zhǔn)現(xiàn)在被稱為classically virtualized(經(jīng)典可虛擬化模型),雖然在不滿足這個(gè)要求的情況下也可以做虛擬化(二進(jìn)制翻譯技術(shù),后面會(huì)介紹),但是如果滿足這個(gè)要求,實(shí)現(xiàn)起來會(huì)容易很多。下面介紹現(xiàn)有的虛擬化技術(shù):

  • Pure virtualization(完全虛擬化):完全虛擬化要求硬件架構(gòu)是可虛擬化的(符合經(jīng)典可虛擬化模型),當(dāng)trap進(jìn)入hypervisor后,由hypervisor去模擬敏感指令的執(zhí)行,這項(xiàng)技術(shù)也被稱為trap-and-emulate。當(dāng)一個(gè)guest os想要去訪問特權(quán)資源(物理外設(shè)),就會(huì)產(chǎn)生一個(gè)trap喚醒hypervisor,hypervisor去模擬這個(gè)訪問,然后返回到guest os的下一條指令去繼續(xù)執(zhí)行。如下圖所示,紅色箭頭表示一個(gè)trap。可以看出,每一條特權(quán)指令都需要很多條指令去仿真,所以這種trap-and-emulate開銷非常大,對(duì)系統(tǒng)性能有很大影響。

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

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

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

Pure virtualization and binary rewriting

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

Para-virtualization

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

Virtual memory in virtualization environment

為什么要把內(nèi)存管理部分單獨(dú)拿出來討論一下呢?因?yàn)檫@部分很復(fù)雜,其實(shí)之前我們討論的內(nèi)容主要都是cpu運(yùn)行的問題,比如各種指令和各種模式之間的切換。關(guān)于內(nèi)存,我們先討論沒有引入guest os時(shí)的虛擬內(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)換,對(duì)于頁表的訪問實(shí)際上是由硬件自動(dòng)完成的(如果不缺頁的話)。但是加入了虛擬化之后,這個(gè)轉(zhuǎn)換就復(fù)雜了,guest page table不完成從va到pa的轉(zhuǎn)換,只是負(fù)責(zé)從guest va到guest pa的轉(zhuǎn)換,而由hypervisor完成由guest pa到實(shí)際物理地址的轉(zhuǎn)換,這個(gè)轉(zhuǎn)換過程如下圖所示。

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

ARM介紹

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

ARM總體介紹

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

ARM協(xié)處理器介紹

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

處理器模式和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。

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

  • secure world:用于運(yùn)行可信軟件;
  • non-secure world:用于運(yùn)行不可信軟件。

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

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

中斷控制器

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

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

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

Virtualization Issues with the ARM Architecture

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

ARM對(duì)虛擬化的硬件支持

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

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

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

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

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

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

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

中斷控制

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

  1. 外設(shè)產(chǎn)生一個(gè)中斷發(fā)送到Distributor
  2. Distributor把這個(gè)中斷發(fā)送給CPU interface
  3. CPU interface告訴hypervisor去處理這個(gè)中斷
  4. hypervisor對(duì)這個(gè)中斷進(jìn)行檢查,發(fā)現(xiàn)這個(gè)中斷是送給guest os處理的,它會(huì)設(shè)置一個(gè)虛擬中斷,將物理中斷和虛擬中斷連接在一起,把這個(gè)虛擬中斷加入到virtual CPU interface。
  5. virtual CPU interface會(huì)根據(jù)hypervisor加入的虛擬中斷向guest os發(fā)送一個(gè)中斷
  6. guest os通過virtual CPU interface發(fā)來的中斷進(jìn)行處理,處理之后返回
  7. virtual CPU interface發(fā)現(xiàn)這個(gè)虛擬中斷來自于一個(gè)物理中斷,就會(huì)在Dirtributor上清除這個(gè)物理中斷(表示處理完畢),整個(gè)虛擬中斷處理過程結(jié)束。

這里面還涉及一個(gè)硬件擴(kuò)展,論文上把它稱為“priority drop”。正常情況下,當(dāng)一個(gè)中斷正在處理的時(shí)候,低優(yōu)先級(jí)的中斷是不能夠搶占處理器的,但是在虛擬化環(huán)境卻不是這樣,比方說有兩個(gè)guest os,我們暫且稱之為os1和os2,假設(shè)os1正在處理一個(gè)高優(yōu)先級(jí)中斷,這時(shí)又有一個(gè)中斷是給os2處理的,這個(gè)中斷的優(yōu)先級(jí)低于os1的中斷的優(yōu)先級(jí),但是它們應(yīng)該互不影響才對(duì)。ARM加入這個(gè)硬件擴(kuò)展就是為了處理上述問題,每個(gè)guest os都有自己的優(yōu)先級(jí)屏蔽策略,互不影響。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲少妇人妻一区二区| 欧美午夜伦理在线观看| 国产又粗又硬又大又爽的视频| 国产成人免费激情视频| 91欧美一区二区三区| 亚洲国产精品久久琪琪| 国产精品久久熟女吞精| 人妻一区二区三区在线| 午夜精品黄片在线播放| 91亚洲熟女少妇在线观看| 国产成人精品99在线观看| 亚洲中文字幕在线观看黑人| 丰满少妇高潮一区二区| 亚洲精品中文字幕欧美| 精品欧美一区二区三久久| 午夜国产成人福利视频| 午夜视频成人在线免费| 国产日韩欧美国产欧美日韩| 欧美日韩黑人免费观看| 91精品国产av一区二区| 亚洲一区二区精品国产av| 午夜日韩在线观看视频| 成年男女午夜久久久精品| 日韩中文字幕有码午夜美女| 亚洲午夜av一区二区| 高清一区二区三区大伊香蕉| 国产成人亚洲精品青草天美| 久久亚洲成熟女人毛片| 亚洲一区二区精品免费| 丝袜破了有美女肉体免费观看| 精品女同在线一区二区| 老司机精品一区二区三区| 国产91麻豆精品成人区| 亚洲国产精品久久综合网| 91人妻人人揉人人澡人| 亚洲精品成人综合色在线| 日韩精品一区二区一牛| 日韩中文字幕人妻精品| 国产主播精品福利午夜二区| 国产高清精品福利私拍| 久久天堂夜夜一本婷婷|