两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

具有修改的恒定存儲區(qū)的java運行系統(tǒng)的制作方法

文檔序號:6416001閱讀:227來源:國知局

專利名稱::具有修改的恒定存儲區(qū)的java運行系統(tǒng)的制作方法
技術領域
:本發(fā)明涉及資源約束的Java運行環(huán)境中例如JavaCard中動態(tài)的代碼下載和鏈接。在常規(guī)Java系統(tǒng)中,使用在所謂恒定存儲區(qū)中的間接名稱查表來解決對類結構(內部和外部)的訪問。這一方案只能用于一個能提供通過處理能力和內部資源表達的足夠資源的系統(tǒng)。在一個資源約束運行系統(tǒng)(例如一個JavaCard)中,此方案并不樂觀。相反地,可以使用已解決的對類結構的訪問因而避免間址操作和避免對恒定存儲區(qū)的維護。本發(fā)明的目的是解決訪問(鏈接)。本發(fā)明的一個目的是在資源約束Java運行環(huán)境中達到有效的鏈接。本發(fā)明的一個目的是在資源約束Java運行環(huán)境中達到空間和運行時的有效鏈接。圖1闡述具有JavaSoft建議的冠文件格式的鏈接。圖2闡述具有此處建議的文件格式的通過偏移量的鏈接。圖3闡述具有此處建議的文件格式的通過名稱的鏈接。下面討論本發(fā)明的一般回顧和實施方面。Java是一個由SunMicrosystems,Inc.2550GarciaAve.,MountainView,CA94043-1100,USA所開發(fā)的編程語言和環(huán)境;“Java”一詞是該公司的注冊商標。由于本說明也涉及實施細節(jié),因此認為熟悉技術的人對Java虛擬機及其實施的基本機理是熟悉的。J.Goslin,B.Joy和G.Tele在他們的“Java語言規(guī)范”中以及T.Lindholm和F.Yellin在他們的“Java虛擬機規(guī)范”中(兩者都由Addison-WesleyPublishingCo.于1996年出版)都全面地介紹了Java語言及JVM的實施。然而請注意,此處作為Java-CardVM引用的Java-Card虛擬機在某些方面是不同的,因為只使用一個子集和附加字節(jié)代碼。1.0JavaSoftCAP文件格式建議如JavaSoft所建議的,CAP文件格式將一個冠文件分為幾個部分。一個冠文件基本上包含一個文本部分和一個數據部分。文本部分包含類結構,方法結構和字節(jié)代碼指令。數據部分包含小板(cardlet)的靜態(tài)域。文本部分通過恒定存儲區(qū)中的一個偏移量訪問在鏈接之前其實際地址不詳的所有符號(類、方法等)。對于每一個這類符號,恒定存儲區(qū)包含目標包的AID和該符號在該目標包(即正被鏈接的包)中的偏移量。恒定存儲區(qū)為所有輸入的符號(在其他包中定義的符號)和所有輸出的符號(在正被裝載的小板內定義和訪問的符號)提供這些偏移量。文本部分、數據部分和恒定存儲區(qū)的組織提供了足夠的信息以供執(zhí)行小板時使用。在裝載小板之后,鏈接程序可以逐步地通過恒定存儲區(qū)并且使用符號的實際地址來替代進入符號的目標包內使用的符號偏移量。鏈接程序只需按照給定的AID尋找具體包,將其起始地址加至符號偏移量上并且將此信息存回至恒定存儲區(qū)中。Java-CardVM然后可以使用恒定存儲區(qū)內的這些地址以供翻譯用。然而,在運行時并不需要恒定存儲區(qū)本身。事實上,在翻譯期間它將要求一個不必要的附加間址操作以便尋找符號地址。此外,恒定存儲區(qū)不必要地在板上占用空間。因此JavaSoft冠文件格式使用個別部分的固定表以便避免在鏈接之后需要恒定存儲區(qū)。固定表包含需要重定位的文本部分中的所有位置。鏈接程序搜索固定表并且將該位置的偏移量輸入至恒定存儲區(qū)內。然后它解決該符號的地址并將它存入文本部分中的初始位置中。然后翻譯程序能夠在運行期間直接使用這些地址,因此在鏈接過程之后可以移去恒定存儲區(qū)。在鏈接過程之后唯一留在板上的部分是文本部分和數據部分。小板與預先計算的和硬編碼的進入目標包內的偏移量的鏈接允許實施一個緊湊系統(tǒng)。然而,它在系統(tǒng)類和不同板上的特定擴展的不同實施方面無法提供足夠的靈活性。例如,一個按照IBM的系統(tǒng)類轉換的小板和JavaSoft的擴展不太可能在具有來自JavaSoft的系統(tǒng)的板和來自IBM的擴展小板上運行。主要原因是不同實施之間的個別類、方法的偏移量以及實例的域偏移量是不同的。在以下,本發(fā)明在現有JavaSoft建議的概念上擴展以及通過一個附加的輕量和靈活的符號化鏈接機理來加強它。2.0本發(fā)明的CAP文件格式根據本發(fā)明的冠文件格式也將冠文件分為不同部分。文本部分包含類結構、方法結構和字節(jié)代碼指令,數據部分還是包括靜態(tài)域。冠文件還在固定表中保持必要的重定位信息。對于小板與其鏈接的每一個包(即目標包)都有一個固定表。固定表還在其中出現重定位的文本部分或數據部分中包含位置。在簡單的情況下,這些位置也由一個可靠和熟知的目標包中的預先計算的偏移量所重定位。在此情況下,鏈接程序將使用給定的目標AID尋找包的起始地址,將偏移量加入目標包中及將該值存在文本部分的初始位置。進入目標包的偏移量可以或者保持于固定表中,或者保持于文本部分的重定位地址處以便使固定表更小。通過偏移量的重定位始終可以用于所裝載小板本身內的大部分訪問。轉換程序可以預先計算這些偏移量而不會破壞兼容性。由于系統(tǒng)整體性的原因,對于其他外部包的訪問不應由預先計算的偏移量來鏈接。相反,應該在鏈接過程中使用一個名稱或識別符來訪問其他包。這些名稱和它們相關連的值應該只存于那些在多個小應用程序之間共享的包的板上。由于這些名稱/值對的表應該盡可能地小,此冠文件格式限制類文件元素的命名,但仍能提供不同規(guī)范的賣主(vendor)專用實施·公共類必須命名和可輸出?!す察o態(tài)方法和構造者同上?!す察o態(tài)域同上。·虛擬方法翻譯程序通過進入虛擬方法表中的一個索引來尋找一個虛擬方法。如果JavaCard環(huán)境需要支持虛擬方法的標準Java后期代碼聯編,則這些索引和虛擬方法表必須在板上解決。在構作方法表期間,鏈接程序必須判斷在方法表中一個方法是否繼承另一個方法。由于這些方法可以在不同小板內定義,必須為各方法引入一個全局命名方案以便判斷兩個方法是否具有相同類型。由于虛擬方法的后期代碼聯編需要一個全局命名方案和用于解決和命名虛擬方法的板上附加資源,本發(fā)明的冠文件格式不支持它。但即使有此限制,仍然有足夠空間留給核心包和擴展的賣主專用實施。編程人員可以自由地增加私有的或靜態(tài)的方法和類。他也能增加非私有實例方法,如果它們不是繼承的和宣布為最后的。轉換程序就可以用直接調用來替代對這些方法的調用?!嵗蛞粋€類中的實例域的數量和類型通常不由規(guī)范所定義,并且將在不同賣主的實施之間變化。因此必須由一個CAP文件格式建議來解決域偏移量的聯編。關于鏈接過程的域的使用可以分為以下三個類別·預先計算的域偏移量一個get-/put-域指令訪問一個其類和所有超類都在包含的小板內定義的域。此域的偏移量然后可以由轉換程序預先計算,同時不必在裝載過程期間鏈接。如果有協議認為對象類不包含任何域聲明,則許多域訪問都可歸入此類別。·訪問具有任何小板之外的超類的小板內部類的域此情況必須由一個冠文件格式支持以便允許將個別包中定義的類劃分為子類。轉換程序能夠相對于小板之外的超類的實例大小而計算該域的偏移量并且將此值存于冠文件中。在鏈接過程期間域的實際偏移量必須根據基類大小重新計算。對于小板內部類的實例大小元素也可相同地進行。·訪問小板外部超類中或任何外部類中的域雖然實例域很少聲明為公共的,但它們經常聲明為保護的。對保護域的訪問始終由專用保護set-/-get-域方法所同意,但所建議的冠文件格式也允許對這類保護的或公共的聲明域進行直接訪問。一個輸出一個保護的或公共的實例域的包必須包含一個名稱和這類域的偏移量以便允許符號化鏈接。一個輸出類、方法或域的包可以包含一個恒定存儲區(qū),其條目包含類型(類等)、名稱和該符號的值。由于冠文件格式不需支持全局命名方案,可以容易地規(guī)定相關連的符號的名稱。這些符號可以從0數到n,并且可以與應用編程接口(API)的規(guī)范一起移交。這一規(guī)范的實施程序仍然能夠通過選擇從n+1開始的新名稱來輸出附加類。圖3顯示一個小應用程序與一個目標包的符號化聯編。固定表中的條目包含重定位類型(見下面)、進入重定位的文本部分中的偏移量,以及符號名稱(為提高空間效率,它可能也存于重定位的位置內)。使用該建議的命名方案,該名稱可以用作進入目標包的恒定存儲區(qū)內的索引。恒定存儲區(qū)內的條目包含條目類型、名稱和相關連的值。鏈接程序根據條目類型將固定表中的條目重定位·要重定位一個方法具有給定名稱的目標包的恒定存儲區(qū)項目必須是一個方法類型。該值必須是一個進入在其中定義該方法的目標包的偏移量。鏈接程序計算該方法的地址并且在給定偏移量處固定該文本部分?!ひ囟ㄎ灰粋€類與以上相同,不同之處只是帶有符號索引和名稱的恒定存儲區(qū)項目必須是類的類型。·要重定位一個靜態(tài)域與以上相同,不同之處只是帶有符號索引和名稱的恒定存儲區(qū)項目必須是靜態(tài)域類型,該值是進入包的數據部分的偏移量。·要重定位一個相對實例域偏移量或相對類實例大小值帶有給定名稱的目標包的恒定存儲區(qū)項目必須是類的類型。鏈接程序計算目標類的地址并獲取該類(類結構的一個元素)的實例大小。鏈接程序將實例大小加至在文本部分偏移量處給出的值并且用所得和值來替代后者?!ξ炊x類的絕對域訪問帶有給定名稱的目標包的恒定存儲區(qū)項目必須是實例域的類型。該項目的值是它的類的實例中該域的絕對偏移量。如果所裝載的小板是一個共享包及輸出保護域或公共域,則鏈接程序也在恒定存儲區(qū)內將它們的條目重定位。它們的實際偏移量用與相對實例域偏移量相同的方式來重定位。一旦鏈接過程結束就可以移去固定表。小應用程序不需要恒定存儲區(qū),只有在多個小應用程序之間分享的包才需要恒定存儲區(qū)以備將來使用。恒定存儲區(qū)的大小決定于輸出項目的數量和決定于項目的大小?,F有JavaCard系統(tǒng)類的恒定存儲區(qū)當今大約有160個項目。一個恒定存儲區(qū)項目包含一個類型域、一個名稱和一個值,它們可以存于4字節(jié)內(使用所建議的命名方案時,它們甚至可減少至三字節(jié))。這樣一來能使所有系統(tǒng)類的恒定存儲區(qū)的大小成為720字節(jié)。JavaSoft建議的不同·JavaSoft恒定存儲區(qū)當今在內部定義的和外部定義的項目之間并無差別。這在去除覆蓋內部定義項目的恒定存儲區(qū)項目時困難。·get-/put-域指令中域偏移量和類結構中的實例大小域只有8位寬。這就不可能當今將此值用作進入恒定存儲區(qū)的索引,而在恒定存儲區(qū)內可在鏈接過程期間存儲信息以便聯編一個域的偏移量。由于這兩個限制,現有JavaSoft建議需要加強以便有可能實現必要的輕量命名方案-類似于此處所建議的。3.0附錄3.1較小擴展在某些環(huán)境中,可能不需要或沒有空間用于板上的任何符號化信息,例如在鏈接過程期間只使用預先計算的偏移量即已足夠。根據本發(fā)明的冠文件格式可以在下列方向內以安全的方式擴展·一個包或小應用程序不但包含一個版本號,而且也包含一個賣主id(或實施id)?!す潭ū碇性L問恒定存儲區(qū)項目的條目也包含偏移量,轉換程序能夠在轉換期間計算這些偏移量。·在下載過程開始時裝載程序判斷小應用程序所需要的包是否來自與當今安裝于板上的賣主相同的賣主(例如相同實施)。如果屬實,則在鏈接過程期間裝載程序使用小應用程序冠文件中的偏移量。否則下載過程失敗。3.2訪問的冠文件格式項目的規(guī)范詳細描述的目的不是為了嚴格地規(guī)定一個冠文件的內容。相反,它提供一個從JavaSoft建議開始的關于什么應該和什么必須包括于冠文件中的詳細討論。同時,我們也提供類似C的聲明中的這個描述中提及的冠文件格式項目的更正規(guī)的規(guī)范。為清楚起見,此處以非優(yōu)化形式規(guī)定這些規(guī)范∥固定表的格式typedefstruct_fixup_table{u1target_aid_cnt;u1target_aid[];u1entries_cnt;fixup_entry_tentries[];};∥固定條目的布局typedefstruct_fixupentry{u1type;u2offset;∥到文本或數據的偏移量union{u2target_offset;∥到目標包的偏移量u2symbol_name;∥到目標恒定存儲區(qū)的名稱和索引}value;}fixup_entry_t;∥個別固定條目類型∥按照偏移量將文本部分或數據部分內的一個16位地址重定位∥這能夠覆蓋類、方法等的地址#defineRELO_TEXT_16BIT_WITH_OFFSET#defineRELO_TEXT_16BIT_WITH_OFFSET∥將一個符號值重定位入文本部分#defineRELO_CLASS_BY_SYM#defineRELO_METHOD_BY_SYM#defineRELO_STATICFIELD_BY_SYM#defineRELO_INSTANCEFIELD_BY_SYM∥恒定存儲區(qū)的布局typedefstruct_constant_pool{u2cnt;cp_item_titems[cnt];};∥恒定存儲區(qū)項目的布局typedefstruct_cp_item{unsignedtype4∥項目類型unsignedname12;∥名稱,若需要的話u2offset∥偏移量};∥恒定存儲區(qū)項目類型#defineCONSTPOOLCLASS#defineCONSTPOOLMETHOD#defineCONSTPOOLSTATICFIELD#defineCONSTPOOLINSTANCEFIELD權利要求1.一種Java運行系統(tǒng),包括一個基于堆棧的解釋器,所述解釋器執(zhí)行一個包括字節(jié)代碼和類結構的程序,所述系統(tǒng)還包括一個修改的恒定存儲區(qū),所述恒定存儲區(qū)具有只在鏈接期間使用的內部信息以及保留以備后期代碼聯編用的外部信息,其中在鏈接以后將所述內部信息從所述修改的恒定存儲區(qū)中移去。2.權利要求1的Java運行系統(tǒng)是一個JavaCard。3.一種用于將新代碼引入Java運行系統(tǒng)的方法,該Java運行系統(tǒng)包括基于堆棧的解釋器,所述解釋器執(zhí)行一個包括字節(jié)代碼和類結構的包,·將所述新代碼與在所述系統(tǒng)中存在的所述包鏈接(內部鏈接),從而將一個只在鏈接時間知道的訪問來替代所述新代碼相對于它本身的偏移量,·從而使用包含于所述包的一個恒定存儲區(qū)內的符號化信息(名稱)來解決外部鏈接,·至少將那些由所述只在鏈接時間知道的訪問所替代的信息從恒定存儲區(qū)內移去。4.權利要求3的方法,其中還將用于與外部包鏈接的信息從所述恒定存儲區(qū)內移去。5.權利要求3的方法,其中所述恒定存儲區(qū)內的余留信息允許以后下載的其他包和小應用程序適當地訪問所述新代碼(后期代碼聯編)。6.權利要求3的方法,其中所述Java運行系統(tǒng)是一個JavaCard。全文摘要建議一個Java運行系統(tǒng),它包括一個基于堆棧的解釋器,該解釋器執(zhí)行一個包括字節(jié)代碼和類結構的程序。該系統(tǒng)還包括一個修改的恒定存儲區(qū),該恒定存儲區(qū)具有只在鏈接期間使用的內部信息以及保留以備后期代碼聯編用的外部信息。在鏈接以后將所述內部信息從所述修改的恒定存儲區(qū)中移去。文檔編號G06F9/50GK1286770SQ98813912公開日2001年3月7日申請日期1998年11月12日優(yōu)先權日1998年3月23日發(fā)明者邁克爾·白恩茨其,彼得·布赫勒,馬庫斯·歐斯特雷徹申請人:國際商業(yè)機器公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宁武县| 周口市| 左贡县| 五寨县| 临高县| 株洲县| 广水市| 无锡市| 偏关县| 图片| 灵宝市| 鹤庆县| 隆子县| 全南县| 赤峰市| 广西| 汝城县| 德保县| 安塞县| 琼中| 岐山县| 昌图县| 定陶县| 镇坪县| 车致| 房产| 昌江| 武川县| 宣汉县| 周宁县| 县级市| 白银市| 盘山县| 澎湖县| 长岛县| 若羌县| 离岛区| 福建省| 靖边县| 永济市| 温州市|