欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

管理協(xié)議、驗證和轉(zhuǎn)換下載程序片斷的方法及對應(yīng)的系統(tǒng)的制作方法

文檔序號:6524990閱讀:215來源:國知局

專利名稱::管理協(xié)議、驗證和轉(zhuǎn)換下載程序片斷的方法及對應(yīng)的系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及用于管理的協(xié)議,對下載的程序片斷驗證和轉(zhuǎn)換的方法,以及對應(yīng)的系統(tǒng),特別著重于就存儲器和計算能力而言具有很少可用資源的板載數(shù)據(jù)處理系統(tǒng)。參見圖1a,一般來說,通常認為板載數(shù)據(jù)處理系統(tǒng)10包括微處理器11,永久存儲器,諸如包含可執(zhí)行程序代碼的非可寫存儲器12,及包含存儲在系統(tǒng)中的數(shù)據(jù)的EEPROM型可重寫非易失永久存儲器15,易失性隨機訪問存儲器14,程序在執(zhí)行時在其中存儲其中間結(jié)果,以及允許系統(tǒng)與其環(huán)境交互的輸入/輸出裝置。在板載數(shù)據(jù)處理系統(tǒng)由板卡型微處理器卡組成的情形下,則輸入/輸出裝置15由串行鏈路組成,允許卡與諸如讀卡器終端等終端通信。在傳統(tǒng)的板載數(shù)據(jù)處理系統(tǒng)中,系統(tǒng)所執(zhí)行的程序代碼在系統(tǒng)構(gòu)成期間,或至少當后者在交付最終用戶之前被定制時,是固定的。然而,更精致的板載數(shù)據(jù)處理系統(tǒng)已經(jīng)實現(xiàn),這些系統(tǒng)是可重編程的,諸如JavaCard型微處理器卡。至于先進的類型,這些可重編程系統(tǒng)通過下載程序片斷,增加了系統(tǒng)投入服務(wù)之后強化程序的可能性。常常由“小應(yīng)用程序”所指的這些程序片斷,在本說明書中不加區(qū)別地指小型應(yīng)用程序或程序片斷。對于JavaCard系統(tǒng)更為詳細的說明,宜參照由SUNMICROSYSTEMSINC.公司發(fā)布的文件,并特別是在www(WorldWideWeb)網(wǎng)址http//java.sun.com/products/javacard/index.html,可用的電子文檔,JavaCard技術(shù)文章,1996年6月。圖1b示出這種可重編程板載數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)。這種結(jié)構(gòu)類似于傳統(tǒng)的板載系統(tǒng),所不同在于,可重編程板載系統(tǒng)還能夠通過其輸入/輸出裝置之一接收小應(yīng)用程序,然后在其永久性存儲器13中存儲這些程序,然后從該存儲器這些程序可被執(zhí)行,作為對主程序的補充。由于不同板載數(shù)據(jù)處理系統(tǒng)之間的可移植性,小應(yīng)用程序以對于標準虛擬機的代碼形式呈現(xiàn)。這種代碼是不能直接由微處理器11執(zhí)行的,而必須由虛擬機16以軟件術(shù)語解釋,該虛擬機是由駐留在非可寫永久性存儲器12中的一個程序組成的。在上述JavaCard卡的例子中,所使用的虛擬機是一Java虛擬機子集。至于有關(guān)Java虛擬機的規(guī)范及所使用的虛擬機的說明,宜參見由TimLINDHOLM和FrankYELLIN公布的著作,標題為“TheJavaVirtualMachineSpecification(Java虛擬機規(guī)范)”,Addison-Wesley1996,并參見由SUNMICROSYSTEMSINC.發(fā)布的文件“JavaCard2.1VirtualMachineSpecification”,電子可用的文檔在www網(wǎng)址http//java.sun.com/products/javacard/JCVMSpec.pdf,1999年3月。向工作中的板載數(shù)據(jù)處理系統(tǒng)下載小應(yīng)用程序的操作造成相當大的安全問題。偶然或甚至是故意地不良寫入的小應(yīng)用程序可能錯誤地修改系統(tǒng)上呈現(xiàn)的數(shù)據(jù),妨礙主程序正確地或在正確的時間執(zhí)行,或修改先前下載的其它小應(yīng)用程序,造成它們不能使用或有害。由計算機黑客所書寫的小應(yīng)用程序也可能泄漏存儲在系統(tǒng)中的機密信息,例如在銀行卡的情形下的訪問代碼等信息。當前,就糾正小應(yīng)用程序安全問題已經(jīng)提出三種解決方案。第一個解決辦法是使用加密簽字,以便只接收來自可信團體或人員的小應(yīng)用程序。在上述銀行卡的例子中,只接收帶有發(fā)卡銀行的加密簽字的小應(yīng)用程序,并由卡執(zhí)行,在下載操作過程中任何其它非簽字小應(yīng)用程序都被拒絕。而一個卡的惡意用戶,由于沒有來自銀行可用的密鑰,于是不可能執(zhí)行卡上非簽字且危險的小應(yīng)用程序。這第一個解決辦法可用于所有小應(yīng)用程序來自同一單一來源的情形,例如上述的銀行。這種解決辦法難以用于小應(yīng)用程序來自若干來源的情形,諸如在銀行卡的例子中,卡的制造商,銀行,通過銀行卡管理服務(wù)的團體,提供客戶誠信程序并合法提出向卡下載小應(yīng)用程序的大型商業(yè)配送組織。對于小應(yīng)用程序的電子簽字所必須的密鑰,在這些各種經(jīng)濟參與者之間共享或持有,則造成主要的技術(shù),經(jīng)濟和法律上的問題。第二個解決辦法是在小應(yīng)用程序執(zhí)行期間,對訪問和鍵入進行動態(tài)檢驗。在這一解決辦法中,在小應(yīng)用程序執(zhí)行期間虛擬機進行一定數(shù)目的檢驗,諸如-檢驗對存儲器的訪問對存儲區(qū)中每一讀和寫,虛擬機檢驗小應(yīng)用程序?qū)τ趯?yīng)數(shù)據(jù)的訪問權(quán)限;-數(shù)據(jù)類型的動態(tài)驗證對來自小應(yīng)用程序的每一指令,虛擬機驗證滿足對數(shù)據(jù)類型的約束。舉例來說,虛擬機可以對諸如有效存儲地址等數(shù)據(jù)進行特別的處理,并通過整數(shù)/地址轉(zhuǎn)換或?qū)Φ刂返乃阈g(shù)運算防止小應(yīng)用程序產(chǎn)生無效存儲地址;-檢測棧溢出及對虛擬機的執(zhí)行棧的非法訪問,在一定的條件下,就前面的檢驗機制來說,它們可能會干擾其操作。這第二個解決辦法允許在安全的條件下執(zhí)行范圍廣泛的小應(yīng)用程序。然而,其缺點是由動態(tài)檢驗范圍所引起的,使執(zhí)行明顯變慢。為了達到降低這種變慢,某些這些驗證可由微處理器本身承擔,然而其代價是增加其本身的復(fù)雜性,并因而增加板載系統(tǒng)的成本。這種驗證還增加了對系統(tǒng)隨機訪問和永久性存儲器的需求,原因是增加的與處理的數(shù)據(jù)相關(guān)所必須的類型信息。第三個解決辦法是在下載期間,對小應(yīng)用程序的代碼進行靜態(tài)驗證。這個解決辦法中,這種靜態(tài)驗證模擬小應(yīng)用程序在數(shù)據(jù)類型級的執(zhí)行,并一勞永逸地確定,小應(yīng)用程序的代碼符合虛擬機所要求的數(shù)據(jù)類型和訪問控制規(guī)則,而不會引起棧溢出。如果這一靜態(tài)驗證成功,則小應(yīng)用程序能夠被執(zhí)行,而不必動態(tài)驗證符合這一規(guī)則。在靜態(tài)驗證過程失敗的情形下,板載系統(tǒng)拒絕“小應(yīng)用程序”,且不允許其隨后的執(zhí)行。對于上述第三個解決辦法更詳細的說明,宜參見以上引述的由TimLINDHOLM和FrankYELLIN公布的著作,參見由JamesA.GOSLING發(fā)表的文章,標題為“JavaIntermediateByteCodes(Java中間字節(jié)代碼)”ACMSIGPLAN會議文集,中間表示法研討會(IR’95),頁111-118,1995,1月,及1998年5月5日授予的美國專利5,748,964。與第二個解決辦法相比,第三個解決方案的優(yōu)點是小應(yīng)用程序執(zhí)行速度快得多,因為在執(zhí)行期間虛擬機不進行任何驗證。然而第三個解決方案的缺點是,不論就進行這一過程所必須的代碼量,包含驗證中間結(jié)果必須的隨機訪問存儲器的大小以及計算時間來說,代碼的靜態(tài)驗證過程復(fù)雜而成本高。舉例來說,集成到由SUNMICROSYSTEMS出售的JavaJDK系統(tǒng)的代碼驗證有大約50kbytes的機器代碼,且其隨機訪問存儲器的耗用量正比于(Tp+Tr)×Nb,其中Tp表示最大棧空間,Tr表示寄存器最大數(shù),而Nb表示由子程序使用的轉(zhuǎn)移目標最大數(shù),也廣泛地由小應(yīng)用程序方法指定。這些存儲器需求大大超過當今大部分板載數(shù)據(jù)處理系統(tǒng)的資源容量,特別是市售微處理器卡。已經(jīng)提出第三個解決方案的幾種變形,其中小應(yīng)用程序的寫入程序向驗證程序除了發(fā)送小應(yīng)用程序代碼之外,還發(fā)送一定量特定的補充信息,諸如預(yù)計算的數(shù)據(jù)類型或正確數(shù)據(jù)類型的預(yù)估計驗證。對于對應(yīng)的操作模式更為詳細的說明,宜參見由EvaROSE與KristoferHGSBROROSE公布的文章,“LightweightBytecodeVerification(輕量字節(jié)代碼驗證)”,ProceedingsoftheWorkshopFormalUnderspinningofJava,1998年10月,以及由GeorgeC.NECULA發(fā)表的“Proof-CarryingCode(證明進位代碼)”,Proceedingsofthe24thACMSymposiumPrinciplesofProgrammingLanuages(第24屆ACM專題研討會編程語言原理),頁106-119。這種補充信息使得能夠更快地驗證代碼并稍微降低了驗證程序的代碼量,然而沒能降低對隨機訪問存儲器的需求,或甚至有相當?shù)脑黾?,特別是在正確數(shù)據(jù)類型預(yù)估計驗證信息的情形下。本發(fā)明的目的是要糾正上述先有技術(shù)的缺點。具體來說,本發(fā)明的一個目的是實現(xiàn)用于管理下載程序片斷或小應(yīng)用程序的協(xié)議,允許后者通過諸如微處理器卡,這種具有很少可用資源的板載數(shù)據(jù)處理系統(tǒng)執(zhí)行。本發(fā)明的另一目的還在于實現(xiàn)驗證下載的程序片斷或小應(yīng)用程序的方法,其中當小應(yīng)用程序被下載時,進行小應(yīng)用程序代碼的靜態(tài)驗證過程,這一過程可能至少在原理上與上述第三個解決辦法類似,但是其中引入了新的驗證技術(shù),因而允許在微處理器卡和其它低性能板載數(shù)據(jù)處理系統(tǒng)所能提供的存儲器大小和計算速度值限制內(nèi),執(zhí)行這種驗證。本發(fā)明的另一目的是實現(xiàn)對所獲得的通常類型的程序片斷進行轉(zhuǎn)換的方法,例如,通過對標準的程序片斷或小應(yīng)用程序使用Java編譯程序,如果優(yōu)先滿足作為本發(fā)明目的的驗證方法的驗證準則,目的是在當前微處理器卡或板載數(shù)據(jù)處理系統(tǒng)水平下,加速驗證和執(zhí)行小應(yīng)用程序的過程。最后,本發(fā)明的另一目的是產(chǎn)生一種板載數(shù)據(jù)處理系統(tǒng),該系統(tǒng)允許實現(xiàn)上述用于管理的協(xié)議,及實現(xiàn)上述驗證下載程序片斷的方法及數(shù)據(jù)處理系統(tǒng),如上所述,允許實現(xiàn)把通常的程序片斷或小應(yīng)用程序轉(zhuǎn)換為標準化的程序片斷或小應(yīng)用程序的方法。作為本發(fā)明的目的,用于管理可重新編程板載系統(tǒng)的下載程序片斷的協(xié)議,特別用于裝有可重寫存儲器的微處理器卡。程序片斷由對象代碼構(gòu)成,這是由板載系統(tǒng)的微處理器可執(zhí)行的一系列指令,通過裝有由這些指令處理的執(zhí)行棧和裝有局部變量或寄存器的虛擬機執(zhí)行,并使得能夠解釋這種對象代碼。板載系統(tǒng)與終端互連。值得注意的是,在檢測用于下載程序片斷的命令時,它至少是在板載系統(tǒng)級構(gòu)成的。在對檢測下載命令的階段有正響應(yīng)時,系統(tǒng)進而讀取構(gòu)成程序片斷的對象代碼,并把這種對象代碼存儲在可重寫存儲器中。存儲在存儲器中的所有對象代碼逐個指令地經(jīng)過驗證過程。驗證過程至少有以下階段,即初始化類型棧和寄存器類型表的階段,這表示虛擬機在開始執(zhí)行暫時存儲的對象代碼時的狀態(tài),以及后繼的階段是,對每一當前指令逐個指令驗證目標,轉(zhuǎn)移指令目標,異常處理程序目標的存在性,并在于驗證和更新當前指令對類型棧和寄存器類型表的效果。在對象代碼不成功驗證的情形下,當省略在可用程序片斷的目錄中記錄程序片斷時,作為本發(fā)明的目的協(xié)議在于刪除暫時記錄的程序片斷,并向閱讀器發(fā)送出錯代碼。作為本發(fā)明的目的,驗證下載到板載系統(tǒng)的程序片斷的方法特別用于裝有可重寫存儲器的微處理器卡。程序片斷由對象代碼組成,并包含至少一個子程序,一系列指令,可由板載系統(tǒng)的微處理器通過裝有由這些指令處理的執(zhí)行棧及操作數(shù)寄存器的虛擬機執(zhí)行,并能夠解釋這種對象代碼。板載系統(tǒng)與閱讀器互連。值得注意的是,在檢測下載命令和在可重寫存儲器中存儲構(gòu)成程序片斷的對象代碼之后,對于每一子程序該方法是執(zhí)行這樣一個階段,即通過數(shù)據(jù)初始化類型棧和寄存器類型表,數(shù)據(jù)表示虛擬機在開始執(zhí)行暫時存儲的對象代碼時的狀態(tài),在于通過對每一當前指令辨別轉(zhuǎn)移指令目標,異常處理程序調(diào)用目標,或子程序調(diào)用目標的存在性,執(zhí)行逐個指令地驗證暫時存儲的對象代碼,并在于基于轉(zhuǎn)移指令目標,目標子程序的調(diào)用或異常處理程序調(diào)用的目標的存在性,執(zhí)行當前指令對類型棧和寄存器類型表的數(shù)據(jù)類型的效果的驗證和更新。當在所有指令驗證過程中寄存器類型表沒有被修改時,驗證是成功的,驗證過程逐個指令進行到寄存器類型表穩(wěn)定,沒有出現(xiàn)修改為止。否則,驗證過程被中斷。作為本發(fā)明的目的,把程序片斷的對象代碼轉(zhuǎn)換為同一程序片斷的標準化對象代碼的方法,用于程序片斷的一種對象代碼,其中每一指令的操作數(shù)屬于由這一指令處理的數(shù)據(jù)類型,執(zhí)行棧不出現(xiàn)任何溢出現(xiàn)象,并對每一轉(zhuǎn)移指令,在這一轉(zhuǎn)移時的棧的變量類型與這一轉(zhuǎn)移的目標處相同。所獲得的標準化對象代碼是這樣的,即每一指令的操作數(shù)屬于由這一指令處理的數(shù)據(jù)類型,執(zhí)行棧不出現(xiàn)任何溢出現(xiàn)象,并在每一轉(zhuǎn)移目標指令處執(zhí)行棧為空。值得注意的是,該方法在于,對所有的對象代碼指令,在這一指令執(zhí)行之前和之后,以執(zhí)行棧的數(shù)據(jù)類型注釋每一當前指令,通過分析與這一指令相關(guān)的數(shù)據(jù)流而計算注釋數(shù)據(jù),在于在這些指令內(nèi)和當前指令內(nèi),檢測執(zhí)行棧非空的轉(zhuǎn)移的存在性,檢測操作是基于分配給每一當前指令的棧變量類型的注釋數(shù)據(jù)而進行的。在出現(xiàn)檢測到非空執(zhí)行棧時,該方法進而在于,在這些轉(zhuǎn)移或這些轉(zhuǎn)移目標的任一側(cè)向轉(zhuǎn)移棧變量插入指令,以便在這一轉(zhuǎn)移之前,把執(zhí)行棧的內(nèi)容清空到臨時寄存器,并在這一轉(zhuǎn)移之后從臨時寄存器重建執(zhí)行棧,并且否則在于不插入任何轉(zhuǎn)移指令。于是,這一方法使得能夠?qū)τ谕怀绦蚱瑪喃@得標準化對象代碼,其中在沒有對程序片斷的執(zhí)行有任何修改時,執(zhí)行棧在每一轉(zhuǎn)移指令及轉(zhuǎn)移目標指令處為空。此外作為本發(fā)明的目的,把程序片斷的對象代碼轉(zhuǎn)換為同一程序片斷的標準化對象代碼的方法,用于程序片斷的對象代碼,其中每一指令的操作數(shù)屬于由這指令處理的數(shù)據(jù)類型,且已由這一對象代碼的指令寫入寄存器的給定類型的操作數(shù),通過這一對象代碼的另一指令以相同的給定的數(shù)據(jù)類型從這同一寄存器重新讀出。所獲得的標準化對象代碼是這樣的,即操作數(shù)屬于由這一指令處理的數(shù)據(jù)類型,在全部標準化對象代碼中同一種數(shù)據(jù)類型分配給同一寄存器。值得注意的是,該方法在于,對于對象代碼的所有指令,在這指令執(zhí)行之前和之后以寄存器數(shù)據(jù)類型注釋每一當前指令,注釋數(shù)據(jù)通過對與此指令相關(guān)的數(shù)據(jù)流的分析被計算,并在于通過把這些原始寄存器劃分為分開的標準化寄存器,對采用不同類型的原始寄存器重新分配。一個標準化寄存器被分配給使用的每一數(shù)據(jù)類型。對處理使用標準化寄存器的操作數(shù)的指令進行重新更新。作為本發(fā)明的目的,用于管理程序片斷的協(xié)議,驗證程序片斷的方法,把程序片斷的對象代碼轉(zhuǎn)換為標準化對象代碼的方法及對應(yīng)的系統(tǒng),在開發(fā)可重編程板載系統(tǒng),諸如微處理器卡,特別是在Java環(huán)境中,找到應(yīng)用。在閱讀說明并細看以下附圖時對它們將能夠更好地理解,其中除了圖1a和1b與先有技術(shù)相關(guān)之外,它們是-圖2示出一流程圖,表示用于管理下載到可重新編程板載系統(tǒng)的程序片斷的協(xié)議,-圖3a示例表示根據(jù)本發(fā)明目的的驗證下載程序片斷方法的一流程圖,-圖3b示出一示意圖,表示通過作為本發(fā)明目的下載程序片斷的管理方法和驗證方法實現(xiàn)的數(shù)據(jù)類型與子類型的關(guān)系,-圖3c表示如圖3a所述的與管理轉(zhuǎn)移指令相關(guān)的驗證方法的細節(jié),-圖3d表示如圖3a所述的與管理子程序調(diào)用指令相關(guān)的驗證方法的細節(jié),-圖3e表示如圖3a所述的與管理異常處理程序目標相關(guān)的驗證方法的細節(jié)-圖3f表示如圖3a所述的與管理不兼容轉(zhuǎn)移的目標相關(guān)的驗證方法的細節(jié),-圖3g表示如圖3a所述的與轉(zhuǎn)移目標的不存在的管理相關(guān)的驗證方法的細節(jié),-圖3h表示如圖3a所述的與管理當前指令對類型棧效果相關(guān)的驗證方法的細節(jié),-圖3i表示如圖3a所述的與管理用于讀取寄存器的指令相關(guān)的驗證方法的細節(jié),-圖3j表示如圖3a所述的與管理用于向寄存器寫入的指令相關(guān)的驗證方法的細節(jié),-圖4a示出一流程圖,表示把程序片斷的對象代碼轉(zhuǎn)換為同一程序片斷的帶有空棧的轉(zhuǎn)移指令分別還有轉(zhuǎn)移目標指令的標準化對象代碼的方法,-圖4b示出一流程圖,表示使用類型寄存器,把程序片斷的對象代碼轉(zhuǎn)換為同一程序片斷的標準化對象代碼的方法,單一特定數(shù)據(jù)類型屬于每一寄存器,-圖5a表示實現(xiàn)圖4a中所示轉(zhuǎn)換方法的細節(jié),-圖5b表示實現(xiàn)圖4b中所示轉(zhuǎn)換方法的細節(jié),-圖6表示用于開發(fā)標準化程序片斷的系統(tǒng)以及可重編程微處理器卡完整結(jié)構(gòu)的功能示意圖,允許實現(xiàn)根據(jù)本發(fā)明的目的管理協(xié)議和驗證程序片斷的方法。一般來說應(yīng)當指出,作為本發(fā)明的目的,管理協(xié)議和驗證與轉(zhuǎn)換下載程序片斷的方法,及對應(yīng)的系統(tǒng)可被實現(xiàn),是由于軟件體系結(jié)構(gòu)用于在帶有很少資源的板載數(shù)據(jù)處理系統(tǒng),特別是諸如微處理器卡上,小應(yīng)用程序的可靠的下載和執(zhí)行。一般來說應(yīng)當指出,以下的說明涉及本發(fā)明在JavaCard型可重編程微處理器卡的場合的應(yīng)用,比較本說明前面開頭提及的來自SUNMICROSYSTEMSINC.公司可得的電子文檔JavaCardTechnology。然而,通過下載以虛擬機代碼書寫的小應(yīng)用程序本發(fā)明可用于任何可重編程的板載系統(tǒng),該虛擬機包含執(zhí)行棧,局部變量或寄存器,其執(zhí)行模型類型明確,小應(yīng)用程序代碼的每一指令只用于特定的數(shù)據(jù)類型。以下將參照圖2更為詳細地說明,作為本發(fā)明的目的,管理下載到可重編程板載系統(tǒng)的程序片斷的協(xié)議。參照上述圖示可見,構(gòu)成程序片斷或小應(yīng)用程序的對象代碼由一系列指令組成,這些指令借助于上述虛擬機可由板載系統(tǒng)微處理器執(zhí)行。虛擬機使得能夠解釋上述對象代碼。板載系統(tǒng)例如通過串行鏈路與終端互連。參照上述圖2,作為本發(fā)明的目的的管理協(xié)議,至少是在階段100a,100b在板載系統(tǒng)中檢測下載這一程序片斷的命令。于是,階段100a可由讀取上述命令的階段組成,而階段100b可由測試已經(jīng)讀取的命令及驗證下載命令的存在性的階段組成。在對上述檢測下載命令的階段100a,100b有正響應(yīng)時,作為本發(fā)明的目的的協(xié)議繼而是在階段101讀取構(gòu)成相關(guān)程序片斷的對象代碼,并把上述對象代碼暫時存儲在板載數(shù)據(jù)處理系統(tǒng)的存儲器中。上述暫時存儲的操作能夠在板載系統(tǒng)的可重寫存儲器執(zhí)行,或如果適宜而有足夠的容量時在隨機訪問存儲器中執(zhí)行。讀取對象代碼并暫時在可重寫存儲器中存儲的階段在圖2中被表示為加載小應(yīng)用程序代碼。然后,上述階段之后是階段102,該階段是向上述對象代碼的驗證過程逐個指令提交所有暫時存儲的對象代碼。驗證過程至少是由初始化類型棧和數(shù)據(jù)類型表階段構(gòu)成,數(shù)據(jù)類型表示虛擬機在開始執(zhí)行暫時存儲的對象代碼的狀態(tài),并在于后繼階段是逐個指令進行驗證,這是通過對每一被指定為Ii的當前指令,辨別諸如已指定CIB的轉(zhuǎn)移指令目標,異常處理程序調(diào)用目標或子程序調(diào)用目標的存在性。就當前指令I(lǐng)i對類型棧和對寄存器類型表的效果進行驗證和更新。當在階段103a驗證已經(jīng)成功時,作為本發(fā)明的目的的協(xié)議在階段104是在可用的程序片斷目錄中記錄下載的程序片斷,并在階段105向閱讀器發(fā)送正的接收確認。另一方面,在階段103b對象代碼不成功驗證的情形下,作為本發(fā)明的目的的協(xié)議是在階段103c禁止在板載系統(tǒng)執(zhí)行任何暫時記錄的程序片斷。禁止階段103c能夠以各種方式實現(xiàn)。作為非限制性例子,這一階段可以在階段106刪除臨時記錄的程序片斷,而不把這一程序片斷記錄在可用的程序片斷目錄中,并在階段107,向閱讀器發(fā)送一出錯代碼。在階段106和104之后階段107和105能夠分別或者按順序?qū)崿F(xiàn),或者對它們進行多任務(wù)化操作實現(xiàn)。參見同一圖2,在對階段100b檢測下載命令階段為負響應(yīng)時,作為本發(fā)明的目的的協(xié)議是在階段108檢測一命令,以便從程序片斷的目錄選擇可用的程序片斷,并在對階段108的響應(yīng)為正時,則已經(jīng)檢測了可用程序片斷的選擇,在階段109調(diào)用這一被選擇的可用程序片斷以便執(zhí)行這一程序片斷。跟隨階段109之后是階段110,由虛擬機執(zhí)行所調(diào)用的可用程序片斷,當每一指令被執(zhí)行時,對變量類型,對調(diào)用的可用程序片斷處理的對象的訪問權(quán),或執(zhí)行棧的溢出,進行動態(tài)驗證。在階段108獲得負響應(yīng)的情形下,這一階段是檢測一命令,以便選擇被調(diào)用的可用程序片斷,作為本發(fā)明的目的的協(xié)議進到階段111,以便處理板載系統(tǒng)的標準命令??紤]到?jīng)]有對類型或訪問例如JavaCard類型對象權(quán)限的動態(tài)驗證,要指出驗證的這種缺失并不影響卡的安全性,因為小應(yīng)用程序代碼必須成功通過驗證。更具體來說,應(yīng)當指出,正如作為本發(fā)明的目的的方法中所述,在微處理器卡或板載數(shù)據(jù)處理系統(tǒng)上所執(zhí)行的代碼驗證,與對于Java虛擬機通常的代碼驗證,如本說明前面提及的標題為“Java虛擬機規(guī)范”工作中所述相比較要有更多的選擇。然而,Java虛擬機的任何代碼,只要就傳統(tǒng)的Java驗證程序來說它是正確的,則就能夠轉(zhuǎn)換為一種等效的代碼,這種代碼能夠成功地通過在微處理器卡上進行的代碼驗證。然而可以想象,直接書寫的Java代碼,它滿足上述在實現(xiàn)作為本發(fā)明的目的協(xié)議的場合所提及的驗證準則,后者明顯的目的也是實現(xiàn)把任何標準的Java代碼自動轉(zhuǎn)換為同一程序片斷的標準化代碼的方法,因而必定滿足上述已實現(xiàn)的驗證準則。隨后將在說明中詳細敘述轉(zhuǎn)換為標準化代碼的方法及對應(yīng)的系統(tǒng)。現(xiàn)在將參照圖3a及隨后的圖示,更為詳細地說明根據(jù)本發(fā)明的目的驗證程序片斷或小應(yīng)用程序的方法。一般來說應(yīng)當指出,作為本發(fā)明目的的驗證方法,能夠或者作為上述參照圖2所述本發(fā)明的目的的管理程序片斷的協(xié)議的部分來實現(xiàn),或者獨立地提供任何必須被判斷的驗證過程。一般來說應(yīng)當指出,程序片斷由包括至少一個子程序的對象代碼組成,更普遍指定的一個方法,是由板載系統(tǒng)的微處理器通過虛擬機可執(zhí)行的一系列指令構(gòu)成。如圖3a所示,對于每一子程序的驗證方法在于執(zhí)行階段200,這是通過數(shù)據(jù)使虛擬機的類型棧和寄存器類型表初始化,這些數(shù)據(jù)表示在開始執(zhí)行作為驗證目的對象代碼時這一虛擬機的狀態(tài)。如上參照作為本發(fā)明的目的的協(xié)議的實現(xiàn)所述,這一對象代碼能夠被暫時存儲。然后,上述的階段200隨后是階段200a,該階段在于把當前索引為i的指令I(lǐng)i的讀取定位在對象代碼的第一指令。階段200a之后是階段201,該階段在于逐個指令地進行上述對象代碼的驗證,這是通過對每一當前指令(指定為Ii),辨別轉(zhuǎn)移指令目標CIB、的異常處理程序調(diào)用目標(指定為CEM)、或子程序調(diào)用CSR的目標的存在性而進行的。驗證階段201之后是階段202,該階段驗證并更新當前指令I(lǐng)i對類型棧和寄存器類型表的數(shù)據(jù)類型的效果,這是對于由另一指令指向的當前指令,作為轉(zhuǎn)移指令目標CIB、子程序調(diào)用目標CSR目標或異常處理程序調(diào)用目標CEM存在性的函數(shù)。對于當前指令I(lǐng)i的階段202之后是階段203,該階段測試是否到達最后的指令,該測試書寫為Ii=對象代碼的最后指令?對測試203的響應(yīng)為負時,過程進到下一個指令204,寫為i=i+1,并返回進到階段201。應(yīng)當指出,當在構(gòu)成對象代碼的所有指令I(lǐng)i的驗證期間寄存器類型表沒有被修改時,則上述在階段202的驗證已經(jīng)成功。為此,提供了對寄存器類型表的穩(wěn)定狀態(tài)存在性的測試205。這一測試寫為?寄存器類型表的穩(wěn)定狀態(tài)。在對測試205正響應(yīng)時,驗證已經(jīng)成功。另一方面,在沒有修改缺失通知的情形下,通過返回階段200a驗證過程被重復(fù)并被重新初始化。表明該過程保證在最大NrxH疊代之后結(jié)束,其中Nr表示使用的寄存器數(shù)目,H表示與子分類關(guān)系有關(guān)的常數(shù)?,F(xiàn)在參照圖3b給出與以上參照圖3a所述驗證過程的過程中處理的變量類型相關(guān)的各種指示。上述變量類型至少包括對應(yīng)于在受到驗證的程序片斷中定義的對象類的類標識符,數(shù)值變量類型至少包括short類型,按p位編代碼的整數(shù),這里p的值可以是16,以及跳轉(zhuǎn)指令JSR的返回地址的類型,這種地址類型定義為retaddr,關(guān)于零對象參照的null類型,關(guān)于對象性質(zhì)的object類型,表示所有類型的交集并且對應(yīng)于值零nul的特定類型⊥,表示所有類型的并集并且對應(yīng)的任何值類型的另一特定類型T。參照圖3b,應(yīng)當指出所有上述變量類型要實現(xiàn)子分類關(guān)系objectεT;short,retaddrεT;⊥εnull,short,retaddr現(xiàn)在參照附錄中表T1所示數(shù)據(jù)結(jié)構(gòu)的第一個例子,給出如圖3a所示驗證過程的一個更具體的例子。上述例子涉及以Java代碼書寫的小應(yīng)用程序。通過指向被驗證的指令I(lǐng)i的指針,驗證過程訪問形成受到驗證的小應(yīng)用程序的子程序的代碼。驗證過程記錄對應(yīng)于上述表T1的例子中saload的當前指令I(lǐng)i的執(zhí)行棧的大小和類型。然后驗證過程通過其類型棧指針在類型棧中記錄當前指令執(zhí)行棧的大小和類型。如本說明以上所述,這種類型棧反映了虛擬機在當前指令I(lǐng)i處執(zhí)行棧的狀態(tài)。在表T1所示的例子中,在將來執(zhí)行指令I(lǐng)i時,棧將包含三個項對C類的對象的參照,對按p=16位編代碼的整數(shù)表的參照,類型short[],以及類型short的p=16位的整數(shù)。這還示于類型棧中,該棧也包含所三個項C,C類對象類型,short[],整數(shù)p=16位和short的表的類型,整數(shù)p=16位的類型。另一值得注意的數(shù)據(jù)結(jié)構(gòu)由整數(shù)型表組成,這種表反映虛擬機寄存器的狀態(tài),即是說存儲局部變量的寄存器的狀態(tài)。繼續(xù)來看表T1中所指的例子,指出寄存器類型表的項0包含類型C,即在將要執(zhí)行當前指令時Ii=saload,保證寄存器0包含對C類對象的參照。在驗證期間處理并存儲在寄存器類型表和類型棧中的各種類型表示在圖3b中。這些類型包括-對應(yīng)于在小應(yīng)用程序中定義的特定對象類的類標識符CB;-基類型,諸如short,按P=16位編代碼的整數(shù),int1和int2,例如分別按2p位編代碼的整數(shù)的最高和最低有效p位,或retaddr,上述指令返回地址;-類型null,表示零對象的參照。關(guān)于子分類關(guān)系,指出如果類型T1的每一有效值也是類型T2的有效值,則類型T1是類型T2的子類。類標識符之間的子分類反映了小應(yīng)用程序的類之間的繼承性體系。關(guān)于其它類型,子分類通過圖3b所示的格定義,其中⊥是所有類型的子類型,并且所有類型是T的子類型。參照上述表T1,驗證形成小應(yīng)用程序的子程序的過程順序如下。驗證過程獨立于小應(yīng)用程序的每一子程序進行。對于每一子程序,過程對相關(guān)子程序的指令進行一次或多次驗證掃描。在附錄的表T2中給出驗證過程的偽代碼。驗證子程序的過程以初始化表T1所示的類型棧和寄存器類型表開始,這種初始化反映了在所考察的子程序執(zhí)行開始時虛擬機的狀態(tài)。類型棧最初是空的,棧指針等于零,且寄存器類型以子程序的參數(shù)類型初始化,表示這樣的事實,即虛擬機掃描這些寄存器中的這一子程序的參數(shù)。由子程序分配的寄存器類型初始化為數(shù)據(jù)類型⊥,表示這樣的事實,即在子程序執(zhí)行的開始,虛擬機把這些寄存器初始化為零。然后,對子程序的指令和每一當前指令I(lǐng)i進行一個或多個驗證掃描。在實施驗證掃描或連續(xù)幾次掃描結(jié)束時,例如,驗證過程判斷在驗證掃描期間,包含在附錄表T1所示的寄存器類型表中的寄存器類型是否已經(jīng)改變。在沒有改變時,驗證終止并向主程序返回一個成功代碼,使得能夠在在圖2所示的管理協(xié)議的階段105發(fā)送正的接收確認。如果出現(xiàn)對上述寄存器類型表的改變,則驗證過程重復(fù)驗證掃描直到包含在寄存器類型表中的寄存器類型穩(wěn)定為止。現(xiàn)在將參照圖3c到3j說明進行一次或多次直到寄存器類型表穩(wěn)定的驗證掃描的特有的順序。對于每一當前指令I(lǐng)i,進行以下驗證參照圖3a在階段201,如上所述,驗證過程判斷當前指令I(lǐng)i是否是轉(zhuǎn)移指令、子程序調(diào)用或異常處理程序調(diào)用的目標。通過檢驗子程序及與這一子程序相關(guān)異常處理程序代碼中的轉(zhuǎn)移指令,進行這一驗證。參見圖3c,該圖示以階段201開始,在當前指令I(lǐng)i是轉(zhuǎn)移指令的目標時,這一條件通過由Ii=CIB表示的測試300實現(xiàn),這一轉(zhuǎn)移是無條件的或有條件的,驗證過程通過測試301在子程序這一點檢驗類型棧為空。在對測試301為正響應(yīng)時,通過標記繼續(xù)A(continueA)的上下文繼續(xù)階段繼續(xù)進行驗證過程。在對測試301響應(yīng)為負時,類型棧不為空,驗證失敗且小應(yīng)用程序被拒絕。這種失敗是由失敗(Failure)階段表示的。參見以繼續(xù)A階段開始的圖3d,在當前指令I(lǐng)i是子程序調(diào)用目標時,這一條件由測試304Ii=CSR實現(xiàn),在測試305中驗證過程驗證前一指令I(lǐng)i-1在序列中沒有繼續(xù)。當前一指令是無條件轉(zhuǎn)移,子程序返回或引起異常時,這一驗證是由測試305實現(xiàn)的。階段305的測試標記如下Ii-1=IBunconditional,返回RSR或引起L-EXCEPT。在對測試305有負響應(yīng)時,驗證過程在失敗階段失敗。另一方面,在對測試305正響應(yīng)時,驗證過程重新初始化類型棧,使得它只包含retaddr類型的一個項,即上述子程序的返回地址。如果在階段304當前指令I(lǐng)i不是子程序的調(diào)用目標,則驗證過程在繼續(xù)B階段處的上下文繼續(xù)。參見圖3e,在當前指令I(lǐng)i是異常處理程序的目標時,這一條件由標記為Ii=CEM的測試307實現(xiàn),其中CEM表示異常處理程序的目標,這一條件是由測試307實現(xiàn)的,標記為Ii=CEM在對測試307正響應(yīng)時,過程通過測試305驗證前一指令是無條件轉(zhuǎn)移,子程序返回或異常的引起,標記為Ii-1=IBunconditional,返回RSR或引起L-EXCBPT。在對測試305正響應(yīng)時,驗證過程進到在階段308的重新更新類型棧,這是通過輸入標記為EXCEPT類型的異常類型進行的,階段308之后是上下文繼續(xù)階段,即繼續(xù)C。在對測試305負響應(yīng)時,驗證過程以標記為失敗(Failure)的階段失敗。參圖3f,在當前指令I(lǐng)i是多個不兼容轉(zhuǎn)移目標時,這一條件由測試309實現(xiàn),它標記為Ii=不兼容XIBs例如不兼容轉(zhuǎn)移是無條件轉(zhuǎn)移和子程序調(diào)用,或兩個不同的異常處理程序。在對測試309正響應(yīng)時,轉(zhuǎn)移是不兼容的,驗證過程以標記為失敗的階段失敗,且程序片斷被拒絕。在對測試309負響應(yīng)時,驗證過程以標記為繼續(xù)D的階段繼續(xù)。測試309以本說明中前面提及的繼續(xù)C階段開始。參見圖3g,在當前指令I(lǐng)i不是任何轉(zhuǎn)移目標時,這一條件由以上述繼續(xù)D開始的測試310實現(xiàn),這一測試標記為Ii轉(zhuǎn)移目標,其中表示存在符號,在對測試310負響應(yīng)時驗證過程繼續(xù),過渡到階段311的類型棧的更新,階段311和對測試310的正響應(yīng)之后是階段202處的上下文繼續(xù)階段,該階段在以上參照圖3a的說明中已說明.現(xiàn)在參照圖3h,給出在上述階段202驗證當前指令對類型棧的效果的階段的更為詳細的說明。根據(jù)上述圖示,這一階段能夠至少包括一個驗證階段400,類型執(zhí)行棧至少包含為當前指令包含的操作數(shù)那樣多的項。這一測試階段400標記為Nbep≥NOpi其中Nbep表示類型棧的項數(shù),而Nopi表示包含在當前指令中的操作數(shù)的數(shù)目。在對測試400正響應(yīng)時,這一測試之后是使類型棧非堆棧的階段401a,以及401b驗證,在棧的頂部項的類型是上述當前指令操作數(shù)類型的子類型。在測試階段401a,指令i的操作數(shù)類型標記為Topi,在棧的項部項的類型標記為Targs。在階段401b,驗證對應(yīng)于子分類關(guān)系Topi的Targs子類型的驗證。在對測試400和401b負響應(yīng)時,驗證過程失敗,這由到失敗階段的通路表示。另一方面,在對測試401b正響應(yīng)時,驗證過程繼續(xù),并在于進行-驗證存在足夠的類型棧存儲器空間,以進行當前指令結(jié)果的棧存儲。這一驗證階段是由測試402實現(xiàn)的,標記為棧-空間≥結(jié)果-空間其中表達式每一邊表示對應(yīng)的存儲器空間。在對測試402負響應(yīng)時,驗證過程失敗,這由失敗階段表示。另一方面,在對測試402正響應(yīng)時,這時驗證過程進到在階段403對指定給結(jié)果的數(shù)據(jù)類型進行棧存儲,棧存儲是在指定給這些結(jié)果的數(shù)據(jù)類型棧上進行的。作為一個非限制性例子應(yīng)當指出,為了實現(xiàn)圖3h驗證當前指令對類型棧的效果,當前指令由對應(yīng)于讀取在整數(shù)表中按p=16位編代碼的整數(shù)元素的Javasaload指令(這整數(shù)表由整數(shù)表和表中的整數(shù)索引定義),以及讀取這表中這一索引處的整數(shù)結(jié)果構(gòu)成,對于這一當前指令,驗證過程檢驗類型棧至少包含兩個元素,在類型棧頂部的這兩個元素分別是short[]和short的子類型,進到非棧存儲過程,并然后進到對作為結(jié)果類型的數(shù)據(jù)類型short進行棧存儲的過程。此外,參見圖3i,為了實現(xiàn)驗證當前指令對類型棧的效果的階段,在當前指令I(lǐng)i是標記為IR的地址n的寄存器的讀指令時,這一條件由標記為Ii=IRn的測試404實現(xiàn),在對上述測試404正響應(yīng)時,驗證過程在階段405通過讀取寄存器類型表中的項n驗證這一讀取結(jié)果的數(shù)據(jù)類型,然后通過對對應(yīng)于這一當前指令操作數(shù)的棧的項的非棧存儲的操作406a,以及通過406b對這一結(jié)果數(shù)據(jù)類型的棧存儲,確定當前指令I(lǐng)i對類型棧的效果。指令I(lǐng)i的操作數(shù)標記為OPi。階段406a和406b之后是返回上下文繼續(xù),即繼續(xù)F。在對測試404負響應(yīng)時,驗證過程以上下文繼續(xù),即繼續(xù)F繼續(xù)進行。參見圖3j,在當前指令I(lǐng)i是標記為IW的地址n的寄存器的寫指令時,這一條件由標記為Ii=IWm的測試實現(xiàn),在對測試407正響應(yīng)時,驗證過程在階段408判斷當前指令對類型棧和寫入地址n的寄存器的操作數(shù)的類型t的效果,然后在階段409,以緊靠在先前存儲的類型之上和寫入地址n的寄存器的操作數(shù)類型t之上的類型,替換地址n處的寄存器類型表的類型項。階段409之后是返回上下文繼續(xù),即繼續(xù)204。在對測試407負響應(yīng)時,驗證過程由上下文繼續(xù),即繼續(xù)204繼續(xù)進行。作為一個例子,在當前指令I(lǐng)i對應(yīng)于把類型D的值寫入地址1的寄存器,且寄存器1的類型在指令驗證之前為C時,則寄存器1的類型由類型object替換,這是圖3b所示的類型格中高于C和D的最小類型。同樣地作為一例,在當前指令I(lǐng)i是對寄存器0的內(nèi)容進行棧存儲的指令aload-0的讀取,且寄存器類型表的項0為C時,則驗證程序把C棧存儲到類型?!,F(xiàn)在將參照附錄中表T3和T4,給出驗證在Java環(huán)境中書寫的子程序的一例。表T3表示對應(yīng)于包含在這一表中的Java子程序的特定JavaCard代碼。表T4表示寄存器類型表和類型棧在每一指令驗證之前的內(nèi)容。對各種指令操作數(shù)的類型約束都可觀察到。在由箭頭表示的指令5轉(zhuǎn)移到指令9之后以及上述轉(zhuǎn)目標9之前棧都是空的。當檢驗到指令1在寄存器1存儲類型null的值時,其初始時為⊥的寄存器1的類型變?yōu)閚ull,即null和⊥的上界,然后當處理指令8在寄存器1中存儲類型short[]的值時,變?yōu)轭愋蛃hort[],即類型short[]和null的上界。如果在第一個驗證掃描期間寄存器1的類型已經(jīng)改變,則進行第二次掃描,分配在第一次結(jié)束時獲得的寄存器類型。這第二次驗證掃描如同第一次掃描那樣成功,且不改變寄存器類型。于是驗證過程成功終止?,F(xiàn)在參見附錄中的表T5給出驗證過程對不正確代碼的四個例子的失敗情形的各種例子-在表T5的點a),作為例子所給出的代碼的目的是使用關(guān)于指點器的算術(shù)過程試圖形成一個無效的對象參照。通過指令2sadd的變元類型的驗證它被拒絕,該指令要求這兩個變元為類型short。-在表T5的點b)和c),代碼的目的是要進行兩種試圖,以便把任何整數(shù)轉(zhuǎn)換為一個對象參照。在點b),寄存器0與類型short,指令0一同使用,而指令5與類型null一同使用。于是,驗證過程向記錄0指定類型T,并當寄存器0作為指令7處的類型object的結(jié)果而被返回時,檢測類型錯誤。-在表T5的點c),一組類型轉(zhuǎn)移“if…then…else…”用來在棧的頂部留下由整數(shù)或?qū)ο髤⒄諛?gòu)成的結(jié)果。驗證過程拒絕這種代碼,因為在從由箭頭表示的指令5向指令9的轉(zhuǎn)移時檢測出棧不是空的。-最后在表T5的點d),代碼包括一個循環(huán),該循環(huán)在每一次疊代的效果是要在棧的頂部棧存儲另外的一個整數(shù),于是在一定數(shù)目的疊代之后將引起棧溢出。驗證過程拒絕這種代碼,在由返回箭頭表示的從指令8向指令0向后轉(zhuǎn)移時通知棧為非空。在轉(zhuǎn)移點棧不是空的。以上參照表T3,T4和T5給出的各種例子表明,作為本發(fā)明的目的的驗證過程是特別有效的,它可適用于小應(yīng)用程序,并特別適用于其子程序,對于它們,棧類型,類型棧的先前空字符,以及到轉(zhuǎn)移指令或轉(zhuǎn)移目標的條件都分別滿足。明顯地,這種驗證過程蘊含著滿足這些準則的寫入對象代碼,這些對象代碼可能對應(yīng)于上述表T3中的子程序。然而,為了保證不一定滿足作為本發(fā)明的目的的方法的驗證準則的現(xiàn)有的小應(yīng)用程序和小應(yīng)用程序的子程序的驗證,特別關(guān)于在Java環(huán)境中書寫的小應(yīng)用程序和子程序,本發(fā)明的目的是要建立把這些小應(yīng)用程序或子程序轉(zhuǎn)換為標準化小應(yīng)用程序或程序片斷的方法,使得能夠成功地進行作為本發(fā)明的目的的驗證方法以及實現(xiàn)這種方法的管理協(xié)議的驗證測試。為此,本發(fā)明的目的是實現(xiàn)用于轉(zhuǎn)換形成小應(yīng)用程序的傳統(tǒng)的對象代碼的方法和程序,這種相關(guān)的小應(yīng)用程序在生成時,它能夠在板載系統(tǒng)或微處理器之外實現(xiàn)這種方法和這種轉(zhuǎn)換程序。作為一個純粹的示例,現(xiàn)在在Java環(huán)境的框架下說明,作為本發(fā)明的目的的把代碼轉(zhuǎn)換為標準化代碼的方法。通過現(xiàn)有的Java編譯程序產(chǎn)生的JVM代碼滿足各種準則,現(xiàn)敘述如下C1每一指令的變元實際上屬于這一指令預(yù)期的類型;C2棧不溢出C`3對于每一轉(zhuǎn)移指令,這一轉(zhuǎn)移處的棧類型與對于這一轉(zhuǎn)移可能的目標處的類型相同;C`4在代碼的一點寫入寄存器的以及在代碼的另一點從同一寄存器再讀取的類型t的值,總是以相同的類型t被再讀取;準則C`3和C`4被為驗證所提供的對象代碼所驗證,作為本發(fā)明的目的的驗證方法的實現(xiàn)蘊含著它們將由以下準則C3和C4代替C3在每一轉(zhuǎn)移指令處及在每一轉(zhuǎn)移目標處棧是空的;C4相同的寄存器由子程序所有的代碼的同一類型使用;參見上述的準則,應(yīng)當指出,Java編譯程序只保證了較弱的準則C`3和C`4。作為本發(fā)明目的的驗證過程及對應(yīng)的管理協(xié)議事實上保證了更嚴格的準則C3和C4,使得能夠保證小應(yīng)用程序執(zhí)行和管理的可靠性。包括代碼向標準化代碼的轉(zhuǎn)換的標準化的概念可表現(xiàn)出各個方面,就以準則C3和C4代替準則C`3和C`4來說,依照作為本發(fā)明的驗證過程,能夠被獨立地實現(xiàn),以保證在每一轉(zhuǎn)移指令處及每一轉(zhuǎn)移目標處棧為空,并還保證對小應(yīng)用程序打開的寄存器分類型,且為相關(guān)小應(yīng)用程序執(zhí)行所指定的單一數(shù)據(jù)類型對應(yīng)于每一打開的寄存器,或另一方面,同時滿足了作為本發(fā)明目的的整個驗證過程。以下將以所述的兩種不同的實現(xiàn)方式說明,把對象代碼轉(zhuǎn)換為本發(fā)明中所述的標準化代碼的方法,第一種實現(xiàn)方式對應(yīng)于把滿足準則C1,C2,C`3,C`4的對象代碼轉(zhuǎn)換為滿足準則C1,C2,C3,C`4的標準化對象代碼,它們對應(yīng)于帶有空轉(zhuǎn)移指令或轉(zhuǎn)移目標的標準化代碼,然后,如所述在第二實現(xiàn)方式中,其中滿足相同初始準則的傳統(tǒng)對象代碼被轉(zhuǎn)換為滿足準則C1,C2,C`3,C4的標準化對象代碼,它們例如對應(yīng)于使用被分類的寄存器的標準化代碼?,F(xiàn)在將參照圖4a說明作為本發(fā)明的目的的代碼轉(zhuǎn)換方法的第一實現(xiàn)方式。在圖4a所示的實現(xiàn)方式中,認為初始的傳統(tǒng)代碼滿足準則C1+C2+C`3,而認為作為轉(zhuǎn)換結(jié)果獲得的標準化代碼要滿足準則C1+C2+C3。根據(jù)上述圖示,對于代碼或子程序的每一當前指令I(lǐng)i,轉(zhuǎn)換方法在階段500,在這一指令執(zhí)行之前和之后對每一指令以棧的數(shù)據(jù)類型進行注釋。注釋數(shù)據(jù)標記為AIi,并對其以相關(guān)的當前指令關(guān)系IiAIi相關(guān)聯(lián)。通過分析與這一指令相關(guān)的數(shù)據(jù)流計算出注釋數(shù)據(jù)。指令執(zhí)行之前和之后的數(shù)據(jù)類型分別標記為tbei和taei。通過分析數(shù)據(jù)流計算注釋數(shù)據(jù)是業(yè)內(nèi)專業(yè)人員所熟知的一種傳統(tǒng)的計算方法,故在此不再詳述。在階段500所實現(xiàn)的操作表示在附錄的表T6中,其中對于包含12個指令的小應(yīng)用程序或小應(yīng)用程序的子程序,引入了由寄存器類型和棧類型構(gòu)成的注釋數(shù)據(jù)AIi。然后上述的階段500之后是階段500a,該階段使索引I定位在第一指令I(lǐng)i=I1。階段500a之后是階段501,該階段是在指令中及每一當前指令I(lǐng)i中檢測標記為IB的轉(zhuǎn)移或其執(zhí)行棧非空的轉(zhuǎn)移目標CIB的存在性。這一檢測501是通過一種測試實現(xiàn)的,該測試是基于分配給每一當前指令的棧變量的類型的注釋數(shù)據(jù)AIi而進行的,對于當前指令該測試標記為Ii是IB或CIB且棧(AI)?空。在對測試501正響應(yīng)時,即呈現(xiàn)出檢測到非空執(zhí)行棧,則上述測試之后是在這些轉(zhuǎn)移IB一側(cè)或在轉(zhuǎn)移目標CIB一側(cè)插入轉(zhuǎn)移棧變量指令的階段,以便在這一轉(zhuǎn)移之前把執(zhí)行棧的內(nèi)容清空到暫時寄存器,并在這一轉(zhuǎn)移之后從暫時寄存器重新建立執(zhí)行棧。在圖4a中該插入階段標記為502。這階段之后是階段503,以測試到達最后的指令,標記為Ii=最后的指令?在對測試503為負響應(yīng)時,進行504的增量i=i+1,進行到下一個指令而返回階段501。在對測試503為正響應(yīng)時起動一結(jié)束階段。在對測試501為負響應(yīng)時,在沒有插入轉(zhuǎn)移指令之下,轉(zhuǎn)換方法通過向階段503轉(zhuǎn)移而繼續(xù)進行。如圖4a所示,把傳統(tǒng)的代碼轉(zhuǎn)換為帶有具空棧轉(zhuǎn)移指令的標準化代碼的方法的實現(xiàn),使得能夠在不對程序片斷的執(zhí)行作任何修改的情形下,獲得對于相同初始程序片斷的標準化對象代碼,其中在每一轉(zhuǎn)移指令處和每一轉(zhuǎn)移目標指令處棧變量的棧為空。在Java的環(huán)境情形下,在棧和寄存器之間轉(zhuǎn)移數(shù)據(jù)的指令是Java虛擬機的load和store指令?,F(xiàn)在返回表T6中引入的例子,該轉(zhuǎn)換方法在指令9處檢測到棧非空的一個轉(zhuǎn)移目標。然后該方法在導(dǎo)致上述指令9的轉(zhuǎn)移指令5之前插入一指令istore1,以便在寄存器1中保存棧的內(nèi)容,并保證該棧在轉(zhuǎn)移時為空。對稱地,在指令9之前插入一指令iload1,以便建立棧的內(nèi)容完全與轉(zhuǎn)移之前一樣。最后,在指令8之后插入指令istore1,以保證棧在導(dǎo)致指令9的兩個通路上平衡。在表T7中示出這樣進行的向標準化代碼轉(zhuǎn)換的結(jié)果?,F(xiàn)在將參照圖4b說明作為本發(fā)明的目的的轉(zhuǎn)換方法的第二個實現(xiàn)方式,所在的情形是,初始的傳統(tǒng)對象代碼滿足準則C1+C`4,而標準化對象代碼滿足準則C1+C4。參見上述圖4b,應(yīng)當指出,按這一實現(xiàn)方式的方法在所述的階段500,與圖4a所示的情形幾乎相同,是在這一指令執(zhí)行之前和之后以寄存器數(shù)據(jù)類型注釋每一指令I(lǐng)i。同樣地,通過分析與這指令相關(guān)的數(shù)據(jù)流計算出注釋數(shù)據(jù)AIi。然后,注釋階段500之后是進行配寄存器重新分配的階段,該階段標記為601,重新分配的進行是通過檢測以不同類型使用的原始寄存器,并把這些原始寄存器劃分為分開的標準化寄存器,一個標準化寄存器分配給使用的每一數(shù)據(jù)類型。階段601之后是階段602,該階段重新更新處理使用上述標準化寄存器的操作數(shù)的指令。階段602之后是上下文繼續(xù)階段302。參見在表T6中給出的例子,應(yīng)當指出,轉(zhuǎn)換方法檢測標記為r0的序號0寄存器用于兩種類型,即object,指令0和1,以及int,指令9及隨后的指令。然后該方法將把原始寄存器r0劃分為兩種寄存器,即用于object類型的寄存器0,及用于int類型的寄存器1。然后通過把它們轉(zhuǎn)換為對記錄1的參照而重寫對int類型的記錄0的參照,獲得的標準化代碼表示在附錄的表T8中.要注意,以非限制性方式在參見上述表T8引入的例子中,新的寄存器1同時用于通過把寄存器0劃分為兩種寄存器而使棧標準化及分類的寄存器的生成。現(xiàn)在,在一優(yōu)選的與圖5a相關(guān)的非限制性例子中,將更為詳細地說明把傳統(tǒng)的代碼轉(zhuǎn)換為帶有具圖4a所示空棧的轉(zhuǎn)移指令的標準化代碼的方法。這一實現(xiàn)方式涉及階段501,該階段在于在指令內(nèi)及當前指令I(lǐng)i內(nèi),檢測轉(zhuǎn)移IB或分別地棧為非空的轉(zhuǎn)移目標CIB的存在性.在判斷棧為非空的目標指令之后,這一條件在階段504a標記為Ii?!倏?,轉(zhuǎn)換過程在上述階段504a使一組新的寄存器與這些指令相關(guān)聯(lián),每一在這些指令處有效的棧單元一個。于是,如果i表示其相關(guān)的棧類型非空的轉(zhuǎn)移目標的序號,且是類型tp1i到tpni,其中n>0,棧非空,則轉(zhuǎn)換過程分配n個新的未使用的寄存器r1到rn,并使它們與對應(yīng)的指令i相關(guān)聯(lián)。該操作在階段504a處實現(xiàn)。階段504a之后是階段504,該階段在于檢驗每一已檢測的序號i的指令,并在測試階段504鑒別轉(zhuǎn)移目標CIB或轉(zhuǎn)移IB的存在性。階段504以由以下所示的測試形式示出?CIB,IB,andIi=CIB。在序號i的指令是由以上等式表示的轉(zhuǎn)移目標CIB,且在這一指令處的棧變量的棧非空,即對測試504的正響應(yīng)的情形下,對由轉(zhuǎn)移組成的序號i-1的每一個前邊指令,異常的引起或程序返回,這一條件在測試階段505實現(xiàn),表示為Ii-1=IB,EXCEPT引起,Prog。返回。被檢測的序號i的指令只能由轉(zhuǎn)移訪問。在對上述測試505正響應(yīng)時,轉(zhuǎn)換過程執(zhí)行階段506,該階段是在相關(guān)的被檢測的序號為i的指令之前插入來自新的寄存器集的一組load類型的加載指令。插入操作506之后是507使所有指向被檢測的序號為i的指令的轉(zhuǎn)移重新定向到第一插入的加載指令load。插入和重新定向操作示于附錄中表T9中。對于按順序連續(xù)進行的序號i-1的每一個前邊指令,即序號i的當前指令可同時由一轉(zhuǎn)移和來自前面指令訪問,這一條件由測試508實現(xiàn),并由以下關(guān)系表示Ii-1→Ii以及IB→Ii轉(zhuǎn)換過程在于階段509,該階段在被檢測的序號i的指令之前插入備份一組新的寄存器的備份指令store,以及從這一組新的寄存器加載的一組加載指令load。然后階段509之后是階段510,該階段是把所有指向被檢測的序號i的指令的轉(zhuǎn)移重新定向到第一插入的加載指令load。在被檢測的序號i的指令是向一已判斷的指令轉(zhuǎn)移的情形下,對于任何由無條件轉(zhuǎn)移構(gòu)成的被檢測的序號i的指令,這一條件由測試511實現(xiàn),標記為Ii=IBuncondit如圖5a所示轉(zhuǎn)換過程在對測試511正響應(yīng)時,在階段512,在檢測的序號i的指令之前插入多個備份指令store。作為一例如表T11所示,轉(zhuǎn)換過程在指令i之前插入n個指令store。指令store尋址寄存器r1到rn,其中n表示寄存器的數(shù)目。這樣,備份指令與每一新的寄存器相關(guān)聯(lián)。對于由條件轉(zhuǎn)移組成的每一被檢測的序號i的指令,以及對于由這一條件轉(zhuǎn)移指令處理的操作數(shù)大于0的數(shù)目mOp,這一條件由測試513實現(xiàn),標記為Ii=IBcondit其中mOp>0在對上述測試513正響應(yīng)時,轉(zhuǎn)換過程在階段514,在被檢測的序號i的指令之前,在序號i的被檢測指令的mOp操作數(shù)及n隨后的值的棧變量的棧的頂部,插入標記為swap_x的置換指令。置換操作使得能夠在棧變量的棧頂部收集n個值以便備份在新的寄存器組r1到rn。階段514之后是階段515,是在序號i的指令之前插入一組備份指令store以便備份新的寄存器集r1到rn。上述插入階段515本身之后是階段516,該階段是在被檢測的序號i的指令之后插入一組加載指令load以便從新的寄存器組r1到rn加載。對應(yīng)的插入操作集在附錄的表12中示出。為了完整性并參見圖5a,應(yīng)當指出,在對測試504負響應(yīng)時,轉(zhuǎn)換過程的繼續(xù)是由上下文繼續(xù)階段即階段503實現(xiàn)的,對測試505,508,511和513的負響應(yīng)本身也是通過上下文繼續(xù)階段即階段503由轉(zhuǎn)換過程的繼續(xù)跟隨的,以及這同樣適用于在上述重新定向階段507和510及插入階段512和516之后的操作的繼續(xù)。現(xiàn)在將參照圖5b給出,使用圖4b所示的已分類型的寄存器,使對象代碼標準化并將其轉(zhuǎn)換為標準化對象代碼的方法更為詳細的說明。更具體來說,這一實現(xiàn)方式涉及階段601的這一非限制性的優(yōu)選實現(xiàn)方式,以便通過檢測用于不同類型的原始寄存器而重新分配寄存器。參見上述圖5b,要指出的是上述階段601在于在階段603判斷標記為IDj的每一寄存器rj的生命區(qū)間。這些生命區(qū)間,表示為“l(fā)iverange”或“webs”,對一個寄存器r定義為局部跡的最大集,使得寄存器r在這些跡的所有點處都是生存的。這些概念更為詳細的定義宜參見由StevenS.MUCHNIK編輯的著作,標題為“AdvancedCompilerDesignandImplementation”,16.3節(jié),MorganKAUFMANN,1997。階段603由以下關(guān)系表示IDjrj其中所述對應(yīng)的的生命區(qū)間IDj與每一寄存器rj相關(guān)聯(lián)。上述階段603之后是階段604,是在階段604判斷標記為tpj的每一生命區(qū)間IDj的主數(shù)據(jù)類型。對于寄存器rj生命區(qū)間IDj的主類型是由屬于上述生命區(qū)間的備份指令sotre存儲在這一寄存器rj中的數(shù)據(jù)類型的上界定義的。階段604本身之后是階段605,這階段在于在如以上階段603和604定義的生命區(qū)間之間建立一種干擾圖,這種干擾圖由非有向圖構(gòu)成,其每一頂點由生命區(qū)間構(gòu)成,而如果頂點包含對其它頂點的寄存器尋址的備份指令則其在圖5b中標記為aj1,j2的兩個頂點IDj1和IDJ2之間的弧存在,或反之也然。圖5b中,干擾圖的結(jié)構(gòu)被示意性表示出,基于業(yè)內(nèi)專業(yè)人員所知道的計算技術(shù)能夠?qū)崿F(xiàn)這種結(jié)構(gòu)。對于這類圖的結(jié)構(gòu)更詳細的描述,宜參見由AlfredV.AHO,RaviSETHI及JeffreyD.ULLMAN發(fā)表的著作,標題為“Compilersprinciples,techniques,andtools”,Addison-Wesley1986,Section9.7。階段605之后,圖5b所示的標準化方法在階段606,通過在頂點對的兩個頂點沒有同一相關(guān)的主數(shù)據(jù)類型時,在干擾圖的所有頂點對之間添加弧,轉(zhuǎn)化分配給干擾圖中每一寄存器rj的數(shù)據(jù)類型的唯一性。應(yīng)當理解到,分配給每一寄存器的數(shù)據(jù)類型的唯一性的字符轉(zhuǎn)化明顯對應(yīng)于轉(zhuǎn)化并把準則C4納入干擾圖,這一準則在說明的前面提及。然后,上述階段606之后是階段607,其中進行干擾圖的示例化,這種示例化更一般地表示為如通常的技術(shù)所述的干擾圖的繪圖階段。在階段607期間,轉(zhuǎn)換過程向每一生命區(qū)間IDjk指定一檢寄存器號碼rk,使得干擾圖中兩個鄰接的區(qū)間收到不同的寄存器號碼。能夠基于任何適當?shù)倪^程實現(xiàn)這一操作。作為一非限制性例子,指出一種優(yōu)選的過程可以是a)在干擾圖中選擇最小階頂點,最小階定義為鄰接頂點最小數(shù),并從圖中取消它。這階段能夠被重復(fù)直到圖變?yōu)榭铡)每一先前取消的頂點按它們?nèi)∠姆葱虮恢匦乱敫蓴_圖,最后被取消的頂點是首先引入的頂點,即按取消順序的反序順序進行。于是能夠向每一被重新引入的頂點指定不同于指定給所有鄰接頂點號碼的最小寄存器號碼。最后,通過示于圖4b中的階段602,轉(zhuǎn)換和重新分配過程向相關(guān)小應(yīng)用程序的子程序的代碼中的寄存器重新寫入訪問指令。在對應(yīng)的的生命區(qū)間內(nèi)訪問給定的寄存器由訪問不同的寄存器代替,其號碼是在示例化階段被指定的,還指定繪圖階段?,F(xiàn)參照圖6給出板載數(shù)據(jù)處理系統(tǒng)以及小應(yīng)用程序開發(fā)系統(tǒng)的詳細說明,該板載數(shù)據(jù)處理系統(tǒng)使得能夠?qū)崿F(xiàn)如本發(fā)明的目的中所述的程序片斷或小應(yīng)用程序的管理協(xié)議和驗證過程。關(guān)于帶有標號10的對應(yīng)的的板載系統(tǒng),回憶起這一板載系統(tǒng)就是包括如圖1b中所示主要組件的可重編程型系統(tǒng)。認為上述的板載系統(tǒng)通過串行鏈路與終端互連,終端本身例如通過局域網(wǎng)連接,如果有適當?shù)倪h程網(wǎng)絡(luò),則連接到標號為20的小應(yīng)用程序開發(fā)計算機。在板載系統(tǒng)10上運行一主程序,該主程序讀取并執(zhí)行終端在串行鏈路上發(fā)送的命令。此外,微處理器卡的標準命令,諸如ISO7816協(xié)議的標準命令,能夠被實現(xiàn),且主程序識別兩個附加的命令,一個用于小應(yīng)用程序的遠程加載,另一個用于選擇先前已經(jīng)加載到微處理器卡的小應(yīng)用程序。根據(jù)本發(fā)明的目的,主程序的結(jié)構(gòu)是這樣實現(xiàn)的,即遵循參照圖2的說明中如上所述用于管理下載程序片斷的協(xié)議,包含至少一個用于管理和驗證下載的序片斷的程序模塊。此外,遵循在參照圖3a到3j的說明中以上所述的驗證方法,該程序模塊還包含一子程序模塊以便驗證下載程序片斷。因此,存儲器的結(jié)構(gòu),特別是非可寫永久性存儲器ROM,被這樣修改,使得除了主程序之外特別包含如上所述的一個協(xié)議管理和驗證模塊17。最后,關(guān)于EEPROM型的非易失可重寫存儲器,最好包含一個小應(yīng)用程序目錄,標記為18,使得能夠?qū)崿F(xiàn)作為本發(fā)明的目的的管理協(xié)議和驗證過程。參見同一圖6,應(yīng)當指出,根據(jù)本發(fā)明的目的的小應(yīng)用程序開發(fā)系統(tǒng),實際上如說明中以上所述使得能夠把傳統(tǒng)的滿足Java環(huán)境框架中的準則C1+C2+C`3+C`4的對象代碼,轉(zhuǎn)換為同一程序片斷的標準化對象代碼,與傳統(tǒng)的Java編譯器21相關(guān),包含標記為22的一個代碼轉(zhuǎn)換模塊,正如以上參照圖4a,4b和5a和5b的說明中的第一實現(xiàn)方式和第二實現(xiàn)方式所述,該模塊進行把代碼轉(zhuǎn)換為標準化代碼。事實上應(yīng)當理解,一方面,原始對象代碼標準化為帶有空棧的轉(zhuǎn)移指令的標準化對象代碼,并使用劃分類型的寄存器轉(zhuǎn)換為標準化代碼,另一方面,如說明中以上所述,使得能夠滿足由作為本發(fā)明的目的的驗證方法施加的驗證準則C3和C4。代碼轉(zhuǎn)換模塊22之后是JavaCard轉(zhuǎn)換器23,該轉(zhuǎn)換器使得能夠保證通過遠程或局域網(wǎng)向終端,并通過串行鏈路向微處理器卡10傳輸。于是,圖6所示的小應(yīng)用程序開發(fā)系統(tǒng)20使得能夠把由Java編譯器21從小應(yīng)用程序的Java源代碼產(chǎn)生的已編譯的類文件,轉(zhuǎn)換為等效的但是符合額外的約束C3,C4的類文件,這些約束是由板載微處理器卡10的管理協(xié)議和驗證模塊施加的。這些已轉(zhuǎn)換的類文件在卡上由標準的JavaCard轉(zhuǎn)換器23轉(zhuǎn)換為可下載的小應(yīng)用程序?,F(xiàn)在給出作為本發(fā)明的目的的協(xié)議成分,方法和系統(tǒng)集合值得注意的各種組成部分,只供參考。與說明書引言中提及的先有技術(shù)驗證過程相比較,作為本發(fā)明的目的的驗證方法值得注意的表現(xiàn)在于,該方法把驗證的著重點集中在操作數(shù)的劃分類型的性質(zhì)上,即遵從與每一指令相關(guān)的類型約束且沒有棧溢出,它們對于每一小應(yīng)用程序的執(zhí)行的可靠性是至關(guān)重要的。其它的驗證就可靠性而言沒有顯現(xiàn)出重要性,特別是在第一次讀取代碼之前代碼正確初始化每一寄存器的驗證。反之,作為本發(fā)明的目的的驗證方法,是通過在方法被初始化時把所有來自的虛擬機的寄存器初始化為零而操作的,以便保證讀取非初始化的寄存器不會削弱卡的可靠性。此外,由作為本發(fā)明的目的的驗證方法施加的要求,如所述其中在每一轉(zhuǎn)移或轉(zhuǎn)移目標指令處棧必須是空的,這保證了在轉(zhuǎn)移執(zhí)行之后,以及程序已經(jīng)轉(zhuǎn)移到的指令執(zhí)行之前,棧處于相同的空的狀態(tài)。這種操作方式保證了棧處于一致的狀態(tài),而不論通過相關(guān)的子程序或小應(yīng)用程序的代碼被跟隨的執(zhí)行程序如何。這樣,即使存在轉(zhuǎn)移或轉(zhuǎn)移目標,也保證了棧的一致性。先有技術(shù)的方法和系統(tǒng)中必須在隨機訪問存儲器中保留每一轉(zhuǎn)移目標的棧類型,這必須有正比于Tp×Nb的隨機訪問存儲器的量,Tp×Nb是所使用的執(zhí)行棧大小與代碼中轉(zhuǎn)移目標數(shù)的乘積,與此相反,作為本發(fā)明的目的的驗證方法只需要驗證期間指令時間的執(zhí)行棧類型,并不在代碼的其它點在存儲器中保持這種棧類型。因而,與Tp成正比,而與Nb無關(guān)的,于是與子程序或小應(yīng)用程序的代碼的長度成正比的隨機訪問存儲器的量,即可滿足作為本發(fā)明的目的的方法。準則C中所述的要求,其中所述給定的寄存器必須在子程序所有代碼中與同一類型使用,保證了上述代碼不會以不一致的方式使用一寄存器,例如,在程序的一點向寄存器寫入short整數(shù),而在程序的另一點作為對象參照讀取之。在先有技術(shù)中所描述的驗證過程中,特別是在先前提及的由TimLINDHOLM和FrankYELLIN編輯的標題為“TheJavaVirtualMachineSpecification”的Java規(guī)范中,為了保證上述通過轉(zhuǎn)移指令使用的一致性,必須在隨機訪問存儲器中保持每一轉(zhuǎn)移目標處的寄存器類型的表的拷貝。這種操作必須有正比于Tr×Nb的隨機訪問存儲器的量,其中Tr表示由子程序使用的寄存器數(shù)目,而Nb表示這一子程序的代碼中轉(zhuǎn)移目標數(shù)。與此相反,作為本發(fā)明的目的的驗證過程在寄存器類型的全局表上進行操作,而無需在隨機訪問存儲器中保持代碼的不同點處的拷貝。因而為了實現(xiàn)驗證過程所需的隨機訪問存儲器與Tr成正比而與Nb無關(guān),于是與相關(guān)的子程序代碼長度成正比。如所述在所有的點,即在相關(guān)代碼的每一指令處,給定的寄存器要與同一類型使用這樣的限制,相當程度地簡化了子程序的驗證。反之,在先有技術(shù)的驗證過程中,在沒有這種限制的情形下,驗證過程必須建立嚴格的棧規(guī)則,并必須關(guān)于一定的寄存器類型多方面驗證子程序體??傊?,與先有技術(shù)相比,作為本發(fā)明的目的的驗證過程,一方面使得能夠降低執(zhí)行驗證方法的程序代碼量,另一方面,能夠降低在驗證操作期間隨機訪問存儲器的消耗,在作為本發(fā)明的目的的驗證過程的情形下復(fù)雜度為O(Tp+Pr)形,而不是對于先有技術(shù)驗證過程的(O(Tp+Pr)×Nb),然而卻提供了關(guān)于被驗證代碼執(zhí)行的可靠性的同樣的保證。最后,把原始的傳統(tǒng)的代碼轉(zhuǎn)換為標準化代碼是通過代碼的本地化的轉(zhuǎn)換實現(xiàn)的,而無需向驗證器組件,即微處理器卡或板載數(shù)據(jù)處理系統(tǒng)傳輸額外的信息。關(guān)于圖4b和5b中所述的重新分配寄存器的方法,這種方法不同于已知的先有技術(shù)的方法,如美國專利4,571,678和5,249,295中具體所述的方法,不同在于以下事實-寄存器重新分配保證了同一寄存器不會分配給兩個帶有不同主類型的區(qū)間,這樣就保證了給定的寄存器在所有代碼中與同一類型使用;以及-在以上文獻中所述的現(xiàn)有的寄存器分配算法假設(shè)固定數(shù)目的寄存器,并試圖使在寄存器和棧之間的轉(zhuǎn)移最小化,稱為“溢出(spills)”,然而,作為本發(fā)明的目的中所述的寄存器重新分配以寄存器總數(shù)可變的框架操作,其結(jié)果是當進行使寄存器總數(shù)最小化的過程時,不必在寄存器與棧之間進行轉(zhuǎn)移。作為本發(fā)明的目的的管理下載到板載系統(tǒng)的程序片斷的協(xié)議,以及分別驗證這種下載的程序片斷對象代碼及轉(zhuǎn)換這種下載的程序片斷對象代碼的方法,當然能夠以軟件實現(xiàn)。因而,本發(fā)明還涉及能夠直接加載到可重新編程的板載系統(tǒng)的內(nèi)部存儲器的計算機程序產(chǎn)品,這種板載系統(tǒng)使得能夠下載由對象代碼即一系列指令組成程序片斷,這種對象代碼可由板載系統(tǒng)的微處理器以虛擬機的方式執(zhí)行,該虛擬機裝有執(zhí)行棧和本地寄存器或通過這些指令處理的變量,使得這種代碼能夠被解釋。對應(yīng)的計算機程序產(chǎn)品包含對象代碼部分,以便當這種板載系統(tǒng)與終端互連且這種程序由這種板載系統(tǒng)以虛擬機的方式執(zhí)行時,執(zhí)行用于管理下載到這種板載系統(tǒng)的程序片斷的協(xié)議,如以上說明中所述的圖2和6所示。本發(fā)明還涉及一種計算機程序產(chǎn)品,該產(chǎn)品可直接加載到諸如帶有可重寫存儲器的微處理器卡,這種可重新編程的板載系統(tǒng)的內(nèi)部存儲器。這種計算機程序產(chǎn)品包含對象代碼部分,以便執(zhí)行對下載到這種板載系統(tǒng)的程序片斷進行驗證的的階段,如以上說明中參照圖3a到3j圖所示和所述。當這種板載系統(tǒng)與終端互連,且這種程序通過這種板載系統(tǒng)由虛擬機執(zhí)行時,執(zhí)行這種驗證。本發(fā)明還涉及一種計算機程序產(chǎn)品;這計算機程序產(chǎn)品包含對象代碼部分,以執(zhí)行把程序片斷的對象代碼轉(zhuǎn)換為這同一程序片斷的標準化對象代碼的轉(zhuǎn)換方法的各階段,如圖4a,4b,5a,5b所示,及本說明中以上所述。本發(fā)明還涉及一種計算機程序產(chǎn)品,該產(chǎn)品記錄在可用在可重新編程的板載系統(tǒng)中的介質(zhì)上,例如裝有可重寫存儲器的微處理器,這種板載系統(tǒng)使得能夠下載由對象代碼組成的程序片斷,這種對象代碼可由這種微處理器以虛擬機方式執(zhí)行,虛擬機裝有執(zhí)行棧及通過這些指令處理的本地變量或寄存器,以便允許對這種對象代碼進行解釋。上述的計算機程序產(chǎn)品至少包含可由板載系統(tǒng)的微處理器通過虛擬機讀取的程序模塊,以便命令執(zhí)行用于對被下載的程序片斷進行下載管理的過程,如圖2所示并如以上說明中所述,一種可由微處理器通過虛擬機讀取的程序模塊,以便命令執(zhí)行用于逐個指令驗證構(gòu)成這種程序片斷的對象代碼的過程,如以上說明中參照圖3a到3j所示和所述,以及一種可由這種板載系統(tǒng)通過虛擬機讀取的程序模塊,以便把這種程序片斷的對象代碼轉(zhuǎn)換為同一程序片斷的標準化對象代碼之后或在沒有這樣作的情形下,命令執(zhí)行被下載的程序片斷,如圖2所示。上述的計算機程序產(chǎn)品還包含可由微處理器通過虛擬機讀取的一個程序模塊,以便在上述程序片斷不成功驗證過程的情形下,命令在板載系統(tǒng)上禁止執(zhí)行該程序片斷,如以上參照圖2的說明中所示和所述。表2驗證程序模塊的偽代碼驗證程序模塊的偽代碼所使用的全局變量Tr當前方法要求的寄存器數(shù)Tp當前方法要求的棧最大容量tr[Tr]寄存器類型表(圖4中的402)tp[Tp]棧類型(圖4中的403)pp棧指針(圖4中的404)chg指示tr是否已被改變的標志初始化pp→0初始化來自方法的n個變元的類型tp…tp[n-1]初始化tp[n]...tp[Tr-1]為⊥初始化chg為真當chg為真時復(fù)位chg為假定位在方法的第一指令當沒有到達方法的結(jié)束時如果當前指令是一轉(zhuǎn)移指令的目標如果pp≠0,驗證失敗如果當前指令是一子程序調(diào)用的目標如果先前的指令按順序繼續(xù)進行,則失敗取tp←etaddr以及pp←1如果當前指令是C類異常處理程序如果先前的指令按順序繼續(xù)進行,則失敗作tp←C以及pp←1如果當前指令是不同種類的目標驗證失敗判斷指令變元的類型a1…an如果pp<n,則失敗(棧溢出)對于i=1,…,n如果tp[pp-n-i1]不是ai的子類型,則失敗作pp←pp-n判斷指令結(jié)果的類型r1,…,rn如果pp+m≥Tp,則失敗(棧溢出)對于i=1,…,m,作tp[pp+i-1]?ri作pp←pp+m如果當前指令是向一寄存器r寫入判斷向記錄寫入的值的類型t作tr[r]←lowerbound(t,tr[r])如果tr[r]已經(jīng)改變,作chg←真如果當前指令是一轉(zhuǎn)移如果pp≠0,驗證失敗進到下一個指令返回驗證成功代碼表T3<prelisting-type="program-listing"><![CDATA[staticshort[]meth(short[]table){short[]result=null;if(tablelength>=2)result=table;returntable}]]></pre>表T4表T5表T6表T7表T8表T9表T10表T11表T12權(quán)利要求1.一種用于管理程序片斷的協(xié)議,程序片斷是下載到諸如裝有可重寫存儲器的微處理器卡這種可重編程板載系統(tǒng)的,所述程序片斷由對象代碼即一系列指令組成,對象代碼可由板載系統(tǒng)的微處理器通過虛擬機執(zhí)行,虛擬機帶有執(zhí)行棧并帶有通過這些指令處理的局部變量或寄存器,并使得能夠解釋這些對象代碼,所述板載系統(tǒng)與終端互連,其特征在于這種協(xié)議在所述板載系統(tǒng)級上至少包括a)檢測用于下載這種程序片斷的命令;并在對這一階段正響應(yīng)時檢測下載命令,b)讀取構(gòu)成這種程序片斷的對象代碼并暫時存儲這種對象代碼;c)使所有暫時存儲在存儲器中的對象代碼經(jīng)受驗證過程,這一驗證過程至少包括初始化類型棧和寄存器類型表階段,它們表示所述虛擬機在開始執(zhí)行暫時存儲的對象代碼時的狀態(tài),并且包括以下后繼的階段,通過對每一當前指令判斷目標、轉(zhuǎn)移指令目標、異常處理程序調(diào)用目標、或子程序調(diào)用目標的存在性,逐個指令地進行驗證,并且包括驗證和更新所述當前指令對類型棧和寄存器類型表的效果,并且在所述對象代碼的成功驗證的情況下,d)把下載的程序片斷記錄在可用的程序片斷的目錄中,并在所述對象代碼的不成功驗證的情況下,e)在所述板載系統(tǒng)上禁止所述程序片斷的執(zhí)行。2.如權(quán)利要求1所述的協(xié)議,其特征在于所述禁止執(zhí)行的階段e)包括f)當省略在所述可用程序片斷的目錄中記錄后者時,刪除暫時記錄的程序片斷,以及g)向所述閱讀器發(fā)送出錯代碼。3.如權(quán)利要求1或2所述的協(xié)議,其特征在于,在對所述檢測下載目錄的階段a)是負響應(yīng)時,則包括b`)檢測一命令,該命令是從程序片斷目錄選擇一可用程序片斷;并在對這階段為正響應(yīng)時,檢測選擇可用程序片斷的命令;c`)調(diào)用所述已被選擇的可用程序片斷;d`)通過虛擬機執(zhí)行所述被調(diào)用的可用程序片斷,當每一指令被執(zhí)行時,對于變量類型、對于由所調(diào)用的可用程序片斷處理的對象的訪問權(quán),或?qū)τ趫?zhí)行棧的溢出不進行動態(tài)驗證,并且在對這一階段是負響應(yīng)時,檢測選擇可用程序片斷的命令,e`)前進到處理板載系統(tǒng)的標準命令。4.一種驗證程序片斷的方法,程序片斷是下載到諸如裝有可重寫存儲器的的微處理器卡這種可重編程板載系統(tǒng)的,所述程序片斷由對象代碼組成,并至少包含一個子程序即一系列指令,驗證是通過板載系統(tǒng)的微處理器由虛擬機進行的,虛擬機帶有執(zhí)行棧及由這些指令處理的操作數(shù)寄存器,并使得能夠解釋這種對象代碼,所述板載系統(tǒng)與閱讀器互連,其特征在于所述方法在檢測下載命令并把構(gòu)成程序片斷的所述對象代碼存儲到所述可重寫存儲器中之后,對于每一子程序α)通過數(shù)據(jù)進行使類型棧和寄存器類型表初始化的階段,這些數(shù)據(jù)表示虛擬機在開始執(zhí)行暫時存儲的對象代碼時的狀態(tài);β)通過對每一當前指令判斷目標、轉(zhuǎn)移指令目標、異常處理程序調(diào)用目標或子程序調(diào)用目標的存在性,逐個指令地對所述暫時存儲的對象代碼指令進行驗證;γ)基于轉(zhuǎn)移指令目標、子程序調(diào)用目標或異常處理程序調(diào)用目標的存在性,就所述當前指令對所述類型棧和所述寄存器類型表的數(shù)據(jù)類型的效果進行驗證和更新,當寄存器類型表在所有指令的驗證過程中沒有被修改時,所述驗證是成功的,并且驗證過程逐個指令地進行直到寄存器類型表穩(wěn)定而沒有修改出現(xiàn)為止,否則驗證過程被中斷。5.如權(quán)利要求4所述的驗證方法,其特征在于,在驗證過程期間被處理的變量類型至少包含-對應(yīng)于在程序片斷中定義的對象類的類標識符;-數(shù)值變量類型,至少包含類型short,按p位編碼的整數(shù),以及用于跳轉(zhuǎn)指令JSR的返回地址的類型retaddr;-與零對象的參照相關(guān)的類型null;-與對象相關(guān)的類型object;-第一特定類型⊥,表示所有類型的交集并且對應(yīng)于值0,nil;-第二特定類型T,表示所有類型的并集并且對應(yīng)于任何值的類型。6.如權(quán)利要求5所述的方法,其特征在于,所有所述變量類型驗證子類型分類關(guān)系objectεT;short,retaddrεT;⊥εnull,short,retaddr。7.如權(quán)利要求4到6之一中所述的方法,其特征在于,當所述當前指令是轉(zhuǎn)移指令的目標時,所述驗證方法包括驗證類型棧是空的,在肯定的驗證的情形下,驗證過程對隨后的指令繼續(xù)進行,否則驗證過程失敗且程序片斷被拒絕。8.如權(quán)利要求4到7之一中所述的方法,其特征在于,當所述當前指令是子程序調(diào)用的目標時,所述驗證過程驗證前一指令是無條件轉(zhuǎn)移,子程序返回或異常的引起,在肯定的驗證的情形下,驗證過程進到通過retaddr類型實體,子程序的返回地址,重新更新變量類型棧,否則驗證過程失敗且程序片斷被拒絕。9.如權(quán)利要求4到8之一中所述的方法,其特征在于,在當前指令是異常處理程序的目標時,所述驗證過程驗證前一指令是無條件轉(zhuǎn)移,子程序返回或異常引起,在肯定的驗證的情形下,所述驗證過程進到通過輸入異常類型而重新更新類型棧,否則驗證過程失敗且程序片斷被拒絕。10.如權(quán)利要求4到9之一中所述的方法,其特征在于,在當前指令是多個不兼容轉(zhuǎn)移的目標時,驗證過程失敗且程序片斷被拒絕。11.如權(quán)利要求4到10之一中所述的方法,其特征在于,在當前指令不是任何轉(zhuǎn)移目標時,驗證過程通過過渡到類型棧的更新而繼續(xù)。12.如權(quán)利要求4到11之一中所述的方法,其特征在于,當前指令對類型棧的效果的驗證階段至少包含-驗證類型執(zhí)行棧至少包含象當前指令包含的操作數(shù)那么多的項的階段;-非棧存儲及驗證棧的頂部項的類型是這一指令的操作數(shù)的操作數(shù)的類型的子類型的階段;-驗證類型棧上有足夠的存儲空間存在以便進到對當前指令結(jié)果進行棧存儲的階段;-在棧上把指定給這些結(jié)果的數(shù)據(jù)類型進行棧存儲的階段。13.如權(quán)利要求12所述的方法,其特征在于,在當前指令是對地址n的寄存器進行讀取的指令時,驗證過程包括-通過讀取寄存器類型表中的項n,驗證這一讀取結(jié)果的數(shù)據(jù)類型;-通過使對應(yīng)于這一當前指令操作數(shù)的棧的項作非棧存儲,并通過對這一結(jié)果的數(shù)據(jù)類型作棧存儲,判斷當前指令對類型棧的效果;14.如權(quán)利要求12所述的方法,其特征在于,在當前指令是對地址m的寄存器進行寫入的指令時,驗證過程包括-判斷當前指令對類型棧和已寫入地址m的這一寄存器的操作數(shù)的類型t的效果;-以緊接在先前存儲的類型之上以及已寫入地址m的這一寄存器的操作數(shù)的類型t之上的類型,代替地址m處的寄存器類型表的類型項。15.一種把程序片斷對象代碼轉(zhuǎn)換為同一程序片斷的標準化對象代碼的方法,在轉(zhuǎn)換前的對象代碼中,每一指令的操作數(shù)屬于由這一指令處理的數(shù)據(jù)類型,執(zhí)行棧對每一轉(zhuǎn)移指令不出現(xiàn)任何溢出現(xiàn)象,這一轉(zhuǎn)移的棧變量的類型與這一轉(zhuǎn)移的目標處的類型相同,在轉(zhuǎn)換后標準化對象代碼中,每一指令的操作數(shù)屬于由這一指令處理的數(shù)據(jù)類型,執(zhí)行棧不出現(xiàn)任何溢出現(xiàn)象,執(zhí)行棧在每一轉(zhuǎn)移指令處及每一轉(zhuǎn)移目標指令處為空,其特征在于,對于所述對象代碼的所有指令這一方法包括-以這一指令執(zhí)行前及執(zhí)行后的棧的數(shù)據(jù)類型注釋每一當前指令,通過分析與這一指令相關(guān)的數(shù)據(jù)流計算出注釋數(shù)據(jù);-在所述指令內(nèi)及每一當前指令內(nèi)檢測轉(zhuǎn)移或分別是轉(zhuǎn)移目標的存在性,其所述執(zhí)行棧是非空的,基于分配給每一當前指令的棧變量類型的注釋數(shù)據(jù),并在非空執(zhí)行棧的檢測存在時,進行檢測操作,-插入指令以便在這些轉(zhuǎn)移或這些轉(zhuǎn)移的目標任何一側(cè)轉(zhuǎn)移棧變量,以便分別在這一轉(zhuǎn)移之前把執(zhí)行棧內(nèi)容清空到臨時寄存器,并且在這一轉(zhuǎn)移之后從所述臨時寄存器重建執(zhí)行棧,且否則不插入任何轉(zhuǎn)移指令,使得能夠?qū)τ谶@同一程序片斷獲得標準化對象代碼,其中在對所述程序片斷的執(zhí)行沒有任何修改時,在每一轉(zhuǎn)移指令處以及在每一轉(zhuǎn)移目標指令處執(zhí)行棧為空。16.把程序片斷的對象代碼轉(zhuǎn)換為同一程序片斷標準化對象代碼的方法,其中在轉(zhuǎn)換前對象代碼中,每一指令的操作數(shù)屬于由這一指令處理數(shù)據(jù)類型,且由這一對象代碼的一指令寫入寄存器的給定類型的操作數(shù),由這一對象代碼另一指令以相同給定數(shù)據(jù)類型從這一相同寄存器讀出,其中轉(zhuǎn)換后每一指令操作數(shù)屬于由這一指令處理的數(shù)據(jù)類型,相同的數(shù)據(jù)類型在所述所有標準化對象代碼中被分配給相同的寄存器,其特征是,對所述對象代碼的所有指令這一方法在于-以這一指令執(zhí)行前及執(zhí)行后的寄存器的數(shù)據(jù)類型注釋每一當前指令,通過分析與這一指令相關(guān)的數(shù)據(jù)流計算出注釋數(shù)據(jù);-進行寄存器的重新分配,為此檢測采用不同類型的原始寄存器,把這些原始寄存器劃分為分開的標準化寄存器,一個標準化寄存器用于使用的每一數(shù)據(jù)類型,并重新更新處理使用所述標準化寄存器的操作數(shù)的指令。17.如權(quán)利要求15所述的方法,其特征在于這樣的階段,該階段是,在其執(zhí)行棧非空的所述指令內(nèi)及每一當前指令內(nèi),檢測轉(zhuǎn)移或分別是轉(zhuǎn)移目標的存在性,還在于隨后對序號為i的每一對應(yīng)的指令的檢測-使每一序號為i的指令與一組新的寄存器相關(guān)聯(lián),一個新的寄存器與在這一指令處有效的每一棧變量相關(guān)聯(lián);-檢驗每一被檢測的序號為i的指令并分別判斷轉(zhuǎn)移目標或轉(zhuǎn)移的存在性,并在序號為i的指令是轉(zhuǎn)移目標且這一指令處的執(zhí)行棧非空的情形下,●對每一先前的序號為i-1的由轉(zhuǎn)移、引起異?;虺绦蚍祷氐闹噶睿粰z測的序號為i的指令只能由轉(zhuǎn)移訪問,●●在所述被檢測的序號為i的指令之前,插入一組加載指令load,以便從該組新的寄存器加載,把所有指向被檢測的序號為i的指令的轉(zhuǎn)移重新定向到第一插入的加載指令load;以及●對每一先前的序號為i-1的按順序繼續(xù)進行的指令,被檢測的序號為i的指令可同時由轉(zhuǎn)移和從先前的序號為i-1的指令訪問,●●在所述被檢測的序號為i的指令之前,插入一組備份指令store以便向該組新的寄存器備份,以及一組加載指令load以便從這組新的寄存器加載,使所有指向被檢測的序號為i的指令的轉(zhuǎn)移重新定向到第一插入的加載指令load,并在所述被檢測的序號為i的指令是指向給定的指令的轉(zhuǎn)移的情形下,●對每一被檢測的序號為i的由無條件轉(zhuǎn)移構(gòu)成的指令,●●在被檢測的序號為i的指令之前,插入多個備份指令store,一個備份指令與每一新的寄存器相關(guān)聯(lián);以及●對于每一被檢測的序號為i的由條件轉(zhuǎn)移構(gòu)成的指令,以及對于由這一條件轉(zhuǎn)移指令處理的操作數(shù)的數(shù)目m>0,●●在這一被檢測的序號為i的指令之前,在該被檢測的序號為i的指令的m個操作數(shù)以及隨后的n個值的執(zhí)行棧的頂部,插入置換指令swap-x,這一置換操作使得能夠在執(zhí)行棧的頂部收集將要備份到該組新的寄存器中的n個值,以及●●在序號為i的指令之前,插入一組備份指令store,以便備份該組新的寄存器,以及●●在被檢測的序號為i的指令之后,插入一組加載指令load以便從這組新的寄存器加載。18.如權(quán)利要求16所述的方法,其特征在于,通過檢測與不同類型使用的原始寄存器而重新分配寄存器的階段在于-確定每一寄存器的生命區(qū)間;-確定每一生命區(qū)間的主數(shù)據(jù)類型,對于寄存器r的生命區(qū)間j的主數(shù)據(jù)類型由屬于生命區(qū)間j的備份指令store存儲在這一寄存器r中的數(shù)據(jù)類型的上界定義;-建立生命區(qū)間之間的干擾圖,這種干擾圖由非定向圖構(gòu)成,其每一頂點由生命區(qū)間構(gòu)成,如果一個頂點包含定址到另一頂點的寄存器的備份指令,則其兩個頂點j1和j2之間的弧存在,或反之也然;-當一對頂點的兩個頂點沒有相同的相關(guān)聯(lián)的主數(shù)據(jù)類型時,通過在干擾圖的所有頂點對之間添加弧,轉(zhuǎn)化分配給干擾圖中每一寄存器的數(shù)據(jù)類型的唯一性;-通過向每一生命區(qū)間指定一寄存器號碼,使得不同的寄存器號碼指定給干擾圖中兩個鄰接的生命區(qū)間,進行干擾圖的示例化。19.一種板載系統(tǒng),該系統(tǒng)能夠通過下載的程序片斷被重編程,該系統(tǒng)至少包括一個微處理器,一個隨機訪問存儲器,一個輸入/輸出模塊,一個電可重編程非易失存儲器以及一個永久性存儲器,其中裝有主程序和虛擬機,該虛擬機使用所述微處理器使得能夠執(zhí)行主程序及至少一個程序片斷,其特征在于,所述板載系統(tǒng)包含至少一個程序模塊,以管理和驗證下載的程序片斷,所述管理和驗證程序模塊安裝在永久性存儲器中。20.一種板載系統(tǒng),該系統(tǒng)能夠通過下載的程序片斷被重編程,該系統(tǒng)至少包括一個微處理器,一個隨機訪問存儲器,一個輸入/輸出模塊,一個電可重編程非易失存儲器以及一個永久性存儲器,其中裝有主程序和虛擬機,該虛擬機使用所述微處理器使得能夠執(zhí)行主程序及至少一個程序片斷,其特征在于,所述板載系統(tǒng)包含至少一個程序模塊,以便根據(jù)權(quán)利要求1到3之一所述的用于管理下載的程序片斷的協(xié)議而管理和驗證下載的程序片斷,所述管理和驗證程序模塊安裝在永久性存儲器中。21.如權(quán)利要求20中所述的板載系統(tǒng),其特征在于,該系統(tǒng)包含至少一個子程序模塊,以便根據(jù)權(quán)利要求4到14之一所述的驗證過程而驗證下載的程序片斷。22.一種把程序片斷的對象代碼轉(zhuǎn)換為同一程序片斷的標準化對象代碼的方法,其中轉(zhuǎn)換前的對象代碼中,每一指令的操作數(shù)屬于由這一指令處理的數(shù)據(jù)類型,對每一轉(zhuǎn)移指令執(zhí)行棧不出現(xiàn)任何溢出現(xiàn)象,在這一轉(zhuǎn)移處的棧變量的類型與這一轉(zhuǎn)移的目標處的類型相同,且由這一對象代碼的一指令寫入一寄存器的給定類型的操作數(shù)由這一對象代碼的另一指令以相同給定的數(shù)據(jù)類型從這一相同的寄存器再讀取,在轉(zhuǎn)換后的標準化對象代碼中,每一指令的操作數(shù)屬于由這一指令處理的數(shù)據(jù)類型,執(zhí)行棧不出現(xiàn)溢出現(xiàn)象,執(zhí)行棧在每一轉(zhuǎn)移指令處及每一轉(zhuǎn)移目標指令處是空的,相同的數(shù)據(jù)類型在所有的標準化對象代碼中指定給相同的寄存器,其特征在于,所述轉(zhuǎn)換系統(tǒng)至少包含安裝在開發(fā)計算機或工作站的工作存儲器中的一個程序模塊,以便根據(jù)如權(quán)利要求15到18之一所述的方法把這一對象代碼轉(zhuǎn)換為標準化對象代碼,使得能夠產(chǎn)生對于所述程序片斷的標準化對象代碼,滿足對于驗證這一下載程序片斷的準則。23.一種計算機程序產(chǎn)品,該產(chǎn)品能夠直接加載到諸如裝有可重寫存儲器的微處理器卡這種可重編程的板載系統(tǒng)的內(nèi)部存儲器中,這一板載系統(tǒng)使得能夠下載由對象代碼即一系列指令組成的程序片斷,這種對象代碼可由板載系統(tǒng)的微處理器通過虛擬機執(zhí)行,虛擬機裝有執(zhí)行棧及通過這些指令處理的局部變量或寄存器,并使得能夠解釋這一對象代碼,這種計算機程序產(chǎn)品包含對象代碼部分,以便當這一板載系統(tǒng)與一終端互連,且這一程序由這一板載系統(tǒng)微處理器通過所述虛擬機執(zhí)行時,執(zhí)行如1到3之一中所述的用于管理下載到這一板載系統(tǒng)上的程序片斷的協(xié)議。24.一種計算機程序產(chǎn)品,該產(chǎn)品能夠直接加載到諸如裝有可重寫存儲器的微處理器卡這種可重編程的板載系統(tǒng)的內(nèi)部存儲器中,這一板載系統(tǒng)使得能夠下載由對象代碼即一系列指令組成的程序片斷,這種對象代碼可由板載系統(tǒng)的微處理器通過虛擬機執(zhí)行,虛擬機裝有執(zhí)行棧及通過這些指令處理的操作數(shù)寄存器,并使得能夠解釋這一對象代碼,這種計算機程序產(chǎn)品包含對象代碼部分,以便當這一板載系統(tǒng)與一終端互連,且這一程序由這一板載系統(tǒng)微處理器通過所述虛擬機執(zhí)行時,執(zhí)行如權(quán)利要求4到14之一中所述的階段,即驗證下載到這一板載系統(tǒng)上的程序片斷。25.一種計算機程序產(chǎn)品,包含對象代碼部分,以便執(zhí)行轉(zhuǎn)換方法的階段,如權(quán)利要求15的18之一所述,該方法是把下載的程序片斷的對象代碼轉(zhuǎn)換為對同一程序片斷的標準化對象代碼。26.一種記錄在介質(zhì)上的計算機程序產(chǎn)品,該產(chǎn)品能夠用于諸如裝有可重寫存儲器的微處理器卡這種可重編程的板載系統(tǒng),這一板載系統(tǒng)使得能夠下載由對象代碼即一系列指令組成的程序片斷,這種對象代碼可由板載系統(tǒng)的微處理器通過虛擬機執(zhí)行,虛擬機裝有執(zhí)行棧及通過這些指令處理的局部變量或寄存器,并使得能夠解釋這一對象代碼,這種計算機程序產(chǎn)品至少包含-程序資源,這些資源能夠由這種板載系統(tǒng)的微處理器通過所述虛擬機讀取,以便命令執(zhí)行這樣的過程,該過程用于管理被下載的程序片斷的下載;-程序資源,這些資源能夠由這種板載系統(tǒng)的微處理器通過所述虛擬機讀取,以便命令執(zhí)行這樣的過程,該過程用于逐個指令地驗證構(gòu)成所述程序片斷的對象代碼;-程序資源,這些資源能夠由這種板載系統(tǒng)的微處理器通過所述虛擬機讀取,以便在把這一程序片斷的對象代碼轉(zhuǎn)換為同一程序片斷的標準化對象代碼之后或沒有這樣操作時,命令執(zhí)行下載的程序片斷。27.如權(quán)利要求26中所述的計算機程序產(chǎn)品,還包含程序資源,該程序資源能夠由這種板載系統(tǒng)的微處理器通過所述虛擬機讀取,以便在這一程序片斷的驗證過程不成功的情形下,命令禁止在所述板載系統(tǒng)上執(zhí)行所述程序片斷。全文摘要本發(fā)明涉及管理協(xié)議,并涉及驗證已經(jīng)下載到便攜系統(tǒng)的程序片斷或小應(yīng)用程序的方法。小應(yīng)用程序的下載命令(100a,100b)被執(zhí)行。一旦收到正響應(yīng),則讀取小應(yīng)用程序的對象代碼(101)并逐條指令經(jīng)過驗證過程(102)。驗證過程由一階段組成,該階段包括類型棧和寄存器類型表的初始化,它們表示在小應(yīng)用程序代碼的執(zhí)行開始時便攜系統(tǒng)的虛擬機狀態(tài);以及對每一目標當前指令逐條指令的驗證,包括驗證目標轉(zhuǎn)移指令,目標異常處理程序調(diào)用或目標子程序調(diào)用的存在性,驗證和更新指令對類型棧和寄存器類型表的效果。如果驗證成功(103a),小應(yīng)用程序被寄存(104)并向下載驅(qū)動器發(fā)送(105)確認。否則,小應(yīng)用程序被刪除(106)。本發(fā)明適用于Java環(huán)境的便攜系統(tǒng)。文檔編號G06F9/445GK1370294SQ0081193公開日2002年9月18日申請日期2000年8月21日優(yōu)先權(quán)日1999年8月23日發(fā)明者X·萊爾奧申請人:信用邏輯公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
定结县| 博爱县| 广河县| 万州区| 尼勒克县| 苍梧县| 中阳县| 永顺县| 天峨县| 双柏县| 牟定县| 五华县| 临泉县| 公主岭市| 阿巴嘎旗| 宣威市| 龙陵县| 盐亭县| 土默特右旗| 永安市| 聂拉木县| 洞头县| 阳城县| 收藏| 沁源县| 邛崃市| 汝南县| 抚州市| 平江县| 道孚县| 静乐县| 察哈| 监利县| 精河县| 拉萨市| 英山县| 灵山县| 城市| 大洼县| 江阴市| 兰溪市|