本發(fā)明涉及計算機領域,尤其涉及一種指令執(zhí)行方法及虛擬機。
背景技術(shù):
基于虛擬機的執(zhí)行引擎是數(shù)據(jù)庫執(zhí)行引擎的一種實現(xiàn)方法,數(shù)據(jù)庫首先解析結(jié)構(gòu)化查詢語言(英文全稱:structuredquerylanguage,英文縮寫:sql)語句,生成語法樹,根據(jù)語法樹生成虛擬機字節(jié)碼bytecode,數(shù)據(jù)庫執(zhí)行引擎執(zhí)行bytecode來完成數(shù)據(jù)查詢。從語法樹生成bytecode一般采用通用的編譯技術(shù),將數(shù)據(jù)庫的投影、選擇、連接、排序、分組以及去重等操作轉(zhuǎn)化為操作碼、順序執(zhí)行、比較、條件跳轉(zhuǎn)、循環(huán)等指令。數(shù)據(jù)庫虛擬機融合數(shù)據(jù)庫技術(shù)和編譯技術(shù),很多編譯器優(yōu)化技術(shù)需要結(jié)合數(shù)據(jù)庫自身特點才能實現(xiàn)。
現(xiàn)有的一種編譯器優(yōu)化技術(shù)的思想是將循環(huán)體內(nèi)沒有變化的指令調(diào)整到循環(huán)體外。
但是,針對循環(huán)體外的指令,當指令將被執(zhí)行時,指令每次都會被執(zhí)行,但是可能指令每次執(zhí)行的輸出結(jié)果是不變的,由此指令實質(zhì)上不需要每次都執(zhí)行,因此會增加不必要的指令執(zhí)行次數(shù),執(zhí)行效率不高。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種指令執(zhí)行方法及虛擬機,能夠減少不必要的指令執(zhí)行次數(shù),提高執(zhí)行效率。
有鑒于此,本發(fā)明第一方面提供了一種指令執(zhí)行方法,包括:
虛擬機中循環(huán)體的第一指令在執(zhí)行之前,需要對影響第一指令的輸出結(jié)果的第一關聯(lián)信息進行綁定,第一關聯(lián)信息存儲在第一關聯(lián)寄存器中,第一關聯(lián)信息包含位置變化信息、數(shù)值變化信息中至少一種;當?shù)谝恢噶顚⒈粓?zhí)行時,判斷第一關聯(lián)信息是否發(fā)生變化,若是,則執(zhí)行第一指令。
其中,第一關聯(lián)信息記錄著第一關聯(lián)寄存器的數(shù)值和位置的變化。
其有益效果是:第一指令需要與位置變化信息和/或數(shù)值變化信息進行綁定,在第一指令每次執(zhí)行之前,需要先判斷位置和/或數(shù)值是否發(fā)生變化,只有確定位置和數(shù)值至少一個發(fā)生變化,第一指令才會執(zhí)行,相對于現(xiàn)有技術(shù)中第一指令可能每次都會執(zhí)行的方案,本發(fā)明中第一指令的每次執(zhí)行基于指 令通知機制,因此本發(fā)明能夠減少不必要的指令執(zhí)行次數(shù),提高執(zhí)行效率。
結(jié)合本發(fā)明第一方面,本發(fā)明第一方面的第一實施方式包括:
由于第一關聯(lián)信息包含位置變化信息、數(shù)值變化信息中至少一種,所以第一關聯(lián)信息可以分為三種,若第一關聯(lián)信息包含位置變化信息,則可以通過位置變化信息判斷第一關聯(lián)寄存器的位置是否發(fā)生變化,若是,則確定第一關聯(lián)信息發(fā)生變化;若第一關聯(lián)信息包含數(shù)值變化信息,則根據(jù)數(shù)值變化信息判斷第一關聯(lián)寄存器的數(shù)值是否發(fā)生變化,若是,則確定第一關聯(lián)信息發(fā)生變化;若第一關聯(lián)信息包含位置變化信息和數(shù)值變化信息,則根據(jù)位置變化信息和數(shù)值變化信息判斷第一關聯(lián)寄存器的位置和數(shù)值中的至少一個是否發(fā)生變化,若是,則確定第一關聯(lián)信息發(fā)生變化。
其有益效果是:針對如何判斷第一關聯(lián)信息是否發(fā)生變化進行了相應的說明,完善了本發(fā)明的技術(shù)方案。
結(jié)合本發(fā)明第一方面,本發(fā)明第一方面的第二實施方式包括:
在執(zhí)行第一指令后,當?shù)诙噶顚⒈粓?zhí)行時,若檢測到第一指令的輸出結(jié)果改變了第二關聯(lián)寄存器的位置和/或數(shù)值,且檢測到第二指令與第二關聯(lián)信息綁定,則執(zhí)行第二指令。
結(jié)合本發(fā)明第一方面的第二實施方式,本發(fā)明第一方面的第三實施方式包括:
在執(zhí)行第二指令后,當?shù)谌噶顚⒈粓?zhí)行時,若檢測到第二指令的輸出結(jié)果改變了第三關聯(lián)寄存器的位置和/或數(shù)值,且檢測到第三指令與第三關聯(lián)信息綁定,則對第三指令以及第三關聯(lián)信息取消綁定,且對第三指令以及第二關聯(lián)信息進行綁定,并執(zhí)行第三指令。
其有益效果是:第一指令、第二指令以及第三指令是一種級聯(lián)依賴關系,第三指令不一定要與第三關聯(lián)信息綁定,可以根據(jù)實際場景綁定影響第三指令的輸出結(jié)果的間接關聯(lián)信息,由此,第三指令可以與第二關聯(lián)信息進行綁定。
結(jié)合本發(fā)明第一方面,本發(fā)明第一方面的第四實施方式包括:
判斷第一關聯(lián)信息是否發(fā)生變化,若否,則不執(zhí)行第一指令。
結(jié)合本發(fā)明第一方面的第四實施方式,本發(fā)明第一方面的第五實施方式 包括:
當虛擬機執(zhí)行到第一指令時,發(fā)現(xiàn)第一指令不需要執(zhí)行,仍然需要檢測第一指令在之前一次執(zhí)行的時候跳轉(zhuǎn)的指令位置,并將第一指令跳轉(zhuǎn)到指令位置對應的指令,其中,第一指令中存儲有第一指令在之前一次執(zhí)行的時候跳轉(zhuǎn)的指令位置。
其有益效果是:在第一指令為跳轉(zhuǎn)指令的情況下,即使虛擬機確定第一指令不需要指令,也要檢查第一指令在之前一次執(zhí)行的時候的指令位置,并將第一指令跳轉(zhuǎn)到指令位置對應的指令。由此,提供了一種跳轉(zhuǎn)指令的處理方法,完善了本發(fā)明的技術(shù)方案。
結(jié)合本發(fā)明第一方面,本發(fā)明第一方面的第一實施方式,本發(fā)明第一方面的第二實施方式,本發(fā)明第一方面的第三實施方式,本發(fā)明第一方面的第六實施方式包括:
在一些場景下,對于被執(zhí)行的概率總是很高的指令,應該使其總被執(zhí)行,而不需要依賴其他指令的通知,所以若第一指令將被執(zhí)行的次數(shù)為m,第一指令實際執(zhí)行的次數(shù)為n,n/m不小于預設閾值,則對第一指令以及第一關聯(lián)信息取消綁定,將第一指令設置為可執(zhí)行指令,并保存第一指令為可執(zhí)行指令的狀態(tài)不變。
結(jié)合本發(fā)明第一方面,本發(fā)明第一方面的第一實施方式,本發(fā)明第一方面的第二實施方式,本發(fā)明第一方面的第三實施方式,本發(fā)明第一方面的第七實施方式包括:
對于一些本身執(zhí)行開銷很小的指令,例如整數(shù)相加指令、無條件跳轉(zhuǎn)指令,也可以使其總被執(zhí)行,因為這些指令即使不執(zhí)行也不會帶來很大的性能提升,而將這些指令與關聯(lián)信息進行綁定也會有一定程度的開銷。由此:若第一指令為整數(shù)相加指令或無條件跳轉(zhuǎn)指令,則將第一指令設置為可執(zhí)行指令,并保持第一指令為可執(zhí)行指令的狀態(tài)不變。
有鑒于此,本發(fā)明第二方面提供了一種虛擬機,包括:
確定單元,用于確定第一指令對應的第一關聯(lián)寄存器,第一指令為虛擬機中循環(huán)體的指令,第一關聯(lián)寄存器中存儲有第一關聯(lián)信息,第一關聯(lián)信息包含位置變化信息、數(shù)值變化信息中至少一種;
綁定單元,用于對第一指令以及第一關聯(lián)信息進行綁定;
判斷單元,用于當?shù)谝恢噶顚⒈粓?zhí)行時,判斷第一關聯(lián)信息是否發(fā)生變化;
第一執(zhí)行單元,用于若判斷單元判斷第一關聯(lián)信息發(fā)生變化,則執(zhí)行第一指令。
其中,第一關聯(lián)信息記錄著第一關聯(lián)寄存器的數(shù)值和位置的變化。
其有益效果是:第一指令需要與位置變化信息和/或數(shù)值變化信息進行綁定,在第一指令每次執(zhí)行之前,需要先判斷位置和/或數(shù)值是否發(fā)生變化,只有確定位置和數(shù)值至少一個發(fā)生變化,第一指令才會執(zhí)行,相對于現(xiàn)有技術(shù)中第一指令可能每次都會執(zhí)行的方案,本發(fā)明中第一指令的每次執(zhí)行基于指令通知機制,因此本發(fā)明能夠減少不必要的指令執(zhí)行次數(shù),提高執(zhí)行效率。
結(jié)合本發(fā)明第二方面,本發(fā)明第二方面的第一實施方式包括:
由于第一關聯(lián)信息包含位置變化信息、數(shù)值變化信息中至少一種,所以第一關聯(lián)信息可以分為三種,若第一關聯(lián)信息包含位置變化信息,則判斷單元,具體用于根據(jù)位置變化信息判斷第一關聯(lián)寄存器的位置是否發(fā)生變化;
確定單元,還用于若判斷單元判斷第一關聯(lián)寄存器的位置發(fā)生變化,則確定第一關聯(lián)信息發(fā)生變化;或者,
若第一關聯(lián)信息包含數(shù)值變化信息,則判斷單元,具體用于根據(jù)數(shù)值變化信息判斷第一關聯(lián)寄存器的數(shù)值是否發(fā)生變化;
確定單元,還用于若判斷單元判斷第一關聯(lián)寄存器的數(shù)值發(fā)生變化,則確定第一關聯(lián)信息發(fā)生變化;或者,
若第一關聯(lián)信息包含位置變化信息和數(shù)值變化信息,則判斷單元,具體用于根據(jù)位置變化信息和數(shù)值變化信息判斷第一關聯(lián)寄存器的位置和數(shù)值中的至少一個是否發(fā)生變化;
確定單元,還用于若判斷單元判斷第一關聯(lián)寄存器的位置和數(shù)值中的至少一個發(fā)生變化,則確定第一關聯(lián)信息發(fā)生變化。
其有益效果是:針對如何判斷第一關聯(lián)信息是否發(fā)生變化進行了相應的說明,完善了本發(fā)明的技術(shù)方案。
結(jié)合本發(fā)明第二方面,本發(fā)明第二方面的第二實施方式包括:
所述虛擬機還包括:
第二執(zhí)行單元,用于當?shù)诙噶顚⒈粓?zhí)行時,若檢測到所述第一指令的輸出結(jié)果改變了第二關聯(lián)寄存器的位置和/或數(shù)值,且檢測到所述第二指令與第二關聯(lián)信息綁定,則執(zhí)行所述第二指令。
結(jié)合本發(fā)明第二方面的第二實施方式,本發(fā)明第二方面的第三實施方式包括:
所述虛擬機還包括:
第三執(zhí)行單元,用于當?shù)谌噶顚⒈粓?zhí)行時,若檢測到所述第二指令的輸出結(jié)果改變了第三關聯(lián)寄存器的位置和/或數(shù)值,且檢測到所述第三指令與第三關聯(lián)信息綁定,則對所述第三指令以及所述第三關聯(lián)信息取消綁定,且對所述第三指令以及所述第二關聯(lián)信息進行綁定,并執(zhí)行所述第三指令。
其有益效果是:第一指令、第二指令以及第三指令是一種級聯(lián)依賴關系,第三指令不一定要與第三關聯(lián)信息綁定,可以根據(jù)實際場景綁定影響第三指令的輸出結(jié)果的間接關聯(lián)信息,由此,第三指令可以與第二關聯(lián)信息進行綁定。
結(jié)合本發(fā)明第二方面,本發(fā)明第二方面的第四實施方式包括:
所述虛擬機還包括:
第四執(zhí)行單元,用于若判斷單元判斷所述第一關聯(lián)信息發(fā)生變化,則不執(zhí)行所述第一指令。
結(jié)合本發(fā)明第二方面的第四實施方式,本發(fā)明第二方面的第五實施方式包括:
所述虛擬機還包括:
跳轉(zhuǎn)單元,用于若所述第一指令為跳轉(zhuǎn)指令,則檢測所述第一指令在之前一次執(zhí)行時跳轉(zhuǎn)的指令位置,并將所述第一指令跳轉(zhuǎn)到所述指令位置對應的指令,其中,所述第一指令中存儲有所述第一指令在之前一次執(zhí)行時跳轉(zhuǎn)的指令位置。
結(jié)合本發(fā)明第二方面,本發(fā)明第二方面的第一實施方式,本發(fā)明第二方面的第二實施方式,本發(fā)明第二方面的第三實施方式,本發(fā)明第二方面的第六實施方式包括:
在一些場景下,對于被執(zhí)行的概率總是很高的指令,應該使其總被執(zhí)行,而不需要依賴其他指令的通知;
由此,所述虛擬機還包括:
第一處理單元,用于若所述第一指令將被執(zhí)行的次數(shù)為m,所述第一指令的執(zhí)行次數(shù)為n,所述n/m不小于預設閾值,則對所述第一指令以及所述第一關聯(lián)信息取消綁定,將所述第一指令設置為可執(zhí)行指令,并保持所述第一指令為可執(zhí)行指令的狀態(tài)不變。
結(jié)合本發(fā)明第二方面,本發(fā)明第二方面的第一實施方式,本發(fā)明第二方面的第二實施方式,本發(fā)明第二方面的第三實施方式,本發(fā)明第二方面的第七實施方式包括:
對于一些本身執(zhí)行開銷很小的指令,例如整數(shù)相加指令、無條件跳轉(zhuǎn)指令,也可以使其總被執(zhí)行,因為這些指令即使不執(zhí)行也不會帶來很大的性能提升,而將這些指令與關聯(lián)信息進行綁定也會有一定程度的開銷;
由此,所述虛擬機還包括:
第二處理單元,用于若所述第一指令為整數(shù)相加指令或無條件跳轉(zhuǎn)指令,則將所述第一指令設置為可執(zhí)行指令,并保持所述第一指令為可執(zhí)行指令的狀態(tài)不變。
從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:本發(fā)明利用了指令通知機制,即第一指令需要與位置變化信息和/或數(shù)值變化信息進行綁定,在第一指令每次執(zhí)行之前,需要先判斷位置和/或數(shù)值是否發(fā)生變化,只有確定位置和數(shù)值至少一個發(fā)生變化,第一指令才會執(zhí)行,相對于現(xiàn)有技術(shù)中第一指令可能每次都會執(zhí)行的方案,本發(fā)明中第一指令的每次執(zhí)行基于指令通知機制,因此本發(fā)明能夠減少不必要的指令執(zhí)行次數(shù),提高執(zhí)行效率。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的 前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例虛擬機運行環(huán)境示意圖;
圖2為本發(fā)明實施例指令執(zhí)行方法流程示意圖;
圖3為本發(fā)明實施例虛擬機指令、游標和寄存器的綁定流程示意圖;
圖4為本發(fā)明實施例指令跳轉(zhuǎn)流程示意圖;
圖5為本發(fā)明實施例指令間接綁定流程示意圖;
圖6為本發(fā)明實施例虛擬機的一個結(jié)構(gòu)示意圖;
圖7為本發(fā)明實施例虛擬機的另一個結(jié)構(gòu)示意圖;
圖8為本發(fā)明實施例服務器的結(jié)構(gòu)示意圖。
具體實施方式
本發(fā)明實施例提供了一種指令執(zhí)行方法及虛擬機,能夠減少不必要的指令執(zhí)行次數(shù),提高執(zhí)行效率。
為了使本技術(shù)領域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”、“第三”“第四”等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的實施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設備固有的其它步驟或單元。
為了便于理解本發(fā)明實施例,下面對本發(fā)明實施例指令執(zhí)行方法的虛擬機運行環(huán)境進行說明,如下:
本發(fā)明利用了指令通知機制,即每個指令需要識別影響指令的輸出結(jié)果的影響因素,當其影響因素沒有改變的時候,則指令不需要執(zhí)行。同時,每 個指令需要訂閱影響該指令的輸出結(jié)果的其他指令變化,當?shù)谝恢噶顖?zhí)行完成后,需要檢查是否有第二指令訂閱了第一指令的變化。為了使虛擬機支持指令通知機制,需要在虛擬機運行環(huán)境中增加各種訂閱信息,圖1顯示了本發(fā)明需要的虛擬機運行環(huán)境,以數(shù)據(jù)庫虛擬機舉例說明,本發(fā)明還可以應用于其他各種虛擬機中。
圖1顯示了虛擬機運行環(huán)境中包含的各種運行時信息,包括數(shù)據(jù)寄存器、游標、指令等各種信息,通常數(shù)據(jù)庫虛擬機中都會包含這些運行時信息,而指令信息中包含輸入輸出寄存器信息。本發(fā)明的關鍵在于如何實現(xiàn)指令的訂閱和通知,下面將結(jié)合具體實施例對本發(fā)明指令執(zhí)行方法進行描述。
請參閱圖2,本發(fā)明實施例中指令執(zhí)行方法的一個實施例包括:
101、確定第一指令對應的第一關聯(lián)寄存器,該第一指令為虛擬機中循環(huán)體的指令,該第一關聯(lián)寄存器中存儲有第一關聯(lián)信息,該第一關聯(lián)信息包含位置變化信息、數(shù)值變化信息中至少一種;
本實施例中,虛擬機確定虛擬機中循環(huán)體中的每個指令對應的關聯(lián)寄存器。
需要說明的是,每個關聯(lián)寄存器中存儲有關聯(lián)信息,與關聯(lián)寄存器相關聯(lián)的指令的輸出結(jié)果受到關聯(lián)信息的影響,關聯(lián)信息中包含著位置變化信息、數(shù)值變化信息中至少一種,位置變化信息為游標的位置發(fā)生變化導致的變化信息,數(shù)值變化信息為寄存器的數(shù)值發(fā)生變化導致的變化信息。
可以理解的是,第一指令的輸出結(jié)果可以與游標的位置變化有關聯(lián),可以與寄存器的數(shù)值變化有關聯(lián),也可以同時與游標的位置變化和寄存器的數(shù)值變化有關聯(lián)。
102、對第一指令以及第一關聯(lián)信息進行綁定;
在確定第一指令對應的第一關聯(lián)寄存器后,虛擬機對第一指令以及第一關聯(lián)信息進行綁定。
需要說明的是,第一指令與第一關聯(lián)信息進行綁定,相當于若第一關聯(lián)信息發(fā)生變化,第一指令能夠知道第一關聯(lián)信息發(fā)生變化,第一指令訂閱了第一關聯(lián)信息。
103、當?shù)谝恢噶顚⒈粓?zhí)行時,判斷第一關聯(lián)信息是否發(fā)生變化,若是, 則執(zhí)行第一指令。
在對第一指令以及第一關聯(lián)信息進行綁定后,當?shù)谝恢噶顚⒈粓?zhí)行時,判斷第一關聯(lián)信息是否發(fā)生變化,若是,則執(zhí)行第一指令。
本實施例中,本發(fā)明利用了指令通知機制,即第一指令需要與位置變化信息和/或數(shù)值變化信息進行綁定,在第一指令每次執(zhí)行之前,需要先判斷位置和/或數(shù)值是否發(fā)生變化,只有確定位置和數(shù)值至少一個發(fā)生變化,第一指令才會執(zhí)行,相對于現(xiàn)有技術(shù)中第一指令可能每次都會執(zhí)行的方案,本發(fā)明中第一指令的每次執(zhí)行基于指令通知機制,因此本發(fā)明能夠減少不必要的指令執(zhí)行次數(shù),提高執(zhí)行效率。
需要說明的是,若第一關聯(lián)信息包含位置變化信息,則判斷第一關聯(lián)信息是否發(fā)生變化包括:
根據(jù)位置變化信息判斷第一關聯(lián)寄存器的位置是否發(fā)生變化,若是,則確定第一關聯(lián)信息發(fā)生變化;或者,
若第一關聯(lián)信息包含數(shù)值變化信息,則判斷第一關聯(lián)信息是否發(fā)生變化包括:
根據(jù)數(shù)值變化信息判斷第一關聯(lián)寄存器的數(shù)值是否發(fā)生變化,若是,則確定第一關聯(lián)信息發(fā)生變化;或者,
若第一關聯(lián)信息包含位置變化信息和數(shù)值變化信息,則判斷第一關聯(lián)信息是否發(fā)生變化包括:
根據(jù)位置變化信息和數(shù)值變化信息判斷第一關聯(lián)寄存器的位置和數(shù)值中的至少一個是否發(fā)生變化,若是,則確定第一關聯(lián)信息發(fā)生變化。
需要說明的是,在執(zhí)行完第一指令后,第一指令的輸出結(jié)果可能會改變第二關聯(lián)寄存器的數(shù)值或者位置,正好第二指令的輸出結(jié)果受到第二關聯(lián)寄存器的影響,由此,在本發(fā)明的一些實施例中,執(zhí)行第一指令后,還包括:
當?shù)诙噶顚⒈粓?zhí)行時,若檢測到第一指令的輸出結(jié)果改變了第二關聯(lián)寄存器的位置和/或數(shù)值,且檢測到第二指令與第二關聯(lián)信息綁定,則執(zhí)行第二指令。
需要說明的是,在執(zhí)行完第二指令后,第二指令的輸出結(jié)果可能會改變第三關聯(lián)寄存器的數(shù)值或者位置,正好第三指令的輸出結(jié)果受到第三關聯(lián)寄 存器的影響,由此,在本發(fā)明的一些實施例中,執(zhí)行第二指令后,還包括:
當?shù)谌噶顚⒈粓?zhí)行時,若檢測到第二指令的輸出結(jié)果改變了第三關聯(lián)寄存器的位置和/或數(shù)值,且檢測到第三指令與第三關聯(lián)信息綁定,則對第三指令以及第三關聯(lián)信息取消綁定,且對第三指令以及第二關聯(lián)信息進行綁定,并執(zhí)行第三指令。
需要說明的是,上述第一指令、第二指令、以及第三指令是一種級聯(lián)依賴關系,第三指令不一定要與第三關聯(lián)信息綁定,可以根據(jù)實際場景綁定影響第三指令的輸出結(jié)果的間接關聯(lián)信息,由此,第三指令可以與第二關聯(lián)信息進行綁定。
需要說明的是,雖然所有的指令都可以根據(jù)自己的輸出結(jié)果來綁定關聯(lián)信息,但是指令不一定非要根據(jù)關聯(lián)信息執(zhí)行。在實際應用中,可以評估指令被執(zhí)行的概率,對于執(zhí)行概率很高的指令,應該使其總被執(zhí)行,而不需要依賴關聯(lián)信息。另外,對于一些本身執(zhí)行開銷很小的指令,例如:整數(shù)相加指令、無條件跳轉(zhuǎn)指令,也可以使其總是執(zhí)行,因為這些指令即使不執(zhí)行也不會帶來很大的性能提升,相反,綁定關聯(lián)信息也會有一定程度的開銷。由此,在本發(fā)明的一些實施例中,執(zhí)行第一指令后,還包括:
若第一指令將被執(zhí)行的次數(shù)為m,第一指令的執(zhí)行次數(shù)為n,n/m不小于預設閾值,則對第一指令以及第一關聯(lián)信息取消綁定,將第一指令設置為可執(zhí)行指令,并保持第一指令為可執(zhí)行指令的狀態(tài)不變。
需要說明的是,上述預設閾值的取值可以為0.8,還可以為其他合理數(shù)值,此處不作限定。
同理,確定第一指令對應的第一關聯(lián)寄存器,之后包括:
若第一指令為整數(shù)相加指令或無條件跳轉(zhuǎn)指令,則將第一指令設置為可執(zhí)行指令,并保持述第一指令為可執(zhí)行指令的狀態(tài)不變。
同參閱圖1,可以理解的是,若判斷第一關聯(lián)信息未發(fā)生變化,則不需要執(zhí)行第一指令。
需要說明的是,第一指令可能為跳轉(zhuǎn)指令,若第一指令為跳轉(zhuǎn)指令,即使第一指令不需要執(zhí)行,也需要在執(zhí)行到第一指令后,進行跳轉(zhuǎn)操作。由此,在本發(fā)明的一些實施例中,不執(zhí)行第一指令,之后包括:
若第一指令為跳轉(zhuǎn)指令,則檢測第一指令在之前一次執(zhí)行時跳轉(zhuǎn)的指令位置,并將第一指令跳轉(zhuǎn)到指令位置對應的指令,其中,第一指令中存儲有第一指令在之前一次執(zhí)行時跳轉(zhuǎn)的指令位置。
下面以一實際的應用場景對本發(fā)明實施例中指令執(zhí)行方法進行描述:
請參閱圖3,圖3顯示了虛擬機指令、游標和寄存器的綁定流程。
在執(zhí)行完指令op1后,指令op1改變了游標(cursor)2的位置,也即是改變了游標2中存儲的關聯(lián)信息,同時指令op3和指令op5綁定了游標2中存儲的關聯(lián)信息,所以通知指令op3和指令op5可以執(zhí)行(當指令op3和指令op5將被執(zhí)行時,能夠執(zhí)行指令op3以及指令op5);
指令op2改變了游標1中存儲的關聯(lián)信息,同時指令op4綁定了游標1中存儲的關聯(lián)信息,所以通知指令op4可以執(zhí)行;
指令op3改變了寄存器(register)1中存儲的關聯(lián)信息,同時指令op4以及指令op5綁定了寄存器1中存儲的關聯(lián)信息,所以通知指令op4以及指令op5可以執(zhí)行;
指令op4改變了寄存器2中存儲的關聯(lián)信息,同時指令op6綁定了寄存器2中存儲的關聯(lián)信息,所以通知指令op6可以執(zhí)行;
指令op5改變了寄存器3中存儲的關聯(lián)信息,沒有其他指令與寄存器3相關聯(lián),所以不會發(fā)起通知;
指令op6沒有改變寄存器或游標存儲的關聯(lián)信息,簡單執(zhí)行即可。
需要說明的是,在實際應用中,可以為這些通知可以執(zhí)行的指令設置狀態(tài)位,例如,狀態(tài)位為1表示在通知指令可執(zhí)行的前提下,當指令將被指令時,虛擬機根據(jù)指令的狀態(tài)位為1,執(zhí)行指令。
需要說明的是,圖3中存在著指令op4同時綁定了游標1以及寄存器3的關聯(lián)信息,在實際應用中,只要游標1和寄存器3中的關聯(lián)信息任意一個發(fā)生變化,或者都發(fā)生變化,則當指令op4將被執(zhí)行時,執(zhí)行指令op4。同理,圖3中的指令op5類似,此處不再贅述。
在前面的實施例中說明了跳轉(zhuǎn)指令,下面結(jié)合圖4進行說明:
圖4中,假設指令op6為跳轉(zhuǎn)指令,指令op6根據(jù)寄存器2中的關聯(lián)信息來確定是否跳轉(zhuǎn)到指令op1,從圖4中的依賴關系可以看出,如果指令op2 被跳過沒有執(zhí)行,則指令op4和指令op6也不需要執(zhí)行,但是,當虛擬機執(zhí)行到指令op6時,若確定指令op6不需要執(zhí)行,仍然需要檢查指令op6在最近一次執(zhí)行的時候的跳轉(zhuǎn)位置,如果指令op6最近一次執(zhí)行中跳轉(zhuǎn)到指令op1,則當前仍需要跳轉(zhuǎn)到指令op1,如果指令op6最后一次執(zhí)行中繼續(xù)下一條指令,則虛擬機仍然需要繼續(xù)執(zhí)行下一條指令。
在前面的實施例中說明了第三指令與第三關聯(lián)信息取消綁定,進而與第二關聯(lián)信息進行綁定,實質(zhì)為一種間接綁定,下面結(jié)合圖5進行說明:
圖5中,指令op6沒有綁定寄存器2中的關聯(lián)信息,而是綁定了游標1中的關聯(lián)信息,當指令op2改變游標1中的關聯(lián)信息后,會通知指令op6可以執(zhí)行。
上面論述了本發(fā)明實施例中的指令執(zhí)行方法,下面對本發(fā)明實施例中的虛擬機進行說明:
請參閱圖6,本發(fā)明實施例中虛擬機的一個實施例包括:
確定單元201,用于確定第一指令對應的第一關聯(lián)寄存器,第一指令為虛擬機中循環(huán)體的指令,第一關聯(lián)寄存器中存儲有第一關聯(lián)信息,第一關聯(lián)信息包含位置變化信息、數(shù)值變化信息中至少一種;
綁定單元202,用于對第一指令以及第一關聯(lián)信息進行綁定;
判斷單元203,用于當?shù)谝恢噶顚⒈粓?zhí)行時,判斷第一關聯(lián)信息是否發(fā)生變化;
第一執(zhí)行單元204,用于若判斷單元203判斷第一關聯(lián)信息發(fā)生變化,則執(zhí)行第一指令。
本實施例中,本發(fā)明利用了指令通知機制,即第一指令需要與位置變化信息和/或數(shù)值變化信息進行綁定,在第一指令每次執(zhí)行之前,需要先判斷位置和/或數(shù)值是否發(fā)生變化,只有確定位置和數(shù)值至少一個發(fā)生變化,第一指令才會執(zhí)行,相對于現(xiàn)有技術(shù)中第一指令可能每次都會執(zhí)行的方案,本發(fā)明中第一指令的每次執(zhí)行基于指令通知機制,因此本發(fā)明能夠減少不必要的指令執(zhí)行次數(shù),提高執(zhí)行效率。
可選的,在本發(fā)明的一些實施例中,所述第一關聯(lián)信息包含位置變化信息,則判斷單元203,具體用于根據(jù)位置變化信息判斷第一關聯(lián)寄存器的位置 是否發(fā)生變化;
確定單元201,還用于若判斷單元203判斷第一關聯(lián)寄存器的位置發(fā)生變化,則確定第一關聯(lián)信息發(fā)生變化;或者,
若第一關聯(lián)信息包含數(shù)值變化信息,則判斷單元203,具體用于根據(jù)數(shù)值變化信息判斷第一關聯(lián)寄存器的數(shù)值是否發(fā)生變化;
確定單元201,還用于若判斷單元203判斷第一關聯(lián)寄存器的數(shù)值發(fā)生變化,則確定第一關聯(lián)信息發(fā)生變化;或者,
若第一關聯(lián)信息包含位置變化信息和數(shù)值變化信息,則判斷單元203,具體用于根據(jù)位置變化信息和數(shù)值變化信息判斷第一關聯(lián)寄存器的位置和數(shù)值中的至少一個是否發(fā)生變化;
確定單元201,還用于若判斷單元203判斷第一關聯(lián)寄存器的位置和數(shù)值中的至少一個發(fā)生變化,則確定第一關聯(lián)信息發(fā)生變化。
可選的,在本發(fā)明的一些實施例中,虛擬機還包括:
第四執(zhí)行單元,用于若判斷單元203根據(jù)第一關聯(lián)信息判斷位置和/或數(shù)值未發(fā)生變化,則不執(zhí)行第一指令;
跳轉(zhuǎn)單元,用于若第一指令為跳轉(zhuǎn)指令,則檢測第一指令在之前一次執(zhí)行時跳轉(zhuǎn)的指令位置,將第一指令跳轉(zhuǎn)到指令位置對應的指令,其中,第一指令中存儲有第一指令在之前一次執(zhí)行時跳轉(zhuǎn)的指令位置。
可選的,在本發(fā)明的一些實施例中,虛擬機還包括:
第一處理單元,用于若第一指令將被執(zhí)行的次數(shù)為m,第一指令的執(zhí)行次數(shù)為n,n/m不小于預設閾值,則對第一指令以及第一關聯(lián)信息取消綁定,將第一指令設置為可執(zhí)行指令,并保持第一指令為可執(zhí)行指令的狀態(tài)不變。
可選的,在本發(fā)明的一些實施例中,虛擬機還包括:
第二處理單元,用于若第一指令為整數(shù)相加指令或無條件跳轉(zhuǎn)指令,則將第一指令設置為可執(zhí)行指令,并保持第一指令為可執(zhí)行指令的狀態(tài)不變。
請參閱圖7,本發(fā)明實施例中虛擬機的另一個實施例包括:
確定單元301,用于確定第一指令對應的第一關聯(lián)寄存器,第一指令為虛擬機中循環(huán)體的指令,第一關聯(lián)寄存器中存儲有第一關聯(lián)信息,第一關聯(lián)信息包含位置變化信息、數(shù)值變化信息中至少一種;
綁定單元302,用于對第一指令以及第一關聯(lián)信息進行綁定;
判斷單元303,用于當?shù)谝恢噶顚⒈粓?zhí)行時,判斷第一關聯(lián)信息是否發(fā)生變化;
第一執(zhí)行單元304,用于若判斷單元303判斷第一關聯(lián)信息發(fā)生變化,則執(zhí)行第一指令;
第二執(zhí)行單元305,用于當?shù)诙噶顚⒈粓?zhí)行時,若檢測到第一指令的輸出結(jié)果改變了第二關聯(lián)寄存器的位置和/或數(shù)值,且檢測到第二指令與第二關聯(lián)信息綁定,則執(zhí)行第二指令;
第三執(zhí)行單元306,用于當?shù)谌噶顚⒈粓?zhí)行時,若檢測到第二指令的輸出結(jié)果改變了第三關聯(lián)寄存器的位置和/或數(shù)值,且檢測到第三指令與第三關聯(lián)信息綁定,則對第三指令以及第三關聯(lián)信息取消綁定,且對第三指令以及第二關聯(lián)信息進行綁定,并執(zhí)行第三指令。
本實施例中,本發(fā)明利用了指令通知機制,即第一指令需要與位置變化信息和/或數(shù)值變化信息進行綁定,在第一指令每次執(zhí)行之前,需要先判斷位置和/或數(shù)值是否發(fā)生變化,只有確定位置和數(shù)值至少一個發(fā)生變化,第一指令才會執(zhí)行,相對于現(xiàn)有技術(shù)中第一指令可能每次都會執(zhí)行的方案,本發(fā)明中第一指令的每次執(zhí)行基于指令通知機制,因此本發(fā)明能夠減少不必要的指令執(zhí)行次數(shù),提高執(zhí)行效率。
其次,本發(fā)明考慮了第一指令的輸出結(jié)果可能會改變第二關聯(lián)寄存器的數(shù)值和/或位置,以及為第三指令綁定第二關聯(lián)信息,實現(xiàn)間接綁定,擴展和豐富了本發(fā)明的技術(shù)方案。
為了便于理解,下面以一個實際的應用場景對本發(fā)明實施例中虛擬機中各單元間的交互進行描述:
確定單元301確定虛擬機中循環(huán)體中的每個指令對應的關聯(lián)寄存器,每個關聯(lián)寄存器中存儲有關聯(lián)信息,與關聯(lián)寄存器相關聯(lián)的指令的輸出結(jié)果受到關聯(lián)信息的影響,關聯(lián)信息中包含著位置變化信息和/或數(shù)值變化信息,位置變化信息為游標的位置發(fā)生變化導致的變化信息,數(shù)值變化信息為寄存器的數(shù)值發(fā)生變化導致的變化信息。在確定指令op1對應的寄存器1后,綁定單元302對指令op1以及寄存器1中的第一關聯(lián)信息進行綁定,指令op1與 第一關聯(lián)信息進行綁定,相當于若第一關聯(lián)信息發(fā)生變化,指令op1能夠知道第一關聯(lián)信息發(fā)生變化,指令op1訂閱了第一關聯(lián)信息。在對指令op1以及第一關聯(lián)信息進行綁定后,當指令op1將被執(zhí)行時,判斷單元303根據(jù)第一關聯(lián)信息判斷數(shù)值是否發(fā)生變化,若是,則第一執(zhí)行單元304執(zhí)行指令op1。在執(zhí)行完指令op1后,指令op1的輸出結(jié)果可能會改變寄存器2的數(shù)值,正好指令op2的輸出結(jié)果受到寄存器2的影響,由此,當指令op2將被執(zhí)行時,若第二執(zhí)行單元305檢測到指令op1的輸出結(jié)果改變了寄存器2的數(shù)值,且檢測到指令op2與第二關聯(lián)信息綁定,則執(zhí)行指令op2。當指令op3將被執(zhí)行時,若第三執(zhí)行單元306檢測到指令op2的輸出結(jié)果改變了寄存器3數(shù)值,且檢測到指令op3與第三關聯(lián)信息綁定,則對指令op3以及第三關聯(lián)信息取消綁定,且對指令op3以及第二關聯(lián)信息進行綁定,并執(zhí)行指令op3。
本發(fā)明實施例還提供一種服務器,請參閱圖8,本發(fā)明實施例中服務器的一個實施例包括:
圖8是本發(fā)明實施例提供的一種服務器結(jié)構(gòu)示意圖,該服務器400可因配置或性能不同而產(chǎn)生比較大的差異,可以包括一個或一個以上中央處理器(centralprocessingunits,cpu)401(例如,一個或一個以上處理器),虛擬機402,一個或一個以上存儲應用程序403或數(shù)據(jù)404的存儲介質(zhì)405(例如一個或一個以上海量存儲設備)。其中,存儲介質(zhì)405可以是短暫存儲或持久存儲。存儲在存儲介質(zhì)405的程序可以包括一個或一個以上模塊(圖示沒標出),每個模塊可以包括對交換機中的一系列指令操作。更進一步地,中央處理器401可以設置為與存儲介質(zhì)405通信,在服務器400上執(zhí)行存儲介質(zhì)405中的一系列指令操作。
服務器400還可以包括一個或一個以上電源406,一個或一個以上有線或無線網(wǎng)絡接口407,一個或一個以上輸輸出接口408,和/或,一個或一個以上操作系統(tǒng)409,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。
上述實施例中由虛擬機所執(zhí)行的步驟可以基于該圖8所示的服務器結(jié)構(gòu)。
所屬領域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應 過程,在此不再贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術(shù)人員應當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應技術(shù)方案 的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。