亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

數(shù)據(jù)處理系統(tǒng)中處理交易的方法和裝置的制作方法

文檔序號(hào):6435371閱讀:250來(lái)源:國(guó)知局
專利名稱:數(shù)據(jù)處理系統(tǒng)中處理交易的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明總的來(lái)說(shuō)涉及數(shù)據(jù)處理系統(tǒng)領(lǐng)域,并尤其涉及一種處理裝載到數(shù)據(jù)處理系統(tǒng)中的交易的改進(jìn)方法和裝置。
背景技術(shù)
很多數(shù)據(jù)處理系統(tǒng)(這里也稱為“系統(tǒng)”)需要交易操作來(lái)成功地執(zhí)行功能。交易操作是必須(作為一組)成功完成的一組指令。如果在該組指令成功完成之前發(fā)生(計(jì)算上的或其他方面的)故障,系統(tǒng)值必須恢復(fù)到準(zhǔn)備進(jìn)行交易操作之前的它們所處的狀態(tài)。通常,交易操作的處理包含三個(gè)步驟。首先,交易操作的開頭做出標(biāo)記。如果交易失敗,將恢復(fù)該點(diǎn)的系統(tǒng)值。第二,執(zhí)行交易操作中的單獨(dú)操作。最后,達(dá)到交易操作的終點(diǎn)時(shí),終點(diǎn)進(jìn)行標(biāo)記,并確認(rèn)來(lái)自交易操作的數(shù)據(jù)(即,系統(tǒng)狀態(tài)更新以反映在交易中采取的操作)。
交易操作對(duì)諸如智能卡的嵌入系統(tǒng)尤其重要,這時(shí)用戶能夠通過(guò)從終端移走智能卡而在任何時(shí)刻中斷操作。這種情況下,智能卡必須保持可用的狀態(tài),從而有必要為了操作最簡(jiǎn)單而經(jīng)常以交易為基礎(chǔ)操作。
通常,一個(gè)基本操作是已經(jīng)實(shí)際上定義為交易的一個(gè)特定種類的單個(gè)操作。例如,在Java Card運(yùn)行時(shí)間環(huán)境下,對(duì)持續(xù)的對(duì)象或類型的領(lǐng)域的單個(gè)更新被定義為一個(gè)基本操作。如以上提到的,交易能夠包括多個(gè)操作。通常,支持這種包括多個(gè)操作的交易的系統(tǒng)允許明確標(biāo)記這種交易的起點(diǎn)和終點(diǎn)。這里使用的術(shù)語(yǔ)“交易”指可以包括多個(gè)操作的交易和基本操作二者。交易的其他信息能夠在以下資源中找到(1)Gray,The Transaction Concept(交易概念)Virtues and Limitations(功能和限制),Very Large Data Base(非常大的數(shù)據(jù)庫(kù)),1981年9月9-11在法國(guó)嘎納舉行的第7界國(guó)際會(huì)議;(2)Gray&Reuter,Transaction ProcessingConcept and Techniques(交易處理概念和技術(shù)),Morgan kaufmann 1993,ISBN 1-55860-190-2;和(3)Chen,JavaCardTMtechnology for Smart Cards(智能卡的Java Card技術(shù))Addison-Wesley2000,ISBN 0-291-70329-7;和(4)Hassler,Java Card for E-PaymentApplications(用于電子付費(fèi)應(yīng)用的Java卡),Artech House 2002,ISBN1-58053-291-8。
盡管交易被用來(lái)確保系統(tǒng)總是保持可用狀態(tài),但是交易的處理通常導(dǎo)致高額外開銷。根據(jù)用于恢復(fù)系統(tǒng)為開始失敗的交易之前的狀態(tài)的特定交易登錄方法,這種額外開銷經(jīng)常需要比等效的無(wú)交易操作多兩倍或三倍地寫入到永久存儲(chǔ)器中。該額外開銷在系統(tǒng)中增加,其中數(shù)據(jù)存儲(chǔ)在相當(dāng)慢的存儲(chǔ)器,比如EEPROM或其他種類的永久的,非易失的存儲(chǔ)器。這種存儲(chǔ)器經(jīng)常用于嵌入系統(tǒng),比如智能卡。EEPROM技術(shù)的特性造成讀取和寫入EEPROM需要比對(duì)應(yīng)的讀取和寫入到隨機(jī)讀取(易失)存儲(chǔ)器(RAM)長(zhǎng)很多的時(shí)間。而且,EEPROM具有可寫入次數(shù)的限制(通常為幾萬(wàn)或幾十萬(wàn)次的狀態(tài))。因此,實(shí)現(xiàn)用于交易的有效執(zhí)行的裝置和方法將是有益的,它將已經(jīng)成功完成的交易所需要的確認(rèn)數(shù)量最小化。


閱讀了以下的詳細(xì)說(shuō)明并參照附圖后,本發(fā)明的結(jié)構(gòu)和操作將變得明顯,其中圖1概念性地說(shuō)明了裝載有一系列示例的基本和明確交易的存儲(chǔ)器的一部分;圖2用一些附加的細(xì)節(jié)概念性地說(shuō)明了圖1的交易;圖3是進(jìn)一步說(shuō)明本發(fā)明的一個(gè)方面的流程圖;圖4概念性地說(shuō)明了執(zhí)行圖3的方法后圖1的交易;圖5說(shuō)明了一個(gè)示例的數(shù)據(jù)處理系統(tǒng);圖6說(shuō)明一個(gè)示例的智能卡;和圖7用一些附加的細(xì)節(jié)概念性地說(shuō)明了具有圖6的示例智能卡的模塊105的集成存儲(chǔ)器元件115部分的微處理器。
盡管本發(fā)明可容許各種修改和另外的形式,但其特定實(shí)施例通過(guò)圖中的例子表示并將在這里詳細(xì)說(shuō)明。然而,應(yīng)當(dāng)理解這里呈現(xiàn)的圖和詳細(xì)說(shuō)明不意圖限制本發(fā)明為公開的特定實(shí)施例。相反,本發(fā)明只由權(quán)利要求的語(yǔ)言所限制。
具體實(shí)施例方式
總的來(lái)說(shuō)本發(fā)明設(shè)想了一個(gè)數(shù)據(jù)處理系統(tǒng)和方法,其中數(shù)據(jù)處理系統(tǒng)可以配置為接收具有將由數(shù)據(jù)處理系統(tǒng)執(zhí)行的交易的計(jì)算機(jī)代碼,并繼續(xù)檢查執(zhí)行的計(jì)算機(jī)代碼中可觀測(cè)的狀態(tài)變化,存儲(chǔ)執(zhí)行作為交易的一部分的計(jì)算機(jī)代碼的數(shù)據(jù),并響應(yīng)檢測(cè)到可觀測(cè)的狀態(tài)變化,確認(rèn)存儲(chǔ)數(shù)據(jù)的一部分。整個(gè)說(shuō)明書和附圖中,相同的元件將給予相同的參考數(shù)字。
圖1概念性地說(shuō)明了裝有可變長(zhǎng)度的交易A 105、B 110、C 115、D 120的存儲(chǔ)器110的一部分。本領(lǐng)域技術(shù)人員將意識(shí)到某個(gè)運(yùn)行時(shí)間環(huán)境允許應(yīng)用程序明確指定哪些操作被包含在交易中(“明確交易”)。為了這樣做,這種系統(tǒng)允許明確交易的起點(diǎn)和終點(diǎn)用某種標(biāo)志(通常為“開始”和“結(jié)束”)進(jìn)行標(biāo)記。例如,如果在所有指定操作完成之前的任意點(diǎn)交易失敗,則系統(tǒng)值恢復(fù)到剛好在失敗的明確交易的起始點(diǎn)之前的狀態(tài)(該恢復(fù)在這里稱為“回退”)。其他系統(tǒng)通過(guò)指定所有特定種類的操作實(shí)際上為交易,從而當(dāng)作基本操作(“隱含交易”)處理,來(lái)隱含地標(biāo)記基本交易的起點(diǎn)和終點(diǎn)。這些基本操作或者成功并且確認(rèn)可應(yīng)用系統(tǒng)值,或者在交易失敗時(shí)發(fā)生回退。
用于進(jìn)行確認(rèn)和回退功能的傳統(tǒng)方法處理交易時(shí)可以包括(i)以不影響原始數(shù)據(jù)的方式登錄新值,直到交易完成(“新值登錄”),(ii)登錄舊值,并使用該記錄起動(dòng)回退,從而在交易失敗的情況下恢復(fù)原始狀態(tài)(“舊值登錄”),和(iii)根據(jù)進(jìn)行處理的交易的數(shù)據(jù)類型和其他特征,合并新值登錄和舊值登錄。傳統(tǒng)的系統(tǒng)也可以包括同時(shí)支持明確交易和隱含交易。在這種系統(tǒng)中,通常可以按照需要布置明確交易和隱含交易。交易A 105和D 120是隱含交易。交易B 110和C 115是明確交易。圖1說(shuō)明了交易A 105、B 110、C 115和D 120的布置。本領(lǐng)域技術(shù)人員將意識(shí)到存儲(chǔ)器100可以具有在交易A 105和B 110之間布置和在交易B 110和C 115和隨后的交易D 120之間布置的無(wú)交易指令。
現(xiàn)在轉(zhuǎn)到圖2,用一些附加的細(xì)節(jié)概念性地說(shuō)明了圖1的交易。隱含交易A 105的開始點(diǎn)是起始點(diǎn)205。隱含交易A 105的終點(diǎn)是終點(diǎn)215。隱含交易A 105包含基本操作A 210。明確交易B 110的開始點(diǎn)是起始點(diǎn)220。明確交易B 110的終點(diǎn)是終點(diǎn)230。明確交易B 110包含操作B1 225,B2 226和B3 227。明確交易C 115的開始點(diǎn)是起點(diǎn)235。明確交易C 115的終點(diǎn)是終點(diǎn)245。明確交易C 115包含操作C1 240和C2 241。隱含交易D 120的開始點(diǎn)是起始點(diǎn)。隱含交易D 120的終點(diǎn)是終點(diǎn)260。隱含交易D 120包含基本操作D 255。
在傳統(tǒng)系統(tǒng)中,通常在交易的成功完成基礎(chǔ)上確認(rèn)交易的操作。因此,在傳統(tǒng)系統(tǒng)中,將通常在系統(tǒng)分別成功的達(dá)到每個(gè)可應(yīng)用的明確和隱含終點(diǎn)215、230、245和260的條件下,確認(rèn)交易A 105,B 110,C 115和D 120的操作。假定成功的完成每個(gè)交易A 105、B 110、C 115和D 120,傳統(tǒng)系統(tǒng)將通常執(zhí)行四個(gè)單獨(dú)的確認(rèn)。
總的來(lái)說(shuō),本發(fā)明想要通過(guò)將已經(jīng)成功完成的交易所需確認(rèn)數(shù)量最小化,來(lái)優(yōu)化數(shù)據(jù)處理系統(tǒng)中的交易處理。在利用諸如EEPROM的永久、非易失存儲(chǔ)器的系統(tǒng)中(比如智能卡),本發(fā)明可以(作為使確認(rèn)數(shù)量最小化的結(jié)果)增加這種永久、非易失存儲(chǔ)器的使用壽命。本發(fā)明利用執(zhí)行交易的系統(tǒng)的可觀測(cè)的狀態(tài)變化,從而合并兩個(gè)或更多成功完成的交易并確認(rèn)合并在一起的交易產(chǎn)生的數(shù)據(jù),而不是單獨(dú)確認(rèn)每個(gè)交易產(chǎn)生的數(shù)據(jù)。
本領(lǐng)域技術(shù)人員將意識(shí)到,可觀測(cè)的狀態(tài)變化通常包括通過(guò)它使外界可獲得系統(tǒng)狀態(tài)的任何手段,這樣,接入系統(tǒng)的服務(wù)的那些能夠適當(dāng)?shù)亓私鉅顟B(tài)。特別是,這可以包括外部通信、人機(jī)接口、寫入到外部介質(zhì)、寫入到共享盤或存儲(chǔ)器、或任意通過(guò)它系統(tǒng)遵照外界以能夠由系統(tǒng)的客戶檢測(cè)的方式執(zhí)行處理的裝置。然而,可觀測(cè)的狀態(tài)通常不包括能夠由插入的或額外的裝置獲得的狀態(tài)信息,比如電源分析,存儲(chǔ)器跟蹤,硬件邏輯分析等。通常,可觀測(cè)的狀態(tài)可以從正在從系統(tǒng)請(qǐng)求交易服務(wù)的系統(tǒng)客戶的觀點(diǎn)來(lái)確定。從客戶的觀點(diǎn)來(lái)看,系統(tǒng)的可觀測(cè)的狀態(tài)可以定義為通常只包括客戶察覺的系統(tǒng)的外部明顯狀態(tài)部分。
在本發(fā)明的一個(gè)實(shí)施例中,系統(tǒng)的可觀測(cè)的狀態(tài)變化可以用于合并交易并確認(rèn)合并在一起的交易的可應(yīng)用數(shù)據(jù),因?yàn)榭蛻魧⒉灰揽窟@種數(shù)據(jù),直到可觀測(cè)的狀態(tài)變化發(fā)生為止。即,客戶通常對(duì)于執(zhí)行交易的系統(tǒng)前進(jìn)沒(méi)有預(yù)期,直到客戶觀察到系統(tǒng)的那一部分的一些狀態(tài)變化為止。這時(shí),可觀測(cè)的狀態(tài)變化通常暗示已經(jīng)執(zhí)行了某個(gè)交易,并且客戶現(xiàn)在可以對(duì)可觀測(cè)的狀態(tài)變化之前完成的交易數(shù)據(jù)已經(jīng)確認(rèn)有預(yù)期。通常,在交易沒(méi)有成功完成并且還沒(méi)有發(fā)生可觀測(cè)的狀態(tài)變化時(shí),客戶可能對(duì)于失敗前執(zhí)行一系列交易中的多少交易沒(méi)有預(yù)期。實(shí)際上,客戶可能不理智地甚至對(duì)成功的系列中的單個(gè)交易抱有預(yù)期。
作為前述的例子,假定一個(gè)客戶向系統(tǒng)發(fā)送一個(gè)命令,它將引起十個(gè)交易操作,并且在最終交易完成時(shí)結(jié)果將被發(fā)送回客戶。進(jìn)一步假想直到結(jié)果發(fā)送為止,客戶能夠感覺到系統(tǒng)的可觀測(cè)的狀態(tài)沒(méi)有變化。這時(shí),如果十個(gè)交易中有一個(gè)失敗,客戶就不能知道在失敗的交易之前系統(tǒng)進(jìn)行了多少處理,因?yàn)橄到y(tǒng)的可觀測(cè)的狀態(tài)沒(méi)有變化。客戶可能不理智地希望系統(tǒng)該部分的處理。因此,在本發(fā)明的一個(gè)實(shí)施例中,確認(rèn)功能可以延遲直到所有十個(gè)交易操作已經(jīng)成功執(zhí)行為止。執(zhí)行圖2所述的交易的系統(tǒng)的可觀測(cè)的狀態(tài)變化在265、270和275(分別在交易A 105開始之前,在緊接著交易A 105完成后,和在緊接著交易D 120完成之后)中描述。
圖3描述了說(shuō)明本發(fā)明的一種方法300的實(shí)施例的流程圖。為了可觀測(cè)的狀態(tài)的變化,實(shí)施例一般涉及檢查被執(zhí)行的計(jì)算機(jī)代碼、存儲(chǔ)被執(zhí)行的計(jì)算機(jī)代碼的數(shù)據(jù),它是計(jì)算機(jī)代碼中多個(gè)交易的一部分;并響應(yīng)檢測(cè)到的可觀測(cè)的狀態(tài)變化,確認(rèn)存儲(chǔ)數(shù)據(jù)的一部分。在所述實(shí)施例中,交易緩沖器開始的指針(“BOTB指針”)和最后的緩沖交易指針(“LBT指針”)都設(shè)為交易緩沖器的開始,數(shù)據(jù)將保存在該緩沖器中305。確定指令是否是可獲得的310。如果指令可獲得,執(zhí)行指令315,否則該方法完成。
如果指令不可獲得,接著作出指令是否是交易的部分的進(jìn)一步的確定320。本領(lǐng)域技術(shù)人員將意識(shí)到對(duì)于確定檢查的指令是否是交易的部分存在很多替換方式,包括利用可獲得的標(biāo)志,該標(biāo)志在已經(jīng)遇到明確交易或隱含交易的開始點(diǎn)時(shí)被設(shè)置并當(dāng)遇到明確交易或隱含交易的終點(diǎn)時(shí)清除。如果指令是交易的部分,該執(zhí)行產(chǎn)生的可用數(shù)據(jù)存儲(chǔ)在交易緩沖器中325并確定是否遇到交易的終止330。遇到交易結(jié)束時(shí),與剛剛完成的交易相對(duì)應(yīng)的數(shù)據(jù)的結(jié)束處作出標(biāo)記。在所述實(shí)施例中,LBT指針設(shè)為與最后輸入到用于剛剛檢查的可用交易的交易緩沖器中的數(shù)據(jù)相對(duì)應(yīng)335。
接著,確定可觀測(cè)的狀態(tài)中是否已經(jīng)出現(xiàn)變化340。如果已經(jīng)出現(xiàn)可觀測(cè)的狀態(tài)變化,確認(rèn)存儲(chǔ)在交易緩沖器中并與從最后的確認(rèn)開始已經(jīng)成功完成的那些交易相對(duì)應(yīng)的數(shù)據(jù)。在所述實(shí)施例中,這通過(guò)確認(rèn)對(duì)應(yīng)于BOTB指針并通過(guò)對(duì)應(yīng)于LBT指針的數(shù)據(jù)繼續(xù)的數(shù)據(jù)而實(shí)現(xiàn)350。交易緩沖器的起始和結(jié)束指針接著進(jìn)行相應(yīng)調(diào)整,并且對(duì)于下一個(gè)指令再次執(zhí)行該方法。在所述實(shí)施例中,通過(guò)設(shè)置BOTB指針為等于LBT指針來(lái)調(diào)整指針335。
即使可能沒(méi)有發(fā)生可觀測(cè)的狀態(tài)變化,也可能存在發(fā)生需要交易緩沖器中的可用數(shù)據(jù)被確認(rèn)的系統(tǒng)限制345。需要確認(rèn)完成的系統(tǒng)限制的例子可能通常依賴于特定系統(tǒng)并可能包括交易緩沖器大小的限制,從而緩沖器中存儲(chǔ)空間必須按順序釋放以連續(xù)處理,并可以包括在交易緩沖器中讀取先前存儲(chǔ)的數(shù)據(jù)的需要。如果產(chǎn)生系統(tǒng)限制,交易緩沖器中的可用數(shù)據(jù)被確認(rèn)并且接著按照上述分別在發(fā)生可觀測(cè)的狀態(tài)變化350和355時(shí)那樣調(diào)整交易緩沖器的開始和結(jié)束指針,并且再次對(duì)下一個(gè)可獲得的指令執(zhí)行該方法。本領(lǐng)域技術(shù)人員將意識(shí)到在已經(jīng)達(dá)到交易緩沖器容量的那些情況下,確認(rèn)存儲(chǔ)的數(shù)據(jù)時(shí)必須注意不要分離的存儲(chǔ)的交易中之一的數(shù)據(jù),而要只確認(rèn)正在處理的交易之前剛成功完成的最后的交易的數(shù)據(jù)。在本發(fā)明的一個(gè)實(shí)施例中,以上內(nèi)容通過(guò)保持BOTB指針和LBT指針實(shí)現(xiàn)。
本領(lǐng)域技術(shù)人員還將意識(shí)到方法300可以用執(zhí)行確認(rèn)和回退功能的新值登錄或舊值登錄方法中的任一種(或它們的組合)來(lái)實(shí)現(xiàn)。
圖4概念性地說(shuō)明了執(zhí)行方法300后圖1的交易。執(zhí)行交易的系統(tǒng)的可觀測(cè)的狀態(tài)變化保持在上述的265,270和275。如圖4所示,交易A 105開始之前保持可觀測(cè)的狀態(tài)變化265,并交易A 105完成后立即保持可觀測(cè)的狀態(tài)變化270,交易D 120完成后立即保持可觀測(cè)的狀態(tài)變化275。但是由于在明確交易B 110,明確交易C 115和隱含交易D 120之間沒(méi)有發(fā)生可觀測(cè)的狀態(tài)的變化,明確交易B 110、明確交易C 115和隱含交易D 120和它們的各個(gè)操作B1 225、B2 226、B3 227、C1 240、C2 241和D 255已經(jīng)合并到概念上的交易B、C和D 405中。這樣,概念上的交易B、C和D 405的開始點(diǎn)是起始點(diǎn)410(與起始點(diǎn)220相同),并且概念上的交易B、C和D 405的終點(diǎn)是終點(diǎn)415(與終點(diǎn)260相同)。因而,代替明確交易B 110、明確交易C 115和隱含交易D 120成功完成時(shí)完成的三個(gè)確認(rèn),在概念上的交易B、C和D 405成功完成時(shí)只使用一個(gè)確認(rèn)。這種情況下,由于有與將執(zhí)行的確認(rèn)數(shù)量每次降低相關(guān)的節(jié)省,交易開銷大大降低。
圖5說(shuō)明了一個(gè)示例的數(shù)據(jù)處理系統(tǒng)500。數(shù)據(jù)處理系統(tǒng)500可以包括一個(gè)或多個(gè)處理器P1 505到Pn 510,它們通過(guò)系統(tǒng)總線530連接并接入到系統(tǒng)存儲(chǔ)器515。處理器P1 505到Pn 510可以用各種通用處理器執(zhí)行,包括例如IBM公司的處理器PowerPC系列和諸如Intel公司的處理器的Pentium系列的x86型處理器。系統(tǒng)存儲(chǔ)器515通常用諸如動(dòng)態(tài)RAM(DRAM)元件的陣列的易失存儲(chǔ)元件實(shí)現(xiàn)。系統(tǒng)存儲(chǔ)器515也可以配置為包括只讀存儲(chǔ)器(ROM)和非易失讀/寫存儲(chǔ)器。在本發(fā)明的一個(gè)實(shí)施例中,系統(tǒng)存儲(chǔ)器515配置為包括交易緩沖器516。
總線橋接器540提供一個(gè)系統(tǒng)總線530和外圍總線545之間的接口。外圍總線545通常按照一種工業(yè)標(biāo)準(zhǔn)的外圍總線協(xié)議或規(guī)范實(shí)現(xiàn),比如來(lái)自PCI指定興趣組(www.pcisig.org)的PCI現(xiàn)場(chǎng)總線規(guī)范Rev2.2中指定的周邊元件擴(kuò)展接口(PCI)協(xié)議。數(shù)據(jù)處理系統(tǒng)500可以包括連接到外圍總線545的一個(gè)或多個(gè)外圍設(shè)備550和555。這些外圍設(shè)備能夠包括例如,硬盤控制器、高速網(wǎng)絡(luò)接口卡、圖形適配器、和到目前為止基于微處理器的數(shù)據(jù)處理系統(tǒng)設(shè)計(jì)領(lǐng)域技術(shù)人員熟悉的那些設(shè)備。
圖6示出了數(shù)據(jù)處理系統(tǒng)的一個(gè)例子,一個(gè)示例的智能卡。智能卡是塑料的、信用卡形的卡,它包括嵌入到卡的塑料本體中的電子器件(芯片)。不只使用磁條來(lái)存儲(chǔ)信息,智能卡還使用嵌入到芯片中的微處理器和存儲(chǔ)器元件。與智能卡的通信通常通過(guò)卡接受設(shè)備(“CAD”)進(jìn)行,用戶將智能卡插入到該卡接收設(shè)備中。除了與智能卡的通信,CAD通常給智能卡提供電源。由于智能卡有一個(gè)芯片,它們能夠編程以許多變化的性能來(lái)工作,比如儲(chǔ)值卡、信用卡、借記卡、ATM卡、電話卡、個(gè)人身份識(shí)別卡、重大的記錄存儲(chǔ)設(shè)備等。在這些變化的性能中,一個(gè)智能卡可以設(shè)計(jì)為使用許多不同的應(yīng)用程序。智能卡遵從國(guó)際標(biāo)準(zhǔn)化組織(ISO)的標(biāo)準(zhǔn)7816部分1-10,它在這里引用作為參考并通常稱為“ISO 7816”。
智能卡600包括通過(guò)導(dǎo)電觸點(diǎn)610連接到具有集成存儲(chǔ)器元件615的微處理器的一個(gè)模塊605。導(dǎo)電觸點(diǎn)610與CAD連接,通常提供操作電源和允許CAD和智能卡之間的數(shù)據(jù)傳輸。智能卡的其他實(shí)施例可以不包括導(dǎo)電觸點(diǎn)610,這種“無(wú)接觸”智能卡可以交換信息并可以通過(guò)諸如磁耦合的靠近耦合或諸如無(wú)線通信的遠(yuǎn)程耦合接收電源。智能卡600符合ISO 7816。
圖7中更詳細(xì)地示出了具有圖6的集成存儲(chǔ)器元件615的微處理器。微處理器615包括中央處理單元(CPU)705。微處理器615與存儲(chǔ)器元件715相關(guān)聯(lián)?!按鎯?chǔ)器”可以與微處理615形成在同一個(gè)集成電路上,也可以形成在單獨(dú)的設(shè)備上。通常,存儲(chǔ)器元件715可以配置為包括隨機(jī)存取存儲(chǔ)器(RAM)720、只讀存儲(chǔ)器(ROM)725和非易失讀/寫存儲(chǔ)器730。只讀存儲(chǔ)器725可以配置為包括用于裝入應(yīng)用程序到存儲(chǔ)器元件715中的安裝程序模塊710。在另一種配置中,RAM 720、ROM 725和非易失讀/寫存儲(chǔ)器730不在同一個(gè)存儲(chǔ)器元件715中,而是在一些分離的電子單元組合中。在本發(fā)明的一個(gè)實(shí)施例中,RAM 720配置為包括交易緩沖器735。
用智能卡,存在執(zhí)行應(yīng)用程序期間的任何時(shí)間上發(fā)生故障的風(fēng)險(xiǎn)。盡管計(jì)算錯(cuò)誤能夠發(fā)生失敗,更可能的原因是智能卡從CAD中過(guò)早取出。由于電源通過(guò)CAD提供給智能卡,從CAD中取出智能卡將終止任何取出時(shí)刻執(zhí)行的CAD文件的執(zhí)行。這種智能卡的過(guò)早取出在下文中稱為“拔出”或“卡拔出”。為了使智能卡保持?jǐn)?shù)據(jù)操作的完整性并對(duì)針卡拔出進(jìn)行保護(hù),用于智能卡的典型運(yùn)行時(shí)間環(huán)境支持交易的執(zhí)行。
用于本發(fā)明的另一個(gè)實(shí)施例的源代碼包含在本說(shuō)明書的附錄A中,它采用在使用Java Card運(yùn)行時(shí)間環(huán)境中的智能卡內(nèi)執(zhí)行的新值登錄。如上文所介紹的,術(shù)語(yǔ)“智能卡”參照?qǐng)D6所示的設(shè)備說(shuō)明。但是,安全接口模塊(SIM)和安全接入模塊(SAM)是典型智能卡的小型版本并通常用在電話或其他小空間中。用在這里的術(shù)語(yǔ)“智能卡”不意圖由尺寸、形狀、性質(zhì)和封裝或安裝微處理器和存儲(chǔ)器元件的材料成分進(jìn)行限制。因此,全文中使用的術(shù)語(yǔ)“智能卡”寬泛地認(rèn)為包含任意本身具有能處理數(shù)據(jù)的微處理器和存儲(chǔ)器元件的組合。
應(yīng)當(dāng)意識(shí)到本發(fā)明的部分可以用存儲(chǔ)在或包含在計(jì)算機(jī)可讀介質(zhì)中的一組計(jì)算機(jī)可執(zhí)行指令(軟件)實(shí)現(xiàn)。計(jì)算機(jī)可讀介質(zhì)可以包括非易失介質(zhì),比如軟盤、硬盤、閃存卡、ROM、CD ROM、DVD、磁帶或其他可用介質(zhì)。而且,本領(lǐng)域技術(shù)人員將意識(shí)到這里描述和要求保護(hù)的發(fā)明有很多替換的實(shí)現(xiàn)方式。例如,描述的實(shí)施例使用指針,例如BOTB和LBT指針。這些指針可以用由很多程序語(yǔ)言和操作系統(tǒng)提供的指針數(shù)據(jù)類型實(shí)現(xiàn)。或者,它們可以用與給定位置的偏移實(shí)現(xiàn)。例如,在后面的替換中,基礎(chǔ)位置可以設(shè)在可用交易的開始。指針接著用與基礎(chǔ)位置的一個(gè)偏移來(lái)實(shí)現(xiàn)。從而,這里的詞語(yǔ)“指針”意味著一個(gè)數(shù)據(jù)單元,它提供在程序或數(shù)據(jù)結(jié)構(gòu)中指定的一個(gè)位置的方法、函數(shù)和結(jié)果的,以便能夠接入到在那個(gè)位置上的一個(gè)內(nèi)容,在那里允許進(jìn)行涉及該內(nèi)容的檢測(cè)、比較或其他操作。
從本公開文件中獲益的本領(lǐng)域技術(shù)人員將明白從本發(fā)明提出的一種用于有效進(jìn)行交易處理的數(shù)據(jù)處理系統(tǒng)和方法中得到啟示,它能夠減少成功完成交易所需確認(rèn)的數(shù)量。應(yīng)當(dāng)理解在詳細(xì)說(shuō)明和附圖中示出和說(shuō)明的本發(fā)明的形式僅僅是提出的優(yōu)選實(shí)施例,而本發(fā)明只由權(quán)利要求的語(yǔ)言進(jìn)行限制。
附錄A下面是使用新值登錄(NVL)的基于可觀測(cè)狀態(tài)實(shí)現(xiàn)交易的最優(yōu)化的C語(yǔ)言代碼。
(也可以使用舊值登錄或其他的交易機(jī)制來(lái)實(shí)現(xiàn)該最優(yōu)化。)<pre listing-type="program-listing"><![CDATA[/* *nvl_tran.c *transaction logging mechanism * *This transaction mirror is initially designed for BYTE and SHORT atomic updates. *Because this type of mirror request a logged values scan for each read access, *it relies on read access drivers to be implemented. * *Each time a java method makes more than 1 atomic write(BYTE or SHORT) *the transaction mechanism is advantageous,but it has to be under certain conditions. *Writings must occurs betweens 2 flush points which are *-observable state points,such as communications *-System limitations,such as Util.array_xxx methods or certain other native methods *(Crypto for ex) that rely on validity of java byte/short/arrays. * */ #include<gpos.h> #include<nvi_tran.h> #if_inciude_NEW_VALUE_LOGIN_MIRROR==ON #define SDBG(x) //x/*statistical information display*/ SDBG(static BYTE_SXDATA maxNVLVolatileEntriesCount=0;) SDBG(static WORD_SXDATA doubleAccessEntry=0;) SDBG(static WORD_SXDATA eepCumulAdvantage=0;) /*EEPROM NVL mirror*/ #ifdef_WIN32 #define NVLPersistentMirrorSYS_Persistent.NVL_PersistentMirror #else NVL_MIRROR _SXDATA NVLPersistentMirror, #endif #define NVLPersistentCrc NVLPersistentMirror.crc #define NVLPersistentEntriesCount NVLPersistentMirror.count #define NVLPersistentEntries NVLPersistentMirror.entries /*RAM NVL mirror*/ #define NVLVolatileMirrorSYS_VolatileBuffer.NVL_VolatileMirror #define NVLVolatileCrc NVLVolatileMirror.crc #define NVLVolatileEntriesCount NVLVolatileMirror.count #define NVLVolatileEntries NVLVolatiieMirror.entries /* NVL_ScanEntries parse the volatile Logging mirror and return the entry value, if an entry matches the lnput address. */ E_ADDRESS NVL_ScanEntries(E_ADDRESS addr) { BYTE iEntry; for(iEntry=0;iEntry<NVLVolatileEntriesCount;iEntry++){if(VIRTUAL_ADDRESS(NVLVolatileEntries[iEntry].dest)==addr){ /*an entry matches the address,retum the indirect one*/ switch(NVLVolatileEntries[iEntry].type){ case T_BYTE return(E_ADDRESS)(&amp;NVLVolatileEntries[iEntry].value.bw.low); break; case T_SHORT return(E_ADDRESS)(&amp;NVLVolatileEntries[iEntry].value); break; } /*we should never arrive here*/ SC_ASSERT(FALSE); } } /*no entry matches the address,return the original one*/ return addr;}/* NVL_FlushReset Check validity of the persistent mirror thanks its crc. Flush value entries from the persistent mirror to their destinations. Reset persistent and volatile mirror once operation is over. Noteif a tear occurs during reset,invalidity of crc will help us catch it.*/void NVL_FlushReset(){ BYTE iEntry; WORD wLength; if(NVLPersistentEntriesCount>0){ /*it is possible that a tearing occurs during the persistent buffer update, hence NVLPersistentEntriesCount could be a meaningless value.if it is the case,the entire buffer is reset*/ if(NVLPersistentEntriesCount>MAX_NLV_ENTRIES){ wLength=sizeof(NVL_MIRROR); }else{ //wLength=offsetof(NVL_MIRROR,entries[NVLPersistentEntriesCount]); wLength=sizeof(BYTE)+sizeof(NORD)+(NVLPersistentEntriesCount*sizeof(NVL_ENTRY)); } if(_OS_ComputeCRC16(VIRTUAL_INDEX(&amp;NVLPersistentEntrissCount),(WORD)(wLength-sizeof(WORD)))==NVLPersistentCrc){ for(iEntry=0;iEntry<NVLPersistentEntriesCount;iEntry++){switch(NVLPersistentEntries[iEntry].type){case T_BYTE_OS_WriteMemory((GEN_ADDRESS)&amp;NVLPersistentEntries[iEntry].value.bw.low,NVLPersistentEntries[iEntry].dest,(WORD)sizeof(BYTE)); break;case T_SHORT_OS_WriteMemory((GEN_ADDRESS)&amp;NVLPersistentEntries[iEntry].value,NVLPersistentEntries[iEntry].dest,(WORD)sizeof(WORD));break;}} } /*clear the NVL Volatile buffer(crc+count+n*entries)*/ _OS_ClearRAMBuffer((GEN_ADDRESS)&amp;NVLVolatileMirror,wLength); /*reset the NVL Persistent Buffer(crc+count+n*entries)*/ _OS_WriteMemory((GEN_ADDRESS)&amp;NVLVoiatileMirror,VIRTUAL_INDEX(&amp;NVLPersistentMirror),wLength); }}/*NVL_SaveFlushResetBackup the volatile Logging mirror into its persistent image.Call the FlushReset function once operation is over.*/void NVL_SaveFlushReset(){WORD wLength;SDBG( fprintf(stderr,″flush NVL mirrornumber of entries=%x\n″,NVLVolatileEntriesCount); if(NVLVolatileEntriesCount>maxNVLVolatileEntriesCount)maxNVLVolatileEntrlesCount=NVLVolatlleEntriesCount; fprintf(stderr,″Current Max number of entries=%x\n″,maxNVLVolatileEntriesCount); fprintf(stderr,″number of already present entry NVL access=%x\n″,doubleAccessEntry); if(NVLVolatileEntriesCount>0){ eepCumulAdvantage+=((NVLVolatileEntriesCount*3)-(1/*saving to EEPbuff*/+1/*reseting EEP buff*/+NVLVolatileEntriesCount/*number of flushes*/)); } fprintf(stderr,″number EEPROM writing saved thanks NVL=%x\n″,eepCumulAdvantage); fprintf(stderr,″total number EEPROM writing saved=%x\n″,eepCumulAdvantage+doubleAccessEntry);) if(NVLVolatileEntriesCount>0){ /*working length*/ //wLength=offsetof(NVL_MIRROR,entries[NVLVolatileEntriesCount]); wLength=sizeof(BYTE)+sizeof(WORD)+(NVLVolatileEntrlesCount*sizeof(NVL_ENTRY)); /*compute crc*/ NVLVolatileCrc=_OS_ComputeCRC16(VIRTUAL_INDEX(&amp;NVLVolatileEntriesCount),(WORD)(wLength-sizeof(WORD))); /*backup to the persistent image*/ _OS_WriteMemory((GEN_ADDRESS)&amp;NVLVolatileMirror,VIRTUAL_INDEX(&amp;NVLPersistentiMirror),wLength); /*flush the persistent mirror&amp;reset both persistent and volatile buffers*/ NVL_FlushReset(); }}/*NVL_LogEntry Add an entry in the Logging voiatile mirror,if entry is not already existing. if volatile mirror is getting fullbackup,flush and reset it.*/void NVL_LogEntry(INDEX dest,BYTE type,WORD value){BYTE iEntry;/*check if an entry is already present is the Volatile Buffer*/for(iEntry=0;iEntry<NVLVolatileEntriesCount;iEntry++){ if(NVLVolatileEntries[iEntry].dest==dest){ SDBG(doubleAccessEntry++;) break; }}NVLVolatileEntries[iEntry].dest=dest;NVLVolatileEntries[iEntry].type=type;NVLVolatileEntries[iEntry].value.w=value;if(NVLVolatileEnriesCount==iEntry){NVLVolatileEntriesCount++;/*check if there is enough place for another entry,if not save and flush*/if(NVLVolatileEntriesCount==MAX_NLV_ENTRIES){NVL_SaveFlushReset();}}}/**_VM_WriteByteSecu()**Writes a byte in Eeprom at address specified**/void_VM_WriteByteSecu(INDEX iaddress,BYTE bvalue){ DBG(fprintf(stderr,″Write BYTE through NVL mirror\n″);) if(IS_SETFLAG2(OS_TransactionActive)){ _OS_WriteByteSecu(iaddress,bvalue); }else{ if(IS_EEPROM(iaddress)){ NVL_LogEntry(laddress,T_BYTE,(WORD)bvalue); }else{ VIRTUAL_ADDRESS(iaddress)
=bvalue; } }}/**_VM_WriteWordSecu()**Writes a word in Eeprom at address specifled**/void_VM_WriteWordSecu(INDEX laddress,WORD wvalue}{ DBG(fprintf(stderr,″Write WORD through NVL mirror\n″);) if(IS_SETFLAG2(OS_TransactionActive)){_OS_WriteWordSecu(iaddress,wvalue); }else{ if(IS_EEPROM(iaddress)){ NVL_LogEntry(laddress,T_SHORT,wvalue); }else{ (*(WORD*)(VIRTUAL_ADDRESS(laddress)))=(WORD)wvalue; } }} #endif]]></pre>
權(quán)利要求
1.一種處理計(jì)算機(jī)代碼中的多個(gè)交易的方法,計(jì)算機(jī)代碼由數(shù)據(jù)處理系統(tǒng)執(zhí)行,所述方法包括a)檢查執(zhí)行的計(jì)算機(jī)代碼的可觀測(cè)的狀態(tài)變化(340);b)存儲(chǔ)用于執(zhí)行計(jì)算機(jī)代碼的數(shù)據(jù),它們是計(jì)算機(jī)代碼中多個(gè)交易的一部分(325);和c)響應(yīng)于檢測(cè)到的可觀測(cè)的狀態(tài)變化,確認(rèn)存儲(chǔ)數(shù)據(jù)的一個(gè)部分。
2.如權(quán)利要求1的方法,其中確認(rèn)的存儲(chǔ)數(shù)據(jù)的部分包括一直到并包含將完全執(zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的存儲(chǔ)數(shù)據(jù)(350)。
3.如權(quán)利要求1的方法進(jìn)一步包括d)響應(yīng)于數(shù)據(jù)處理系統(tǒng)中檢測(cè)到的系統(tǒng)限制,確認(rèn)存儲(chǔ)數(shù)據(jù)的一個(gè)部分(345)。
4.如權(quán)利要求3的方法,其中確認(rèn)的存儲(chǔ)數(shù)據(jù)的部分包括一直到并包含將完全執(zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的存儲(chǔ)數(shù)據(jù)(350)。
5.如權(quán)利要求1的方法進(jìn)一步包括d)保持指向存儲(chǔ)數(shù)據(jù)的邏輯起點(diǎn)的指針并保持指向?qū)⑼耆珗?zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的指針(300,335,355)。
6.如權(quán)利要求1的方法,其中所述存儲(chǔ)數(shù)據(jù)被存儲(chǔ)在交易緩沖器中(735)。
7.如權(quán)利要求6的方法,其中交易緩沖器包括隨機(jī)存取存儲(chǔ)器(720)。
8.如權(quán)利要求1的方法,其中利用新值登錄。
9.如權(quán)利要求1的方法,其中利用舊值登錄。
10.如權(quán)利要求1的方法,其中數(shù)據(jù)處理系統(tǒng)包括一個(gè)智能卡(600)。
11.一種數(shù)據(jù)處理系統(tǒng)(500),配置為執(zhí)行在計(jì)算機(jī)代碼中具有多個(gè)交易的計(jì)算機(jī)代碼,所述系統(tǒng)包括存儲(chǔ)器(515);連接到存儲(chǔ)器的處理器(505);和具有邏輯電路使得處理器通過(guò)以下步驟處理多個(gè)交易a)檢查執(zhí)行的計(jì)算機(jī)代碼的可觀測(cè)的狀態(tài)變化(340);b)存儲(chǔ)用于執(zhí)行計(jì)算機(jī)代碼的數(shù)據(jù),它們是計(jì)算機(jī)代碼中多個(gè)交易的一部分(325);和c)響應(yīng)于檢測(cè)到的可觀測(cè)的狀態(tài)變化,確認(rèn)存儲(chǔ)數(shù)據(jù)的一個(gè)部分。
12.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng)還具有邏輯電路,使得確認(rèn)的存儲(chǔ)數(shù)據(jù)的部分包括一直到并包含將完全執(zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的存儲(chǔ)數(shù)據(jù)(350)。
13.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng)還具有邏輯電路,使得處理器通過(guò)以下步驟處理多個(gè)交易d)響應(yīng)于數(shù)據(jù)處理系統(tǒng)中檢測(cè)到的系統(tǒng)限制,確認(rèn)存儲(chǔ)數(shù)據(jù)的一個(gè)部分(345)。
14.如權(quán)利要求13的數(shù)據(jù)處理系統(tǒng)還具有邏輯電路,使得確認(rèn)的存儲(chǔ)數(shù)據(jù)的部分包括一直到并包含將完全執(zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的存儲(chǔ)數(shù)據(jù)(350)。
15.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng)還具有邏輯電路,用于保持指向存儲(chǔ)數(shù)據(jù)的邏輯起點(diǎn)的指針并保持指向?qū)⑼耆珗?zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的指針(300,335,355)。
16.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng)還包括一個(gè)用于存儲(chǔ)數(shù)據(jù)的交易緩沖器(516)。
17.如權(quán)利要求16的數(shù)據(jù)處理系統(tǒng),其中交易緩沖器包括隨機(jī)讀取存儲(chǔ)器(720)。
18.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng)進(jìn)一步具有用于利用新值登錄的邏輯電路。
19.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng)進(jìn)一步具有用于利用舊值登錄的邏輯電路。
20.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng),其中數(shù)據(jù)處理系統(tǒng)包括一個(gè)智能卡(600)。
21.一種計(jì)算機(jī)可讀介質(zhì),明確地具有用于使處理器執(zhí)行一種用于處理由數(shù)據(jù)處理系統(tǒng)執(zhí)行的計(jì)算機(jī)代碼內(nèi)的多個(gè)交易的方法的機(jī)器可讀指令的程序,該方法包括a)檢查執(zhí)行的計(jì)算機(jī)代碼的可觀測(cè)的狀態(tài)變化(340);b)存儲(chǔ)用于執(zhí)行計(jì)算機(jī)代碼的數(shù)據(jù),它們是計(jì)算機(jī)代碼中多個(gè)交易的一部分(325);和c)響應(yīng)于檢測(cè)到的可觀測(cè)的狀態(tài)變化,確認(rèn)存儲(chǔ)數(shù)據(jù)的一個(gè)部分。
22.如權(quán)利要求21的計(jì)算機(jī)可讀介質(zhì),還具有使得確認(rèn)的存儲(chǔ)數(shù)據(jù)的部分包括一直到并包含將完全執(zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的存儲(chǔ)數(shù)據(jù)(350)的指令。
23.如權(quán)利要求21的計(jì)算機(jī)可讀介質(zhì),還具有使得處理器執(zhí)行處理由數(shù)據(jù)處理系統(tǒng)執(zhí)行的計(jì)算機(jī)代碼內(nèi)的多個(gè)交易的方法的指令,該方法包括d)響應(yīng)于數(shù)據(jù)處理系統(tǒng)中檢測(cè)到的系統(tǒng)限制,確認(rèn)存儲(chǔ)數(shù)據(jù)的一個(gè)部分(345)。
24.如權(quán)利要求23的計(jì)算機(jī)可讀介質(zhì),還具有使得確認(rèn)的存儲(chǔ)數(shù)據(jù)的部分包括一直到并包含將完全執(zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的存儲(chǔ)數(shù)據(jù)(350)的指令。
25.如權(quán)利要求21的計(jì)算機(jī)可讀介質(zhì),還具有使得處理器執(zhí)行處理由數(shù)據(jù)處理系統(tǒng)執(zhí)行的計(jì)算機(jī)代碼內(nèi)的多個(gè)交易的方法的指令,該方法包括d)保持指向存儲(chǔ)數(shù)據(jù)的邏輯起點(diǎn)的指針并保持指向?qū)⑼耆珗?zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的指針(300,335,355)。
26.如權(quán)利要求21的計(jì)算機(jī)可讀介質(zhì),還具有使得處理器執(zhí)行處理由數(shù)據(jù)處理系統(tǒng)執(zhí)行的計(jì)算機(jī)代碼內(nèi)的多個(gè)交易的方法的指令,該方法包括d)利用新值登錄。
27.如權(quán)利要求21的計(jì)算機(jī)可讀介質(zhì),還具有使得處理器執(zhí)行處理由數(shù)據(jù)處理系統(tǒng)執(zhí)行的計(jì)算機(jī)代碼內(nèi)的多個(gè)交易的方法的指令,該方法包括d)利用舊值登錄。
全文摘要
一種數(shù)據(jù)處理系統(tǒng)(500),它包括存儲(chǔ)器(515),連接到存儲(chǔ)器的處理器(505)和使得處理器執(zhí)行在計(jì)算機(jī)代碼中有多個(gè)交易的計(jì)算機(jī)代碼的方法的邏輯電路。該方法包括以下步驟,檢查執(zhí)行的計(jì)算機(jī)代碼的可觀測(cè)的狀態(tài)變化(340);存儲(chǔ)用于執(zhí)行的計(jì)算機(jī)代碼的數(shù)據(jù),它們是計(jì)算機(jī)代碼中多個(gè)交易的一部分(325);保持指向存儲(chǔ)數(shù)據(jù)的邏輯起點(diǎn)的指針并保持指向?qū)⑼耆珗?zhí)行的計(jì)算機(jī)代碼中最后交易的存儲(chǔ)數(shù)據(jù)的結(jié)束的指針(300,335,355);和響應(yīng)于檢測(cè)到的可觀測(cè)的狀態(tài)變化,確認(rèn)存儲(chǔ)數(shù)據(jù)的一個(gè)部分(355)。
文檔編號(hào)G06F9/46GK1636187SQ02827750
公開日2005年7月6日 申請(qǐng)日期2002年12月4日 優(yōu)先權(quán)日2001年12月24日
發(fā)明者邁克爾·A·蒙哥馬利, 克希拉布迪·克里什納, 西爾萬(wàn)·普雷沃斯特, 揚(yáng)妮克·伯里安 申請(qǐng)人:施藍(lán)姆伯格技術(shù)管理有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1