《Java协同处理器上之虚拟机器.docx》由会员分享,可在线阅读,更多相关《Java协同处理器上之虚拟机器.docx(5页珍藏版)》请在第壹文秘上搜索。
1、Java5同城理器上之虚叔檄器JavaVirtua1.MachineonARMwithCC1.JavaCoprocessor摘要本篇衿文首先描述优轨催研会人侥的角度,和CPUgB藻共同柒定JaVat都同虑理器辞,所选行的研究方法及登呢,本屁除网FJava虚控帙器移植至ARM7搭限Java将同虔理器之平台,旋退行效能隈升,效果可连到8倍.网虢弱JavaVirtua1.MachineJaVa虚嗓卷器JavaCoprocessorJaVat同虞理器ARMARM电理器1 .前言2 .Methodo1.ogy(Steps)2.1 泱定支援的位元稀2.2 效能估2.3 3issues3 .Encounte
2、redProb1.ems4 .大函式框的虐理梭制5 .指令揩械(PaUD1 .前言Java是一佃物件撑向式的程式5,具有跨平台及位元格何源的特性。停抚的程式言,原始礁触由编舞器将换或某阑理器特定的槌器码,梭器碟只能在特定的威理器上轨行。如果想在不同的虑理器上初行间株的程式,必策再度使用缩葬器将原始码搏摸成另一虞理器之极器码。JaVa程式言逢成跨平台的方式刖是相由在编耨原始礴脾搅成位元礁,士亥位元礁或不是特定威理器之指令,而是虚操微器之指令。软行JaVa程式畤,可使用住元碳真奈器逐一耨位元例傅换检特定思理器之指令。因此JaYa程式言编群熟位元礴之彳,可以在任何硬魏平台及任何作奏系统下建行,只要被
3、平台存在一JaYa虎嗓极器。Java程式言的缺黠在於就行速度.像疏程式言编释好的械器礴可以直接在真理器上航行,但JaVa程式:吾言编界出来的位元礁必须堤遇JaVa成猴梭器先戳成槌器福然接才能在虑理器上建作,多了一道手绩。一独解泱方式是探用Java度理器。Java真理器可以直接就行住元磅,不帮要谩位元礁直洋器的翻手因此可加速JaVa程式的逮作。JaVa电理器根本上可分以下三稷型式。第一Jg是獭立式感理器(Stand-a1.oneJavaPrOCeSSor)可强立通作而不需要搭纪另一昙直思理器,Sun的PiCOJaVa及aJi1.e的aJ-80舆aJ700属於此原。第二娘是t同点理器(JaVaCo
4、JJroceSsor),需要搭田一猿主,真理器来建作,平常述作於主庭理器之模式下,察要我行Java程式B,透遢t防同腹理器介面将JaVat防同虚理器嗓醒,本身可直接推行JaVa位元码的解inSi1.icon的JYXtreme曷於此第三我例耦卷内嵌式樽群器(embeddedJavatrans1.ator).内嵌於主感理器之内,在主思理器欲至纪情艘存取JaYa位元礴畴,便即畴牌Java位元碑翻舞篇主密理器之极器礴,ARM的Jaze1.1.e及Nazoni的JSTAR源於此漏富通所会表送獴立式JaVa虚理器,道一场虑理器的侵钻是不需要搭配另一颗电理器,本身即可搠立通作,可静省硬雒本钱,缺粘是需要热虞
5、理器赘一系列的娶展工具,而且使用者必须花B寺冏季曾道一套工具。本能文要介貂的,是冕:遇所封於JaVa熔同虑理器的t0道一侦虑理器的僵粘是可使用主彘理器上现有之会展工具,使用者不需要晕皆新的工具.块釉是硬傅本钱较高。我例的JaVa蝌同虞理器所搭配的主虔理器是ARM7TDMk2 .鼓吉十方法2.1 决定支援的位元焉首先我仍必须决定Java熔同庭理器所支援的位元礁集合,支援的位元叫越多,大部份的情;兄下加速的效果令越好(例外的情况在於舅於穆雅的指令,有畴由主虑理器推行虑理,比起由JaYa隘同度理器i行虚理,反而所需的畤冏要来得短),但硬醴本钱亦揩随之提高。4.大函式框的虐理槌制由Java蝠同虞理器封
6、於堆叠快取的所致,建行於其上之Java虚器佳能支援函式框大小函式之显域夔敷,施饰带及最大堆叠的合在60佃瑁目以下的JaVa函式。但在JaVa程式的我行遗程中,少敷的情沆下台遇到函式框大於60的JaVa函式,因此我m的KVM必须透遇戟舱的方式来解泱道他冏燃。常函式框大於60.以下襁悬大函式椎,其他情况刖解篇小函式植。我凭需要f及修改的地方包括了:1. JaVa明同虏理器封於大函式框的.电理2. 孰行精的切换3. pushFrame,POPFrame,IhrowException相嗣的局部4. 1JaVa坳同.电理器封於大函式框的虔理我(?,卷Java熔同真理器之状熊暂存器新增一位元,稻熟FSO位
7、元(FrameSizeOverf1.ow).FSO位元被去除B,Java愤同点理器遇到可以感理之位元礴,畲直接就行,遇到维法真理的位元礁,才交由函式表格内指定之函式推行虑理,此畴的行如同原本之JaVa爆同虞理器,此模式耦非FSO模式。而常FSO位元被定畤,Java临同虚理器遇到任何位元稽,皆不直接感理,而交由函式表格中导FE咫理比戕魅之函式群负鹿理,此模式耦;ESO模式(此部份之事利正申请中:小函式根i?行於非FSO模式,而大函式框建行於FSO模式。在KVM中,料封大函式施我In酒加了短佃全域堤数来储存大函式梅的新行戕熊,分别是1.p_g1.oba1.,sp_g1.oba1.,fp_g1.ob
8、a1.,各代表大函式框轨行畤的国域夔数指榇,堆叠Ig端指樵,目前函式植指榛(CUrrentframepointer)另外亦增加了一FSO受敷,其意羲等同於JaVa略同虑理器肤熊暂存器中之FSO位元,而其存在是熟了加速用,可不必每次都得透遇JaVa临同阑理器介面家存取卜50状憩,可简省博同虞理器介面的额外负推。雷虐艇梭器遇到函式呼叫之位元稀畤(invokevirtua1.,invokespecia1.,invokestatic.invokeinterface),若矮判断必须i入大函式框之戕憩,便台游JaVa切同虚理器的堆叠快取清空,存入t愤中,旋且抑能堆叠快取,鼓定JaYa同真理.器,5地it入
9、大函式梅的软行状憨。此接之堆叠存取便由软情来负责,航行位元礁的暗候遗是透遢JAEXeCUteJava,只不谩在大函式屉的就行模式下,JaVa胳同虚理器加不畲真的去孰行位元碉,只是按照一般小函式框的模式把程式j十敷器的值作累加,也把位元婚封旗的函式指橡傅选给KYM,i虚系楼卷来我行位元廊。另外需要修改JaVa愤同庭理器的介面函式,原本直接封JaVa馅同施理器下命令的勤作,猊在必须判断是大函式框或是小函式框而探取不同的勤作。.IAPushStack,.JAPopStack.JAWriteStackEntry,JAReadS1.ackEn1.ry必须增加FSO的制断式来决定要封送出愤同点理器指令(m
10、cr/mrc)篇JaVa熔同鹿理器做庭理或是直接封i博健暹行操作.除此之外遭有JARead1.oca1Variba1e和JAWrite1.oCa1.YaribaIe,JAReadFrameEntry,JAWriteFrameEntry亦必须参加FSO的判断式。另外getSP32(),get1.P32(),getFP32()追三IS函式,常遇到大函式框畴,就改成直接停回sp_gIOba1.,1.p_g1.oba1.,fp_g1.oba1.透谩修改JaVa幅同虚理器的介面,好虑就是可以S1.虐理大函式框和小函式惟的程式例段乎是一梯的,因检判断的局部在介面的局部寓理掉了。5. 2就行籍的切换主要是修
11、改thread,C中的IoadExecutionEnvironment函式,轨,行JA1.oadThreadContext之彳为如果1.oad谨来的孰行绪是在大函式框中孰行,那麽必须揩sp.fp.Ip.段定给sp_g1.oba1.fp_g1.oba1.,1.p_g1.oba1.,且耨FSO段卷14.3典PUShFrame,POPFrame.thro*Exception相SWj的局部道局梯定燕在frame.c桂,除了PUShFrame和POPFramC造雨函式之外遗有exception真理的局梯,frame,c中的IhrowException根掠目前的函式是大函式椎或小函式框,以及即牌就行的函式
12、是大函式框或小函式庭.可以分成四粳情沆。1 .小函式铤切换到大函式框2 .小函式程切换到小函式框3 .大函式根切换到大函式框4 .大函式程切换到小函式框管暹行函式呼叫的点理畴,在PUShFrame函式中必案考点到适四梗情况。常i行函式返回的真理,在PoPFram。函式中亦必须考通到道四粳情泥.此外,在暹行例外虑理三,在IhrOWEXccption函式中亦必考虑到道四桂情况。冰Ckareturninstrw1.ic虚报横器中PopFrame函式的虞理方式如下所述:透谩FSO的值,我仍可以知道目前航行的函式属於大函式框或是小函式框。1 .由大函式框返回大函式框富目前阑於大函式框的戕憩,由於JaVa
13、雄曼都在t糖中,所以透遗fpg1.oba1.指向框1.情中的previousFp,就可以知道之前的函式是大函式程或是小函式程。此畴之前的函式亦是大函式枢,因此堆叠仍然存在吉己愧髓中,我仍只密整sp_g1.oba1.,fp_g1.oba1.,1.p_g1.oba1.,a定CP,IP之接便完成popFrame的勤作。2 .由大函式框返回小函式框若之前的函式是小函式恒刖我取得之前的函式的SPjPjP之接必很膈之言成7bit的格式放到CurrentThread的JAKTR1.堤敦,取消FSO位元,打SPI1.1._FI1.1.BIT,再呼叫IoadExecutiOnEnvironment聘造些堤敦定到
14、JaVa愤同虑理器之中,定CP,IP便完成了Sma1.1.Frame的定。3 .由小函式框返回小函式框若FSO的值卷0,我例可得知目前是小函式框,透谩硬惚取得之前的PreVioUS回可以得知之前的函式是大函式框或是小函式框。若是小函式屉,刖按照JaVaf同感理器的段吉十,道是英的情况,透透硬假的指令便可以完成。4 .由小函式框返回大函式框若之前是大函式程,刖需呼叫StoreExecutirHnvironment牌整18Java彘同虞理器包含的堆一快取清空,存放至就懂镇中,定sp_g1.oba1.,fp_g1.oba1.,1.p_g1.oba1.,CP.IP之彼便完成POP勤作。虚授横器中PUS
15、hFrame的真理情形如下所述:透谩FSO的值,可得知目前的函式厩於大框函式或是小框函式。$十败下一佃函式框的大小(最大堆磬鼓加上僵域燮载他敦加上框鳍带之大小)便可得知下1.佃函式腐於大框函式或是小框函式。1.由大框函式呼叫大框函式由於堆叠已放於纪惊皖中,因此鼓定新的函式根,弱整fp-g1.oba1.sp-g1.oba1.,1.p_g1.oba1.定JaVa癌同真理器新的CP,IP,便完成PUShFram。的勤作.5 .由大框函式呼叫小框函式此畴需要迤入硬福规行的模式,必须被定CurrentThread的JACTR1.游新的sp.1.p.fpH成7bits段定至JaVa琳同福理喜掉成0位元,改SPI1.1.F1.1.1.BIT,HHSO0.定新的函式框,定硬髓CP,IP之篌,呼叫IOadEXCCUt.iOnEnvironment,祺JaVa彘同电理器重新闻始筑行。6 .由小框函式呼叫大框函式由於要迤入大框函式,因此需呼叫StOreEXeCUIionEnVirOnInen1.)14堆ft快取清空,曲存放至W愧髓中,定新的函式框,整1.p_g1.oba1.,fp_g1.oba1.,sp_g1.oba1.,M数FSO位元,需掉SPI1.kFI1.1.BIT,耨FSO敷1,如此便完成呼叫BigFrame的勤作。