專利名稱:一種處理敏感指令的方法、裝置以及物理機(jī)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)虛擬化領(lǐng)域,尤其涉及一種處理敏感指令的方法、裝置以及物理機(jī)。
背景技術(shù):
在虛擬化領(lǐng)域中,虛擬化技術(shù)擴(kuò)大了硬件的容量,簡(jiǎn)化了軟件的重新配置過程,實(shí)現(xiàn)了在一臺(tái)物理主機(jī)上虛擬多個(gè)虛擬機(jī),并且同時(shí)在各個(gè)虛擬機(jī)上運(yùn)行一個(gè)獨(dú)立的操作系統(tǒng),從而顯著提高計(jì)算機(jī)的工作效率,其中,這些獨(dú)立的操作系統(tǒng)稱為客戶機(jī)操作系統(tǒng)(Guest Operating System, Guest OS)。在現(xiàn)有技術(shù)中,通常采用硬件虛擬化技術(shù)訪問處理器。在Xen構(gòu)架下的虛擬機(jī)系統(tǒng)中,Xen為虛擬機(jī)監(jiān)視器,虛擬機(jī)不能處理敏感指令,如中央處理器(Central ProcessingUnit, CPU)指令中一部分指令為敏感指令。此時(shí)虛擬機(jī)陷入(Virtual Machine Exit, VMExit)Xen中,由Xen來處理敏感指令。在敏感指令處理完成之后,通過虛擬機(jī)進(jìn)入(VirtualMachine Entry, VM Entry)操作返回虛擬機(jī)內(nèi)部繼續(xù)處理下一條指令。當(dāng)下一條指令為敏感指令時(shí),采用上述方法處理敏感指令;當(dāng)下一條指令為非敏感指令時(shí),虛擬機(jī)直接處理該非敏感指令。然而,在現(xiàn)有技術(shù)中,每當(dāng)虛擬機(jī)執(zhí)行一條敏感指令時(shí),就需要在一次虛擬機(jī)陷入中處理一條敏感指令。當(dāng)出現(xiàn)連續(xù)的敏感指令訪問時(shí),虛擬機(jī)在短期內(nèi)需要執(zhí)行大量敏感指令,導(dǎo)致大量的虛擬機(jī)陷入,使得虛擬機(jī)性能下降。
發(fā)明內(nèi)容
本發(fā)明提供的一種處理敏感指令的方法、裝置以及物理機(jī),可以實(shí)現(xiàn)減少虛擬機(jī)陷入的次數(shù),提高虛擬機(jī)的性能。第一方面,本發(fā)明提供一種處理敏感指令的方法,包括:在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址當(dāng)所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集,其中,所述敏感指令集包括至少兩條敏感指令,且所述敏感指令集的起始指令和結(jié)尾指令均為敏感指令;根據(jù)獲取的所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集。結(jié)合第一方面,在第一種可能的實(shí)施例中,所述敏感指令集包括至少兩條敏感指令和至少一條非敏感指令。結(jié)合第一方面中的第一種可能的實(shí)施例,在第二種可能的實(shí)施例中,所述根據(jù)所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集,包括:按照所述指令的執(zhí)行順序,處理所述敏感指令集中的第一指令;在處理第一指令之后,獲取所述第一指令的長度;根據(jù)所述第一指令的長度,修改指令指針I(yè)P寄存器指向的地址為所述敏感指令集中的第二指令對(duì)應(yīng)的內(nèi)存地址,以便根據(jù)上述處理所述第一指令的方法處理所述第二指令。結(jié)合第一方面中的第二種可能的實(shí)施例,在第三種可能的實(shí)施例中,所述根據(jù)所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集,包括:按照所述指令的執(zhí)行順序,處理所述敏感指令集;在處理所述敏感指令集之后,獲取所述敏感指令集的長度;根據(jù)所述敏感指令集的長度,修改IP寄存器指向的地址為下一條待處理指令對(duì)應(yīng)的內(nèi)存地址,以便處理所述待處理指令。結(jié)合第一方面中的前述任一種可能的實(shí)施例,在第四種可能的實(shí)施例中,所述方法還包括:當(dāng)所述待處理敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),直接處理所述待處理的敏感指令。第二方面,本發(fā)明提供一種處理敏感指令的裝置,包括:第一獲取模塊,用于在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址,并將所述處理的敏感指令對(duì)應(yīng)的內(nèi)存地址發(fā)送給第二獲取模塊;所述第二獲取模塊用于接收所述第一獲取模塊發(fā)送的所述待處理的敏感指令,當(dāng)所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集,并將所述敏感指令集發(fā)送給處理模塊;其中,所述敏感指令集包括至少兩條敏感指令,且所述敏感指令集的起始指令和結(jié)尾指令均為敏感指令;所述處理模塊用于根據(jù)所述第二獲取模塊獲取的所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集。結(jié)合第二方面,在第一種可能的實(shí)施例中,所述處理模塊,包括:第一處理單元,用于按照所述指令的執(zhí)行順序,處理所述敏感指令集中的第一指令;第一獲取單元,用于在所述第一處理單元處理完第一指令之后,獲取所述第一指令的長度,并將所述第一指令的長度發(fā)送給第一修改單元;所述第一修改單元,用于根據(jù)接收的所述第一獲取單元獲取的所述第一指令的長度,修改IP寄存器指向的地址為所述敏感指令集中的第二指令對(duì)應(yīng)的內(nèi)存地址。結(jié)合第二方面的第一種可能的實(shí)施例,在第二種可能的實(shí)施例中,所述處理模塊,包括:第二處理單元,用于按照所述指令的執(zhí)行順序,處理所述敏感指令集;第二獲取單元,用于在所述第二處理單元處理完所述敏感指令集之后,獲取所述敏感指令集的長度,并將所述敏感指令集的長度發(fā)送給第二修改單元;所述第二修改單元,用于根據(jù)接收的所述第二獲取單元獲取的所述敏感指令集的長度,修改IP寄存器指向的地址為下一條待處理指令對(duì)應(yīng)的內(nèi)存地址。結(jié)合第二方面的前述任一種可能的實(shí)施例,在第四種可能的實(shí)施例中,所述處理模塊,還用于當(dāng)所述待處理敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),直接處理所述待處理的敏感指令。第三方面,本發(fā)明實(shí)施例還提供一種物理機(jī),所述物理機(jī)包括硬件層、運(yùn)行在硬件層之上的虛擬機(jī)監(jiān)視器和運(yùn)行在虛擬機(jī)監(jiān)視器上的一個(gè)或多個(gè)虛擬機(jī),所述虛擬機(jī)監(jiān)視器包括如前述任一項(xiàng)實(shí)施例所述的處理敏感指令的裝置??梢?,本發(fā)明實(shí)施例提供一種處理敏感指令的方法、裝置以及物理機(jī),通過在虛擬機(jī)執(zhí)行待處理的敏感指令導(dǎo)致陷入之后,獲取待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址;當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集;根據(jù)敏感指令集記錄的指令及指令的執(zhí)行順序處理敏感指令集,與現(xiàn)有技術(shù)中每當(dāng)虛擬機(jī)執(zhí)行一條敏感指令時(shí),就需要在一次虛擬機(jī)陷入中模擬一條敏感指令,當(dāng)出現(xiàn)連續(xù)的敏感指令訪問時(shí),虛擬機(jī)在短期內(nèi)需要執(zhí)行大量敏感指令,導(dǎo)致大量的虛擬機(jī)陷入,使得虛擬機(jī)性能下降相比,本發(fā)明實(shí)施例可以實(shí)現(xiàn)減少虛擬機(jī)陷入的次數(shù),提高虛擬機(jī)的性能。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例提供的一種處理敏感指令的方法的流程示意圖;圖2為本發(fā)明實(shí)施例提供的另一種處理敏感指令的方法的流程示意圖;圖3為本發(fā)明實(shí)施例提供的一種處理器之間的中斷IPI中包含的指令的示意圖;圖4為本發(fā)明實(shí)施例提供的一種處理敏感指令的方法的流程示意圖;圖5為本發(fā)明實(shí)施例提供的另一種處理敏感指令的方法的流程示意圖;圖6為本發(fā)明實(shí)施例提供的一種處理敏感指令的裝置的邏輯結(jié)構(gòu)示意圖;圖7為本發(fā)明實(shí)施例提供的另一種處理敏感指令的裝置的邏輯結(jié)構(gòu)示意圖;圖8為本發(fā)明實(shí)施例提供的再一種處理敏感指令的裝置的邏輯結(jié)構(gòu)示意圖;圖9為本發(fā)明實(shí)施例提供的再一種處理敏感指令的裝置的邏輯結(jié)構(gòu)示意圖;圖10為本發(fā)明實(shí)施例提供的一種物理機(jī)的邏輯結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。如圖1所示,本發(fā)明實(shí)施例提供一種處理敏感指令的方法,該方法的執(zhí)行主體可以為虛擬機(jī)監(jiān)視器Xen,該方法包括以下步驟:步驟101,在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址;Xen為一種虛擬機(jī)監(jiān)視器。Xen可以預(yù)先將至少一個(gè)敏感指令集和敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址保存在存儲(chǔ)區(qū)域中。通常,在Guest OS中由虛擬機(jī)處理指令,但是虛擬機(jī)無法處理某些指令,這些指令需要切換到Xen中,由Xen來進(jìn)行處理。虛擬機(jī)不能處理的指令為敏感指令,虛擬機(jī)可以處理的指令為非敏感指令。當(dāng)虛擬機(jī)不能處理敏感指令時(shí),Xen通過捕獲該敏感指令,切換到Xen中處理該敏感指令的過程叫虛擬機(jī)陷入(VirtualMachine Exit, VM Exit)??梢岳斫獾氖?在本實(shí)施例中該敏感指令為待處理的敏感指令。指令由操作碼和操作數(shù)兩部分組成。其中,操作碼為需要執(zhí)行操作的內(nèi)容,如傳送、運(yùn)算、移位、跳轉(zhuǎn)等具體操作,操作碼是指令中不可缺少的組成部分;操作數(shù)為指令執(zhí)行的對(duì)象,即各種操作的對(duì)象。需要說明的是,一些指令中可以不需要操作數(shù)。步驟102,當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集,其中,敏感指令集包括至少兩條敏感指令,且敏感指令集的起始指令和結(jié)尾指令均為敏感指令;敏感指令集由連續(xù)的敏感指令組成;或者敏感指令集中的至少兩條敏感指令之間可以不連續(xù),他們中間可以包含非敏感指令,但是在敏感指令集中的起始指令和結(jié)尾指令必須為敏感指令。優(yōu)選的,在敏感指令集中至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)不大于M。其中,M為大于等于1、小于等于10的自然數(shù)。在本實(shí)施例中,至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)不大于4。當(dāng)然,本實(shí)施例不限制至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)。按照Xen保存的敏感指令集的排列順序,Xen將待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址依次進(jìn)行比較,當(dāng)找到與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址時(shí),停止該操作,然后獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集。步驟103,根據(jù)敏感指令集記錄的指令及指令的執(zhí)行順序處理敏感指令集。Xen按照指令的執(zhí)行順序?qū)γ舾兄噶罴涗浀闹噶钸M(jìn)行處理。在Xen處理完敏感指令集之后,然后通過虛擬機(jī)進(jìn)入(Virtual Machine Entry,VM Entry)返回虛擬機(jī)內(nèi)部繼續(xù)處理下一條待處理的指令。其中,處理敏感指令記錄的指令的方法為現(xiàn)有技術(shù),在此不--贅述。需要說明的是,當(dāng)待處理敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),Xen直接按照現(xiàn)有技術(shù)處理待處理的敏感指令。可見,本發(fā)明實(shí)施例提供一種處理敏感指令的方法,通過在虛擬機(jī)執(zhí)行待處理的敏感指令導(dǎo)致陷入之后,獲取待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址;當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集;根據(jù)敏感指令集記錄的指令及指令的執(zhí)行順序處理敏感指令集。與現(xiàn)有技術(shù)中每當(dāng)虛擬機(jī)執(zhí)行一條敏感指令時(shí),就需要在一次虛擬機(jī)陷入中模擬一條敏感指令,當(dāng)出現(xiàn)連續(xù)的敏感指令訪問時(shí),虛擬機(jī)在短期內(nèi)需要執(zhí)行大量敏感指令,導(dǎo)致大量的虛擬機(jī)陷入,使得虛擬機(jī)性能下降相比,本發(fā)明實(shí)施例可以實(shí)現(xiàn)減少虛擬機(jī)陷入的次數(shù),提高虛擬機(jī)的性能。如圖2所示,本發(fā)明實(shí)施例提供另一種處理敏感指令的方法,該方法包括以下步驟:步驟201,Xen接收新敏感指令集和新敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址,并將新敏感指令集進(jìn)行保存;本步驟為可選步驟,當(dāng)有新敏感指令集時(shí),執(zhí)行此步驟;當(dāng)沒有新敏感指令集時(shí),直接執(zhí)行步驟202。其中虛線框表示此步驟為可選步驟,當(dāng)然也可以以其他方式表示可選關(guān)系,
Xen為一種虛擬機(jī)監(jiān)視器。Xen可以預(yù)先將至少一個(gè)敏感指令集和敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址保存在存儲(chǔ)區(qū)域中,以及當(dāng)有新敏感指令集,Xen可以接收該新敏感指令集和新敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址,并將存儲(chǔ)區(qū)域中保存的數(shù)據(jù)進(jìn)彳丁更新。敏感指令集由連續(xù)的敏感指令組成;或者敏感指令集中的至少兩條敏感指令之間可以不連續(xù),他們中間可以包含非敏感指令,但是在敏感指令集中的起始指令和結(jié)尾指令必須為敏感指令。優(yōu)選的,在敏感指令集中至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)不大于M。其中,M為大于等于1、小于等于10的自然數(shù)。在本實(shí)施例中,至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)不大于4。當(dāng)然,本實(shí)施例不限制至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)。步驟202,虛擬機(jī)在處理待處理的敏感指令時(shí),導(dǎo)致VM Exit ;通常,在Guest OS中由虛擬機(jī)處理指令,但是虛擬機(jī)無法處理某些指令,這些指令需要切換到Xen中,由Xen來進(jìn)行處理。虛擬機(jī)不能處理的指令為敏感指令,虛擬機(jī)可以處理的指令為非敏感指令。當(dāng)虛擬機(jī)不能處理敏感指令時(shí),Xen通過捕獲該敏感指令,切換到Xen中處理該敏感指令的過程叫VM Exit??梢岳斫獾氖?,在本實(shí)施例中該敏感指令為待處理的敏感指令。例如,在Guest OS中虛擬機(jī)需要處理10條指令,其中,敏感指令為指令2、指令3、指令5、指令10,非敏感指令為指令1、指令4、指令6、指令7、指令8、指令9。在Guest OS中,由于指令2、指令3與指令5之間的距離較小,可以作為一個(gè)敏感指令集。其中,指令I(lǐng)對(duì)應(yīng)的內(nèi)存地址為001,指令2對(duì)應(yīng)的內(nèi)存地址為002,指令3對(duì)應(yīng)的內(nèi)存地址為003,指令4對(duì)應(yīng)的內(nèi)存地址為004,指令5對(duì)應(yīng)的內(nèi)存地址為005,指令6對(duì)應(yīng)的內(nèi)存地址為006,指令7對(duì)應(yīng)的內(nèi)存地址為007,指令8對(duì)應(yīng)的內(nèi)存地址為008,指令9對(duì)應(yīng)的內(nèi)存地址為009,指令10對(duì)應(yīng)的內(nèi)存地址為010。虛擬機(jī)在處理指令I(lǐng)之后,即將處理的指令2為敏感指令,即指令2為待處理的敏感指令。由于虛擬機(jī)不能處理指令2,從而導(dǎo)致了 VM Exit步驟203,在待處理的敏感指令VM Exit之后,Xen獲取待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址;具體的,根據(jù)步驟201中的舉例,在虛擬機(jī)處理指令2導(dǎo)致陷入之后,獲取指令2對(duì)應(yīng)的內(nèi)存地址002。步驟204,Xen將待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的敏感指令集中包括的起始指令對(duì)應(yīng)的內(nèi)存地址依次進(jìn)行比較,獲得比較結(jié)果;當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),繼續(xù)執(zhí)行步驟205 ;當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),繼續(xù)執(zhí)行步驟206。步驟205,當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集;具體的,根據(jù)步驟202-步驟203中的舉例,當(dāng)待處理的敏感指令為指令2時(shí),指令指針(Instruction Pointer, IP)寄存器指向的指令2對(duì)應(yīng)的內(nèi)存地址為002,而Xen中保存的某一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址為002,Xen按照保存敏感指令集的順序,將指令2對(duì)應(yīng)的內(nèi)存地址依次與保存的敏感指令集中包括的起始指令對(duì)應(yīng)的內(nèi)存地址進(jìn)行比較,直到找到與指令2對(duì)應(yīng)的內(nèi)存地址相同的敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址時(shí),根據(jù)指令2對(duì)應(yīng)的內(nèi)存地址獲取與指令2對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集。在Xen獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集之后,繼續(xù)執(zhí)行步驟207。步驟206,當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),Xen按照現(xiàn)有技術(shù)處理當(dāng)前待處理的敏感指令;具體的,根據(jù)步驟202中的舉例,當(dāng)待處理的敏感指令為指令10時(shí),IP寄存器指向的指令10對(duì)應(yīng)的內(nèi)存地址為010。由于指令10為單獨(dú)的敏感指令,在Xen的存儲(chǔ)區(qū)域中不存在與指令10對(duì)應(yīng)的內(nèi)存地址相同的敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址,Xen按照現(xiàn)有技術(shù)處理當(dāng)前待處理的指令10。通常,Xen需要獲取指令10,然后解析指令的類型10,根據(jù)指令10的類型,解析指令10的內(nèi)容;根據(jù)指令10的內(nèi)容,Xen對(duì)指令10進(jìn)行處理。其中,敏感指令包括:企圖訪問或修改虛擬機(jī)模式或機(jī)器狀態(tài)的指令;企圖訪問或修改敏感寄存器或存儲(chǔ)單元,如時(shí)鐘寄存器、中斷寄存器等的指令;企圖訪問存儲(chǔ)保護(hù)系統(tǒng)或內(nèi)存、地址分配系統(tǒng)的指令;所有I/O指令。需要說明的是,步驟205與步驟206是并列的關(guān)系,兩者不可同時(shí)執(zhí)行。在附圖2中,以虛線框表示步驟206,或者也可以以虛線框表示步驟205,其中虛線框表示此步驟為可選步驟,當(dāng)然也可以以其他方式表示可選關(guān)系,本發(fā)明實(shí)施例不進(jìn)行限制表示可選關(guān)系的方式。步驟207, Xen根據(jù)敏感指令集記錄的指令及指令的執(zhí)行順序處理敏感指令集;Xen將獲取的敏感指令集記錄的指令按照指令的執(zhí)行順序依次進(jìn)行處理。例如,根據(jù)步驟202-步驟203的舉例,Xen根據(jù)敏感指令集中記錄的各個(gè)指令執(zhí)行順序,依次處理指令2、指令3、指令4、指令5。具體的,如圖3所示,在Guest OS系統(tǒng)中,處理器之間的中斷(Inter-ProcessorInterrupt, IPI)包含的指令以及指令的順序是固定的,即敏感指令集為“讀取中斷控制寄存器(Interrupt Controller Register, ICR)的 busy 位”、“代碼段 I”、“寫 ICR2”、“代碼段2”、“寫I CR,發(fā)送IPI”。其中“讀取ICR的busy位”、“寫ICR2”、“寫I CR,發(fā)送IPI”這三個(gè)指令為敏感指令;“代碼段I”為至少一條非敏感指令、“代碼段2”為至少一條非敏感指令。虛擬機(jī)處理敏感指令“讀取ICR的busy位”導(dǎo)致VM Exit, Xen獲取IP寄存器指向的“讀取CR的busy位”對(duì)應(yīng)的內(nèi)存地址;按照Xen保存的敏感指令集的排列順序,將“讀取CR的busy位”對(duì)應(yīng)的內(nèi)存地址與保存的敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址依次進(jìn)行比較。當(dāng)“讀取ICR的busy位”對(duì)應(yīng)的內(nèi)存地址與保存的敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),Xen從存儲(chǔ)區(qū)域中獲取該敏感指令集,然后根據(jù)IP寄存器指向的“讀取ICR的busy位”所在地址獲取第一敏感指令的內(nèi)容,然后按照指令的執(zhí)行順序依次進(jìn)行處理。其中,“讀取ICR的busy位”用于檢測(cè)ICR的發(fā)送狀態(tài)位,當(dāng)狀態(tài)位是I時(shí),則表明最后一個(gè)IPI還未被目標(biāo)處理器接收,此時(shí)Xen需要等待目標(biāo)處理器接收最后一個(gè)IPI之后才能處理下一個(gè)指令;當(dāng)狀態(tài)位是O時(shí),則表明目標(biāo)處理器已經(jīng)接收最后一個(gè)IPI,此時(shí)Xen可以處理下一個(gè)指令?!皩慖CR2”用于寫出IPI發(fā)送的目的地址?!皩慖CR,發(fā)送IPI”用于寫入中斷信息,并發(fā)送該中斷。需要說明的是,Xen根據(jù)敏感指令集記錄的指令及指令的執(zhí)行順序,處理敏感指令集時(shí),包括以下兩種方式。第一種方式,參照附圖4對(duì)本實(shí)施例中Xen處理敏感指令集的過程的詳細(xì)描述,如圖4所示,具體可包括如下步驟:步驟2071a,Xen按照指令的執(zhí)行順序,處理敏感指令集中的第一指令;第一指令為敏感指令集中的任意一個(gè)指令。當(dāng)?shù)谝恢噶顬槊舾兄噶罴械钠鹗贾噶罨蛘呓Y(jié)尾指令時(shí),第一指令為敏感指令;當(dāng)?shù)谝恢噶顬槊舾兄噶罴谐鹗贾噶詈徒Y(jié)尾指令以外的任一個(gè)指令時(shí),第一指令可以為敏感指令,或者第一指令可以為非敏感指令。具體的,根據(jù)附圖2步驟202-步驟203的舉例中,第一指令可以為敏感指令集中指令2-指令5中任一個(gè)指令,為了方便描述,在本實(shí)施例中第一指令為指令2。步驟2072a,在Xen處理第一指令之后,獲取第一指令的長度;通常,一條指令的長度均為I個(gè)字節(jié)。其中,指令長度的單位為字節(jié)。具體的,指令2的長度為I字節(jié)。步驟2073a,根據(jù)第一指令的長度,Xen修改IP寄存器指向的地址為敏感指令集中的第二指令對(duì)應(yīng)的內(nèi)存地址,以便根據(jù)上述處理第一指令的方法處理第二指令。具體的,根據(jù)指令2的長度I字節(jié),將IP寄存器指向的地址002加上指令2的長度I等于下一條指令對(duì)應(yīng)的內(nèi)存地址003,即將IP寄存器指向的地址為敏感指令集中的第二指令對(duì)應(yīng)的內(nèi)存地址003。需要說明的是,Xen按照上述方法繼續(xù)處理指令3、指令4以及指令5以及依次修改IP寄存器指向的地址,直到Xen將指令5處理完之后,按照指令5的長度,將IP寄存器指向的地址005修改為指令6對(duì)應(yīng)的內(nèi)存地址006。第二種方式,參照附圖5對(duì)本實(shí)施例中Xen處理敏感指令集的過程的另一詳細(xì)描述,如圖5所示,具體可包括如下步驟:步驟2071b,Xen按照指令的執(zhí)行順序,處理敏感指令集;步驟2072b,在Xen處理敏感指令集之后,獲取敏感指令集的長度;具體的,根據(jù)附圖2步驟202-步驟203的舉例中,敏感指令集的長度為4字節(jié)。步驟2073b,根據(jù)敏感指令集的長度,Xen修改IP寄存器指向的地址為下一條待處理指令對(duì)應(yīng)的內(nèi)存地址,以便處理待處理指令。具體的,Xen按照指令的執(zhí)行順序,將敏感指令集中的所有指令:指令2、指令3、指令4、指令5處理完成之后,獲取敏感指令集的長度為4字節(jié),將IP寄存器指向的地址002加上敏感指令集的長度4等于下一條指令對(duì)應(yīng)的內(nèi)存地址,即將IP寄存器指向的地址002修改為下一條指令對(duì)應(yīng)的內(nèi)存地址006。需要說明的是,根據(jù)步驟2071a-步驟2073a和步驟2071b_步驟2073b的操作方法為Xen處理敏感指令集的過程。在Xen處理敏感指令集之后,繼續(xù)執(zhí)行步驟208。步驟208,在處理敏感指令集之后,通過VM Entry操作返回虛擬機(jī)內(nèi)部,根據(jù)IP寄存器指向的地址,虛擬機(jī)對(duì)IP寄存器指向的地址對(duì)應(yīng)的指令進(jìn)行處理。具體的,在Xen處理敏感指令集中的指令2-指令5之后,通過VM Entry操作返回虛擬機(jī)內(nèi)部,根據(jù)IP寄存器指向的地址006,虛擬機(jī)按照現(xiàn)有技術(shù)繼續(xù)對(duì)指令6進(jìn)行處理。可見,虛擬機(jī)在短期內(nèi)需要處理大量敏感指令時(shí),按照現(xiàn)有技術(shù)每次陷入只能處理一條指令,使得虛擬機(jī)出現(xiàn)大量的陷入,導(dǎo)致了虛擬機(jī)性能下降,本發(fā)明實(shí)施例提供的方案可以在虛擬機(jī)需要處理一系列的敏感指令時(shí),在虛擬機(jī)一次陷入之后就能將這一系列的敏感指令處理完,然后通過VM Entry返回虛擬機(jī)內(nèi)部繼續(xù)處理下一條指令。從而實(shí)現(xiàn)了減少虛擬機(jī)陷入的次數(shù),并且提高了虛擬機(jī)的性能。本發(fā)明實(shí)施例提供一種處理敏感指令的裝置,該裝置可以獨(dú)立實(shí)現(xiàn),也可以實(shí)現(xiàn)到虛擬機(jī)監(jiān)視器,例如Xen內(nèi)部。如圖6所示,該裝置包括:第一獲取模塊601,第二獲取模塊602,處理模塊603。第一獲取模塊601,用于在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址,并將處理的敏感指令對(duì)應(yīng)的內(nèi)存地址發(fā)送給第二獲取模塊602 ;第二獲取模塊602,還用于根據(jù)接收第一獲取模塊601獲取的待處理的敏感指令,當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集,并將敏感指令集發(fā)送給處理模塊603 ;其中,敏感指令集包括至少兩條敏感指令,且敏感指令集的起始指令和結(jié)尾指令均為敏感指令;處理模塊603,用于根據(jù)第二獲取模塊602獲取的敏感指令集記錄的指令及指令的執(zhí)行順序處理敏感指令集。敏感指令集由連續(xù)的敏感指令組成,或者敏感指令集中的至少兩條敏感指令之間可以不連續(xù),但是在敏感指令集中的起始指令和結(jié)尾指令必須為敏感指令。優(yōu)選的,在敏感指令集中的至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)不大于M,M為大于等于1、小于等于10的自然數(shù)。在本實(shí)施例中,至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)不大于4。當(dāng)然,本實(shí)施例不限制至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)。例如,在Guest OS中虛擬機(jī)需要處理10條指令,其中,敏感指令為指令2、指令3、指令5、指令10,非敏感指令為指令1、指令4、指令6、指令7、指令8、指令9。在Guest OS中,由于指令2、指令3與指令5之間的距離較小,可以作為一個(gè)敏感指令集。虛擬機(jī)處理指令的流程以及指令之間的關(guān)系是一定的,所以在虛擬機(jī)未處理這10條指令之前,該裝置已將敏感指令集保存在存取區(qū)域。其中,指令I(lǐng)對(duì)應(yīng)的內(nèi)存地址為001,指令2對(duì)應(yīng)的內(nèi)存地址為002,指令3對(duì)應(yīng)的內(nèi)存地址為003,指令4對(duì)應(yīng)的內(nèi)存地址為004,指令5對(duì)應(yīng)的內(nèi)存地址為005,指令6對(duì)應(yīng)的內(nèi)存地址為006,指令7對(duì)應(yīng)的內(nèi)存地址為007,指令8對(duì)應(yīng)的內(nèi)存地址為008,指令9對(duì)應(yīng)的內(nèi)存地址為009,指令10對(duì)應(yīng)的內(nèi)存地址為010。具體的,第一獲取模塊601獲取指令2對(duì)應(yīng)的內(nèi)存地址002,然后將指令2對(duì)應(yīng)的內(nèi)存地址002發(fā)送給第二獲取模塊602。然后第二獲取模塊602根據(jù)接收第一獲取模塊601獲取指令2,當(dāng)指令2對(duì)應(yīng)的內(nèi)存地址002與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與指令2對(duì)應(yīng)的內(nèi)存地址002相同的起始指令所屬的敏感指令集,該敏感指令集包括指令2、指令3、指令5以及指令5,并將敏感指令集發(fā)送給處理模塊603 ;處理模塊603按照指令的執(zhí)行順序處理敏感指令集。具體的,如圖7所示,處理模塊603,包括:第一處理單元6031,第一獲取單元6032,第一修改單元6033 ;第一處理單元6031按照指令的執(zhí)行順序,處理敏感指令集中的第一指令;其中,第一指令為敏感指令集中的任意一個(gè)指令。當(dāng)?shù)谝恢噶顬槊舾兄噶罴械钠鹗贾噶罨蛘呓Y(jié)尾指令時(shí),第一指令為敏感指令;當(dāng)?shù)谝恢噶顬槊舾兄噶罴谐鹗贾噶詈徒Y(jié)尾指令以外的任一個(gè)指令時(shí),第一指令可以為敏感指令,或者第一指令可以為非敏感指令。在第一處理單元6031處理第一指令之后,第一獲取單元6032獲取第一指令的長度,并將第一指令的長度發(fā)送給第一修改單元6033 ;通常,一條指令的長度均為I個(gè)字節(jié)。其中,指令長度的單位為字節(jié)。根據(jù)接收的第一獲取單元6032獲取的第一指令的長度,第一修改單元6033修改IP寄存器指向的地址為敏感指令集中的第二指令對(duì)應(yīng)的內(nèi)存地址。其中,處理模塊603處理敏感指令集的詳細(xì)過程可參考附圖4所示的方法實(shí)施例部分,在此不一一贅述。具體的,如圖8所示,處理模塊603,包括:第二處理單元6034,第二獲取單元6035,第二修改單元6036 ;第二處理單元6034,用于按照指令的執(zhí)行順序,處理敏感指令集;第二獲取單元6035,用于在第二處理單元6034處理敏感指令集之后,獲取敏感指令集的長度,并將敏感指令集的長度發(fā)送給第二修改單元6036 ;第二修改單元6036,用于根據(jù)接收的第二獲取單元6035獲取的敏感指令集的長度,修改IP寄存器指向的地址為下一條待處理指令對(duì)應(yīng)的內(nèi)存地址。其中,處理模塊603處理敏感指令集的詳細(xì)過程可參考附圖5所示的方法實(shí)施例部分,在此不一一贅述。需要說明的是,當(dāng)待處理敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),處理模塊603直接按照現(xiàn)有技術(shù)處理待處理的敏感指令。這里,處理模塊603處理待處理的敏感指令可參照附圖2中的步驟206,在此不一一贅述??梢姡景l(fā)明實(shí)施例提供一種處理敏感指令的裝置,第一獲取模塊在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址,并將處理的敏感指令對(duì)應(yīng)的內(nèi)存地址發(fā)送給第二獲取模塊;第二獲取模塊根據(jù)接收第一獲取模塊獲取的待處理的敏感指令,當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集,并將敏感指令集發(fā)送給處理模塊;其中,敏感指令集包括至少兩條敏感指令,且敏感指令集的起始指令和結(jié)尾指令均為敏感指令;處理模塊根據(jù)第二獲取模塊獲取的敏感指令集記錄的指令及指令的執(zhí)行順序處理敏感指令集。與現(xiàn)有技術(shù)中每當(dāng)虛擬機(jī)執(zhí)行一條敏感指令時(shí),就需要在一次虛擬機(jī)陷入中模擬一條敏感指令,當(dāng)出現(xiàn)連續(xù)的敏感指令訪問時(shí),虛擬機(jī)在短期內(nèi)需要執(zhí)行大量敏感指令,導(dǎo)致大量的虛擬機(jī)陷入,使得虛擬機(jī)性能下降相比,本發(fā)明實(shí)施例可以實(shí)現(xiàn)減少虛擬機(jī)陷入的次數(shù),提高虛擬機(jī)的性能。需要說明的是,圖6-圖8所示裝置中,其各個(gè)模塊的具體實(shí)施過程以及各個(gè)模塊之間的信息交互等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一發(fā)明構(gòu)思,可以參見方法實(shí)施例,在此不一一贅述。如圖9所示,本發(fā)明實(shí)施例提供另一種處理敏感指令的裝置,該裝置包括:存儲(chǔ)器901,處理器902 ;
存儲(chǔ)器901,用于存儲(chǔ)包括程序例程的信息。處理器902,與存儲(chǔ)器901耦合,用于控制程序例程的執(zhí)行,具體包括用于在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址;以及根據(jù)獲取的待處理的敏感指令,當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集;然后根據(jù)獲取的敏感指令集記錄的指令及指令的執(zhí)行順序處理敏感指令集。敏感指令集由連續(xù)的敏感指令組成,或者敏感指令集中的至少兩條敏感指令之間可以不連續(xù),他們中間可以包含非敏感指令,但是在敏感指令集中的起始指令和結(jié)尾指令必須為敏感指令。優(yōu)選的,在敏感指令集中的至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)不大于M,M為大于等于1、小于等于10的自然數(shù)。在本實(shí)施例中,至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)不大于4。當(dāng)然,本實(shí)施例不限制至少兩條敏感指令之間的非敏感指令的個(gè)數(shù)。當(dāng)虛擬機(jī)不能處理敏感指令時(shí),導(dǎo)致出現(xiàn)了 VM Exit,此時(shí)處理器902獲取該待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址。處理器902按照保存敏感指令集的順序,將IP寄存器指向的當(dāng)前待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址依次與保存的敏感指令集中包括的起始指令對(duì)應(yīng)的內(nèi)存地址進(jìn)行比較。其中,比較結(jié)果有兩種情況。第一種情況,當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),處理器902獲取與待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集;然后根據(jù)獲取的敏感指令集記錄的指令及指令的執(zhí)行順序處理敏感指令集??蛇x的,處理器902按照指令的執(zhí)行順序處理敏感指令集中的第一指令;在處理第一指令之后,獲取第一指令的長度;然后根據(jù)第一指令的長度,修改IP寄存器指向的地址為敏感指令集中的第二指令對(duì)應(yīng)的內(nèi)存地址。其中,第一指令為敏感指令集中的任意一個(gè)指令。當(dāng)?shù)谝恢噶顬槊舾兄噶罴械钠鹗贾噶罨蛘呓Y(jié)尾指令時(shí),第一指令為敏感指令;當(dāng)?shù)谝恢噶顬槊舾兄噶罴谐鹗贾噶詈徒Y(jié)尾指令以外的任一個(gè)指令時(shí),第一指令可以為敏感指令,或者第一指令可以為非敏感指令。通常,一條指令的長度均為I個(gè)字節(jié)。其中,指令長度的單位為字節(jié)??蛇x的,處理器902還用于按照指令的執(zhí)行順序,處理敏感指令集;在處理敏感指令集之后,獲取敏感指令集的長度;然后根據(jù)敏感指令集的長度,修改IP寄存器指向的地址為下一條待處理指令對(duì)應(yīng)的內(nèi)存地址。第二種情況,當(dāng)待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),處理器902按照現(xiàn)有技術(shù)直接處理待處理的敏感指令。需要說明的是,附圖9所示裝置中,其各個(gè)模塊的具體實(shí)施過程以及各個(gè)模塊之間的信息交互等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一發(fā)明構(gòu)思,可以參見方法實(shí)施例,在此不一一贅述。本發(fā)明實(shí)施例提供一種處理敏感指令的裝置,可以實(shí)現(xiàn)減少虛擬機(jī)陷入的次數(shù),提高虛擬機(jī)的性能。如圖10所示,本發(fā)明實(shí)施例還提供一種物理機(jī)。該物理機(jī)包括硬件層1001、運(yùn)行在硬件層之上的虛擬機(jī)監(jiān)視器1002和運(yùn)行在虛擬機(jī)監(jiān)視器上的虛擬機(jī)1003,該虛擬機(jī)監(jiān)視器1002可以包括任意一種上述實(shí)施例的處理敏感指令的裝置。硬件層1001包括處理器、存儲(chǔ)器、網(wǎng)絡(luò)接口等功能模塊,各個(gè)模塊可以直接通信,也可以通過總線連接進(jìn)行通信。虛擬機(jī)1003也可以為I個(gè);而多個(gè)虛擬機(jī)1003可以相同,也可以不同,例如運(yùn)行不同的操作系統(tǒng),對(duì)此本發(fā)明實(shí)施例不作特殊限定。綜上,本發(fā)明實(shí)施例提供的敏感指令處理方法、裝置以及物理機(jī),可以在連續(xù)多個(gè)敏感指令出現(xiàn)時(shí)有效減少虛擬機(jī)陷入的次數(shù),提高虛擬機(jī)的性能。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM, Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種處理敏感指令的方法,其特征在于,包括: 在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址; 當(dāng)所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集,其中,所述敏感指令集包括至少兩條敏感指令,且所述敏感指令集的起始指令和結(jié)尾指令均為敏感指令; 根據(jù)獲取的所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述敏感指令集包括至少兩條敏感指令和至少一條非敏感指令。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集,包括: 按照所述指令的執(zhí)行順序,處理所述敏感指令集中的第一指令; 在處理第一指令之后,獲取所述第一指令的長度; 根據(jù)所述第一指令的長度,修改指令指針I(yè)P寄存器指向的地址為所述敏感指令集中的第二指令對(duì)應(yīng)的內(nèi)存地址,以便根據(jù)上述處理所述第一指令的方法處理所述第二指令。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集,包括: 按照所述指令的執(zhí)行順序,處理所述敏感指令集; 在處理完所述敏感指令集中的所有指令之后,獲取所述敏感指令集的長度; 根據(jù)所述敏感指令集的長度,修改IP寄存器指向的地址為下一條待處理指令對(duì)應(yīng)的內(nèi)存地址。
5.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的方法,其特征在于,所述方法還包括: 當(dāng)所述待處理敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),直接處理所述待處理的敏感指令。
6.一種處理敏感指令的裝置,其特征在于,包括: 第一獲取模塊,用于在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址,并將所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址發(fā)送給第二獲取模塊; 第二獲取模塊,用于接收所述第一獲取模塊發(fā)送的所述待處理的敏感指令,當(dāng)所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集,并將所述敏感指令集發(fā)送給處理模塊;其中,所述敏感指令集包括至少兩條敏感指令,且所述敏感指令集的起始指令和結(jié)尾指令均為敏感指令; 處理模塊,用于接收所述第二獲取模塊發(fā)送的所述敏感指令集,根據(jù)所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述處理模塊,包括: 第一處理單元,用于按照所述指令的執(zhí)行順序,處理所述敏感指令集中的第一指令; 第一獲取單元, 用于在所述第一處理單元處理完第一指令之后,獲取所述第一指令的長度,并將所述第一指令的長度發(fā)送給第一修改單元; 第一修改單元,用于根據(jù)接收到的所述第一獲取單元獲取的所述第一指令的長度,修改IP寄存器指向的地址為所述敏感指令集中的第二指令對(duì)應(yīng)的內(nèi)存地址。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述處理模塊,包括: 第二處理單元,用于按照所述指令的執(zhí)行順序,處理所述敏感指令集; 第二獲取單元,用于在所述第二處理單元處理完所述敏感指令集之后,獲取所述敏感指令集的長度,并將所述敏感指令集的長度發(fā)送給第二修改單元; 第二修改單元,用于根據(jù)接收的所述第二獲取單元獲取的所述敏感指令集的長度,修改IP寄存器指向的地址為下一條待處理指令對(duì)應(yīng)的內(nèi)存地址。
9.根據(jù)權(quán)利要求6-8中任一項(xiàng)所述的裝置,其特征在于,所述處理模塊,還用于當(dāng)所述待處理敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的每個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址均不相同時(shí),直接處理所述待處理的敏感指令。
10.一種物理機(jī),其特征在于, 所述物理機(jī)包括硬件層、運(yùn)行在硬件層之上的虛擬機(jī)監(jiān)視器和運(yùn)行在虛擬機(jī)監(jiān)視器上的一個(gè)或多個(gè)虛擬機(jī),所述虛擬機(jī)監(jiān)視器包括如權(quán)利要求6-9任一項(xiàng)所述的處理敏感指令的裝置。
全文摘要
本發(fā)明實(shí)施例涉及計(jì)算機(jī)虛擬化領(lǐng)域,通過本發(fā)明實(shí)施例通過在虛擬機(jī)處理待處理的敏感指令導(dǎo)致陷入之后,獲取所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址;當(dāng)所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址與保存的任意一個(gè)敏感指令集中起始指令對(duì)應(yīng)的內(nèi)存地址相同時(shí),獲取與所述待處理的敏感指令對(duì)應(yīng)的內(nèi)存地址相同的起始指令所屬的敏感指令集;根據(jù)獲取的所述敏感指令集記錄的指令及所述指令的執(zhí)行順序處理所述敏感指令集,可以實(shí)現(xiàn)減少虛擬機(jī)陷入的次數(shù),提高虛擬機(jī)的性能。
文檔編號(hào)G06F9/455GK103197915SQ20131006669
公開日2013年7月10日 申請(qǐng)日期2013年3月1日 優(yōu)先權(quán)日2013年3月1日
發(fā)明者嚴(yán)曉丹 申請(qǐng)人:華為技術(shù)有限公司