[發(fā)明專利]一種基于寄存器映射的動態(tài)編譯方法無效
| 申請?zhí)枺?/td> | 201110203365.0 | 申請日: | 2011-07-20 |
| 公開(公告)號: | CN102236575A | 公開(公告)日: | 2011-11-09 |
| 發(fā)明(設(shè)計)人: | 楊珉;張源;彭智俊;朱東來 | 申請(專利權(quán))人: | 復(fù)旦大學(xué) |
| 主分類號: | G06F9/45 | 分類號: | G06F9/45 |
| 代理公司: | 上海正旦專利代理有限公司 31200 | 代理人: | 陸飛;盛志范 |
| 地址: | 200433 *** | 國省代碼: | 上海;31 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 寄存器 映射 動態(tài) 編譯 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明屬于Java編譯運(yùn)行環(huán)境設(shè)計技術(shù)領(lǐng)域,具體涉及Java動態(tài)編譯器的動態(tài)編譯方法。
背景技術(shù)
作為目前應(yīng)用最廣泛的面向?qū)ο缶幊陶Z言,Java語言因其特有的可移植性,被大量運(yùn)用在嵌入式系統(tǒng)應(yīng)用平臺開發(fā)中。而嵌入式平臺因其特有的硬件資源的有限性,如何使Java程序更加高效執(zhí)行,成為現(xiàn)今嵌入式平臺上的Java虛擬機(jī)急待解決的關(guān)鍵問題。
目前Java程序在嵌入式系統(tǒng)中主要采用兩種模式運(yùn)行:解釋器執(zhí)行模式以及即時編譯執(zhí)行模式。在嵌入式系統(tǒng)中,解釋器執(zhí)行模式雖然有實(shí)現(xiàn)簡單、跨平臺性良好等優(yōu)點(diǎn),但其執(zhí)行效率卻十分低下。而即時編譯執(zhí)行模式雖然能夠提高Java程序的執(zhí)行效率,卻有著實(shí)現(xiàn)復(fù)雜、加重應(yīng)用程序執(zhí)行期間負(fù)擔(dān)等缺點(diǎn)。這主要由于嵌入式平臺上廣泛采用RISC這種基于寄存器結(jié)構(gòu)的處理芯片,無論是解釋器執(zhí)行模式還是即時編譯執(zhí)行模式在嵌入式平臺上表現(xiàn)不甚理想。
當(dāng)今Java的字節(jié)碼表示除了傳統(tǒng)的基于棧機(jī)構(gòu)設(shè)計的Java字節(jié)碼之外,還出現(xiàn)了基于寄存器設(shè)計的Java字節(jié)碼,尤其以Google開發(fā)設(shè)計的嵌入式操作系統(tǒng)Android中的DEX字節(jié)碼為典型。基于寄存器的字節(jié)碼和同樣基于寄存器設(shè)計的RISC芯片之間天然的同構(gòu)型為Java虛擬機(jī)中即時編譯其的構(gòu)造帶來了新的機(jī)遇。然而,如今的Java虛擬機(jī)中所采用的即時編譯執(zhí)行模式都是針對基于棧結(jié)構(gòu)的字節(jié)碼格式提出的,不能很好的利用這種新的基于寄存器的字節(jié)碼。本發(fā)明提出了一種基于寄存器映射的動態(tài)編譯技術(shù),以更好的利用RISC架構(gòu)和基于寄存器的Java字節(jié)碼,從而獲得更好的Java程序執(zhí)行效果。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對目前的Java編譯技術(shù)中缺少一套針對基于寄存器設(shè)計的Java字節(jié)碼的動態(tài)編譯技術(shù)的這一問題,提出一種新型的動態(tài)編譯方法。
本發(fā)明將所有的Java函數(shù)劃分為兩類函數(shù),即簡單函數(shù)和復(fù)雜函數(shù)。
1、簡單函數(shù):虛擬寄存器使用數(shù)目不超過實(shí)際機(jī)器物理寄存器總個數(shù)。
2、復(fù)雜函數(shù):虛擬寄存器使用數(shù)目大于或等于實(shí)際機(jī)器物理寄存器總個數(shù)。
本發(fā)明通過采用SPECjvm98這一測試用例,在ARM平臺上對基于寄存器設(shè)計的Java字節(jié)碼中函數(shù)使用寄存器情況進(jìn)行了調(diào)研,調(diào)研結(jié)果如附圖1所示。
通過調(diào)研可以發(fā)現(xiàn),簡單函數(shù)占函數(shù)總數(shù)的90%以上,這說明了在RISC架構(gòu)機(jī)器上,豐富的物理寄存器數(shù)目足以用來進(jìn)行對基于寄存器的Java字節(jié)碼中的虛擬寄存器進(jìn)行一一映射的快速分配。
本發(fā)明采用的技術(shù)方案為:利用RISC處理器擁有大量寄存器這一特性,在動態(tài)編譯階段,以函數(shù)為粒度,將基于寄存器的Java字節(jié)碼中所使用的虛擬寄存器和物理寄存器通過一一映射進(jìn)行綁定。通過動態(tài)編譯直接生成本地代碼。
根據(jù)函數(shù)類型的不同,所述進(jìn)行寄存器映射的策略也不同,具體為:
1、在編譯簡單函數(shù)時,采取如下寄存器映射策略,如附圖2所示:
(1)編譯簡單函數(shù)時,虛擬寄存器和物理寄存器的映射關(guān)系是由函數(shù)本身決定,固定為一一映射。
(2)在每個函數(shù)中,所有的虛擬寄存器都必須指派一個物理寄存器與之映射,即使是在字節(jié)碼中并未使用到寄存器也不能例外;而任意一個物理寄存器都必須分配給至少一個虛擬寄存器進(jìn)行映射綁定。
(3)被分配的物理寄存器總數(shù)目必需等于虛擬寄存器的總數(shù)目。
(4)在編譯某些復(fù)雜的基于寄存器設(shè)計的字節(jié)碼的指令時,比如一些虛擬機(jī)相關(guān)的指令,由于其復(fù)雜的邏輯關(guān)系,所以需要使用到一些臨時寄存器,所以在這種情況下,需要選擇一些已經(jīng)被映射過的物理寄存器來做為臨時寄存器,故而在編譯該條字節(jié)碼指令時,這些被選作用來充當(dāng)臨時寄存器的物理寄存器中的值將被壓入棧上進(jìn)行保存,編譯完后,將取回棧上保存的值存入物理寄存器中進(jìn)行恢復(fù)。
2、在編譯復(fù)雜函數(shù)時,采取如下寄存器映射策略,如附圖2所示:
首先將實(shí)際的物理寄存器與字節(jié)碼中的虛擬寄存器一一映射,此外,不能映射到物理寄存器的虛擬寄存器將映射到線程棧上一段溢出區(qū)(spill?area),如附圖3所示。
(1)在編譯復(fù)雜函數(shù)時,由于復(fù)雜函數(shù)眾多的虛擬寄存器數(shù)目超出了機(jī)器實(shí)際的物理寄存器數(shù)目,所以并不是所有的虛擬寄存器都能夠和物理寄存器進(jìn)行一一映射的。所以多出來的虛擬寄存器將用棧來存儲,這部分棧上使用的區(qū)域被稱為溢出區(qū)域。
(2)在每個函數(shù)中,所有的虛擬寄存器都必須指派一個物理寄存器與之映射,即使是在字節(jié)碼中并未使用到寄存器也不能例外;而任意一個物理寄存器都必須分配給至少一個虛擬寄存器進(jìn)行映射綁定。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于復(fù)旦大學(xué),未經(jīng)復(fù)旦大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201110203365.0/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 動態(tài)矢量譯碼方法和動態(tài)矢量譯碼裝置
- 動態(tài)口令的顯示方法及動態(tài)令牌
- 動態(tài)庫管理方法和裝置
- 動態(tài)令牌的身份認(rèn)證方法及裝置
- 令牌、動態(tài)口令生成方法、動態(tài)口令認(rèn)證方法及系統(tǒng)
- 一種動態(tài)模糊控制系統(tǒng)
- 一種基于動態(tài)信號的POS機(jī)和安全保護(hù)方法
- 圖像動態(tài)展示的方法、裝置、系統(tǒng)及介質(zhì)
- 一種基于POS機(jī)聚合碼功能分離顯示動態(tài)聚合碼的系統(tǒng)
- 基于動態(tài)口令的身份認(rèn)證方法、裝置和動態(tài)令牌





