專利名稱:一種程序執(zhí)行方法、程序管理器和虛擬機(jī)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,更具體的說(shuō)是涉及一種程序執(zhí)行方法、程序管理器和虛擬機(jī)。
背景技術(shù):
X86架構(gòu)和ARM架構(gòu)是現(xiàn)有的兩種基于不同類型的處理器而形成的計(jì)算機(jī)硬件架構(gòu),由于計(jì)算機(jī)硬件架構(gòu)不同,在軟件執(zhí)行過程中其可調(diào)用的指令集也不同,因此通常情況下在一個(gè)硬件架構(gòu)上并不能運(yùn)行另一個(gè)硬件架構(gòu)的程序。但是隨著計(jì)算機(jī)技術(shù)的發(fā)展,由于基于不同硬件架構(gòu)的指令集而編譯的程序各有自己的優(yōu)勢(shì),因此在一個(gè)硬件架構(gòu)中常常有運(yùn)行基于另一個(gè)硬件架構(gòu)的程序的需求,例如基于ARM架構(gòu)編譯的游戲程序,需要在X86架構(gòu)上進(jìn)行調(diào)試運(yùn)行等?,F(xiàn)有的程序執(zhí)行方法通常是通過計(jì)算機(jī)模擬器來(lái)執(zhí)行,以X86架構(gòu)上運(yùn)行基于ARM架構(gòu)的ARM程序?yàn)槔?,?dāng)需要執(zhí)行ARM程序時(shí)啟動(dòng)模擬器,模擬器執(zhí)行所述ARM程序,但是由于ARM程序?qū)嶋H還是運(yùn)行在X86架構(gòu)上,其需要通過物理的寄存器以及處理器進(jìn)行數(shù)據(jù)傳輸和指令處理,因此執(zhí)行所述ARM程序時(shí),需要將ARM程序中的ARM指令翻譯成基于X86架構(gòu)的X86指令后才能執(zhí)行。由以上過程可以看出,在X86架構(gòu)中執(zhí)行ARM程序時(shí),需要進(jìn)行指令的翻譯,而通常情況下為了滿足程序的通用性,一個(gè)ARM指令會(huì)被翻譯成多個(gè)X86指令,使得指令增多,因而就會(huì)降低程序的執(zhí)行速率。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種程序執(zhí)行方法、程序管理器和虛擬機(jī),用以解決現(xiàn)有的程序執(zhí)行速率較低的技術(shù)問題。為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:一種程序執(zhí)行方法,應(yīng)用于運(yùn)行在第一硬件架構(gòu)中的程序管理器,所述程序管理器是基于第二硬件架構(gòu)所創(chuàng)建的,所述方法包括:所述程序管理器接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第
二程序;判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù);如果是,則觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。優(yōu)選地,當(dāng)所述第二程序調(diào)用的函數(shù)不是第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)時(shí),所述方法還包括:將所述第二程序中的第二指令以及所述調(diào)用函數(shù)翻譯為所述基于第一硬件架構(gòu)的第一指令和第一函數(shù),并觸發(fā)所述第一硬件架構(gòu)在庫(kù)文件中調(diào)用該第一函數(shù),執(zhí)行所述
第一指令。
優(yōu)選地,所述獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序具體為:獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序,并確定所述第二程序中的指令及其調(diào)用的函數(shù)。優(yōu)選地于,所述第一硬件架構(gòu)為X86平臺(tái),所述第二硬件架構(gòu)為ARM平臺(tái)。一種程序執(zhí)行方法,應(yīng)用于運(yùn)行在第一硬件架構(gòu)中,且具有第二操作系統(tǒng)的虛擬機(jī)中,所述虛擬機(jī)是基于第二硬件架構(gòu)所創(chuàng)建的,所述方法包括:所述虛擬機(jī)接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序;判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù);如果是,則觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。一種程序管理器,運(yùn)行在第一硬件架構(gòu)中,且基于第二硬件架構(gòu)所創(chuàng)建的,包括:第一獲取模塊,用于接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序。第一判斷模塊,用于判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)。第一觸發(fā)模塊,用于當(dāng)所述判斷模塊判斷結(jié)果為是時(shí),觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。優(yōu)選地,所述裝置還包括:第一翻譯模塊,用于當(dāng)所述判斷模塊為否時(shí),將所述第二程序中的第二指令以及所述調(diào)用函數(shù)翻譯為所述基于第一硬件架構(gòu)的第一指令和第一函數(shù),并觸發(fā)所述第一硬件架構(gòu)按照所述第一函數(shù)執(zhí)行所述第一指令。優(yōu)選地,所述第一獲取模塊具體用于獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序,并確定所述第二程序中的第二指令及其調(diào)用的函數(shù)。優(yōu)選地,所述第一硬件架構(gòu)為X86平臺(tái),所述第二硬件架構(gòu)為ARM平臺(tái)。一種虛擬機(jī),運(yùn)行在第一硬件架構(gòu)中,具有第二操作系統(tǒng),且基于第二硬件架構(gòu)所創(chuàng)建的,包括:第二獲取模塊,用于接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序;第二判斷模塊,用于判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù);第二觸發(fā)模塊,用于當(dāng)所述判斷模塊判斷結(jié)果為是時(shí),觸發(fā)所述第一硬件架構(gòu),由所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令經(jīng)由上述的技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本發(fā)明提供了一種程序執(zhí)行方法、程序管理器和虛擬機(jī),在接收到程序執(zhí)行請(qǐng)求時(shí),獲取基于第二硬件架構(gòu)的第二程序,當(dāng)判斷出該第二程序的調(diào)用函數(shù)即為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),則觸發(fā)第一硬件架構(gòu)從自身庫(kù)文件中確定該預(yù)定函數(shù),并按照該預(yù)定函數(shù)執(zhí)行所述第二程序的指令,因此減少了翻譯步驟,減少了將一條第二程序的指令翻譯為多條第一指令的操作,因此也就提高了程序執(zhí)行效率。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。圖1為本發(fā)明一種程序執(zhí)行方法實(shí)施例1的流程圖;圖2為本發(fā)明一種程序執(zhí)行方法實(shí)施例2的流程圖;圖3為本發(fā)明一種程序管理器實(shí)施例1的結(jié)構(gòu)示意圖;圖4為本發(fā)明一種程序管理器實(shí)施例2的結(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ù)的范圍。本發(fā)明實(shí)施例公開了一種本發(fā)明提供了一種程序執(zhí)行方法、程序管理器和虛擬機(jī),在接收到程序執(zhí)行請(qǐng)求時(shí),獲取基于第二硬件架構(gòu)的第二程序,當(dāng)判斷出該第二程序的調(diào)用函數(shù)即為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),則觸發(fā)第一硬件架構(gòu)從自身庫(kù)文件中確定該預(yù)定函數(shù),并按照該預(yù)定函數(shù)執(zhí)行所述第二程序的指令,因此減少了翻譯步驟,減少了將一條第二程序的指令翻譯為多條第一指令的操作,因此也就提高了程序執(zhí)行效率。參見圖1,示出了本發(fā)明一種程序執(zhí)行方法實(shí)施例1的流程圖,該方法應(yīng)用于運(yùn)行在第一硬件架構(gòu)中的程序管理器中,所述程序管理器是基于第二硬件架構(gòu)所創(chuàng)建的,該方法可以包括以下幾個(gè)步驟:步驟101:所述程序管理器接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序。本實(shí)施例中,硬件架構(gòu)是指基于處理器以及其他的計(jì)算機(jī)硬件而形成的程序執(zhí)行處理單元,程序的運(yùn)行需要建立在硬件結(jié)構(gòu)的基礎(chǔ)之上。不同的計(jì)硬件架構(gòu),其指令集也不相同。例如X86架構(gòu)屬于CISC (Complex InstructionSet Computer,復(fù)雜指令集計(jì)算機(jī))架構(gòu),ARM架構(gòu)是屬于RISC (reducedinstruction set computer,精簡(jiǎn)指令集計(jì)算機(jī))架構(gòu),由于不同的硬件指令集不同,基于不同硬件架構(gòu)編譯的程序也不相同。所述的程序管理器可以是指運(yùn)行在第一硬件架構(gòu)上的軟件程序,其可以模擬第二硬件架構(gòu)的處理器的功能和指令系統(tǒng),使第一硬件架構(gòu)能夠運(yùn)行基于第二硬件架構(gòu)的軟件程序,因此該程序管理器是基于第二硬件架構(gòu)所創(chuàng)建的。在實(shí)際應(yīng)用中,所述的程序管理器例如可以是指計(jì)算機(jī)架構(gòu)模擬器。當(dāng)需要在第一硬件架構(gòu)上運(yùn)行基于第二硬件架構(gòu)的第二程序時(shí),也即基于第二硬件架構(gòu)編譯的第二程序,例如一些游戲程序、應(yīng)用程序等,需要觸發(fā)程序管理器運(yùn)行,由程序管理器對(duì)所述第二程序進(jìn)行處理以便于其能夠在第一硬件架構(gòu)上執(zhí)行。其中,所述程序管理器獲取所述第二程序后,需要確定所述第二程序中的指令以及其調(diào)用的函數(shù)。程序是由指令組成的,程序執(zhí)行過程即是執(zhí)行指令的過程。由于每一個(gè)可執(zhí)行的程序都會(huì)有依賴的庫(kù)文件,包含由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù),也即程序執(zhí)行過程中需要依賴庫(kù)函數(shù),例如用于進(jìn)行數(shù)據(jù)運(yùn)算的加法函數(shù)、減法函數(shù)等。某些指令執(zhí)行過程中需要調(diào)用相應(yīng)的函數(shù)來(lái)進(jìn)行數(shù)據(jù)處理。由于所述第二程序是基于第二硬件架構(gòu)而編譯的,因此其調(diào)用的庫(kù)文件中的函數(shù)也是基于第二硬件架構(gòu)的函數(shù)。步驟102:判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),如果是,則進(jìn)入步驟103,如果否,則進(jìn)入步驟104。函數(shù)雖然也是基于不同硬件架構(gòu)所創(chuàng)建的,但是不同的硬件架構(gòu)中有些函數(shù)所實(shí)現(xiàn)的功能是相同的,因此可以基于不同硬件架構(gòu)的程序的指令要求進(jìn)行相同的數(shù)據(jù)處理過程,例如一些用于數(shù)學(xué)運(yùn)算的數(shù)學(xué)庫(kù)函數(shù)。因此本實(shí)施例中首先判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即是判斷第二程序調(diào)用的函數(shù)是否與第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)相同。所述預(yù)定函數(shù)是分別在第一程序和第二程序執(zhí)行過程中,可以實(shí)現(xiàn)相同功能的庫(kù)函數(shù),例如實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的庫(kù)函數(shù)。步驟103:觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。當(dāng)判斷出第二程序調(diào)用的函數(shù)為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即是說(shuō)第二程序調(diào)用的函數(shù)與第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)可實(shí)現(xiàn)的功能相同。則可以直接觸發(fā)第一硬件架構(gòu)從庫(kù)文件中確定該預(yù)定函數(shù),按照所述預(yù)定函數(shù)執(zhí)行該第二程序指令,也即由第一硬件架構(gòu)調(diào)用該預(yù)定函數(shù)進(jìn)行數(shù)據(jù)處理。第一硬件架構(gòu)執(zhí)行該第二程序的指令進(jìn)行數(shù)據(jù)處理后的數(shù)據(jù)結(jié)果,第一硬件架構(gòu)還可以將其反饋給程序管理器,以便于程序管理器依據(jù)該數(shù)據(jù)結(jié)果繼續(xù)進(jìn)行后續(xù)的第二程序的指令處理。步驟104:將所述第二程序中的指令以及所述調(diào)用函數(shù)翻譯為所述基于第一硬件架構(gòu)的第一指令和第一函數(shù),并觸發(fā)所述第一硬件架構(gòu)在庫(kù)文件中確定該第一函數(shù),按照該第一函數(shù)執(zhí)行所述第一指令。如果所述第二程序調(diào)用的函數(shù)不是第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即該第二程序調(diào)用的函數(shù)與所述預(yù)定函數(shù)不同,因此第一硬件架構(gòu)不能直接調(diào)用自己庫(kù)文件中的函數(shù)進(jìn)行第二程序指令要求的數(shù)據(jù)處理,且由于指令集不同,第二程序不能直接在第一硬件架構(gòu)中運(yùn)行,仍需要程序管理器執(zhí)行翻譯操作,將第二程序中的指令翻譯為基于第一硬件架構(gòu)的第一指令,也即翻譯為第一硬件架構(gòu)可以識(shí)別并執(zhí)行的指令,同時(shí)由于第二程序調(diào)用的函數(shù)也是基于第二硬件架構(gòu)的函數(shù),因此也需要將其調(diào)用的函數(shù)翻譯為第一函數(shù),此處將第二程序調(diào)用的函數(shù)翻譯為第一函數(shù)是指將調(diào)用的函數(shù)代碼翻譯為可以實(shí)現(xiàn)相同功能的第一函數(shù)的代碼,以便于第一硬件架構(gòu)可識(shí)別并能夠從自身庫(kù)文件中調(diào)用,指令的翻譯也是指代碼的翻譯過程。將第二程序的指令和函數(shù)翻譯為第一指令和第一函數(shù)后,即可觸發(fā)第一硬件架構(gòu)執(zhí)行該第二程序指令,從其自身的庫(kù)文件中確定該第一函數(shù),并按照該第一函數(shù)執(zhí)行所述第一指令,以進(jìn)行數(shù)據(jù)處理。在實(shí)際應(yīng)用中,上文所述的第一硬件架構(gòu)可以具體為X86架構(gòu),所述的第二硬件架構(gòu)為ARM架構(gòu)。X86架構(gòu)為現(xiàn)有的計(jì)算機(jī)、個(gè)人電腦、筆記本等常用的硬件架構(gòu),而ARM架構(gòu)由于其屬于RISC架構(gòu),效率高于X86架構(gòu),很多游戲程序或者其他的應(yīng)用程序都是基于ARM架構(gòu)編譯的,但是又需要在X86架構(gòu)中運(yùn)行或調(diào)試,盡管X86架構(gòu)和ARM架構(gòu)的指令集不同,但是有些庫(kù)函數(shù)是相同的,可以實(shí)現(xiàn)相同的功能,例如數(shù)學(xué)庫(kù)函數(shù)。因此采用本發(fā)明的實(shí)施例方案,程序管理器是運(yùn)行在X86架構(gòu)中的軟件,其是基于ARM架構(gòu)編譯,即可以模擬ARM架構(gòu)運(yùn)行環(huán)境,并可將ARM程序翻譯為X86程序,以實(shí)現(xiàn)在X86架構(gòu)中執(zhí)行該ARM程序。在需要執(zhí)行該ARM程序時(shí),程序管理器首先獲取ARM程序的ARM指令及其調(diào)用的函數(shù),若其調(diào)用的函數(shù)與X86架構(gòu)的預(yù)定函數(shù)相同,則無(wú)需翻譯ARM指令,直接觸發(fā)X86架構(gòu),從自身庫(kù)文件中確定該預(yù)定函數(shù),并執(zhí)行該ARM指令,即可得到數(shù)據(jù)處理結(jié)果。如果與X86架構(gòu)的預(yù)定函數(shù)不相同,則再將ARM指令翻譯為X86指令,調(diào)用函數(shù)也翻譯為X86架構(gòu)中的第一函數(shù),然后再觸發(fā)X86架構(gòu)從自身庫(kù)文件中確定該第一函數(shù),以執(zhí)行翻譯后的X86指令。由于通過判斷第二程序的調(diào)用函數(shù)是否為X86架構(gòu)庫(kù)文件中的函數(shù),可以減少指令的翻譯過程,因此也就避免了翻譯后的X86指令較多的問題,從而即可提高程序的執(zhí)行效率。在本實(shí)施例中,程序管理器接收到程序執(zhí)行請(qǐng)求時(shí),獲取基于第二硬件架構(gòu)的第二程序,當(dāng)判斷出該第二程序的調(diào)用函數(shù)即為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),則觸發(fā)第一硬件架構(gòu)從自身庫(kù)文件中確定該預(yù)定函數(shù),并按照該預(yù)定函數(shù)執(zhí)行所述第二程序的指令,因此減少了翻譯步驟,減少了將一條第二程序的指令翻譯為多條第一指令的操作,因此也就提聞了程序執(zhí)行效率。參見圖2,示出了本發(fā)明一種程序執(zhí)行方法實(shí)施例2的流程圖,該方法應(yīng)用于運(yùn)行在第一硬件架構(gòu)中,且具有第二操作系統(tǒng)的虛擬機(jī)中,所述虛擬機(jī)是基于第二硬件架構(gòu)所創(chuàng)建的,所述方法可以包括以下幾個(gè)步驟:步驟201:所述虛擬機(jī)接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序。虛擬機(jī)是指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng),本實(shí)施例所述的虛擬機(jī)是基于所述第二硬件架構(gòu)所創(chuàng)建的,具有第二硬件架構(gòu)支持運(yùn)行的第二操作系統(tǒng)。所述虛擬機(jī)的第二操作系統(tǒng)可以與所述第一硬件架構(gòu)下運(yùn)行的第一操作系統(tǒng)相同,也可以不同。由于不同的硬件架構(gòu)其能夠支持運(yùn)行的操作系統(tǒng)可能不同,一些硬件架構(gòu)并不能支持運(yùn)行某些操作系統(tǒng)。程序是在硬件架構(gòu)的處理器中執(zhí)行的,但是需要操作系統(tǒng)控制運(yùn)行,當(dāng)?shù)诙布軜?gòu)不支持運(yùn)行在第一硬件架構(gòu)中的操作系統(tǒng),而又需要在第一硬件架構(gòu)下執(zhí)行基于第二硬件架構(gòu)編譯的程序時(shí),則可以通過創(chuàng)建虛擬機(jī),由虛擬機(jī)模擬第二硬件架構(gòu)的運(yùn)行環(huán)境。獲取該第二程序后,即可確定第二程序指令及其可能調(diào)用的函數(shù)。步驟202:判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),若是,則進(jìn)入步驟203,若否,則進(jìn)入步驟204。獲取到第二程序后,確定第二程序中的指令及其調(diào)用的函數(shù),然后首先判斷第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即判斷該第二程序調(diào)用的函數(shù)是否與預(yù)定函數(shù)相同。所述預(yù)定函數(shù)是分別在第一程序和第二程序執(zhí)行過程中,可以實(shí)現(xiàn)相同功能的庫(kù)函數(shù),例如實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的庫(kù)函數(shù),可以預(yù)先根據(jù)基于第一硬件架構(gòu)的庫(kù)函數(shù)和基于第二硬件架構(gòu)的庫(kù)函數(shù)。來(lái)分別確定哪些庫(kù)函數(shù)是可以實(shí)現(xiàn)相同功能的庫(kù)函數(shù),即確定為預(yù)定函數(shù)。步驟203:觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。在判斷出第二程序調(diào)用的函數(shù)為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即是說(shuō)第二程序調(diào)用的函數(shù)與第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)可實(shí)現(xiàn)的功能相同。則觸發(fā)第一硬件架構(gòu),由所述第一硬件架構(gòu)從其庫(kù)文件中確定該預(yù)定函數(shù),按照所述預(yù)定函數(shù)執(zhí)行該第二程序指令,也即由第一硬件架構(gòu)調(diào)用該預(yù)定函數(shù)進(jìn)行數(shù)據(jù)處理。第一硬件架構(gòu)執(zhí)行該第二程序的指令進(jìn)行數(shù)據(jù)處理后的數(shù)據(jù)結(jié)果,第一硬件架構(gòu)還可以將其反饋給虛擬機(jī),以便于虛擬機(jī)依據(jù)該數(shù)據(jù)結(jié)果繼續(xù)進(jìn)行后續(xù)的第二程序的指令處理。步驟204:將所述第二程序中的指令以及所述調(diào)用函數(shù)翻譯為所述基于第一硬件架構(gòu)的第一指令和第一函數(shù),并觸發(fā)所述第一硬件架構(gòu)在庫(kù)文件中確定該第一函數(shù),按照該第一函數(shù)執(zhí)行所述第一指令。如果所述第二程序調(diào)用的函數(shù)不是第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即該第二程序調(diào)用的函數(shù)與所述預(yù)定函數(shù)不同,因此第一硬件架構(gòu)不能直接調(diào)用自己庫(kù)文件中的函數(shù)進(jìn)行第二程序指令要求的數(shù)據(jù)處理。由于指令集不同,第二程序不能直接在第一硬件架構(gòu)中運(yùn)行,且所述虛擬機(jī)其模擬的是第二硬件架構(gòu)的系統(tǒng)功能,其物理的執(zhí)行過程還是由第一硬件架構(gòu)執(zhí)行的,為了能夠使得第一硬件架構(gòu)可以執(zhí)行該第二程序,需要將第二程序指令及其調(diào)用的函數(shù)翻譯為第一硬件架構(gòu)可以識(shí)別的代碼,也即將第二程序指令翻譯成第一指令,調(diào)用的函數(shù)翻譯為第一程序。此處將第二程序調(diào)用的函數(shù)翻譯為第一函數(shù)是指將調(diào)用的函數(shù)代碼翻譯為可以實(shí)現(xiàn)相同功能的第一函數(shù)的代碼,以便于第一硬件架構(gòu)可識(shí)別并能夠從自身庫(kù)文件中調(diào)用,指令的翻譯也是指代碼的翻譯過程。將第二程序的指令和函數(shù)翻譯為第一指令和第一函數(shù)后,即可觸發(fā)第一硬件架構(gòu)執(zhí)行該第二程序指令,從其自身的庫(kù)文件中確定該第一函數(shù),并按照該第一函數(shù)執(zhí)行所述第一指令,以進(jìn)行數(shù)據(jù)處理。在實(shí)際應(yīng)用中,上文所述的第一硬件架構(gòu)可以具體為X86架構(gòu),所述的第二硬件架構(gòu)為ARM架構(gòu),所述虛擬機(jī)為運(yùn)行在X86架構(gòu)中的,基于ARM架構(gòu)所創(chuàng)建的,其可以完整模擬ARM架構(gòu)的硬件系統(tǒng)功能。在本實(shí)施例中,通過運(yùn)行在第一硬件架構(gòu)中的虛擬機(jī)接收到程序執(zhí)行請(qǐng)求時(shí),獲取基于第二硬件架構(gòu)的第二程序,當(dāng)判斷出該第二程序的調(diào)用函數(shù)即為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),則觸發(fā)第一硬件架構(gòu)從自身庫(kù)文件中確定該預(yù)定函數(shù),并按照該預(yù)定函數(shù)執(zhí)行所述第二程序的指令,因此減少了翻譯步驟,減少了將一條第二程序的指令翻譯為多條第一指令的操作,因此也就提高了程序執(zhí)行效率。與本發(fā)明一種程序執(zhí)行方法實(shí)施例1相對(duì)應(yīng),本發(fā)明還提供了一種程序管理器,所述程序管理器是基于第二硬件架構(gòu)所創(chuàng)建的,并運(yùn)行在第一硬件架構(gòu)中,即該程序管理器可以在第一硬件架構(gòu)中模擬與所述第一硬件架構(gòu)指令不兼容或者體系不同的第二硬件架構(gòu),參見圖3,為所述程序管理器實(shí)施例1的結(jié)構(gòu)示意圖,第一獲取模塊301,用于接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序。其中,所述第一獲取模塊301具體用于獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序,并確定所述第二程序中的第二指令及其調(diào)用的函數(shù)。程序是由指令組成的,程序執(zhí)行過程即是執(zhí)行指令的過程。由于每一個(gè)可執(zhí)行的程序都會(huì)有依賴的庫(kù)文件,包含由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù),也即程序執(zhí)行過程中需要依賴庫(kù)函數(shù),例如用于進(jìn)行數(shù)據(jù)運(yùn)算的加法函數(shù)、減法函數(shù)等。某些指令執(zhí)行過程中需要調(diào)用相應(yīng)的函數(shù)來(lái)進(jìn)行數(shù)據(jù)處理。由于所述第二程序是基于第二硬件架構(gòu)而編譯的,因此其調(diào)用的庫(kù)文件中的函數(shù)也是基于第二硬件架構(gòu)的函數(shù)。第一判斷模塊302,用于判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)。函數(shù)雖然也是基于不同硬件架構(gòu)所創(chuàng)建的,但是不同的硬件架構(gòu)中有些函數(shù)所實(shí)現(xiàn)的功能是相同的,因此可以基于不同硬件架構(gòu)的程序的指令要求進(jìn)行相同的數(shù)據(jù)處理過程,例如一些用于數(shù)學(xué)運(yùn)算的數(shù)學(xué)庫(kù)函數(shù)。因此本實(shí)施例中所述判斷模塊302判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即是判斷第二程序調(diào)用的函數(shù)是否與第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)相同。所述預(yù)定函數(shù)是分別在第一程序和第二程序執(zhí)行過程中,可以實(shí)現(xiàn)相同功能的庫(kù)函數(shù),例如實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的庫(kù)函數(shù)。第一觸發(fā)模塊303,用于當(dāng)所述判斷模塊判斷結(jié)果為是時(shí),觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。當(dāng)判斷出第二程序調(diào)用的函數(shù)為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即是說(shuō)第二程序調(diào)用的函數(shù)與第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)可實(shí)現(xiàn)的功能相同。則可以直接觸發(fā)第一硬件架構(gòu)從庫(kù)文件中確定該預(yù)定函數(shù),按照所述預(yù)定函數(shù)執(zhí)行該第二程序指令,也即由第一硬件架構(gòu)調(diào)用該預(yù)定函數(shù)進(jìn)行數(shù)據(jù)處理。所述程序管理器還包括:第一翻譯模塊304,用于當(dāng)所述判斷模塊為否時(shí),將所述第二程序中的第二指令以及所述調(diào)用函數(shù)翻譯為所述基于第一硬件架構(gòu)的第一指令和第一函數(shù),并觸發(fā)所述第一硬件架構(gòu)按照所述第一函數(shù)執(zhí)行所述第一指令。此處將第二程序調(diào)用的函數(shù)翻譯為第一函數(shù)是指將調(diào)用的函數(shù)代碼翻譯為可以實(shí)現(xiàn)相同功能的第一函數(shù)的代碼,以便于第一硬件架構(gòu)可識(shí)別并能夠從自身庫(kù)文件中調(diào)用,指令的翻譯也是指代碼的翻譯過程。將第二程序的指令和函數(shù)翻譯為第一指令和第一函數(shù)后,即可觸發(fā)第一硬件架構(gòu)執(zhí)行該第二程序指令,從其自身的庫(kù)文件中確定該第一函數(shù),并按照該第一函數(shù)執(zhí)行所述第一指令,以進(jìn)行數(shù)據(jù)處理。在實(shí)際應(yīng)用中,本實(shí)施例所述的程序管理器可以具體是指計(jì)算機(jī)架構(gòu)模擬器,用以實(shí)現(xiàn)在一硬件架構(gòu)下能夠運(yùn)行其他硬件架構(gòu)上的軟件。上文所述的第一硬件架構(gòu)可以具體為X86架構(gòu),所述的第二硬件架構(gòu)為ARM架構(gòu)。當(dāng)然所述的第一硬件架構(gòu)或者第二硬件架構(gòu)還可以是其他類型的硬件架構(gòu),本發(fā)明并不對(duì)此做具體限定。在本實(shí)施例中,程序管理器接收到程序執(zhí)行請(qǐng)求時(shí),獲取基于第二硬件架構(gòu)的第二程序,當(dāng)判斷出該第二程序的調(diào)用函數(shù)即為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),則觸發(fā)第一硬件架構(gòu)從自身庫(kù)文件中確定該預(yù)定函數(shù),并按照該預(yù)定函數(shù)執(zhí)行所述第二程序的指令,因此減少了翻譯步驟,避免了將一條第二程序的指令翻譯為多條第一指令,因此也就提高了程序執(zhí)行效率。與上述本發(fā)明一種程序執(zhí)行方法實(shí)施例2相對(duì)應(yīng),本發(fā)明還提供了一種虛擬機(jī),該虛擬機(jī)基于第二硬件架構(gòu)所創(chuàng)建,具體第二操作系統(tǒng),并運(yùn)行在第一硬件架構(gòu)中,參見圖4,示出了所述虛擬機(jī)實(shí)施例的結(jié)構(gòu)示意圖,可以包括:第二獲取模塊401,用于接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序。程序是在硬件架構(gòu)的處理器中執(zhí)行的,但是需要操作系統(tǒng)控制運(yùn)行,當(dāng)?shù)诙布軜?gòu)不支持運(yùn)行在第一硬件架構(gòu)中的操作系統(tǒng),而又需要在第一硬件架構(gòu)下執(zhí)行基于第二硬件架構(gòu)編譯的程序時(shí),則可以通過創(chuàng)建虛擬機(jī),由虛擬機(jī)模擬第二硬件架構(gòu)的運(yùn)行環(huán)境。第二判斷模塊402,用于判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)。判斷第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即判斷該第二程序調(diào)用的函數(shù)是否與預(yù)定函數(shù)相同。所述預(yù)定函數(shù)是分別在第一程序和第二程序執(zhí)行過程中,可以實(shí)現(xiàn)相同功能的庫(kù)函數(shù),例如實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的庫(kù)函數(shù),可以預(yù)先根據(jù)基于第一硬件架構(gòu)的庫(kù)函數(shù)和基于第二硬件架構(gòu)的庫(kù)函數(shù)。來(lái)分別確定哪些庫(kù)函數(shù)是可以實(shí)現(xiàn)相同功能的庫(kù)函數(shù),即確定為預(yù)定函數(shù)。第二觸發(fā)模塊403,用于當(dāng)所述判斷模塊判斷結(jié)果為是時(shí),觸發(fā)所述第一硬件架構(gòu),由所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。在判斷出第二程序調(diào)用的函數(shù)為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即是說(shuō)第二程序調(diào)用的函數(shù)與第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)可實(shí)現(xiàn)的功能相同。則觸發(fā)第一硬件架構(gòu),由所述第一硬件架構(gòu)從其庫(kù)文件中確定該預(yù)定函數(shù),按照所述預(yù)定函數(shù)執(zhí)行該第二程序指令,也即由第一硬件架構(gòu)調(diào)用該預(yù)定函數(shù)進(jìn)行數(shù)據(jù)處理。其中,所述虛擬機(jī)還包括:第二翻譯模塊404,用于將所述第二程序中的指令以及所述調(diào)用函數(shù)翻譯為所述基于第一硬件架構(gòu)的第一指令和第一函數(shù),并觸發(fā)所述第一硬件架構(gòu)在庫(kù)文件中確定該第一函數(shù),按照該第一函數(shù)執(zhí)行所述第一指令。如果所述第二程序調(diào)用的函數(shù)不是第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),也即該第二程序調(diào)用的函數(shù)與所述預(yù)定函數(shù)不同,因此第一硬件架構(gòu)不能直接調(diào)用自己庫(kù)文件中的函數(shù)進(jìn)行第二程序指令要求的數(shù)據(jù)處理。由于指令集不同,第二程序不能直接在第一硬件架構(gòu)中運(yùn)行,且所述虛擬機(jī)其模擬的是第二硬件架構(gòu)的系統(tǒng)功能,其物理的執(zhí)行過程還是由第一硬件架構(gòu)執(zhí)行的,為了能夠使得第一硬件架構(gòu)可以執(zhí)行該第二程序,需要將第二程序指令及其調(diào)用的函數(shù)翻譯為第一硬件架構(gòu)可以識(shí)別的代碼,也即將第二程序指令翻譯成第一指令,調(diào)用的函數(shù)翻譯為第一程序。此處將第二程序調(diào)用的函數(shù)翻譯為第一函數(shù)是指將調(diào)用的函數(shù)代碼翻譯為可以實(shí)現(xiàn)相同功能的第一函數(shù)的代碼,以便于第一硬件架構(gòu)可識(shí)別并能夠從自身庫(kù)文件中調(diào)用,指令的翻譯也是指代碼的翻譯過程。將第二程序的指令和函數(shù)翻譯為第一指令和第一函數(shù)后,即可觸發(fā)第一硬件架構(gòu)執(zhí)行該第二程序指令,從其自身的庫(kù)文件中確定該第一函數(shù),并按照該第一函數(shù)執(zhí)行所述第一指令,以進(jìn)行數(shù)據(jù)處理。在實(shí)際應(yīng)用中,上文所述的第一硬件架構(gòu)可以具體為X86架構(gòu),所述的第二硬件架構(gòu)為ARM架構(gòu),所述虛擬機(jī)為運(yùn)行在X86架構(gòu)中的,基于ARM架構(gòu)所創(chuàng)建的,其可以完整模擬ARM架構(gòu)的硬件系統(tǒng)功能。在本實(shí)施例中,通過運(yùn)行在第一硬件架構(gòu)中的虛擬機(jī)接收到程序執(zhí)行請(qǐng)求時(shí),獲取基于第二硬件架構(gòu)的第二程序,當(dāng)判斷出該第二程序的調(diào)用函數(shù)即為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù),則觸發(fā)第一硬件架構(gòu)從自身庫(kù)文件中確定該預(yù)定函數(shù),并按照該預(yù)定函數(shù)執(zhí)行所述第二程序的指令,因此減少了翻譯步驟,避免了將一條第二程序的指令翻譯為多條第一指令,因此也就提高了程序執(zhí)行效率。本說(shuō)明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說(shuō)明即可。需要說(shuō)明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備
所固有的要素。在沒有更多限制的情況下,由語(yǔ)句“包括一個(gè)......”限定的要素,并不排
除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。對(duì)所公開的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。
權(quán)利要求
1.一種程序執(zhí)行方法,其特征在于,應(yīng)用于運(yùn)行在第一硬件架構(gòu)中的程序管理器,所述程序管理器是基于第二硬件架構(gòu)所創(chuàng)建的,所述方法包括: 所述程序管理器接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序; 判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù); 如果是,則觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,當(dāng)所述第二程序調(diào)用的函數(shù)不是第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù)時(shí),所述方法還包括: 將所述第二程序中的第二指令以及所述調(diào)用函數(shù)翻譯為所述基于第一硬件架構(gòu)的第一指令和第一函數(shù),并觸發(fā)所述第一硬件架構(gòu)在庫(kù)文件中調(diào)用該第一函數(shù),執(zhí)行所述第一指令。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序具體為: 獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序,并確定所述第二程序中的指令及其調(diào)用的函數(shù)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一硬件架構(gòu)為X86平臺(tái),所述第二硬件架構(gòu)為ARM平臺(tái)。
5.一種程序執(zhí)行方法,其特征在于,應(yīng)用于運(yùn)行在第一硬件架構(gòu)中,且具有第二操作系統(tǒng)的虛擬機(jī)中,所述虛擬機(jī)是 基于第二硬件架構(gòu)所創(chuàng)建的,所述方法包括: 所述虛擬機(jī)接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序; 判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù); 如果是,則觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。
6.一種程序管理器,其特征在于,運(yùn)行在第一硬件架構(gòu)中,且基于第二硬件架構(gòu)所創(chuàng)建的,包括: 第一獲取模塊,用于接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序; 第一判斷模塊,用于判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù); 第一觸發(fā)模塊,用于當(dāng)所述判斷模塊判斷結(jié)果為是時(shí),觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括: 第一翻譯模塊,用于當(dāng)所述判斷模塊為否時(shí),將所述第二程序中的第二指令以及所述調(diào)用函數(shù)翻譯為所述基于第一硬件架構(gòu)的第一指令和第一函數(shù),并觸發(fā)所述第一硬件架構(gòu)按照所述第一函數(shù)執(zhí)行所述第一指令。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述第一獲取模塊具體用于獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序,并確定所述第二程序中的第二指令及其調(diào)用的函數(shù)。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述第一硬件架構(gòu)為X86平臺(tái),所述第二硬件架構(gòu)為ARM平臺(tái)。
10.一種虛擬機(jī),其特征在于,運(yùn)行在第一硬件架構(gòu)中,具有第二操作系統(tǒng),且基于第二硬件架構(gòu)所創(chuàng)建的,包括: 第二獲取模塊,用于接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序; 第二判斷模塊,用于判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù); 第二觸發(fā)模塊,用于當(dāng)所述判斷模塊判斷結(jié)果為是時(shí),觸發(fā)所述第一硬件架構(gòu),由所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。
全文摘要
本發(fā)明提供了一種程序執(zhí)行方法、程序管理器和虛擬機(jī),所述方法包括接收到程序執(zhí)行請(qǐng)求時(shí),獲取需要執(zhí)行的基于第二硬件架構(gòu)的第二程序;判斷所述第二程序調(diào)用的函數(shù)是否為第一硬件架構(gòu)庫(kù)文件中的預(yù)定函數(shù);如果是,則觸發(fā)所述第一硬件架構(gòu)按照所述預(yù)定函數(shù)執(zhí)行所述第二程序中的指令。通過本發(fā)明實(shí)施例,提高了程序的執(zhí)行效率。
文檔編號(hào)G06F9/455GK103186414SQ20111044526
公開日2013年7月3日 申請(qǐng)日期2011年12月27日 優(yōu)先權(quán)日2011年12月27日
發(fā)明者郭琦, 陸見微, 李佳, 路遙, 寧曉魁, 管慧娟, 王竹強(qiáng) 申請(qǐng)人:聯(lián)想(北京)有限公司