版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、.:.;Java協(xié)同處理器上之虛擬機器Java Virtual Machine on ARM with CCL Java Coprocessor摘要本篇論文首先描畫從軟體研發(fā)人員的角度, 和CPU團隊共同製定Java協(xié)同處理器時, 所進行的研討方法及發(fā)現(xiàn). 本團隊將Java虛擬機器移植至ARM 7搭配Java協(xié)同處理器之平臺, 並進行效能提升, 效果可達到8倍.關(guān)鍵詞Java Virtual Machine Java虛擬機器Java Coprocessor Java協(xié)同處理器ARM ARM處理器1. 前言2. Methodology (Steps)2.1 決定援助的位元碼2.2 效能預(yù)估2.3
2、 issues3. Encountered Problems4. 大函式框的處理機制5. 指令摺疊(Paul)前言Java是一個物件導(dǎo)向式的程式語言,具有跨平臺及位元碼簡潔的特性。傳統(tǒng)的程式語言,原始碼經(jīng)由編譯器轉(zhuǎn)換成某處理器特定的機器碼,該機器碼只能在特定的處理器上執(zhí)行。假設(shè)想在不同的處理器上執(zhí)行同樣的程式,必須再度運用編譯器將原始碼轉(zhuǎn)換成另一處理器之機器碼。Java程式語言達成跨平臺的方式則是藉由在編譯時將原始碼轉(zhuǎn)換成位元碼,該位元碼並不是特定處理器之指令,而是虛擬機器之指令。執(zhí)行Java程式時,可運用位元碼直譯器逐一將位元碼轉(zhuǎn)換為特定處理器之指令。因此Java程式語言編譯為位元碼之後,可
3、以在任何硬體平臺及任何作業(yè)系統(tǒng)下運行,只需該平臺存在一Java虛擬機器。Java程式語言的缺點在於執(zhí)行速度。傳統(tǒng)程式語言編譯好的機器碼可以直接在處理器上執(zhí)行,但Java程式語言編譯出來的位元碼必須經(jīng)過Java虛擬機器先翻譯成機器碼,然後才干在處理器上運作,多了一道手續(xù)。一種解決方式是採用Java處理器。Java處理器可以直接執(zhí)行位元碼,不需求經(jīng)過位元碼直譯器的翻譯手續(xù),因此可加速Java程式的運作。Java處理器根本上可分為以下三種型式。第一類是獨立式處理器(stand-alone Java processor),可獨立運作而不需求搭配另一顆處理器,Sun的picoJava及aJile的aJ-
4、80與aJ-100屬於此類。第二類是協(xié)同處理器(Java coprocessor),需求搭配一顆主處理器來運作,平常運作於主處理器之方式下,需求執(zhí)行Java程式時,透過協(xié)同處理器介面將Java協(xié)同處理器喚醒,本身可直接進行Java位元碼的解譯,inSilicon的JVXtreme屬於此類。第三類我們稱為內(nèi)嵌式轉(zhuǎn)譯器(embedded Java translator),內(nèi)嵌於主處理器之內(nèi),在主處理器欲至記憶體存取Java位元碼時,便即時將Java位元碼翻譯為主處理器之機器碼,ARM的Jazelle及Nazomi的JSTAR屬於此類。電通所發(fā)表過獨立式Java處理器,這一類處理器的優(yōu)點是不需求搭配
5、另一顆處理器,本身即可獨立運作,可節(jié)省硬體本錢,缺點是需求為處理器開發(fā)一系列的發(fā)展工具,而且運用者必須花時間學(xué)習(xí)這一套工具。本論文要介紹的,是電通所對於Java協(xié)同處理器的設(shè)計。這一類處理器的優(yōu)點是可運用主處理器上現(xiàn)有之發(fā)展工具,運用者不需求學(xué)習(xí)新的工具。缺點是硬體本錢較高。我們的Java協(xié)同處理器所搭配的主處理器是ARM7 TDMI。設(shè)計方法2.1 決定援助的位元碼首先我們必須決定Java協(xié)同處理器所援助的位元碼集合,援助的位元碼越多,大部份的情況下加速的效果會越好(例外的情況在於對於複雜的指令,有時由主處理器進行處理,比起由Java協(xié)同處理器進行處理,反而所需的時間要來得短),但硬體本錢亦
6、將隨之提高。3.4. 大函式框的處理機制由Java協(xié)同處理器對於堆疊快取的設(shè)計所致,運行於其上之Java虛擬機器僅能援助函式框大小(該函式之區(qū)域變數(shù),框節(jié)構(gòu)及最大堆疊的總合) 在60個項目以下的Java函式。但在Java程式的執(zhí)行過程中,少數(shù)的情況下會遇到函式框大於60的Java函式,因此我們的KVM必須透過軟體的方式來解決這個問題。當(dāng)函式框大於60,以下稱為大函式框,其他情況則稱為小函式框。我們需求設(shè)計及修正的地方包括了:Java協(xié)同處理器對於大函式框的處理執(zhí)行緒的切換與pushFrame,popFrame,throwException相關(guān)的部分4.1 Java協(xié)同處理器對於大函式框的處理我
7、們?yōu)镴ava協(xié)同處理器之狀態(tài)暫存器新增一位元,稱為FSO位元(Frame Size Overflow)。當(dāng)FSO位元被去除時,Java協(xié)同處理器遇到可以處理之位元碼,會直接執(zhí)行,遇到無法處理的位元碼,才交由函式表格內(nèi)指定之函式進行處理,此時的行為好像本來之Java協(xié)同處理器,此方式稱為非FSO方式。而當(dāng)FSO位元被設(shè)定時,Java協(xié)同處理器遇到任何位元碼,皆不直接處理,而交由函式表格中專門處理此狀態(tài)之函式群負責(zé)處理,此方式稱為FSO方式 (此部份之專利正申請中) 。小函式框運行於非FSO方式,而大函式框運行於FSO方式。在KVM中,針對大函式框我們添加了幾個全域變數(shù)來儲存大函式框的執(zhí)行狀態(tài),分
8、別是lp_global,sp_global,fp_global,各代表大函式框執(zhí)行時的區(qū)域變數(shù)指標(biāo),堆疊頂端指標(biāo),目前函式框指標(biāo)(current frame pointer)。另外亦添加了一FSO變數(shù),其意義等同於Java協(xié)同處理器狀態(tài)暫存器中之FSO位元,而其存在是為了加速用,可不用每次都得透過Java協(xié)同處理器介面來存取FSO狀態(tài),可節(jié)省協(xié)同處理器介面的額外負擔(dān)。當(dāng)虛擬機器遇到函式呼叫之位元碼時(invokevirtual, invokespecial, invokestatic, invokeinterface),假設(shè)經(jīng)判斷必須進入大函式框之狀態(tài),便會將Java協(xié)同處理器的堆疊快取清空,
9、存入記憶體中,並且抑能堆疊快取,設(shè)定Java協(xié)同處理器,讓她進入大函式框的執(zhí)行狀態(tài)。此後之堆疊存取便由軟體來負責(zé),執(zhí)行位元碼的時候還是透過JAExecuteJava,只不過在大函式框的執(zhí)行方式下,Java協(xié)同處理器並不會真的去執(zhí)行位元碼,只是按照普通小函式框的方式把程式計數(shù)器的值作累加,也把該位元碼對應(yīng)的函式指標(biāo)傳遞給KVM,讓虛擬機器來執(zhí)行該位元碼。另外需求修正Java協(xié)同處理器的介面函式,本來直接對Java 協(xié)同處理器下命令的動作,現(xiàn)在必須判斷是大函式框或是小函式框而採取不同的動作。JAPushStack,JAPopStack,JAWriteStackEntry,JAReadStackEn
10、try必須添加FSO的判斷式來決定要對送出協(xié)同處理器指令(mcr/mrc)請Java協(xié)同處理器做處理或是直接對記憶體進行操作。除此之外還有JAReadLocalVaribale和JAWriteLocalVaribale,JAReadFrameEntry,JAWriteFrameEntry亦必須參與FSO的判斷式。另外getSP32(),getLP32(),getFP32()這三個函式,當(dāng)遇到大函式框時,就改成直接傳回sp_global,lp_global,fp_global。透過修正Java協(xié)同處理器的介面,好處就是可以讓處理大函式框和小函式框的程式碼幾乎是一樣的,因為判斷的部分在介面的部分處
11、理掉了。4.2 執(zhí)行緒的切換主要是修正thread.c中的loadExecutionEnvironment函式,執(zhí)行JALoadThreadContext之後假設(shè)Load進來的執(zhí)行緒是在大函式框中執(zhí)行,那麼必須將sp,fp,lp,設(shè)定給sp_global,fp_global,lp_global,並且將FSO設(shè)為 1。4.3 與pushFrame,popFrame,throwException相關(guān)的部分這部分定義在frame.c裡,除了pushFrame和popFrame這兩個函式之外還有exception處理的部分,frame.c中的throwException。根據(jù)目前的函式是大函式框或小函
12、式框,以及即將執(zhí)行的函式是大函式框或小函式框,可以分成四種情況。小函式框切換到大函式框小函式框切換到小函式框大函式框切換到大函式框大函式框切換到小函式框當(dāng)進行函式呼叫的處理時,在pushFrame 函式中必須考慮到這四種情況。當(dāng)進行函式前往的處理時,在popFrame函式中亦必須考慮到這四種情況。此外,在進行例外處理時,在throwException函式中亦必須考慮到這四種情況。虛擬機器中,popFrame函式的處理方式如下所述:透過FSO的值,我們可以知道目前執(zhí)行的函式屬於大函式框或是小函式框。由大函式框前往大函式框當(dāng)目前處於大函式框的狀態(tài),由於Java堆疊都在記憶體中,所以透過fp_glo
13、bal指向框結(jié)構(gòu)中的previousFp,就可以知道之前的函式是大函式框或是小函式框。此時之前的函式亦是大函式框,因此堆疊依然存在記憶體中,我們只需調(diào)整sp_global,fp_global,lp_global,設(shè)定CP,IP之後便完成popFrame的動作。由大函式框前往小函式框假設(shè)之前的函式是小函式框,則我們獲得之前的函式的sp,lp,fp之後必須將之轉(zhuǎn)成7bit的格式放到CurrentThread的JA_CTRL變數(shù),取消FSO 位元,打開SPILL_FILL_BIT,再呼叫l(wèi)oadExecutionEnvironment將這些變數(shù)設(shè)定到Java協(xié)同處理器之中,設(shè)定CP,IP便完成了Sm
14、allFrame的設(shè)定。由小函式框前往小函式框假設(shè)FSO的值為0,我們可得知目前是小函式框,透過硬體獲得之前的previousFp可以得知之前的函式是大函式框或是小函式框。假設(shè)是小函式框,則按照Java協(xié)同處理器的設(shè)計,這是預(yù)設(shè)的情況,透過硬體的指令便可以完成。由小函式框前往大函式框假設(shè)之前是大函式框,則需呼叫storeExecutionEnvironment將整個Java 協(xié)同處理器包含的堆疊快取清空,存放至記憶體中,設(shè)定sp_global,fp_global,lp_global,CP,IP之後便完成pop動作。虛擬機器中,pushFrame的處理情形如下所述:透過FSO的值,可得知目前的函
15、式屬於大框函式或是小框函式。計數(shù)下一個函式框的大小(最大堆疊數(shù)加上區(qū)域變數(shù)個數(shù)加上框結(jié)構(gòu)之大小)便可得知下一個函式屬於大框函式或是小框函式。由大框函式呼叫大框函式由於堆疊已放於記憶體中,因此設(shè)定新的函式框,調(diào)整 fp_global,sp_global,lp_global,設(shè)定Java協(xié)同處理器新的CP,IP,便完成pushFrame的動作。由大框函式呼叫小框函式此時需求進入硬體執(zhí)行的方式,必須設(shè)定CurrentThread的JA_CTRL,將新的sp,lp,fp轉(zhuǎn)成7 bits設(shè)定至Java協(xié)同處理器,關(guān)掉FSO位元,開啟SPILL_FILL_BIT,將FSO變數(shù)設(shè)為0,設(shè)定新的函式框,設(shè)定硬
16、體 CP,IP之後,呼叫l(wèi)oadExecutionEnvironment,讓Java協(xié)同處理器重新開始執(zhí)行。由小框函式呼叫大框函式由於要進入大框函式,因此需呼叫storeExecutionEnvironment將堆疊快取清空,並存放至記憶體中,設(shè)定新的函式框,調(diào)整lp_global,fp_global,sp_global,開啟FSO位元,關(guān)掉SPILL_FILL_BIT,將FSO變數(shù)設(shè)為1,如此便完成呼叫BigFrame的動作。由小框函式呼叫小框函式這是最單純的情況,設(shè)定Java協(xié)同處理器的tmpreg0,tmpreg1,tmpreg2後呼叫JAPushFrame便完成。虛擬機器中,throw
17、Exception處理情況如下所述:當(dāng)Exception發(fā)生時,首先呼叫storeExecutionEnvironment將堆疊快取清空,並存放至記憶體中,再由記憶體中的資料來處理。在找尋例外處理函式(exception handler)的過程中,我們能夠會不斷推出(pop)函式框,由於這時候是在記憶體中處理,所以不論目前處於大框函式或是小框函式,處理方式皆一樣。假設(shè)找到了例外處理函式,虛擬機器需求執(zhí)行該函式框之例外處理函式,此時便要重新進行設(shè)定,讓Java協(xié)同處理器可以執(zhí)行大框函式及小框函式。之前在不斷推出函式框的過程中,透過函式框中的previousFP,我們可以得知要進入的函式是大框函式或是小框函式,因此當(dāng)找到例外處理函式時,有兩種能夠的狀況需求處理:例外處理函式位於大框函式內(nèi)由於目前的Java堆疊已經(jīng)存在於記憶體中,因此僅需求調(diào)整sp_gl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技能大賽心得
- 開學(xué)第一課觀后感集錦15篇
- 感恩的講話稿匯編15篇
- 開業(yè)慶典致辭(匯編15篇)
- 公司整體操作流程
- 手術(shù)室基礎(chǔ)知識操作管理
- 全面推進依法治國的總目標(biāo)和原則+導(dǎo)學(xué)案 高中政治統(tǒng)編版必修三政治與法治+
- 慶祝圣誕節(jié)活動策劃方案(7篇)
- 家長講話稿合集15篇
- 面向雷達的智能化干擾策略優(yōu)化技術(shù)研究
- 2025年人教五四新版八年級物理上冊階段測試試卷含答案
- 2025年春季1530安全教育記錄主題
- 礦山2025年安全工作計劃
- 2025年包裝印刷項目可行性研究報告
- 企業(yè)融資報告特斯拉成功案例分享
- 給客戶的福利合同(2篇)
- 銷售調(diào)味品工作總結(jié)5篇
- 2024年江蘇省勞動合同條例
- 供電企業(yè)輿情的預(yù)防及處置
- 【高中語文】《氓》課件++統(tǒng)編版+高中語文選擇性必修下冊
- T-WAPIA 052.3-2023 無線局域網(wǎng)設(shè)備技術(shù)規(guī)范 第3部分:接入點和控制器
評論
0/150
提交評論