在事务处理码内对存储器分配和解除分配的系统和方法

文档序号:6454673阅读:127来源:国知局
专利名称:在事务处理码内对存储器分配和解除分配的系统和方法
在事务处理码内对存储器分配和解除分配的系统和方法
背景技术
为满足日益增长的用户需求,计算系统要以越来越快的速率高效 地操作,相关联停机时间不存在或很少。在努力满足这些需求的过程 中,程序员开发了可包括具有许多指令的多个指令"线程"的程序。 这些线程控制在系统上运行的程序(或应用)的操作和流程。在一些计 算体系结构中, 一个处理器可使用单个处理器执行多个线程。在其它 计算体系结构中,多个线程可由多个处理器执行,其中每个处理器可 支持不同的线程。
结合多线程程序,程序员使用包括嵌套事务处理(transaction)的事 务处理编码来改进计算同步和效率。事务处理是减轻多核体系结构上 编程的关键:技术。事务处理可描述为在线程上执行的步骤顺序。因为 事务处理一般是提交或中止,因此,事务处理也^皮认为是"原子,,。 例如,在线程宣布事务处理开始,执行操作序列并随后尝试提交事务 处理时, 一个事务处理才莫型便开始了。如果提交成功,则事务处理操 作在存储器(memory)中生效;如果未成功,则操作可被丟弃。事务 处理程序调用在内部使用事务处理的库代码时,嵌套事务处理会在它 们中发生。潜在冲突限制在大事务处理的一小部分内时,嵌套事务处 理也允许程序员避免昂贵的回滚。
常规计算系统允许程序对存储器进行动态分配和解除分配。但是, 为保持语义,这些常规计算系统不从事务处理码组(包括嵌套事务处理) 内对存储器进行分配和解除分配。不包括事务处理的常规计算系统可 在程序调用存储器分配例程,如标准Malloc例程时分配存储器块。 Malloc例程找到可用存储器块,将其标记为已分配,并且将指针返回 到与已分配块对应的程序。程序可使用指针存储数据到该存储器块。在不再需要该块时,程序可例如使用标准释放例程,释放该存储器块。 释放例程将该存储器块标记为可用,以便该块可另行分配。如上所述,
由于在使用标准malloc和释放例程时不可保留与事务处理码相关联 的语义,因此,目前这些标准或常规存储器分配和解除分配技术未结 合事务处理码组使用。


图l是根据实施例,包括具有事务处理功能的存储器管理系统的
计算装置方框图。
图2是根据实施例,具有事务处理功能的存储器管理的方框图。 图3是在实施例的情况下,在事务处理中时用于管理存储器的流程图。
具体实施例方式
方法和系统实施例提供用于在事务处理码中,包括在嵌套事务处 理码中时用于管理存储器分配和解除分配。通过使用诸如一个或多个 序号(sequence number)的一个或多个唯一标识符来处理事务处理中的 存储器管理,各种实施例提供了事务处理存储器管理。实施例也保持 在事务处理中止和提交时要执行的延迟动作列表。与一个或多个事务 处理相关联的多个存储器管理例程检查当前事务处理的事务处理序 号,操控提交和/或撤消日志,以及设置/使用相关联对象的事务处理 序号,但并不限于此。在事务处理和其它设置中处理其它事件时,可 应用本文所述用于处理在事务处理中,包括在嵌套事务处理中的存储 器管理的事务处理存储器管理技术。本文所述事务处理技术为减轻在 多核和其它体系结构上编程提供了有效和宝贵的工具。
事务处理码体现了一种功能强大的构造,可用于管理并发以消除 死锁,使编撰原子原语更容易及自动提供细粒(fine-gmined)并发。事 务处理可以硬件、软件或其组合的形式实现。软件实现可能更具程序员友好性,对事务处理实行有限大小约束并允许嵌套事务处理。在事 务处理提交时,事务处理期间所作的更改一般存储在存储器中。事务 处理中止时,分配和/或解除分配可能需要撤消或"回滚"。
在下面的说明中,介绍了许多特定的细节以提供系统和方法实施 例的详尽理解和实现对这些实施例的描述。但相关领域的技术人员将 认识到,这些实施例可在这些特定细节一处或多处不存在的情况下实 践,或者可通过其它组件、系统等实践。在其它情况下,熟知的结构 或操作未示出,或者未详细描述以避免混淆公开实施例的方面。
图1示出根据实施例,包括事务处理存储器管理系统101的计算
装置100,系统具有相关联存储器管理器102和事务处理储存 (transactiona1104。如下所述,事务处理储存104包括用于管理与事务 处理相关联操作的多个例程或模块,但并不限于此。如通过如图2所 示事务处理存储器管理系统200、存储器管理器204和存储器支持库 206所述,事务处理存储器管理系统101、存储器管理器102和事务 处理储存104在下面进行了详细描述。
存储器管理器102可以在一个或多个处理器上运行的软件算法、 固件和硬件的任意组合形式实现,其中,软件可存储在任何适合的计 算机可读介质上,如存储在半导体芯片中、计算机可读磁盘上等的微 代码。虽然存储器管理器102和计算装置100可示为处于相同位置, 但实施例并不限于此。各种备选实施例的存储器管理器102可在计算 装置100或其它系统任何数量和/或类型的组件、模块和/或电路中分 配一个或多个功能。
计算装置100包括任何计算系统,如手持式、移动计算系统、台 式计算系统、膝上型计算系统、图形特定计算系统及其它计算系统。 计算装置100 —般包括至少一个处理单元和系统存储器108。在其它 实施例中,计算装置IOO可包括多个处理器和其它组件。视计算装置 的配置和类型而定,系统存储器108可以为易失性(如随机存取存储器 (RAM)或其它动态存储装置(storage))、非易失性(如只读存储器(ROM)、闪存等)或某一组合。系统存储器108也可包括实现为软件、 硬件或其组合的事务处理存储器功能。
系统存储器108可包括操作系统110和一个或多个应用112。计 算装置100可包括另外的计算机存储装置114,如磁性存储装置、光 存储装置等。计算机存储装置包括但不限于RAM、 ROM、电可擦除 可编程只读存储装置(EEPROM)、闪存或其它存储器技术、压缩盘 ROM(CD-ROM)、数字多功能磁盘(DVD)或其它光存储装置、磁带盒、 磁带、磁存储装置或其它磁性存储装置或可用于存储信息的任何其它 介质。计算装置IOO也可包括一个或多个输入装置116和一个或多个 输出装置118。计算装置100也可包含允许计算装置100如通过有线 和/或无线网络或其它网络与其它计算装置122、处理器和/或系统通信 的通信连接120。
图2是根据实施例的事务处理存储器管理系统200方框图。虽然 图2中示出了应用202,但事务处理存储器管理系统200可与其它客 户端(例如,驱动程序、装置等)交互。事务处理存储器管理系统200 的描述将包括用于说明的"C"编程构造(construct),但实施例并不限 于此。
如下面进一步详细所述的一样,事务处理存储器管理系统200能
够在事务处理码组中,包括在嵌套事务处理码组中时对存储器进行分 配和解除分配,但并不限于此。在程序或应用中,事务处理一般指应
以原子方式执行的代码段。在一些情况下,在执行事务处理码的同时, 只可暂时而非永久性更改存储器。在完成事务处理码后,如果确定执 行以原子方式发生,则可通过使存储器更改变为永久性来提交事务处 理。否则,如果与另一事务处理有冲突,则事务处理可能被中止,并 且对存储器所做的暂时更改可能被丟弃。
事务处理存储器管理系统200包括与软件事务处理存储器(STM) 库206、应用202和已分配对象205交互的存储器管理器204。根据 实施例,已分配对象指与使用事务处理存储器管理系统200的分配或解除分配过程相关联的虚拟存储器块。例如,应用202可使用存储器 管理器204,基于下述各种标准为对象205进行分配和/或解除分配。
如图2所示,已分配对象可包括两个区域由应用202用于存储 数据的第 一 区域205a和用于存储"序号"(序号字段)的第二区域205b。 在各种实施例中,序号字段可以为对象头部的一部分、单独的表或线 程本地存储装置(thread - local storage)208,这取决于特定的实现。如 下所述,在确定对象是否是前瞻(speculatively)分配、前瞻释放、均衡 (balanced)释放等时可使用序号和其它信息。前瞻分配和解除分配可有 助于降低存储器等待时间,如果相关联操作只有在确定操作是否要进 行时才发出,可能产生存储器等待时间存储器。虽然图2示出了事务 处理存储器管理系统200的一种配置,但可使用其它配置。
线程本地存储装置(TLS) 208提供了存储装置,用于存储与 一个或 多个软件线程相关联信息,包括任何相关联事务处理。在实施例中, 每个软件线程在存储器中具有唯一的线程本地存储空间。线程本地存 储装置208可以为诸如RAM等系统存储器108的一部分,但并不限 于此。线程本地存储装置208包括线程状态210,该状态与包括嵌套 事务处理在内的一个或多个事务处理和其它信息相关联。
根据实施例,线程状态210包括顺序计数器210a、事务处理序号 210b、撤消日志210c、提交日志210d、其它事务处理状态210e及用 于嵌套事务处理状态210f的堆栈。为在提交和中止点保持正确的语 义,可能需要撤消的操作记录在撤消日志210c和提交日志210d中。 撤消日志210c是在事务处理中止事件时可能需要撤消的所有事务处 理的日志。要撤消分配,可释放存储器,但并不限于此。提交日志210d 是在以后的提交前未保证执行且因此必须延迟的所有解除分配日志。 要提交解除分配,可释放存储器,但并不限于此。
如下进一步所述,诸如一个或多个序号等一个或多个指示器可由 系统200用于有效地确定何时可安全地释放存储器分配。序号可以是 线程本地值,该值可增大以在线程上所有事务处理(包括嵌套事务处理)之间提供唯一排序。可使用n比特序号(例如,64比特),这可防止序 号溢出。在执行解除分配时,要解除分配的对象205b的序号与当前 事务处理的序号210b进行比较。序号之间的关系确定释放操作是"均 衡释放"还是"前瞻释放"。序号之间的关系也确定分配是否"前瞻"。
例如,可能存在如下所示与事务处理相关联的三种事务处理状态。
〃最初,seq(trans)=0在事务处理之外
x = malloc(size); 〃 seq=0
transaction { 〃 seq(trans) = 1
y = malloc(size); 〃 seq = 1
z = malloc(size); 〃 seq = 1
〃A点
free(x); 〃 (1 〉 0)为真,因此为前瞻释放 //B点
free(y); 〃 (1 > 1)为假,因此为均衡释放 }〃提交时,事务处理编号弹出-〉seq(trans) = 0
〃撤消日志被取消
〃处理提交日志(包含free(x))
〃(0>0)为假,因此free(x)成为均衡释放
〃C点
free (z); 〃 (0 > 1 )为假,因此为均衡释放 end
在A点,y和z均被认为是前瞻分配。也就是说,如果在此点发 生事务处理中止,y必须解除分配以便将状态回滚到事务处理的开始。 在B点,x被认为是前瞻释放。也就是说,如果在此点发生事务处理 中止,则x指向的存储器必须保持有效。换而言之,x的解除分配应 延迟。与此相反,y的解除分配可能不需要延迟,这是因为y的最终 状态已解除分配而无论是否发生事务处理提交或中止。y的此状态称 为均衡。也就是说,在达到释放操作后,事务处理将提交或中止。如 果事务处理中止,则由于事务处理操作回滚,因此,存储器好象在最初位置从未分配过一样。如果事务处理提交,则分配和释放均将提交, 并且存储器块仍被释放。因此,无论事务处理是否提交,该块均将空 闲。在C点,假设未遇到中止,由于分配已提交,因此,Z不再是前 瞻分配。
如在各种实施例说明中所使用一样,但并不限于此
1) 事务处理内的malloc称为前瞻分配。
2) 在seq(对象)< seq(事务处理)时释放事务处理内的对象称为前 瞻释放。
3) 在seq(对象)>=seq(事务处理)时释放事务处理内的对象称为 均衡释放。
4) 事务处理中止在该事务处理中前瞻分配的对象(根据seq(对 象)〉=seq(事务处理)检测到)被释放(空闲)
5) 事务处理提交在该事务处理中前瞻释放、在包含的事务处理 上下文中非前瞻释放的对象(根据pop(seq(transaction))后seq(对象)>= seq(事务处理)检测到)被释放(空闲)
下面提供了各种状态的其它示例。 前瞻分配的示例描述如下 transaction {
x = malloc(size);
〃A点
〃B点
在此示例中,存储器分配发生在事务处理内。如果事务处理提交, 则存储器已分配。另一方面,如果事务处理中止,则状态为好象分配 从未发生一样,并且分配应撤消(释^:)。在A点的存储器状态称为前 瞻分配。在事务处理提交后(例如,在B点),分配被提交,并且状态 不再是前瞻分配。
前瞻释;^状态的示例描述如下
x = malloc(size);transaction { free(x); 〃A点
}
//B点
在此示例中,存储器分配在事务处理开始之前发生,因此,分配 是非前瞻的。但是,释放操作在事务处理内发生。如果事务处理提交, 则存储器应被释放。另一方面,如果事务处理中止,则存储器应保持 已分配状态。在A点的存储器状态称为前瞻释放。在事务处理提交后 (例如,在B点),释放被提交(也"被均衡"),并且不再是前瞻释放。 均衡释放示例描述如下 transaction { x = malloc(size); 〃A点 free(x); //B点
在此示例中,存储器分配和对应的解除分配均发生在事务处理内。 在存储器第一次分配(A点)时,情况与上述前瞻分配情况相同。但是, 一旦释放已执行(B点),释放现在便被均衡。也就是说,如果事务处 理中止,则由于事务处理操作回滚到以前状态,因此,分配或释;^丈均 未发生。相应地,存储器空闲,如同在事务处理中分配之前一样。类 似地,如果事务处理提交,则malloc和释放均^皮提交,因此,最终结 果仍是存储器块空闲。另外,它不再考虑(在B点)事务处理是提交还 是中止(无论如何存储器空闲)。因此,释放被均衡,并且可容易处理。 另外,如下所述,相关联存储器块一旦已变为均衡释放,但不再出现 在提交或撤消日志中。
均衡释放状态是一个重要考虑因素。下面的情况是又一个示例
transaction {for (i=0; Kreally一big一number; i++) { x = malloc(size); free(x);
在此示例中,在每次循环迭代中分配的存储器在该循环迭代结束 时被均衡,并且易于释放。存储器管理器204可在事务处理期间但在 事务处理结束之前分配。如果存储器管理器204延迟释放操作,直至 事务处理结束,则此循环可使用无限量的存储器,这不是存储器管理 器204所希望的结果。
下面提供了说明性嵌套事务处理示例
〃在事务处理之外,seq = 0
x = malloc(size); 〃 seq = 0
z = NUIX;
transaction { 〃 seq = 1 y = malloc(size); 〃 seq = 1 transaction { 〃 seq = 2
free(x); 〃 2 〉 0->前瞻释放
free(y); 〃 2 > 1画> 前瞻释放
z = malloc(size); 〃 seq = 2
}
〃1>0真->free(x)仍为前瞻释放 〃 1 〉 1假-> free(y)在提交后均衡 〃z的记录在最终提交前仍存在于撤消日志中 transaction { 〃 seq = 3 free(z);〃3〉2,因此,释放是前瞻的(只添加到提交曰志)
abort(); 〃提交日志回滚到在事务处理开始时所取检验点,取 消z的前瞻释放。注意,x在此检验点之前被释放,因此,释放不在 此处取消。〃abort();〃提交日志回滚到在事务处理开始时所取检验点位置,取 消x的前瞻释放。撤消日志回滚,直至seq(对象)-seq(事务处理),从 而一直释^L前瞻分配(在此示例中为z)〃
图3是在实施例的情况下,在诸如事务处理码组等事务处理中时 用于管理存储器的流程图。在图3流程描述中将参考图2。例如,应 用(或程序)202可指定一个或多个码组为事务处理码组,这些码组可包 括嵌套事务处理。应用202可通过调用例如在软件事务处理存储器库 206中诸如开始事务处理例程212等例程,描述事务处理的开始。事 务处理从300开始。
在302-306,调用的例程设置事务处理状态210e,并向事务处理 分配序号210b。状态随后可保存到线程本地存储装置208。在本文中 使用时,事务处理的序号称为"seq(事务处理)",并在下述各种操作 中使用。根据实施例,事务处理的序号210b设为线程本地顺序计数 器210a的增大值。如果在嵌套事务处理内,则作为操作的一部分,例 程将事务处理状态,包括与此状态相关联的原事务处理序号或前事务 处理序号推送到嵌套事务处理堆栈210f。术语"弹出"和"推送"指 在诸如嵌套事务处理栈210f等堆栈数据结构上执行的操作。嵌套事务 处理堆栈210f也可用于支持嵌套事务处理,而独立于使用序号。堆栈 操作包括但不限于创建新堆栈,将新项目推送到堆栈和/或将项目弹出 堆栈。
在308,流程继续确定事务处理是否在尝试分配或解除分配过程。 也就是说,事务处理码组可包括代码结构内的一个或多个分配或解除 分配调用。在实施例中,存储器管理器204提供"t妄口,以便应用202 在事务处理中,包括在嵌套事务处理中时对存储器区或块进行分配和 解除分配。如下所述,存储器管理器204可在诸如分配和解除分配过 程期间从软件事务处理存储器库206调用各种例程。
如果事务处理包括分配过程调用,则存储器管理器204可在用于分配过程的软件事务处理存储器库206中调用诸如分配例程214等例 程。在310,除分配对象205(例如,存储器块)外,可分配的对象205 序号205b设为当前事务处理的序号210b(例如,当前事务处理的序号 置于已分配对象的序号字段中)。在本文中使用时,对象的序号称为 "seq(对象)",并在下述各种操作中使用。在312,对象205的记录 插入4敬消日志210c中。
在实施例中,分配例程214在^皮调用时,执行如下 mallo《size—t size) {
p = typical一malloc—actions(size); if (in—transaction) {
sequence—number(p)=sequence—number(current—tra
nsaction);
insert—undo—log—entry(p);
flagged—for—transactional—malloc = TRUE;
return p;}.
如果事务处理包括解除分配过程调用,则存储器管理器204可在 用于解除分配过程的软件事务处理存储器库206中调用诸如解除分配 例程216等例程。在314,对象205的序号205b与事务处理序号210b 进行比较。这些序号之间的关系确定释放是否为均衡释放,或者对象 205是否为前瞻释放。如果对象205的序号205b小于事务处理序号 210b,则对象205可能在当前事务处理之外已分配,并且在316,对 象205 -坎插入提交日志210d中。在该点,对象205为前瞻释放,并 且相关联存储器块的释放可延迟至以后的点。相反地,如果对象205 的序号205b大于或等于事务处理序号210b,则在318-320,对象205 将从撤消日志210c中删除,并且对象205可安全地释放。
在实施例中,解除分配(释力文)例程216在^皮调用时,执行如下
free(pointer p) {
if (in—transaction) {if (sequence—number(p)>= sequence一number(current—transaction)) {
remove—undo—undo一entry(p); free—for—real(p); } else {
insert—commit—lo g—entry(p);
flagged—for—transactional—malloc = TRUE;
} else {
free_for_real(p);}
在321,同样地确定事务处理是否在尝试分配或解除分配过程。 如果事务处理在尝试另一分配或解除分配过程,则流程返回308并如 上所述继续。如果事务处理未尝试另一分配或解除分配过程,则流程 继续到322。在322,应用202可提交或中止事务处理。例如,应用 202可描述何时通过调用软件事务处理存储器库206中诸如提交例程 218或中止例程220等例程提交或中止事务处理。另外,如果发现另 一事务处理或操作在请求的提交时已违反事务处理的原子性,则也可 中止事务处理。提交例程218或中止例程220可在适当时使用存储器 管理器204调用相关联提交或中止钩子(hook)以便处理提交日志210d 和/或撤销日志210c。
如果在324事务处理提交,则在从嵌套事务处理返回时,父事务 处理的序号作为软件事务处理存储器库206操作的一部分从堆栈210f 弹出。另外,对于顶层(top-level)提交,分配所有前瞻分配对象,包 括重置或清空撤消日志210c。也就是说, 一旦事务处理提交,便将无 需撤消事务处理。在326,处理提交日志210d,并将其中的条目序号 与父事务处理的序号进行比较。此比较确定提交日志210d中的一个 或多个对象是否保持前瞻释放或者已变为均衡释放。如果诸如对象 205等对象已变为均衡释放,则它从提交日志210d删除并被释放。
在实施例中,提交例程218在被调用时执行如下commit() {
perform—typical—commit—actions(); if (flagged—for—transactional—malloc) { pop—sequence—number();
for—each object in commit—log scanning backwards { if (object ==commit—log—checkpoint) { break;
if (sequence—number(object)>= sequence—number(transaction)) { free—for—real(object);
if (nesting—depth == 0) { reset—undo—log();
flagged—for—transactional—malloc = FALSE; pop—commit—log—checkpoint();
如果除软件事务处理存储器库206中止动作外,事务处理中止, 则可检查撤消日志210c和提交日志210d。在实施例中,反向扫描撤 消曰志210c,比较序号以确定是否在被中止的事务处理内前瞻分配了 任何对象。随后,任何已中止分配可被回滚和释放。另外,放弃在已 中止事务处理期间插入的提交日志210d中的任何条目,由此将提交 曰志210d恢复到已中止事务处理前的状态。在328,对于对象的序号 大于或等于事务处理序号210b的情况,释放撤消日志条目。在330, 在从嵌套事务处理返回时,父事务处理的序号作为软件事务处理存储 器库206操作一部分从堆栈210f弹出。
在实施例中,中止例程220在^皮调用时执行如下
abort() {perform—typical—abort—actions();
if (flagged—for—transactional—malloc) {
for—each object in undo—log scanning backwards {
if (sequence一number(object) <
sequence—number(transaction)) { break)
free—for—real(obj ect);
restore—commit一log一to—checkpoint();
pop—sequence—number();
flagged—for—transactional—malloc = FALSE;
本文所述方法和系统的各方面可实现为编程到任意各种电路中的 功能,包括诸如现场可编程门阵列("FPGA")、可编程阵列逻辑("PAL") 器件、电可编程逻辑和存储器件和基于单元的标准器件等可编程逻辑 器件("PLD")及专用集成电路。实现也可包括具有存储器(如EEPROM) 的微控制器、嵌入式微处理器、固件、软件等。此外,各方面可在具 有基于软件的电路仿真的微处理器、离散逻辑(时序和组合)、定制器 件(custom device )、模糊(神经)逻辑、量子器件及任何上述装置类型 混合体中实施。当然,底层器件(underlyingdevice)技术可在多种组 件类型中提供,如象互补型金属氧化半导体("CMOS")的金属氧化 半导体场效晶体管("MOSFET")技术、象发射极耦合逻辑("ECL") 的双极技术、聚合物技术(例如,含硅共辄聚合物和金属共辄聚合物-金属结构)、混合^t拟和数字等。
术语"处理器"如在本文中通用的一样,指任何逻辑处理单元, 如一个或多个中央处理器("CPU")、数字信号处理器("DSP")、专 用集成电路("ASIC")等。虽然术语"组件"在本文通用,但要理解, "组件"包括电路、组件、才莫块和/或如这些术语在本领域所熟知的电路、组件和/或^t块的任何组合。
本文公开的各种组件和/或功能可通过使用硬件、固件和/或包含 在各种机器可读或计算机可读介质中的数据和/或指令的任何数量组 合,根据其行为、寄存器传送、逻辑组件和/或其它特征进行描述。其 中可包含此类格式化数据和/或指令的计算机可读介质包括但不限于 各种形式的非易失性存储介质(例如,光、磁性或半导体存储介质)和 可用于通过无线、光或有线信令介质或其任何组合传输此类格式化数 据和/或指令的载波。通过载波传输此类格式化数据和/或指令的示例 包括但不限于经一个或多个数据传送协议,通过因特网和/或其它计算 机网络传输(上载、下载、电子邮件等)。
除非上下文明确要求,否则,在说明书和权利要求书通篇中字词 "包括"及诸如此类要理解为有包含意义而不是排它或详尽意义,也 就是说,有"包括但不限于"的意义。使用单数或复数的字词也分别 包括复数或单数的意义。另外,字词"在本文"、"在下文"、"上 述"、"下面"及类似的导入字词应将本申请作为一个整体参考而不 是参考本申请的任何特定部分。在有关两个或更多项目的序列中使用
字词"或"时,该字词包含所有以下字词解释序列中的任何项目、 序列中的所有项目及序列中项目的任何组合。
所示实施例的上述说明无意详尽或受限于公开内容。虽然为便于 说明而在本文描述了系统和方法的特定实施例和示例, -怛相关领域的 技术人中将认识到可能实现各种相当的修改。本文提供的示教可应用 于其它系统和方法,而不只是用于上述系统和方法。上述各种实施例 的要素和动作可组合以提供其它实施例。鉴于上述详细说明,可对方 法和系统实现这些和其它更改。
通常,在下面的权利要求书中,使用的术语不应视为限于说明书 和权利要求书中公开的特定实施例,而应视为包括在权利要求书指引 下操作的所有系统和方法。相应地,方法和系统并不受公开内容限制, 范围要完全根据权利要求书确定。虽然下面以某些权利要求项形式显示了某些方面,但发明者以任意数量的权利要求项形式考虑不同方 面。例如,虽然只有一个方面叙述为包含在机器可读介质中,但其它 方面可类似地包含在机器可读介质中。相应地,发明者可保留在提交 申请后添加其它权利要求项的权利,以便也为其它方面采取此类另外 的权利要求项形式。
权利要求
1. 一种用于管理事务处理的系统,包括存储器管理器,所述存储器管理器管理事务处理分配和解除分配,其中,所述存储器管理器包括至少一个指示器,以跟踪每个分配的对象并评估所述事务处理分配和解除分配;事务处理储存,所述事务处理储存包括管理与所述事务处理相关联操作的至少一个模块,其中管理与所述事务处理相关联操作的所述至少一个模块使用至少一个指示器跟踪和评估所述事务处理分配和解除分配;以及存储装置,所述存储装置存储与所述事务处理相关联信息。
2. 如权利要求1所述的系统,其中所述存储装置还包括线程本地 存储装置,所述线程本地存储装置存储与软件线程相关联的信息,所 述信息包括与所述软件线程相关联的事务处理状态。
3. 如权利要求2所述的系统,其中所述事务处理状态还包括至少 事务处理序号、提交日志和撤消日志之一。
4. 如权利要求3所述的系统,还包括分配模块,其中所述分配模 块使用所述事务处理序号确定分配状态。
5. 如权利要求4所述的系统,其中所述解除分配才莫块使用所述事 务处理序号确定解除分配状态。
6. 如权利要求l所述的系统,还包括一个或多个事务处理^t块, 其中所述一个或多个事务处理模块比较事务处理序号与对象序号以 确定至少事务处理分配和事务处理解除分配之一的状态。
7. 如权利要求6所述的系统,还包括线程序号,其中所述线程序 号增大以跟踪线程的多个事务处理。
8. 如权利要求1所述的系统,其中所述事务处理储存包括至少事 务处理分配模块、解除分配模块、提交模块和中止模块之一。
9. 一种系统,包括事务处理分配才莫块,所述事务处理分配4莫块管理与一个或多个事 务处理相关联的分配操作,其中所述事务处理分配模块要至少部分基于与已分配对象相关联的事务处理指示器来确定分配状态;以及事务处理解除分配才莫块,所述事务处理解除分配才莫块管理与所述 一个或多个事务处理相关联解除分配操作,其中所述事务处理解除分 配模块要至少部分基于与所述已分配对象相关联的所述事务处理指 示器来确定是否对所述已分配对象解除分配。
10. 如权利要求9所述的系统,还包括事务处理提交才莫块,所述 事务处理提交^t块管理与所述一个或多个事务处理相关联的提交操 作。
11. 如权利要求9所述的系统,还包括事务处理中止模块,所述 事务处理中止模块管理与所述一个或多个事务处理相关联的中止操作。
12. 如权利要求9所述的系统,其中所述系统还包括事务处理存 储器管理系统。
13. 如权利要求12所述的系统,还包括存储器管理器,所述存储 器管理器管理事务处理分配和解除分配。
14. 如权利要求9所述的系统,还包括撤消日志,所述撤消日志在事务处理中止的事件发生时记录用于 撤消过程的分配;以及提交日志,所述提交日志记录延迟的解除分配。
15. —种用于管理存储器的方法,包括 启动与事务处理码组相关联的事务处理;指配第 一指示器以识别与所述事务处理相关联的至少 一个操作; 使用所述第一指示器识别至少事务处理分配和事务处理解除分 配之一的纟大态;确定所述事务处理是否成功;以及 基于所述成功确定来提供结果。
16. 如权利要求15所述的方法,还包括在与所述事务处理相关联 的所述至少 一个操作未成功时中止所述事务处理。
17. 如权利要求15所述的方法,还包括指配第二指示器以在所述 事务处理将分配对象时识別要分配的所述对象。
18. 如权利要求17所述的方法,还包括在所述事务处理将对对象 解除分配时比较所述第一指示器与所述第二指示器,其中所述比较确 定解除分配状态。
19. 如权利要求15所述的方法,还包括在所述线程包括多个事务 处理时使用所述笫一指示器监视线程的事务处理。
20. 如权利要求15所述的方法,还包括在所述事务处理码组的操 作成功时提交所述事务处理。
全文摘要
方法和系统提供用于在事务处理码中,包括在嵌套事务处理码中时管理存储器分配和解除分配。方法和系统通过使用诸如序号等标识符管理事务处理存储器操作以处理事务处理中的存储器管理。方法和系统也保持在事务处理中止和提交时要执行的延迟动作列表。与一个或多个事务处理相关联的多个存储器管理例程检查当前事务处理的事务处理序号,操控提交和/或撤消日志,以及设置/使用相关联对象的事务处理序号,但并不限于此。方法和系统在保留事务处理语义的同时,提供用于事务处理码内的存储器分配和解除分配。本文也描述和声明了其他实施例。
文档编号G06F12/00GK101432702SQ200780015529
公开日2009年5月13日 申请日期2007年5月1日 优先权日2006年5月2日
发明者A·-R·阿迪-塔巴塔拜, B·萨哈, B·赫奇伯格 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1