專利名稱:可編程智能裝置的便攜式安全交易系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種包括諸如終端機的可編程智能裝置和集成電路卡的系統(tǒng)以及這種卡和終端機的操作方法,終端機包括自動柜員機、個人電腦、付費電視裝置、銷售點終端機、健??ɑ蝾愃蒲b置。本發(fā)明特別適用于進行金融交易。
背景技術(shù):
已知各種類型的終端機可進行交易,如金融交易,它涵蓋有價證券的轉(zhuǎn)移或兌換或商業(yè)性質(zhì)證券的交易,諸如利用健??ǖ慕灰谆蛴靡话愕臄?shù)據(jù)存取,例如GSM移動電話的SLM卡。終端機,如銷售點(POS)裝置、自動柜員機(ATM)或GSM移動電話是已知。實際產(chǎn)品的范圍從采用簡單8位微處理器,如美國Intel公司供應(yīng)的Intel 8031/8051或集成電路卡(ICC)的小型手持裝置到32位計算機運行操作系統(tǒng),如由美國微軟公司提供的UNNIXTM或視窗NT。某些機器與個人用戶卡互相作用,此卡可以是磁條卡、智能卡或集成電路卡,其中儲存了用戶與終端機之間開始進行通信前所需的指定用戶識別和確認信息。用戶將卡放置于與終端機相關(guān)的卡讀出器中,執(zhí)行終端機中的常駐程序并檢查該卡,核對用戶信息,確認其有效性,如果需要可提示用戶輸入密碼或?qū)S锰柎a,如PIN(個人識別數(shù)字)。在確認后,程序正常地允許用戶選擇想要進行的服務(wù),例如,提取現(xiàn)金、檢查目前收支差額。該終端機可獨立式或者通過本地方式或電信網(wǎng)絡(luò)與大型計算機連接。這種終端機一般一天24小時服務(wù),其運行必須最小維護和具有高度安全性。
這種終端機代表在硬件上的重大投資,通常不需要頻繁地替換。當(dāng)提供新服務(wù)時必須更新在這種終端機上運行的軟件和程序且更新必須安全地進行。一般地,終端機操作機構(gòu),如銀行要求每一更新有保證。如此更新可由手動或經(jīng)專用或公用通信網(wǎng)路遙控進行,如美國專利編號5,434,999所示。如此已知方案要求終端機的類型與模式對于新開發(fā)要已知,由于必須為一類終端機具體建立每一終端機的軟件,因此價格昂貴。再者,能夠從所有可能的提供相似服務(wù)的機構(gòu),例如所有銀行或信貸機構(gòu)提供服務(wù),終端機必須能夠處理所有機構(gòu)的所有程序。由于個人與商業(yè)人士的高度移動性,在一個國家提供的所有服務(wù)在每臺終端機都應(yīng)當(dāng)能夠提供是有利的。這就導(dǎo)致每一終端機不必要大的處理容量和存儲器規(guī)模。再者,這些程序中的每個程序必須按需要更新。一種解決方法是每一終端機可以使用小型工作站,可接至電信系統(tǒng)。如此的系統(tǒng)將能夠進行脫線處理以及可切換到異常交易的在線處理或常駐程序的自動更新。例如為了維持可經(jīng)公眾電話網(wǎng)路而受襲擊的開放系統(tǒng)的安全性,要求對工作站進行復(fù)雜的確認和實行必要的加密方案。隨著規(guī)模和復(fù)雜度的增加,維護安全的問題還增加。
甚至利用此系統(tǒng)可能有版本控制的問題,不是同一機構(gòu)的所有服務(wù)用戶都具有適合于最新版本服務(wù)的卡。當(dāng)多國家機構(gòu)在不同時間于不同國家引入或更新服務(wù)時會發(fā)生這種情況。在WO 96/18979中已經(jīng)提出僅對該區(qū)段用戶的個人集成電路卡而更新終端機。把表示子程序的程序指令儲存于卡上并可輸出至解釋的終端機。采用終端機中的解釋器允許同一卡用于任何包括解釋器的終端機,使在終端機上的交易與主微處理器無關(guān)。然而,沒有一種安全控制方法被敘述用來消除可能的危險子程序。
上述類型的終端機還有一處理器,包括某些形式的存儲器,通常為運行程序的某些隨機存取存儲器(RAM),存儲僅需讀出數(shù)據(jù)(包括終端機操作系統(tǒng)的程序)的某些只讀存儲器(ROM),以及非易失性讀/寫存儲器,存儲可改變的一般數(shù)據(jù)。用戶個人數(shù)據(jù)應(yīng)被保持專用,因此應(yīng)該使用戶不可能訪問其他人的數(shù)據(jù),無論是偶然還是故意地。再者,終端機的各種可寫存儲器不應(yīng)隨著時間而產(chǎn)生碎片。存儲器碎片可能導(dǎo)致相鄰存儲器塊大小減少以致某些程序不能運行。為了避免此問題,一些程序語言,諸如JavaTM使用無用單元收集。無用單元收集是一種試圖識別存儲器中不再需要的數(shù)據(jù)并解除對它分配的子程序。它是目前已通知的選項,比起用-程序來明顯地解除分配其自身存儲的數(shù)據(jù)。無用單元收集是管理存儲器的更可靠方式。明顯存儲器分配和解除分配有些被保持為公共高級編程語言諸如C或C++中編程誤差的最大單一來源。
無用單元收集有數(shù)個缺點。首先,無用單元收集是一種操作系統(tǒng)功能而不是應(yīng)用程序特有的功能。所以,無用單元收集不保證每一應(yīng)用的數(shù)據(jù)在應(yīng)用結(jié)束時被解除分配,而是相反地,這樣的數(shù)據(jù)可能出現(xiàn)一段時間直到?jīng)]有存取觸發(fā)無用單元收集。在金融交易中需要一種減小尋址私人用戶數(shù)據(jù)可能性的更安全方法。第二,它會增加操作系統(tǒng)所要求的存儲器空間的大小。在集成電路卡和一些終端機存儲器上受到限制,無用單元收集的使用可能有一嚴重缺點。如上所述,終端機是很少被替換的,以致各種終端機具有不同處理器能力和存儲器大小,可同時在系統(tǒng)中正常操作。較早的終端機在其能力上通常受到嚴格限制。雖然最老的類型可能已被替換掉,提供更細致和復(fù)雜服務(wù)的需求意味著,較老的終端機以后或許不再經(jīng)常被替換,它們中有一些的容量不再滯后。因此,對能夠在多種處理器上工作的緊湊型操作系統(tǒng)的需要將可能依照要求保留,最后,無用單元收集一旦不利用顯式解除分配便不會釋放存儲器。在釋放時由于存儲器堆積,這還能夠增加所需的存儲器量。
運行時間存儲器管理的一種安全方法如美國專利編號5,434,999所述。例如,依據(jù)該已知方法,終端機中的解釋器進行任何處理存儲器地址指令的系統(tǒng)檢查,以驗證請求存取的存儲器區(qū)域是否被認可。該系統(tǒng)的缺點是每個指令必須檢查,以此方式處理非常慢。程序運行時間檢查是浪費性態(tài)。
需要一種提供可編程終端機的系統(tǒng),允許應(yīng)用程序員產(chǎn)生在不同種類的終端機上便攜的和中立的軟件,即,與終端機中使用的處理器無關(guān),不需要對終端機的每一類型或制造進行類型認可。終端機常駐操作系統(tǒng)和應(yīng)用程序最好是緊湊、迅速執(zhí)行和符合安全要求的。再者,如果應(yīng)用程序容易更新,至少每一用戶可得到期望的服務(wù),最好與終端機地理位置無關(guān)。
本發(fā)明的目的是提供一種交易用的安全交易管理系統(tǒng)和操作這一系統(tǒng)的方法。
本發(fā)明的進一步目的是提供交易用的安全終端機和集成電路卡以及操作這些裝置的方法。
本發(fā)明的進一步目的是提供一種在能夠在小型手持裝置,如集成電路卡上執(zhí)行交易中使用的裝置。
本發(fā)明的進一步目的是提供一種能夠利用終端機或集成電路卡作為更新信息的源對終端機或集成電路卡進行更新的交易系統(tǒng)。
本發(fā)明的進一步目的是提供一種具有高度安全性和良好運行速度的交易管理系統(tǒng)和操作這一系統(tǒng)的方法。
發(fā)明概要本發(fā)明涉及一種在第一裝置與第二裝置間執(zhí)行交易的交易管理系統(tǒng),第一與第二裝置適合于彼此通信,第一與第二裝置中至少有一個是集成電路卡,該系統(tǒng)包括至少一輸入/輸出裝置;便攜式虛擬機器,用以解釋第一裝置上的計算機程序,該虛擬機器包括一虛擬微處理器與用于該至少一輸入/輸出裝置的驅(qū)動器;以及根據(jù)所述解釋程序執(zhí)行所述程序的執(zhí)行裝置。較佳地,如果便攜式虛擬機器是堆棧機器,照此帶來操作速度與緊湊性。
本發(fā)明還提供一種包括與第二裝置進行交易的第一裝置的終端機;第一與第二裝置中至少有一個是集成電路卡,終端機包括一便攜式虛擬機器,解釋第一裝置上的計算機程序,所述便攜式虛擬機器包括一虛擬微處理器和用于至少一輸入/輸出裝置的驅(qū)動器,以及根據(jù)所述解釋程序執(zhí)行所述程序的執(zhí)行裝置。
本發(fā)明還提供一種包括與第二裝置進行交易的第一裝置的自含便攜式智能卡,該智能卡包括一便攜式虛擬機器,它包括一虛擬微處理器和用于至少一輸人/輸出裝置的驅(qū)動器。
本發(fā)明還提供一種交易管理系統(tǒng),包括第一裝置和第二裝置,第一與第二裝置適合于彼此通信且第一與第二裝置中至少有一個是集成電路卡;所述第二裝置包括提供至少一條至少能修改第一裝置上計算機程序的執(zhí)行時間性態(tài)的程序指令的裝置;所述第一裝置包括一虛擬機器,該虛擬機器包括載入和解釋所述計算機程序的裝置,在所述載入和解釋裝置已載入所述計算機程序后并且所述計算機程序正在運行時,所述載入和解釋裝置進一步適合于依據(jù)預(yù)定安全條件載入和解釋所述至少一條程序指令;和根據(jù)所述已載入和解釋的程序指令以所述修改后性態(tài)執(zhí)行所述已載入和解釋程序的執(zhí)行裝置。
此外,本發(fā)明還提供一種包括與第二裝置進行交易的第一裝置的終端機,所述第一與第二裝置中至少有一個是集成電路卡,所述第二裝置包括提供至少一條至少能修改第一裝置上計算機程序的執(zhí)行時間性態(tài)的程序指令的裝置;所述終端機包括所述第一裝置,所述第一裝置包括一虛擬機器,該虛擬機器包括載入和解釋所述計算機程序的裝置,在所述載入和解釋裝置已載入所述計算機程序后并且所述計算機程序正在運行時,所述載入和解釋裝置進一步適合于依據(jù)預(yù)定安全條件載入和解釋所述至少一條程序指令;和根據(jù)所述已載入和解釋的程序指令以所述修改后性態(tài)執(zhí)行所述已載入和解釋程序的執(zhí)行裝置。
本發(fā)明還提供一種包括與第二裝置進行交易的第一裝置的自含便攜式智能卡,所述第二裝置包括提供至少一條至少能修改第一裝置上計算機程序的執(zhí)行時間性態(tài)的程序指令的裝置,所述智能卡包括所述第一裝置,所述第一裝置包括一虛擬機器,該虛擬機器包括載入和解釋所述計算機程序的裝置,在所述載入和解釋裝置已載入所述計算機程序后并且所述計算機程序正在運行時,所述載入和解釋裝置進一步適合于依據(jù)預(yù)定安全條件載入和解釋所述至少一條程序指令;和響應(yīng)于所述已載入和解釋的程序指令以所述修改后性態(tài)執(zhí)行所述已載入和解釋程序的執(zhí)行裝置。
本發(fā)明還提供一種在第一裝置與第二裝置間執(zhí)行交易的交易系統(tǒng),所述系統(tǒng)包括解釋施加于此的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元與可讀/寫邏輯地址空間;至少一個第一應(yīng)用程序包括其執(zhí)行所需的可讀/寫邏輯地址空間量的指示,該至少一個第一應(yīng)用程序是以選自一組記號的記號和相應(yīng)直接插入數(shù)據(jù)的流的方式撰寫;所述虛擬機器還包括載入所述至少一個第一應(yīng)用程序的載入器;和依據(jù)所述指示分配第一可讀/寫邏輯地址空間量,特別是針對所述至少一個第一應(yīng)用程序的裝置,所述分配的可讀/寫邏輯地址空間具有限定和保護邊界。根據(jù)本發(fā)明的第一裝置可以是接至國際互連網(wǎng)并運行瀏覽器的個人計算機,由瀏覽器接收的每個模塊的要求必須包括其存儲器要求指示,改善瀏覽器的安全性以及限制可能受到包含在輸入模塊中的任何病毒的侵害。
本發(fā)明還提供一種包括與第二裝置進行交易的第一裝置的終端機,所述第一裝置包括解釋施加于此的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元與可讀/寫邏輯地址空間;至少一個第一應(yīng)用程序包括其執(zhí)行所需的可讀/寫邏輯地址空間量的指示和能夠被輸出到其它應(yīng)用程序上至少具有一個函數(shù)的第一互斥表,該至少一個第一應(yīng)用程序是以選自一組記號的記號和相應(yīng)直接插入數(shù)據(jù)的流的方式撰寫;所述虛擬機器還包括載入所述至少一個第一應(yīng)用程序的載入器;和依據(jù)所述指示分配第一可讀/寫邏輯地址空間量,特別是針對所述至少一個第一應(yīng)用程序的裝置,所述分配的可讀/寫邏輯地址空間具有限定和保護邊界。
本發(fā)明還提供一種包括與第二裝置進行交易的第一裝置的自含便攜智能卡,所述第一裝置包括解釋施加于此的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元與可讀/寫邏輯地址空間;至少一個第一應(yīng)用程序包括其執(zhí)行所需的可讀/寫邏輯地址空間量的指示,該至少一個第一應(yīng)用程序是以選自一組記號的記號和相應(yīng)直接插入數(shù)據(jù)的流的方式撰寫;所述虛擬機器還包括載入所述至少一個第一應(yīng)用程序的載入器;和依據(jù)所述指示分配第一可讀/寫邏輯地址空間量,特別是針對所述至少一個第一應(yīng)用程序的裝置,所述分配的可讀/寫邏輯地址空間具有限定和保護邊界。
本發(fā)明還提供一種在第一裝置與第二裝置間執(zhí)行交易的交易系統(tǒng),第一與第二裝置中至少一個是集成電路卡,該系統(tǒng)包括解釋施加于此的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元與可讀/寫邏輯地址空間;至少一個數(shù)據(jù)庫包括至少一條記錄和由所述虛擬機器執(zhí)行的至少一個計算機程序,所述計算機程序為一以選自一組記號的記號流方式撰寫的模塊并包括執(zhí)行所述模塊所需的非初始化可讀/寫邏輯地址空間量的指示;載入所述模塊和依據(jù)所述指示分配非初始化邏輯地址空間所需量的載入器;和訪問所述數(shù)據(jù)庫中記錄的裝置,數(shù)據(jù)庫中的記錄僅可通過所述模塊訪問,所述訪問裝置在數(shù)據(jù)庫目前記錄上提供一視窗并把該記錄復(fù)制到由所述應(yīng)用程序可尋址的一部分非初始可讀/寫邏輯地址空間中。
此外,本發(fā)明還提供一種包括與第二裝置進行交易的第一裝置的終端機,第一與第二裝置中至少一個是集成電路卡,所述第一裝置包括解釋施加于此的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元與可讀/寫邏輯地址空間;至少一個數(shù)據(jù)庫包括至少一條記錄和至少一個由所述虛擬機器執(zhí)行的計算機程序,所述計算機程序為一以選自一組記號的記號流方式撰寫的模塊并包括執(zhí)行所述模塊所需的非初始化可讀/寫邏輯地址空間量的指示;載入所述模塊和依據(jù)所述指示分配非初始化邏輯地址空間所需量的載入器;和訪問所述數(shù)據(jù)庫中記錄的裝置,數(shù)據(jù)庫中的記錄僅可通過所述模塊訪問,所述訪問裝置在數(shù)據(jù)庫目前記錄上提供一視窗并把該記錄復(fù)制到由所述應(yīng)用程序可尋址的一部分非初始可讀/寫邏輯地址空間中。
本發(fā)明還提供一種包括與第二裝置進行交易的第一裝置的自含便攜智能卡,所述第一裝置包括解釋施加于此的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元與可讀/寫邏輯地址空間;至少一個數(shù)據(jù)庫包括至少一條記錄和至少一個由所述虛擬機器執(zhí)行的計算機程序,所述計算機程序為一以選自一組記號的記號流方式撰寫的模塊并包括執(zhí)行所述模塊所需的非初始化可讀/寫邏輯地址空間量的指示;載入所述模塊和依據(jù)所述指示分配非初始化邏輯地址空間所需量的載入器;和訪問所述數(shù)據(jù)庫中記錄的裝置,數(shù)據(jù)庫中的記錄僅可通過所述模塊訪問,所述訪問裝置在數(shù)據(jù)庫目前記錄上提供一視窗并把該記錄復(fù)制到由所述應(yīng)用程序可尋址的一部分非初始可讀/寫邏輯地址空間中。
本發(fā)明還提供一種在第一裝置與第二裝置間進行交易的方法,第一裝置與第二裝置中至少有一個是集成電路卡;所述方法包括在第二裝置上提供至少一條程序指令,至少能修改第一裝置上計算機程序的執(zhí)行時間性態(tài);載入和解釋該計算機程序,當(dāng)該計算機程序正在運行時依據(jù)預(yù)定安全條件載入和解釋該至少一程序指令;以及響應(yīng)于被所述已載入和解釋程序指令以修改后的性態(tài)執(zhí)行該被載入與解釋的計算機程序。
本發(fā)明還提供一種在第一裝置與第二裝置間進行交易的方法,第一裝置與第二裝置中至少一個是集成電路卡;所述方法包括解釋以選自一組記號的字節(jié)代碼記號和相應(yīng)直接插入數(shù)據(jù)的流的方式撰寫的至少一個應(yīng)用程序;載入該至少一個應(yīng)用程序;依據(jù)包含在所述應(yīng)用程序中的程序執(zhí)行所需的可讀/寫邏輯地址空間量的指示,具體為該至少一應(yīng)用程序分配第一可讀/寫邏輯地址空間量,限定和保護所述被分配可讀/寫邏輯地址空間的邊界。本方法將解釋器和存儲器的分配與任選明顯解除分配結(jié)合使用。這提供了靈活性與便攜性的混合同時提供在編譯階段在應(yīng)用程序已完全通過檢查后的運行時間保證。這降低了輸入的應(yīng)用程序中由病毒引起的侵害。
本發(fā)明還包括一種在第一裝置與一第二裝置間進行交易系統(tǒng)的方法,第一與第二裝置中至少有一個是集成電路卡;所述方法包括解釋模塊中以選自一組記號的記號流方式撰寫的記號;依據(jù)該模塊中執(zhí)行時所需的非初始可讀/寫邏輯地址空間量的指示分配非初始邏輯地址/空間量;提供在數(shù)據(jù)庫當(dāng)前記錄上提供一視窗訪問數(shù)據(jù)庫中的記錄,數(shù)據(jù)庫中的記錄僅可通過該模塊訪問;和把所述記錄復(fù)制到由該模塊可尋址的一部分非初始可讀/寫邏輯地址空間中。
本發(fā)明還包括一種在第一裝置與第二裝置間進行交易系統(tǒng)的方法,第一與第二裝置中至少一種是集成電路卡;所述方法包括提供一便攜式虛擬機器,它包括一虛擬微處理器和用于至少一輸入/輸出裝置的驅(qū)動器;利用便攜式虛擬機器解釋第一裝置上的計算機程序;和響應(yīng)于所述已解釋的程序執(zhí)行所述程序。
根據(jù)本發(fā)明,提供一種安全交易管理系統(tǒng),較佳地包括一便攜式虛擬微處理器。每一模塊最好擁有一組保證不同于其他任何虛擬地址空間的虛擬地址空間。此外,便攜式虛擬微處理器最好保護,對共享資源,如各種堆?;驍?shù)據(jù)庫的存取。較佳地,最小保護是檢查讀出和寫入的數(shù)據(jù)空間存取邊界和絕對禁止寫至代碼空間的存儲器。再者,檢查最好是針對數(shù)據(jù)的下溢與上溢和返回堆棧。較佳地,模塊僅可存取其他某個模塊直接輸出的數(shù)據(jù)。較佳地,決不可存取未輸出的數(shù)據(jù)(虛擬微處理器不泄漏),通過模塊提供的函數(shù)除外。一般意義上模塊最好不輸出數(shù)據(jù);模塊最好僅輸出函數(shù)。較佳地,邏輯邊界禁止數(shù)據(jù)空間泄漏。換句話說,模塊所擁有的所有數(shù)據(jù)最好是完全地專用。在編譯時間和運行時間上最好都強制執(zhí)行這一限制,由于模塊具有分開的地址空間,這意味著某些模塊中某些數(shù)據(jù)的地址在其自有模塊外完全無意義。較佳地,模塊僅輸出一組句柄,觸發(fā)特定性態(tài)的開或關(guān)。較佳地,性態(tài)好的模塊將能無故障運行,而性態(tài)不好的模塊將被例外情況所中止,這些例外情況是在違規(guī)操作時由便攜式虛擬微處理器直接產(chǎn)生的。
從屬權(quán)利要求限定本發(fā)明的各個實施例?,F(xiàn)在將參考以下
本發(fā)明及其實施例和優(yōu)點。
附圖簡要說明圖1是依照本發(fā)明的終端機的圖解表示。
圖2是依照本發(fā)明的集成電路卡的圖解表示。
圖3是開發(fā)與執(zhí)行本發(fā)明模塊的過程的示意流程圖。
圖4是依照本發(fā)明的便攜式虛擬微處理器在終端機上執(zhí)行時的圖解表示。
圖5是依照本發(fā)明的便攜式虛擬微處理器的圖解表示。
圖6是依照本發(fā)明將模塊載入存儲器的圖解表示。
圖7是依照本發(fā)明獲得訪問數(shù)據(jù)庫記錄的方法的圖解表示。
圖8依照本發(fā)明的插頭與插座程序的圖解表示。
圖9是本發(fā)明模塊載入程序的流程圖。
圖10是本發(fā)明模塊執(zhí)行程序的流程圖。
圖11是本發(fā)明插座插入程序的流程圖。
圖12是依照本發(fā)明卡模塊載入程序的流程圖。
本發(fā)明在附錄中給出記號代碼和標準例外情況。
示范實施例的描述以下將參考特定附圖和某些實施例來描述本發(fā)明,然而,本發(fā)明不限于這些實施例。附圖僅是圖示而非限制。本發(fā)明將參考金融交易進行描述,然而本發(fā)明不限于此。再者,本發(fā)明將主要參考終端機進行描述,但是本發(fā)明還包括在任何合適裝置上提供依照本發(fā)明的便攜式虛擬微處理器,例如,個人計算機(PC)、集成電路卡(ICC)或ICC與接口的組合,正如這里引作參考的WO 94/10657中所述。
本發(fā)明背后的一般鏈接技術(shù)概念是便攜能力與交易系統(tǒng)中數(shù)據(jù)和運行時間保證的安全性的結(jié)合,倘若編譯時間檢查已經(jīng)成功通過則運行時間保證與所提供的目標實施無關(guān)。這一概念可通過以下一個或多個特征來實現(xiàn)利用虛擬機器作為解釋器,在虛擬機器中包括一I/O裝置的驅(qū)動器,以使應(yīng)用程序有一個與I/O裝置的公共接口,因此在廣泛的不同環(huán)境中可攜,應(yīng)用程序中包括存儲器用量的指示并依據(jù)該指示分配存儲器,明顯解除存儲器的分配以及和提供一種把數(shù)據(jù)輸入到應(yīng)用程序和/或數(shù)據(jù)庫中以及從應(yīng)用程序和/或數(shù)據(jù)庫中輸出數(shù)據(jù)的安全方法。
圖1是依照本發(fā)明的終端機1的圖解表示。通常,終端機1包括中央處理單元(CPU)2,它經(jīng)雙向通信總線3與存儲器4和輸入/輸出(I/O)裝置6連接。I/O裝置6可以是輸入數(shù)據(jù)的鍵盤和諸如顯示單元(如液晶(LCD)或發(fā)光二極管(LED)顯示器)的顯示屏,顯示交易的進展和/或顯示消息或提示。I/O裝置6可為卡讀出器7,利用它在將ICC 5插入讀出器7的接收槽中時可以讀出ICC 5。實際的終端機可以變化很大,例如,它可以是銷售點(POS)終端機,可包括從Intel 8051至PentiumTM的處理器。再者,終端機1不必全部置于一個位置,終端機的各個部分,如卡讀出器7、諸如鍵盤的I/O裝置和顯示器以及處理器可置于不同地點并由電纜線、無線傳輸或相似裝置連接或為局域網(wǎng)的一部分或由電信網(wǎng)路互連。
圖2是依照本發(fā)明的ICC 5的圖解表示。然而本發(fā)明不限于此。ICC 5包括至少一輸入/輸出(I/O)端口10和一些永久儲存器,例如,由經(jīng)總線17接至I/O端口10的電可擦可編程只讀存儲器(EEPROM)15或由電池后備隨機存取存儲器(RAM)提供的非易失性存儲器。I/O端口10可用于經(jīng)由卡讀出器7與終端機1通信。集成電路卡是插入一個或多個集成電路以執(zhí)行至少存儲器功能的卡??蛇x擇地,ICC 5可為自含便攜式智能卡并包括可讀/寫工作存儲器,例如由RAM14提供易失性存儲器和中央處理器12以及使ICC 5可象微處理器一樣操作的所有必要電路,例如儲存代碼的只讀存儲器13,序列發(fā)生器16,與卡讀出器7連接,接收電壓源Vss與VDD、處理器12的復(fù)位和時鐘CLK至該序列發(fā)生器16。依照本發(fā)明,ICC 5可用作銀行卡、信用卡、借貸卡、電子貨幣、保健卡、SIM卡等。
本發(fā)明提供一種集成電路控制的交易管理系統(tǒng),試圖在ICC 5與終端機1(與中央單元連接或不被連接)間交易,交易由至少執(zhí)行一次下列順序組成1.建立ICC 5與終端機1間的通信鏈路;2.進行兼容性檢查以確保ICC 5與終端機1是機械電子兼容的;3.選擇一種應(yīng)用,包括選擇一個計算機程序和以特定的ICC 5與終端機1組合方式限定交易的相關(guān)數(shù)據(jù)集合;4.執(zhí)行應(yīng)用程序;5.交易的終止,其任選地包括中斷ICC 5與終端機1間的通信鏈路,由此采用解釋器執(zhí)行應(yīng)用程序,或是在ICC 5上或是在終端機上或是在二者上。交易是二個或多個裝置間至少是數(shù)據(jù)的交換,依照本發(fā)明不指定是商業(yè)金融交易。此系統(tǒng)可從PCT/BE 95/00017得知。ICC 5可能僅是存儲器的集成電路卡,即不包括處理器12,ICC 5進行由終端機1確定的交易。另一方面,ICC 5可為自含便攜式智能卡,交易可由終端機1或者由ICC 5或由二者決定。依照本發(fā)明,ICC 5可包括增強終端機處理安全的程序代碼。具體說,ICC 5可為一個或多個維護卡,用于對存儲在終端機5中的應(yīng)用程序進行更新。
依照本發(fā)明,軟件運行于終端機1中以及以“虛擬機器”的方式任選地運行于ICC 5中。本發(fā)明的虛擬機器(VM)直接利用了具有標準特性的理想或虛擬微處理器,以一般方式定義尋址模式、堆棧使用、寄存器使用、地址空間、I/O裝置的尋址等。核心程序?qū)懭氲浇K端機1或ICC 5中使用的每一特定CPU類型使各個處理器2、12模擬VM。本發(fā)明的一個特定方面,即VM的核心提供I/O裝置的驅(qū)動器和所有低層中央處理單元邏輯和算術(shù)功能、流量控制,時間處理。在VM中提供I/O驅(qū)動器具有的優(yōu)點是為本發(fā)明VM而寫的任何程序可尋址標準虛擬I/O裝置。在具體CPU上實施VM則為接至終端機1或ICC 5上的實際I/O裝置提供了類似可尋址虛擬I/O裝置的性態(tài)。本發(fā)明的VM非常緊湊并已在西門子(Siemens)SLCO44CR芯片上(INTEL 8051家族的衍生型)上成功實施,該芯片包含在ICC 5上。依照本發(fā)明的虛擬機器利用高度標準化,可用于多種多樣的中央處理單元和I/O類型上,簡化了程序可轉(zhuǎn)移性、測試和驗證。依據(jù)本申請,把這種VM描述為便攜式VM 20。便攜式VM 20包括一虛擬微處理器與I/O裝置的驅(qū)動器。VM20提供邏輯與算術(shù)功能以及存儲器和至少一I/O裝置的尋址。依照本發(fā)明的便攜式VM 20通過把終端機和/或卡程序處理為編譯器的中間代碼在不同終端機1與卡5上可提供程序可轉(zhuǎn)移性。此代碼由被稱為記號的字節(jié)代碼組成。終端機1或ICC 5通過對這一代碼的解釋或者通過諸如本機碼編譯的其它方式對其進行處理。虛擬機器解釋記號最好由三種方法中的一種完成即直接解釋虛擬機器指令、將虛擬機器語言翻譯成可直接執(zhí)行的中間形式,或者將其及時編譯成目標CPU的實際代碼。后二種方法具有性態(tài)高、成本適中但復(fù)雜。記號以集合形式提供,可看作VM 20的機器指令集。
本發(fā)明的應(yīng)用程序體現(xiàn)為模塊,它可以包括象可執(zhí)行代碼的記號表。依照本發(fā)明,有二種基本類型的模塊即可執(zhí)行模塊(當(dāng)模塊被載入時有一由VM 20直接調(diào)用的進入點)和程序庫模塊(通過提供可執(zhí)行程序起給其它模塊提供資源的作用,可輸出模塊可以通過模塊之間調(diào)用而分別執(zhí)行)。
本發(fā)明的記號集首先包括VM 20的指令集,它提供一般處理語言所期望和有效執(zhí)行程序所需的指令,其次包括提供通常稱為“操作系統(tǒng)功能”的記號。在終端機1或卡5中,操作系統(tǒng)的功能包括諸如I/O驅(qū)動器(如顯示器與鍵盤)的本發(fā)明特定功能,在終端機1與卡5中,系統(tǒng)功能還包括通過I/O端口的數(shù)據(jù)對象通信和傳輸?shù)墓芾硪约澳K間的存取和存取控制機制。提供的記號最好針對VM的操作系統(tǒng),堆棧的操作,插座的處理,如異常處理法,插座本身的控制,包括其存取權(quán),I/O裝置的存取,時間處理,語言和消息處理,I/O讀出器處理(如ICC、磁條卡和調(diào)制解調(diào)器的處理),黑名單的管理,安全算法,終端機服務(wù),數(shù)據(jù)庫服務(wù),數(shù)據(jù)對象的處理(如TLV的處理),模塊的處理和可擴充存儲器的處理。
單字節(jié)記號稱為原始記號;這些記號指諸如通常在任何指令集中看到的原始指令。多字節(jié)記號稱為二次記號,被用作使用頻度低的服務(wù)。本申請的附錄中提供了VM 20的整個記號。如圖3中所示意的,應(yīng)用程序被撰寫在個人電腦(PC)主開發(fā)系統(tǒng)70上,經(jīng)過諸如Forth、C、Pascal等合適的高級語言的調(diào)試和類型核準。然后,在記號編譯器71上將程序的原代碼編譯成記號流。該記號流可分別與程序所需的其他數(shù)據(jù)(相應(yīng)直接插入數(shù)據(jù))和標題組合,并封裝在模塊傳遞文件中,建立一模塊72,最好采用標準化模塊傳遞格式。如果模塊含有可執(zhí)行記號,以可執(zhí)行程序格式傳遞。本發(fā)明的一個特別方面是可執(zhí)行模塊不僅包括記號流而且還包括所有相應(yīng)直接插入數(shù)據(jù)(封裝)。本發(fā)明的另一個不同特別方面是依照本發(fā)明的模塊包括VM 20應(yīng)當(dāng)分配多少可讀寫存儲器供模塊執(zhí)行之用的指不。
通過任何合適裝置,如在ICC 5中通過電信網(wǎng)路把模塊72傳遞至終端機1。模塊被卸載后,它被儲存于一“模塊儲存庫”中。當(dāng)需要其功能時,終端機1或卡5采用記號載入器/解釋器73來處理終端機CPU2上的執(zhí)行記號。此過程由執(zhí)行與每一記號有關(guān)的功能組成。記號載入器/解釋器72由本發(fā)明的VM 20提供。
可以把終端機1上的VM相關(guān)軟件劃分成四大類核心,其包括I/O驅(qū)動器的與終端機相關(guān)的設(shè)施和本說明書中為支援VM 20所需的所有功能。與VM 20有關(guān)的其他各個軟件是以與機器無關(guān)的記號撰寫的。
·終端機常駐服務(wù)(TRS)至少是一種象應(yīng)用管理器那樣的在VM 20上運行的模塊,包括所有非應(yīng)用的功能,支援這些功能的文件庫,模塊載入功能和限定終端機性態(tài)的主回路。特殊記號(例如DIOCTL)允許把I/O裝置的與終端機相關(guān)的方面定義直接插入功能。
終端機選擇服務(wù)(TSS)包括諸如付款服務(wù)功能的應(yīng)用程序和支援這些功能的文件庫。TSS僅包括與終端機無關(guān)的記號,常駐在終端機1上。TRS主程序回路在特定交易需要時將選擇和調(diào)用TSS功能。
·卡選擇服務(wù)(CSS)包括支援終端機交易的功能,諸如付款服務(wù)功能,用作TSS應(yīng)用的一部分。CSS駐留在ICC 5上,需要時被卸載到終端機1上。對于有二個ICC讀出器8(例如,一個用于正常交易,一個用于維護)的終端機1,可以有二個不相關(guān)的CSS組(CSS1與CSS2)。
本發(fā)明終端機1上的所有軟件,在核心上,被組織為一組分離的模塊。模塊的基本特性在于它是已通過記號編譯器71并已按照傳遞至目標環(huán)境(如終端機1或ICC 5)的單個包裝而封裝的定義和程序的集合。主終端機程序(TRS)、每個應(yīng)用程序、每個程序庫以及每個CSS卸載便是模塊的例子。較佳地,所有模塊使用標準格式。在本發(fā)明系統(tǒng)中核心將給這些模塊提供各種高級服務(wù)的VM 20定義為·通用CPU和指令集,由記號表示;·公用裝置的通用I/O支援,提供一般I/O支援可以添加的附加裝置;·數(shù)據(jù)庫管理功能;·數(shù)據(jù)對象傳輸管理;包括格式轉(zhuǎn)換和其他功能;·記號模塊的管理,包括在存儲器中對它們的維護(需要時進行更新)和在需要時對它們的執(zhí)行。在本發(fā)明較佳實施例中,模塊的執(zhí)行在所有時間都是在VM 20控制下進行的。因此,模塊未曾取得主處理器的控制,相對于VM 20而言是被動的。VM 20最好總是以監(jiān)督模式工作,只能執(zhí)行以其記號集的方式定義的指令。模塊都不可以按照用戶模式工作,即假設(shè)取得VM 20的控制。因此,在VM 20利用內(nèi)存映射的執(zhí)行中,只能建立一個內(nèi)存映射,即該監(jiān)督映射。
模塊不可以容納VM 20所規(guī)定的操作系統(tǒng)。這是有保證的,因為模塊僅包括VM記號集中的記號,這些記號不允許訪問存儲核心的代碼空間。如果記號與位于限定集合外的VM 20相遇,異常信號被拋出(ILLOP)。
正如圖4所示意的,終端機1包括終端機特定操作系統(tǒng)8,負責(zé)載入VM 20的TRS模塊(下文中描述為載入程序)。VM 20的代碼儲存于終端機只讀非易失性存儲器11中。在載入TRS前,終端機1的終端易失性存儲器19是空的,沒有有關(guān)交易的數(shù)據(jù),終端讀/寫非易失性存儲器18包括以模塊儲存庫中模塊72的形式由VM 20執(zhí)行的應(yīng)用程序,非易失性存儲器數(shù)據(jù)庫包括用戶特定數(shù)據(jù)和諸如插頭檔案庫的檔案庫,下文中將對此進行描述。如果VM 20還在ICC 5上實施,如上所述的相同原理應(yīng)用于ICC 5的只讀非易失性存儲器13、易失性存儲器14和讀/寫非易失性存儲器15。
由于VM 20是虛擬機器,它象虛擬存儲器那樣對所有形式的終端機或ICC存儲器11,1 8,19,13,14,15進行尋址,即正如從VM 20中看到的,在邏輯地址空間中對它們?nèi)窟M行尋址。在VM 20的實際執(zhí)行中,通過內(nèi)存映射或類似方法把這些邏輯地址空間映射到終端機1或ICC 5的內(nèi)存中的實際地址空間中。在下文中,將參考易失性、讀/寫非易失性和只讀非易失性存儲器為VM 20的一部分。應(yīng)當(dāng)明白,這是指邏輯尋址存儲器空間,除非對終端機1或ICC 5上VM 20的執(zhí)行中的實際地址有特別說明。易失性存儲器經(jīng)不住程序載入或斷電和/或重新開機。較佳地,為了安全緣故,不要給易失性存儲器切斷電源。非易失性存儲器經(jīng)得住程序載入或斷電和/或重新開機。
虛擬機器的描述圖5示出本發(fā)明的VM 20的圖解。VM 20最好是堆棧機器并具有數(shù)據(jù)堆棧指針(儲存在數(shù)據(jù)堆棧指針寄存器32中),指向單芯片存儲器中下壓數(shù)據(jù)堆棧27。所有操作是在這一堆棧27上進行的。數(shù)據(jù)堆棧27用于保留程序參數(shù)和表達式求值的暫時結(jié)果。數(shù)據(jù)被壓入數(shù)據(jù)堆棧27或從數(shù)據(jù)堆棧彈出。VM 20還包括返回堆棧28。VM 20可以使用返回堆棧28來包括返回地址,也可用于暫時儲存。這種多堆棧結(jié)構(gòu)從Forth編程語言(ANSI X3·215-1994)得知。已經(jīng)針對便攜能力、代碼密度、安全、容易編譯以及與其他程序語言一起使用,對這一結(jié)構(gòu)作了進一步修改成。例如,包括可以提供高級程序語言(如C語言)中使用的局部變量幀。因此,依照本發(fā)明的記號編譯器71不僅可以用Forth語言而且可以用C語言和其他程序語言編譯。
依照本發(fā)明,僅有一個與VM 20相關(guān)的數(shù)據(jù)和返回堆棧27、28。數(shù)據(jù)與返回堆棧27,28不是為每一處理線程建立的。依照本發(fā)明,應(yīng)用程序可以僅從返回堆棧28檢索,它們直接放在當(dāng)前程序內(nèi),在退出程序前必須去除在當(dāng)前程序期間置于返回堆棧28上的數(shù)據(jù)。任選地,VM 20包括一安全管理器,用以提供運行時間完整性,監(jiān)測返回堆棧上每一活動和檢查在當(dāng)前程序期間去除的所有數(shù)據(jù)。除了置于那里直接用以暫時儲存的數(shù)據(jù)外,VM 20可保持返回堆棧28上的異常執(zhí)行狀態(tài)信息,局部變量幀、回路控制參數(shù)和數(shù)據(jù)庫上下文。
依照本發(fā)明,VM 20可包括多數(shù)堆棧。例如,不是僅采用返回堆棧28,而是任選地提供另外的堆棧29,如異常堆棧和幀堆棧。采用異常堆棧來儲存在異常處理期間的執(zhí)行狀態(tài)。采用幀堆棧來維持局部變量信息,以及類似C語言的活動記錄。如上所述,異常和幀堆棧29可在返回堆棧28上實現(xiàn)。
數(shù)據(jù)、返回堆棧27、28和諸如異常堆棧的其他堆棧29不是在任何應(yīng)用程序可直接存取的存儲器空間中。數(shù)據(jù)或返回堆棧27、28不能直接尋址,它們只能通過堆棧操作存取。為了安全緣故,對實際實行中如何存儲數(shù)據(jù)無任何限制,所以,有惡意的人無法假設(shè)數(shù)據(jù)是如何被實際儲存的。
VM 20包括一虛擬中央處理器單元22,它包括一虛擬算術(shù)邏輯單元23。VM 20對虛擬或邏輯空間24進行尋址,VM20將其當(dāng)作隨機存取存儲器(RAM),通常作為易失性存儲器19的一部分執(zhí)行,例如終端機1或卡5內(nèi)的隨機存取存儲器中。邏輯數(shù)據(jù)空間24僅可用于數(shù)據(jù)儲存的存取。VM 20把模塊的記號流儲存于代碼存儲器26中,它被VM 20視為只讀存儲器(ROM)。只有VM 20能讀出記號。代碼存儲器26既不可存取應(yīng)用程序也不可存取任何記號。
VM 20可包括虛擬寄存器30。VM 20寄存器30可包括記號指針寄存器31,(它有一個指向下一執(zhí)行記號的指針)、數(shù)據(jù)堆棧指針寄存器32(它有一個指向數(shù)據(jù)堆棧27當(dāng)前頂端(TOS)位置的指針)、返回堆棧指針寄存器33(它有一個指向返回堆棧當(dāng)前頂端位置的指針)、幀指針寄存器34(它有一個指向數(shù)據(jù)空間24中的幀起點的指針)、幀結(jié)束指針寄存器35(它有一個指向數(shù)據(jù)空間24中的幀尾的指針)。由記號集不提供對寄存器31至36的直接存取,僅通過寄存器存取記號對寄存器31至36的直接存取。
最后地,虛擬I/O裝置25通過虛擬總線系統(tǒng)21與CPU22連接,虛擬總線系統(tǒng)21還與堆棧27-29、算術(shù)邏輯單元23、寄存器30、代碼存儲器26和數(shù)據(jù)空間24連接。
本發(fā)明的VM 20最好定義字節(jié)尋址、二進制補碼、32位機器,有32位寄存器和堆棧元件,然而本發(fā)明是不限于此。寄存器/堆棧大小稱為VM 20的單元大小,單元是堆棧上由VM寄存器31至36在堆棧上處理的基本單元。VM 20使用的單元大小認為對本發(fā)明沒有實質(zhì)影響。
模塊的所有程序運行必須遵守下列規(guī)則。
·程序可以不假設(shè)保證把上述任何一類的數(shù)據(jù)保持在返回堆棧28上,所以,可以僅使用顯然為給定類別指定的檢索機制,因為安全管理器可以刪除任何這些數(shù)據(jù)。
把這些類別中一類數(shù)據(jù)傳送至VM 20的程序在退出傳送數(shù)據(jù)的過程前必須采取適當(dāng)?shù)膭幼?,恢?fù)VM 20的數(shù)據(jù)儲存,否則VM 20將解除分配內(nèi)存的相關(guān)部分。
·程序必須假設(shè)通過把這些類別中一類數(shù)據(jù)傳送至VM 20使得以前置于返回堆棧28上的任何數(shù)據(jù)不可存取。
·程序必須假設(shè)通過執(zhí)行給返回堆棧28賦值的代碼使得傳送至VM 20的這些類別中一類數(shù)據(jù)不可存取,直至已經(jīng)已經(jīng)去除這些值時為止,因為返回堆棧僅由指定記號程序存取。
依照本發(fā)明,VM 20的操作系統(tǒng)定義一個可提供給每個模塊的單一地址空間24。該地址空間24將僅供數(shù)據(jù)儲存的存取,稱為“數(shù)據(jù)空間”24。
數(shù)據(jù)空間24被劃分成三個邏輯區(qū)和一個任選邏輯區(qū),每個邏輯區(qū)分別相鄰1.初始化數(shù)據(jù)空間41,它包括在編譯時指定的和在啟動VM核心時以及接著在載入含有初始化數(shù)據(jù)的模塊時設(shè)定的初始值;2.非初始化數(shù)據(jù)空間42,它包括在程序編譯期間分配的變量和狀態(tài)緩沖器。此數(shù)據(jù)空間42被VM 20初始化至零;3.幀存儲器46,它是由幀記號管理的;4.任選的可擴充存儲器45,它包括在程序執(zhí)行期間動態(tài)地分配的一個或多個緩沖器。
另有二個數(shù)據(jù)區(qū),它們是非直接可尋址的5.?dāng)U充存儲器43典型地是大容量存儲器,被用于包含數(shù)據(jù)對象與易失性數(shù)據(jù)庫;6.非易失性存儲器44被用于包含由VM 20保證在模塊載入或切斷電源和重新啟動后繼續(xù)存在(在終端機硬體的限制內(nèi))的數(shù)據(jù),包括模塊儲存庫和非易失性數(shù)據(jù)庫。它可在電池備用隨機存取存儲器、磁盤或其他永久儲存器中實行。非易失性存儲器44是讀/寫永久儲存器18的一部份。
為了增加數(shù)據(jù)的安全、擴充與非易失性存儲器43、44的存取僅通過非初始數(shù)據(jù)空間42中以緩沖器形式提供“窗口”和所選數(shù)據(jù)的記號。因此,程序員僅可詢問記錄而不能知道存取數(shù)據(jù)的確切位置。較佳地,沒有任何文件,也沒有允許程序員定位個人文件或數(shù)據(jù)庫的樹結(jié)構(gòu)。
在模塊使用的每一數(shù)據(jù)空間24中,存儲器是由相關(guān)尋址和僅在運行時分配的。此意思即地址僅在載入模塊時在每一模塊中才有意義。由于不采用絕對尋址,所以,模塊不可能獲取至另一模塊數(shù)據(jù)的存取,除非下文所述的安全模塊存取機制。
幀機制允許VM 20滿足諸如C語言的語言要求,準許在運行時定義局部變量。幀保持在數(shù)據(jù)堆棧27上傳送的過程參數(shù)和“局部”變量(臨時的數(shù)據(jù)存儲,在釋放該幀時,通常在程序執(zhí)行結(jié)束時將被自動釋放)。在一幀中幀起始與結(jié)束指針由VM 20自動地維持。幀指針寄存器34指向幀的邏輯基地址和幀尾指針35指向數(shù)據(jù)空間24中幀的邏輯終地址。利用幀存取記號可從幀中取出參數(shù)。
VM 20任選地提供一可擴充存儲器45的動態(tài)分配緩沖池,當(dāng)作VM 20管理的單個可擴充緩沖器,其出現(xiàn)在程序的非初始數(shù)據(jù)空間42外。程序可請求分配一定量的可擴充存儲器45并使指針返回到該存儲器45的基地址。隨后,程序可從給定地址上釋放存儲器45,例如,在程序終止時可以釋放超出該地址的所有分配。
如果模塊以單一線程執(zhí)行則是較佳的,然而本發(fā)明不限于此。此意思為,如果模塊調(diào)用第二模塊,第二模塊終止,在VM 20返回至第一模塊和繼續(xù)處理前解除第二模塊所有資源的分配。圖6示出由VM 20所見到的邏輯存儲器的圖解表示。如圖6中所示略圖,帶有初始存儲器41、非初始存儲器42和幀存儲器46以及記號代碼空間26的第一模塊(左邊)在地址1處開始已被載入可讀/寫存儲器第一模塊也調(diào)用并已分配部分可擴充緩沖區(qū)45。當(dāng)?shù)诙K(右邊)被第一模塊調(diào)用(例如,輸入功能fgh,在互斥表中它處于模塊1可輸入功能的首部),那么從地址2開始按照需要分配包括初始存儲器41’、非初始存儲器42’和幀存儲器46’的數(shù)據(jù)空間24‘。模塊2的記號由VM 20直接從模塊儲存庫讀出,這是本發(fā)明允許的選項。如果從模塊2調(diào)用,VM 20在內(nèi)存中分配的第二模塊可擴充存儲器45’高于第一模塊可擴充存儲器45’。當(dāng)完成第二模塊,在地址4上解除所有存儲器的分配(“橡皮筋效應(yīng)”)。在解除分配時最好刪除所有暫時儲存的數(shù)據(jù)。假如需要,那么可以把更多的可擴充存儲器45調(diào)用返回至第一模塊。假如再次調(diào)用第二模塊,將分配一個不同于第一次調(diào)用時的可擴充存儲器45’的起始位置。
除可擴充存儲器管理記號EXTEND、CEXTEND和RELEASE以及異常處理記號THROW和QTHROW外要求所有記號對可擴充存儲器指針無任何凈影響。如果記號分配給可擴充存儲器45,還必須釋放它,包括單元對準的任何效應(yīng)??蓴U充存儲器45的依次分配在一模塊中最好是鄰接的,然而在模塊間不必是鄰接的,除非利用IMCALL或DOSOCKET記號的模塊間調(diào)用將保持鄰接。在完成模塊的執(zhí)行時將出現(xiàn)動態(tài)分配的可擴充存儲器45的自動釋放,限制了程序失誤對完全釋放存儲器的影響。此外,如果出現(xiàn)THROW異常,可以把動態(tài)分配的可擴充存儲器45的分配恢復(fù)至其控制CATCH異常時的條件。
用戶變量是以單元衡量大小的變量,其中VM 20保持客戶程序的上下文信息。VM 20預(yù)先分配了用戶變量的儲存器??梢蕴峁┯邢迶?shù)目的變量,例如,十六個變量(稱為0至15)。支援多任務(wù)的VM 20執(zhí)行可以給每一任務(wù)提供一組用戶變量。
VM 20經(jīng)記號CATCH、THROW和QTHROW提供單一異常處理機制。這些記號是從Lisp異常處理機制導(dǎo)出的,出現(xiàn)于如CATCH和THROW的ANS Forth中。這種機制的目的是在軟件的不同層次上在程序控制下提供異常的局部處理。此概念即,程序把函數(shù)執(zhí)行指針傳送至記號CATCH,它將執(zhí)行此函數(shù)和返回一代碼,表示在其執(zhí)行期間出現(xiàn)的什么異常(如果有的話)。如果在送至CATCH供執(zhí)行的函數(shù)中出現(xiàn)THROW,那么CATCH記錄與執(zhí)行程序相關(guān)的信息,足夠恢復(fù)其當(dāng)前執(zhí)行狀態(tài)應(yīng)。這包括(但不限于)數(shù)據(jù)與返回堆棧深度、幀指針以及在某些情況中的可擴充存儲器指針。收集的代表執(zhí)行狀態(tài)的信息稱為“異常幀”,異常幀被保持在異常堆棧上。按照CATCH,程序可檢查可能已返回的任何異常代碼,并選定對其進行本地處理或者將其THROW至較高一層的處理。VM 20提供一個缺省的最外層,其上將捕捉異常。該最外層將在已經(jīng)沒有內(nèi)層CATCH建立時被啟動。缺省的異常處理器異常中斷任何當(dāng)前終端交易以及試圖重新載入TRS模塊和重新進入TRS主回路。如果出現(xiàn)這種條件,VM 20發(fā)出ANS Forth異常-10(除零)。VM 20可發(fā)出ANS Forth支持的其他一般異常。
對于處理裝置和輸入/輸出(I/O)服務(wù),給每一裝置(包括VM 20把較低層次操作隱藏在裝置特定功能之后的那些裝置)分配一裝置類型(用于對結(jié)果代碼分類)和一唯一裝置編號。裝置編號是任意的;然而,可僅用單個記號作為裝置編號-1至15(4位)的參考號,所以,這些號分配給最常用的裝置,如鍵盤、ICC讀出器、磁條卡讀出器、顯示器、打印機、電源管理裝置或售貨機。一般I/O設(shè)施是由把裝置編號作為輸入?yún)?shù)的函數(shù)提供的。
依照本發(fā)明的終端機1最好包括至少三個主要非易失性數(shù)據(jù)庫指定應(yīng)用的交易記錄庫,一種或多種語言的消息數(shù)據(jù)庫以及模塊數(shù)據(jù)庫。VM 20盡量保護數(shù)據(jù)庫,因為它們包有專用信息。限制對數(shù)據(jù)庫的存取。VM 20提供一種處理數(shù)據(jù)庫的機制(VM 20作為“服務(wù)器”),該機制隱蔽應(yīng)用軟件(應(yīng)用軟件作為“客戶”)的執(zhí)行細節(jié)。不允許從運行于VM 20上的模塊直接訪問數(shù)據(jù)庫。服務(wù)的實施具有下列特性,將參考圖7說明這些特征·在任何給定時間,客戶即以模塊運行的程序已經(jīng)訪問當(dāng)前所選的數(shù)據(jù)庫(DBCURRENT)和在所有限定數(shù)據(jù)庫上共享的當(dāng)前所選的記錄數(shù)(DBRECNUM)。
·通過一數(shù)據(jù)庫參數(shù)塊(DPB)51在客戶與服務(wù)器之間傳送有關(guān)每一數(shù)據(jù)庫的信息,服務(wù)器可進行讀出與寫入。在處于客戶數(shù)據(jù)空間24的意義上,客戶“擁有”DPB 51;但是,不允許客戶直接訪問它。而是,僅可以采用數(shù)據(jù)庫服務(wù)記號訪問數(shù)據(jù)。DPB 51有一種標準結(jié)構(gòu),它包括至少一個DPB鏈、數(shù)據(jù)庫指針、數(shù)據(jù)庫類型和記錄大小指示以及下一個可利用記錄數(shù)的字段。在DPB 51中必須預(yù)置指定數(shù)據(jù)庫的所有信息??蛻糗浖PB 51可以不作任何接著的直接訪問,必須不作出在已經(jīng)載入定義DPB 51的模塊供執(zhí)行值直接保持在DPB 51中的假設(shè)。數(shù)據(jù)庫參數(shù)塊51以指向模塊初始化數(shù)據(jù)區(qū)段中鏈接表的指針(DPB鏈)形式被傳送至記號載入器/解釋器。此字段必須復(fù)位到表中下一DPB 51初始化數(shù)據(jù)中的地址;或者為零假如該DPB 51是表中最后一個或是僅有的DPB 51。對于存在于客戶初始化數(shù)據(jù)空間中的編譯數(shù)據(jù)庫,DB指針必須復(fù)位到初始化數(shù)據(jù)中的“原始”地址。對于由服務(wù)器控制數(shù)據(jù)庫的存儲,字段必須預(yù)置到零。DB型以代碼形式提供數(shù)據(jù)庫細節(jié)。至少有三種數(shù)據(jù)庫“易失性”數(shù)據(jù)庫,模塊負載之間或者數(shù)據(jù)庫駐留的終端機1斷電時無需保存其內(nèi)容。
“非易失性”數(shù)據(jù)庫,模塊負載之間或者數(shù)據(jù)庫駐留的終端機1斷電時需要保存其內(nèi)容。如果定義非易失性數(shù)據(jù)庫的模塊被更換,那么數(shù)據(jù)庫在舊模塊被卸載時消失。
“編譯數(shù)據(jù)庫”是由記號編譯器71按照照固定長度記錄構(gòu)建在初始化數(shù)據(jù)的鄰接區(qū)中。從編譯數(shù)據(jù)庫可以添加或刪除記錄,在運行時間可以不對數(shù)據(jù)庫進行初始化,否則將支持完全讀寫能力。
對于編譯數(shù)據(jù)庫,下一可供使用的記錄數(shù)字字段必須設(shè)定一加上數(shù)據(jù)庫中最后分配的記錄數(shù)。對于其他任何數(shù)據(jù)庫,此字段被設(shè)為零。
·通過服務(wù)器把當(dāng)前記錄上的視窗地址(一記錄緩沖器53)提供給每個客戶數(shù)據(jù)庫的客戶。對于某些數(shù)據(jù)庫操作,客戶可把字符串和鍵緩沖器52的地址傳送至服務(wù)器。對于由客戶模塊已經(jīng)告知服務(wù)器的每一數(shù)據(jù)庫,通過VM 20提供記錄緩沖器53。這一緩沖器53從對準地址開始。與特定數(shù)據(jù)庫有關(guān)的記錄緩沖器53上下文在一條記錄選擇后保持可提供使用直至客戶從該數(shù)據(jù)庫選擇另一條記錄為止。除了這些記錄緩沖器53、編譯數(shù)據(jù)庫和由特定數(shù)據(jù)庫函數(shù)在數(shù)據(jù)堆棧27上傳送的參數(shù)外,在客戶與服務(wù)器之間不共享其他任何數(shù)據(jù)空間54。程序可以不假設(shè)數(shù)據(jù)庫中的記錄在內(nèi)存中是鄰接。
·由其中定義DPB的模塊的載入過程具體說明數(shù)據(jù)庫。當(dāng)應(yīng)用被終端常駐服務(wù)終止時,當(dāng)涉及這些數(shù)據(jù)庫的所有服務(wù)器分配的數(shù)據(jù)儲存被釋放時,由應(yīng)用模塊安裝的易失性數(shù)據(jù)庫不用由服務(wù)器具體說明并且對服務(wù)器是透明的。
·當(dāng)限定非易失性數(shù)據(jù)庫的模塊被替換時,服務(wù)器刪除它們。如果模塊是當(dāng)被替換時被載入的,例如在TRS模塊的情況中,當(dāng)模塊被卸載時服務(wù)器必須刪除模塊的非易失性數(shù)據(jù)庫。
在模塊載入時由VM 20采取的行動何時具體說明數(shù)據(jù)庫取決于DPB 51中DP類型或DB指針的值以及數(shù)據(jù)庫是易失性還是非易失性。如果數(shù)據(jù)庫是非易失性型的,采用DPB地址并結(jié)合模塊識別代碼(模塊ID)來識別屬于數(shù)據(jù)庫的任何現(xiàn)有數(shù)據(jù)。如果存在現(xiàn)有數(shù)據(jù),下一個可利用的記錄數(shù)恢復(fù)到其以前值。否則,服務(wù)器(VM 20)具體說明新的非易失性儲存空間和將下一個可利用記錄數(shù)設(shè)定為零。在二種情況中,為數(shù)據(jù)庫中的當(dāng)前記錄提供一緩沖器53。如果DB指針為零和DP類型不為編譯類型,那么服務(wù)器具體說明或可利用數(shù)據(jù)庫所需的儲存器可供利用,將儲存器全部初始化為零,給數(shù)據(jù)庫的“當(dāng)前記錄”提供一緩沖器53,以及將下一可利用記錄數(shù)(DBAVAIL)設(shè)定為零。如果DB指針不為零和DP類型是編譯類型,那么服務(wù)器建立內(nèi)部結(jié)構(gòu),以利用在DB指針處已經(jīng)傳送原始地址的客戶數(shù)據(jù)結(jié)構(gòu),以及將下一可利用記錄數(shù)(DBAVAIL)設(shè)定為在DPB 51下一可利用記錄數(shù)字段中傳送的值上。服務(wù)器維持實際數(shù)據(jù)庫記錄55、數(shù)據(jù)庫控制塊56中地址位置與記錄間的關(guān)系以及模塊當(dāng)前正在存取上下文信息塊57中那個數(shù)據(jù)庫的記錄。
現(xiàn)在將參照圖6描述本發(fā)明的安全模塊處理程序。在圖6中示出了邏輯讀/寫存儲器的區(qū)域??捎勺髠?cè)模塊(第一模塊)存取的存儲器區(qū)域有一條虛線。第一模塊不能存取的存儲器區(qū)域有一條實線的界線。可由一個以上模塊存取的存儲器區(qū)域以點劃線示出。VM 20保護數(shù)據(jù)庫DB1與DB2以及數(shù)據(jù)庫儲存庫和模塊儲存庫中的模塊,以使它們不被任何模塊存取。當(dāng)?shù)谝荒K被載入時,存儲器42中的非初始化數(shù)據(jù)可由第一模塊存取但是VM 20不允許此模塊外的任何區(qū)域被模塊直接存取。對寄存器、堆棧或幀存儲器46的存取僅可通過相關(guān)記號進行。數(shù)據(jù)庫只能經(jīng)上述窗口程序存取。具體說,第一模塊不可訪問記號所在的它自己的程序存儲器26,不訪問任何其他模塊。這對于保護存儲器以防病毒是十分重要的。依照本發(fā)明,把存儲器分配給限定和保護的第一模塊。這是根據(jù)包含在模塊中的被分配存儲器量的指示由存儲器分配限定的。它是受保護的,因為無其他模塊可存取所分配空間,不給模塊以外的任何程序提供其他載入機制。由于運行模塊的較佳方法是單線程的,在其它任何模塊變成有效前分配在可擴充緩沖器中的任何存儲器可以解除分配。解除分配的存儲器最好刪除。
第一模塊的互斥輸入表處于其第一模塊不能直接存取的首部中。VM 20讀取首部和調(diào)用輸入表中所述的第二模塊(第二模塊的功能fgh)。VM 20載入第二模塊和給非初始化數(shù)據(jù)42’,幀存儲器46’和初始化數(shù)據(jù)41’分配內(nèi)存。第一模塊不能存取第二模塊的任何部分,反之亦然。在第二模塊的首部中,功能fgh已被置于能夠輸出功能的互斥表中。這可以使功能fgh供其他模塊利用。VM 20搜尋第二模塊代碼存儲器空間26’中的功能fgh,執(zhí)行記號流與相應(yīng)的直接插入數(shù)據(jù)(由字符串TITTITT表示)。在這個例子中,此段代碼需要存取到數(shù)據(jù)庫DB2。本發(fā)明的數(shù)據(jù)庫由模塊“擁有”,即數(shù)據(jù)庫僅由模塊存取,第一次載入模塊時對其作了具體說明。從代碼空間26’讀出的數(shù)據(jù)庫存取記號由VM 20執(zhí)行,它在載入時分配第二模塊的非初始化數(shù)據(jù)空間42’中緩沖器53’。功能fgh需要存取DB2的第三記錄。然后,VM 20把所參考的記錄傳送到第二模塊中的窗口53’,由此輸出至第一模塊的非初始化空間42。利用相同的數(shù)據(jù)庫窗口過程,第一模塊從其自有的數(shù)據(jù)庫DB1也可得到一記錄,將其傳送至非初始化數(shù)據(jù)空間42中的緩沖器53.第一模塊現(xiàn)在可以在兩個程序的結(jié)果上操作。
VM 20最好采用基本編碼規(guī)則(Basic Encoding Rules)或標記、長度、值(對于本申請BER-TLV縮短為TLV)處理數(shù)據(jù)對象,正如ISO/IEC 8825(1990)中所述。TLV數(shù)據(jù)對象由二或三個連續(xù)字段組成一個標記字段規(guī)定其分類、類型和號碼,一個長度字段規(guī)定數(shù)據(jù)的大小,如果長度不為零,一個值字段包括數(shù)據(jù)。因為ICC響應(yīng)在大小上通常限制于255字節(jié)或更小,依照本發(fā)明,TLV目標存在最大規(guī)模。標記字段最好為一或二字節(jié),長度字段最好是一或二字節(jié),因此值字段的最大規(guī)模最好是252字節(jié)(如此長的字段需要二個長度字節(jié),如下所述)。標記字段的第一字節(jié)被分解為三個字段。位7與8規(guī)定目標的分類。位6確定值字段是否包括“原始”數(shù)據(jù)或它是否是由其它TLV編碼字段組成的“結(jié)構(gòu)”目標。結(jié)構(gòu)目標也稱為模板。在碰到它們時它們會引起其值字段對TLV序列作語法解析。位1至5規(guī)定目標的數(shù)目,或者如果設(shè)定所有這些位,它們指示附加標記字節(jié)跟隨。如果還有另一字節(jié)跟隨,附加標記字節(jié)設(shè)定其第八位。采用所有的位,最高達到二字節(jié)確定標記名。長度字段由一至三連續(xù)字節(jié)(通常為二個)組成。如果第一字節(jié)的位8是0,則位1至7指示值字段的大小。第一字節(jié)的位8是1,則位1至7指示隨后的字節(jié)的數(shù)目。隨后的字節(jié)(如果有的話)指示值字段的大小并且最高字節(jié)最先出現(xiàn)。值字段可由“原始”數(shù)據(jù)組成或與附加TLV代碼序列一起“構(gòu)建”。如果設(shè)定標記字段中的第一字節(jié)的位6,那么值字段包括附加TLV序列??梢圆捎脦追N不同格式對原始目標進行編碼前段為零或后段所有位設(shè)定為1的二十進制半字節(jié)、二進制數(shù)或字節(jié)序列,字母/數(shù)字的字符序列或ASCⅡ字節(jié)、或非限定格式。在采用每一種格式時可以對其進行不同處理。ICC 5還可使用數(shù)據(jù)對象表(DOL)來請求指定標記名稱的值???傳送由標記和長度字段表組成的數(shù)據(jù)對象表,終端機1返回相應(yīng)的值字段,無界定符號。
采用的每個TLV必須由終端機或應(yīng)用程序定義,以建立其數(shù)據(jù)類型和名稱。由于終端機程序與應(yīng)用程序是分別開發(fā)的,本發(fā)明的VM 20使用鏈接結(jié)構(gòu)(平衡二進制樹)允許從整體標記名稱表快速添加或去除標記名稱。這需要為限定TLV模塊中初始化數(shù)據(jù)空間41中的每個TLV編譯下列結(jié)構(gòu)“鏈接”,給樹元素提供鏈路的具有“左”(高階的二個字節(jié))和“右”(低階的二個字節(jié))分量的單元。
“鏈接左”,從這個TLV的存取參數(shù)到其標記在數(shù)值上小于這條記錄標記的TLV記錄存取參數(shù)的16位帶符號位移。零值表示這個TLV與其標記在數(shù)值上小于這個的標記的TLV不鏈接。
“鏈接右”從這個TLV的存取參數(shù)到其標記在數(shù)值上大于這條記錄標記的TLV記錄存取參數(shù)的16位帶符號位移。零值表示這個TLV與其標記在數(shù)值上大于這個的標記的TLV不鏈接。
“標記”,其大端(big-endian)數(shù)值為TLV標記的雙字節(jié)字符串。
“類型”,規(guī)定控制信息的單字節(jié)。
“保留”,必須由編譯器71初始化為零的字節(jié)。
“數(shù)據(jù)”,保持VM特定信息(包括訪問這個TLV的長度和值字段)的單元。該字段必須由編譯器71初始化為零。系統(tǒng)還必須為每個TLV維持一狀態(tài)字節(jié)。它可以是上述結(jié)構(gòu)中的保留字節(jié)。如果已經(jīng)給TLV分配一值,結(jié)果在已經(jīng)采用記號TLVPARSE或TLVSTORE進行處理的序列中,將設(shè)定該字節(jié)的低階位。維持所分配狀態(tài)的目的是識別包含有效數(shù)據(jù)(它可能為零)的TLV值以及使它們區(qū)別于從未設(shè)定和因此是無效的TLV值。VM核心通過指針表維持到初始化數(shù)據(jù)空間41(包括如上所述的它們的實際定義)來管理TLV標記的整體表。當(dāng)模塊被載入時,其TLV定義被增加到該表中,作為其初始化的一部分;當(dāng)模塊被卸載時,由VM 20自動地從表中去除其TLV定義。如果模塊包括已經(jīng)存在的TLV定義,會拋出異常。上述“鏈接”字段的地址作為TLV參考的“存取參數(shù)”而返回。在VM 20已經(jīng)具體說明TLV定義后,程序員不應(yīng)直接存取這些字段,也不作任何有關(guān)其內(nèi)容的假設(shè)。
把對源代碼中TLV定義的參考編譯為對以上限定的定義結(jié)構(gòu)的直接參考或者數(shù)值標記值。在某些二進制TLV定義中,規(guī)定各個位或一組位具有特定意義。它們被稱為“TLV位”??梢园褜LV位的參考編譯為指向TLV值字段中的位的一個文字。位0是第一字節(jié)最低位,位7是同一字節(jié)的最高位,位8是第二字節(jié)最低位,依此類推。
通過由VM 20維持的252字節(jié)暫時存儲區(qū)以數(shù)據(jù)庫窗口的形式把分配給TLV定義的數(shù)據(jù)暴露給應(yīng)用程序(見圖7)。準許應(yīng)用程序改變該暫時存儲區(qū)的內(nèi)容。如果改變被保留,暫時存儲區(qū)中的地址和長度必須送回到TLVSTORE記號。當(dāng)接著執(zhí)行任何TLV記號時,暫時存儲區(qū)中的地址和內(nèi)容可能變成無效。
作為插入讀出器7中卡5的安全管理的一部分,需要對已知丟失或失效的卡5進行檢查。把這種卡5的名單稱為黑名單或熱卡表。黑名單或熱卡表的管理是由大熱卡表管理特有的一組專用功能提供的。典型的名單表可包括10,000個主帳號(PAN)(每個帳號最多為10字節(jié))或20位二十進制(BCD)數(shù)字。PAN項目以壓縮數(shù)值(cn)格式存儲,右邊填充十六進制FH。由于PAN最多是十九位BCD數(shù)字,表中的項目總是要填充至少一個FH。當(dāng)對熱卡表進行搜尋時,表項目中的FH被認為是通配符或者“不介意”數(shù)字,但是,PAN中用作輸入的任何FH不是通配符。通配符僅出現(xiàn)在項目的右側(cè)。如果存在一個同項目中第一FH相同的表項目,可以認為在熱卡表中將找到PAN。
安全管理的另一部份是給加密和解碼數(shù)據(jù)提供加密服務(wù)??梢圆捎萌魏魏线m的加密方法。具體地給VM 20提供三種加密算法模數(shù)乘積和模數(shù)取冪(它們應(yīng)用于RSA算法中)以及安全雜湊算法SHA-1,但是本發(fā)明不限于此。模數(shù)乘積對二個不帶符號的值x與y進行乘積,這里利用模數(shù)z簡化該乘積,公式是結(jié)果=mod(x*y,z)輸入值(x,y,z)全都具有相同長度。它們由字節(jié)字符串表示,可以為任何8位的倍數(shù),包括1024位。其值必須按“大端”字節(jié)次序。
安全雜湊算法(SHA-1)算法被標準化為FIPS 180-1。SHA-1采用任意長度的輸入消息和產(chǎn)生一個20字節(jié)的雜湊值。模數(shù)取冪將不帶符號的值x自乘不帶符號次方y(tǒng),這里利用模數(shù)z簡化該乘積,公式是
結(jié)果=mod(x^y,z)輸入值x和模數(shù)z由字節(jié)字符串表示,可以為8位的任何倍數(shù),包括1024位。其值必須按“大端”字節(jié)次序。
服務(wù),因此軟件,甚至I/O裝置可根據(jù)市場需求隨時間改變。當(dāng)需要作重要改變時,可以通過手動或經(jīng)電信網(wǎng)路以遙控方式對終端機1中的軟件進行更新。然而,對于與用戶有關(guān)的服務(wù),最好采用使少數(shù)或特定用戶對由終端機1提供的服務(wù)進行更新的動態(tài)且安全的方法。根據(jù)本發(fā)明的“插頭與插座”軟件裝置提供一種構(gòu)成終端程序和應(yīng)用的不同模塊在線結(jié)構(gòu)的柔性與安全方式。如圖8所示,在本發(fā)明的交易系統(tǒng)中,可以定義許多程序(稱為“插座”60),通過應(yīng)用程序員(因為他處于獲取者控制下和支付系統(tǒng)監(jiān)督下,因此是安全)可以將它們插入到應(yīng)用61,62中,在交易處理期間起增加輔助增強代碼(稱為“插頭”66)的席位支架作用。被插入插座60中的所有輔助代碼必須以VM 20的記號集的方式撰寫。插座60最好置于現(xiàn)行終端機應(yīng)用61,62中不同合適地點,甚至在終端機程序本身中。它們習(xí)常稱為庫函數(shù),如果支付系統(tǒng)預(yù)知需要改變庫函數(shù)操作方式,甚至?xí)霈F(xiàn)在庫函數(shù)中。由VM 20將插座60初始化為缺省性態(tài)。如果終端程序不再采取進一步行動,當(dāng)插座60被執(zhí)行時,它們的缺省性態(tài)將是不作為(即無操作)。
插頭66包括可執(zhí)行代碼,以終端機1支持的記號書寫,在由插座60限定的點處可以將其插入,以增強缺省終端邏輯。插頭66可以已經(jīng)存在于終端機1的插頭庫63中,從ICC 5調(diào)用,例如,ICC 5中的插座/插頭標識符67和終端機1中的邏輯。插座/插頭標識符67包括待插入插頭與插座二者的參考,這里插頭不在ICC 5上而是在庫63中。插頭66還可來自輸入裝置65(如ICC 5或接至終端機1的主機系統(tǒng)),但是只能得到支付系統(tǒng)的成員同意,例如發(fā)行人、獲取者和零售批發(fā)商。
在交易終結(jié)時,插座60恢復(fù)到其原始應(yīng)用缺省性態(tài)。根據(jù)本發(fā)明,ICC 5最好不包括整個應(yīng)用而僅包括插頭66,由于它們需要較少存儲器增強了現(xiàn)行終端機應(yīng)用。
插座60保持執(zhí)行指針,也稱為程序指針,允許建立一在執(zhí)行時可以改變其性態(tài)的程序。插座60可以被看成(和被實施)為通過DOSOCKET記號存取的過程的陣列,它采用插座號碼作為內(nèi)聯(lián)字節(jié),或者通過IDOSOCKET記號存取的過程的陣列,它從數(shù)據(jù)堆棧27取得插座號碼。
插座60能夠重建終端機程序或應(yīng)用,以提供改型或增強型的交易處理流程。另一方面,ICC 5中的插座可以允許從終端機1對ICC 5升級。插座60提供了幾個不同來源(獲取者,發(fā)行者等)的軟件模塊與程序之間的接口。由于獲取者和發(fā)行者具有契約關(guān)系,他們可以同意在終端機中使用由獲取者程序提供的特定插座60,以致發(fā)行者可以延伸程序性態(tài),例如提供忠實功能(空里、聯(lián)票等)。
模塊可指定當(dāng)插座60被載入以執(zhí)行時插座60自動重構(gòu),或者客戶程序可以采用程序化的方式在運行時把新程序分配給插座。只要安全條件準許,可以給應(yīng)用中的插座60分配缺省性態(tài),然后可以由下一模塊用新程序重新插入插座,提供特定性態(tài)。為了避免不定情形,如果面向使用的特定插座60的所有程序不具有數(shù)據(jù)堆棧效應(yīng)(下文中所述的插座為零除外),這是最佳的。這確保了程序連續(xù)性,不管執(zhí)行面向哪個版本的程序。所有插座60的缺省動作在修改前至少是不操作的動作。
作為上述CSS的一部分,獲取者通過ICC 5上的代碼可以允許交易加強。如果如此,他們可利用插座60來實施。文件庫或可執(zhí)行模塊包括來自ICC 5的最近插頭66的新插座60的定義。在這種情況下,模塊應(yīng)當(dāng)定義插座60,然后使用SETSOCKET記號給它分配缺省性態(tài)(通常為零性態(tài))。如果存取控制允許它,那么,ICC 5可以稍后下載插頭66,包括定義新性態(tài)的記號,然后使用SETSOCKE記號把它儲存到該同一插座60中,替換缺省性態(tài)。
修正性態(tài)是方便的和靈活的,并會給惡意的人修改有利于他們的性態(tài)提供機會。如果他們可以修改插座的性態(tài)或者是在卡得到成功認證前置于程序流程中,那么對于來自ICC 5的插頭66需要特別小心。為了安全起見,根據(jù)本發(fā)明,終端機軟件能夠指定插座控制程序,該程序控制是否能夠修改各個插座60。因此,例如,從ICC 5下載的代碼的執(zhí)行可以由獲取者嚴格控制,以致不可以從ICC 5插入插座直至在卡上已經(jīng)執(zhí)行所有驗證程序為止,如電子簽名。
根據(jù)本發(fā)明,插座安全性包括指定將應(yīng)用于下一試圖插入插座60(SETPLUGCONTROL記號)的插座控制程序。不管現(xiàn)在可否修改插座60,對于給定插座號碼,必須把程序PLUGCONTROL寫入返回中。當(dāng)在模塊載入時接著對模塊的插座表進行處理時,或者當(dāng)以程序化方式插入插座60時,VM 20首先執(zhí)行用戶撰寫的PLUGCONTROL程序,以確定是否真的能夠插入插座60,如果不能的話,保持插座60的現(xiàn)行性態(tài)。
在載入另一模塊以供執(zhí)行前希望限定對任何插座60存取的模塊可以用所選PLUGCONTROL功能作為一參數(shù),在載入該模塊前可執(zhí)行由插入插座(插座零)上SETPLUGCONTROL記號定義的程序。當(dāng)載入以供其執(zhí)行的下一模塊和其它任何模塊使其插座表被處理時,被用戶限定的PLUGCONTROL程序拒絕存取的插座60將保持其現(xiàn)行性態(tài)。這種情況不認為是差錯。在執(zhí)行進一步代碼前希望限定對任何插座60存取的代碼可以用所選PLUGCONTROL程序作為參數(shù),在程序流程中的適當(dāng)點處執(zhí)行由SETPLUGCONTROL記號定義程序。對插頭60的可編程請求能夠確定該請求是否被對SETSOCKET的調(diào)用所接受或拒絕?;蚴峭ㄟ^模塊載入過程或是通過程序化命令動態(tài)地修改其性態(tài)的任何插座60被恢復(fù)到其載入最新可執(zhí)行模塊以供執(zhí)行時的性態(tài),作為封裝在模塊執(zhí)行記號(EXECUTEMDULE)定義的程序中的終止程序的一部分。
作為獲取者特定功能的一個例子,假定基本交易代碼包括短語27 SOCKETLOYALTY,它定義LOYALTY并提供以后執(zhí)行。獲取者的交易程序代碼進一步定義代碼,只有在發(fā)行者與獲取者相同以及交易量超過某一最低量時該代碼為該插座設(shè)定準許標志。在交易期間有一條從ICC 5中以任意代碼讀出的命令。ICC代碼的一部分能夠定義REWARD程序,對用戶飛行英里進行更新,然后試圖執(zhí)行短語PLUG REWARD INTO LOYALTY。這個短語將REWARD的執(zhí)行與LOYALTY的執(zhí)行相連接。如果LOYALTY插座準許標志是根據(jù)上述邏輯設(shè)定的,那么將發(fā)生SETSOCKET;否則,LOYALTY將保持其缺省性態(tài),如不操作。然后,當(dāng)應(yīng)用代碼稍后執(zhí)行其LOYALTY功能時,僅跟據(jù)獲取者定義的規(guī)則將允許ICC定義的REWARD。
通常,運行于終端機1上的VM 20具有有限個數(shù)的插座60,例如64個插座,編號0至63。采用其最基本的形式,框架終端程序幾乎完全由插座60以及從插座到插座的基本程序流組成。然后,利用交易處理程序,由在應(yīng)用選擇時間或是從終端機1或是從ICC 5載入的其他模塊插入插座60。在應(yīng)用選擇前在框架程序中出現(xiàn)的插座60由TRS分配缺省空性態(tài)。如果給定插座60是由一個以上模塊利用程序插入的,那么,最后操作會簡單地代替較早的任何操作。
模塊的載入、處理與執(zhí)行為在VM 20(包括按記號模塊編譯的終端常駐服務(wù))上運行而撰寫的代碼可以假設(shè)通電后,支持VM 20的特定終端機核心軟件已經(jīng)進行任何必要的特定終端機通電的初始化,通過下文中將描述的模塊載入過程已經(jīng)開始執(zhí)行終端常駐服務(wù)(TRS)的主要處理回路。如果退出TRS的主要處理回路,控制返回到軟件的特定終端機層,負責(zé)重新載入TRS和重新進入其主要回路。每當(dāng)退出TRS時便釋放所有VM資源,但非易失性數(shù)據(jù)庫中的數(shù)據(jù)例外。資源的釋放是在終端機斷電時、TRS退出時或TRS被終端機的操作系統(tǒng)(如果有)重新啟動時發(fā)生。由于TRS主要回路是最新進入的,如果已經(jīng)獲得TRS模塊的更新版本,那么,在TRS退出時將釋放所有TRS資源,包括其非易失性數(shù)據(jù)庫中的數(shù)據(jù)。
在終端機1或ICC 5上運行的軟件是由VM 20以一種或多種模塊的形式管理的,這里每個模塊可包括下列任何種類的信息·記號化代碼·初始化數(shù)據(jù)·非初始化數(shù)據(jù)分配·數(shù)據(jù)庫定義·TLV定義·插座表·模塊的相互依賴關(guān)系每一模塊最好以模塊傳遞格式(MDF)傳送至終端機1。VM 20維護已經(jīng)被傳遞并安裝在終端機1上的模塊的讀/寫非易失性存儲器18中的非易失性儲存庫。儲存庫中的每個模塊將由模塊標識符或模塊ID來識別。在模塊儲存庫中登記后,模塊信息通過由VM 20維護的非易失性模塊數(shù)據(jù)庫提供使用并被儲存在非易失性存儲器18中。根據(jù)本發(fā)明,VM 20保護儲存庫中的模塊免于被其它任何模塊修改,因為沒有任何記號可作這樣的訪問。再者,當(dāng)存在具有相同模塊標識符的模塊可供執(zhí)行時VM 20可以提供給定模塊的新版本被置于儲存庫中。
在模塊處理中在概念上存在二個階段首先,將模塊“載入”,意思是指可以對其進行存取及對其數(shù)據(jù)、數(shù)據(jù)庫等,可具體說明,其次,如果模塊是可執(zhí)行模塊,那么VM 20從其入口點開始對其記號進行處理。參考圖9所示的流程圖將描述執(zhí)行程序。
首先,在步驟100中,對資源進行標示和保存。在模塊執(zhí)行前,VM 20標示出其狀態(tài)和保存所需的任何資源,以致以后可以恢復(fù)這一狀態(tài)。狀態(tài)包括
·可擴充存儲器指針、幀指針和幀尾指針的的位置。
·整個當(dāng)前插座表的內(nèi)容。
·TLV標記名稱表中登記的TLV。
·為了管理模塊的啟動和執(zhí)行VM執(zhí)行需要的其他內(nèi)部數(shù)據(jù)。
在步驟102中載入下一個模塊。把執(zhí)行模塊的模塊ID傳送至“載入模塊”子程序,下文將對其進行說明。如果模塊載入沒有步驟104中確定的差錯,它可以執(zhí)行,程序行進至步驟108。如果在步驟104中確定有差錯,放棄模塊的執(zhí)行,在步驟105中釋放模塊執(zhí)行所需的全部資源。這需要VM 20進行下列動作必須釋放載入模塊所需的所有易失性存儲器和需要被載入的任何模塊并清零。這包括(但是不限于此)·所有模塊的初始化和非初始化數(shù)據(jù)所需的空間。
任何內(nèi)部TLV緩沖器所需的空間和這些模塊定義的管理數(shù)據(jù)結(jié)構(gòu)。
·任何內(nèi)部緩沖器所需的空間和由這些模塊定義的數(shù)據(jù)庫所需的管理數(shù)據(jù)結(jié)構(gòu)。
·為了標記查看,由VM維護的TLV名稱表必須在模塊執(zhí)行前立即恢復(fù)其狀態(tài)。
·由VM維護的插座表的內(nèi)容必須在模塊執(zhí)行前立刻恢復(fù)其狀態(tài)。
·幀指針、幀尾指針和可擴充存儲器指針的內(nèi)容在模塊執(zhí)行前立刻恢復(fù)其值。
在模塊成功載入后,在步驟106中確定模塊是可執(zhí)行模塊還是文件庫模塊。如果是后者,不發(fā)生模塊的執(zhí)行,象在步驟105中所述的一樣,在步驟110中VM20釋放所有資源。如果模塊是可執(zhí)行的,確定指定模塊的入口點的字段。
VM 20通過調(diào)用被入口點字段中指定的記號啟動模塊。然后,在步驟108中又執(zhí)行每個記號。在步驟110釋放所有資源后,利用“返回(RETURN)”記號模塊終止執(zhí)行。
參考圖10中所示的流程圖將描述載入模塊所需的過程,即“載入模塊”子程序。如果在模塊載入期間檢測到差錯,這導(dǎo)致“載入模塊”子程序立刻返回到“假”。一般差錯是指諸如“超出存儲器”的差錯,這里,當(dāng)發(fā)現(xiàn)重復(fù)TLV標記時,沒有足夠資源給初始化數(shù)據(jù)、非初始化數(shù)據(jù),數(shù)據(jù)庫或TLV提供空間。初始化數(shù)據(jù)必須在對數(shù)據(jù)庫進行前建立,如此的TLV片段是初始化數(shù)據(jù)片段的一部分。在步驟120中,確定模塊是否已經(jīng)載入存儲器中。如果是已經(jīng)載入,那么不再第二次載入,“載入模塊”即刻成功,返回“真”。接著,在步驟122中,確定模塊是否在儲存庫中。如果不是,可以不被載入,所以“載入模塊”子程序失敗,返回“假”。在步驟124中,確定模塊的非初始化數(shù)據(jù)區(qū)41需要多少數(shù)據(jù)字節(jié)并保留所需量。由VM 20將該區(qū)域41全部設(shè)定為零。同樣,在步驟126中,保留模塊初始化數(shù)據(jù)區(qū)42的數(shù)據(jù)字節(jié)的所需量。然后,把初始化數(shù)據(jù)復(fù)制到該區(qū)域中。在步驟18中,由VM 20把待載入模塊中限定的TLV增加到TLV查看所使用的內(nèi)部名稱表中。TLV數(shù)據(jù)結(jié)構(gòu)的根目錄是被儲存。接著,在步驟130中,由VM 20具體說明待載入模塊中限定的數(shù)據(jù)庫。步驟128和130可以按任何次序執(zhí)行。在步驟132中,選擇當(dāng)前模塊的已輸入模塊。在步驟134中,通過已輸入模塊的表,再循環(huán)地載入每個模塊。如果由于任何原因不能載入已輸入模塊,正如在步驟136中確定的,輸入的模塊被視為載入已經(jīng)失敗,因為它不能訪問輸入模塊的服務(wù)。在這種情況下,“載入模塊”返回“假”。在步驟138中,確定是否有另外的模塊輸入。如果是,程序返回至步驟132。在步驟138確定后,最新輸入的模塊已經(jīng)被遞歸地載入,當(dāng)前模塊已經(jīng)無差錯地分配、載入和具體說明了其資源,所以,在步驟139中“載入模塊”插入其表中的插座60中,然后返回“真”,表示模塊被成功地載入。VM 20必須忽略任何試圖插入插座零。如果必須插入插座零,那么這可以利用SETSOCKET記號來實現(xiàn)。
參考圖11將說明在步驟140中插入插座60的程序。在步驟140中,具體說明載入模塊中每個插座的缺省特性。在步驟141中,確定是否有插頭。如果沒有,那么在步驟149中執(zhí)行模塊。如果有,在步驟142中選擇第一插頭。在步驟143中,確定是否設(shè)定相關(guān)插座的安全標志。如果沒有,在步驟146中插入插座。如果有,執(zhí)行該插座所規(guī)定的安全功能。如果安全評價是肯定的,在步驟146中插入插座。在步驟148中,確定插頭是否為最后插頭。如果不是,選擇下一個插頭作評價。如果安全檢查是否定的,在步驟147中確定插頭是否為最后插頭。如果在步驟147或步驟148中確定插頭是最后插頭,對于還未插入的所有插座以缺省特性執(zhí)行模塊,對于已經(jīng)插入的插座以插入特性執(zhí)行模塊。通過這種方式已經(jīng)實現(xiàn)特性的安全改進。
對于由LOADCARDMODULE記號從ICC 5載入的模塊的處理必須不同于對于利用EXECUTEMODULE記號從終端機1中儲存庫載入的模塊的處理。圖12示出LOADCARDMODULE的流程圖。在卡模塊執(zhí)行前,在步驟150中VM 20標示其狀態(tài)和保存所需的任何資源,以致該狀態(tài)以后能夠被恢復(fù)。狀態(tài)包括·可擴充存儲器指針、幀指針和幀尾指針的位置。
·整個當(dāng)前插座表的內(nèi)容。
·登記在TLV標記名稱表中的TLV。
VM執(zhí)行需要的以管理卡模塊啟動的其他內(nèi)部數(shù)據(jù)。
模塊是在步驟152中利用參考圖9說明的“載入模塊”子程序載入的;不同之處在于模塊是在ICC 5上,而不是在儲存庫中,不是已經(jīng)被載入。
如果在步驟154中確定模塊沒有成功載入,那么所有資源在步驟155中被返回到他們在執(zhí)行LOADCARDMODULE記號前的狀態(tài)。這需要載入模塊所需的所有易失性存儲器,必須釋放需要載入的任何模塊并清零。這將包括(但是不限于此)·所有模塊的初始化和非初始化數(shù)據(jù)所需的空間。
·任何內(nèi)部TLV緩沖器所需的空間和由這些模塊限定的管理數(shù)據(jù)結(jié)構(gòu)。
·任何內(nèi)部緩沖器所需的空間和由這些模塊限定數(shù)據(jù)庫所需的管理數(shù)據(jù)結(jié)構(gòu)。
·由VM維護的用以標記查看的TLV名稱表必須立即恢復(fù)至模塊執(zhí)行前的狀態(tài)。
·由VM維護的插座表的內(nèi)容必須立刻恢復(fù)至模塊執(zhí)行前的狀態(tài)。
·幀指針、幀尾指針和可擴充存儲器指針的內(nèi)容立刻被恢復(fù)至模塊執(zhí)行前它們的值。
如果卡模塊被成功地載入,在“標示和保存資源”的步驟150中所保存的狀態(tài)在步驟156中被簡單地放棄。因此,卡模塊已經(jīng)被移植到運行系統(tǒng)上。為了成為用的,卡模塊必須插入插座,否則無法執(zhí)行卡模塊中出現(xiàn)的任何代碼。接下來,在步驟158中確定模塊是否為可執(zhí)行模塊,如果是,按照圖9中步驟106至步驟108所述執(zhí)行。
上述的本發(fā)明的特定實施例僅僅試圖進行說明,根據(jù)本發(fā)明的原理可以作出許多其它改進和變化。所有這些實施例及其改進和變化被認為是在以下權(quán)利要求書中所限定的本發(fā)明范圍內(nèi)。
附錄1.記號定義1.1概述EPI代碼記號是具有附加幀指針的兩個堆棧虛擬機器的指令集合。記號還可以處理為一種編譯器的中間語言。程序翻譯器的某些實施實際上可以把EPI代碼記號編譯為機器代碼。
EPI代碼記號為字節(jié)記號,最多準許有256記號。單字節(jié)前綴記號容許把記號的范圍擴充到理論最大值,最多為65536個記號,前綴認為是每256記號的限定頁。事實上,限定了有限范圍的前綴記號。在十六進制中每個記號的值表示為2個數(shù)字的十六進制代碼,帶有其相應(yīng)的名稱。
沒有前綴的記號(單字節(jié)記號)被稱為原始記號,而帶有前綴的記號(二字節(jié)記號)被稱為二次記號。
下表中未定義的任何原始記號或二次記號的執(zhí)行將導(dǎo)致ILLOP異常。
1.1.1 EPI代碼記號的Forth功能本節(jié)給出用作EPI代碼記號的Forth字的字母索引表。從左至右的每一行包括·定義名稱,用大寫,單一空格粗體字母;·如果不是英文的自然語言發(fā)音;·可應(yīng)用的特定指示符A ANS Forth字(包括所有任選字集)C編譯器指令;在定義中必須使用的。
G通用Forth字(常用的,例如Forth關(guān)注群,然而不在ANS Forth中)。
H主(編譯器)字,它可以或不可以給目標貢獻記號。
·等效的EPI代碼記號
<
1.2約定1.2.1數(shù)字格式大于一個字節(jié)的數(shù)字在記號程序中以“大端”二進制補碼格式發(fā)送,最高字節(jié)首先。在EPI代碼程序中,數(shù)字總是應(yīng)當(dāng)被正確格式的操作符存取,以容許程序以最適合于所用結(jié)構(gòu)的形式儲存數(shù)字。
在堆棧上維持多個精確數(shù)據(jù)類型,最高位的單元在最上面。在存儲器中,維持這些數(shù)據(jù)類型,在多單元類型中最高位的單元位于最低地址的單元上。
1.2.2控制結(jié)構(gòu)偏移控制結(jié)構(gòu)是由控制記號(BRA、RLOOP等),接著由帶符號的四字節(jié)、二字節(jié)或單字節(jié)偏移形成的。已經(jīng)取出偏移后,把跟在控制記號后的偏移增加到記號指針(TP)上。因此,如果分支記號在addr,目的地址是addr+2+offset(對于1字節(jié)偏移(SBRA)),addr+3+offset(對于2字節(jié)偏移(BRA))和addr+5+offset(對于4字節(jié)偏移(EBRA))。
取四字節(jié)偏移的記號僅可供支持32位線性地址代碼空間的虛擬機器實施的特定終端機代碼使用。
1.2.3地址用戶定義的程序是由EPI代碼程序中其地址限定的。如果對記號進行翻譯或者為大型處理器編譯是本機碼,那么,記號空間地址將不對應(yīng)于代碼的實際地址。
1.3數(shù)據(jù)類型大部分記號對數(shù)量操作,由記號確定的數(shù)據(jù)大小以及帶符號或不帶符號解釋,但是,在幀存儲中訪問存儲器的指令能夠得到前綴記號確定的數(shù)據(jù)類型替換。表1中所示的一組字節(jié)代碼是為這樣的前綴記號保留的,但是,當(dāng)前僅采用SBYTE和UBYTE。
利用字節(jié)算符或者帶有增量前綴的算符從存儲器中取出需要小于一個單元(1字節(jié))的數(shù)據(jù)類型。如果隱含或指定帶符號的數(shù)據(jù)類型,那么,數(shù)據(jù)可以用符號擴展到單元寬度。如果隱含或指定不帶符號的數(shù)據(jù)類型,那么,數(shù)據(jù)為零擴展的。表1數(shù)據(jù)類型前綴
1.4算術(shù)溢出返回結(jié)果所指定的大小的加法和減法操作將返回結(jié)果模數(shù)〔在該大小中可容納的最大不帶符號值〕+1。
其目的儲存器小于傳送值大小的儲存操作將把值截短到目的存儲寬度后存儲。
除法操作是對稱;即不管符號,舍入總是朝著零。
1.5原始記號為了方便起見,將記號分為幾個邏輯組,下面將在不同章節(jié)中示出。所有記號的值是十六進制。
利用表1中給出的縮寫明顯地列出可應(yīng)用于記號的數(shù)據(jù)類型前綴,其前綴加上不在前綴表中的任何原始記號是無效的,這種記號的執(zhí)行將引起ILLOP異常的被拋出。記號的缺省類型是斜體字,總是首先列出。缺省數(shù)據(jù)類型前綴是冗余字符,如上所述,如果被用于對記號加前綴是無效的。
1.5.1操作集00 NOOP(-)不采取動作04 BFETCHS(addr-num)從給定地址中取出8位字節(jié),符號延伸它。
08 LIT(-X)返回跟在直接插入(in-line)后作為數(shù)據(jù)的單元。
09 LITC(-addr)返回跟在直接插入后作為文字的單元,文字是代碼圖象中的地址。文字的值可以由程序載入器重新置于該代碼圖象中。
0A LITD(-addr)返回跟在直接插入后作為文字的單元,文字是初始化數(shù)據(jù)空間中的地址。文字的值可以由程序載入器重新置于代碼圖象中。
0B LITU(-addr)
返回跟在直接插入后作為文字的單元,文字是非初始化數(shù)據(jù)空間中的地址。文字的值可以由程序載入器重新置于代碼圖象中。
0C PLIT(-u)返回跟在直接插入后的字節(jié)。字節(jié)被加零擴展至32位。
0D NLIT(-num)返回跟在直接插入后的字節(jié),被加零擴展至32位,然后取負。
0E HLIT(-M)返回跟在直接插入后的2字節(jié)值。值被零擴展至32位。
10 HLITC(-addr)返回把跟在直接插入后的不帶符號2字節(jié)值加到代碼圖象的基址上而產(chǎn)生的地址。值被零擴展至32位。
11 SLITD(-a-addr)返回把跟在直接插入后的被解釋為單元中正偏移的地址不帶符號的字節(jié)加到初始化數(shù)據(jù)的基地址上而產(chǎn)生的地址。字節(jié)被零擴展至32位并乘上4得到字節(jié)的偏移。
12 HLITD(-addr)返回把跟在直接插入后的2字節(jié)值加到初始化數(shù)據(jù)的基地址上而產(chǎn)生的地址。值被符號擴展至32位。
13 SLITU(-addr)返回把跟在直接插入后的被解釋為單元中正偏移的地址的不帶符號2字節(jié)值加到非初始化數(shù)據(jù)的基地址上而產(chǎn)生的地址。字節(jié)被零擴展至32位并乘上4得到字節(jié)的偏移。
14 HLITU
(-addr)返回把跟在直接插入后的2字節(jié)值,加到非初始化數(shù)據(jù)的基地址而產(chǎn)生的地址。值被符號擴展至32位。
15 ADDLIT(x1-x2)把跟在直接插入后的單元中的數(shù)據(jù)加到x1,得到x2。
16 SADDLIT(x1-x2)把來自帶符號的1字節(jié)直接插入值加到x1,得到x2。
19 SUBLIT(x1-x2)從x1中減去跟在直接插入后的單元中的數(shù)據(jù),得到x2。
1A SSUBLIT(x1-x2-t)從x1中減去帶符號的1字節(jié)直接插入值,得到x2。
1C VSUBLIT(d-d-lit)從雙數(shù)字d中減去帶符號的8字節(jié)直接插入值。
1D SMULLIT(num-num*lit)num乘以直接插入后的帶符號的1字節(jié)文字。
1E SDIVLIT(num-num/lit)num除以直接插入后的帶符號的1字節(jié)文字。
21 DIVU(u1u-u3)u1除以u2(不帶符號),得到u3。
3A SHRU(u-u>>1)u向右邏輯位移一位,插入一零位。N.B.SETxx算符進行與零的比較,根據(jù)比較結(jié)果設(shè)定標志。42 SETGE(num-flag)如果num≥0(帶符號)返回“真”45 SETLE(num-flag)如果num≤0(帶符號),返回“真”48 CMPGEU(u1u2-flag)比較不帶符號值u1與u2,如果u1≥u2,返回“真”4C CMPGE(num1 num2-flag)比較帶符號值num1與num2,如果num1≥num2,返回“真”4F CMPLE(num1 num2-flag)比較帶符號值num1與num2,如果num1≤num2,返回“真”下列記號提供對幀儲存的存取50…53 PFRFETCH2…PFRFETCH5(-num)短格式等效于SFRFETCH n(q.v.),這里n是2…5??赡艿臄?shù)據(jù)類型替換值包括SL,SB,UB。54…5F TFRFETCH12…TFRFETCH1(-num)短格式等效于SFRFETCH n(q.v.),這里n是-12,…,-1??赡艿臄?shù)據(jù)類型替換值包括SL,SB,UB。60…63 PFRSTORE2…PFBSTORE5(num-)短格式等效于SFRSTORE n(q.v.),這里n是2…5。可能的數(shù)據(jù)類型替換值包括SL,SB。64…6F TFRSTORF12…TFRSTORE1
(num-)短格式等效于SFRSTORE n(q.v.),這里n是-12,…,-1。
可能的數(shù)據(jù)類型替換值包括SL,SB。
70 SFRFETCH(-num)從幀指針在帶符號的直接插入1字節(jié)偏移處取出值(缺省為單元)num。偏移被解釋為缺省數(shù)據(jù)類型的單元指數(shù)(即將其乘以4得字節(jié)尋址偏移),和字節(jié)大小數(shù)據(jù)替換值的字節(jié)指數(shù)。注意SFRFETCH 0與SFRFETCH 1將內(nèi)部幀管理數(shù)據(jù)(沒有任何意義)返回到調(diào)用程序,這么做并不構(gòu)成對幀中的有效參考。因此,參數(shù)在SFRFETCH2開始和臨時變量在SFRFETCH-1開始,因為存儲器中的幀堆棧向下增長??赡艿臄?shù)據(jù)類型替換值包括SL,SB,UB。
71 SFRSTORE(num-)從幀指針在帶符號的直接插入1字節(jié)偏移處儲存自變量中的值(由缺省,單元)num。偏移作為直接插入值提供,該值被處理為缺省數(shù)據(jù)類型的單元指數(shù)(即將其乘以4得字節(jié)尋址偏移),和作為字節(jié)大小數(shù)據(jù)替換值的字節(jié)指數(shù)。更詳細的細節(jié)見SFRFETCH。
可能的數(shù)據(jù)類型替換值包括SL,SB。
72 FRFETCH(-num)從幀指針的帶符號偏移處取出值rum。偏移是通過2字節(jié)直接插入值提供的。更詳細的細節(jié)見SFRFETCH。
可能的數(shù)據(jù)類型替換值包括SL,SB,UB。
73 FRSTORE(num-)從幀指針的帶符號偏移處儲存自變量中的值num。偏移是通過2字節(jié)直接插入值提供的。詳細情況見SFRSTORE。
可能的數(shù)據(jù)類型替換值包括SL,SB。
74 SFRADDR(-addr)
從幀指針的帶符號偏移處返回到幀中地址。偏移是通過1字節(jié)直接插入值提供的,將其乘以4得到缺省數(shù)據(jù)類型的字節(jié)偏移,直接被用作字節(jié)大小數(shù)據(jù)替換值的字節(jié)指數(shù)。
可能的數(shù)據(jù)類型替換值包括SL,SB。
75 FRADDR(-addr)從幀指針的帶符號單元偏移處返回到幀中地址。偏移是通過2字節(jié)直接插入值提供的,將其乘以4得到缺省數(shù)據(jù)類型的字節(jié)偏移,直接被用作字節(jié)大小數(shù)據(jù)替換值的字節(jié)指數(shù)。
對于給Forth標準數(shù)字轉(zhuǎn)換功能提供支持的記號,記號名稱中的NMBR發(fā)音為“數(shù)字”。記號LTNMBR、NMBRS和TONUMBER采用用戶變量BASE作為轉(zhuǎn)換的數(shù)字基。
8C UNDER(x1x2-x1x1x2)在堆棧上復(fù)制第二項。
9C ZERO(-O)在堆棧上留下值0。
9D ONE(-1)在堆棧上留下值1。
9E MINUSONE(-1)在堆棧上留下值-1。
A0 INDEX(addr1num-addr2)將num乘以4并加上addr1,得到addr2。
A2 EDOCREATE(-a-addr)返回到數(shù)據(jù)空間中的地址,其偏移在這一記號后立即跟在直接插入單元中,進行子程序返回。通過調(diào)用對應(yīng)于它的過程,這一記號被用于識別數(shù)據(jù)區(qū),準許創(chuàng)建與位置無關(guān)的數(shù)據(jù)表格。
A3 EDOCLASS(-a-addr)分支到代碼空間地址,其偏移被保持在隨后直接插入的單元中,在壓入到數(shù)據(jù)堆棧上后,通過把隨后直接插入下一單元中的不帶符號偏移(即在代碼偏移后)增加到初始化數(shù)據(jù)空間的基地址上而產(chǎn)生的地址。該記號被用于識別程序存儲器中的數(shù)據(jù)結(jié)構(gòu)和對其處理的子程序的轉(zhuǎn)換控制,提供了簡單分級機制的基礎(chǔ)。
A4 DOCREATE(-a-addr)返回到數(shù)據(jù)空間中的地址,其偏移在這一記號后立即跟在直接插入2字節(jié)值中,進行子程序返回。通過調(diào)用對應(yīng)于它的程序,這一記號被用于識別數(shù)據(jù)區(qū),準許創(chuàng)建與位置無關(guān)的數(shù)據(jù)表格。
A5 DOCLASS(-a-addr)分支到代碼空間地址,其偏移被保持在隨后直接插入的單元中,在壓入到數(shù)據(jù)堆棧上后,通過把隨后直接插入下一2字節(jié)中的不帶符號偏移(即在代碼偏移后)增加到初始化數(shù)據(jù)空間的基地址上而產(chǎn)生的地址。該記號被用于識別程序存儲器中的數(shù)據(jù)結(jié)構(gòu)和對其處理的子程序的轉(zhuǎn)換控制,提供了簡單分級機制的基礎(chǔ)。
A6 ECALL(-)在直接插入單元前,利用該單元作為進入代碼空間中的帶符號字節(jié)偏移,調(diào)用該過程。
A7 SCALL(-)在直接插入1字節(jié)前,利用該字節(jié)作為進入代碼空間中的帶符號字節(jié)偏移,調(diào)用該過程。
A8 CALL(-)在直接插入2字節(jié)偏移前,利用該值作為進入代碼空間中的帶符號字節(jié)偏移,調(diào)用該過程。
AB SMAKEFRAME(xparams…x1-)在二個不帶符號的1字節(jié)文字前,首先包括params,形成過程參數(shù)的單元數(shù),其次包括temps,臨時變量的單元數(shù)。分配params+temps+2單元,然后將當(dāng)前幀指針設(shè)定為指向新的幀。該記號允許過程參數(shù)和臨時變量由FRFETCH和FRSTORE訪問。
準許虛擬機器在返回堆棧上建造幀,所以,幀的使用受到通常應(yīng)用于返回堆棧用途的規(guī)則限制。由SMAKEFRAME把過程參數(shù)從數(shù)據(jù)堆棧轉(zhuǎn)移到幀中,以使它們可以由FRFETCH與FRSTORE訪問。
如果不能建造所需大小的幀,將拋棄FRAME_STACK_ERROR。
AC MAKEFRAME(xparams…x1…)在二個不帶符號2字節(jié)文字前,首先包括params,形成過程參數(shù)的單元數(shù),其次包括temps,臨時變量的單元數(shù)。更詳細的情況見SMAKEFRAME。
AD RELFRAME(-)使幀指針恢復(fù)到其以前值并釋放當(dāng)前幀。
1.5.2分支集這些記號包括常用堆棧機器分支算符,加Forth字DO?DO LOOP+LOOPLEAVE I和J的運行時間。
AF EBRA(-)總分支。四字節(jié)直接插入偏移。
B0 EBZ(num-)如果num=0則分支。四字節(jié)直接插入偏移。
B1 EBNZ(num-)如果num≠0則分支。四字節(jié)直接插入偏移。
B2 SBRA(-)短分支。帶符號位直接插入偏移。
B3 SBZ(num-)如果num=0則短分支。帶符號字節(jié)直接插入的偏移。
B4 SBNZ(num-)S 如果num≠0則短分支。帶符號字節(jié)直接插入偏移。
B5 BRA(-)無條件分支。帶符號2字節(jié)直接插入偏移。
B7 BNZ(num-)如果num≠0則分支。帶符號2字節(jié)直接插入的偏移。
1.5.3數(shù)據(jù)類型和代碼頁替換值該組允許突破8位記號的限制。注意它們的堆棧動作依賴于以下的記號。把成對的記號稱為二次記號。
數(shù)據(jù)類型的擴展記號占據(jù)記號C0至CF。在這一范圍中不使用的記號被保留,以供未來在需要附加數(shù)據(jù)類型前綴時使用。
C1 SBYTE(-)帶符號字節(jié)。
C2 UBYTE(-)不帶符號字節(jié)。
C5 SLONG(-)帶符號長格式,32位。
C6 ULONG
(-)不帶符號長格式,32位。
1.5.4插座處理記號D2 DOSOCKET(-)在直接插入字節(jié)(0…63)前,它指定所需的功能數(shù)字。堆棧功能是由附著到插座上的函數(shù)限定的。
D3 IDOSOCKET(u-)執(zhí)行由u指定其插座號碼(0…63)的插座函數(shù)。較低層的堆棧功能是由附著到插座上的函數(shù)限定的。如果u是大于63,將會拋出ANS Forth異常24(無效數(shù)值自變量)。
1.5.5控制集E6 IMCALL(-)從模塊執(zhí)行功能,其模塊號碼(0-255)在直接插入的下一字節(jié)中給出,其功能號碼(0-255)在隨后直接插入的字節(jié)中給出。堆棧功能視被調(diào)用函數(shù)而定。
E7 CLASSPROC(-)在載入期間,CLASSPROC標示出至等級處理代碼的入口。用于編譯輔助并可作為NOOP實施。
F9 SYSFUNC(-)頁擴展記號被處理為二次記號的第一字節(jié)。調(diào)用由隨后直接插入字節(jié)指定的程序。支持的二次記號集定義于第1.7節(jié)中。堆棧作用由指定例程限定。
1.6插座前8個二次插座記號保留給插座管理功能,下面將描述所定義的管理功能。其余插座(D2 08至D2 3F)供應(yīng)用使用。
F9 91 SETSOCKET(xpu-flag)
設(shè)定執(zhí)行指針xp至插座功能u的句柄,這將引起xp通過DOSOCKET〈u〉的后續(xù)執(zhí)行而執(zhí)行。在設(shè)定執(zhí)行指針前,運行由SETPLUGCONTROL安裝的程序以確定是否可以用該新xp插入插座?!皹酥尽笔怯稍摮绦蚍祷氐闹?。如果“標志”是“假”SETSOCKET將僅設(shè)定指針,否則就放棄指針。如果u是大于63,將會拋出異常-24(無效數(shù)值自變量)。
D2 00 SETPLUGCONTROL(xp-)儲存用戶所寫過程的執(zhí)行指針xp,該過程將由SETSOCKET運行以確定是否能夠插頭插座。
該過程的動作(這里為說明目的將其稱為PLUGCONTROL)必須為(u-flag)這里u是插座號碼,如果能夠插入插座“標志”返回“假”,如果不能插入則返回“真”。此外,u值超出0-63范圍以外,PLUGCONTROL過程必然引發(fā)異常-24(無效數(shù)值自變量)。
PLUGCONTROL的缺省動作是由VM安裝,對于所有u值返回“假”,從而能夠插入所有插座。
D2 03 OSCALLBACK(dev fn num1num2-ior)調(diào)用帶有參數(shù)的操作系統(tǒng)程序?qū)τ诰哂邪陉嚵衝um2中的num132位參數(shù)的功能fn,dev選擇所需的I/O裝置,返回ior,它與設(shè)備相關(guān)。注意num2在堆棧頂部。在C使用中,num1與num2分別對應(yīng)于arvc與argv。
注意該插座與設(shè)備相關(guān),提供它以致于利用EPI代碼所寫的終端機特定程序(TRS)能夠具有與終端機相關(guān)的輸入/輸出。如果被指定的功能不被支持,則拋出異常-21(不被支持的操作)。
D2 04 EPICALLBACK(dev fn num1num2-ior)EPI代碼程序的插座,它可以被下層操作系統(tǒng)調(diào)用。四個參數(shù)是作如下用途的32位值對于具有包含在陣列num2中的num132位參數(shù)的功能fn,dev選擇所需的I/O裝置,返回ior,其意思是與裝備相關(guān)。在C使用中,num1與num2分別對應(yīng)于arvc與argv。
注意該插座與設(shè)備相關(guān),提供它以致于利用EPI代碼所寫的終端機特定程序(TRS)能夠為操作系統(tǒng)提供回調(diào)程序。如果指定的功能不被支持,則拋出異常-21(不被支持的操作)。
1.7系統(tǒng)功能輸入/輸出集該集定義通過SYSFUNC記號可提供使用的功能,它該記號的動作是給下層操作系統(tǒng)程序提供廣義接口。
1.7.1裝置存取每個裝置分配一個唯一設(shè)備號碼。狀態(tài)ior代碼與裝置有關(guān),ior代碼總是為0,表示成功的例外。
F900 DKEY(dev-echar)從輸入裝置dev讀出字符。
F901 DKEYTEST(dev-flag)如果字符準備從輸入裝置dev讀出,返回“真”。
F902 DEMIT(char dev)把char發(fā)送到輸出裝置dev。
F903 BEEP(u dev-)請求輸出裝置dev產(chǎn)生聲音并持續(xù)u毫秒。該功能可暫停處理一段指定時間。
F904 DREAD(addrlen dev-ior)從輸入裝置dev讀出字符串,返回到與裝置相關(guān)的ior。返回的該字符串僅包括從鍵盤裝置讀出的字符的較低階字節(jié)。
F905 DWRITE(addr len dev-ior)把字符串寫到輸出裝置dev中,返回到與裝置相關(guān)的ior。
F906 DSTATUS
(dev-ior)返回到與裝置dev相關(guān)的資源的狀態(tài)ior,在通常情況中,“準備”與“可服務(wù)”是由0指示的,“未準備”是由其它任何值指示的。特定裝置可以返回到非零值,對于裝置而言它具有重要意義。如果裝置已經(jīng)通過以前執(zhí)行的“OUTPUT”記號所選擇,那么DSTATUS應(yīng)當(dāng)返回到“未準備”直至完成傳送至OUTPUT功能的執(zhí)性態(tài)止。
F907 DIOCTL(dev fn num a-addr-ior)執(zhí)行通道dev的IOCTL功能fn,在a-addr的陣列中具有num單元大小自變量。
F908 OUTPUT(xp dev-ior)執(zhí)行其執(zhí)行指針由)xp給出的過程,輸出被引導(dǎo)至裝置dev。從“OUTPUT”返回時,當(dāng)前輸出裝置(見GETOP)不受影響。如果程序是可執(zhí)行,ior作為零返回。源于xp執(zhí)行的所有異常被虛擬機器抓獲,引起立即終止“OUTPUT”。
F909 DWRITESTRING(dev-)該記號位于在一串字符前,被儲存在記號流中,作為計數(shù)字節(jié),其后跟隨計數(shù)那么多的字節(jié)后。DWRITESTRING記號把字符寫到所選裝置dev中。在最后字符后緊接著繼續(xù)執(zhí)行。
P90A GETOP(-dev)返回到由SETOP最后所選的裝置dev或者在傳送至“OUTPUT”功能的執(zhí)行期間。用于尋找面向設(shè)備的I/O操作的缺省裝置。此功能允許方便地實施與當(dāng)前裝置有關(guān)的功能。
P90B SETOP(dev-)用于為面向設(shè)備的I/O操作設(shè)定由GETOP返回的缺省裝置dev。此功能允許方便地實施與當(dāng)前裝置有關(guān)的功能。
F90C FORMFEED
(dev-)在裝置dev上執(zhí)行與裝置有關(guān)的“新形式”動作,如“清屏”(終端顯示)或“拋頁”(打印機)。
F90D CR(dev-)在裝置dev上執(zhí)行與裝置有關(guān)的“新行”動作。
F90E SETXY(num1num2dev-)利用num1作x座標,num2作y座標,在裝置dev上執(zhí)行與裝置有關(guān)的“設(shè)定絕對位置”動作。
1.7.2時間處理標準Forth字1.7.3語言與消息處理本組中的記號提供一種處理語言和消息選擇與顯示的機制。
F920 CHOOSELANG(addr-flag)選擇其ISO639語言代碼由addr處2個字符給出的語言。如果“標志”是“真”,那么語言被找到,現(xiàn)在為當(dāng)前語言。否則,調(diào)用程序應(yīng)當(dāng)選擇另一種語言。至少一種語言(終端機的本機語言)總是可以利用的。
F921 CODEPAGE(num-flag)根據(jù)ISO8859(0=公用字符集,1=拉丁1,等)嘗試對選擇常駐代碼頁num頁Code進行編號。已經(jīng)選擇了代碼頁?!皹酥尽笔恰罢妗?。
F922 LOADPAG(addr-flag)在終端機的addr處安裝代碼頁(該頁通常能在卡中找到)。標志表示該頁裝載成功。當(dāng)從ICC已經(jīng)載入新的消息表時可以完成頁的安裝,這需要代碼頁,終端機上不能提供。
F923 INITMESSAGES(-)
這一功能刪除私人發(fā)行者消息,編號從C0至FF(十六進制)和由LOADMESSAGES安裝的任何消息。在每一用戶區(qū)段后可調(diào)用此功能。
F924 LOADMESSAGES(c-addr-)在瞬時消息數(shù)據(jù)庫中的適當(dāng)位置上安裝消息表。c-addr給出消息表定義的位置,包括供消息使用的頁代碼、依據(jù)ISO639的兩個字母語言代碼和待安裝的消息。
F925 GETMESSAGE(num-c-addr len)返回消息num的字符串參數(shù)。從字符串的長度len中去除尾部空間。
F927 UPDATEMESSAGES(addr len-)把消息表安裝到常駐語言表中。如果已經(jīng)存在具有相同代碼的語言,它將被替換;否則,將增加新的語言。如果沒有足夠空間提供給新的語言,那么由代碼22(TOO_MANY_LANGUAGES)發(fā)布THROW。
addr給出包含消息表定義的TLV的位置,包括供消息使用的頁代碼、依據(jù)ISO639的二個字母語言代碼和待安裝的消息。
F928 MESSAGESIZE(-len)返回到此終端的消息的標準長度。
F929 TYPEMESSAGE(addr len-)在終端機的消息行上顯示所給出的字符串。
1.7.4 ICC代碼處理本組中的記號提供一種處理集成電路卡讀出器的機制。
F930 INITCARD(num-ior)選擇ICC讀出器num,這里num是0或1。
F931 CARD(c-addr1len1c-addr2len2-c-addr2len3)
把緩沖器c-addr1len1中的數(shù)據(jù)送至卡,在c-addr2len2接收數(shù)據(jù)。返回的len3給出所接收字符串的實際長度。
緩沖器c-addr1len1必須包括4字節(jié)標準ISO標題(分類、指令、P1、P2)任選數(shù)據(jù)(“長度”字節(jié)跟在“長度“后,這里“長度“可以0-255)。
緩沖器c-addr2len2必須提供來自卡的答案的適當(dāng)空間加上二個狀態(tài)字節(jié),包括SW1與SW2。
誤差處理是在CARD中進行的。
F932 CARDON(c-addr len1-c-addr len2ior)給ICC供電并執(zhí)行卡復(fù)位功能。c-addr len1把緩沖器提供到將放置“對復(fù)位答復(fù)”中;len2是返回字符串的實際長度。
F933 CARDOFF(-)切斷ICC電源。在完成所有交易時執(zhí)行。
F934 CARDABSENT(-flag)如果讀出器中不存在ICC,返回“真”,否則返回“假”。
1.7.5磁條處理本組中的記號提供一種處理磁條裝置的機制。
F938 FROMMAG(c-addr len1num-c-addr len2ior)讀出一個或多個ISO磁條。通過用戶“取消”鍵或通過超時能夠中斷操作。num是磁條軌道讀出的ISO標識符,c-addr是字符串的目的地址,len1是其最大長度(ISO的至少78字節(jié)、ISO2的41字節(jié)和ISO3的108,或者讀出多個磁條的長度總和)。返回時,len2給出字符串讀出的實際長度。
F939 TOMAG(c-addrlen num ior)寫入一個ISO磁條。數(shù)據(jù)在緩沖器c-addrlen中,將被寫入至磁條num(1-3)。操作可以通過用戶“取消”鍵或超時來中斷。
1.7.6調(diào)制解調(diào)器處理本組中的記號提供一種處理調(diào)制解調(diào)器裝置的機制。
F940 MODEMCALL(num1num2num3num4num5c-addr len-ior)利用內(nèi)部終端調(diào)制解調(diào)器來呼叫號碼。
num1與num2指示使用的輸入與輸出行的速度(從75至19200波特)。支持的實際速度由設(shè)施限定。
num3指示一致校驗(0=無,1=奇,2=偶)。
num4指示使用的位的數(shù)目(7或8)。
num5指示用于傳輸?shù)耐V刮坏臄?shù)目(1或2位)c-addrlen是字符串,包括呼叫的電話號碼??砂ā埃庇靡該芴栆舻却?。如果該符串的第一個字符是“P”,采用脈沖撥號代替缺省的音頻撥號。
F941 MODEMHANGUP(-ior)此功能用于結(jié)束當(dāng)前調(diào)制解調(diào)器對話。
F942 TOMODEM(c-addrlen-ior)在已建立調(diào)制解調(diào)器對話時在c-addr len上發(fā)送字符串。
F943 FROMMODEM(c-addrlen1-c-addr len2-ior)從調(diào)制解調(diào)器接收字符串。c-addr是字符串的目的地址,len1是其最大長度。返回時,len2給出讀出字符串的實際長度。如果在指定周期中沒有接收到字符,那么產(chǎn)生超時。
F944 MODEMBREAK(-ior)此功能在所連接的調(diào)制解調(diào)器對話上傳送斷開。
1.7.7黑名單管理本組中的記號提供一種處理黑名單文件的機制。
F948 INITBLACKLIST(-)
此功能把黑名單表初始化為空白狀態(tài)。
F949 BLACKLISTINSERT(c-addr len-flag)此功能在表中c-addr len處插入一個項目,它以存儲排序維持。
在對黑名單表更新時必須使用此功能。
如果插入成功(在現(xiàn)行表中未找到項目和表不滿),返回的“標志”是“假”。
F94A INBLACKLIST(c-addr1len1-c-addr2len2flag)此功試圖找尋表中的關(guān)鍵字c-addr1len1。
如果關(guān)鍵字被發(fā)現(xiàn),c-addr2len2包括搜尋的結(jié)果(包括來自所需項目的其余字節(jié)和可能的一些其他信息字節(jié))。
如果找到該數(shù)字,返回的“標志”是“假”。
F94B BLACKLISTDELETE(c-addrlen-flag)此功能刪除表中的項目,這里c-addr len是刪除項目的關(guān)鍵字,它可達到18字節(jié)長。
如果刪除成功(找到項目),返回的“標志”是“假”。
1.7.8安全算法的支持本組中的記號提供對初始化和利用安全服務(wù)的支持。
F950 INITSECALGO(c-addr len num-flag)c-addr是初始化緩沖器的地址,len是它的長度。盡管通常應(yīng)當(dāng)將關(guān)鍵字傳送進行初始化,每種算法的輸入?yún)?shù)可能不同。如果初始化成功發(fā)生,“標志”是“假”。
F95l SECALGO(c-addr1len c-addr2num-flag)這里c-addr1是計算用的輸入數(shù)據(jù)緩沖器,len是它的長度。c-addr2是存儲結(jié)果用的輸出緩沖器。
如果計算成功,“標志”是“假”。
終端機服務(wù)。
1.7.9終端機服務(wù)F958 POWERLESS(-flag)如果有足夠電力來完成當(dāng)前交易,返回“假”。
1.7.10數(shù)據(jù)庫服務(wù)下列記號提供一種處理數(shù)據(jù)庫的機制。
F961 DBMAKECURRENT(a-addr-)使處于a-addr的數(shù)據(jù)庫成為當(dāng)前數(shù)據(jù)庫。
F962 DBSIZE(-len)返回記錄緩沖器的大小,在當(dāng)前數(shù)據(jù)庫的當(dāng)前記錄是提供窗口。
F963 DBFETCHCELL(num1-num2)從當(dāng)前數(shù)據(jù)庫的當(dāng)前記錄中單元對齊字節(jié)偏移num1處的單元返回32位值num2。
F964 DBFETCHBYTE(num-char)從當(dāng)前數(shù)據(jù)庫的當(dāng)前記錄中字節(jié)偏移num處返回1字節(jié)值char。
F965 DBFETCHSTRING(num len-addr len)在當(dāng)前數(shù)據(jù)庫的當(dāng)前記錄中在偏移num1處用長度len返回字節(jié)序列的字符串a(chǎn)ddr和len。
F966 DBSTORECELL(num1num2-)在當(dāng)前數(shù)據(jù)庫的當(dāng)前記錄中在單元對齊字節(jié)偏移num2處把32位值num1存儲到單元中,對數(shù)據(jù)庫記錄進行更新。
F967 DBSTOREBYTE(char rnum-)在當(dāng)前數(shù)據(jù)庫的當(dāng)前記錄中在偏移num處把1字節(jié)值char存儲到字節(jié)中,對數(shù)據(jù)庫記錄進行更新。
F968 DBSTORESTRING(addr len1num len2-)在當(dāng)前數(shù)據(jù)庫的當(dāng)前記錄中在偏移num的addr處存儲字節(jié)序列的最長len2字節(jié),對數(shù)據(jù)庫記錄進行更新。如果len1小于len2,則把數(shù)據(jù)庫記錄緩沖器中的終點用空格填充到len2。
F969 DBINITIALIZE(-)將當(dāng)前數(shù)據(jù)庫全部初始化為零,把數(shù)據(jù)庫的“當(dāng)前”和“可使用”記錄數(shù)(見DBRECNUM與DBAVAIL)設(shè)定為0。
F96A DBRECNUM(-u)返回當(dāng)前記錄數(shù)。
F96B DBCAPACITY(-u)返回當(dāng)前數(shù)據(jù)庫能夠保持的記錄的總數(shù)。
F96C DBAVAIL(-num)返回當(dāng)前文件中下一個可利用記錄的記錄數(shù)。
F96D DBADDREC(-)在由DBAVAIL給出的記錄數(shù)上在當(dāng)前數(shù)據(jù)庫的結(jié)尾處增加一記錄。
F96F DBSELECT(num-)在當(dāng)前所選數(shù)據(jù)庫中選擇記錄num。
F970 DBMATCHBYKEY(addr len-flag)搜尋當(dāng)前數(shù)據(jù)庫,針對由addr與len所指定的字符串在關(guān)鍵字段上匹配。對于這一結(jié)構(gòu),len可以短于關(guān)鍵字段的限定長度,利用其余字符與空格(ASCⅡ20h)字符比較。如果匹配成功,匹配記錄變成當(dāng)前的,“標志”是“假”。
該記號僅與已排序數(shù)據(jù)庫一起使用。
F971 DBADDBYKEY(addr len-fiag)搜尋當(dāng)前數(shù)據(jù)庫,針對由addr與len所指定的字符串,在關(guān)鍵字段上匹配。對于這一結(jié)構(gòu),len可以短于關(guān)鍵字段的限定長度,利用其余字符與空格(ASCⅡ20h)字符比較。如果匹配成功,匹配記錄變成當(dāng)前的,“標志”是“真”。如果匹配不成功,在數(shù)據(jù)庫中的正確位置上插入一新記錄,“標志”是“假”。對該新記錄進行初始化,其關(guān)鍵字段除外,關(guān)鍵字段將包含給定關(guān)鍵字。
該記號僅與已排序數(shù)據(jù)庫一起使用。
F972 DBDELBYKEY(addr len-fiag)搜尋當(dāng)前數(shù)據(jù)庫,針對由addr與len所指定的字符串,在關(guān)鍵字段上匹配。對于這一結(jié)構(gòu),len可以短于關(guān)鍵字段的限定長度,利用其余字符與空格(ASCⅡ20h)字符比較。如果匹配成功,刪除匹配記錄,“標志”為“假”。通過采取適當(dāng)動作,對預(yù)初始化數(shù)據(jù)庫中的記錄物理重新定位或重新鏈接,刪除動作可堵住實體設(shè)備中的任何潛在“漏洞”。
該記號僅與已排序數(shù)據(jù)庫一起使用。
F973 DBSAVECONTEXT(-)引發(fā)服務(wù)器把當(dāng)前上下文信息壓入堆棧,包括當(dāng)前數(shù)據(jù)庫、當(dāng)前記錄數(shù)和任何有關(guān)信息。給予服務(wù)器使用VM的返回堆棧保存上下文信息的權(quán)利,因此,客戶軟件必須遵守返回堆棧使用的一般規(guī)則。
F974 DBRESTORECONTEXT(-)引發(fā)服務(wù)器恢復(fù)最新保存的上下文信息(見DBSAVECONTEXT)。給予服務(wù)器使用VM的返回堆棧保存上下文信息的權(quán)利,因此,客戶軟件必須遵守返回堆棧使用的一般規(guī)則。
1.8 TLV管理本節(jié)中所述的記號提供TLV管理和存取功能。
1.8.1字符串處理支持
F978 PLUSSTRING(c-addr1lenl c-addr2len2-c-addr2len3)在c-addr2處字符串的末尾的len2字節(jié)上,存儲在c-addr1處的len1字節(jié)字符串。返回到目的字符串(c-addr2)的開始處和二個長度(len3)之和。在目的字符串的末端必須有空間,以保持兩個字符串。
F979 CPLUSSTRING(char c-addr len-c-addr len+1)在c-addr處字符串的末端儲存len字節(jié)的字符char。返回到目的字符串(c-addr)的開始和產(chǎn)生字符串的長度(len+1)。在目的字符串的末端必須有空間,以保持兩個字符串。
F97A MINUSTAILING(c-addr len1-c-addr len2)如果len1大于零,len2等于len1減去在由c-addrlen1指定的字符串的末端空格(ASCⅡ20h)數(shù)。如果len1為零或整個字符串由空格組成,那么len2為零。
F97B MINUSZEROS(c-addr len1-c-addr len2)如果len1大于零,len2等于len1減去在由c-addr len1指定的字符串的末端零(ASCⅡ0h)數(shù)小。如果len1為零或整個字符串由空字符組成,那么len2為零。
F97C STORECOUNT(char c-addr-)把數(shù)字char存儲到c-addr處的字節(jié)。如果char大于255則產(chǎn)生STRING_TOO_LARGE拋出代碼。
1.8.2 TLV緩沖器存取F980 TLV(num-c-addr len fmt)返回到TLV的訪問參數(shù),它的Tag是num。這可產(chǎn)生UNDEFINED_TLV拋出代碼。
F9 81 TLVFETCH(c-addr1len1fmt-num|c-addr2len2)根據(jù)內(nèi)部TLV緩沖器的“TYPE”字段返回到其內(nèi)容,“TYPE”字段是fmt的低八位。類型代碼0和2返回到堆棧上數(shù)字,而其他返回到字符串指針。由類型代碼3字段返回的地址是臨時的,必須即刻轉(zhuǎn)移到更永久位置。字符串返回的len2與最后儲存在緩沖器中的相同。
F982 TLVSTORE(num c-addr2len2fmt|c-addr1len1c-addr2len2fmt-)根據(jù)其“類型”字段設(shè)定內(nèi)部TLV緩沖器的內(nèi)容,類型字段是fmt的低八位,類型代碼0和2取堆棧上的數(shù),而其他取字符串指針。這一動作將設(shè)此TLV的定語法分析狀態(tài)位。
F983 TLVBITFETCH(c-addr-fiag)返回到掩蔽內(nèi)部TLV緩沖器內(nèi)容的結(jié)果,其內(nèi)容被c-addr處的序列所引用,針對此位置的值字段。這可以產(chǎn)生UNDEFINED_TLV拋出代碼。如果以掩碼定義的所有位位于內(nèi)部緩沖器上,那么“標志”將返回到“真”。否則,將返回到“假”。僅對二個位置中較短的一個所覆蓋的字節(jié)進行檢查。
F984 TLVBITSTORE(flag c-addr-)基于其位置上的值字段,設(shè)定c-addr處序列所引用的內(nèi)部TLV緩沖器的內(nèi)容。如果“標志”是“假(0)”,則斷開那里所定義的所有位。否則,將它們?nèi)拷油ā?br>
1.8.3TLV處理F985 PARSETLV(c-addr len-)對于TLV序列,對c-addr處的len字節(jié)進行處理。這可以產(chǎn)生UNDEFINED_TLV拋出代碼。碰到的每一標記字段將長度字段字節(jié)從其值字段置于其內(nèi)部緩沖器中并設(shè)定其語法分析狀態(tài)位。當(dāng)碰到所構(gòu)成的標記字段時,在針對TLV序列進行值字段的語法分析前,清除已經(jīng)被定義為與它有關(guān)的所有內(nèi)部TLV緩沖器。如果在未曾被定義為與它有關(guān)的構(gòu)成模板中碰到TLV,將不產(chǎn)生異常。
F986 PLUSDOL(c-addr1len c-addr2len2-c-addr2len3-)對于“標記”字段和“長度”字段,對c-addr1處的len1字節(jié)進行處理。這可以產(chǎn)生UNDEFINED_TLV拋出代碼。在c-addr2處輸出字符串的末端len2字節(jié)處,對碰到的每一標記字段將“長度”字段字節(jié)從其內(nèi)部緩沖器置于值字段中。返回到目的字符串(c-addr2)的開始和二個長度(len3)之和。在輸出字符串的末端必須有空間以保持兩個字符串。
F987 PLUSTLV(c-addrlen1num-c-addrlen2)把其“標記”是num的TLV序列加至c-addr1處的輸出字符串的末端len1字節(jié)處。這可以產(chǎn)生UNDEFINED_TLV拋出代碼。根據(jù)TLV規(guī)則,基于其內(nèi)部緩沖器中數(shù)據(jù)對標記、長度和值字段進行格式化。返回到目的字符串(c-addr)的開始和二個長度之和(len2)。在輸出字符串的末端必須有空間以保持兩個字符串。
F989 TLVSTATUS(fmt-num char)對TLV存取參數(shù)fmt的狀態(tài)進行解碼。返回的num是格式指示符0,返回的char中的字符具有下列意義,這里0位是最低位<
>1.8.4 TLV序列存取F98A STOREBCD(uc-addr len-)數(shù)u作為二-十進制序列存儲到c-addr處len字節(jié)的字符串中。對數(shù)字進行格式化,在輸出字符串中每個數(shù)字代表4位半字節(jié)。如果需要的話將前面的半字節(jié)填充0。如果len不具是足夠長度保持所有數(shù)字,數(shù)的最高位部分將被舍去。
F98B FETCHBCD(c-addr len-u)從c-addr處的二-十進制序列中取出len字節(jié)的數(shù)u。對數(shù)字進行格式化,在輸入字符串中每個數(shù)字代表4位半字節(jié)。如果任何半字節(jié)不是有效的BCD數(shù)字,那么拋出DIGIT_TOO_LARGE異常。
F98C STOREBN(uc-addr len-)數(shù)字u作為二進制數(shù)存儲到c-addr處的len字節(jié)的字符串中。首先存儲數(shù)字的最高位字節(jié)。如果需要的話,前面的字節(jié)將填充0。如果len不具是足夠長度保持所有數(shù)字,數(shù)的最高位部分將被舍去。
F98D FETCHBN(c-addr len-u)從c-addr處的字符串中取出len字節(jié)的數(shù)字u,作為二進制數(shù)。首先取出數(shù)的最高位字節(jié)。如果在該位置上數(shù)據(jù)超過四字節(jié),那么將丟失最高位字節(jié)。
F98E STORECN(c-addr1len1c-addr2len2-)把c-addr1處len1字節(jié)的數(shù)作為壓縮數(shù)存儲到c-addr2處的len2字節(jié)字符串中。對此數(shù)進行格式化,在輸出字符串中每個字符代表4位半字節(jié)。如果需要的話,后面的半字節(jié)將填充F。如果len2長度不足以保持所有字符(len2<[len1+1]/2),數(shù)字將被截斷。如果輸入字符串中的字符不是數(shù)字,那么將產(chǎn)生DIGIT_TOO_LARGE拋出代碼。
F98F FETCHCN(c-addr1len1-c-addr2len2)取出len2字節(jié)字符串至c-addr2處的臨時位置,它代表c-addr1處len1字節(jié)字符串中的“壓縮數(shù)字”。對數(shù)字進行格式化,輸出字符串的每個字符代表輸入字符串中的4位半字節(jié)。當(dāng)碰到具有所有位組的半字節(jié)或字符串的末端時將終止輸出字符串。如果輸入字符串中的半字節(jié)不是數(shù)字將產(chǎn)生DIGIT_TOO_LARGE拋出代碼。輸出字符串必須立刻移至更永久位置。
F990 TLVFETCHNAME(c-addr1-c-addr2num)對于“標記”字段,進行c-addr1處TLV序列的語法分析。返回地址c-addr2,它是過去的標記字段和標記字段的num。
F991 TLVFETCHLENGTH(c-addr1-c-addr2len)對于“長度”字段,進行c-addr1處TLV序列的語法分析。返回地址c-addr2,它是過去的長度字段和包含在此字段中的len。
1.9模塊處理下列的記號提供給EPI代碼模塊在虛擬機器中的存儲和執(zhí)行。
F9A0 EXECUTEMODULE(c-addr len-flag)利用c-addr len指定的AID從模塊目錄中載入模塊。如果發(fā)生差錯,拋出異常CANNOT_LOAD_MODULE。如果未找到模塊,則“標志”是“真”,如果載入成功則為“假”。
F9A1 INITMODULEBUFFER(-)準備新模塊的獲取。
F9A2 MODULEBUFFERAPPEND(c-addr len-)把c-addr和len限定的緩沖器的內(nèi)容添加到模塊獲取緩沖器中。如果還未準備模塊緩沖器,或者如果超出模塊緩沖器處理容量,則拋出異常CANNOT_AAD_TO_MODULE。
F9A3 REGISTERMODULE(c-addr len-)在由c-addr len指定的給定EPI代碼AID下,把模塊緩沖器寄存在模塊目錄中。自動釋放與管理模塊緩沖器相關(guān)的資源。
F9A4 RELEASEMODULEBUFFER(-)釋放內(nèi)部模塊緩沖器所使用的資源。模塊的不成熟的載入必須由應(yīng)用程序來終止,不把模塊寄存在模塊目錄中,則需要這樣。
F9A5 DELETEMODULE(c-addr len-flag)從模塊目錄中刪除其AID由c-addr len指定的模塊。如果操作成功“標志”為零。
F9A6 MODULEINFO(c-addr1len1-c-addr2len2flag)
返回到模塊上的“公用”信息,該模塊是在c-addr1len1指定的AID下寄存在模塊目錄中。如果操作成功“標志”是零,c-addr1處的數(shù)據(jù)是有效的。由這一記號返回的緩沖器的結(jié)構(gòu)是由模塊標題信息限定的。這一功能僅返回通過EPF_ENTRY的EPF_VER項目。
F9A7 LOADCARDMODULE(a-addr-)在a-addr載入模塊。a-addr是從卡傳遞到內(nèi)部儲存器中的EPI代碼模塊標題的地址。如果模塊違反卡模塊載入的任何前置條件,拋出異常BAD_CARD_MODULE。
F9A8 MODULESCHANGED(-u)返回值u,表示模塊是否已被改變。位0至7定義自從該記號的最后執(zhí)行以來在模塊目錄中已經(jīng)寄存了哪個模塊類別。例如,利用初始AID字節(jié)是F4寄存的模塊將位4設(shè)定為返回狀態(tài)。位8至31被保留供未來擴增。
1.10可擴充存儲器處理下列記號提供對虛擬機器提供和管理的數(shù)據(jù)空間中線性存儲器的可擴充“橡皮筋”緩沖器的存取。
F9B0 EXTEND(len-a-addr)通過len單元擴展“橡皮筋”緩沖器,返回所分配緩沖器中第一單元的單元對準地址a-addr。ZERO EXTEND使指針返回到下一未分配的單元。如果沒有足夠存儲器可供利用,則拋出OUT_OF_MEMORY異常。
F9B1 BEXTEND(len-c-addr)通過len字節(jié)擴展“橡皮筋”緩沖器,返回所分配緩沖器中第一字節(jié)的地址c-addr。ZERO EXTEND使指針返回到下一未分配的字節(jié)。如果沒有足夠存儲器可供利用,則拋出OUT_OF_MEMORY異常。
F9B2 RELEASE(addr-)釋放通過EXTEND或BEXTEND獲取的存儲,把“自由指針”設(shè)定到addr。如果addr是無效的(在啟動橡皮筋緩沖器前,或者超出當(dāng)前“自由指針”),在拋出ANS異常-9(無效的存儲器地址)。
進一步的記號F9B0 DSCHECK(u-flag)檢查至少u數(shù)據(jù)單元保留在數(shù)據(jù)堆棧上。如果是這種情況,返回“假”,否則返回“真”。
F9B1RSCHECK(u-flag)檢查至少u數(shù)據(jù)單元保留在返回堆棧上。如果情況如此,返回“假”,否則返回“真”。
1.11安全命令安全算法處理在某些終端機上可能占據(jù)幾秒時間。本發(fā)明包括把目前單個SECALGO命令分解成開始部分和完成部分,以便于使用多任務(wù)設(shè)施。這處于研究當(dāng)中,提出下列建議作為對SECALGO的另一種選擇。
F956SECALGOBEGIN(c-addr1len c-addr2num-flag)這是利用類型num的算法進行計算的。c-addr1是計算用的輸入數(shù)據(jù)緩沖器,len是其長度。c-addr2是存儲結(jié)果用的輸出緩沖器。這一功能返回一“標志”,表示“假”是能夠成功開始的計算。
F957 SECALGOEND(-ior)這一功能返回一ior,表示0=計算成功完成;-1=計算仍然進行;1=計算失敗。
異常代碼本節(jié)包括對于標準異常處理功能“拋出”的作為自變量使用的所有代碼。
權(quán)利要求
1.一種在第一裝置與第二裝置之間執(zhí)行交易的交易管理系統(tǒng),其特征在于所述第一和第二裝置適合于彼此通信并且所述第一和第二裝置中至少一個為集成電路卡,所述系統(tǒng)包括至少一個輸入/輸出裝置;對所述第一裝置上計算機程序進行解譯的一便攜式虛擬機器,所述虛擬機器包括一虛擬微處理器和一用于所述輸入/輸出裝置中至少一個裝置的驅(qū)動器;以及響應(yīng)于所述解譯程序而執(zhí)行所述程序的執(zhí)行裝置。
2.一種包括與第二裝置進行交易的第一裝置的終端機,其特征在于所述第一和第二裝置中至少一個裝置為集成電路卡,所述終端機包括對所述第一裝置上計算機程序進行解譯的便攜式虛擬機器,所述虛擬機器包括一虛擬微處理器和一用于所述輸入/輸出裝置中至少一個裝置的驅(qū)動器;以及響應(yīng)于所述所述解譯程序而執(zhí)行所述程序的執(zhí)行裝置。
3.一種包括與第二裝置進行交易的第一裝置的自含便攜式智能卡,其特征在于所述智能卡包括便攜式虛擬機器,所述虛擬機器包括一虛擬微處理器和一用于所述輸入/輸出裝置中至少一個裝置的驅(qū)動器。
4.如權(quán)利要求1所述的系統(tǒng)或如權(quán)利要求2所述的終端機或如權(quán)利要求3所述的智能卡,其特征在于所述虛擬機器的機器指令為一組記號,所述記號為專用字節(jié)代碼。
5.如權(quán)利要求3或4所述的智能卡,其特征在于進一步包括存儲在所述智能卡上的計算機程序、對所述計算機程序進行解譯的所述虛擬機器和響應(yīng)于所述所述解譯程序而執(zhí)行所述程序的執(zhí)行裝置。
6.如權(quán)利要求4所述的系統(tǒng)或終端機或如權(quán)利要求5所述的智能卡,其特征在于所述計算機程序以從所述組記號中選出的記號和相應(yīng)的直接插入數(shù)據(jù)的流的方式撰寫。
7.如權(quán)利要求6所述的系統(tǒng)或終端機或智能卡,其特征在于所述記號流以模塊傳送,模塊包括所述記號流以及執(zhí)行模塊所需的相應(yīng)直接插入數(shù)據(jù)。
8.如權(quán)利要求7所述的系統(tǒng)或終端機或智能卡,其特征在于所述模塊還包括執(zhí)行所述模塊對存儲器要求之指示。
9.如權(quán)利要求8所述的系統(tǒng)或終端機或智能卡,其特征在于所述虛擬機器還包括載入所述模塊和解譯其中記號的裝置。
10.如權(quán)利要求9所述的系統(tǒng)或終端機或智能卡,其特征在于所述的記號載入和解譯裝置讀出所述模塊中的所述記號,如果讀出的記號不屬于所述記號組則發(fā)出一異常情況。
11.如權(quán)利要求7至10中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述虛擬機器包括可讀/寫的邏輯地址空間,所述空間具有至少一個所述模塊的儲存庫,所述模塊包括其執(zhí)行所需的可讀/寫的邏輯地址空間量的指示;所述虛擬機器還包括依據(jù)所述指示在所述模塊的載入時分配可讀/寫的邏輯地址空間量的裝置,所述的已分配可讀/寫邏輯地址空間具有已限定和受保護的邊界。
12.如權(quán)利要求11所述的系統(tǒng)或終端機或智能卡,其特征在于進一步包括在終止所述模塊時解除所述已分配可讀/寫邏輯地址空間量的裝置。
13.如權(quán)利要求9至12中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述第二裝置包括提供至少一條至少能修改所述計算機程序執(zhí)行時間性態(tài)的程序指令的裝置;在所述載入和解譯裝置已經(jīng)載入所述模塊后并且所述模塊正在運行時;所述載入和解譯裝置依據(jù)預(yù)定安全條件載入并解譯所述至少一條程序指令;所述執(zhí)行裝置按照所述虛擬機器的解譯對所述載入程序指令作出響應(yīng)并且利用所述修改性態(tài)來執(zhí)行所述計算機程序。
14.如權(quán)利要求13所述的系統(tǒng)或終端機或智能卡,其特征在于所述安全條件由一函數(shù)所提供。
15.如權(quán)利要求9至14中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于進一步包括可讀/寫邏輯地址空間,所述空間包括至少一個數(shù)據(jù)庫,所述數(shù)據(jù)庫包括至少一條記錄,所述模塊包括執(zhí)行所述模塊必須的非初始化可讀/寫邏輯地址空間量的指示;所述載入器依據(jù)所述指示分配非初始化邏輯地址空間的所需量;以及訪問所述數(shù)據(jù)庫中記錄的裝置,所述數(shù)據(jù)庫中的所述記錄僅可通過所述模塊訪問,所述訪問裝置在所述數(shù)據(jù)庫當(dāng)前記錄上提供一視窗并把所述記錄復(fù)制到可由所述應(yīng)用程序?qū)ぶ返囊徊糠炙龇浅跏蓟勺x/寫邏輯地址空間中。
16.一種交易管理系統(tǒng),其特征在于所述系統(tǒng)包括第一裝置和第二裝置,所述第一和第二裝置適合于彼此通信,所述第一和第二裝置中至少一種為集成電路卡;所述第二裝置包括提供至少一條至少能修改所述第一裝置上所述計算機程序執(zhí)行時間性態(tài)的程序指令的裝置;所述第一裝置包括一虛擬機器,所述虛擬機器包括載入和解譯所述計算機程序的裝置,在所述載入和解譯裝置已經(jīng)裝入所述計算機程序后并且所述計算機程序正在運行時,所述載入和解譯裝置進一步適合于依據(jù)預(yù)定安全條件載入并解譯所述至少一條程序指令;所述執(zhí)行裝置根據(jù)所述載入程序指令利用所述修改性態(tài)來執(zhí)行所述已載入和解譯的計算機程序。
17.一種包括與第二裝置進行交易的第一裝置的終端機,所述第一和第二裝置中至少一個裝置為集成電路卡,其特征在于所述第二裝置包括提供至少一條能夠至少修改所述第一裝置上所述計算機程序執(zhí)行時間性態(tài)的程序指令的裝置;所述終端機包括所述第一裝置包括一虛擬機器,所述虛擬機器包括載入和解譯所述計算機程序的裝置,在所述載入和解譯裝置已經(jīng)裝入所述計算機程序后并且所述計算機程序正在運行時,所述載入和解譯裝置進一步適合于依據(jù)預(yù)定安全條件載入并解譯所述至少一條程序指令;所述執(zhí)行裝置根據(jù)所述載入程序指令利用所述修改性態(tài)來執(zhí)行所述已載入和解譯的計算機程序。
18.一種包括與第二裝置進行交易的第一裝置的自含便攜式智能卡,其特征在于所述第二裝置包括提供至少一條能夠至少修改所述第一裝置上所述計算機程序執(zhí)行時間性態(tài)的程序指令的裝置,所述智能卡包括所述第一裝置包括一虛擬機器,所述虛擬機器包括載入和解譯所述計算機程序的裝置,在所述載入和解譯裝置已經(jīng)裝入所述計算機程序后并且所述計算機程序正在運行時,所述載入和解譯裝置依據(jù)預(yù)定安全條件載入并解譯所述至少一條程序指令;所述執(zhí)行裝置根據(jù)所述載入程序指令利用所述修改性態(tài)來執(zhí)行所述已載入和解譯的計算機程序。
19.如權(quán)利要求16所述的系統(tǒng)或如權(quán)利要求17所述的終端機或如權(quán)利要求18所述的智能卡,其特征在于所述安全條件由一函數(shù)所提供。
20.如權(quán)利要求19所述的系統(tǒng)或終端機或智能卡,其特征在于所述至少一程序指令為第一程序指令,所述第一裝置包括能夠至少修改所述計算機程序執(zhí)行時間性態(tài)的第二程序指令,所述第一程序指令包括對所述第二程序指令的引用;以及所述載入和解譯裝置對所述引用作出響直,載入所述第二程序指令,所述執(zhí)行裝置按照所述第二程序指令所確定的修改后性態(tài)來執(zhí)行所述計算機程序。
21.如權(quán)利要求20所述的系統(tǒng)或終端機或智能卡,其特征在于所述計算機程序和所述第一和第二程序指令以記號和相應(yīng)直接插入數(shù)據(jù)的流方式撰寫,每一記號為從一組專用字節(jié)代碼中選出的專用字節(jié)代碼。
22.如權(quán)利要求21所述的系統(tǒng)或終端機或智能卡,所述虛擬機器把所述第一和第二程序指令的所述記號和所述直接插入數(shù)據(jù)的流引導(dǎo)到所述計算機程序的記號流中。
23.如權(quán)利要求21或22所述的系統(tǒng)或終端機或智能卡,其特征在于至少所述計算機程序的記號流以及至少所述第二程序指令各自以模塊傳送,每個模塊為包括相關(guān)的記號流以及執(zhí)行所述模塊所需的相應(yīng)直接插入數(shù)據(jù)。
24.如權(quán)利要求23所述的系統(tǒng)或終端機或智能卡,其特征在于所述模塊還包括執(zhí)行所述模塊所需的存儲器指示。
25.如權(quán)利要求23或24所述的系統(tǒng)或終端機或智能卡,其特征在于所述計算機程序的模塊還包括至少一個可修改的插座的互斥表,所述至少一個插座限定所述虛擬機器在所述計算機程序模塊的記號流和直接插入數(shù)據(jù)中輸入所述第一程序指令的位置。
26.如權(quán)利要求25所述的系統(tǒng)或終端機或智能卡,其特征在于所述計算機程序模塊中所述至少一個可修改的插座包括執(zhí)行向量至缺省性態(tài)。
27.如權(quán)利要求26所述的系統(tǒng)或終端機或智能卡,其特征在于如果所述預(yù)定安全條件不允許所述至少一程序指令載入時,所述執(zhí)行裝置以所述缺省性態(tài)來執(zhí)行所述計算機程序。
28.如權(quán)利要求23或27所述的系統(tǒng)或終端機或智能卡,其特征在于所述虛擬機器包括可讀/寫邏輯地址空間,所述模塊包括其執(zhí)行所需的可讀/寫邏輯地址空間量指示;所述虛擬機器還包括依據(jù)所述指示在載入所述計算機程序模塊時分配可讀/寫邏輯地址空間量的裝置,所述的已分配可讀/寫邏輯地址空間具有已限定和保護的邊界;以及在所述計算機程序模塊結(jié)束時解除分配所述可讀/寫邏輯地址空間量的裝置。
29.如權(quán)利要求23或28所述的系統(tǒng)或終端機或智能卡,進一步包括可讀/寫邏輯地址空間,所述空間包括至少一個數(shù)據(jù)庫,所述數(shù)據(jù)庫包括多條記錄,所述模塊包括執(zhí)行所述模塊所必須的非初始化可讀/寫邏輯地址空間量的指示;所述載入裝置依據(jù)所述指示分配非初始化邏輯地址空間的所需量;以及存取所述數(shù)據(jù)庫中記錄的裝置,所述數(shù)據(jù)庫中的記錄僅可通過所述模塊存取,所述存取裝置在所述數(shù)據(jù)庫目前記錄上提供一視窗并且把所述記錄復(fù)制到可由所述應(yīng)用程序?qū)ぶ返囊徊糠址浅跏蓟勺x/寫邏輯地址空間中。
30.如權(quán)利要求16或27所述的系統(tǒng)或終端機或智能卡,其特征在于所述安全條件為包括至少驗證所述第二裝置上數(shù)據(jù)與程序指令的起原和完整性的裝置。
31.一種在第一裝置與第二裝置之間執(zhí)行交易的交易系統(tǒng),所述系統(tǒng)包括解譯施加到其上的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括虛擬處理單元和可讀/寫邏輯地址空間;至少一個第一應(yīng)用程序包括用于執(zhí)行時所需的可讀/寫邏輯地址空間量的指示,所述至少一個第一應(yīng)用程序以從所述一組記號中選出的記號和相應(yīng)直接插入數(shù)據(jù)的流的方式撰寫;所述虛擬機器還包括載入所述至少一個第一應(yīng)用程序的載入器;依據(jù)所述指示,特別為所述至少一個第一應(yīng)用程序分配第一可讀/寫邏輯地址空間量的裝置,所述的已分配可讀/寫邏輯地址空間具有已限定和保護的邊界。
32.一種包括與第二裝置進行交易的第一裝置的終端機,所述第一裝置包括解譯施加到其上的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括虛擬處理單元和可讀/寫邏輯地址空間;至少一個第一應(yīng)用程序包括用于執(zhí)行時所需的可讀/寫邏輯地址空間量的指示,所述至少一個第一應(yīng)用程序以從所述一組記號中選出的記號流和相應(yīng)直接插入數(shù)據(jù)方式撰寫;所述虛擬機器還包括載入所述至少一個第一應(yīng)用程序的載入器;依據(jù)所述指示,特別為所述至少一個第一應(yīng)用程序分配第一可讀/寫邏輯地址空間量的裝置,所述的已分配可讀/寫邏輯地址空間具有已限定和保護的邊界。
33.一種包括與第二裝置進行交易的第一裝置的自含便攜式智能卡,所述第一裝置包括解譯施加到其上的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括虛擬處理單元和可讀/寫邏輯地址空間;至少一個第一應(yīng)用程序包括用于執(zhí)行時所需的可讀/寫邏輯地址空間量的指示,所述至少一個第一應(yīng)用程序以從所述一組記號中選出的記號和相應(yīng)直接插入數(shù)據(jù)的流的方式撰寫;所述虛擬機器還包括載入所述至少一個第一應(yīng)用程序的載入器;依據(jù)所述指示,特別為所述至少一個第一應(yīng)用程序分配第一可讀/寫邏輯地址空間量的裝置,所述的已分配可讀/寫邏輯地址空間具有已限定和保護的邊界。
34.如權(quán)利要求31所述的系統(tǒng)或如權(quán)利要求32所述的終端機或如權(quán)利要求33所述的智能卡,其特征在于進一步包括在所述至少一個程序結(jié)束時明顯解除分配所述第一讀/寫邏輯地址空間量的裝置。
35.如權(quán)利要求31至34中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述第一和第二裝置中至少有一個是ICC。
36.如權(quán)利要求31至35中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述第一應(yīng)用程序還包括能夠被輸出到其它應(yīng)用程序上的具有至少一個函數(shù)的第一互斥表,進一步包括把所述至少一個函數(shù)可提供給其他程序使用的裝置。
37.如權(quán)利要求31至36中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述第一應(yīng)用程序為第一模塊,所述其他應(yīng)用程序為其他模塊,每一模塊至少包括從所述一組記號中選出的記號流、相應(yīng)的直接插入數(shù)據(jù)、被輸出的至少一個函數(shù)的第一互斥表和模塊執(zhí)行時所需的可讀/寫邏輯地址空間量的指示。
38.如權(quán)利要求37所述的系統(tǒng)或終端機,其特征在于所述第一模塊包括至少識別一個第二模塊的第二互斥表,從中將輸入至少一個函數(shù),所述載入器在載入所述第一模塊時依據(jù)所述第二表載入所述至少第二模塊。
39.如權(quán)利要求38所述的系統(tǒng)或終端機或智能卡,其特征在于如果所述被輸入的至少一個第二模塊未被成功載入,那么終止所述第一模塊。
40.如權(quán)利要求37至39中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述分配裝置在載入所述第一模塊時分配第一可讀/寫邏輯地址空間量,從第一地址開始僅給單個可擴充緩沖器中所述第一模塊分配第二或進一步的可讀/寫邏輯地址空間量;和在由所述第一模塊釋放所述第二可讀/寫邏輯地址空間量時,所述解除分配裝置解除分配的所述第二可讀/寫邏輯地址空間量以及所有超出所述第一地址的進一步的分配。
41.如權(quán)利要求40所述的系統(tǒng)或終端機或智能卡,其特征在于所述解除分配裝置在所述第一模塊結(jié)束時解除分配所述第二可讀/寫邏輯地址空間量和所有超出所述第一地址的進一步的分配。
42.如權(quán)利要求37至41中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述可讀/寫邏輯地址空間包括至少一個數(shù)據(jù)庫,所述數(shù)據(jù)庫包括至少一條記錄,所述模塊包括所述模塊執(zhí)行所需的非初始化可讀/寫邏輯地址空間量的指示,所述數(shù)據(jù)庫中的記錄僅可通過所述模塊訪問;所述載入器依據(jù)所述指示分配非初始化邏輯地址/空間量的所需量;和訪問所述數(shù)據(jù)庫中記錄的裝置,所述訪問裝置在所述數(shù)據(jù)庫當(dāng)前記錄上提供一視窗并把所述記錄復(fù)制到可由所述應(yīng)用程序?qū)ぶ返囊徊糠炙龇浅跏蓟勺x/寫邏輯地址空間中。
43.如權(quán)利要求34至42中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述解除分配裝置在所述第一模塊結(jié)束時刪除已分配的任何可讀/寫邏輯地址空間量。
44.一種在第一裝置與第二裝置之間執(zhí)行交易的交易系統(tǒng),所述第一和第二裝置中至少有一個為集成電路卡,所述系統(tǒng)包括一解譯施加到其上的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元和可讀/寫邏輯地址空間;至少一個數(shù)據(jù)庫包括至少一條記錄和由所述虛擬機器執(zhí)行的至少一個計算機程序,所述計算機程序為以選自所述一組記號的記號流方式撰寫的模塊,包括所述模塊執(zhí)行所需的非初始化可讀/寫邏輯地址空間量的指示;載入所述模塊并依據(jù)所述指示分配非初始化邏輯地址空間所需量的載入器;和訪問所述數(shù)據(jù)庫中記錄的裝置,所述數(shù)據(jù)庫中記錄僅可通過所述模塊訪問,所述訪問裝置在所述數(shù)據(jù)庫當(dāng)前記錄上提供一視窗并將所述記錄復(fù)制到可由所述應(yīng)用程序?qū)ぶ返囊徊糠炙龇浅跏蓟勺x/寫邏輯地址空間中。
45.一種包括與第二裝置執(zhí)行交易的第一裝置的終端機,所述第一和第二裝置中至少有一個為集成電路卡,所述第一裝置包括一解譯施加到其上的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元和可讀/寫邏輯地址空間;至少一個數(shù)據(jù)庫包括至少一條記錄和由所述虛擬機器執(zhí)行的至少一個計算機程序,所述計算機程序為以選自所述一組記號的記號流方式撰寫的模塊,包括所述模塊執(zhí)行所需的非初始化可讀/寫邏輯地址空間量的指示;載入所述模塊并依據(jù)所述指示分配非初始化邏輯地址空間所需量的載入器;和訪問所述數(shù)據(jù)庫中記錄的裝置,所述數(shù)據(jù)庫中記錄僅可通過所述模塊訪問,所述訪問裝置在所述數(shù)據(jù)庫當(dāng)前記錄上提供一視窗并將所述記錄復(fù)制到可由所述應(yīng)用程序?qū)ぶ返囊徊糠炙龇浅跏蓟勺x/寫邏輯地址空間中。
46.一種包括與第二裝置執(zhí)行交易的第一裝置的自含便攜式智能卡,所述第一裝置包括一解譯施加到其上的一組專用字節(jié)代碼記號的虛擬機器;所述虛擬機器包括一虛擬處理單元和可讀/寫邏輯地址空間;至少一個數(shù)據(jù)庫包括至少一條記錄和由所述虛擬機器執(zhí)行的至少一個計算機程序,所述計算機程序為以選自所述一組記號的記號流方式撰寫的模塊,包括所述模塊執(zhí)行所需的非初始化可讀/寫邏輯地址空間量的指示;載入所述模塊并依據(jù)所述指示分配非初始化邏輯地址空間所需量的載入器;和訪問所述數(shù)據(jù)庫中記錄的裝置,所述數(shù)據(jù)庫中記錄僅可通過所述模塊訪問,所述訪問裝置在所述數(shù)據(jù)庫當(dāng)前記錄上提供一視窗并將所述記錄復(fù)制到可由所述應(yīng)用程序?qū)ぶ返囊徊糠炙龇浅跏蓟勺x/寫邏輯地址空間中。
47.如權(quán)利要求44所述的系統(tǒng)或如權(quán)利要求45所述的終端機或如權(quán)利要求46所述的智能卡,其特征在于所述數(shù)據(jù)庫以所述模塊的第一次載入舉例說明的。
48.如權(quán)利要求1至47中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述虛擬機器為堆棧機器。
49.如權(quán)利要求48所述的系統(tǒng)或終端機或智能卡,其特征在于所述虛擬機器至少為兩堆棧機器,其中第一堆棧為數(shù)據(jù)堆棧而第二堆棧為返回堆棧。
50.如權(quán)利要求1至49中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述虛擬機器包括局部變量幀存儲器,幀指針寄存器,用于儲存指向存儲器中幀起始的幀指針和指向存儲器中幀結(jié)束的幀結(jié)束指針。
51.如權(quán)利要求49或50所述的系統(tǒng)或終端機或智能卡,其特征在于所述數(shù)據(jù)堆棧和返回堆棧不是在存儲器中由所述計算機程序直接選址的,而是僅可通過由記號限定和由所述虛擬機器解譯的堆棧操作存取的。
52.如前述任何一項權(quán)利要求所述的系統(tǒng)或終端機,其特征在于所述第一裝置為一手持裝置。
53.如權(quán)利要求52所述的系統(tǒng)或終端機,其特征在于所述手持裝置包括一集成電路卡(ICC)。
54.如權(quán)利要求1至53中任何一項所述的系統(tǒng)或終端機,其特征在于所述第二裝置包括一ICC。
55.如權(quán)利要求1至54中任何一項所述的系統(tǒng),其特征在于所述第一裝置為一終端機。
56.如權(quán)利要求1至55中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述第一和第二裝置均包括集成電路卡(ICC)。
57.如權(quán)利要求1至56中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述交易包括至少執(zhí)行一次下列序列a.建立所述第一與第二裝置之間的通信鏈路;b.選擇包括所述計算機程序和限定所述交易的一組相關(guān)數(shù)據(jù)的應(yīng)用程序;c.執(zhí)行所述應(yīng)用程序;和d.終止所述交易。
58.如權(quán)利要求1至57中任何一項所述的系統(tǒng)或終端機或智能卡,其特征在于所述交易為金融交易和所述系統(tǒng)為金融交易管理系統(tǒng)。
59.一種集成電路卡,其特征在于所述集成電路卡包括能夠修改如權(quán)利要求1至58中任何一項所述的系統(tǒng)中或者如權(quán)利要求2至58中任何一項所述的終端機中或者如權(quán)利要求3至58中任何一項所述的智能卡中程序運行性態(tài)的程序指令。
60.一種在第一裝置與一第二裝置之間進行交易的方法,所述第一和第二裝置中至少有一個為集成電路卡;所述方法包括在所述第二裝置上提供至少一條程序指令,至少能夠修改所述第一裝置上計算機程序的執(zhí)行時間性態(tài);載入和解譯所述計算機程序,當(dāng)所述計算機程序正在執(zhí)行時,依據(jù)預(yù)定的安全條件,載入和解譯所述至少一條程序指令;和根據(jù)所述已載入和解譯的程序指令,以所述修改性態(tài)來執(zhí)行所述被載入和解譯的計算機程序。
61.一種在第一裝置與第二裝置之間進行交易的方法,所述第一和第二裝置中至少有一個為集成電路卡,所述方法包括解譯至少一個應(yīng)用程序,所述程序是以選自一組記號的字節(jié)代碼記號和相應(yīng)直接插入數(shù)據(jù)的流的方式撰寫的;載入所述至少一個應(yīng)用程序;依據(jù)包含在執(zhí)行所需的可讀/寫邏輯地址空間量的所述應(yīng)用程序中的指示,分配第一可讀/寫邏輯空間量,特別是所述至少一個應(yīng)用程序的;以及限定和保護所述已分配可讀/寫邏輯地址空間的邊界。
62.如權(quán)利要求61所述的方法,其特征在于進一步包括在所述至少一個第一應(yīng)用程序終止時明顯地解除分配的第一可讀/寫邏輯地址空間量。
63.一種在第一裝置與第二裝置之間進行交易系統(tǒng)的方法,所述第一和第二裝置中至少有一個為集成電路卡,所述方法包括解譯模塊中的記號,所述記號以選自一組記號中的記號流的方式撰寫;依據(jù)所述模塊執(zhí)行所需的所述模塊中非初始化可讀/寫邏輯地址空間量的指示,分配非初始化邏輯地址/空間量;通過在所述數(shù)據(jù)庫當(dāng)前記錄上提供一視窗來訪問數(shù)據(jù)庫中記錄,數(shù)據(jù)庫中的記錄僅可通過所述模塊訪問;把所述記錄復(fù)制到可由所述模塊選址的一部分所述非初始化可讀/寫邏輯地址空間中。
64.一種在第一裝置與第二裝置之間進行交易的方法,所述第一和第二裝置中至少有一個為集成電路卡,所述方法包括提供一個便攜式虛擬機器,所述機器包括一虛擬微處理器和至少用于一個輸入/輸出裝置中的驅(qū)動器;利用所述便攜式虛擬機器來解譯所述第一裝置上的計算機程序;以及根據(jù)所述已解譯程序來執(zhí)行所述程序。
全文摘要
本發(fā)明提供一種在第一裝置(1)與第二裝置之間執(zhí)行交易的交易管理系統(tǒng),所述第一和第二裝置適合于彼此通信,第一和第二裝置中至少有一個為集成電路卡,所述系統(tǒng)包括:至少一個輸入/輸出裝置(25);一便攜式虛擬機器(20),用以解譯第一裝置上的計算機程序,所述虛擬機器包括一虛擬微處理器和用于至少一輸入/輸出裝置(25)的驅(qū)動器;以及根據(jù)所述已解譯程序執(zhí)行所述程序的執(zhí)行裝置。本發(fā)明背后的一般鏈接技術(shù)概念是與交易系統(tǒng)中數(shù)據(jù)安全性和運行時間保證相結(jié)合的便攜性,只要成功地通過編譯時間檢查,這與目標的執(zhí)行無關(guān)。一般鏈接技術(shù)概念可通過如下所述實現(xiàn),利用虛擬機器作解譯器,包括虛擬機器中I/O裝置用的驅(qū)動器,以使應(yīng)用程序具有一個與I/O裝置的公共接口,因此在廣泛的不同的環(huán)境中可攜;在存儲器的分配和解除分配以及包括應(yīng)用程序中存儲器量的指示,這意味著所述程序只能成功地運行或者完全不運行,安全管理功能減少到最少,這提高了操作速度,提供一種從應(yīng)用程序和數(shù)據(jù)庫中輸入、輸出數(shù)據(jù)的安全方式。
文檔編號G07F7/10GK1223737SQ97195913
公開日1999年7月21日 申請日期1997年6月26日 優(yōu)先權(quán)日1997年6月26日
發(fā)明者G·海恩斯, P·約翰尼斯 申請人:歐羅巴國際公司