一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法
【專利摘要】本發(fā)明公開(kāi)了一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法,它包括一個(gè)設(shè)備初始化步驟和一個(gè)I/O口讀寫處理步驟,所述的設(shè)備初始化步驟包括:分配模擬設(shè)備資源配置對(duì)象;將虛擬子數(shù)據(jù)卡信息注冊(cè)到虛擬機(jī)子模塊;根據(jù)初始化指定的數(shù)據(jù)卡類型生成相應(yīng)的設(shè)備節(jié)點(diǎn)名;對(duì)I/O口讀寫操作處理函數(shù)進(jìn)行注冊(cè);虛擬子數(shù)據(jù)卡的I/O口讀寫范圍的申請(qǐng);結(jié)束初始化設(shè)置。本發(fā)明不需要對(duì)硬件進(jìn)行專門設(shè)計(jì)、可在虛擬子模塊中提供虛擬的子數(shù)據(jù)卡、各子數(shù)據(jù)卡之間相互獨(dú)立,互不干擾、且具備遷移功能。
【專利說(shuō)明】一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]虛擬化,是指計(jì)算元件在虛擬的基礎(chǔ)上而不是真實(shí)的基礎(chǔ)上運(yùn)行,是一個(gè)為了簡(jiǎn)化管理,優(yōu)化資源的解決方案,通過(guò)虛擬話技術(shù)可以擴(kuò)大硬件的容量,簡(jiǎn)化軟件的重新配置過(guò)程,允許一個(gè)平臺(tái)同時(shí)運(yùn)行多個(gè)操作系統(tǒng),并且應(yīng)用程序都可以在相互獨(dú)立的空間內(nèi)運(yùn)行而互不影響,從而顯著提高計(jì)算機(jī)的工作效率。
[0003]在計(jì)算機(jī)虛擬化中,虛擬機(jī)管理器(VMM)模擬底層硬件,為虛擬機(jī)子系統(tǒng)(Guest OS)提供訪問(wèn)虛擬設(shè)備的接口。VMM基本可以分為兩種工作模式:完全虛擬化(Full virtual izat ion)和半虛擬化(Paravirtualizat ion)。在完全虛擬化中,物理設(shè)備在虛擬機(jī)子系統(tǒng)之間共享使用,子系統(tǒng)的I/O訪問(wèn)被VMM捕獲,由設(shè)備模型來(lái)進(jìn)行模擬。完全虛擬化技術(shù)中,VMM提供了對(duì)子系統(tǒng)I/O操作的捕獲支持。對(duì)于I/O內(nèi)存映射,VMM 一般通過(guò)頁(yè)面失效的方式進(jìn)行捕獲;然后,這些I/O操作通過(guò)設(shè)備模擬模型模塊進(jìn)行解析處理;最后,設(shè)備模擬模型模塊通過(guò)本地設(shè)備驅(qū)動(dòng)操作真實(shí)的硬件設(shè)備?,F(xiàn)有的設(shè)備虛擬化一般需要硬件專門支持,這將使數(shù)據(jù)卡的設(shè)計(jì)復(fù)雜;硬件虛擬化能提供的虛擬數(shù)據(jù)卡數(shù)目受硬件資源限制。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種不需要對(duì)硬件進(jìn)行專門設(shè)計(jì)、可在虛擬子模塊中提供虛擬的子數(shù)據(jù)卡、各子數(shù)據(jù)卡之間相互獨(dú)立,互不干擾、且具備遷移功能的基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法。
[0005]本發(fā)明的目的是通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn)的:一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法,它包括一個(gè)設(shè)備初始化步驟和一個(gè)I/o 口讀寫處理步驟,所述的設(shè)備初始化步驟包括以下步驟:
5101:分配模擬設(shè)備資源配置對(duì)象;
5102:將虛擬子數(shù)據(jù)卡信息注冊(cè)到虛擬機(jī)子模塊;
5103:根據(jù)初始化指定的數(shù)據(jù)卡類型生成相應(yīng)的設(shè)備節(jié)點(diǎn)名;
5104:對(duì)I/O 口讀寫操作處理函數(shù)進(jìn)行注冊(cè);
5105:虛擬子數(shù)據(jù)卡的I/O 口讀寫范圍的申請(qǐng);
5106:結(jié)束初始化設(shè)置;
所述的I/o 口讀寫處理步驟包括I/O 口讀處理步驟和I/O 口寫處理步驟,所述的I/O口讀處理步驟包括以下步驟:
52011:獲取I/O 口讀操作指令,對(duì)I/O 口所讀取的數(shù)據(jù)進(jìn)行判斷;
52012:判斷I/O 口讀取的數(shù)據(jù)是否為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),若為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),則執(zhí)行步驟S2013,否則執(zhí)行步驟S2014 ;52013:讀取DMA傳輸?shù)刂芳拇嫫鲀?nèi)的數(shù)據(jù),并返回DMA傳輸?shù)刂芳拇嫫鲀?nèi)的數(shù)據(jù)處理值,完成I/O 口數(shù)據(jù)讀取處理;
52014:判斷I/O 口讀取的數(shù)據(jù)是否為控制狀態(tài)寄存器數(shù)據(jù),若為控制狀態(tài)寄存器數(shù)據(jù),則執(zhí)行步驟S2015,否則執(zhí)行步驟S2016 ;
52015:讀取控制狀態(tài)寄存器內(nèi)的數(shù)據(jù),返回控制狀態(tài)寄存器內(nèi)的數(shù)據(jù)處理值,完成1/0口數(shù)據(jù)讀取處理;
52016:返回0,完成I/O 口數(shù)據(jù)讀取處理;
所述的I/O 口寫處理步驟包括以下步驟:
52021:獲取I/O 口寫操作指令,對(duì)I/O 口所讀取的數(shù)據(jù)進(jìn)行判斷;
52022:判斷I/O 口所讀取的數(shù)據(jù)是否為DMA地址標(biāo)志寄存器數(shù)據(jù),若為DMA地址標(biāo)志寄存器數(shù)據(jù),則執(zhí)行步驟S2023,否則跳轉(zhuǎn)至步驟S2026 ;
52023:將讀取到的DMA地址標(biāo)志寄存器內(nèi)的數(shù)據(jù)傳輸至真實(shí)數(shù)據(jù)卡設(shè)備;
52024:讀取真實(shí)數(shù)據(jù)卡設(shè)備中的數(shù)據(jù),作為返回值寫入虛擬機(jī)子模塊中的DMA地址寄存器內(nèi);
52025:完成I/O 口寫處理步驟;
52026:判斷I/O 口所讀取的數(shù)據(jù)是否為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),若為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),則執(zhí)行步驟S2027,否則執(zhí)行步驟S2028 ;
52027:將讀取到的數(shù)據(jù)寫入指定的DMA傳輸?shù)刂芳拇嫫鳎瓿蒊/O 口寫處理;
52028:判斷I/O 口所讀取到的數(shù)據(jù)是否為控制狀態(tài)寄存器數(shù)據(jù),若為控制狀態(tài)寄存器數(shù)據(jù),則執(zhí)行步驟S2029,否則執(zhí)行步驟S2030 ;
52029:將控制狀態(tài)寄存器中的指定位和虛擬子數(shù)據(jù)卡的中斷標(biāo)志清零,完成I/O 口寫處理;
52030:不響應(yīng)操作,完成I/O 口寫處理。
[0006]所述的一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法,它還包括一個(gè)設(shè)備遷入步驟和設(shè)備遷出步驟,所述的設(shè)備遷入步驟包括以下步驟:
53011:讀取數(shù)據(jù),將DMA地址寄存器和控制狀態(tài)寄存器中的數(shù)據(jù)進(jìn)行恢復(fù);
53012:讀取數(shù)據(jù),恢復(fù)虛擬子系統(tǒng)相關(guān)的通信會(huì)話上下文環(huán)境;
53013:完成設(shè)備遷入;
所述的設(shè)備遷出步驟包括以下步驟:
53021:保存DMA地址寄存器和控制狀態(tài)寄存器中的數(shù)據(jù)信息;
53022:獲取虛擬子系統(tǒng)相關(guān)的通信會(huì)話的上下文環(huán)境,并保存;
53023:完成設(shè)備遷出。
[0007]本發(fā)明的有益效果是:不需要對(duì)進(jìn)行專門設(shè)計(jì),從而提高了數(shù)據(jù)卡虛擬化的使用范圍;能夠設(shè)置多個(gè)子數(shù)據(jù)卡,且各子數(shù)據(jù)卡之間相互獨(dú)立,互補(bǔ)干擾;且具有設(shè)備遷移功倉(cāng)泛。
【專利附圖】
【附圖說(shuō)明】
[0008]圖1為本發(fā)明的系統(tǒng)概略框圖;
圖2為本發(fā)明的設(shè)備初始化流程圖;圖3為本發(fā)明的I/O 口讀處理流程圖;
圖4為本發(fā)明的I/O 口寫處理流程圖;
圖5為本發(fā)明的設(shè)備遷入流程圖;
圖6為本發(fā)明的設(shè)備遷出流程圖。
【具體實(shí)施方式】
[0009]下面結(jié)合附圖進(jìn)一步詳細(xì)描述本發(fā)明的技術(shù)方案,但本發(fā)明的保護(hù)范圍不局限于以下所述。
[0010]本發(fā)明的系統(tǒng)概略框圖如圖1所示,它包括虛擬機(jī)子模塊、數(shù)據(jù)卡虛擬化模塊、數(shù)據(jù)卡驅(qū)動(dòng)模塊和數(shù)據(jù)卡設(shè)備,數(shù)據(jù)卡虛擬化模塊包括設(shè)備模擬模型單元、資源管理單元和遷移管理單元,設(shè)備模擬模型單元分別與資源管理單元、數(shù)據(jù)卡驅(qū)動(dòng)模塊和虛擬機(jī)子模塊相連,資源管理單元和遷移管理單元相連;所述的數(shù)字卡設(shè)備包括遷移支持模塊,遷移支持模塊和遷移管理單元相連,遷移管理單元還和數(shù)據(jù)卡驅(qū)動(dòng)模塊相連。
[0011]在圖1中,設(shè)備模擬模型單元用于產(chǎn)生虛擬子數(shù)據(jù)卡的對(duì)象實(shí)例,并初始化其配置空間參數(shù),然后將對(duì)象實(shí)例注冊(cè)到虛擬機(jī)子模塊的PCI總線(類似于插入PCI加密卡的動(dòng)作),最后將I/O讀寫的處理方法注冊(cè)到VMM ;資源管理單元用于保存虛擬子加密卡的設(shè)備信息、控制狀態(tài)寄存器以及傳輸?shù)刂罚粩?shù)據(jù)卡驅(qū)動(dòng)模塊用于處理其它寄存器的訪問(wèn),并將處理結(jié)果傳送至數(shù)據(jù)卡設(shè)備;遷移管理單元用于響應(yīng)VMM的遷移命令,它在遷出/遷入過(guò)程中將訪問(wèn)資源管理單元,以及通過(guò)數(shù)據(jù)卡驅(qū)動(dòng)模塊訪問(wèn)數(shù)據(jù)卡設(shè)備的遷移支持功能;遷移支持模塊用于響應(yīng)遷移管理單元的遷移命令,導(dǎo)入/導(dǎo)出數(shù)據(jù)卡設(shè)備中虛擬子數(shù)據(jù)卡所涉及的通信會(huì)話的上下文環(huán)境。
[0012]所述的控制狀態(tài)寄存器用于模擬虛擬子數(shù)據(jù)卡的中斷控制狀態(tài),它以二進(jìn)制位表示中斷來(lái)源,由設(shè)備模擬模型單元根據(jù)設(shè)備響應(yīng)進(jìn)行置位,并由虛擬子模塊通過(guò)I/o請(qǐng)求清零;所述的傳輸?shù)刂酚糜诒4嫣摂M子數(shù)據(jù)卡的虛擬子模塊系統(tǒng)中分配得到DMA傳輸?shù)刂?,其值由虛擬子模塊通過(guò)I/O請(qǐng)求寫入,設(shè)備模擬模型單元通過(guò)DMA傳輸?shù)刂放c虛擬子系統(tǒng)進(jìn)行數(shù)據(jù)交互;所述的通信會(huì)話的上下文環(huán)境包括通信會(huì)話的登錄狀態(tài)、通信會(huì)話使用的數(shù)據(jù)資源,如:工作模式、密鑰等。
[0013]如圖2、3、4、5和6所示,一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法,它包括一個(gè)設(shè)備初始化步驟和一個(gè)I/o 口讀寫處理步驟,所述的設(shè)備初始化步驟包括以下步驟:
5101:分配模擬設(shè)備資源配置對(duì)象;
5102:將虛擬子數(shù)據(jù)卡信息注冊(cè)到虛擬機(jī)子模塊;
5103:根據(jù)初始化指定的數(shù)據(jù)卡類型生成相應(yīng)的設(shè)備節(jié)點(diǎn)名;
5104:對(duì)I/O 口讀寫操作處理函數(shù)進(jìn)行注冊(cè);
5105:虛擬子數(shù)據(jù)卡的I/O 口讀寫范圍的申請(qǐng);
5106:結(jié)束初始化設(shè)置;
所述的I/o 口讀寫處理步驟包括I/O 口讀處理步驟和I/O 口寫處理步驟,所述的I/O口讀處理步驟包括以下步驟:
52011:獲取I/O 口讀操作指令,對(duì)I/O 口所讀取的數(shù)據(jù)進(jìn)行判斷;
52012:判斷I/O 口讀取的數(shù)據(jù)是否為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),若為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),則執(zhí)行步驟S2013,否則執(zhí)行步驟S2014 ;
52013:讀取DMA傳輸?shù)刂芳拇嫫鲀?nèi)的數(shù)據(jù),并返回DMA傳輸?shù)刂芳拇嫫鲀?nèi)的數(shù)據(jù)處理值,完成I/o 口數(shù)據(jù)讀取處理;
52014:判斷I/O 口讀取的數(shù)據(jù)是否為控制狀態(tài)寄存器數(shù)據(jù),若為控制狀態(tài)寄存器數(shù)據(jù),則執(zhí)行步驟S2015,否則執(zhí)行步驟S2016 ;
52015:讀取控制狀態(tài)寄存器內(nèi)的數(shù)據(jù),返回控制狀態(tài)寄存器內(nèi)的數(shù)據(jù)處理值,完成1/0口數(shù)據(jù)讀取處理;
52016:返回0,完成I/O 口數(shù)據(jù)讀取處理;
所述的I/O 口寫處理步驟包括以下步驟:
52021:獲取I/O 口寫操作指令,對(duì)I/O 口所讀取的數(shù)據(jù)進(jìn)行判斷;
52022:判斷I/O 口所讀取的數(shù)據(jù)是否為DMA地址標(biāo)志寄存器數(shù)據(jù),若為DMA地址標(biāo)志寄存器數(shù)據(jù),則執(zhí)行步驟S2023,否則跳轉(zhuǎn)至步驟S2026 ;
52023:將讀取到的DMA地址標(biāo)志寄存器內(nèi)的數(shù)據(jù)傳輸至真實(shí)數(shù)據(jù)卡設(shè)備;
52024:讀取真實(shí)數(shù)據(jù)卡設(shè)備中的數(shù)據(jù),作為返回值寫入虛擬機(jī)子模塊中的DMA地址寄存器內(nèi);
52025:完成I/O 口寫處理步驟;
52026:判斷I/O 口所讀取的數(shù)據(jù)是否為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),若為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),則執(zhí)行步驟S2027,否則執(zhí)行步驟S2028 ;
52027:將讀取到的數(shù)據(jù)寫入指定的DMA傳輸?shù)刂芳拇嫫?,完成I/O 口寫處理;
52028:判斷I/O 口所讀取到的數(shù)據(jù)是否為控制狀態(tài)寄存器數(shù)據(jù),若為控制狀態(tài)寄存器數(shù)據(jù),則執(zhí)行步驟S2029,否則執(zhí)行步驟S2030 ;
52029:將控制狀態(tài)寄存器中的指定位和虛擬子數(shù)據(jù)卡的中斷標(biāo)志清零,完成I/O 口寫處理;
52030:不響應(yīng)操作,完成I/O 口寫處理。
[0014]所述的一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法,它還包括一個(gè)設(shè)備遷入步驟和設(shè)備遷出步驟,所述的設(shè)備遷入步驟包括以下步驟:
53011:讀取數(shù)據(jù),將DMA地址寄存器和控制狀態(tài)寄存器中的數(shù)據(jù)進(jìn)行恢復(fù);
53012:讀取數(shù)據(jù),恢復(fù)虛擬子系統(tǒng)相關(guān)的通信會(huì)話上下文環(huán)境;
53013:完成設(shè)備遷入;
所述的設(shè)備遷出步驟包括以下步驟:
53021:保存DMA地址寄存器和控制狀態(tài)寄存器中的數(shù)據(jù)信息;
53022:獲取虛擬子系統(tǒng)相關(guān)的通信會(huì)話的上下文環(huán)境,并保存;
53023:完成設(shè)備遷出。
[0015]該方法可以使數(shù)據(jù)卡設(shè)備在虛擬機(jī)子模塊中呈現(xiàn)出至少一個(gè)虛擬子數(shù)據(jù)卡,供虛擬機(jī)子模塊使用。
【權(quán)利要求】
1.一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法,其特征在于:它包括一個(gè)設(shè)備初始化步驟和一個(gè)I/O 口讀寫處理步驟,所述的設(shè)備初始化步驟包括以下步驟:5101:分配模擬設(shè)備資源配置對(duì)象;5102:將虛擬子數(shù)據(jù)卡信息注冊(cè)到虛擬機(jī)子模塊;5103:根據(jù)初始化指定的數(shù)據(jù)卡類型生成相應(yīng)的設(shè)備節(jié)點(diǎn)名;5104:對(duì)I/O 口讀寫操作處理函數(shù)進(jìn)行注冊(cè);5105:虛擬子數(shù)據(jù)卡的I/O 口讀寫范圍的申請(qǐng);5106:結(jié)束初始化設(shè)置;所述的I/o 口讀寫處理步驟包括I/O 口讀處理步驟和I/O 口寫處理步驟,所述的I/O口讀處理步驟包括以下步驟:52011:獲取I/O 口讀操作指令,對(duì)I/O 口所讀取的數(shù)據(jù)進(jìn)行判斷;52012:判斷I/O 口讀取的數(shù)據(jù)是否為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),若為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),則執(zhí)行步驟S2013,否則執(zhí)行步驟S2014 ;52013:讀取DMA傳輸?shù)刂芳拇嫫鲀?nèi)的數(shù)據(jù),并返回DMA傳輸?shù)刂芳拇嫫鲀?nèi)的數(shù)據(jù)處理值,完成I/o 口數(shù)據(jù)讀取 處理;52014:判斷I/O 口讀取的數(shù)據(jù)是否為控制狀態(tài)寄存器數(shù)據(jù),若為控制狀態(tài)寄存器數(shù)據(jù),則執(zhí)行步驟S2015,否則執(zhí)行步驟S2016 ;52015:讀取控制狀態(tài)寄存器內(nèi)的數(shù)據(jù),返回控制狀態(tài)寄存器內(nèi)的數(shù)據(jù)處理值,完成1/0口數(shù)據(jù)讀取處理;52016:返回0,完成I/O 口數(shù)據(jù)讀取處理;所述的I/O 口寫處理步驟包括以下步驟:52021:獲取I/O 口寫操作指令,對(duì)I/O 口所讀取的數(shù)據(jù)進(jìn)行判斷;52022:判斷I/O 口所讀取的數(shù)據(jù)是否為DMA地址標(biāo)志寄存器數(shù)據(jù),若為DMA地址標(biāo)志寄存器數(shù)據(jù),則執(zhí)行步驟S2023,否則跳轉(zhuǎn)至步驟S2026 ;52023:將讀取到的DMA地址標(biāo)志寄存器內(nèi)的數(shù)據(jù)傳輸至真實(shí)數(shù)據(jù)卡設(shè)備;52024:讀取真實(shí)數(shù)據(jù)卡設(shè)備中的數(shù)據(jù),作為返回值寫入虛擬機(jī)子模塊中的DMA地址寄存器內(nèi);52025:完成I/O 口寫處理步驟;52026:判斷I/O 口所讀取的數(shù)據(jù)是否為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),若為DMA傳輸?shù)刂芳拇嫫鲾?shù)據(jù),則執(zhí)行步驟S2027,否則執(zhí)行步驟S2028 ;52027:將讀取到的數(shù)據(jù)寫入指定的DMA傳輸?shù)刂芳拇嫫鳎瓿蒊/O 口寫處理;52028:判斷I/O 口所讀取到的數(shù)據(jù)是否為控制狀態(tài)寄存器數(shù)據(jù),若為控制狀態(tài)寄存器數(shù)據(jù),則執(zhí)行步驟S2029,否則執(zhí)行步驟S2030 ;52029:將控制狀態(tài)寄存器中的指定位和虛擬子數(shù)據(jù)卡的中斷標(biāo)志清零,完成I/O 口寫處理;52030:不響應(yīng)操作,完成I/O 口寫處理。
2.根據(jù)權(quán)利要求1所述的一種基于設(shè)備模擬的數(shù)據(jù)卡虛擬化實(shí)現(xiàn)方法,其特征在于:它還包括一個(gè)設(shè)備遷入步驟和設(shè)備遷出步驟,所述的設(shè)備遷入步驟包括以下步驟:S3011:讀取數(shù)據(jù),將DMA地址寄存器和控制狀態(tài)寄存器中的數(shù)據(jù)進(jìn)行恢復(fù);53012:讀取數(shù)據(jù),恢復(fù)虛擬子系統(tǒng)相關(guān)的通信會(huì)話上下文環(huán)境;53013:完成設(shè)備遷入;所述的設(shè)備遷出步驟包括以下步驟: 53021:保存DMA地址寄存器和控制狀態(tài)寄存器中的數(shù)據(jù)信息;53022:獲取虛擬子系統(tǒng)相關(guān)的通信會(huì)話的上下文環(huán)境,并保存;53023:完成設(shè)備遷出。
【文檔編號(hào)】G06F9/455GK103645936SQ201310696743
【公開(kāi)日】2014年3月19日 申請(qǐng)日期:2013年12月18日 優(yōu)先權(quán)日:2013年12月18日
【發(fā)明者】王亞棟, 黃臻, 劉穎 申請(qǐng)人:四川衛(wèi)士通信息安全平臺(tái)技術(shù)有限公司