QNX Hypervisor —— 虚拟机
一個(gè)正在運(yùn)行的虛擬機(jī)管理器包括虛擬機(jī)管理器微內(nèi)核及其虛擬化庫(libmod_qvm.a)和一個(gè)或多個(gè)虛擬機(jī)進(jìn)程實(shí)例(qvm)。
什么是虛擬機(jī)?
在QNX Hypervisor環(huán)境中,每個(gè)虛擬機(jī)(VM)都是一個(gè)qvm進(jìn)程實(shí)例。qvm進(jìn)程是一個(gè)操作系統(tǒng)進(jìn)程,運(yùn)行在內(nèi)核之外的虛擬機(jī)管理器宿主機(jī)中。每個(gè)實(shí)例都由一個(gè)標(biāo)識(shí)符進(jìn)行標(biāo)記,以便讓微內(nèi)核知道它是一個(gè)qvm進(jìn)程。
如果您還記得關(guān)于VM的任何內(nèi)容,請(qǐng)記住,從客戶機(jī)操作系統(tǒng)的角度來看,托管該客戶機(jī)的VM是硬件。這意味著,就像一個(gè)運(yùn)行在物理主板上的操作系統(tǒng)預(yù)期的某些硬件特征(體系結(jié)構(gòu)、主板規(guī)格、內(nèi)存和CPU、設(shè)備等),一個(gè)運(yùn)行在VM上的操作系統(tǒng)也期望這些特征:運(yùn)行客戶機(jī)的VM必須匹配客戶機(jī)的期望。
當(dāng)您配置VM時(shí),您實(shí)際上正在組裝一個(gè)硬件平臺(tái)。不同之處在于,您不是組裝物理存儲(chǔ)卡、CPU等,而是在指定機(jī)器的虛擬組件,qvm進(jìn)程將根據(jù)您的規(guī)格創(chuàng)建和配置這些組件。
關(guān)于什么地方出現(xiàn)什么東西的規(guī)則和真實(shí)的板子是一樣的:
-
不要安裝兩個(gè)東西,卻都試圖響應(yīng)相同物理地址。
-
您的VM配置所組裝的環(huán)境,必須是您將要運(yùn)行的軟件(客戶機(jī)操作系統(tǒng))準(zhǔn)備運(yùn)行的環(huán)境。
對(duì)硬件的類比,也在另一個(gè)方向上起作用。VM不需要知道它的客戶機(jī)在做什么,正如硬件不需要知道操作系統(tǒng)在做什么一樣。事實(shí)上,VM也不可能知道客戶機(jī)在做什么(“客戶機(jī)是一個(gè)二進(jìn)制大對(duì)象”)。
更多的有關(guān)配置VM的信息,請(qǐng)參見“配置”章節(jié)中的“組裝和配置VM”。
qvm服務(wù)
每個(gè)qvm進(jìn)程實(shí)例都提供的關(guān)鍵的虛擬機(jī)管理器服務(wù)。
VM啟動(dòng)
為了創(chuàng)建可以運(yùn)行客戶機(jī)操作系統(tǒng)的虛擬環(huán)境,qvm進(jìn)程實(shí)例在啟動(dòng)時(shí)執(zhí)行以下操作:
-
讀取、解析和驗(yàn)證VM配置文件(*.qvmconf)以及進(jìn)程的啟動(dòng)命令行所輸入的配置信息,如果配置無效則退出,并將有意義的錯(cuò)誤消息打印到日志中。
-
設(shè)置中間階段表(intermediate state tables)(ARM:階段2(Stage 2)的頁表,x86:擴(kuò)展頁表(Extended Page Tables:EPT))。
-
創(chuàng)建(組裝)和配置VM,包括:
-
-
為客戶機(jī)分配RAM(讀/寫)和ROM(只讀)
-
為它呈現(xiàn)給客戶機(jī)的每個(gè)虛擬CPU提供一個(gè)線程
-
準(zhǔn)備透?jìng)髟O(shè)備,并使得其對(duì)客戶機(jī)可用
-
為托管的客戶機(jī)定義和配置虛擬設(shè)備(vdev)
-
VM操作
在操作一個(gè)qvm進(jìn)程實(shí)例的過程中,執(zhí)行以下操作:
-
對(duì)客戶機(jī)嘗試訪問的內(nèi)存地址上下邊界設(shè)置陷阱,并確定如何處理它們(例如:如果地址是到vdev,則調(diào)用vdev代碼(客戶端退出,然后在vdev代碼完成時(shí)調(diào)用客戶端入口);如果該地址確實(shí)超出了邊界,做類似的處理)。
-
在釋放物理CPU前,保存其客戶機(jī)的上下文。
-
在將客戶機(jī)重新投入執(zhí)行之前,恢復(fù)其客戶機(jī)的上下文。
-
負(fù)責(zé)任何失效處理。
-
執(zhí)行確保VM完整性所需的任何維護(hù)活動(dòng)。
管理客戶機(jī)上下文
在虛擬化環(huán)境中,CPU虛擬化擴(kuò)展的職責(zé)是從客戶機(jī)的動(dòng)作中,識(shí)別出客戶機(jī)什么時(shí)候需要退出。不過當(dāng)CPU觸發(fā)客戶機(jī)退出時(shí),托管客戶機(jī)的qvm進(jìn)程實(shí)例(例如VM)會(huì)保存客戶機(jī)的上下文。當(dāng)客戶機(jī)完成其任務(wù),并準(zhǔn)備重新進(jìn)入時(shí),進(jìn)程實(shí)例將恢復(fù)客戶的上下文。
管理特權(quán)等級(jí)
qvm進(jìn)程實(shí)例管理客戶機(jī)在進(jìn)入和退出時(shí)特權(quán)級(jí)別,以確保客戶機(jī)可以運(yùn)行,并保護(hù)系統(tǒng)不受錯(cuò)誤代碼的影響。
在客戶機(jī)進(jìn)入時(shí),qvm進(jìn)程實(shí)例要求CPU提供客戶機(jī)運(yùn)行所需的特權(quán)級(jí)別,僅此而已。
在客戶端退出時(shí),qvm進(jìn)程實(shí)例要求CPU恢復(fù)到虛擬機(jī)管理器宿主機(jī)運(yùn)行所需的特權(quán)級(jí)別。
只有CPU硬件才能改變特權(quán)級(jí)別。qvm進(jìn)程執(zhí)行更改CPU特權(quán)級(jí)別所需的操作。這種機(jī)制(也即操作)是特定于體系結(jié)構(gòu)的。
客戶機(jī)訪問虛擬和物理的資源
每個(gè)qvm進(jìn)程實(shí)例都管理其托管的客戶機(jī)對(duì)虛擬和物理資源的訪問。
當(dāng)客戶機(jī)以以下的某種方式,試圖訪問其客戶機(jī)物理內(nèi)存中的地址時(shí),托管該客戶機(jī)的qvm進(jìn)程將檢查該訪問嘗試,并作出如下響應(yīng):
允許
????????客戶機(jī)試圖訪問其所擁有的內(nèi)存區(qū)域。
????????qvm進(jìn)程實(shí)例不做任何操作。
透?jìng)髟O(shè)備
????????客戶機(jī)試圖訪問分配給物理設(shè)備的內(nèi)存,并且客戶機(jī)的VM被配置為知道客戶機(jī)可以直接訪問該設(shè)備。
????????qvm進(jìn)程實(shí)例不做任何操作。客戶機(jī)直接與設(shè)備通信。
虛擬設(shè)備
????????客戶機(jī)試圖訪問分配給虛擬設(shè)備的內(nèi)存(虛擬的或準(zhǔn)虛擬的)
????????qvm進(jìn)程實(shí)例請(qǐng)求適當(dāng)?shù)奶貦?quán)級(jí)別更改,并將執(zhí)行傳遞給它所請(qǐng)求設(shè)備的代碼。例如,客戶機(jī)的CPUID請(qǐng)求會(huì)觸發(fā)qvm進(jìn)程實(shí)例來仿真硬件,并像非虛擬化系統(tǒng)中的硬件那樣響應(yīng)客戶機(jī)。
故障
????????客戶端試圖訪問它沒有權(quán)限訪問的內(nèi)存。
????????qvm進(jìn)程實(shí)例向客戶返回一個(gè)適當(dāng)?shù)腻e(cuò)誤。
以上是通過CPU進(jìn)行的訪問嘗試。DMA訪問控制由SMMU管理器管理(參見“DMA設(shè)備容器(smmuman)”)。
原文鏈接:
http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.hypervisor.user/topic/virt/qvm.html
總結(jié)
以上是生活随笔為你收集整理的QNX Hypervisor —— 虚拟机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt_套接字
- 下一篇: 如何判断自己是否适合播音主持,学播音主持