ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:112.30KB ,
资源ID:17126174      下载积分:6 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17126174.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VR虚拟现实Java协同处理器上之虚拟机器.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

VR虚拟现实Java协同处理器上之虚拟机器.docx

1、VR虚拟现实Java协同处理器上之虚拟机器(VR虚拟现实)Java协同处理器上之虚拟机器Java協同處理器上之虛擬機器JavaVirtualMachineonARMwithCCLJavaCoprocessor摘要本篇論文首先描述從軟體研發人員的角度,和CPU團隊共同製定Java協同處理器時,所進行的研究方法及發現.本團隊將Java虛擬機器移植至ARM7搭配Java協同處理器之平台,並進行效能提升,效果可達到8倍.關鍵詞JavaVirtualMachineJava虛擬機器JavaCoprocessorJava協同處理器ARMARM處理器1.前言2.Methodology(Steps) 2.1決定

2、支援的位元碼2.2效能預估2.3issues3.EncounteredProblems4.大函式框的處理機制5.指令摺疊(Paul)1. 前言2. 3. Java是一個物件導向式的程式語言,具有跨平台及位元碼簡潔的特性。傳統的程式語言,原始碼經由編譯器轉換成某處理器特定的機器碼,該機器碼只能在特定的處理器上執行。如果想在不同的處理器上執行同樣的程式,必須再度使用編譯器將原始碼轉換成另一處理器之機器碼。Java程式語言達成跨平台的方式則是藉由在編譯時將原始碼轉換成位元碼,該位元碼並不是特定處理器之指令,而是虛擬機器之指令。執行Java程式時,可使用位元碼直譯器逐一將位元碼轉換為特定處理器之指令。

3、因此Java程式語言編譯為位元碼之後,可以在任何硬體平台及任何作業系統下運行,只要該平台存在一Java虛擬機器。Java程式語言的缺點在於執行速度。傳統程式語言編譯好的機器碼可以直接在處理器上執行,但Java程式語言編譯出來的位元碼必須經過Java虛擬機器先翻譯成機器碼,然後才能在處理器上運作,多了一道手續。一種解決方式是採用Java處理器。Java處理器可以直接執行位元碼,不需要經過位元碼直譯器的翻譯手續,因此可加速Java程式的運作。Java處理器基本上可分為以下三種型式。第一類是獨立式處理器(stand-aloneJavaprocessor),可獨立運作而不需要搭配另一顆處理器,Sun的

4、picoJava及aJile的aJ-80與aJ-100屬於此類。第二類是協同處理器(Javacoprocessor),需要搭配一顆主處理器來運作,平常運作於主處理器之模式下,需要執行Java程式時,透過協同處理器介面將Java協同處理器喚醒,本身可直接進行Java位元碼的解譯,inSilicon的JVXtreme屬於此類。第三類我們稱為內嵌式轉譯器(embeddedJavatranslator),內嵌於主處理器之內,在主處理器欲至記憶體存取Java位元碼時,便即時將Java位元碼翻譯為主處理器之機器碼,ARM的Jazelle及Nazomi的JSTAR屬於此類。電通所發表過獨立式Java處理器,

5、這一類處理器的優點是不需要搭配另一顆處理器,本身即可獨立運作,可節省硬體成本,缺點是需要為處理器開發一系列的發展工具,而且使用者必須花時間學習這一套工具。本論文要介紹的,是電通所對於Java協同處理器的設計。這一類處理器的優點是可使用主處理器上現有之發展工具,使用者不需要學習新的工具。缺點是硬體成本較高。我們的Java協同處理器所搭配的主處理器是ARM7TDMI。4. 設計方法5. 6. 2.1決定支援的位元碼首先我們必須決定Java協同處理器所支援的位元碼集合,支援的位元碼越多,大部份的情況下加速的效果會越好(例外的情況在於對於複雜的指令,有時由主處理器進行處理,比起由Java協同處理器進行

6、處理,反而所需的時間要來得短),但硬體成本亦將隨之提高。3.4.大函式框的處理機制由Java協同處理器對於堆疊快取的設計所致,運行於其上之Java虛擬機器僅能支援函式框大小(該函式之區域變數,框節構及最大堆疊的總合)在60個項目以下的Java函式。但在Java程式的執行過程中,少數的情況下會遇到函式框大於60的Java函式,因此我們的KVM必須透過軟體的方式來解決這個問題。當函式框大於60,以下稱為大函式框,其他情況則稱為小函式框。我們需要設計及修改的地方包括了:1. Java協同處理器對於大函式框的處理2. 3. 4. 執行緒的切換5. 6. 7. 與pushFrame,popFrame,t

7、hrowException相關的部分8. 9. 4.1Java協同處理器對於大函式框的處理我們為Java協同處理器之狀態暫存器新增一位元,稱為FSO位元(FrameSizeOverflow)。當FSO位元被清除時,Java協同處理器遇到可以處理之位元碼,會直接執行,遇到無法處理的位元碼,才交由函式表格內指定之函式進行處理,此時的行為如同原本之Java協同處理器,此模式稱為非FSO模式。而當FSO位元被設定時,Java協同處理器遇到任何位元碼,皆不直接處理,而交由函式表格中專門處理此狀態之函式群負責處理,此模式稱為FSO模式(此部份之專利正申請中)。小函式框運行於非FSO模式,而大函式框運行於F

8、SO模式。在KVM中,針對大函式框我們增加了幾個全域變數來儲存大函式框的執行狀態,分別是lp_global,sp_global,fp_global,各代表大函式框執行時的區域變數指標,堆疊頂端指標,目前函式框指標(currentframepointer)。另外亦增加了一FSO變數,其意義等同於Java協同處理器狀態暫存器中之FSO位元,而其存在是為了加速用,可不必每次都得透過Java協同處理器介面來存取FSO狀態,可節省協同處理器介面的額外負擔。當虛擬機器遇到函式呼叫之位元碼時(invokevirtual,invokespecial,invokestatic,invokeinterface),

9、若經判斷必須進入大函式框之狀態,便會將Java協同處理器的堆疊快取清空,存入記憶體中,並且抑能堆疊快取,設定Java協同處理器,讓她進入大函式框的執行狀態。此後之堆疊存取便由軟體來負責,執行位元碼的時候還是透過JAExecuteJava,只不過在大函式框的執行模式下,Java協同處理器並不會真的去執行位元碼,只是按照一般小函式框的模式把程式計數器的值作累加,也把該位元碼對應的函式指標傳遞給KVM,讓虛擬機器來執行該位元碼。另外需要修改Java協同處理器的介面函式,原本直接對Java協同處理器下命令的動作,現在必須判斷是大函式框或是小函式框而採取不同的動作。JAPushStack,JAPopSt

10、ack,JAWriteStackEntry,JAReadStackEntry必須增加FSO的判斷式來決定要對送出協同處理器指令(mcr/mrc)請Java協同處理器做處理或是直接對記憶體進行操作。除此之外還有JAReadLocalVaribale和JAWriteLocalVaribale,JAReadFrameEntry,JAWriteFrameEntry亦必須加入FSO的判斷式。另外getSP32(),getLP32(),getFP32()這三個函式,當遇到大函式框時,就改成直接傳回sp_global,lp_global,fp_global。透過修改Java協同處理器的介面,好處就是可以讓處

11、理大函式框和小函式框的程式碼幾乎是一樣的,因為判斷的部分在介面的部分處理掉了。4.2執行緒的切換主要是修改thread.c中的loadExecutionEnvironment函式,執行JALoadThreadContext之後如果Load進來的執行緒是在大函式框中執行,那麼必須將sp,fp,lp,設定給sp_global,fp_global,lp_global,並且將FSO設為1。4.3與pushFrame,popFrame,throwException相關的部分這部分定義在frame.c裡,除了pushFrame和popFrame這兩個函式之外還有exception處理的部分,frame.c

12、中的throwException。根據目前的函式是大函式框或小函式框,以及即將執行的函式是大函式框或小函式框,可以分成四種情況。1. 小函式框切換到大函式框2. 3. 4. 小函式框切換到小函式框5. 6. 7. 大函式框切換到大函式框8. 9. 10. 大函式框切換到小函式框11. 12. 當進行函式呼叫的處理時,在pushFrame函式中必須考慮到這四種情況。當進行函式返回的處理時,在popFrame函式中亦必須考慮到這四種情況。此外,在進行例外處理時,在throwException函式中亦必須考慮到這四種情況。虛擬機器中,popFrame函式的處理方式如下所述:透過FSO的值,我們可以知

13、道目前執行的函式屬於大函式框或是小函式框。1. 由大函式框返回大函式框2. 3. 當目前處於大函式框的狀態,由於Java堆疊都在記憶體中,所以透過fp_global指向框結構中的previousFp,就可以知道之前的函式是大函式框或是小函式框。此時之前的函式亦是大函式框,因此堆疊仍然存在記憶體中,我們只需調整sp_global,fp_global,lp_global,設定CP,IP之後便完成popFrame的動作。4. 由大函式框返回小函式框5. 6. 若之前的函式是小函式框,則我們取得之前的函式的sp,lp,fp之後必須將之轉成7bit的格式放到CurrentThread的JA_CTRL變數

14、,取消FSO位元,打開SPILL_FILL_BIT,再呼叫loadExecutionEnvironment將這些變數設定到Java協同處理器之中,設定CP,IP便完成了SmallFrame的設定。7. 由小函式框返回小函式框8. 9. 若FSO的值為0,我們可得知目前是小函式框,透過硬體取得之前的previousFp可以得知之前的函式是大函式框或是小函式框。若是小函式框,則按照Java協同處理器的設計,這是預設的情況,透過硬體的指令便可以完成。10. 由小函式框返回大函式框11. 12. 若之前是大函式框,則需呼叫storeExecutionEnvironment將整個Java協同處理器包含的

15、堆疊快取清空,存放至記憶體中,設定sp_global,fp_global,lp_global,CP,IP之後便完成pop動作。虛擬機器中,pushFrame的處理情形如下所述:透過FSO的值,可得知目前的函式屬於大框函式或是小框函式。計數下一個函式框的大小(最大堆疊數加上區域變數個數加上框結構之大小)便可得知下一個函式屬於大框函式或是小框函式。1. 由大框函式呼叫大框函式2. 3. 由於堆疊已放於記憶體中,因此設定新的函式框,調整fp_global,sp_global,lp_global,設定Java協同處理器新的CP,IP,便完成pushFrame的動作。4. 由大框函式呼叫小框函式5. 6

16、. 此時需要進入硬體執行的模式,必須設定CurrentThread的JA_CTRL,將新的sp,lp,fp轉成7bits設定至Java協同處理器,關掉FSO位元,開啟SPILL_FILL_BIT,將FSO變數設為0,設定新的函式框,設定硬體CP,IP之後,呼叫loadExecutionEnvironment,讓Java協同處理器重新開始執行。7. 由小框函式呼叫大框函式8. 9. 由於要進入大框函式,因此需呼叫storeExecutionEnvironment將堆疊快取清空,並存放至記憶體中,設定新的函式框,調整lp_global,fp_global,sp_global,開啟FSO位元,關掉S

17、PILL_FILL_BIT,將FSO變數設為1,如此便完成呼叫BigFrame的動作。10. 由小框函式呼叫小框函式11. 12. 這是最單純的情況,設定Java協同處理器的tmpreg0,tmpreg1,tmpreg2後呼叫JAPushFrame便完成。虛擬機器中,throwException處理情況如下所述:當Exception發生時,首先呼叫storeExecutionEnvironment將堆疊快取清空,並存放至記憶體中,再由記憶體中的資料來處理。在找尋例外處理函式(exceptionhandler)的過程中,我們可能會一直推出(pop)函式框,由於這時候是在記憶體中處理,所以不論目前

18、處於大框函式或是小框函式,處理方式皆相同。如果找到了例外處理函式,虛擬機器需要執行該函式框之例外處理函式,此時便要重新進行設定,讓Java協同處理器可以執行大框函式及小框函式。之前在不斷推出函式框的過程中,透過函式框中的previousFP,我們可以得知要進入的函式是大框函式或是小框函式,因此當找到例外處理函式時,有兩種可能的狀況需要處理:1. 例外處理函式位於大框函式內2. 3. 由於目前的Java堆疊已經存在於記憶體中,因此僅需要調整sp_global,fp_global,lp_global,設定Java協同處理器新的CP,IP,將例外物件(exceptionobject)推入(push)Java堆疊中,便完成例外處理的程序。4. 例外處理函式位於小框函式內5. 6. 此時必須重新啟動Java協同處理器來執行位元碼,因此必須重新設定CurrentThread的JA_CTRL,將sp,lp,fp轉成7bits資料,呼叫loadExecutionEnvironment將Java堆疊重新載入堆疊快取,設定CP,IP,最後呼叫JAPushStack將例外物件推入堆疊快取中,以便完成例外處理的程序。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2