本發(fā)明涉及計(jì)算機(jī)技術(shù),尤其涉及一種虛擬機(jī)指令的解釋執(zhí)行方法和裝置。
背景技術(shù):
計(jì)算機(jī)一般以一條虛擬機(jī)指令為單位對(duì)虛擬機(jī)指令進(jìn)行解釋執(zhí)行,虛擬機(jī)指令的解釋執(zhí)行往往決定了計(jì)算機(jī)系統(tǒng)的啟動(dòng)性能和響應(yīng)速度。因此,對(duì)虛擬機(jī)指令的解釋執(zhí)行方法進(jìn)行深入分析和優(yōu)化,對(duì)提升計(jì)算機(jī)的性能具有重要意義。
圖1所示為現(xiàn)有技術(shù)中虛擬機(jī)指令的解釋執(zhí)行方法流程圖,按照獲取取虛擬機(jī)指令、虛擬機(jī)指令譯碼、虛擬機(jī)指令分派、根據(jù)需要獲取虛擬機(jī)指令的操作數(shù)和執(zhí)行的先后順序?qū)μ摂M機(jī)指令進(jìn)行解釋執(zhí)行,具體為:計(jì)算機(jī)線程啟動(dòng),獲取即將執(zhí)行的虛擬機(jī)指令并對(duì)虛擬機(jī)指令進(jìn)行譯碼;然后根據(jù)譯碼后的虛擬機(jī)指令跳轉(zhuǎn)到該虛擬機(jī)指令對(duì)應(yīng)的解釋器模板的地址,根據(jù)需要從堆?;蚣拇嫫髦蝎@取虛擬機(jī)指令的操作數(shù),并對(duì)該操作數(shù)執(zhí)行該解釋器模板中所規(guī)定的全部語義動(dòng)作;然后判斷計(jì)算機(jī)是否應(yīng)當(dāng)停止解釋執(zhí)行,若是,虛擬機(jī)指令的解釋執(zhí)行線程結(jié)束,若否,循環(huán)執(zhí)行上述過程。
大量研究表明,虛擬機(jī)指令分派,亦即跳轉(zhuǎn)到該虛擬機(jī)指令對(duì)應(yīng)的解釋器模板的地址是虛擬機(jī)指令的解釋執(zhí)行流程中的核心,現(xiàn)有技術(shù)中,虛擬機(jī)指令分派的具體流程圖如2所示:
S101:獲取虛擬機(jī)指令的輸出類型與虛擬機(jī)指令的操作碼;
S102:根據(jù)虛擬機(jī)指令的輸出類型直接確定待查詢的模板表子表的編號(hào);
S103:獲取待查詢的模板表子表的首地址;
S104:將虛擬機(jī)指令的操作碼轉(zhuǎn)換為模板表子表的查詢索引值;
S105:使用索引值查詢模板表子表,獲取該虛擬機(jī)指令對(duì)應(yīng)的解釋器模板地址;
S106:跳轉(zhuǎn)到該解釋器模板地址。
其中,在S103中,通常采用直接加載一個(gè)地址常量到通用寄存器的方法,但是通常需要多條機(jī)器指令才能完成加載地址常量到寄存器的過程,使得計(jì)算機(jī)在執(zhí)行虛擬機(jī)指令分派時(shí)產(chǎn)生大量開銷,從而使得虛擬機(jī)指令的解釋執(zhí)行效率過低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種虛擬機(jī)指令的解釋執(zhí)行方法和裝置,以克服現(xiàn)有技術(shù)中計(jì)算機(jī)執(zhí)行指令分派時(shí)產(chǎn)生大量開銷,從而導(dǎo)致虛擬機(jī)指令的解釋執(zhí)行效率過低的問題。
本發(fā)明第一方面提供一種虛擬機(jī)指令的解釋執(zhí)行方法,計(jì)算機(jī)依次獲取虛擬機(jī)指令,針對(duì)每條所述虛擬機(jī)指令,該方法包括:
所述計(jì)算機(jī)根據(jù)所述虛擬機(jī)指令的輸出類型確定待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量,所述基準(zhǔn)模板表子表為所述計(jì)算機(jī)中保存的模板表子表中的一個(gè);
所述計(jì)算機(jī)根據(jù)所述偏移量和基準(zhǔn)模板表子表寄存器的值確定所述待查詢的模板表子表的首地址,所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表寄存器所保存的基準(zhǔn)模板表子表的首地址;
所述計(jì)算機(jī)根據(jù)所述待查詢的模板表子表的首地址確定解釋器模板。
結(jié)合第一方面,在第一方面第一種可能的實(shí)現(xiàn)方式中,所述計(jì)算機(jī)依次獲取虛擬機(jī)指令之前,還包括:
所述計(jì)算機(jī)加載基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中,以使所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表的首地址。
結(jié)合第一方面第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,所述計(jì)算機(jī)根據(jù)所述偏移量和基準(zhǔn)模板表子表寄存器的值確定所述待查詢的模板表子表的首地址,包括:
所述計(jì)算機(jī)根據(jù)所述偏移量的值,確定所述待查詢的模版表子表的首地址與所述偏移量和所述基準(zhǔn)模板表子表寄存器的值之間的關(guān)系。
結(jié)合第一方面第二種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述計(jì)算機(jī)根據(jù)所述偏移量的值,確定所述待查詢的模版表子表的首地址與所述偏移量和所述基準(zhǔn)模板表子表寄存器的值之間的關(guān)系,包括:
若所述偏移量為零,所述待查詢的模板表子表的首地址為所述基準(zhǔn)模板表子表寄存器中加載的所述基準(zhǔn)模板表子表的首地址;
若所述偏移量不為零,所述待查詢的模板表子表的首地址為第一模板表子表的首地址,所述第一模板表子表的首地址為所述基準(zhǔn)模板表子表寄存器的值與所述偏移量之和。
結(jié)合第一方面第一種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,所述計(jì)算機(jī)加載所述基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中之前,還包括:
保存所述基準(zhǔn)模板表子表寄存器的原始值;
所述計(jì)算機(jī)根據(jù)所述待查詢的模板表子表的首地址確定解釋器模板之后,還包括:
若所有虛擬機(jī)指令執(zhí)行結(jié)束,則恢復(fù)所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表寄存器的原始值。
本發(fā)明第二方面提供一種虛擬機(jī)指令的解釋執(zhí)行裝置,計(jì)算機(jī)依次獲取虛擬機(jī)指令,針對(duì)每條所述虛擬機(jī)指令,該裝置包括:
第一確定模塊,用于所述計(jì)算機(jī)根據(jù)所述虛擬機(jī)指令的輸出類型確定待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量,所述基準(zhǔn)模板表子表為所述計(jì)算機(jī)中保存的模板表子表中一個(gè);
第二確定模塊,用于所述計(jì)算機(jī)根據(jù)所述偏移量和基準(zhǔn)模板表子表寄存器的值確定所述待查詢的模板表子表的首地址,所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表寄存器所保存的基準(zhǔn)模板表子表的首地址;
第三確定模塊,用于所述計(jì)算機(jī)根據(jù)所述待查詢的模板表子表的首地址確定解釋器模板。
結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,還包括:加載模塊,用于在依次獲取虛擬機(jī)指令之前,加載基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中,以使所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表的首地址。
結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二方面的第二種可能的實(shí)現(xiàn)方式中,所述第二確定模塊具體用于:
根據(jù)所述偏移量的值,確定所述待查詢的模版表子表的首地址與所述偏移量和所述基準(zhǔn)模板表子表寄存器的值之間的關(guān)系。
結(jié)合第二方面的第二種可能的實(shí)現(xiàn)方式,在第二方面的第三種可能的實(shí)現(xiàn)方式中,所述第二確定模塊具體用于:
若所述偏移量為零,所述待查詢的模板表子表的首地址為所述基準(zhǔn)模板表子表寄存器中加載的所述基準(zhǔn)模板表子表的首地址;
若所述偏移量不為零,所述待查詢的模板表子表的首地址為第一模板表子表的首地址,所述第一模板表子表的首地址為所述基準(zhǔn)模板表子表寄存器的值與所述偏移量之和。
結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式中,還包括:保存模塊和恢復(fù)模塊,
所述保存模塊用于在加載所述基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中之前,保存所述基準(zhǔn)模板表子表寄存器的原始值;
所述恢復(fù)模塊用于在所述第三確定模塊根據(jù)所述待查詢的模板表子表的首地址確定解釋器模板之后,若所有虛擬機(jī)指令執(zhí)行結(jié)束,則恢復(fù)所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表寄存器的原始值。
本發(fā)明中,首先,計(jì)算機(jī)根據(jù)虛擬機(jī)指令的輸出類型確定待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量,基準(zhǔn)模板表子表為計(jì)算機(jī)中保存的模板表子表中一個(gè),然后,計(jì)算機(jī)根據(jù)偏移量和基準(zhǔn)模板表子表寄存器的值確定待查詢的模板表子表的首地址,基準(zhǔn)模板表子表寄存器的值為基準(zhǔn)模板表子表寄存器所保存的基準(zhǔn)模板表子表的首地址,最后,計(jì)算機(jī)根據(jù)待查詢的模板表子表的首地址確定解釋器模板。其中,根據(jù)待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量以及基準(zhǔn)模板表子表寄存器的值確定待查詢的模板表子表首地址,從而有效提高了計(jì)算機(jī)執(zhí)行虛擬機(jī)指令分派時(shí)的效率,進(jìn)而提高了虛擬機(jī)指令的解釋執(zhí)行過程的效率。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí) 施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1所示為現(xiàn)有技術(shù)中虛擬機(jī)指令的解釋執(zhí)行方法流程圖;
圖2所示為虛擬機(jī)指令分派的具體流程圖;
圖3所示為解釋器模板表的組成結(jié)構(gòu);
圖4所示為本發(fā)明實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行方法的流程圖;
圖5所示為本發(fā)明實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行方法的整體流程圖;
圖6所示為本發(fā)明實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行裝置的結(jié)構(gòu)示意圖;
圖7所示為本發(fā)明又一實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行裝置的結(jié)構(gòu)示意圖;
圖8所示為本發(fā)明再一實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(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ù)的范圍。
虛擬機(jī)指令的解釋執(zhí)行的方法是由一系列虛擬機(jī)指令構(gòu)成的,例如整型加法指令(英文:iadd),整型減法指令(英文:isub),單精度浮點(diǎn)型加法指令(英文:fadd),雙精度浮點(diǎn)型加法指令(英文:dadd)等。
每條虛擬機(jī)指令均對(duì)應(yīng)一個(gè)解釋器模板,計(jì)算機(jī)對(duì)某條虛擬機(jī)指令進(jìn)行解釋執(zhí)行時(shí),需要跳轉(zhuǎn)到該虛擬機(jī)指令對(duì)應(yīng)的解釋器模板,隨后執(zhí)行解釋器模板中規(guī)定的語義動(dòng)作。當(dāng)計(jì)算機(jī)執(zhí)行完一個(gè)解釋器模板中規(guī)定的語義動(dòng)作后,需要跳轉(zhuǎn)到下一條虛擬機(jī)指令所對(duì)應(yīng)的解釋器模板繼續(xù)執(zhí)行。這種計(jì)算機(jī)由一個(gè)解釋器模板跳轉(zhuǎn)到另一個(gè)解釋器模板的過程,稱為虛擬機(jī)指令分派。 而計(jì)算機(jī)在跳轉(zhuǎn)到某個(gè)解釋器模板之前,需要事先獲得該解釋器模板的地址。
計(jì)算機(jī)中所有解釋器模板的地址均存放在解釋器模板表中。圖3所示為解釋器模板表的組成結(jié)構(gòu)。根據(jù)虛擬機(jī)指令的輸出類型,解釋器模板表被劃分為若干個(gè)大小相等的模板表子表。一般地,每種虛擬機(jī)指令的輸出類型對(duì)應(yīng)一個(gè)模板表子表。其中,虛擬機(jī)指令的輸出類型,是指虛擬機(jī)指令執(zhí)行結(jié)果的類型。例如,iadd虛擬機(jī)指令將兩個(gè)整型數(shù)相加,執(zhí)行的結(jié)果為一個(gè)整型數(shù),因此iadd虛擬機(jī)指令的輸出類型為整型,同理,isub虛擬機(jī)指令的輸出類型也為整型,而fadd虛擬機(jī)指令的輸出類型為單精度浮點(diǎn)型,dadd虛擬機(jī)指令的輸出類型為雙精度浮點(diǎn)型。在具體的執(zhí)行過程中,計(jì)算機(jī)在獲取某條虛擬機(jī)指令對(duì)應(yīng)的解釋器模板時(shí),首先會(huì)根據(jù)該條虛擬機(jī)指令的輸出類型獲取與此輸出類型對(duì)應(yīng)的模板表子表的首地址,然后再根據(jù)該條虛擬機(jī)指令的操作碼從對(duì)應(yīng)的模板表子表中獲得最終的解釋器模板地址,并跳轉(zhuǎn)至該解釋器模板地址,最終根據(jù)解釋器模板地址確定該條虛擬機(jī)指令對(duì)應(yīng)的解釋器模板。
現(xiàn)有技術(shù)在執(zhí)行虛擬機(jī)指令分派中的獲取模板表子表的首地址時(shí),采用直接加載一個(gè)地址常量到通用寄存器的方法。為了完成上述目標(biāo),計(jì)算機(jī)需要額外執(zhí)行一到多條機(jī)器指令。特別地,該方法對(duì)于64位的內(nèi)部無互鎖流水線微處理器(Microprocessor without Interlocked Pipeline Stages,簡稱為:MIPS)計(jì)算機(jī)系統(tǒng),總共需要執(zhí)行6條機(jī)器指令才能完成上述操作。從而現(xiàn)有技術(shù)在進(jìn)行虛擬機(jī)指令分派時(shí)效率不高。
本發(fā)明通過指定一個(gè)寄存器指向一個(gè)模板表子表的首地址;從而使得獲取模板表子表的首地址時(shí),計(jì)算機(jī)僅需執(zhí)行0條或1條指令,當(dāng)所選擇的模板表子表為訪問最頻繁的模板表子表時(shí),僅需執(zhí)行0條機(jī)器指令,從而提高了虛擬機(jī)指令分派效率,進(jìn)而提高了虛擬機(jī)指令的解釋執(zhí)行過程的效率。
圖4所示為本發(fā)明實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行方法的流程圖,本實(shí)施例的方法應(yīng)用于計(jì)算機(jī)依次獲取虛擬機(jī)指令,針對(duì)每條虛擬機(jī)指令進(jìn)行處理,如圖4所示,本實(shí)施例的方法可以包括:
步驟201、計(jì)算機(jī)根據(jù)虛擬機(jī)指令的輸出類型確定待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量,基準(zhǔn)模板表子表為計(jì)算機(jī)中保存的模板表 子表中一個(gè)。
具體的,為了有效提高計(jì)算機(jī)執(zhí)行虛擬機(jī)指令分派的效率,發(fā)明人在研究中發(fā)現(xiàn)可以提前選擇一個(gè)模板表子表和一個(gè)寄存器,并把該模板表子表保存至該寄存器中,從而可以有效提高計(jì)算機(jī)執(zhí)行虛擬機(jī)指令分派的效率。
其中,所選擇的模板表子表稱之為基準(zhǔn)模板表子表,并且優(yōu)選的,該基準(zhǔn)模板表子表為計(jì)算機(jī)中保存的訪問最頻繁的模板表子表,亦即可以為整型模板表子表。其中,基準(zhǔn)模板表子表寄存器可以在計(jì)算機(jī)中可供使用的寄存器中選擇一個(gè)。
由于計(jì)算機(jī)對(duì)虛擬機(jī)指令執(zhí)行解釋執(zhí)行過程與計(jì)算機(jī)對(duì)虛擬機(jī)指令執(zhí)行編譯過程是混合執(zhí)行的,例如,在第1秒~第6秒計(jì)算機(jī)對(duì)虛擬機(jī)指令執(zhí)行解釋執(zhí)行過程,第7秒~第10秒計(jì)算機(jī)對(duì)虛擬機(jī)指令執(zhí)行編譯過程,第11秒~第19秒計(jì)算機(jī)對(duì)虛擬機(jī)指令執(zhí)行解釋執(zhí)行過程,…。
在計(jì)算機(jī)對(duì)虛擬機(jī)指令執(zhí)行解釋執(zhí)行過程的連續(xù)的一個(gè)執(zhí)行周期內(nèi),只需在執(zhí)行第一條虛擬機(jī)指令前加載一次基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中,在該周期內(nèi)可能對(duì)上億條虛擬機(jī)指令執(zhí)行解釋執(zhí)行過程。
因此,在一個(gè)執(zhí)行周期中,計(jì)算機(jī)首先需要加載基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中,以使基準(zhǔn)模板表子表寄存器的值為基準(zhǔn)模板表子表的首地址。
步驟202、計(jì)算機(jī)根據(jù)偏移量和基準(zhǔn)模板表子表寄存器的值確定待查詢的模板表子表的首地址,基準(zhǔn)模板表子表寄存器的值為基準(zhǔn)模板表子表寄存器所保存的基準(zhǔn)模板表子表的首地址。
進(jìn)一步的,計(jì)算機(jī)會(huì)根據(jù)步驟201中確定的偏移量的值,確定待查詢的模版表子表的首地址與第一值之間的關(guān)系,其中,第一值為偏移量和基準(zhǔn)模板表子表寄存器的值,也即,為偏移量的值和基準(zhǔn)模板表子表寄存器的值之和對(duì)應(yīng)的值。
也即,待查模板表子表的首地址=基準(zhǔn)模板表子表寄存器的值+偏移量。
可選的,在本發(fā)明一實(shí)施例中,假設(shè),一個(gè)模板表子表的大小為S,基準(zhǔn)模板表子表的編號(hào)為k,待查詢的模板表子表的編號(hào)為i,則偏移量offset=(i-k)×S。
若偏移量為零,待查詢的模板表子表的首地址為基準(zhǔn)模板表子表寄存器 中加載的基準(zhǔn)模板表子表的首地址;
若偏移量不為零,待查詢的模板表子表的首地址為第一模板表子表的首地址,第一模板表子表的首地址為基準(zhǔn)模板表子表寄存器的值與偏移量之和。
本發(fā)明的的上述方案使得獲取模板表子表首地址時(shí),計(jì)算機(jī)僅需執(zhí)行0條或1條整數(shù)加法指令,且絕大多數(shù)情況下執(zhí)行0條機(jī)器指令(這是因?yàn)檫x擇訪問最頻繁的模板表子表為基準(zhǔn)模板表子表,步驟204中的offset在絕大多數(shù)情況下為0)。
步驟203、計(jì)算機(jī)根據(jù)待查詢的模板表子表的首地址確定解釋器模板。
當(dāng)確定了待查詢的模板表子表的首地址后,計(jì)算機(jī)還需根據(jù)該首地址確定解釋器模板,具體為:
根據(jù)待查詢的模板表子表的首地址確定待查詢的模板表子表,然后,獲取虛擬機(jī)指令的操作碼,并將獲取的虛擬機(jī)指令的操作碼轉(zhuǎn)換為模板表子表的查詢索引值,轉(zhuǎn)換方法為:
然后,使用索引值查詢待查詢的模板表子表,獲取虛擬機(jī)指令對(duì)應(yīng)的解釋器模板地址。
當(dāng)確定了解釋器模板地址后,計(jì)算機(jī)會(huì)跳轉(zhuǎn)至該解釋器模板地址,然后根據(jù)解釋器模板地址確定解釋器模板。
進(jìn)一步的,本實(shí)施例的方法還可以包括:
計(jì)算機(jī)執(zhí)行該解釋器模板中規(guī)定的語義動(dòng)作。
若虛擬機(jī)指令中包括操作數(shù),則需要首先獲取虛擬機(jī)指令中的操作數(shù),并對(duì)操作數(shù)執(zhí)行該解釋器模板中規(guī)定的語義動(dòng)作。
在本發(fā)明的又一實(shí)施例中,為了使得在對(duì)所有的虛擬機(jī)指令執(zhí)行完操作后,所選擇的基準(zhǔn)模板表子表寄存器的值可以恢復(fù)為原始的值,以供后續(xù)其他應(yīng)用的使用,還需首先保存基準(zhǔn)模板表子表寄存器的原始值,然后在所有虛擬機(jī)指令均解釋執(zhí)行完畢后,則恢復(fù)基準(zhǔn)模板表子表寄存器的值為基準(zhǔn)模板表子表寄存器的原始值。
本發(fā)明實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行方法,包括:首先,計(jì)算機(jī)根據(jù)虛擬機(jī)指令的輸出類型確定待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表 的偏移量,基準(zhǔn)模板表子表為計(jì)算機(jī)中保存的模板表子表中一個(gè),然后,計(jì)算機(jī)根據(jù)偏移量和基準(zhǔn)模板表子表寄存器的值確定待查詢的模板表子表的首地址,基準(zhǔn)模板表子表寄存器的值為基準(zhǔn)模板表子表寄存器所保存的基準(zhǔn)模板表子表的首地址,最后,計(jì)算機(jī)根據(jù)待查詢的模板表子表的首地址確定解釋器模板。其中,根據(jù)待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量以及基準(zhǔn)模板表子表寄存器的值確定待查詢的模板表子表首地址,從而有效提高了計(jì)算機(jī)執(zhí)行虛擬機(jī)指令分派時(shí)的效率,進(jìn)而提高了虛擬機(jī)指令的解釋執(zhí)行過程的效率。
圖5所示為本發(fā)明實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行方法的整體流程圖,本實(shí)施例應(yīng)用于在執(zhí)行周期內(nèi)對(duì)虛擬機(jī)指令執(zhí)行解釋執(zhí)行過程,如圖5所示,該方法包括:
步驟301:計(jì)算機(jī)線程啟動(dòng)。
步驟302:保存基準(zhǔn)模板表子表寄存器的值。
步驟303:加載基準(zhǔn)模板表子表首地址到基準(zhǔn)模板表子表寄存器中。
計(jì)算機(jī)線程循環(huán)執(zhí)行以下步驟:
步驟304:獲取即將執(zhí)行的虛擬機(jī)指令。
步驟305:虛擬機(jī)指令譯碼。
步驟306:虛擬機(jī)指令分派,步驟如下:
步驟3061:獲取虛擬機(jī)指令的輸出類型與該虛擬機(jī)指令的操作碼。
步驟3062:根據(jù)虛擬機(jī)指令的輸出類型計(jì)算待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量offset;
設(shè)一個(gè)模板表子表的大小為S,基準(zhǔn)模板表子表的編號(hào)為k,待查詢的模板表子表的編號(hào)為i,則偏移量offset=(i-k)×S。
步驟3063:計(jì)算待查詢的模板表子表的首地址,步驟如下:
步驟30631:判斷偏移量offset是否等于0,若是,執(zhí)行步驟30632,若否,執(zhí)行步驟30633.
步驟30632:若offset等于0,則直接返回基準(zhǔn)模板表子表寄存器的值作為待查詢的模板表子表的首地址,此時(shí),計(jì)算機(jī)執(zhí)行0條機(jī)器指令。
步驟30633:否則,返回基準(zhǔn)模板表子表寄存器的值與偏移量offset的和作為待查詢的模板表子表的首地址,此時(shí),計(jì)算機(jī)僅執(zhí)行1條整數(shù)加法指令。
步驟3064:將虛擬機(jī)指令的操作碼轉(zhuǎn)換為模板表子表的查詢索引值,轉(zhuǎn)換方法為:
步驟3065:使用查詢索引值查詢待查詢的模板表子表,獲取該虛擬機(jī)指令對(duì)應(yīng)的解釋器模板地址。
步驟3066:跳轉(zhuǎn)到該解釋器模板地址。
步驟307:根據(jù)需要獲取虛擬機(jī)指令中的操作數(shù)。
若該虛擬機(jī)指令涉及操作數(shù),則獲取虛擬機(jī)指令中的操作數(shù),若無該虛擬機(jī)指令中無操作數(shù),則直接執(zhí)行步驟308。
步驟308:執(zhí)行解釋器模板地址對(duì)應(yīng)的解釋器模板中規(guī)定的語義動(dòng)作;
步驟309:判斷虛擬機(jī)指令的解釋執(zhí)行過程是否應(yīng)當(dāng)停止:
若是,則跳轉(zhuǎn)到步驟310;
否則跳轉(zhuǎn)到步驟304;
步驟310:恢復(fù)基準(zhǔn)模板表子表寄存器的值。
步驟311:計(jì)算機(jī)線程結(jié)束。
本實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行方法,包括:首先計(jì)算機(jī)線程啟動(dòng),并加載基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中,以使基準(zhǔn)模板表子表寄存器的值為基準(zhǔn)模板表子表的首地址,所述基準(zhǔn)模板表子表為計(jì)算機(jī)中保存的模板表子表中一個(gè),所述基準(zhǔn)模板表子表寄存器為所述計(jì)算機(jī)中的寄存器中的一個(gè);然后依次獲取虛擬機(jī)指令,并對(duì)每條虛擬機(jī)指令執(zhí)行如下操作:首先根據(jù)虛擬機(jī)指令的輸出類型確定待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量;然后根據(jù)偏移量和基準(zhǔn)模板表子表寄存器的值確定待查詢的模板表子表的首地址;進(jìn)而根據(jù)待查詢的模板表子表的首地址和虛擬機(jī)指令的操作碼確定虛擬機(jī)指令對(duì)應(yīng)的解釋器模板地址并跳轉(zhuǎn)至所述解釋器模板地址;隨后,根據(jù)需要獲取操作數(shù);最后執(zhí)行解釋器模板地址對(duì)應(yīng)的解釋器模板中的規(guī)定的語義動(dòng)作,其中,通過在計(jì)算機(jī)線程啟動(dòng)后,首先加載基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器,以使在確定虛擬機(jī)指令對(duì)應(yīng)的模板表子表的首地址時(shí),可以直接根據(jù)此基準(zhǔn)模板表子表寄存器獲知,從而有效提高了計(jì)算機(jī)執(zhí)行虛擬機(jī)指令分派時(shí)的效率,進(jìn)而提高了 虛擬機(jī)指令的解釋執(zhí)行過程的效率。
圖6所示為本發(fā)明實(shí)施例提供的虛擬機(jī)指令的解釋執(zhí)行裝置的結(jié)構(gòu)示意圖,計(jì)算機(jī)依次獲取虛擬機(jī)指令,針對(duì)每條所述虛擬機(jī)指令,如圖6所示,該虛擬機(jī)指令的解釋執(zhí)行裝置包括:
第一確定模塊401,用于所述計(jì)算機(jī)根據(jù)所述虛擬機(jī)指令的輸出類型確定待查詢的模板表子表相對(duì)于基準(zhǔn)模板表子表的偏移量,所述基準(zhǔn)模板表子表為所述計(jì)算機(jī)中保存的模板表子表中一個(gè);
第二確定模塊402,用于所述計(jì)算機(jī)根據(jù)所述偏移量和基準(zhǔn)模板表子表寄存器的值確定所述待查詢的模板表子表的首地址,所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表寄存器所保存的基準(zhǔn)模板表子表的首地址;
第三確定模塊403,用于所述計(jì)算機(jī)根據(jù)所述待查詢的模板表子表的首地址確定解釋器模板。
進(jìn)一步的,如圖7所示,上述虛擬機(jī)指令的解釋執(zhí)行裝置還包括:加載模塊404,用于在依次獲取虛擬機(jī)指令之前,加載基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中,以使所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表的首地址。
可選的,所述第二確定模塊402具體用于:
根據(jù)所述偏移量的值,確定所述待查詢的模版表子表的首地址與所述偏移量和所述基準(zhǔn)模板表子表寄存器的值之間的關(guān)系。
可選的,所述第二確定模塊402具體用于:
若所述偏移量為零,所述待查詢的模板表子表的首地址為所述基準(zhǔn)模板表子表寄存器中加載的所述基準(zhǔn)模板表子表的首地址;
若所述偏移量不為零,所述待查詢的模板表子表的首地址為第一模板表子表的首地址,所述第一模板表子表的首地址為所述基準(zhǔn)模板表子表寄存器的值與所述偏移量之和。
進(jìn)一步的,如圖8所示,上述虛擬機(jī)指令的解釋執(zhí)行裝置還包括:保存模塊405和恢復(fù)模塊406,
所述保存模塊405用于在加載所述基準(zhǔn)模板表子表的首地址至基準(zhǔn)模板表子表寄存器中之前,保存所述基準(zhǔn)模板表子表寄存器的原始值;
所述恢復(fù)模塊406用于在所述第三確定模塊403根據(jù)所述待查詢的模板 表子表的首地址確定解釋器模板之后,若所有虛擬機(jī)指令執(zhí)行結(jié)束,則恢復(fù)所述基準(zhǔn)模板表子表寄存器的值為所述基準(zhǔn)模板表子表寄存器的原始值。
本實(shí)施例的裝置,可以用于執(zhí)行圖4所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:只讀存儲(chǔ)記憶體(Read-Only Memory,ROM)、隨機(jī)存儲(chǔ)記憶體(Random Access Memory,RAM)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。