著录项信息
专利名称 | 数据处理系统中处理交易的方法和装置 |
申请号 | CN02827750.3 | 申请日期 | 2002-12-04 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2005-07-06 | 公开/公告号 | CN1636187 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/40 | IPC分类号 | G;0;6;F;9;/;4;0查看分类表>
|
申请人 | 施蓝姆伯格技术管理有限公司 | 申请人地址 | 英属维尔京群岛托尔托拉
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 施蓝姆伯格技术管理有限公司 | 当前权利人 | 施蓝姆伯格技术管理有限公司 |
发明人 | 迈克尔·A·蒙哥马利;克希拉布迪·克里什纳;西尔万·普雷沃斯特;扬妮克·伯里安 |
代理机构 | 北京市柳沈律师事务所 | 代理人 | 黄小临;王志森 |
摘要
一种数据处理系统(500),它包括存储器(515),连接到存储器的处理器(505)和使得处理器执行在计算机代码中有多个交易的计算机代码的方法的逻辑电路。该方法包括以下步骤,检查执行的计算机代码的可观测的状态变化(340);存储用于执行的计算机代码的数据,它们是计算机代码中多个交易的一部分(325);保持指向存储数据的逻辑起点的指针并保持指向将完全执行的计算机代码中最后交易的存储数据的结束的指针(300,335,355);和响应于检测到的可观测的状态变化,确认存储数据的一个部分(355)。
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的数据处理系统,其中如果出现系统限制,确认在非 易失性存储器中存储的数据的一个部分。
技术领域\n本发明总的来说涉及数据处理系统领域,并尤其涉及一种处理装载到数 据处理系统中的交易的改进方法和装置。\n背景技术\n很多数据处理系统(这里也称为“系统”)需要交易操作来成功地执行功 能。交易操作是必须(作为一组)成功完成的一组指令。如果在该组指令成 功完成之前发生(计算上的或其他方面的)故障,系统值必须恢复到准备进 行交易操作之前的它们所处的状态。通常,交易操作的处理包含三个步骤。 首先,交易操作的开头做出标记。如果交易失败,将恢复该点的系统值。第 二,执行交易操作中的单独操作。最后,达到交易操作的终点时,终点进行 标记,并确认来自交易操作的数据(即,系统状态更新以反映在交易中采取 的操作)。\n交易操作对诸如智能卡的嵌入系统尤其重要,这时用户能够通过从终端 移走智能卡而在任何时刻中断操作。这种情况下,智能卡必须保持可用的状 态,从而有必要为了操作最简单而经常以交易为基础操作。\n通常,一个基本操作是已经实际上定义为交易的一个特定种类的单个操 作。例如,在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,Java CardTM technology for Smart Cards(智能卡的Java Card技术)Addison-Wesley 2000,ISBN 0-291-70329-7;和(4)Hassler,Java Card for E-Payment Applications(用于电子付费应用的Java卡),Artech House 2002,ISBN 1-58053-291-8。\n尽管交易被用来确保系统总是保持可用状态,但是交易的处理通常导致 高额外开销。根据用于恢复系统为开始失败的交易之前的状态的特定交易登 录方法,这种额外开销经常需要比等效的无交易操作多两倍或三倍地写入到 永久存储器中。该额外开销在系统中增加,其中数据存储在相当慢的存储器, 比如EEPROM或其他种类的永久的,非易失的存储器。这种存储器经常用于 嵌入系统,比如智能卡。EEPROM技术的特性造成读取和写入EEPROM需 要比对应的读取和写入到随机读取(易失)存储器(RAM)长很多的时间。 而且,EEPROM具有可写入次数的限制(通常为几万或几十万次的状态)。 因此,实现用于交易的有效执行的装置和方法将是有益的,它将已经成功完 成的交易所需要的确认数量最小化。\n发明内容\n根据本发明一方面,提供一种处理计算机代码中的多个交易的方法,计 算机代码由数据处理系统执行,所述方法包括:对一系列交易中的每一个交 易进行处理;存储交易处理中指令执行的结果;确定可观测状态的变化是否 出现;如果可观测状态的变化已经出现,则确认在非易失性存储器中存储的 数据的一个部分。\n根据本发明另一方面,提供一种数据处理系统,配置为执行在计算机代 码中具有多个交易的计算机代码,所述系统包括:存储器;连接到存储器的 处理器。所述处理器包括:使得处理器通过对一系列交易中的每一个交易进 行处理来处理多个交易的逻辑装置;存储交易处理中指令执行的结果的存储 装置;确定可观测状态的变化是否已经出现的确定装置;如果可观测状态的 变化已经出现,则确认在非易失性存储器中存储的数据的一个部分的确认装 置。\n附图说明\n阅读了以下的详细说明并参照附图后,本发明的结构和操作将变得明显, 其中:\n图1概念性地说明了装载有一系列示例的基本和明确交易的存储器的一 部分;\n图2用一些附加的细节概念性地说明了图1的交易;\n图3是进一步说明本发明的一个方面的流程图;\n图4概念性地说明了执行图3的方法后图1的交易;\n图5说明了一个示例的数据处理系统;\n图6说明一个示例的智能卡;和\n图7用一些附加的细节概念性地说明了具有图6的示例智能卡的模块 105的集成存储器元件115部分的微处理器。\n尽管本发明可容许各种修改和另外的形式,但其特定实施例通过图中的 例子表示并将在这里详细说明。然而,应当理解这里呈现的图和详细说明不 意图限制本发明为公开的特定实施例。相反,本发明只由权利要求的语言所 限制。\n具体实施方式\n总的来说本发明设想了一个数据处理系统和方法,其中数据处理系统可 以配置为接收具有将由数据处理系统执行的交易的计算机代码,并继续检查 执行的计算机代码中可观测的状态变化,存储执行作为交易的一部分的计算 机代码的数据,并响应检测到可观测的状态变化,确认存储数据的一部分。 整个说明书和附图中,相同的元件将给予相同的参考数字。\n图1概念性地说明了装有可变长度的交易A105、B110、C115、D120 的存储器110的一部分。本领域技术人员将意识到某个运行时间环境允许应 用程序明确指定哪些操作被包含在交易中(“明确交易”)。为了这样做,这种 系统允许明确交易的起点和终点用某种标志(通常为“开始”和“结束”)进 行标记。例如,如果在所有指定操作完成之前的任意点交易失败,则系统值 恢复到刚好在失败的明确交易的起始点之前的状态(该恢复在这里称为“回 退”)。其他系统通过指定所有特定种类的操作实际上为交易,从而当作基本 操作(“隐含交易”)处理,来隐含地标记基本交易的起点和终点。这些基本 操作或者成功并且确认可应用系统值,或者在交易失败时发生回退。\n用于进行确认和回退功能的传统方法处理交易时可以包括:(i)以不影 响原始数据的方式登录新值,直到交易完成(“新值登录”),(ii)登录旧值, 并使用该记录起动回退,从而在交易失败的情况下恢复原始状态(“旧值登 录”),和(iii)根据进行处理的交易的数据类型和其他特征,合并新值登录 和旧值登录。传统的系统也可以包括同时支持明确交易和隐含交易。在这种 系统中,通常可以按照需要布置明确交易和隐含交易。交易A105和D120 是隐含交易。交易B110和C115是明确交易。图1说明了交易A105、B110、 C115和D120的布置。本领域技术人员将意识到存储器100可以具有在交易 A105和B110之间布置和在交易B110和C115和随后的交易D120之间布 置的无交易指令。\n现在转到图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。\n在传统系统中,通常在交易的成功完成基础上确认交易的操作。因此, 在传统系统中,将通常在系统分别成功的达到每个可应用的明确和隐含终点 215、230、245和260的条件下,确认交易A105,B110,C115和D120的 操作。假定成功的完成每个交易A105、B110、C115和D120,传统系统将 通常执行四个单独的确认。\n总的来说,本发明想要通过将已经成功完成的交易所需确认数量最小化, 来优化数据处理系统中的交易处理。在利用诸如EEPROM的永久、非易失存 储器的系统中(比如智能卡),本发明可以(作为使确认数量最小化的结果) 增加这种永久、非易失存储器的使用寿命。本发明利用执行交易的系统的可 观测的状态变化,从而合并两个或更多成功完成的交易并确认合并在一起的 交易产生的数据,而不是单独确认每个交易产生的数据。\n本领域技术人员将意识到,可观测的状态变化通常包括通过它使外界可 获得系统状态的任何手段,这样,接入系统的服务的那些能够适当地了解状 态。特别是,这可以包括外部通信、人机接口、写入到外部介质、写入到共 享盘或存储器、或任意通过它系统遵照外界以能够由系统的客户检测的方式 执行处理的装置。然而,可观测的状态通常不包括能够由插入的或额外的装 置获得的状态信息,比如电源分析,存储器跟踪,硬件逻辑分析等。通常, 可观测的状态可以从正在从系统请求交易服务的系统客户的观点来确定。从 客户的观点来看,系统的可观测的状态可以定义为通常只包括客户察觉的系 统的外部明显状态部分。\n在本发明的一个实施例中,系统的可观测的状态变化可以用于合并交易 并确认合并在一起的交易的可应用数据,因为客户将不依靠这种数据,直到 可观测的状态变化发生为止。即,客户通常对于执行交易的系统前进没有预 期,直到客户观察到系统的那一部分的一些状态变化为止。这时,可观测的 状态变化通常暗示已经执行了某个交易,并且客户现在可以对可观测的状态 变化之前完成的交易数据已经确认有预期。通常,在交易没有成功完成并且 还没有发生可观测的状态变化时,客户可能对于失败前执行一系列交易中的 多少交易没有预期。实际上,客户可能不理智地甚至对成功的系列中的单个 交易抱有预期。\n作为前述的例子,假定一个客户向系统发送一个命令,它将引起十个交 易操作,并且在最终交易完成时结果将被发送回客户。进一步假想直到结果 发送为止,客户能够感觉到系统的可观测的状态没有变化。这时,如果十个 交易中有一个失败,客户就不能知道在失败的交易之前系统进行了多少处理, 因为系统的可观测的状态没有变化。客户可能不理智地希望系统该部分的处 理。因此,在本发明的一个实施例中,确认功能可以延迟直到所有十个交易 操作已经成功执行为止。执行图2所述的交易的系统的可观测的状态变化在 265、270和275(分别在交易A105开始之前,在紧接着交易A105完成后, 和在紧接着交易D120完成之后)中描述。\n图3描述了说明本发明的一种方法300的实施例的流程图。为了可观测 的状态的变化,实施例一般涉及检查被执行的计算机代码、存储被执行的计 算机代码的数据,它是计算机代码中多个交易的一部分;并响应检测到的可 观测的状态变化,确认存储数据的一部分。在所述实施例中,交易缓冲器开 始的指针(“BOTB指针”)和最后的缓冲交易指针(“LBT指针”)都设为交 易缓冲器的开始,数据将保存在该缓冲器中305。确定指令是否是可获得的 310。如果指令可获得,执行指令315,否则该方法完成。\n如果指令不可获得,接着作出指令是否是交易的部分的进一步的确定 320。本领域技术人员将意识到对于确定检查的指令是否是交易的部分存在很 多替换方式,包括利用可获得的标志,该标志在已经遇到明确交易或隐含交 易的开始点时被设置并当遇到明确交易或隐含交易的终点时清除。如果指令 是交易的部分,该执行产生的可用数据存储在交易缓冲器中325并确定是否 遇到交易的终止330。遇到交易结束时,与刚刚完成的交易相对应的数据的 结束处作出标记。在所述实施例中,LBT指针设为与最后输入到用于刚刚检 查的可用交易的交易缓冲器中的数据相对应335。\n接着,确定可观测的状态中是否已经出现变化340。如果已经出现可观 测的状态变化,确认存储在交易缓冲器中并与从最后的确认开始已经成功完 成的那些交易相对应的数据。在所述实施例中,这通过确认对应于BOTB指 针并通过对应于LBT指针的数据继续的数据而实现350。交易缓冲器的起始 和结束指针接着进行相应调整,并且对于下一个指令再次执行该方法。在所 述实施例中,通过设置BOTB指针为等于LBT指针来调整指针335。\n即使可能没有发生可观测的状态变化,也可能存在发生需要交易缓冲器 中的可用数据被确认的系统限制345。需要确认完成的系统限制的例子可能 通常依赖于特定系统并可能包括交易缓冲器大小的限制,从而缓冲器中存储 空间必须按顺序释放以连续处理,并可以包括在交易缓冲器中读取先前存储 的数据的需要。如果产生系统限制,交易缓冲器中的可用数据被确认并且接 着按照上述分别在发生可观测的状态变化350和355时那样调整交易缓冲器 的开始和结束指针,并且再次对下一个可获得的指令执行该方法。本领域技 术人员将意识到在已经达到交易缓冲器容量的那些情况下,确认存储的数据 时必须注意不要分离的存储的交易中之一的数据,而要只确认正在处理的交 易之前刚成功完成的最后的交易的数据。在本发明的一个实施例中,以上内 容通过保持BOTB指针和LBT指针实现。\n本领域技术人员还将意识到方法300可以用执行确认和回退功能的新值 登录或旧值登录方法中的任一种(或它们的组合)来实现。\n图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 成功完成时只使用一个确认。这种情况下,由于有与将执行的确认数量每次 降低相关的节省,交易开销大大降低。\n图5说明了一个示例的数据处理系统500。数据处理系统500可以包括 一个或多个处理器P1 505到Pn 510,它们通过系统总线530连接并接入到系 统存储器515。处理器P1 505到Pn 510可以用各种通用处理器执行,包括例 如IBM公司的处理器系列和诸如Intel公司的处理器的系 列的x86型处理器。系统存储器515通常用诸如动态RAM(DRAM)元件的 阵列的易失存储元件实现。系统存储器515也可以配置为包括只读存储器 (ROM)和非易失读/写存储器。在本发明的一个实施例中,系统存储器515 配置为包括交易缓冲器516。\n总线桥接器540提供一个系统总线530和外围总线545之间的接口。外 围总线545通常按照一种工业标准的外围总线协议或规范实现,比如来自PCI 指定兴趣组(www.pcisig.org)的PCI现场总线规范Rev2.2中指定的周边元 件扩展接口(PCI)协议。数据处理系统500可以包括连接到外围总线545的 一个或多个外围设备550和555。这些外围设备能够包括例如,硬盘控制器、 高速网络接口卡、图形适配器、和到目前为止基于微处理器的数据处理系统 设计领域技术人员熟悉的那些设备。\n图6示出了数据处理系统的一个例子,一个示例的智能卡。智能卡是塑 料的、信用卡形的卡,它包括嵌入到卡的塑料本体中的电子器件(芯片)。不 只使用磁条来存储信息,智能卡还使用嵌入到芯片中的微处理器和存储器元 件。与智能卡的通信通常通过卡接受设备(“CAD”)进行,用户将智能卡插 入到该卡接收设备中。除了与智能卡的通信,CAD通常给智能卡提供电源。 由于智能卡有一个芯片,它们能够编程以许多变化的性能来工作,比如储值 卡、信用卡、借记卡、ATM卡、电话卡、个人身份识别卡、重大的记录存储 设备等。在这些变化的性能中,一个智能卡可以设计为使用许多不同的应用 程序。智能卡遵从国际标准化组织(ISO)的标准7816部分1-10,它在这 里引用作为参考并通常称为“ISO 7816”。\n智能卡600包括通过导电触点610连接到具有集成存储器元件615的微 处理器的一个模块605。导电触点610与CAD连接,通常提供操作电源和允 许CAD和智能卡之间的数据传输。智能卡的其他实施例可以不包括导电触点 610,这种“无接触”智能卡可以交换信息并可以通过诸如磁耦合的靠近耦合 或诸如无线通信的远程耦合接收电源。智能卡600符合ISO 7816。\n图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。\n用智能卡,存在执行应用程序期间的任何时间上发生故障的风险。尽管 计算错误能够发生失败,更可能的原因是智能卡从CAD中过早取出。由于电 源通过CAD提供给智能卡,从CAD中取出智能卡将终止任何取出时刻执行 的CAD文件的执行。这种智能卡的过早取出在下文中称为“拔出”或“卡拔 出”。为了使智能卡保持数据操作的完整性并对针卡拔出进行保护,用于智能 卡的典型运行时间环境支持交易的执行。\n用于本发明的另一个实施例的源代码包含在本说明书的附录A中,它采 用在使用Java Card运行时间环境中的智能卡内执行的新值登录。如上文所介 绍的,术语“智能卡”参照图6所示的设备说明。但是,安全接口模块(SIM) 和安全接入模块(SAM)是典型智能卡的小型版本并通常用在电话或其他小空 间中。用在这里的术语“智能卡”不意图由尺寸、形状、性质和封装或安装微 处理器和存储器元件的材料成分进行限制。因此,全文中使用的术语“智能卡” 宽泛地认为包含任意本身具有能处理数据的微处理器和存储器元件的组合。\n应当意识到本发明的部分可以用存储在或包含在计算机可读介质中的一 组计算机可执行指令(软件)实现。计算机可读介质可以包括非易失介质, 比如软盘、硬盘、闪存卡、ROM、CD ROM、DVD、磁带或其他可用介质。 而且,本领域技术人员将意识到这里描述和要求保护的发明有很多替换的实 现方式。例如,描述的实施例使用指针,例如BOTB和LBT指针。这些指针 可以用由很多程序语言和操作系统提供的指针数据类型实现。或者,它们可 以用与给定位置的偏移实现。例如,在后面的替换中,基础位置可以设在可 用交易的开始。指针接着用与基础位置的一个偏移来实现。从而,这里的词 语“指针”意味着一个数据单元,它提供在程序或数据结构中指定的一个位 置的方法、函数和结果的,以便能够接入到在那个位置上的一个内容,在那 里允许进行涉及该内容的检测、比较或其他操作。\n从本公开文件中获益的本领域技术人员将明白从本发明提出的一种用于 有效进行交易处理的数据处理系统和方法中得到启示,它能够减少成功完成 交易所需确认的数量。应当理解在详细说明和附图中示出和说明的本发明的 形式仅仅是提出的优选实施例,而本发明只由权利要求的语言进行限制。\n附录A\n下面是使用新值登录(NVL)的基于可观测状态实现交易的最优化的C语言代码 (也可以使用旧值登录或其他的交易机制来实现该最优化。)\n/*\n*nvl_tran.c\n*transaction logging mechanism\n*This transaction mirror is inltlally designed for BYTE and SHORT atomic updates.\n*Because this type of mirror request a logged values scan for each read access,\n*it relies on read access drivers to be implemented.\n*Each time a java method makes more than 1 atomic write(BYTE or SHORT)\n*the transaction mechanism is advantageous,but it has to be under certain conditions.\n*Writings must occurs betweens 2 flush points which are:\n*-observable state points,such as communications\n*-System limitations,such as Util.array_xxx methods or certain other native methods\n*(Crypto for ex)that rely on validity of java byte/short/arrays.\n*/\n#include\n#inciude\n#if_include_NEW_VALUE_LOGIN_MIRROR==ON\n#define SDBG(x) //x /*statistical information display*/\nSDBG{static BYTE_SXDATA maxNVLVolatileEntriesCount=0;)\nSDBG(static WORD_SXDATA doubleAccessEntry=0;)\nSDBG(static WORD_SXDATA eepCumulAdvantage=0;)\n/*EEPROM NVL mirror*/\n#ifdef_WIN32\n #define NVLPersistentMirror SYS_Persistent.NVL_PersistentMirror\n#else\n NVL_MIRROR_SXDATA NVLPersistentMirror;\n#endif\n#define NVLPersistentCrc NVLPersistentMirror.crc\n#define NVLPersistentEntriesCount NVLPersistentMirror.count\n#define NVLPersistentEntries NVLPersistentMirror.entries\n/*RAM NVLmirror*/\n#define NVLVolatileMirror SYS_VolatileBuffer.NVL_VolatileMirror\n#define NVLVolatileCrc NVLVolatileMirror.crc\n#define NVLVolatileEntriesCount NVLVolatileMirror.count\n#define NVLVolatileEntries NVLVolatileMirror.entries\n/*\n NVL_ScanEntries\n parse the volatile Logging mirror and return the entry value,\n if an entry matches the lnput address.\n*/\nE_ADDRESS NVL_ScanEntries(E_ADDRESS addr)\n{\n BYTE iEntry;\n for(iEntry=0;iEntry0){\n /*it is possible that a tearing occurs during the persistent buffer update,\n hence NVLPersistentEntriesCount could be a meaningless value.if it is\n the case,the entire buffer is reset*/\n if(NVLPersistentEntriesCount>MAX_NLV_ENTRIES){\n wLength=sizeof(NVL_MIRROR);\n }else{\n //wLength=offsetof(NVL_MIRROR,entries[NVLPersistentEntriesCount]);\n wLength=sizeof(BYTE)+sizeof(WORD)+(NVLPersistentEntriesCount*\nsizeof(NVL_ENTRY));\n }\n if\n(_OS_ComputeCRC16(VIRTUAL_INDEX(&NVLPersistentEntriesCount),(NORD)(wLength-\nsizeof(WORD)))==NVLPersistentCrc){\n for(iEntry=0;iEntrymaxNVLVolatileEntriesCount)\nmaxNVLVolatileEntriesCount=NVLVolatileEntriesCount;\n fprintf(stderr,″Current Max number of entries=%x\n″,maxNVLVolatileEntriesCount);\n fprintf(stderr,″number of already present entry NVL access=\n%x\n″,doubleAccessEntry);\n if(NVLVolatieEntriesCount>0){\n eepCumulAdvantage+=((NVLVolatileEntriesCount*3)-(1/*saving to EEP\nbuff*/+1/*reseting EEP buff*/+NVLVolatileEntriesCount/*number of flushes*/));\n }\n fprintf(stderr,″numberEEPROM writing saved thanks NVL=\n%x\n″,eepCumulAdvantage);\n fprintf(stderr,″total number EEPROM writing saved=%x\n″,eepCumulAdvantage+\ndoubleAccessEntry);\n)\n if(NVLVolatileEntriesCount>0){\n /*working length*/\n //wLength=offsetof(NVL_MIRROR,entries[NVLVolatileEntriesCount]);\n wLength=sizeof(BYTE)+sizeof(WORD)+(NVLVolatileEntriesCount*\nsizeof(NVL_ENTRY));\n /*compute crc*/\n NVLVolatileCrc=\n_OS_ComputeCRC16(VIRTUAL_INDEX(&NVLVolatileEntriesCount),(WORD)(wLength-\nsizeof(WORD)));\n /*backup to the persistent image*/\n _OS_WriteMemory((GEN_ADDRESS)&NVLVolatileMirror,VIRTUAL_INDEX(&NVLPersistentMi\nrror),wLength);\n /*flush the persistent mirror & reset both persistent and volatile buffers*/\n NVL_FlushReset();\n }\n }\n /*\n NVL_LogEntry\n Add an entry in the Logging volatile mlrror,if entrt is not already existing.\n If volatile mirror is getting full:backup,flush and reset it.\n*/\nvoid NVL_LogEntry(INDEX dest,BYTE type,WORD value)\n{\n BYTE iEntry;\n /*check if an entry is already present is the Volatile Buffer*/\n for(iEntry=0;iEntry
法律信息
- 2016-01-20
未缴年费专利权终止
IPC(主分类): G06F 9/40
专利号: ZL 02827750.3
申请日: 2002.12.04
授权公告日: 2008.11.12
- 2008-11-12
- 2005-08-31
- 2005-07-06
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| | 暂无 |
1996-07-30
| | |
2
| |
2001-06-06
|
1999-02-18
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |