CN100432926C - 数据处理系统中处理交易的方法和装置 - Google Patents
数据处理系统中处理交易的方法和装置 Download PDFInfo
- Publication number
- CN100432926C CN100432926C CNB028277503A CN02827750A CN100432926C CN 100432926 C CN100432926 C CN 100432926C CN B028277503 A CNB028277503 A CN B028277503A CN 02827750 A CN02827750 A CN 02827750A CN 100432926 C CN100432926 C CN 100432926C
- Authority
- CN
- China
- Prior art keywords
- data
- transaction
- handling system
- computer code
- storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Hardware Redundancy (AREA)
Abstract
一种数据处理系统(500),它包括存储器(515),连接到存储器的处理器(505)和使得处理器执行在计算机代码中有多个交易的计算机代码的方法的逻辑电路。该方法包括以下步骤,检查执行的计算机代码的可观测的状态变化(340);存储用于执行的计算机代码的数据,它们是计算机代码中多个交易的一部分(325);保持指向存储数据的逻辑起点的指针并保持指向将完全执行的计算机代码中最后交易的存储数据的结束的指针(300,335,355);和响应于检测到的可观测的状态变化,确认存储数据的一个部分(355)。
Description
技术领域
本发明总的来说涉及数据处理系统领域,并尤其涉及一种处理装载到数据处理系统中的交易的改进方法和装置。
背景技术
很多数据处理系统(这里也称为“系统”)需要交易操作来成功地执行功能。交易操作是必须(作为一组)成功完成的一组指令。如果在该组指令成功完成之前发生(计算上的或其他方面的)故障,系统值必须恢复到准备进行交易操作之前的它们所处的状态。通常,交易操作的处理包含三个步骤。首先,交易操作的开头做出标记。如果交易失败,将恢复该点的系统值。第二,执行交易操作中的单独操作。最后,达到交易操作的终点时,终点进行标记,并确认来自交易操作的数据(即,系统状态更新以反映在交易中采取的操作)。
交易操作对诸如智能卡的嵌入系统尤其重要,这时用户能够通过从终端移走智能卡而在任何时刻中断操作。这种情况下,智能卡必须保持可用的状态,从而有必要为了操作最简单而经常以交易为基础操作。
通常,一个基本操作是已经实际上定义为交易的一个特定种类的单个操作。例如,在Java Card运行时间环境下,对持续的对象或类型的领域的单个更新被定义为一个基本操作。如以上提到的,交易能够包括多个操作。通常,支持这种包括多个操作的交易的系统允许明确标记这种交易的起点和终点。这里使用的术语“交易”指可以包括多个操作的交易和基本操作二者。交易的其他信息能够在以下资源中找到:(1)Gray,The Transaction Concept(交易概念):Virtues and Limitations(功能和限制),Very Large Data Base(非常大的数据库),1981年9月9-11在法国嘎纳举行的第7界国际会议;(2)Gray&Reuter,Transaction Processing:Concept and Techniques(交易处理:概念和技术),Morgan kaufmann 1993,ISBN 1-55860-190-2;和(3)Chen,JavaCardTM technology for Smart Cards(智能卡的Java Card技术)Addison-Wesley2000,ISBN 0-291-70329-7;和(4)Hassler,Java Card for E-PaymentApplications(用于电子付费应用的Java卡),Artech House 2002,ISBN1-58053-291-8。
尽管交易被用来确保系统总是保持可用状态,但是交易的处理通常导致高额外开销。根据用于恢复系统为开始失败的交易之前的状态的特定交易登录方法,这种额外开销经常需要比等效的无交易操作多两倍或三倍地写入到永久存储器中。该额外开销在系统中增加,其中数据存储在相当慢的存储器,比如EEPROM或其他种类的永久的,非易失的存储器。这种存储器经常用于嵌入系统,比如智能卡。EEPROM技术的特性造成读取和写入EEPROM需要比对应的读取和写入到随机读取(易失)存储器(RAM)长很多的时间。而且,EEPROM具有可写入次数的限制(通常为几万或几十万次的状态)。因此,实现用于交易的有效执行的装置和方法将是有益的,它将已经成功完成的交易所需要的确认数量最小化。
发明内容
根据本发明一方面,提供一种处理计算机代码中的多个交易的方法,计算机代码由数据处理系统执行,所述方法包括:对一系列交易中的每一个交易进行处理;存储交易处理中指令执行的结果;确定可观测状态的变化是否出现;如果可观测状态的变化已经出现,则确认在非易失性存储器中存储的数据的一个部分。
根据本发明另一方面,提供一种数据处理系统,配置为执行在计算机代码中具有多个交易的计算机代码,所述系统包括:存储器;连接到存储器的处理器。所述处理器包括:使得处理器通过对一系列交易中的每一个交易进行处理来处理多个交易的逻辑装置;存储交易处理中指令执行的结果的存储装置;确定可观测状态的变化是否已经出现的确定装置;如果可观测状态的变化已经出现,则确认在非易失性存储器中存储的数据的一个部分的确认装置。
附图说明
阅读了以下的详细说明并参照附图后,本发明的结构和操作将变得明显,其中:
图1概念性地说明了装载有一系列示例的基本和明确交易的存储器的一部分;
图2用一些附加的细节概念性地说明了图1的交易;
图3是进一步说明本发明的一个方面的流程图;
图4概念性地说明了执行图3的方法后图1的交易;
图5说明了一个示例的数据处理系统;
图6说明一个示例的智能卡;和
图7用一些附加的细节概念性地说明了具有图6的示例智能卡的模块105的集成存储器元件115部分的微处理器。
尽管本发明可容许各种修改和另外的形式,但其特定实施例通过图中的例子表示并将在这里详细说明。然而,应当理解这里呈现的图和详细说明不意图限制本发明为公开的特定实施例。相反,本发明只由权利要求的语言所限制。
具体实施方式
总的来说本发明设想了一个数据处理系统和方法,其中数据处理系统可以配置为接收具有将由数据处理系统执行的交易的计算机代码,并继续检查执行的计算机代码中可观测的状态变化,存储执行作为交易的一部分的计算机代码的数据,并响应检测到可观测的状态变化,确认存储数据的一部分。整个说明书和附图中,相同的元件将给予相同的参考数字。
图1概念性地说明了装有可变长度的交易A105、B110、C115、D120的存储器110的一部分。本领域技术人员将意识到某个运行时间环境允许应用程序明确指定哪些操作被包含在交易中(“明确交易”)。为了这样做,这种系统允许明确交易的起点和终点用某种标志(通常为“开始”和“结束”)进行标记。例如,如果在所有指定操作完成之前的任意点交易失败,则系统值恢复到刚好在失败的明确交易的起始点之前的状态(该恢复在这里称为“回退”)。其他系统通过指定所有特定种类的操作实际上为交易,从而当作基本操作(“隐含交易”)处理,来隐含地标记基本交易的起点和终点。这些基本操作或者成功并且确认可应用系统值,或者在交易失败时发生回退。
用于进行确认和回退功能的传统方法处理交易时可以包括:(i)以不影响原始数据的方式登录新值,直到交易完成(“新值登录”),(ii)登录旧值,并使用该记录起动回退,从而在交易失败的情况下恢复原始状态(“旧值登录”),和(iii)根据进行处理的交易的数据类型和其他特征,合并新值登录和旧值登录。传统的系统也可以包括同时支持明确交易和隐含交易。在这种系统中,通常可以按照需要布置明确交易和隐含交易。交易A105和D120是隐含交易。交易B110和C115是明确交易。图1说明了交易A105、B110、C115和D120的布置。本领域技术人员将意识到存储器100可以具有在交易A105和B110之间布置和在交易B110和C115和随后的交易D120之间布置的无交易指令。
现在转到图2,用一些附加的细节概念性地说明了图1的交易。隐含交易A105的开始点是起始点205。隐含交易A105的终点是终点215。隐含交易A105包含基本操作A210。明确交易B110的开始点是起始点220。明确交易B110的终点是终点230。明确交易B110包含操作B1 225,B2 226和B3 227。明确交易C115的开始点是起点235。明确交易C115的终点是终点245。明确交易C115包含操作C1 240和C2 241。隐含交易D120的开始点是起始点。隐含交易D120的终点是终点260。隐含交易D120包含基本操作D255。
在传统系统中,通常在交易的成功完成基础上确认交易的操作。因此,在传统系统中,将通常在系统分别成功的达到每个可应用的明确和隐含终点215、230、245和260的条件下,确认交易A105,B110,C115和D120的操作。假定成功的完成每个交易A105、B110、C115和D120,传统系统将通常执行四个单独的确认。
总的来说,本发明想要通过将已经成功完成的交易所需确认数量最小化,来优化数据处理系统中的交易处理。在利用诸如EEPROM的永久、非易失存储器的系统中(比如智能卡),本发明可以(作为使确认数量最小化的结果)增加这种永久、非易失存储器的使用寿命。本发明利用执行交易的系统的可观测的状态变化,从而合并两个或更多成功完成的交易并确认合并在一起的交易产生的数据,而不是单独确认每个交易产生的数据。
本领域技术人员将意识到,可观测的状态变化通常包括通过它使外界可获得系统状态的任何手段,这样,接入系统的服务的那些能够适当地了解状态。特别是,这可以包括外部通信、人机接口、写入到外部介质、写入到共享盘或存储器、或任意通过它系统遵照外界以能够由系统的客户检测的方式执行处理的装置。然而,可观测的状态通常不包括能够由插入的或额外的装置获得的状态信息,比如电源分析,存储器跟踪,硬件逻辑分析等。通常,可观测的状态可以从正在从系统请求交易服务的系统客户的观点来确定。从客户的观点来看,系统的可观测的状态可以定义为通常只包括客户察觉的系统的外部明显状态部分。
在本发明的一个实施例中,系统的可观测的状态变化可以用于合并交易并确认合并在一起的交易的可应用数据,因为客户将不依靠这种数据,直到可观测的状态变化发生为止。即,客户通常对于执行交易的系统前进没有预期,直到客户观察到系统的那一部分的一些状态变化为止。这时,可观测的状态变化通常暗示已经执行了某个交易,并且客户现在可以对可观测的状态变化之前完成的交易数据已经确认有预期。通常,在交易没有成功完成并且还没有发生可观测的状态变化时,客户可能对于失败前执行一系列交易中的多少交易没有预期。实际上,客户可能不理智地甚至对成功的系列中的单个交易抱有预期。
作为前述的例子,假定一个客户向系统发送一个命令,它将引起十个交易操作,并且在最终交易完成时结果将被发送回客户。进一步假想直到结果发送为止,客户能够感觉到系统的可观测的状态没有变化。这时,如果十个交易中有一个失败,客户就不能知道在失败的交易之前系统进行了多少处理,因为系统的可观测的状态没有变化。客户可能不理智地希望系统该部分的处理。因此,在本发明的一个实施例中,确认功能可以延迟直到所有十个交易操作已经成功执行为止。执行图2所述的交易的系统的可观测的状态变化在265、270和275(分别在交易A105开始之前,在紧接着交易A105完成后,和在紧接着交易D120完成之后)中描述。
图3描述了说明本发明的一种方法300的实施例的流程图。为了可观测的状态的变化,实施例一般涉及检查被执行的计算机代码、存储被执行的计算机代码的数据,它是计算机代码中多个交易的一部分;并响应检测到的可观测的状态变化,确认存储数据的一部分。在所述实施例中,交易缓冲器开始的指针(“BOTB指针”)和最后的缓冲交易指针(“LBT指针”)都设为交易缓冲器的开始,数据将保存在该缓冲器中305。确定指令是否是可获得的310。如果指令可获得,执行指令315,否则该方法完成。
如果指令不可获得,接着作出指令是否是交易的部分的进一步的确定320。本领域技术人员将意识到对于确定检查的指令是否是交易的部分存在很多替换方式,包括利用可获得的标志,该标志在已经遇到明确交易或隐含交易的开始点时被设置并当遇到明确交易或隐含交易的终点时清除。如果指令是交易的部分,该执行产生的可用数据存储在交易缓冲器中325并确定是否遇到交易的终止330。遇到交易结束时,与刚刚完成的交易相对应的数据的结束处作出标记。在所述实施例中,LBT指针设为与最后输入到用于刚刚检查的可用交易的交易缓冲器中的数据相对应335。
接着,确定可观测的状态中是否已经出现变化340。如果已经出现可观测的状态变化,确认存储在交易缓冲器中并与从最后的确认开始已经成功完成的那些交易相对应的数据。在所述实施例中,这通过确认对应于BOTB指针并通过对应于LBT指针的数据继续的数据而实现350。交易缓冲器的起始和结束指针接着进行相应调整,并且对于下一个指令再次执行该方法。在所述实施例中,通过设置BOTB指针为等于LBT指针来调整指针335。
即使可能没有发生可观测的状态变化,也可能存在发生需要交易缓冲器中的可用数据被确认的系统限制345。需要确认完成的系统限制的例子可能通常依赖于特定系统并可能包括交易缓冲器大小的限制,从而缓冲器中存储空间必须按顺序释放以连续处理,并可以包括在交易缓冲器中读取先前存储的数据的需要。如果产生系统限制,交易缓冲器中的可用数据被确认并且接着按照上述分别在发生可观测的状态变化350和355时那样调整交易缓冲器的开始和结束指针,并且再次对下一个可获得的指令执行该方法。本领域技术人员将意识到在已经达到交易缓冲器容量的那些情况下,确认存储的数据时必须注意不要分离的存储的交易中之一的数据,而要只确认正在处理的交易之前刚成功完成的最后的交易的数据。在本发明的一个实施例中,以上内容通过保持BOTB指针和LBT指针实现。
本领域技术人员还将意识到方法300可以用执行确认和回退功能的新值登录或旧值登录方法中的任一种(或它们的组合)来实现。
图4概念性地说明了执行方法300后图1的交易。执行交易的系统的可观测的状态变化保持在上述的265,270和275。如图4所示,交易A105开始之前保持可观测的状态变化265,并交易A105完成后立即保持可观测的状态变化270,交易D120完成后立即保持可观测的状态变化275。但是由于在明确交易B110,明确交易C115和隐含交易D120之间没有发生可观测的状态的变化,明确交易B110、明确交易C115和隐含交易D120和它们的各个操作B1 225、B2 226、B3 227、C1 240、C2 241和D255已经合并到概念上的交易B、C和D405中。这样,概念上的交易B、C和D405的开始点是起始点410(与起始点220相同),并且概念上的交易B、C和D405的终点是终点415(与终点260相同)。因而,代替明确交易B110、明确交易C115和隐含交易D120成功完成时完成的三个确认,在概念上的交易B、C和D405成功完成时只使用一个确认。这种情况下,由于有与将执行的确认数量每次降低相关的节省,交易开销大大降低。
图5说明了一个示例的数据处理系统500。数据处理系统500可以包括一个或多个处理器P1 505到Pn 510,它们通过系统总线530连接并接入到系统存储器515。处理器P1 505到Pn 510可以用各种通用处理器执行,包括例如IBM公司的处理器系列和诸如Intel公司的处理器的系列的x86型处理器。系统存储器515通常用诸如动态RAM(DRAM)元件的阵列的易失存储元件实现。系统存储器515也可以配置为包括只读存储器(ROM)和非易失读/写存储器。在本发明的一个实施例中,系统存储器515配置为包括交易缓冲器516。
总线桥接器540提供一个系统总线530和外围总线545之间的接口。外围总线545通常按照一种工业标准的外围总线协议或规范实现,比如来自PCI指定兴趣组(www.pcisig.org)的PCI现场总线规范Rev2.2中指定的周边元件扩展接口(PCI)协议。数据处理系统500可以包括连接到外围总线545的一个或多个外围设备550和555。这些外围设备能够包括例如,硬盘控制器、高速网络接口卡、图形适配器、和到目前为止基于微处理器的数据处理系统设计领域技术人员熟悉的那些设备。
图6示出了数据处理系统的一个例子,一个示例的智能卡。智能卡是塑料的、信用卡形的卡,它包括嵌入到卡的塑料本体中的电子器件(芯片)。不只使用磁条来存储信息,智能卡还使用嵌入到芯片中的微处理器和存储器元件。与智能卡的通信通常通过卡接受设备(“CAD”)进行,用户将智能卡插入到该卡接收设备中。除了与智能卡的通信,CAD通常给智能卡提供电源。由于智能卡有一个芯片,它们能够编程以许多变化的性能来工作,比如储值卡、信用卡、借记卡、ATM卡、电话卡、个人身份识别卡、重大的记录存储设备等。在这些变化的性能中,一个智能卡可以设计为使用许多不同的应用程序。智能卡遵从国际标准化组织(ISO)的标准7816部分1-10,它在这里引用作为参考并通常称为“ISO 7816”。
智能卡600包括通过导电触点610连接到具有集成存储器元件615的微处理器的一个模块605。导电触点610与CAD连接,通常提供操作电源和允许CAD和智能卡之间的数据传输。智能卡的其他实施例可以不包括导电触点610,这种“无接触”智能卡可以交换信息并可以通过诸如磁耦合的靠近耦合或诸如无线通信的远程耦合接收电源。智能卡600符合ISO 7816。
图7中更详细地示出了具有图6的集成存储器元件615的微处理器。微处理器615包括中央处理单元(CPU)705。微处理器615与存储器元件715相关联。“存储器”可以与微处理615形成在同一个集成电路上,也可以形成在单独的设备上。通常,存储器元件715可以配置为包括随机存取存储器(RAM)720、只读存储器(ROM)725和非易失读/写存储器730。只读存储器725可以配置为包括用于装入应用程序到存储器元件715中的安装程序模块710。在另一种配置中,RAM 720、ROM725和非易失读/写存储器730不在同一个存储器元件715中,而是在一些分离的电子单元组合中。在本发明的一个实施例中,RAM 720配置为包括交易缓冲器735。
用智能卡,存在执行应用程序期间的任何时间上发生故障的风险。尽管计算错误能够发生失败,更可能的原因是智能卡从CAD中过早取出。由于电源通过CAD提供给智能卡,从CAD中取出智能卡将终止任何取出时刻执行的CAD文件的执行。这种智能卡的过早取出在下文中称为“拔出”或“卡拔出”。为了使智能卡保持数据操作的完整性并对针卡拔出进行保护,用于智能卡的典型运行时间环境支持交易的执行。
用于本发明的另一个实施例的源代码包含在本说明书的附录A中,它采用在使用Java Card运行时间环境中的智能卡内执行的新值登录。如上文所介绍的,术语“智能卡”参照图6所示的设备说明。但是,安全接口模块(SIM)和安全接入模块(SAM)是典型智能卡的小型版本并通常用在电话或其他小空间中。用在这里的术语“智能卡”不意图由尺寸、形状、性质和封装或安装微处理器和存储器元件的材料成分进行限制。因此,全文中使用的术语“智能卡”宽泛地认为包含任意本身具有能处理数据的微处理器和存储器元件的组合。
应当意识到本发明的部分可以用存储在或包含在计算机可读介质中的一组计算机可执行指令(软件)实现。计算机可读介质可以包括非易失介质,比如软盘、硬盘、闪存卡、ROM、CD ROM、DVD、磁带或其他可用介质。而且,本领域技术人员将意识到这里描述和要求保护的发明有很多替换的实现方式。例如,描述的实施例使用指针,例如BOTB和LBT指针。这些指针可以用由很多程序语言和操作系统提供的指针数据类型实现。或者,它们可以用与给定位置的偏移实现。例如,在后面的替换中,基础位置可以设在可用交易的开始。指针接着用与基础位置的一个偏移来实现。从而,这里的词语“指针”意味着一个数据单元,它提供在程序或数据结构中指定的一个位置的方法、函数和结果的,以便能够接入到在那个位置上的一个内容,在那里允许进行涉及该内容的检测、比较或其他操作。
从本公开文件中获益的本领域技术人员将明白从本发明提出的一种用于有效进行交易处理的数据处理系统和方法中得到启示,它能够减少成功完成交易所需确认的数量。应当理解在详细说明和附图中示出和说明的本发明的形式仅仅是提出的优选实施例,而本发明只由权利要求的语言进行限制。
附录A
下面是使用新值登录(NVL)的基于可观测状态实现交易的最优化的C语言代码(也可以使用旧值登录或其他的交易机制来实现该最优化。)
/*
*nvl_tran.c
*transaction logging mechanism
*This transaction mirror is inltlally 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>
#inciude<nvl_tran.h>
#if_include_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 NVLPersistentMirror SYS_Persistent.NVL_PersistentMirror
#else
NVL_MIRROR_SXDATA NVLPersistentMirror;
#endif
#define NVLPersistentCrc NVLPersistentMirror.crc
#define NVLPersistentEntriesCount NVLPersistentMirror.count
#define NVLPersistentEntries NVLPersistentMirror.entries
/*RAM NVLmirror*/
#define NVLVolatileMirror SYS_VolatileBuffer.NVL_VolatileMirror
#define NVLVolatileCrc NVLVolatileMirror.crc
#define NVLVolatileEntriesCount NVLVolatileMirror.count
#define NVLVolatileEntries NVLVolatileMirror.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,return the indirect one*/
switch(NVLVolatileEntries[iEntry].type){
case T_BYTE:
return
(E_ADDRESS)(&NVLVolatileEntries[iEntry].value.bw.low);
break;
case T_SHORT:
return
(E_ADDRESS)(&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.
Note:if 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(WORD)+(NVLPersistentEntriesCount*
sizeof(NVL_ENTRY));
}
if
(_OS_ComputeCRC16(VIRTUAL_INDEX(&NVLPersistentEntriesCount),(NORD)(wLength-
sizeof(WORD)))==NVLPersistentCrc){
for(iEntry=0;iEntry<NVLPersistentEntriesCount;iEntry++){
switch(NVLPersistentEntries[iEntry].type){
case T_BYTE:
_OS_WriteMemory((GEN_ADDRESS)&NVLPersistentEntries[iEntry].value.bw.low,
NVLPersistentEntries[iEntry].dest,(NORD)sizeof(BYTE));
break;
case T_SHORT:
_OS_WriteMemory((GEN_ADDRESS)&NVLPersistentEntries[iEntry].value,
NVLPersistentEntries[iEntry].dest,(WORD)sizeof(NORD));
break;
}
}
}
/*clear the NVL Volatile buffer(crc+count+n*entries)*/
_OS_ClearRAMBuffer((GEN_ADDRESS)&NVLVolatileMirror,wLength);
/*reset the NVL Persistent Buffer(crc+count+n*entries)*/
_OS_WriteMemory((GEN_ADDRESS)&NVLVolatileMirror,
VIRTUAL_INDEX(&NVLPersistentMirror),wLength);
}
}
/*
NVL_SaveFlushReset
Backup 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 mirror:number of entries=%x\n″,NVLVolatileEntriesCount);
if(NVLVolatileEntriesCount>maxNVLVolatileEntriesCount)
maxNVLVolatileEntriesCount=NVLVolatileEntriesCount;
fprintf(stderr,″Current Max number of entries=%x\n″,maxNVLVolatileEntriesCount);
fprintf(stderr,″number of already present entry NVL access=
%x\n″,doubleAccessEntry);
if(NVLVolatieEntriesCount>0){
eepCumulAdvantage+=((NVLVolatileEntriesCount*3)-(1/*saving to EEP
buff*/+1/*reseting EEP buff*/+NVLVolatileEntriesCount/*number of flushes*/));
}
fprintf(stderr,″numberEEPROM 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)+(NVLVolatileEntriesCount*
sizeof(NVL_ENTRY));
/*compute crc*/
NVLVolatileCrc=
_OS_ComputeCRC16(VIRTUAL_INDEX(&NVLVolatileEntriesCount),(WORD)(wLength-
sizeof(WORD)));
/*backup to the persistent image*/
_OS_WriteMemory((GEN_ADDRESS)&NVLVolatileMirror,VIRTUAL_INDEX(&NVLPersistentMi
rror),wLength);
/*flush the persistent mirror & reset both persistent and volatile buffers*/
NVL_FlushReset();
}
}
/*
NVL_LogEntry
Add an entry in the Logging volatile mlrror,if entrt is not already existing.
If volatile mirror is getting full:backup,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(NVLVolatileEntriesCount==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)[0]=bvalue;
}
}
}
/*
*_VM_WriteWordSecu()
*Writes a word in Eeprom at address specified
*/
void_VM_WriteWordSecu(INDEX iaddress,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(iaddress,T_SHORT,wvalue);
}else{
(*(WORD*)(VIRTUAL_ADDRESS(iaddress)))=(WORD)wvalue;
}
}
}
#endif
Claims (24)
1、一种处理计算机代码中的多个交易的方法,计算机代码由数据处理系统执行,所述方法包括:
对一系列交易中的每一个交易进行处理;
存储交易处理中指令执行的结果;
确定可观测状态的变化是否出现;
如果可观测状态的变化已经出现,则确认在非易失性存储器中存储的数据的一个部分。
2、如权利要求1的方法,其中确认的存储数据的部分包括一直到并包含将完全执行的计算机代码中最后交易的存储数据的结束的存储数据(350)。
3、如权利要求1的方法进一步包括:
响应于数据处理系统中检测到的系统限制,确认存储数据的一个部分(345)。
4、如权利要求3的方法,其中确认的存储数据的部分包括一直到并包含将完全执行的计算机代码中最后交易的存储数据的结束的存储数据(350)。
5、如权利要求1的方法进一步包括:
保持指向存储数据的逻辑起点的指针并保持指向将完全执行的计算机代码中最后交易的存储数据的结束的指针(300,335,355)。
6、如权利要求1的方法,其中所述存储数据被存储在交易缓冲器中(735)。
7、如权利要求6的方法,其中交易缓冲器包括随机存取存储器(720)。
8、如权利要求1的方法,其中利用新值登录。
9、如权利要求1的方法,其中利用旧值登录。
10、如权利要求1的方法,其中数据处理系统包括一个智能卡(600)。
11.如权利要求1的方法,其中所述确认在非易失性存储器中存储的数据的一个部分的步骤确认一个或多个完全处理的交易。
12.如权利要求1的方法,其中如果出现系统限制,确认在非易失性存储器中存储的数据的一个部分。
13、一种数据处理系统(500),配置为执行在计算机代码中具有多个交易的计算机代码,所述系统包括:
存储器;
连接到存储器的处理器;并且所述处理器包括:
使得处理器通过对一系列交易中的每一个交易进行处理来处理多个交易的逻辑装置;
存储交易处理中指令执行的结果的存储装置;
确定可观测状态的变化是否已经出现的确定装置;
如果可观测状态的变化已经出现,则确认在非易失性存储器中存储的数据的一个部分的确认装置。
14、如权利要求13的数据处理系统还具有使得确认的存储数据的部分包括一直到并包含将完全执行的计算机代码中最后交易的存储数据的结束的存储数据(350)的逻辑装置。
15、如权利要求13的数据处理系统还具有使得处理器通过以下步骤处理多个交易:响应于数据处理系统中检测到的系统限制,确认存储数据的一个部分(345)的逻辑装置。
16、如权利要求15的数据处理系统还具有使得确认的存储数据的部分包括一直到并包含将完全执行的计算机代码中最后交易的存储数据的结束的存储数据(350)的逻辑装置。
17、如权利要求13的数据处理系统还具有用于保持指向存储数据的逻辑起点的指针并保持指向将完全执行的计算机代码中最后交易的存储数据的结束的指针(300,335,355)的逻辑装置。
18、如权利要求13的数据处理系统还包括一个用于存储数据的交易缓冲器(516)。
19、如权利要求18的数据处理系统,其中交易缓冲器包括随机读取存储器(720)。
20、如权利要求13的数据处理系统进一步具有用于利用新值登录的逻辑装置。
21、如权利要求13的数据处理系统进一步具有用于利用旧值登录的逻辑装置。
22、如权利要求13的数据处理系统,其中数据处理系统包括一个智能卡(600)。
23.如权利要求13的数据处理系统,其中所述确认在非易失性存储器中存储的数据的一个部分的步骤确认一个或多个完全处理的交易。
24.如权利要求13的数据处理系统,其中如果出现系统限制,确认在非易失性存储器中存储的数据的一个部分。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/035,905 US7168612B2 (en) | 2001-12-24 | 2001-12-24 | Method and apparatus for processing transactions in a data processing system |
US10/035,905 | 2001-12-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1636187A CN1636187A (zh) | 2005-07-06 |
CN100432926C true CN100432926C (zh) | 2008-11-12 |
Family
ID=21885477
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB028277503A Expired - Fee Related CN100432926C (zh) | 2001-12-24 | 2002-12-04 | 数据处理系统中处理交易的方法和装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US7168612B2 (zh) |
EP (1) | EP1573517B1 (zh) |
CN (1) | CN100432926C (zh) |
AT (1) | ATE424003T1 (zh) |
AU (1) | AU2002346666A1 (zh) |
DE (1) | DE60231344D1 (zh) |
WO (1) | WO2003058438A2 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2864650B1 (fr) * | 2003-12-24 | 2006-03-24 | Trusted Logic | Procede de mise a jour d'applications pour carte a puce |
US8181158B2 (en) * | 2006-06-09 | 2012-05-15 | Oracle America, Inc. | Viewing and modifying transactional variables |
US7797329B2 (en) * | 2006-06-09 | 2010-09-14 | Oracle America Inc. | Method and system for enabling a synchronization-free and parallel commit phase |
KR100858066B1 (ko) | 2007-02-28 | 2008-09-10 | 주식회사 하이스마텍 | 자바 카드에서의 트랜잭션 분할 처리 장치 및 그 방법 |
DE102008051575A1 (de) | 2008-10-14 | 2010-04-15 | Giesecke & Devrient Gmbh | Verfahren und Vorrichtung zur Verwaltung eines Datenspeichers |
US9189214B2 (en) * | 2013-10-30 | 2015-11-17 | International Business Machines Corporation | Code stack management |
US10474493B2 (en) | 2014-02-28 | 2019-11-12 | Red Hat, Inc. | Systems and methods for semi-durable transaction log storage in two-phase commit protocol transaction processing |
US9442837B2 (en) * | 2015-02-17 | 2016-09-13 | International Business Machines Corporation | Accelerating multiversion concurrency control using hardware transactional memory |
CN104657281B (zh) * | 2015-03-17 | 2017-10-27 | 东港股份有限公司 | 一种Java卡包数据管理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5999728A (en) * | 1996-07-30 | 1999-12-07 | Sun Microsystems, Inc. | Method and apparatus for enhancing the portability of an object oriented interface among multiple platforms |
CN1298502A (zh) * | 1998-02-26 | 2001-06-06 | 太阳微系统公司 | 远程进程的的挂起和继续的方法和设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6856627B2 (en) * | 1999-01-15 | 2005-02-15 | Cisco Technology, Inc. | Method for routing information over a network |
US6421755B1 (en) * | 1999-05-26 | 2002-07-16 | Dell Usa, L.P. | System resource assignment for a hot inserted device |
US6883125B2 (en) * | 2002-01-24 | 2005-04-19 | International Business Machines Corporation | Logging insertion/removal of server blades in a data processing system |
-
2001
- 2001-12-24 US US10/035,905 patent/US7168612B2/en not_active Expired - Fee Related
-
2002
- 2002-12-04 AU AU2002346666A patent/AU2002346666A1/en not_active Abandoned
- 2002-12-04 EP EP02784737A patent/EP1573517B1/en not_active Expired - Lifetime
- 2002-12-04 WO PCT/US2002/038835 patent/WO2003058438A2/en not_active Application Discontinuation
- 2002-12-04 DE DE60231344T patent/DE60231344D1/de not_active Expired - Lifetime
- 2002-12-04 AT AT02784737T patent/ATE424003T1/de not_active IP Right Cessation
- 2002-12-04 CN CNB028277503A patent/CN100432926C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5999728A (en) * | 1996-07-30 | 1999-12-07 | Sun Microsystems, Inc. | Method and apparatus for enhancing the portability of an object oriented interface among multiple platforms |
CN1298502A (zh) * | 1998-02-26 | 2001-06-06 | 太阳微系统公司 | 远程进程的的挂起和继续的方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
EP1573517B1 (en) | 2009-02-25 |
CN1636187A (zh) | 2005-07-06 |
AU2002346666A1 (en) | 2003-07-24 |
DE60231344D1 (de) | 2009-04-09 |
ATE424003T1 (de) | 2009-03-15 |
WO2003058438A3 (en) | 2005-08-11 |
EP1573517A2 (en) | 2005-09-14 |
US7168612B2 (en) | 2007-01-30 |
EP1573517A3 (en) | 2005-09-28 |
AU2002346666A8 (en) | 2003-07-24 |
US20030120770A1 (en) | 2003-06-26 |
WO2003058438A2 (en) | 2003-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100343377B1 (ko) | 비-휘발성메모리에의데이타기입 | |
CN101369246B (zh) | 使用存储器映射函数来映射存储器缺陷的系统和方法 | |
CN101894009B (zh) | 乱序执行的微处理器以及相关执行指令的方法 | |
US20100070707A1 (en) | Portable electronic device and data processing method in portable electronic device | |
FI120220B (fi) | Menetelmä ja järjestely transaktioiden käsittelemiseksi flash-tyyppisessä muistivälineessä | |
WO1998030958A1 (en) | Secure multiple application ic card system | |
CN100432926C (zh) | 数据处理系统中处理交易的方法和装置 | |
CN101233495A (zh) | 用于在具有快闪程序存储器的微控制器中提供程序断点的机制 | |
CN100397344C (zh) | 切换在系统复位异常时锁定页表项的锁定位组合的方法 | |
CN110335154B (zh) | 一种基于存管系统的账务处理方法、设备以及系统 | |
US20020188852A1 (en) | Illegal access monitoring device, IC card, and illegal access monitoring method | |
US6779732B2 (en) | Method and apparatus for linking converted applet files | |
US7025261B2 (en) | Method and system for managing data designed to be stored in a programmable smart card | |
CN107402717B (zh) | 闪速存储器存储管理 | |
EP1510924B1 (en) | Apparatus and method for handling transactions with writes and reads to EEPROM or Flash memories | |
EP2102748B1 (en) | System and method for recovery of memory transactions | |
US6811089B2 (en) | Portable electronic medium issuing system and issuing method and portable electronic medium | |
US20110252222A1 (en) | Event counter in a system adapted to the javacard language | |
JP5754287B2 (ja) | Icチップ、icチップにおける処理方法、uim、携帯端末、及びicチップ用処理プログラム | |
US20030089786A1 (en) | Secure real time writing for volatile storage | |
CN101944191A (zh) | 非接触式逻辑加密卡的防拔处理方法 | |
JP2009009602A (ja) | Icカード及びicカードプログラム | |
CN102592154B (zh) | 智能卡数据处理方法、装置和智能卡 | |
US5903763A (en) | Method of recovering exclusive control instruction and multi-processor system using the same | |
CN107402887B (zh) | 闪速存储器中的计数器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20081112 Termination date: 20141204 |
|
EXPY | Termination of patent right or utility model |