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