技術(shù)領(lǐng)域
本發(fā)明涉及使用虛擬機(jī)的容錯(cuò)系統(tǒng)以及使用虛擬機(jī)來執(zhí)行容錯(cuò)的方法。
背景技術(shù):
容錯(cuò)系統(tǒng)是這樣一種系統(tǒng),即使在系統(tǒng)配置的一部分中出現(xiàn)缺陷的情況下,容錯(cuò)系統(tǒng)也能夠繼續(xù)操作,而不會使整個(gè)系統(tǒng)崩潰,并且容錯(cuò)系統(tǒng)尤其適用于要求具有高度有效性和不間斷系統(tǒng)有效性的系統(tǒng)。例如,即使在發(fā)生硬件故障的情況下,采用了容錯(cuò)系統(tǒng)的服務(wù)器計(jì)算機(jī)也可以輸出正確的數(shù)據(jù),而不會有對來自外部裝置的客戶應(yīng)用程序進(jìn)行的網(wǎng)絡(luò)訪問作出響應(yīng)的通信錯(cuò)誤。
如JP-A-2009-80695所公開的,已知一種在運(yùn)行于兩臺彼此通信的計(jì)算機(jī)上的虛擬機(jī)中實(shí)現(xiàn)容錯(cuò)系統(tǒng)的技術(shù)。使用虛擬機(jī)的容錯(cuò)系統(tǒng)將這兩臺虛擬機(jī)的執(zhí)行狀態(tài)同步,以進(jìn)行相同的操作。當(dāng)在其中一臺計(jì)算機(jī)中出現(xiàn)故障時(shí),在另一臺計(jì)算機(jī)中操作的虛擬機(jī)接管處理,由此連續(xù)而不中斷地提供系統(tǒng)的服務(wù)。
在使用虛擬機(jī)的容錯(cuò)系統(tǒng)中,將一臺虛擬機(jī)作為主虛擬機(jī),而將另一臺虛擬機(jī)設(shè)為次虛擬機(jī)。將主虛擬機(jī)構(gòu)造為領(lǐng)先于次虛擬機(jī)執(zhí)行同一操作并接管對關(guān)于外部裝置進(jìn)行輸入/輸出的控制。
通常,當(dāng)執(zhí)行相同程序的兩臺計(jì)算機(jī)以完全相同的定時(shí)從外部裝置接收輸入時(shí),這兩臺計(jì)算機(jī)會進(jìn)行相同的操作,并且輸出相同的數(shù)據(jù)。因此,當(dāng)在使用虛擬機(jī)的容錯(cuò)系統(tǒng)中基于外部輸入發(fā)生中斷時(shí),該容錯(cuò)系統(tǒng)令主虛擬機(jī)將中斷發(fā)生的時(shí)刻作為同步信息發(fā)送至次虛擬機(jī)。然后,以一定延遲運(yùn)行的次虛擬機(jī)在與同步信息所通知的時(shí)刻相同的時(shí)刻產(chǎn)生虛擬中斷,由此主虛擬機(jī)和次虛擬機(jī)以彼此同步的方式執(zhí)行相同的操作。
圖6是示出了傳統(tǒng)的使用虛擬機(jī)的容錯(cuò)系統(tǒng)的配置的框圖。如圖6所示,容錯(cuò)系統(tǒng)60包括了在網(wǎng)絡(luò)上彼此連接的主機(jī)600和次機(jī)700。
在主機(jī)600中,主管理程序620在作為物理計(jì)算機(jī)環(huán)境的主硬件610上運(yùn)行,并且主機(jī)600中配置了主虛擬機(jī)630。在主虛擬機(jī)630中運(yùn)行主客戶OS(操作系統(tǒng))640,并且在主客戶OS 640上執(zhí)行應(yīng)用程序650。
主硬件610配備有諸如CPU(中央處理單元)、內(nèi)存、網(wǎng)絡(luò)接口卡(NIC)、和存儲器之類的多種裝置。
主虛擬機(jī)630分配有主硬件610的一部分硬件資源,并且在虛擬計(jì)算機(jī)環(huán)境中接管與外部裝置相關(guān)的輸入/輸出的控制。主虛擬機(jī)630由主管理程序620管理。
同樣,在次機(jī)700中,次管理程序720在作為物理計(jì)算機(jī)環(huán)境的次硬件710上運(yùn)行,并且次機(jī)700中配置了次虛擬機(jī)730。在次虛擬機(jī)730中運(yùn)行次客戶OS 740,并且在次客戶OS 740上執(zhí)行應(yīng)用程序750。
次硬件710配備有諸如CPU、內(nèi)存、網(wǎng)絡(luò)接口卡(NIC)、和存儲器之類的多種裝置。
次虛擬機(jī)730分配有次硬件710的一部分硬件資源,并且在虛擬計(jì)算機(jī)環(huán)境中與主虛擬機(jī)630同步地操作。次虛擬機(jī)730由次管理程序720管理。
在傳統(tǒng)的容錯(cuò)系統(tǒng)60中,在以下過程中主虛擬機(jī)630與次虛擬機(jī)730的執(zhí)行狀態(tài)彼此同步。
一旦接收到來自主硬件610的外部中斷,主管理程序620則將該外部中斷輸入至主虛擬機(jī)630。
然后,主虛擬機(jī)630將虛擬中斷輸入至主客戶OS 640?,F(xiàn)在,將要描述將虛擬中斷從主虛擬機(jī)630輸入至主客戶OS 640。
當(dāng)在主客戶OS 640的處理期間出現(xiàn)諸如外部中斷、特權(quán)指令、或異常之類的虛擬機(jī)上下文切換事件時(shí),主客戶OS 640的處理被掛起,客戶OS上下文被切換至虛擬機(jī)上下文,處理轉(zhuǎn)移至主虛擬機(jī)630。
若主虛擬機(jī)630根據(jù)在其定時(shí)時(shí)刻的各種事件而需要在主客戶OS 640上輸入虛擬中斷,則主虛擬機(jī)630配置虛擬中斷。當(dāng)配置了虛擬中斷時(shí),主虛擬機(jī)630終止處理,當(dāng)處理返回至在生成事件時(shí)刻被掛起的主客戶OS 640時(shí),虛擬中斷被輸入至主客戶OS 640。
當(dāng)主虛擬機(jī)630將虛擬中斷輸入至主客戶OS 640時(shí),主虛擬機(jī)630將同步信息發(fā)送至次虛擬機(jī)730。同步信息包括對虛擬中斷的識別信息、以及用于輸入虛擬中斷的同步定時(shí)信息。
同步定時(shí)信息是關(guān)于在與虛擬中斷被輸入至主客戶OS 640相同的時(shí)刻將虛擬中斷輸入至次客戶OS 740的信息,并且包括指示了執(zhí)行掛起位置和CPU特有的執(zhí)行指令的數(shù)量的信息。
作為執(zhí)行掛起位置,可以使用表示當(dāng)輸入虛擬中斷時(shí)所執(zhí)行的指令地址的程序計(jì)數(shù)器的值。執(zhí)行指令的數(shù)量可以由CPU中提供的性能計(jì)數(shù)器的CPU執(zhí)行指令數(shù)量計(jì)數(shù)器來測量。
在測量執(zhí)行指令數(shù)量的情況下,當(dāng)主虛擬機(jī)630將虛擬中斷輸入至主客戶OS 640時(shí),將CPU執(zhí)行指令數(shù)量計(jì)數(shù)器清零,并且在重新開始執(zhí)行主客戶OS 640前使CPU執(zhí)行指令數(shù)量計(jì)數(shù)器啟動。因此,計(jì)算出了自先前的虛擬中斷輸入以后由主客戶OS 640執(zhí)行的指令的數(shù)量。
當(dāng)僅有執(zhí)行掛起位置被用作同步定時(shí)信息時(shí),在表示執(zhí)行掛起位置的指令包括在循環(huán)處理中或者包括在條件分支目的地中的情況下無法指定虛擬中斷輸入的時(shí)刻,這是因?yàn)槊看萎?dāng)進(jìn)行到循環(huán)或條件分支進(jìn)程都會執(zhí)行該指令。
同樣,當(dāng)僅有執(zhí)行指令的數(shù)量被用作同步定時(shí)信息時(shí),由于諸如流水線處理之類的高速化技術(shù),使得次客戶OS 740不能以所指定的執(zhí)行指令的數(shù)量來掛起,并且不可避免地在超出執(zhí)行指令的數(shù)量后被掛起。由此,虛擬中斷不能在與主客戶OS 640相同的時(shí)刻被輸入到次客戶OS 740。
在該情形下,將執(zhí)行掛起位置和執(zhí)行指令的數(shù)量結(jié)合在一起作為同步定時(shí)信息,并且每次在次客戶OS 740中對執(zhí)行掛起位置所表示的指令進(jìn)行處理時(shí)確認(rèn)執(zhí)行指令的數(shù)量。因此,在與將虛擬中斷輸入到主客戶OS 640中相同的時(shí)刻來將次客戶OS 740掛起。
因此,當(dāng)在掛起了主客戶OS 640的執(zhí)行之后主虛擬機(jī)630將虛擬中斷輸入至主客戶OS 640時(shí),主虛擬機(jī)630獲取掛起主客戶OS 640的執(zhí)行時(shí)刻的程序計(jì)數(shù)器的值、以及CPU執(zhí)行指令數(shù)量計(jì)數(shù)器的值,以生成同步定時(shí)信息。然后,主虛擬機(jī)630將有關(guān)虛擬中斷的識別信息和同步定時(shí)信息發(fā)送至次虛擬機(jī)730作為同步信息。
接收到了同步信息的次虛擬機(jī)730根據(jù)同步定時(shí)信息來掛起次客戶OS 740的執(zhí)行。將參照圖7的流程圖來描述該情形下次虛擬機(jī)730的操作。
將暫停(break)指令嵌入同步定時(shí)信息的執(zhí)行掛起位置所指定的程序位置中(S401),并且重新啟動次客戶OS 740(S402)。然后,當(dāng)次客戶OS 740停止(S403中為是)時(shí),確認(rèn)CPU執(zhí)行指令數(shù)量計(jì)數(shù)器,并且若計(jì)數(shù)器值匹配執(zhí)行指令的指定數(shù)量(S404中為是),則次客戶OS 740在停止位置處掛起(S405)。若計(jì)數(shù)器值不匹配執(zhí)行指令的指定數(shù)量(S404中為否),則次客戶OS 740重新啟動(S402)并重復(fù)確認(rèn)執(zhí)行指令的數(shù)量。
當(dāng)次虛擬機(jī)730掛起次客戶OS 740時(shí),次虛擬機(jī)730根據(jù)同步信息的虛擬中斷識別信息來配置虛擬中斷(S406),并且重新啟動次客戶OS 740(S407)。因此,在與主客戶OS 640相同的時(shí)刻將虛擬中斷輸入至次客戶OS 740,并且主虛擬機(jī)630和次虛擬機(jī)730的執(zhí)行狀態(tài)彼此同步。
當(dāng)在主機(jī)600和次機(jī)700的任何一個(gè)中發(fā)生硬件故障時(shí),打亂了執(zhí)行狀態(tài)的同步。當(dāng)執(zhí)行狀態(tài)的同步被打亂時(shí),主虛擬機(jī)630和次虛擬機(jī)730之間的輸出數(shù)據(jù)的值變得不同。在該情況下,容錯(cuò)系統(tǒng)60對比次虛擬機(jī)730的輸出來檢查主虛擬機(jī)630的輸出,若輸出數(shù)據(jù)的值彼此不同,則確定發(fā)生硬件故障。
為了進(jìn)行該故障確定處理,次虛擬機(jī)730裝配有輸出數(shù)據(jù)檢查單元731,其搜集主虛擬機(jī)630的輸出數(shù)據(jù),并對比次虛擬機(jī)730的輸出數(shù)據(jù)來檢查所搜集的輸出數(shù)據(jù)。
如上所述,當(dāng)主管理程序620從主硬件610接收到外部中斷時(shí),主管理程序620將外部中斷輸入至主虛擬機(jī)630。然后,接收到來自主管理程序620的外部中斷的主虛擬機(jī)630將虛擬中斷輸入至主客戶OS 640。
在使用虛擬機(jī)的容錯(cuò)系統(tǒng)60中,當(dāng)虛擬中斷被輸入至主客戶OS 640中時(shí),還必須執(zhí)行在同一時(shí)刻將虛擬中斷輸入至次客戶OS 740的處理,以同步彼此的執(zhí)行狀態(tài)。
為此,當(dāng)虛擬中斷頻繁地出現(xiàn)在主虛擬機(jī)630中時(shí),增加了用于對執(zhí)行狀態(tài)進(jìn)行同步的處理負(fù)荷,并且減少了通過執(zhí)行應(yīng)用程序650而將被分配給原服務(wù)的諸如CPU時(shí)間或通信帶寬之類的資源。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的示例性實(shí)施例提供了一種容錯(cuò)系統(tǒng)和一種用于執(zhí)行容錯(cuò)的方法,其使得虛擬機(jī)執(zhí)行并行同步操作,同時(shí)減小用于對執(zhí)行狀態(tài)進(jìn)行同步所需的處理負(fù)荷。
根據(jù)本發(fā)明的示例性實(shí)施例的容錯(cuò)系統(tǒng)包括:
主虛擬機(jī),其在主機(jī)上形成,主管理程序運(yùn)行在所述主機(jī)中,所述主虛擬機(jī)被配置為將基于來自主管理程序的外部中斷的虛擬中斷輸入至主客戶OS;以及
次虛擬機(jī),其在次機(jī)上形成,次管理程序運(yùn)行在所述次機(jī)中,所述次虛擬機(jī)被配置為基于與主虛擬機(jī)所發(fā)送的虛擬中斷有關(guān)的定時(shí)信息來將虛擬中斷輸入至次客戶OS,
其中主虛擬機(jī)被配置為一旦接收到來自主管理程序的外部中斷就確定是否生成虛擬中斷,只有在確定了生成虛擬中斷時(shí),主虛擬機(jī)被配置為將虛擬中斷輸入至主客戶OS,并且將有關(guān)虛擬中斷的定時(shí)信息發(fā)送至次虛擬機(jī)。
主虛擬機(jī)可以被配置為,當(dāng)來自主管理程序的外部中斷是一個(gè)固定周期的外部中斷時(shí),確定以低于1的給定速度來生成虛擬中斷。
可以基于對在主客戶OS上運(yùn)行的應(yīng)用程序中的固定周期的外部中斷的要求性能來確定給定速度。
主虛擬機(jī)被配置為,當(dāng)來自主管理程序的外部中斷是一個(gè)非固定周期的外部中斷時(shí),確定關(guān)于在與外部中斷相關(guān)的處理期間接收到的外部中斷不生成虛擬中斷。
主虛擬機(jī)被配置為,當(dāng)非固定周期的外部中斷是涉及數(shù)據(jù)接收的中斷時(shí),確定僅關(guān)于完成數(shù)據(jù)接收后的外部中斷生成虛擬中斷。
根據(jù)本發(fā)明的示例性實(shí)施例的用于通過主虛擬機(jī)和次虛擬機(jī)執(zhí)行容錯(cuò)的方法,所述主虛擬機(jī)形成在主機(jī)上,主管理程序運(yùn)行在所述主機(jī)中,所述主虛擬機(jī)被配置為將基于來自主管理程序的外部中斷的虛擬中斷輸入至主客戶OS(140),所述次虛擬機(jī)形成在次機(jī)上,次管理程序運(yùn)行在所述次機(jī)中,所述次虛擬機(jī)被配置為基于與主虛擬機(jī)所發(fā)送的虛擬中斷有關(guān)的定時(shí)信息來將虛擬中斷輸入至次客戶OS,所述方法包括:
當(dāng)主虛擬機(jī)接收到來自主管理程序的外部中斷時(shí),確定是否生成虛擬中斷,并且
只有在確定了生成虛擬中斷時(shí),將虛擬中斷從主虛擬機(jī)輸入至主客戶OS,并且將有關(guān)虛擬中斷的定時(shí)信息從主虛擬機(jī)發(fā)送至次虛擬機(jī)。
根據(jù)本發(fā)明的示例性實(shí)施例,在讓虛擬機(jī)進(jìn)行并行同步操作的容錯(cuò)系統(tǒng)和用于執(zhí)行容錯(cuò)的方法中,可以減小用于對執(zhí)行狀態(tài)進(jìn)行同步所需的處理負(fù)荷。
附圖說明
圖1是示出了根據(jù)一個(gè)實(shí)施例的容錯(cuò)系統(tǒng)的配置的框圖。
圖2是示出了主虛擬機(jī)和次虛擬機(jī)的并行同步操作的概要的流程圖。
圖3A和圖3B是示出了通過分支數(shù)和執(zhí)行掛起位置來識別虛擬中斷輸入位置的示圖。
圖4是示出了當(dāng)CPU架構(gòu)的細(xì)節(jié)已知時(shí),虛擬中斷定時(shí)調(diào)節(jié)操作的具體過程的流程圖。
圖5是示出了當(dāng)CPU架構(gòu)的細(xì)節(jié)未知時(shí),虛擬中斷定時(shí)調(diào)節(jié)的具體過程的流程圖。
圖6是示出了相關(guān)技術(shù)中的使用虛擬機(jī)的容錯(cuò)系統(tǒng)的配置的框圖。
圖7是示出了讓已經(jīng)接收到同步信息的次虛擬機(jī)根據(jù)同步定時(shí)信息來掛起次客戶OS的執(zhí)行的操作流程圖。
具體實(shí)施方式
將參照附圖來描述根據(jù)本發(fā)明的實(shí)施例。圖1是示出了根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)的配置的框圖。如圖1所示,容錯(cuò)系統(tǒng)10包括通過網(wǎng)絡(luò)彼此連接的主機(jī)100和次機(jī)200。主機(jī)100和次機(jī)200可以由諸如服務(wù)器計(jì)算機(jī)或個(gè)人計(jì)算機(jī)之類的通用計(jì)算機(jī)來配置。
在主機(jī)100中,主管理程序120在作為物理計(jì)算機(jī)環(huán)境的主硬件110上運(yùn)行,并且主虛擬機(jī)130由主管理程序120構(gòu)成。在主虛擬機(jī)130中,主客戶OS 140運(yùn)行,并且在主客戶OS 140上執(zhí)行應(yīng)用程序150。
主硬件110配備有以下多種裝置,諸如CPU 111、內(nèi)存112、定時(shí)器113、網(wǎng)絡(luò)接口卡(NIC)114、和存儲器之類的裝置115。
主虛擬機(jī)130分配有主硬件110的部分硬件資源,并且接管對于與外部裝置相關(guān)的輸入/輸出的控制。主虛擬機(jī)130用作虛擬計(jì)算機(jī)環(huán)境。主虛擬機(jī)130由主管理程序120管理。主程序管理120能夠管理多個(gè)主虛擬機(jī)130。
同樣,在次機(jī)200中,次管理程序220在作為物理計(jì)算機(jī)環(huán)境的次硬件210上運(yùn)行,并且次虛擬機(jī)230由次管理程序220構(gòu)成。在次虛擬機(jī)230中,次客戶OS 240運(yùn)行,并且在次客戶OS 240上執(zhí)行應(yīng)用程序250。
次硬件210配備有以下多種裝置,諸如CPU 211、內(nèi)存212、定時(shí)器213、網(wǎng)絡(luò)接口卡(NIC)214、和存儲器之類的裝置215。
次虛擬機(jī)230分配有次硬件210的部分硬件資源,并且在虛擬計(jì)算機(jī)環(huán)境中與主虛擬機(jī)130同步地運(yùn)行。次虛擬機(jī)230由次管理程序220管理。次管理程序220能夠管理多個(gè)次虛擬機(jī)230。
在容錯(cuò)系統(tǒng)10中,僅由主虛擬機(jī)130來控制與外部裝置相關(guān)的輸入/輸出,主虛擬機(jī)130在次虛擬機(jī)230之前運(yùn)行。
在本實(shí)施例中,為主虛擬機(jī)130提供了虛擬中斷生成單元131和同步信息生成單元135,并且為次虛擬機(jī)230提供虛擬中斷輸入轉(zhuǎn)換單元231和同步校正單元235。
主虛擬機(jī)130的虛擬中斷生成單元131生成虛擬中斷,該虛擬中斷是通過調(diào)節(jié)中斷頻率和實(shí)際從主管理程序120輸入外部中斷輸入的定時(shí)而得到的,并且該虛擬中斷生成單元131將生成的虛擬中斷輸入至主客戶OS 140。為虛擬中斷生成單元131提供了用于調(diào)節(jié)中斷頻率的中斷頻率調(diào)節(jié)單元132以及用于調(diào)節(jié)中斷定時(shí)的中斷定時(shí)調(diào)節(jié)單元133。
主虛擬機(jī)130的同步信息生成單元135基于執(zhí)行掛起位置和分支執(zhí)行數(shù)量來指定被調(diào)節(jié)并輸入至主客戶OS 140的虛擬中斷的定時(shí)。同步信息生成單元135配備有用于計(jì)算在輸入虛擬中斷以前主客戶OS 140中的程序分支數(shù)的分支執(zhí)行數(shù)量生成單元136。
同步信息生成單元135在主虛擬機(jī)130和次虛擬機(jī)230的并行同步操作前,從次虛擬機(jī)230搜集操作性能信息。當(dāng)主硬件110和次硬件210之間的硬件配置不同時(shí),同步信息生成單元135生成用于校正處理速度差的同步校正信息,并且將同步校正信息發(fā)送至次虛擬機(jī)230的同步校正單元235。同步信息生成單元135按場合要求來調(diào)節(jié)主虛擬機(jī)130的操作。
次虛擬機(jī)230的虛擬中斷輸入轉(zhuǎn)換單元231根據(jù)從主虛擬機(jī)130發(fā)送的同步信息的同步定時(shí)信息來使次客戶OS 240的處理前移至虛擬中斷輸入位置,并且掛起次客戶OS 240。然后,虛擬中斷輸入轉(zhuǎn)換單元231接收虛擬中斷。為了使次客戶OS 240的處理前移至虛擬中斷輸入位置,并且掛起次客戶OS 240,為虛擬中斷輸入轉(zhuǎn)換單元231提供了指定分支數(shù)執(zhí)行單元232和指定位置上下文切換單元233。
次虛擬機(jī)230的同步校正單元235在并行同步操作之前基于從主虛擬機(jī)130的同步信息生成單元135發(fā)送的同步校正信息來調(diào)節(jié)次虛擬機(jī)的操作。同步校正單元235按場合要求在并行同步操作中調(diào)節(jié)主虛擬機(jī)130和次虛擬機(jī)230之間的處理速度差。
(并行同步操作的概要)
隨后,將參照圖2的流程圖來描述在如上所述配置的容錯(cuò)系統(tǒng)中主虛擬機(jī)130和次虛擬機(jī)230彼此之間使執(zhí)行狀態(tài)同步的并行同步操作的概要。具體地,將描述當(dāng)主管理程序120從主硬件110接收到外部中斷時(shí)的操作序列。
一旦接收到來自主硬件110的外部中斷(S101),主管理程序120就將外部中斷輸入至主虛擬機(jī)130(S102)。
從主管理程序120接收到外部中斷的主虛擬機(jī)130將虛擬中斷輸入至主客戶OS 140。在該情形下,主虛擬機(jī)130不針對所有輸入的外部中斷將虛擬中斷輸入至主客戶OS 140,而中斷頻率調(diào)節(jié)單元132對輸入至主客戶OS 140的虛擬中斷的頻率進(jìn)行調(diào)節(jié)(S103)。
在使用虛擬機(jī)的容錯(cuò)系統(tǒng)10中,當(dāng)把虛擬中斷輸入至主客戶OS 104時(shí),為了同步彼此的執(zhí)行狀態(tài),還要進(jìn)行在相同時(shí)刻將虛擬中斷輸入至次客戶OS 240的處理。由此,當(dāng)在主虛擬機(jī)130中頻繁地出現(xiàn)虛擬中斷時(shí),增加了用于對執(zhí)行狀態(tài)進(jìn)行同步的處理負(fù)荷,并且減少了要分配給原服務(wù)的諸如CPU時(shí)間或通信帶寬之類的資源。
在根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)10中,中斷頻率調(diào)節(jié)單元132調(diào)節(jié)虛擬中斷的頻率以使得用于對執(zhí)行狀態(tài)進(jìn)行同步的處理負(fù)荷最小,并且防止用于原服務(wù)的處理能力減小。稍后將描述由中斷頻率調(diào)節(jié)單元132所執(zhí)行的中斷頻率調(diào)節(jié)操作的細(xì)節(jié)。
作為由中斷頻率調(diào)節(jié)單元132調(diào)節(jié)虛擬中斷的頻率(S103)的結(jié)果,若確定生成了虛擬中斷(S104中為是),則將虛擬中斷輸入至主客戶OS 140。若確定沒有生成虛擬中斷(S104中為否),則該處理完成,進(jìn)程等待后續(xù)的來自主管理程序120的外部中斷的輸入。
當(dāng)虛擬中斷被輸入至主客戶OS 140時(shí),應(yīng)在一個(gè)位置掛起主客戶OS 140,在同一位置處將次客戶OS 240也掛起。
例如,當(dāng)根據(jù)諸如外部中斷之類的虛擬機(jī)上下文切換事件掛起主客戶OS 140以傳送對主虛擬機(jī)130的控制時(shí),主客戶OS 140的掛起位置可能在臨界段中。該臨界段是當(dāng)多個(gè)處理同時(shí)在單個(gè)資源上執(zhí)行時(shí)用來毀損進(jìn)程的程序段,并且是由程序執(zhí)行諸如暫停指令無效之類的互斥控制所在的段。
在該情況下,當(dāng)虛擬中斷在位于臨界段中的掛起位置處輸入至主客戶OS 140時(shí),即使暫停指令被嵌入相同的位置中,次客戶OS 240也不能在相同的位置處掛起,而是在處理該臨界段之后將次客戶OS 240掛起。在這種情況下,虛擬中斷位置轉(zhuǎn)移,執(zhí)行狀態(tài)不同步。
在該情況下,在根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)10中,中斷定時(shí)調(diào)節(jié)單元133調(diào)節(jié)虛擬中斷定時(shí)(S105),并且在避開臨界段的情況下掛起主客戶OS 140,由此能夠在相同的位置處掛起第二客戶OS 240。稍后將描述中斷定時(shí)調(diào)節(jié)單元133進(jìn)行的虛擬中斷定時(shí)調(diào)節(jié)操作的細(xì)節(jié)。
當(dāng)調(diào)節(jié)了虛擬中斷定時(shí)時(shí),主虛擬機(jī)130將虛擬中斷輸入至主客戶OS 140(S106)。然后,同步信息生成單元135生成同步信息(S107)。
同步信息包括關(guān)于虛擬中斷的識別信息和同步定時(shí)信息。同步定時(shí)信息包括由程序計(jì)數(shù)器表示的執(zhí)行掛起位置,以及由性能計(jì)數(shù)器測量的CPU執(zhí)行指令的數(shù)量。
但是,對于特定CPU特有的特殊指令,存在這樣的情況:可能發(fā)生性能計(jì)數(shù)器的計(jì)數(shù)遺漏,并且有可能未能準(zhǔn)確地對在輸入虛擬中斷以前由主客戶OS 140執(zhí)行的CPU執(zhí)行指令的數(shù)量進(jìn)行計(jì)數(shù)。例如,在英特爾公司制作的Pentium(注冊商標(biāo))處理器中,對于當(dāng)REP指令的執(zhí)行由于發(fā)生外部中斷而被掛起時(shí)的REP指令的執(zhí)行就沒有被計(jì)入。由此,CPU執(zhí)行指令計(jì)數(shù)可能變得小于執(zhí)行指令的實(shí)際數(shù)量。
這樣,因?yàn)閷PU執(zhí)行指令數(shù)量的計(jì)數(shù)可能不準(zhǔn)確,所以根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)10不將CPU執(zhí)行指令的數(shù)量用于同步定時(shí)信息。
但是,因?yàn)槌绦蛲ǔ0ù罅康难h(huán)語句、跳轉(zhuǎn)語句、和分支語句,所以相同的指令會執(zhí)行多次。為此,可能無法僅通過執(zhí)行掛起位置來指定虛擬中斷的輸入定時(shí)。
在該情況下,根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)10使得同步定時(shí)信息包括執(zhí)行掛起位置和分支數(shù)。分支數(shù)代表從前一虛擬中斷至當(dāng)前虛擬中斷所執(zhí)行的分支指令的數(shù)量,該數(shù)量是執(zhí)行順序從依次執(zhí)行發(fā)生改變的次數(shù)。
通過提前在主客戶OS 140中計(jì)算分支數(shù),可以通過找出在執(zhí)行了所計(jì)數(shù)量的分支之后被第一次執(zhí)行的位置,來將執(zhí)行掛起位置正確地指定為次客戶OS 240中的虛擬中斷輸入位置。
例如,如圖3A所示,假設(shè)當(dāng)指令代碼CodeA、CodeB、CodeC、...被分配于指令地址a1、a2、a3、…,并且CodeC至CodeG循環(huán)三次時(shí),在主客戶OS 140中的第十六次程序執(zhí)行順序的“a6”處輸入虛擬中斷。該同步定時(shí)可以由分支數(shù)的計(jì)數(shù)值“2”和執(zhí)行掛起位置“a6”表示。
在該情況下,在次虛擬機(jī)230中,對分支數(shù)計(jì)數(shù)兩次,在第一次執(zhí)行掛起位置“a6”處掛起次客戶OS 240,由此能夠在與主客戶OS 140相同的定時(shí)處輸入虛擬中斷。
由此為了執(zhí)行對分支數(shù)進(jìn)行計(jì)數(shù)的處理,為同步信息生成單元135提供了分支執(zhí)行數(shù)生成單元136。在指令代碼級別中,所有的循環(huán)語句、跳轉(zhuǎn)語句、和分支語句都被分支指令替代。因此,在運(yùn)行應(yīng)用程序150時(shí),分支執(zhí)行數(shù)生成單元136對由主客戶OS 140執(zhí)行的分支指令的數(shù)量進(jìn)行計(jì)數(shù),由此能夠?qū)Ψ种?shù)計(jì)數(shù)。為了對分支數(shù)計(jì)數(shù),可以使用性能計(jì)數(shù)器。
返回至圖2的描述,主虛擬機(jī)130生成包括有關(guān)虛擬中斷的識別信息和同步定時(shí)信息在內(nèi)的同步信息,然后將同步信息傳送至次虛擬機(jī)230(S108)。
為了根據(jù)同步定時(shí)信息來掛起次客戶OS 240的執(zhí)行,在接收到同步信息的次虛擬機(jī)230中,指定分支數(shù)執(zhí)行單元232首先對執(zhí)行次客戶OS 240時(shí)的分支數(shù)進(jìn)行計(jì)數(shù)。當(dāng)分支計(jì)數(shù)達(dá)到同步定時(shí)信息中的分支數(shù)所表示的值時(shí),次虛擬機(jī)230掛起次客戶OS 240。也就是,次虛擬機(jī)230執(zhí)行次客戶OS 240的次數(shù)達(dá)到指定分支數(shù)量(S109)。為此,在分支計(jì)數(shù)達(dá)到指定分支數(shù)量以前不需要監(jiān)控執(zhí)行掛起位置和CPU執(zhí)行指令的數(shù)量,減小了處理負(fù)荷。稍后將描述指定分支數(shù)執(zhí)行單元232所執(zhí)行的指定分支數(shù)執(zhí)行操作的細(xì)節(jié)。
指定位置上下文切換單元233在同步定時(shí)信息的執(zhí)行掛起位置所表示的位置處掛起次客戶OS 240的執(zhí)行(S110)。
在對次客戶OS 240的執(zhí)行進(jìn)行掛起過程中,若使用了如在傳統(tǒng)系統(tǒng)技術(shù)中嵌入暫停指令以配置斷點(diǎn)的技術(shù),則當(dāng)客戶OS(140,240)或應(yīng)用程序(150,250)在虛擬機(jī)(130,230)中調(diào)試時(shí),掛起干擾了調(diào)試的斷點(diǎn),并且不利地影響到相互的處理。因?yàn)榭赡艽嬖谟脩粝胍獙Ρ舜送降奶摂M機(jī)(130,230)上的應(yīng)用程序(150,250)操作進(jìn)行檢查的情況,所以希望避免對斷點(diǎn)的干擾。
同樣,在不具有虛擬化支持功能的CPU中,處理不能通過設(shè)置斷點(diǎn)而從次客戶OS 240轉(zhuǎn)移至次虛擬機(jī)230。
在該情況下,在根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)10中,指定位置上下文切換單元233執(zhí)行上下文切換,而不使用暫停指令來掛起次客戶OS 240的執(zhí)行。稍后將描述指定位置上下文切換單元233執(zhí)行的指定位置上下文切換操作的細(xì)節(jié)。
當(dāng)次虛擬機(jī)230掛起次客戶OS 240時(shí),次虛擬機(jī)230根據(jù)同步信息的虛擬中斷識別信息來配置虛擬中斷以重新啟動次客戶OS 240。因此,在與主客戶OS 140相同的定時(shí)處將虛擬中斷輸入至次客戶OS 240(S111),并且主虛擬機(jī)130和次虛擬機(jī)230的執(zhí)行狀態(tài)彼此同步。
若在主機(jī)100和次機(jī)200之一中出現(xiàn)硬件故障,則執(zhí)行狀態(tài)變?yōu)椴煌?。在本?shí)施例中,執(zhí)行狀態(tài)可以準(zhǔn)確地彼此同步,而不受到性能計(jì)數(shù)器的計(jì)數(shù)遺漏的影響。為此,若硬件正常,則不會擾亂執(zhí)行狀態(tài)的同步。因此,對執(zhí)行狀態(tài)的同步的擾亂被檢測,由此能夠檢測到硬件故障。
由于傳統(tǒng)系統(tǒng)不能確定對執(zhí)行狀態(tài)的同步的擾動來源于硬件故障還是來源于對執(zhí)行指令數(shù)量的計(jì)數(shù)遺漏所產(chǎn)生的影響,所以需要檢查輸出數(shù)據(jù)。另一方面,在根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)10中,因?yàn)榭梢酝ㄟ^執(zhí)行狀態(tài)的同步的擾動來檢測到硬件故障,因此不需要檢查用于故障檢測的輸出數(shù)據(jù)。因此,可以減少用于檢查輸出數(shù)據(jù)的CPU處理負(fù)荷和通信負(fù)荷。同樣,可以立即檢測硬件故障的發(fā)生。
對執(zhí)行狀態(tài)的同步的擾動檢測可通過在例如次虛擬機(jī)230的虛擬中斷輸入轉(zhuǎn)換單元231中檢測同步定時(shí)信息所指定的執(zhí)行掛起位置被執(zhí)行之前分支數(shù)超過同步定時(shí)信息中所指定的次數(shù)時(shí)的同步擾亂來確定。
(各塊的操作細(xì)節(jié))
接下來將參照第一實(shí)施例、第二實(shí)施例、和第三實(shí)施例來描述容錯(cuò)系統(tǒng)10中各塊的操作。
在傳統(tǒng)容錯(cuò)系統(tǒng)中,假設(shè)主機(jī)的CPU和次機(jī)的CPU具有相同的架構(gòu)。這是因?yàn)閭鹘y(tǒng)的同步技術(shù)依賴于CPU架構(gòu)和CPU操作規(guī)范,若CPU的類型不同,則執(zhí)行指令均不能彼此同步,并且可能不同步。
另一方面,如第一實(shí)施例和第二實(shí)施例所述,根據(jù)本各個(gè)實(shí)施例的系統(tǒng)并不僅適用于主機(jī)100的CPU 111和次機(jī)200的CPU 211具有相同架構(gòu)的情況,而是還適用于架構(gòu)不同的情況。
通常,當(dāng)容錯(cuò)系統(tǒng)被操作很長一段時(shí)期后,由于故障和老化,該裝置強(qiáng)制被新的取代。在該情況下,很難準(zhǔn)備與先前的裝置具有相同規(guī)范的裝置。為此,根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)10具有即使CPU架構(gòu)不同也能夠繼續(xù)并行同步操作的結(jié)構(gòu)。
<第一實(shí)施例>
作為第一實(shí)施例,將描述主機(jī)100的CPU 111和次機(jī)200的CPU 211具有相同架構(gòu)的情況下的操作。在本說明書中,相同的CPU架構(gòu)意味著CPU指令集在兩個(gè)處理器之間具有兼容性。
在該情況下,主虛擬機(jī)130和次虛擬機(jī)230通過同步CPU指令級來執(zhí)行并行同步操作。為此,在兩臺虛擬機(jī)(130,230)中,客戶OS(140,240)和應(yīng)用程序(150,250)的程序通常相對于CPU(111,211)具有符合本機(jī)CPU指令代碼的代碼格式。假設(shè)該并行同步操作叫做“CPU指令同步模式”。
(中斷頻率調(diào)節(jié)操作)
首先,將描述中斷頻率調(diào)節(jié)單元132執(zhí)行的中斷頻率調(diào)節(jié)操作(S103)。主虛擬機(jī)130的中斷頻率調(diào)節(jié)單元132不會輸入針對所有外部中斷的虛擬中斷,而是將虛擬中斷的頻率調(diào)節(jié)至達(dá)到應(yīng)用程序150所需的性能和精度以及容許的通信延遲的程度。
通常,可以將外部中斷分類為使用定時(shí)器113的固定周期中斷和使用網(wǎng)絡(luò)接口卡(NIC)114或裝置115的非固定周期中斷。中斷頻率調(diào)節(jié)單元132分別根據(jù)固定周期中斷和非固定周期中斷來執(zhí)行頻率的調(diào)節(jié)。
在固定周期的外部中斷中,通過省略一些外部中斷來以每固定周期的幾個(gè)外部中斷一次的速度來將虛擬中斷輸入到主客戶OS 140。
例如,當(dāng)固定周期的定時(shí)器中斷被輸入至主客戶OS 140時(shí),由此主客戶OS 140可以計(jì)算準(zhǔn)確的時(shí)間。但是若應(yīng)用程序150所需的時(shí)間精度不高,則可以沒有任何問題地省略定時(shí)器中斷的一些輸入。
例如,當(dāng)來自主管理程序120的定時(shí)器中斷的周期為1ms,并且應(yīng)用程序150中所需的時(shí)間精度為100ms時(shí),即使虛擬中斷周期變稀疏至10ms,仍可以保證100ms的精度。在該情況下,因?yàn)樘摂M中斷的頻率減小至1/10,所以執(zhí)行狀態(tài)的同步處理也減小至1/10。
可以根據(jù)應(yīng)用程序150所需的精度提前設(shè)置稀疏率,或者通過參數(shù)對其進(jìn)行調(diào)節(jié)。同樣,關(guān)于固定周期的外部中斷可一致地設(shè)置該稀疏率,或者可以針對固定周期的外部中斷每個(gè)因素來設(shè)置稀疏率。
在非固定周期的外部中斷中,省去與處理期間外部中斷輸入相關(guān)的虛擬中斷,僅將已經(jīng)完成處理的最后的外部中斷輸入至主客戶OS 140來作為虛擬中斷。
例如,每當(dāng)數(shù)據(jù)到達(dá)NIC 114時(shí),就發(fā)生一次來自NIC 114的網(wǎng)絡(luò)接收中斷。為此,在接收作為重要單元的數(shù)據(jù)期間發(fā)生多個(gè)外部中斷。傳統(tǒng)方法是,每當(dāng)外部中斷發(fā)生時(shí)就將虛擬中斷輸入至主客戶OS 140,以使得接收到數(shù)據(jù)從NIC 114轉(zhuǎn)移至主客戶OS 140。另一方面,中斷頻率調(diào)節(jié)單元132省去與接收數(shù)據(jù)期間的外部中斷有關(guān)的虛擬中斷,并且將接收到數(shù)據(jù)后的一個(gè)外部中斷相關(guān)的虛擬中斷輸入至主客戶OS 140。因此,可以減少執(zhí)行狀態(tài)的同步處理的數(shù)量,并且可以在同一時(shí)間處理大尺寸的數(shù)據(jù)。
作為適用于本技術(shù)的非固定周期的外部中斷,有網(wǎng)絡(luò)的發(fā)送/接收中斷、存儲器的讀/寫中斷、串聯(lián)通信的發(fā)送/接收中斷、以及諸如模擬/數(shù)字I/O板之類的各種I/O裝置的讀/寫中斷。
(虛擬中斷定時(shí)調(diào)節(jié)操作)
接下來將描述由中斷定時(shí)調(diào)節(jié)單元133執(zhí)行的虛擬中斷定時(shí)調(diào)節(jié)操作(S105)。虛擬中斷定時(shí)調(diào)節(jié)被配置為在避開主客戶OS 140的臨界段的情況下輸入虛擬中斷,使得次客戶OS 240在相同的位置處被掛起。
對于CPU架構(gòu)的細(xì)節(jié)已知和CPU架構(gòu)的細(xì)節(jié)未知這兩種情況之間,處理中的虛擬中斷定時(shí)調(diào)節(jié)操作是不同的。CPU架構(gòu)的細(xì)節(jié)已知的情況代表可以根據(jù)CPU指令或掛起位置的狀態(tài)標(biāo)志來確定掛起位置是否在臨界段中。
首先,將參照圖4的流程圖來描述當(dāng)CPU架構(gòu)的細(xì)節(jié)已知時(shí)的具體的操作過程。
一旦從主管理程序120接收到外部中斷的輸入(S201),主虛擬機(jī)130等待對主客戶OS 140的執(zhí)行掛起(S202)。
當(dāng)主客戶OS 140的執(zhí)行被掛起,并且處理轉(zhuǎn)移至主虛擬機(jī)130時(shí),主虛擬機(jī)130獲取主虛擬機(jī)130的狀態(tài)(S203)。要獲取的狀態(tài)是用于判定掛起位置是否在臨界段中的信息,例如,CPU 111的中斷屏蔽的配置信息、或者標(biāo)志寄存器的內(nèi)容。
然后,基于獲取的信息來判定掛起位置是否在臨界段中(S204)。例如,基于以下原因可以判定掛起位置不在臨界段中:中斷屏蔽中未禁止中斷的輸入,以及在標(biāo)志寄存器中沒有設(shè)定使暫停指令的配置無效的標(biāo)志。
若掛起位置不在臨界段中(S204中為否),則掛起位置被配置為虛擬中斷的輸入定時(shí)(S205)。
若掛起位置在臨界段中(S204中為是),則在確認(rèn)主虛擬機(jī)130的狀態(tài)時(shí)提前主客戶OS 140的執(zhí)行(S206)。在該情況下,例如,進(jìn)行逐步執(zhí)行(step execution)以確認(rèn)每個(gè)指令的狀態(tài)(S203)。然后,判定掛起位置是否在臨界段(S204),并且掛起位置不在臨界段中(S204中為否)。然后掛起位置被配置為虛擬中斷的輸入定時(shí)(S205)。
隨后,將參照圖5的流程圖來描述當(dāng)CPU架構(gòu)的細(xì)節(jié)未知時(shí)的具體操作過程。若CPU架構(gòu)的細(xì)節(jié)未知,即使獲取了主虛擬機(jī)130的狀態(tài),也不能判定掛起位置是否在臨界段中。因此,配置掛起事件,將實(shí)際可以進(jìn)行掛起的位置設(shè)置為用于輸入虛擬中斷的掛起位置。
一旦接收到來自主管理程序120的外部中斷的輸入(S301),主虛擬機(jī)130等待主客戶OS 140的執(zhí)行掛起(S302)。
當(dāng)主客戶OS 140的執(zhí)行被掛起,并且處理轉(zhuǎn)移至主虛擬機(jī)130時(shí),主虛擬機(jī)130在主客戶OS 140中配置一個(gè)在執(zhí)行了給定數(shù)量的指令之后(例如,在執(zhí)行了一條指令之后)進(jìn)行掛起的事件。
然后,通過逐步執(zhí)行重新啟動主客戶OS 140的執(zhí)行(S304),為單條指令的執(zhí)行獲取中斷的因素(S305)。這是因?yàn)閽炱鸬囊蛩夭豢偸怯膳渲玫膾炱鹗录鸬摹?/p>
若掛起的因素由配置的掛起事件引起(S306中為是),則確定掛起位置不在臨界段內(nèi),并且確定在相同位置處掛起次客戶OS 240,并且掛起位置被配置為虛擬中斷的輸入定時(shí)(S307)。
如果掛起的因素不是由配置的掛起事件引起(S306中為否),則確定掛起位置在臨界段中,并且不能在相同的位置處掛起次客戶OS 240。然后,配置一個(gè)在執(zhí)行一條指令之后掛起次客戶OS 240的事件(S303),并且重復(fù)已經(jīng)重新啟動主客戶OS 140的執(zhí)行(S304)之后的處理。若進(jìn)程前進(jìn)到臨界段以外(S306中為是),則掛起位置被配置為虛擬中斷的輸入定時(shí)(S307)。
(同步信息生成操作)
隨后,將描述同步信息生成單元135進(jìn)行的生成同步信息的操作(S 107)。若主機(jī)100的CPU 111和次機(jī)200的CPU 211具有相同的架構(gòu),則同步信息的同步定時(shí)信息中的執(zhí)行掛起位置由CPU指令代碼的執(zhí)行停止位置表示,并且可以使用程序計(jì)數(shù)器的值。
同步定時(shí)信息中分支執(zhí)行的數(shù)量由主客戶OS 140自前一同步定時(shí)信息生成時(shí)間起所執(zhí)行的分支數(shù)來表示??梢酝ㄟ^對在CPU指令代碼級別處執(zhí)行的分支指令進(jìn)行計(jì)數(shù)來得到分支數(shù)。
(指定的分支數(shù)執(zhí)行操作)
隨后,將描述由指定分支數(shù)執(zhí)行單元232執(zhí)行的指定分支數(shù)執(zhí)行操作(S109)。指定分支數(shù)執(zhí)行操作被配置為對次客戶OS 240進(jìn)行由同步定時(shí)信息中的分支數(shù)所表示的次數(shù)的掛起。
指定分支數(shù)執(zhí)行單元232對在CPU指令代碼級別所執(zhí)行的分支指令進(jìn)行計(jì)數(shù)。若計(jì)數(shù)值達(dá)到指定的分支數(shù),則指定分支數(shù)執(zhí)行單元232通知次虛擬機(jī)230該事實(shí)。因此,上下文切換至次虛擬機(jī)230,并且次客戶OS 240的執(zhí)行被掛起。
在由于CPU 211的流水線功能的加速導(dǎo)致在執(zhí)行指定數(shù)量的分支后不能立即停止的CPU架構(gòu)中,計(jì)數(shù)值被設(shè)置為小于指定的分支數(shù),從而次客戶OS 240可以被進(jìn)行指定分支數(shù)量的次數(shù)的掛起。
(指定位置上下文切換操作)
隨后,將描述指定位置上下文切換單元233進(jìn)行的指定位置上下文切換操作(S110)。指定位置上下文切換操作被配置為在對次客戶OS 240掛起了指定分支數(shù)量的次數(shù)后不使用暫停指令的情況下,在指定的執(zhí)行掛起位置處將上下文切換至次虛擬機(jī)230。
當(dāng)為次虛擬機(jī)230實(shí)現(xiàn)了專用的上下文切換指令時(shí),在次客戶OS 240的執(zhí)行掛起位置處嵌入上下文切換指令。例如,上下文切換指令可以是英特爾公司制造的CPU的VMCALL指令。
當(dāng)次客戶OS 240執(zhí)行上下文切換指令時(shí),上下文從次客戶OS 240切換至次虛擬機(jī)230,次客戶OS 240的執(zhí)行被掛起。
當(dāng)沒有實(shí)現(xiàn)專用上下文切換指令時(shí),使虛擬中斷或CPU異常的事件在執(zhí)行掛起位置處發(fā)生,使得執(zhí)行上下文切換。當(dāng)執(zhí)行上下文切換時(shí),上下文從次客戶OS 240切換至次虛擬機(jī)230,次客戶OS 240的執(zhí)行被掛起。
在任何情況下,當(dāng)次客戶OS 240的執(zhí)行被掛起時(shí),次虛擬機(jī)230配置虛擬中斷,并且重新啟動次客戶OS 240的執(zhí)行,那時(shí),虛擬中斷被輸入至次客戶OS 240。
<第二實(shí)施例>
作為第二實(shí)施例,將描述當(dāng)主機(jī)100的CPU 111和次機(jī)200的CPU 211具有不同架構(gòu)時(shí)的操作。在本說明書中,不同CPU架構(gòu)意味著兩個(gè)處理器之間的CPU指令集不具有兼容性。
在該情況下,主虛擬機(jī)130和次虛擬機(jī)230通過同步中間語言級別來執(zhí)行并行同步操作。在本說明書中,“中間語言”也被叫做“中間代碼”或“字節(jié)代碼”,并且代表作為高級語言的源代碼與機(jī)器語言的代碼之間的中間體的中間表示語言。并行同步操作被叫做“中間語言同步模式”。
因?yàn)镃PU指令集在兩臺虛擬機(jī)(130,230)之間沒有兼容性,所以客戶OS(140,240)和應(yīng)用程序(150,250)的程序是中間語言的程序,其中,Java(注冊商標(biāo))和C#被轉(zhuǎn)換而取代本地CPU指令代碼。
兩臺虛擬機(jī)(130,230)通過現(xiàn)有的諸如解釋程序或即時(shí)編譯器(JIT編譯器)之類的CPU指令轉(zhuǎn)換技術(shù),針對虛擬機(jī)CPU將中間語言轉(zhuǎn)換為本地CPU指令。
類似地,當(dāng)主機(jī)100的CPU 111和次機(jī)200的CPU 211具有相同的架構(gòu)時(shí),可以執(zhí)行使用中間語言同步模式的并行同步操作。但是,使用CPU指令同步模式的并行同步操作的執(zhí)行速度高于中間語言同步模式的并行同步操作的執(zhí)行速度。
隨后,將描述根據(jù)第二實(shí)施例的各塊的操作。由于大部分的操作與第一實(shí)施例中CPU指令同步模式的操作相同,因此將僅描述與第一實(shí)施例不同的處理。
(虛擬中斷定時(shí)調(diào)節(jié)操作)
在根據(jù)第一實(shí)施例的CPU指令同步模式中,在CPU架構(gòu)的細(xì)節(jié)已知和CPU架構(gòu)的細(xì)節(jié)未知這兩種情況之間的處理中,虛擬中斷定時(shí)調(diào)節(jié)操作(S105)是不同的。另一方面,在根據(jù)第二實(shí)施例的中間語言同步模式中,執(zhí)行與CPU架構(gòu)的細(xì)節(jié)已知時(shí)相同的處理。
也就是,因?yàn)榭梢愿鶕?jù)CPU指令或掛起位置的狀態(tài)標(biāo)志來確定掛起位置是否在臨界段中,所以根據(jù)圖4所示的流程圖,在避開臨界段的情況下配置主客戶OS 140的掛起位置,并將虛擬中斷輸入至主客戶OS 140。
同樣,在中間語言同步模式中,除了CPU指令和掛起位置的狀態(tài)標(biāo)志以外還能夠以中間語言級別來確定掛起位置是否在臨界段中。例如,若中間語言是Java(注冊商標(biāo))的字節(jié)代碼,則假設(shè)在同步互斥控制下實(shí)現(xiàn)臨界段。為此,在確認(rèn)所執(zhí)行的中間語言的指令的同時(shí),主虛擬機(jī)130可以確定掛起的Java(注冊商標(biāo))的中間語言是否在臨界段中。
(同步信息的生成操作)
在根據(jù)第一實(shí)施例的CPU指令同步模式中,在同步信息的生成操作(S107)中,同步定時(shí)信息中所包括的執(zhí)行掛起位置通過使用程序計(jì)數(shù)器值而由CPU指令代碼的執(zhí)行停止位置表示。同樣,包括在同步定時(shí)信息中的分支執(zhí)行數(shù)量由自前一同步定時(shí)信息生成時(shí)間起執(zhí)行的CPU指令代碼的分支數(shù)表示。
相反,在根據(jù)第二實(shí)施例的中間語言同步模式中,執(zhí)行掛起位置由輸入虛擬中斷時(shí)執(zhí)行的中間語言級別的執(zhí)行掛起位置表示。同樣,分支執(zhí)行的數(shù)量由自前一同步定時(shí)信息生成時(shí)間起執(zhí)行的中間語言級別的分支數(shù)表示。
(指定位置上下文切換操作)
在根據(jù)第一實(shí)施例的CPU指令同步模式中,在指定位置上下文切換操作(S110)中,當(dāng)針對次虛擬機(jī)230實(shí)現(xiàn)了專用上下文切換指令時(shí),在次客戶OS 240的執(zhí)行掛起位置處嵌入上下文切換指令。當(dāng)沒有實(shí)現(xiàn)專用上下文切換指令時(shí),使虛擬中斷或CPU異常的事件在執(zhí)行掛起位置處發(fā)生,使得上下文切換被執(zhí)行。即使在根據(jù)第二實(shí)施例的中間語言同步模式中,在中間語言級別的執(zhí)行掛起位置處由CPU指令轉(zhuǎn)換執(zhí)行相同設(shè)定。
<第三實(shí)施例>
隨后,作為第三實(shí)施例,將描述當(dāng)主機(jī)100與次機(jī)200之間的硬件配置不同時(shí)的并行同步操作。主機(jī)100的主硬件110和次機(jī)200的次硬件210均由諸如CPU(111,211)、內(nèi)存(112、212)、諸如存儲器之類的裝置(115、215)之類的各種硬件裝置配置而成。但是,雙方硬件的功能或性能可能并不相互一致。
例如,存在CPU(111,211)的規(guī)格彼此不同、或者內(nèi)存(112、212)的容量彼此不同的情況。同樣,在容錯(cuò)系統(tǒng)10的操作處理中,由于裝置(115,215)的替換會出現(xiàn)兩個(gè)裝置(115,215)不同。
為此,主虛擬機(jī)130和次虛擬機(jī)230在操作上相同,但是在處理速度上可能不同。如上所述,在容錯(cuò)系統(tǒng)10中,主虛擬機(jī)130配置為在次虛擬機(jī)230之前操作。但是,例如,若次虛擬機(jī)230處理速度更高,則進(jìn)程的推進(jìn)會反轉(zhuǎn),并且基于來自主虛擬機(jī)130的同步信息,執(zhí)行狀態(tài)不同步。若主虛擬機(jī)130處理速度更高,則次虛擬機(jī)230的延遲會累積。
同樣,由于裝置(115,215)不同,因此在主客戶OS 140和次客戶OS 240之間驅(qū)動器處理的執(zhí)行可能不同,并且它們之間的操作不同,結(jié)果操作可能不同步。
在該情況下,在容錯(cuò)系統(tǒng)10中,提供了一種基于主硬件110和次硬件210之間的差異來校正處理速度差和不同步的結(jié)構(gòu)。具體來說,主虛擬機(jī)130的同步信息生成單元135和次虛擬機(jī)230的同步校正單元235執(zhí)行同步校正。同步校正可以在執(zhí)行并行同步操作之前被執(zhí)行,或者可以在并行同步操作的執(zhí)行期間被執(zhí)行。
(執(zhí)行并行同步操作之前的同步校正操作)
主虛擬機(jī)130的同步信息生成單元135在主虛擬機(jī)130和次虛擬機(jī)230的并行同步操作以前從次虛擬機(jī)230搜集關(guān)于次虛擬機(jī)230的操作性能信息。
操作性能信息是這樣的信息,其包括了與次虛擬機(jī)230中的次客戶OS 240接口的操作規(guī)范以及作為次虛擬機(jī)230的程序執(zhí)行速度指標(biāo)的基準(zhǔn)信息。同步信息生成單元135被配置為在可得到的范圍內(nèi)獲取有關(guān)多個(gè)項(xiàng)目的操作性能信息。
同步信息生成單元135還獲取有關(guān)主虛擬機(jī)130自身的操作性能信息,并且將獲取到的操作性能信息與有關(guān)次虛擬機(jī)230的操作性能信息進(jìn)行比較。然后,同步信息生成單元135設(shè)置主虛擬機(jī)130和次虛擬機(jī)230所使用的操作性能,使得主虛擬機(jī)130的并行同步操作中的操作性能與次虛擬機(jī)230的并行同步操作中的操作性能基本上相等。
操作性能例如是關(guān)于以下項(xiàng)目的基準(zhǔn)信息:操作頻率、內(nèi)存大小、緩存大小、諸如TLB(翻譯后援緩沖器)/EPT(增強(qiáng)頁表)規(guī)范之類的操作規(guī)范、MIPS值、或SPEC值。在中間語言同步模式中,可以使用中間語言的基準(zhǔn)值。例如,當(dāng)使用Java(注冊商標(biāo))的字節(jié)代碼作為中間語言時(shí),SPECjbb、Caffe ineMark等被列舉為基準(zhǔn)值。
然后,同步信息生成單元135將次虛擬機(jī)230使用的操作性能作為同步校正信息通知給次虛擬機(jī)230的同步校正單元235。次虛擬機(jī)230的同步校正單元235根據(jù)所通知的同步校正信息來在執(zhí)行并行操作時(shí)設(shè)置次虛擬機(jī)230的操作性能。
將描述通過調(diào)節(jié)操作頻率的同步校正的示例。如上所述,當(dāng)主機(jī)100和次機(jī)200之間的硬件配置不同時(shí),存在操作相同但是處理速度不同的情況,以及操作本身不同的情況。在該示例中,將描述操作相同但是處理速度不同時(shí)的同步校正。
在虛擬機(jī)(130,230)的操作頻率的調(diào)節(jié)中,可使用為了節(jié)省電力而準(zhǔn)備的電力控制功能。例如,針對標(biāo)準(zhǔn)電力控制功能可以使用ACPI(高級配置和電源接口),針對調(diào)節(jié)操作頻率的功能可以使用Linux(注冊商標(biāo))的cpfreq子系統(tǒng)。使用這些功能,虛擬機(jī)(130,230)均準(zhǔn)備多個(gè)可用的操作頻率。
主虛擬機(jī)130的同步信息生成單元135從次虛擬機(jī)230獲取在次虛擬機(jī)230中可用的操作頻率的列表,還獲取可以被主虛擬機(jī)130自身使用的操作頻率的列表,并且選擇主虛擬機(jī)130和次虛擬機(jī)230之間基本上相同的操作頻率。同步信息生成單元135將所選操作頻率作為同步校正信息通知給次虛擬機(jī)230的同步校正單元235。
在主虛擬機(jī)130和次虛擬機(jī)230的并行同步操作期間,各虛擬機(jī)(130,230)基于主硬件110和次硬件210之間的操作頻率的差異來以所選操作頻率操作,從而消除處理速度差。
例如,若主虛擬機(jī)130的可用操作頻率中沒有與次虛擬機(jī)230的可用操作頻率相匹配的頻率,則將次虛擬機(jī)230設(shè)置為更高的操作頻率,并且如稍后所述,可以有暫停地地來執(zhí)行次虛擬機(jī)230的操作。
在中間語言同步模式中,由于基準(zhǔn)值不同,因此主虛擬機(jī)130和次虛擬機(jī)230之間的處理速度不同。因此,基于所獲取的兩個(gè)基準(zhǔn)值來執(zhí)行與針對操作頻率的調(diào)節(jié)相同的調(diào)節(jié),以校正處理速度的差異。
隨后,將給出當(dāng)由于硬件配置的差異導(dǎo)致主虛擬機(jī)130和次虛擬機(jī)230之間操作本身不同時(shí)的同步校正的描述。
例如,當(dāng)CPU架構(gòu)相同但裝置(115,215)的操作規(guī)范不同時(shí),改變虛擬機(jī)的執(zhí)行,以使兩個(gè)客戶OS(140,240)執(zhí)行相同的驅(qū)動器處理。通過這樣的改變,兩個(gè)客戶OS(140,240)能夠執(zhí)行相同的操作,并能夠防止不同步。具體來說講,在并行同步操作開始前,將吸收操作規(guī)范中的差異的功能并入主虛擬機(jī)130或次虛擬機(jī)230的設(shè)備模擬器。
該功能根據(jù)待校正對象可以分為以下兩種類型。
(1)對硬件功能的有無之間的差異的校正
當(dāng)某一硬件功能僅安裝于一臺虛擬機(jī)(130,230)時(shí),具有該功能的虛擬機(jī)(130,230)不使用該功能,使得兩臺虛擬機(jī)(130,230)在各虛擬機(jī)均不具有該硬件功能的狀態(tài)下操作。
例如,若虛擬機(jī)在FPU(浮點(diǎn)處理單元)功能的有無方面不同,則兩臺虛擬機(jī)(130,230)在虛擬機(jī)均不具有FPC功能的狀態(tài)下操作。在該情況下,浮點(diǎn)處理由客戶OS(140,240)內(nèi)的仿真代碼執(zhí)行。具體來說,在執(zhí)行浮點(diǎn)處理時(shí)發(fā)生異常,客戶OS(140,240)的異常處理程序獲取該異常,通過軟件仿真該處理。
可替代地,不具備該功能的虛擬機(jī)(130,230)可以通過在客戶OS(140,240)以外的外部環(huán)境中處理軟件來仿真該功能,以吸收它們之間的差異。客戶OS(140,240)以外的外部環(huán)境可以是虛擬機(jī)(130,230)或者管理程序(120,220)。
例如,不具有FPC功能的虛擬機(jī)(130,230)通過虛擬機(jī)(130,230)內(nèi)的仿真代碼來執(zhí)行浮點(diǎn)處理。具體來說,由在執(zhí)行浮點(diǎn)處理時(shí)發(fā)生的異常來執(zhí)行到虛擬機(jī)上下文的切換,由虛擬機(jī)(130,230)內(nèi)的軟件來仿真該處理,并且隨后進(jìn)程返回至客戶OS上下文。因?yàn)?,在客戶OS(140,240)中沒有獲取異常,所以沒有執(zhí)行客戶OS(140,240)內(nèi)的仿真代碼。
(2)對硬件功能的性能或容量的差異的校正
當(dāng)硬件功能的性能或容量不同時(shí),在客戶OS(140,240)以外的外部環(huán)境中執(zhí)行操作方面不同的處理??蛻鬙S(140,240)以外的外部環(huán)境可以是虛擬機(jī)(130,230)、管理程序(120,220)、或硬件(110,210)。
例如,若TLB的緩存大小不同,則存在僅虛擬機(jī)(130,230)中的一個(gè)未命中緩存的情況,發(fā)生TLB未命中。在該情況下,在客戶OS(140,240)的外部執(zhí)行從TLB未命中的恢復(fù)處理。在英特爾公司制造的CPU中,可以由硬件的功能來執(zhí)行恢復(fù)處理。另一方面,當(dāng)CPU(111,211)不具備硬件的恢復(fù)功能時(shí),由虛擬機(jī)(130,230)或管理程序(130,230)的軟件來執(zhí)行恢復(fù)處理。
在中間語言同步模式中,虛擬機(jī)(130,230)使用諸如解釋器或虛擬內(nèi)存之類的軟件功能來執(zhí)行由中間語言表達(dá)的客戶OS程序。為此,不會因?yàn)椴僮饕?guī)范上的差異導(dǎo)致客戶OS(140,240)的操作上發(fā)生差異。
(在并行同步操作的執(zhí)行期間的同步校正操作)
當(dāng)即使通過并行同步操作開始前的調(diào)節(jié)也不能消除主虛擬機(jī)130和次虛擬機(jī)230之間的處理速度差異時(shí),同步信息生成單元135和同步校正單元235在并行同步操作期間執(zhí)行以下同步校正。
首先,將描述當(dāng)調(diào)節(jié)了操作性能后的主虛擬機(jī)130比調(diào)節(jié)了操作性能后的次虛擬機(jī)230的速度高時(shí)的同步校正。
同步信息生成單元135選擇主虛擬機(jī)130的操作性能或者次虛擬機(jī)230的操作性能作為要被通知給次虛擬機(jī)230的同步校正信息的操作速度信息。例如,基于參數(shù)配置來進(jìn)行選擇。
若選擇了主虛擬機(jī)130的操作性能,則因?yàn)橹魈摂M機(jī)130的在前操作擴(kuò)大,所以執(zhí)行用于消除次虛擬機(jī)230的延遲的處理。在該情況下,若次虛擬機(jī)230的延遲大于假定量,則可以檢測機(jī)器中出現(xiàn)故障。
現(xiàn)在,將描述兩種校正方法作為消除延遲的處理的示例。首先,將描述重新設(shè)置延遲和執(zhí)行再同步的方法作為第一校正方法。
次虛擬機(jī)230的同步校正單元235確認(rèn)次虛擬機(jī)230中的程序的執(zhí)行速度的測量延遲時(shí)間是否等于從同步校正信息得到的假定延遲時(shí)間。
現(xiàn)在,將描述測量延遲時(shí)間。次虛擬機(jī)230從主虛擬機(jī)130接收使用定時(shí)器的固定周期虛擬中斷的同步定時(shí)信息。同步定時(shí)信息代表通過將主虛擬機(jī)130的執(zhí)行速度轉(zhuǎn)換為執(zhí)行指令的數(shù)量而得到的周期時(shí)間,其是次虛擬機(jī)230的理論值。另一方面,在次虛擬機(jī)230中發(fā)生使用定時(shí)器的固定周期虛擬中斷時(shí)的周期時(shí)間是測量值。通過從測量值中減去理論值得到的值是測量延遲時(shí)間。
例如,當(dāng)主虛擬機(jī)130中實(shí)際發(fā)生的定時(shí)器中斷的周期值是10ms時(shí),若次虛擬機(jī)230在進(jìn)行與主虛擬機(jī)130相同的操作后接收虛擬中斷,則假設(shè)次虛擬機(jī)230中定時(shí)器中斷的周期的測量值為15ms。在該情況下,因?yàn)槔碚撝禐?0ms,而測量值為15ms,所以計(jì)算出定時(shí)器中斷有5ms的延遲。
若測量延遲時(shí)間與從同步校正信息得到的假定延遲時(shí)間可比較,則確定為正常延遲,繼續(xù)處理。因?yàn)闇y量延遲時(shí)間隨著處理的繼續(xù)而累積,所以提前設(shè)置作為可容許范圍的可容許延遲時(shí)間,在當(dāng)測量延遲時(shí)間超過可容許延遲時(shí)間的時(shí)點(diǎn)處再次執(zhí)行與并行同步操作啟動時(shí)相同的同步初始化處理以重設(shè)延遲。
例如,當(dāng)主虛擬機(jī)130的程序執(zhí)行速度為1500MIPS(百萬指令每秒),并且次虛擬機(jī)230的程序執(zhí)行速度為1000MIPS時(shí),若在次虛擬機(jī)230中出現(xiàn)延遲,該延遲為每秒處理500MI(5億指令)所需的時(shí)間,則確定為正常延遲。同樣,連續(xù)10秒累積的用于處理5000MI(50億指令)的時(shí)間在次虛擬機(jī)230中對應(yīng)于5秒,若時(shí)間超過可容許延遲時(shí)間,則執(zhí)行再同步以重設(shè)延遲。
隨后,將描述提前某一時(shí)間以克服延遲的方法作為第二校正方法。在該方法中,當(dāng)主客戶OS 140變?yōu)榭臻e狀態(tài),并且操作停止直至隨后的虛擬中斷輸入至主客戶OS 140時(shí),也就是當(dāng)CPU處理的負(fù)荷小于100%時(shí),將次客戶OS 240重新開始的時(shí)間提前以克服延遲。
主客戶OS 140的空閑狀態(tài)代表沒有待執(zhí)行的處理并且主客戶OS 140的操作停止的狀態(tài)。主客戶OS 140直至輸入虛擬中斷以執(zhí)行處理程序處理才重新啟動操作。直到那時(shí),主虛擬機(jī)130等待外部中斷的輸入。
主虛擬機(jī)130繼續(xù)等待外部中斷的實(shí)際輸入,次虛擬機(jī)230繼續(xù)等待用于輸入虛擬中斷的同步信息的接收。
當(dāng)次虛擬機(jī)230被延遲時(shí),因?yàn)橥叫畔⒗鄯e,所以可以已知接下來要輸入的虛擬中斷。為此,次虛擬機(jī)230不需要等待與主虛擬機(jī)130相同的時(shí)間,而是可以將重新啟動次客戶OS 240的時(shí)間提前,并且輸入虛擬中斷。
例如,如第一校正方法,假設(shè)主虛擬機(jī)130的程序執(zhí)行速度為1500MIPS,次虛擬機(jī)230的程序執(zhí)行速度為1000MIPS。當(dāng)主客戶OS 140的CPU負(fù)荷為20%時(shí),執(zhí)行每秒300MI的處理,使主虛擬機(jī)130停止達(dá)一秒內(nèi)的剩余時(shí)間。主虛擬機(jī)130的停止時(shí)間是當(dāng)主虛擬機(jī)130執(zhí)行1200MI的處理期間的時(shí)間。
另一方面,在次虛擬機(jī)230已經(jīng)在一秒內(nèi)執(zhí)行了與主虛擬機(jī)130相同的300MI的處理后,次虛擬機(jī)230不在執(zhí)行與主虛擬機(jī)130相同的1200MI的處理的持續(xù)時(shí)間內(nèi)停止,而是在一秒的剩余時(shí)間內(nèi)停止,即,當(dāng)次虛擬機(jī)230執(zhí)行700MI的處理的持續(xù)時(shí)間內(nèi)停止。由此,次虛擬機(jī)230的停止時(shí)間從1200MI減少至700MI處理時(shí)間,因此能夠克服次虛擬機(jī)230的延遲。
隨后,將描述當(dāng)主虛擬機(jī)130比次虛擬機(jī)230的速度高時(shí)提供次虛擬機(jī)230的操作性能作為通知給次虛擬機(jī)230的同步校正信息的操作速度信息。
在該情況下,因?yàn)橹魈摂M機(jī)130以次虛擬機(jī)230的操作性能運(yùn)行,所以主虛擬機(jī)130的同步信息生成單元135在并行同步操作期間執(zhí)行同步校正處理以調(diào)節(jié)程序執(zhí)行速度。具體來說,主虛擬機(jī)130在依照次虛擬機(jī)230的程序執(zhí)行速度進(jìn)行暫停的情況下執(zhí)行操作。
其后,將描述當(dāng)調(diào)節(jié)了操作性能后的次虛擬機(jī)230比調(diào)節(jié)了操作性能后的主虛擬機(jī)130的速度更高時(shí)的同步校正。同步信息生成單元135設(shè)置要通知給次虛擬機(jī)230的同步校正信息的操作速度信息作為主虛擬機(jī)130的操作性能。
然后,主虛擬機(jī)130在并行同步操作期間不執(zhí)行同步校正處理,并且次虛擬機(jī)230在依照主虛擬機(jī)130的程序執(zhí)行速度進(jìn)行暫停的情況下執(zhí)行操作。
例如,當(dāng)主虛擬機(jī)130的程序執(zhí)行速度為1000MIPS,次虛擬機(jī)230的程序執(zhí)行速度為1500MIPS時(shí),次虛擬機(jī)230執(zhí)行1000MI的處理并隨后在每個(gè)固定周期的虛擬中斷執(zhí)行用于執(zhí)行500MI的處理的持續(xù)時(shí)間的暫停。因此,兩臺虛擬機(jī)(130,230)可以同樣地執(zhí)行1000MIPS的處理。
(針對具有不確定訪問時(shí)間的存儲器裝置的處置)
當(dāng)虛擬機(jī)(130,230)訪問諸如磁盤、SSD、CD、DVD、或磁帶之類的存儲裝置(115,215)時(shí),由于存儲裝置(115,215)的個(gè)體差異或老化,針對訪問請求的完成等待時(shí)間有變化。為了防止該變化導(dǎo)致的不同步,需要適合于較晚完成等待時(shí)間,并且發(fā)生同步等待,由此導(dǎo)致執(zhí)行速度減小。
在根據(jù)本實(shí)施例的容錯(cuò)系統(tǒng)10中,當(dāng)裝置(115,215)是存儲裝置時(shí),虛擬機(jī)(130,230)在內(nèi)存上仿真裝置(115,215),并且用內(nèi)存訪問代替對裝置(115,215)的訪問,由此能夠?qū)ρb置(115,215)的讀/寫請求的完成等待時(shí)間減小至零。
在該情況下,對裝置(115,215)的讀/寫請求的完成中斷不需要等待實(shí)際的完成中斷,而是當(dāng)請求時(shí)與內(nèi)存訪問一起將虛擬中斷輸入至客戶OS(140,240),由此能夠以共同的同步定時(shí)處理讀/寫請求和完成虛擬中斷。因此,對由于完成中斷而導(dǎo)致的虛擬中斷的同步處理變得不必要,減小了處理負(fù)荷,可以防止由于同步等待導(dǎo)致的執(zhí)行速度的減小。
在內(nèi)存中仿真的裝置(115,215)內(nèi)容中的改變與來自客戶OS(140,240)的訪問不同步地反映在裝置(115,215)上。在應(yīng)對方法中,處理可能根據(jù)分配內(nèi)存的位置而不同。
(1)分配虛擬機(jī)(130,230)內(nèi)的內(nèi)存的情況:
虛擬機(jī)(130,230)在分配給虛擬機(jī)(130,230)的內(nèi)存上加載存儲裝置(115,215)的內(nèi)容,并用內(nèi)存訪問替換對存儲裝置的訪問。該內(nèi)存叫做“虛擬存儲器”。當(dāng)更新虛擬存儲器的內(nèi)容時(shí),虛擬機(jī)(130,230)與來自客戶OS(140,240)的訪問不同步地在存儲裝置(115,215)上反應(yīng)內(nèi)容的改變。
具體來說,在以下過程中讀寫數(shù)據(jù)。首先,作為虛擬存儲器的初始化,在提前分配給虛擬機(jī)(130,230)的內(nèi)存上加載存儲裝置(115,215)的內(nèi)容。
在讀數(shù)據(jù)時(shí),當(dāng)客戶OS(140,240)向虛擬存儲器請求讀數(shù)據(jù)時(shí),虛擬機(jī)(130,230)向客戶OS(140,240)通知虛擬存儲器上的內(nèi)容,將讀完成的虛擬中斷輸入至客戶OS(140,240)。
在寫數(shù)據(jù)時(shí),當(dāng)客戶OS(140,240)向虛擬存儲請求寫數(shù)據(jù)時(shí),虛擬機(jī)(130,230)在虛擬存儲中寫數(shù)據(jù),將寫完成的虛擬中斷輸入至客戶OS(140,240)。然后,虛擬機(jī)(130,230)異步地將虛擬存儲器的改變部分寫進(jìn)存儲裝置(115,215)。在將數(shù)據(jù)寫進(jìn)存儲裝置(115,215)完成后,完成的外部中斷被輸入至虛擬機(jī)(130,230)。但是,不需要生成基于完成的外部中斷的虛擬中斷。
(2)分配客戶OS(140,240)內(nèi)的內(nèi)存的情況
當(dāng)客戶OS(140,240)可以使用RAM(隨機(jī)訪問存儲器)盤時(shí),在客戶OS(140,240)中配置的RAM盤用于存儲裝置(115,215)的仿真。RAM盤是讀和寫的等待時(shí)間為零并且沒有完成中斷發(fā)生的裝置。例如,RAM盤可以被諸如Linux(注冊商標(biāo))之類的OS使用。
在客戶OS(140,240)內(nèi)的RAM盤上進(jìn)行關(guān)于上述虛擬存儲器的讀和寫,不在虛擬機(jī)(130,230)上進(jìn)行讀和寫的請求。因?yàn)樵诳蛻鬙S(140,240)內(nèi)部已經(jīng)完成了處理,針對讀/寫請求或完成中斷的同步處理變得不必要。
具體地,在隨后的過程中進(jìn)行RAM盤的數(shù)據(jù)讀寫。首先,作為RAM盤的初始化,提前在客戶OS(140,240)的內(nèi)存上加載存儲裝置(115,215)的內(nèi)容。
在讀數(shù)據(jù)時(shí),當(dāng)客戶OS(140,240)向RAM盤請求讀數(shù)據(jù)時(shí),將RAM盤上的存儲裝置(115,215)的內(nèi)容通知給客戶OS(140,240)。不需要讀完成的虛擬中斷。
在寫數(shù)據(jù)時(shí),當(dāng)客戶OS(140,240)向RAM盤請求寫數(shù)據(jù)時(shí),數(shù)據(jù)被寫進(jìn)RAM盤。不需要寫完成的虛擬中斷。然后,客戶OS(140,240)使RAM盤的內(nèi)容周期性地保存在存儲裝置(115,215)中。