利用虚拟存储器的事务型存储器执行的制作方法

文档序号:6649313阅读:144来源:国知局
专利名称:利用虚拟存储器的事务型存储器执行的制作方法
技术领域
本发明的实施方案涉及事务型存储器和事务型执行领域。更特别地,本发明的实施方案涉及需要或不需要硬件支持来实现利用虚拟存储器的事务型存储器执行。
背景技术
事务型存储器执行允许应用、程序、模块等,特别是应用程序接口(API)以原子方式访问数据库文件或者其他类型的存储器文件。例如,事务型存储器可以被用作用于管理例如数据库的持久性、指针丰富型数据结构和目录服务(directory service)的运行时引擎的一部分。
API可以被认为是应用、程序、模块等用来和系统程序(例如操作系统或者数据库管理系统(DBMS))进行通讯的语言或者消息格式。通过在程序中写函数调用可以实施API,所述程序提供了对用于执行的特定子程序的联接。
事务型存储器使得写并行程序更为容易,并且,使用事务型存储器允许不同的线程被同时处理,由此获得了极高的处理效率。
事务型存储器一般被认为是从数据库事务衍生出来。通常,事务是一组必须满足四个被称为ACID性质(原子性、一致性、隔离性和持久性(durability))的性质的操作。第一个ACID性质是原子性。原子性要求事务被以要么全部-要么没有(all-or-nothing)的方式执行。事务可以因为程序异常终止(abort)或者错误所致而被异常终止。原子性要求要么执行事务所有的操作,要么不执行它们中的任何一个。第二个ACID性质是一致性。一致性要求如果在事务被执行之前,数据库处于一致状态,则数据库应该保持处于一致状态。第三个ACID性质是隔离性。隔离性规定被执行的所有事务必须好像被以某种顺次的顺序(即它们应该是可串行化的)被完成。在ACID下所要求的最后一个也就是第四个性质是持久性。持久性要求事务经受得住机器崩溃。即,事务在其可以被提交(commit)之前必须被写入稳定的储存设备(例如磁盘)。
事务型存储器和事务型执行允许以鲁棒性的和高性能的方式来写多线程应用程序。当例如台式机和服务器的计算机系统正日益被要求在线程很多的环境中工作时,这变得更为重要。特别地,可以利用现代处理器对预测执行(speculative execution)的支持来预测性地执行代码块,以有效地实施这些多线程应用程序。但是,目前实施事务型存储器和事务型执行的技术受困于资源限制,因为它们不能处理任意大小的事务或任意长度的事务,由此给编程和事务型执行都给出了巨大的限制。

发明内容
根据本发明的一个方面,提供了一种.一种装置,包括处理器,所述处理器包括本地事务型缓存(cache);以及资源管理器,所述资源管理器对来自请求线程的事务型存储器事务请求做出响应,以便确定所述本地事务型缓存是否能够容纳所述事务型存储器事务请求,并且,如果可以,则所述本地事务型缓存执行所述事务型存储器事务;其中,如果所述本地事务型缓存不能容纳所述事务型存储器事务请求,则所述事务型存储器事务请求的数据被溢出到与所述请求线程相关联的应用程序虚拟地址空间中。
根据本发明的另一个方面,提供了一种方法,包括确定本地事务型缓存是否能够容纳来自请求线程的事务型存储器事务请求;如果所述本地事务型缓存能够容纳所述事务型存储器事务请求,则利用本地事务型缓存执行所述事务型存储器事务请求;以及如果所述本地事务型缓存不能够容纳所述事务型存储器事务请求,则将所述事务型存储器事务请求的数据溢出到与所述请求线程相关联的应用程序虚拟地址空间中。
根据本发明的又一个方面,提供了一种机器可读介质,具有储存在其上的指令,当所述指令被机器执行时,引起所述机器执行下列操作,包括确定本地事务型缓存是否能够容纳来自请求线程的事务型存储器事务请求;如果所述本地事务型缓存能够容纳所述事务型存储器事务请求,则利用本地事务型缓存执行所述事务型存储器事务请求;以及如果所述本地事务型缓存不能够容纳所述事务型存储器事务请求,则将所述事务型存储器事务请求的数据溢出到与所述请求线程相关联的应用程序虚拟地址空间中。
根据本发明的再一个方面,提供了一种计算机系统,包括处理器,它包括本地事务型缓存;数据库;以及资源管理器,所述资源管理器对来自请求线程的事务型存储器事务请求做出响应,所述请求来自应用程序接口(API)并请求访问数据库中的存储器,所述资源管理器确定所述本地事务型缓存是否能够容纳所述事务型存储器事务请求,并且,如果可以,则所述本地事务型缓存执行所述事务型存储器事务;其中,如果所述本地事务型缓存不能容纳所述事务型存储器事务请求,则所述事务型存储器事务请求的数据被溢出到与所述请求线程相关联的应用程序虚拟地址空间中。


图1是其中可以实践本发明的实施方案的计算机系统结构的实施例的部分框图。
图2是流程图,示出了实施涉及利用虚拟存储器的事务型存储器执行的本发明实施方案的过程。
图3是根据本发明的一个实施方案的事务地址转换表(XATT)的结构图。
图4是流程图,根据本发明的一个实施方案,示出了获取新的虚拟和物理地址的过程。
图5是根据本发明的一个实施方案示出各种状态的例子的图,在经历利用虚拟存储器的虚拟存储器事务,例如虚拟事务存储器(VTM)事务时,事务的线程可以处于所述的状态。
图6是流程图,根据本发明的一个实施方案,示出了事务型存储器事务如何产生溢出请求的过程。
图7是流程图,根据本发明的一个实施方案,示出了提交事务的过程。
图8是流程图,根据本发明的一个实施方案,示出了溢出的事务如何响应进入的请求的过程。
具体实施方案在下面的描述中,将详细描述本发明的各种实施方案。但是,包括这些细节是为有助于理解本发明和描述用于采用本发明的示范性实施方案。这样的细节不应该被用来将本发明局限于所描述的特定实施方案,因为在本发明的范围内,其他的变化和实施方案是可能的。此外,尽管给出了大量细节以提供对本发明的实施方案的透彻理解,但是,对本领域熟练技术人员来讲很清楚,实践本发明的实施方案不需要这些具体细节。在其他的实例中,例如公知的方法、数据类型、协议、过程、部件、电气结构和电路的细节没有被详细描述,或者被以框图形式示出,以模糊了本发明。此外,本发明的实施方案将在特定实施方案中被描述,但是可以被实施在硬件、软件、固件、中间件或其组合中。
图1示出了其中可以实践本发明的实施方案的计算机系统结构的实施例的部分框图。系统结构100包括至少一个例如中央处理单元的处理器101、芯片组103、系统存储器设备105、一个或更多个接口111和网络接口107,所述接口111用于和一个或更多个输入/输出(I/O)设备113连接。
芯片组103可以包括存储器控制中心(MCH)和/或I/O控制中心(hub)。芯片组103可以是一个或更多个起到用于在处理器101和计算机系统100的其他部件之间数据传输的中心或核心作用的集成电路芯片。而且,计算机系统100可以包括额外的部件(未被示出),例如其他的处理器(例如在多处理器系统中)、协处理器,以及其他的部件等,这仅仅是计算机系统非常基本的例子。
为了当前描述的目的,术语“处理器”或“CPU”指任何能够执行指令序列的机器,并且应该被视为包括但不限于通用微处理器、专用微处理器、专用集成电路(ASIC)、多媒体控制器、信号理器和微控制器等。在一个实施方案中,CPU 101是能够执行英特尔体系结构指令集的通用高速微处理器。例如,CPU 101可以是英特尔奔腾类处理器,例如英特尔体系结构32位(IA-32)处理器(例如奔腾4M)。
CPU 101、芯片组103和其他的部件通过芯片组103访问系统存储器设备105。例如,芯片组103使用存储器控制中心可以为以系统存储器设备105为目标的存储器事务服务。
系统存储器设备105可以包括任何用于储存数字信息的存储器设备,例如静态随机访问存储器(SRAM)、动态随机访问存储器(DRAM)、同步动态随机访问存储器(SDRAM),和/或双数据率(DDR)SDRAM或DRAM,等等。因此,在一个实施方案中,系统存储器设备105包括易失性存储器。而且,系统存储器设备也可以包括非易失性存储器,例如只读存储器(ROM)。
此外,系统存储器设备105还可以包括其他储存设备和合适的接口,所述其他储存设备例如硬盘驱动器、软盘驱动器、光盘驱动器等。
本发明的实施方案通过利用虚拟存储器来允许在资源方面任意大小的事务,在处理器中提供了增强的事务型存储器执行支持,所述任意大小的事务例如数据印记(footprint)大小、被执行的指令、进程迁移等。此外,这被透明地完成,以使程序员不必为了容纳资源问题而以任何特殊的方式来写软件。此后,术语事务指被原子性地执行的指令序列。此外,事务也可以符合先前所讨论的ACID性质。
如将要被讨论的那样,本发明的实施方案涉及事务型存储器执行支持,所述事务型存储器执行支持通过利用应用程序的虚拟地址空间自身,利用虚拟存储器来有效地容纳事务型存储器执行中的资源问题,以便溢出任何不能被缓冲在处理器的事务型缓存结构中的数据。这允许对大多数一般情况中的硬件或处理器事务型执行支持,在大多数一般情况中,本地事务型缓存能够容纳事务的资源要求,并且,在数据印记尺寸大于本地事务型缓存的相对罕见但极为重要的情况下,数据被溢出到应用程序自己的虚拟地址空间中用于处理。处理器中现存的本地缓存也可以被用作事务型缓存,或者,事务型缓存可以是单独的硬件结构。
此外,系统存储器设备105可以在非易失存储器中储存程序来辅助利用虚拟存储器的事务型存储器(TM)执行,如处理器101所实施的来实施根据本发明的实施方案的技术那样。特别地,在一个实施方案中,这样的程序可以辅助实现计算机系统100内的事务型存储器访问,特别是在处理器的事务型缓存124、物理存储器140或分页存储器141、虚拟存储器170和数据库108之间,这将要被讨论。
系统存储器设备105结合物理存储器140、分页存储器141、虚拟存储器170等,可以被用来实施与数据库108的存储器事务。例如,数据库108可以包括企业数据库(corporate database)、金融数据库、项目管理数据库、目录服务等,以及其他的通常被与事务型存储器类型的事务一起使用的指针丰富型数据结构。
此外,计算机系统100可以包括适当的接口111,用于与例如磁盘驱动器、监视器、小键盘、调制解调器、打印机的I/O设备或任何其他类型的适当I/O设备连接。
计算机系统100可以包括网络接口107,用于将计算机系统100与网络109连接,网络109例如局域网(LAN)、广域网(WAN)、因特网等。
图1的基本计算机系统结构100是在实施此后将被讨论的利用虚拟存储器的事务型存储器执行中可以被利用的一种类型的计算机系统的实施例。本领域熟练技术人员应该理解,图1的示范性计算机系统结构100仅仅是基本的计算机系统的一个实施例,并且,很多其他的类型和变化是可能的。此外,本领域熟练技术人员将认识到,图1中所示的示范性环境并非打算用来限制本发明的实施方案。此外,应该理解,除了单个的计算机系统结构100以外,或者代替单个的计算机系统结构100,在实践本发明的实施方案时,还可以利用计算机(和计算机系统结构100类似或者不同)的集群或者组。
更特别地,如图1所示,处理器101通过结合标准事务执行功能120和本地事务型缓存124以及储存在物理和分页存储器140和141中的事务地址表145(此后的XATT),以及将要被讨论的虚拟存储器170来利用事务地址转换表巡逻者(walker)(此后的XATT巡逻者)132,可以实施利用虚拟存储器功能130的事务型存储器(TM)执行。此外,如稍后将被更详细地讨论的那样,利用虚拟存储器130的TM执行还可以实施事务地址转换缓存(此后的XATC)134和冲突检测过滤器(此后的CDF)136。
当对于被请求的事务,资源要求可以被本地事务型缓存124满足时,处理器101可以利用与本地事务型缓存124一起工作的标准事务型执行功能120来实施标准的事务型执行功能。但是在其他情况下,当事务要求大于本地事务型缓存的数据资源时,或者经过例如要求超过本地事务型缓存的持久性的上下文切换时,数据可以被溢出到对应的应用程序的虚拟地址空间172中,以便无缝地执行利用虚拟存储器170的事务型存储器执行。如将要被讨论的那样,这通过事务地址转换表(XATT)巡逻者132、事务地址转换表(XATT)145的组合,以及对虚拟存储器170和物理存储器140的使用的唯一且并非显而易见的组合来达成。
在一个实施方案中,处理器101包括本地事务型缓存124和资源管理器131。对来自请求线程的事务型存储器事务请求116做出响应的资源管理器131确定本地事务型缓存是否能够容纳事务型存储器事务请求,并且,如果可以,则本地事务型存储器缓存执行事务型存储器事务。但是,如果本地事务型缓存124不能容纳事务型存储器事务请求,则事务型存储器事务请求的数据被溢出到与请求线程相关联的应用程序的虚拟地址空间170中。
如图1中所示,计算机系统结构100包括具有XATT 145、新物理地址(PAnew)150和原始物理地址(PAorig)152的物理存储器140。在分页存储器实施方案141中,也可以使用XATT 145。计算机系统结构100还包括虚拟存储器170,以实施应用程序的虚拟地址空间172,并且,虚拟地址空间170(应该是172)包括新虚拟地址(VAnew)174和原始虚拟地址(VAorig)176,这将被讨论。
特别地,根据API请求或者其他类型的程序或模块请求116(即,请求事务型存储器事务的某种类型的线程),处理器101执行潜在地利用虚拟存储器的事务型存储器执行,以实施此后将被讨论的事务型存储器事务。例如,这可以被完成,以便以事务的方式为程序当前活动的线程简单地更新存储器,或者,可以最终以事务方式来更新数据库108。
现在转到图2,图2是流程图,示出了实施涉及利用虚拟存储器的事务型存储器执行的本发明实施方案的过程200。在块202,根据来自请求线程的事务型存储器事务请求,过程200确定处理器的本地事务型缓存124是否能够容纳所请求的事务的资源要求。例如,资源管理器131可以做出这个判断。如果能够容纳,则利用事务型执行功能120和本地事务型缓存124的处理器101针对请求线程,利用本地事务型缓存124来执行事务型存储器事务(块204)。如果不能,则请求线程的用于所请求的事务型存储器事务的数据被溢出到请求应用程序的虚拟地址空间172中(块206)。利用XATT巡逻者132管理该数据溢出(块208)。如稍后将要被更详细地讨论的那样,通过利用应用程序的虚拟地址空间172,事务型存储器事务仍可以被处理。
因此,利用标准事务型执行功能来支持一般的情况,在一般情况下,本地事务型缓存124能够容纳来自应用程序的线程的被请求的事务的资源要求。
但是,当被请求的数据资源大于本地事务型缓存124的资源时,数据被使用在写入时复制(copy-on-write)技术溢出到虚拟存储器170中的应用程序自己的虚拟地址空间172中。通过将溢出信息保持在与应用程序相同的虚拟地址空间中,例如上下文切换、进程迁移等的关键状况可以被自动地处理。有利的是,在这个过程中不涉及到用户。如将要被讨论的那样,和页面巡逻者类似,XATT巡逻者132提供一种机制,通过此机制,利用虚拟存储器而非本地事务型缓存,可以完成事务型存储器事务。
为了处理这些溢出,利用了两个特定部件储存在物理地址140或分页存储器141中的XATT 145,和由处理器实施的XATT巡逻者132。XATT 145被XATT巡逻者132操作以实现这个功能。XATT以和页表被管理的方法类似地被管理,并且,XATT巡逻者132以和页面巡逻者类似的方式被实施,这将被讨论。应该理解,尽管XATT巡逻者132被示出成由处理器101来实施,但是,它也可以被用具有软件支持的混合方式实施。
现在参考图3,图3是根据本发明的一个实施方案的XATT 300的结构图。如先前所讨论的那样,XATT可以被储存在物理存储器或者分页存储器中。此外,XATT 300可以是在所考虑的应用程序的地址基内运行的所有事务公用的,或者可以是每个事务一个。
特别地,XATT包括5个字段原始虚拟地址(VAorig)302、新虚拟地址(VA new)306、原始物理地址(PAorig)310、新物理地址(PAnew)316和事务指针(XPTR)320。XATT 300执行两个主要功能1)跟踪溢出的读集合(例如在事务中所读的块),和2)跟踪溢出的写集合(例如在事务中所写的块)和它们被转换的地址。应该理解,XATT 300可以是单个一元结构,或者可以被分解成单独的结构。XATT自己可以被用来储存和被转换的地址对应的数据。
现在转到图4,图4根据本发明的一个实施方案,示出了获取新虚拟地址和物理地址的过程400。原始虚拟地址(VAorig)通常是被溢出的数据块的按缓存块对齐的地址(cache-block-aligned address)。当溢出被触发时,分配新虚拟地址(VAnew)(具有其自己的新物理地址(PAnew)),以便和所述原始虚拟地址对应。
特别地,如图4中所示,在块402,过程400确定是否已经检测到溢出。如果没有,则执行标准处理(块404)。但是,如果检测到了溢出,则分配和原始虚拟地址(VAorig)对应的新虚拟地址(VAnew)。此外,在块408,分配和原始物理地址(PAorig)对应的新物理地址(PAnew)。
VAnew可以由处理器通过运行时库动态地分配,或者可以在编译时由编译器静态地分配,取决于地址空间实施如何被计算机系统结构处理。使用现有的虚拟地存储器管理机制来获取原始虚拟地址(VAorig)。新虚拟地址(VAnew)属于应用程序自身的地址空间。新虚拟地址可以是XATT自身的一部分。
原始虚拟地址(VAorig)302、新虚拟地址(VAnew)306、原始物理地址(PAorig)310、新物理地址(PAnew)316的这些值,以及事务动作指针320的值(这将在稍后被详细地讨论)可以被输入XATT 300中,并被储存在物理地址140中和/或分页地址141中。
可以用两种不同的方法来实施XATT 300。在一个实施方案中,在应用程序中,可以在每一个事务一个的基础上实施XATT。当被以这种方式实施时,每一个事务具有其自己的唯一的新物理地址(PAnew)。这允许事务暂时地更新对被溢出块的任何修改而不干涉到任何其他的事务。PAnew只对正在被处理的事务是可见的。虽然这种方法允许多副本更新,但是,如果事务提交了,则原始物理地址(PAorig)需要被用新物理地址(PAnew)更新。这通过由XATT巡逻者132触发提交事务发生。
在另一个实施方案中,XATT 300可以被实施成对应用程序内的所有事务是公用的。在这种方案中,新物理地址address(PAnew)对所有的事务是公用的。因此,无需副本更新来保证正确的值是可见的,因为在任意时间,对于给定的溢出块,只有一个物理位置可以被写入。此外,所有的事务自动得知从哪个物理地址获取最近被更新的数据。
事务指针(XPTR)320指向当前“拥有”特定溢出块的事务的头(header)数据结构。特别的,如将要被详细地讨论的那样,XPTR 320可以被设置为下列模式中的一个运行、异常终止、或提交。通过查询XPTR可以获取拥有块的事务的状态。如果事务头的“状态”被设置为将其异常终止,则可以执行批量粉碎(bulk-squash)。然后,异常终止者(aborter)可以改变XPTR来指向自己。
在溢出事务提交前,要求检查XPTR 320以保证它仍拥有该事务。如果其指针被设置为异常终止它,则该事务必须重试。如果它未被异常终止,则它将自动地将其状态设置为提交。这告诉任何其他进入的线程,较早的事务已经被提交。表清除可以定期地发生。因此,XPTR 320提供了原子性地提交或异常终止具有溢出块的事务的能力。
无论使用全局XATT还是私有XATT,XPTR 320总是指向事务头。每一个事务的头可由事务型存储器机器访问。这允许活动的事务通过将事务的事务头状态设置为异常终止来异常终止即使被交换出的事务。
现在参考图5,图5是根据本发明的一个实施方案示出各种状态的例子的图,在经历利用虚拟存储器的事务型存储器事务,例如虚拟事务存储器(VTM)事务时,事务的线程可以处于所述的状态。此外,如先前所讨论的那样,VTM状态可以被储存在XATT中该事务的XPTR中。
例如,XPTR 320中的VTM状态可以被设置为运行502。运行状态指示正在执行并且其最终状态未知的事务。在另一方面,VTM状态可以被设置为异常终止504。如果状态被设置为异常终止,则它指示事务被迫异常终止的情况。异常终止状态是必要的,因为在溢出情况下,在事务最后异常终止之前存在一个时间段,因为“即刻”丢弃是不可能的。
或者,XPTR 320的VTM状态可以被设置为提交506。提交状态表示事务被成功地执行。提交状态是必要的,因为在溢出情况下,在事务状态已经被最后提交之间存在一个时间,因为“即刻”更新是不可能的。此外,VTM状态描述了事务是活动的508还是已经被交换510。活动状态508表明事务当前正在处理器上运行。在另一方面,交换状态510表明事务被上下文切换出去。
其他的VTM状态包括本地512或溢出状态514。本地状态512表明本地硬件缓冲足以完成事务。在另一方面,溢出状态514表明事务已经用尽本地硬件缓冲空间(例如本地事务型缓存124),并且,将利用虚拟存储器(例如虚拟存储器170)来完成事务型存储器事务。
现在参考图6,图6根据本发明的一个实施方案,示出了事务型存储器事务如何产生溢出请求的过程600。应该理解,与线程相关联的事务可以自己产生请求,或者从另一个与线程相关联的事务接收请求。
在块602处开始,XATT巡逻者通过XATT确定事务是否已经溢出。如先前所讨论的那样,XPTR包含本地或溢出状态。如果没有溢出,则在块604,过程结束。但是,如果事务已经溢出,则过程600在块606处确定原始虚拟地址(VAorig)是否已经被溢出和被映射。如果没有,则分配新虚拟地址和新物理地址(VAnew and PAnew)(块608)。XATT巡逻者对XATT表进行巡逻以便对其适当地更新。在任一事件中,在块610处,获取VAnew和PAnew的值。使用PAorig来保持一致性。但是,事务在其执行写的时候将更新PAnew。使用PAorig来执行冲突检测,因为它是所有其他的事务知道的地址(假设使用了唯一的XATT)。
XATT巡逻者还保证没有其他的事务已经映射到VAorig。这被在XATT巡逻期间确定。如果不存在VAorig记录,则在块620处安装新的记录。特别地,VAnew和PAnew被输入XATT。但是,如果存在原始虚拟地址记录,则在块618处,过程600根据XATT的XPTR的状态,确定当前事务应该等待或者之前的事务应该被异常终止。在任一事件中,在XATT中输入VAnew和PAnew。XATT巡逻者负责这些活动,并且能够通过直接对XPTR操作来这么做。
现在转到图7,图7是流程图,根据本发明的一个实施方案,示出了提交事务的过程700。特别地,在溢出事务提交之前,它应该检查XPTR以验证它仍由当前事务拥有(块702)(例如,通过检查它是否仍是活动的且未被交换)。接着,在块704,过程700应该检查XPTR是否被设置为“异常终止”。如果它被设置为异常终止,则在块710处,事务被异常终止。在另一方面,如果指针未被设置为异常终止,则事务应该原子性地被设置为提交。这样,XPTR提供了原子性地提交或异常终止溢出块的事务的能力。如果事务型存储器事务被提交,则除了本地事务型缓存之外,或者代替本地事务型缓存,还利用应用程序虚拟地址空间来执行事务型存储器事务。
参考图8,图8是流程图,根据本发明的一个实施方案,示出了被溢出的事务如何响应进入的请求的过程800。在块802处,接收对溢出事务的进入请求。该进入请求可以被另一个事务在正常执行期间产生,或者,当检测到冲突并且溢出事务已经被实际上提交时,可以被XATT巡逻者产生。这两个情况都要求类似的动作。因此,处理由另一个事务线程在正常执行期间产生的进入请求,当进入请求被溢出事务接收到时,溢出事务过程800在块804处确定进入请求是否与本地地址匹配或与溢出的地址匹配。如果它是本地地址,则在块810处,事务被处理器利用本地事务型缓存在本地处理。
但是,如果确定它是溢出的地址,则在块812处,XATT巡逻者巡逻XATT以保证它的确是被溢出的事务。因此,在块814处,XATT巡逻者巡逻XATT,以确定匹配。如果没有找到匹配,则在块816处,没有冲突被声明,并且,在块818处,执行被请求的事务。但是,如果存在匹配,则根据优先权,XATT巡逻者或者异常终止其事务,或者向冲突的事务发异常终止信号(块820)。
如先前所讨论的那样,当提交被溢出的事务时,XATT巡逻者首先保证XPTR中的XATT记录被更新。通过更新事务头数据结构,XATT中所有适当的溢出块的所有对应记录将被原子性地提交。只有当那成功时,被缓冲的(并且未溢出的)本地硬件块才被提交。这种两步操作(two-operation)提交保证本地硬件提交和溢出的软件提交被同步。
因为溢出相对较为罕见,所以XATT巡逻者巡逻XATT的性能代价是相当小的。而且,通过迫使所有在本地被缓冲的非溢出块被溢出到XATT中,可以处理进程迁移、定时器中断和上下文切换。
再次参考图1,根据本发明的实施方案,事务地址转换缓存(XATC)134和冲突检测过滤器(CDF)136可以被利用以提高效率,并且,当被与如先前所讨论的利用虚拟存储器的事务型存储器执行一起利用时,可以提供更快的事务转换和事务间冲突管理。
在一个实施方案中,可以利用XATC 134来缓存溢出的地址转换,以便加速转换的确定。特别地,XATC 134可以缓存一部分转换地址转换表(XATT),例如XPTR的地址。这和转换参考缓冲器(translation look aside buffer,or TLB)为页表所扮演的角色类似。
更特别地,当处理器事务已经溢出时,在执行过地址之后,处理器查看XATC 134以确定1)地址是否已经被重新映射,和2)新的转换是否必要。在原始和新物理地址上均调用一致性动作。XATC 134使巡逻XATT的需要最小。但是,在上下文切换之后,XATC134被无效。
此外,还可以利用冲突检测过滤器(CDF)136来加速确定进入请求是否与地址冲突或者请求者将与另一个事务冲突。CDF 136粗略地追踪已经被溢出的地址。CDF 136还追踪属于已经被交换出的事务的地址。这样,CDF 136对包括被交换出的事务的所有的事务是公用的。这是有必要的,因为被交换的事务不是活动地执行事务,因此,将不能为其自己确定是否发生了冲突。产生请求的事务将检查CDF 136以确定任何被交换的事务在XATT中是否具有重新映射的地址。通过这么做,可以消除每次产生请求时巡逻XATT的需要。
一种实施CDF 136的方法是通过扩展Bloom过滤器(Bloom filter)的概念。CDF 136可以被实施为计数器的阵列,其中,最大计数器值是可以溢出的位置或事务的数量。为了指示地址被溢出了,用哈希函数h1,…hk对PAorig进行哈希处理,并且,增大CDF 136中的计数器。为了去除该地址,减小相同的计数器。为了测试地址是否存在,测试那些计数器以确定它们是否全是非零的,在非零的情况下,已经检测到了潜在的冲突。
CDF 136和XATC 134都为了性能而以资源为代价大的缓存占用资源但是加速转换,而大的过滤器比较小的过滤器产生更少的错误肯定(false positive)。这种灵活性意味着同样的结构既可以被配置在资源丰富的平台上,也可以被配置在资源匮乏的平台上。
虽然已经在特定实施方案中描述了本发明的实施方案及其各种功能部件,但是,应该理解,本发明的实施方案可以被实施在硬件、软件、固件、中间件或者它们的组合中,并在其系统、子系统、部件或子部件中被利用。当被实施在软件或固件中时,本发明的元件是执行必要任务的指令/代码段。程序或代码段可以被储存在机器可读介质(例如处理器可读介质或者计算机程序产品)中,或者,通过被具体实施在载波中的计算机数据信号、被载波调制的信号,经过传输介质或通讯链路传输。机器可读介质可以包括任何可以用机器(例如处理器、计算机等)可读和可执行的形式来储存或者转移信息的介质。机器可读介质的例子包括电子电路、半导体存储器设备、ROM、闪存、可擦除可编程ROM(ERROM)、软盘、紧致盘CD-ROM、光盘、硬盘、光纤介质、射频(RF)链路等。计算机数据信号可以包括任何能够通过例如电子网络通道、光纤、空气、电磁、射频链路、条码卡等传输介质传播的信号。代码段可以通过例如因特网、企业内部互联网的网络被下载。
此外,虽然已经参考说明性实施方案描述了本发明的实施方案,但是,不希望以限制性的方式来理解这些描述。说明性实施方案的各种修改,以及对本领域熟练技术人员来说清晰的本发明的其他实施方案,被认为位于本发明的精神和范围之内。
权利要求
1.一种装置,包括处理器,所述处理器包括本地事务型缓存;以及资源管理器,所述资源管理器对来自请求线程的事务型存储器事务请求做出响应,以便确定所述本地事务型缓存是否能够容纳所述事务型存储器事务请求,并且,如果可以,则所述本地事务型缓存执行所述事务型存储器事务;其中,如果所述本地事务型缓存不能容纳所述事务型存储器事务请求,则所述事务型存储器事务请求的数据被溢出到与所述请求线程相关联的应用程序虚拟地址空间中。
2.如权利要求1所述的装置,还包括事务地址表转换表(XATT)巡逻者,其中,由所述XATT巡逻者管理将数据溢出到所述应用程序虚拟地址空间中。
3.如权利要求2所述的装置,还包括事务地址表转换表(XATT),其中,所述XATT巡逻者通过操作储存在物理存储器中的所述XATT来管理数据的溢出。
4.如权利要求3所述的装置,其中,当检测到溢出时,所述XATT巡逻者在所述XATT中分配和所述被溢出的事务对应的新虚拟地址和新物理地址。
5.如权利要求3所述的装置,其中,所述XATT表包括事务动作指针(XPTR),所述事务动作指针包括当前事务的状态。
6.如权利要求5所述的装置,其中,当前事务的所述状态是本地或溢出其中之一。
7.如权利要求5所述的装置,其中,当前事务的所述状态是活动或交换其中之一。
8.如权利要求5所述的装置,其中,当前事务的所述状态是运行、异常终止或提交其中之一。
9.如权利要求5所述的装置,其中,所述XATT巡逻者检查所述XATT的所述XPTR,以验证被溢出的事务被设置为活动状态,并确定所述被溢出的事务是否被设置为异常终止状态,并且,如果它被设置为异常终止状态,则所述被溢出的事务被异常终止。
10.如权利要求9所述的装置,其中,如果所述被溢出的事务未被设置为异常终止状态,则所述被溢出的事务被提交,并且,利用所述应用程序虚拟地址空间来执行所述事务型存储器事务。
11.一种方法,包括确定本地事务型缓存是否能够容纳来自请求线程的事务型存储器事务请求;如果所述本地事务型缓存能够容纳所述事务型存储器事务请求,则利用本地事务型缓存执行所述事务型存储器事务请求;以及如果所述本地事务型缓存不能够容纳所述事务型存储器事务请求,则将所述事务型存储器事务请求的数据溢出到与所述请求线程相关联的应用程序虚拟地址空间中。
12.如权利要求11所述的方法,还包括利用事务地址表转换表(XATT)巡逻者管理将数据溢出到所述应用程序虚拟地址空间中。
13.如权利要求12所述的方法,其中,所述XATT巡逻者通过操作储存在物理存储器中的事务地址表转换表(XATT)来管理数据的溢出。
14.如权利要求13所述的方法,其中,当检测到溢出时,还包括在所述XATT中分配和所述被溢出的事务对应的新虚拟地址和新物理地址。
15.如权利要求13所述的方法,还包括将当前事务的状态分配给所述XATT。
16.如权利要求15所述的方法,其中,当前事务的所述状态是本地或溢出其中之一。
17.如权利要求15所述的方法,其中,当前事务的所述状态是活动或交换其中之一。
18.如权利要求15所述的方法,其中,当前事务的所述状态是运行、异常终止或提交其中之一。
19.如权利要求15所述的方法,还包括检查所述XATT以验证被溢出的事务被设置为活动状态;以及确定所述被溢出的事务是否被设置为异常终止状态,并且,如果它被设置为异常终止状态,则异常终止所述被溢出的事务。
20.如权利要求19所述的方法,其中,如果所述被溢出的事务未被设置为异常终止状态,则还包括提交所述被溢出的事务;以及利用所述应用程序虚拟地址空间来执行所述事务型存储器事务。
21.一种机器可读介质,具有储存在其上的指令,当所述指令被机器执行时,引起所述机器执行下列操作,包括确定本地事务型缓存是否能够容纳来自请求线程的事务型存储器事务请求;如果所述本地事务型缓存能够容纳所述事务型存储器事务请求,则利用所述本地事务型缓存执行所述事务型存储器事务请求;以及如果所述本地事务型缓存不能够容纳所述事务型存储器事务请求,则将所述事务型存储器事务请求的数据溢出到与所述请求线程相关联的应用程序虚拟地址空间中。
22.如权利要求21所述的机器可读介质,还包括用于引起所述机器利用事务地址表转换表(XATT)巡逻者,管理将数据溢出到所述应用程序虚拟地址空间中的指令。
23.如权利要求22所述的机器可读介质,其中,所述XATT巡逻者通过操作储存在物理存储器中的事务地址表转换表(XATT)来管理数据的溢出。
24.如权利要求23所述的机器可读介质,还包括用于当检测到溢出时引起所述机器在所述XATT中分配和所述被溢出的事务对应的新虚拟地址和新物理地址的指令。
25.如权利要求24所述的机器可读介质,还包括用于引起所述机器将当前事务的状态分配给所述XATT的指令。
26.如权利要求25所述的机器可读指令,其中,当前事务的所述状态是本地或溢出其中之一。
27.如权利要求25所述的机器可读指令,其中,当前事务的所述状态是活动或交换其中之一。
28.如权利要求25所述的机器可读指令,其中,当前事务的所述状态是运行、异常终止或提交其中之一。
29.如权利要求25所述的机器可读指令,还包括用于引起所述机器执行下列操作的指令检查所述XATT以验证被溢出的事务被设置为活动状态;以及确定所述被溢出的事务是否被设置为异常终止状态,并且,如果它被设置为异常终止状态,则异常终止所述被溢出的事务。
30.如权利要求25所述的机器可读介质,其中,如果所述被溢出的事务未被设置为异常终止状态,则还包括用于引起所述机器执行下列操作的指令提交所述被溢出的事务;以及利用所述应用程序虚拟地址空间来执行所述事务型存储器事务。
31.一种计算机系统,包括处理器,它包括本地事务型缓存;数据库;以及资源管理器,所述资源管理器对来自请求线程的事务型存储器事务请求做出响应,所述请求来自应用程序接口(API)并在数据库中请求访问存储器,所述资源管理器确定所述本地事务型缓存是否能够容纳所述事务型存储器事务请求,并且,如果可以,则所述本地事务型缓存执行所述事务型存储器事务;其中,如果所述本地事务型缓存不能容纳所述事务型存储器事务请求,则所述事务型存储器事务请求的数据被溢出到与所述请求线程相关联的应用程序虚拟地址空间中。
32.如权利要求31所述的计算机系统,还包括事务地址表转换表(XATT)巡逻者,其中,由所述XATT巡逻者管理将数据溢出到所述应用程序虚拟地址空间中。
33.如权利要求32所述的计算机系统,还包括事务地址表转换表(XATT),其中,所述XATT巡逻者通过操作储存在物理存储器中的所述XATT来管理数据的溢出。
34.如权利要求33所述的计算机系统,其中,当检测到溢出时,所述XATT巡逻者在所述XATT中分配和所述被溢出的事务对应的新虚拟地址和新物理地址。
35.如权利要求34所述的计算机系统,其中,所述XATT表包括事务动作指针(XPTR),所述事务动作指针包括当前事务的状态。
36.如权利要求35所述的计算机系统,其中,当前事务的所述状态是本地或溢出其中之一。
37.如权利要求35所述的计算机系统,其中,当前事务的所述状态是活动或交换其中之一。
38.如权利要求35所述的计算机系统,其中,当前事务的所述状态是运行、异常终止或提交其中之一。
39.如权利要求35所述的计算机系统,其中,所述XATT巡逻者检查所述XATT的所述XPTR,以验证被溢出的事务被设置为活动状态,并确定所述被溢出的事务是否被设置为异常终止状态,并且,如果它被设置为异常终止状态,则所述溢出的事务被异常终止。
40.如权利要求39所述的计算机系统,其中,如果所述被溢出的事务未被设置为异常终止状态,则所述被溢出的事务被提交,并且,利用所述应用程序虚拟地址空间来执行所述事务型存储器事务。
全文摘要
本发明的实施方案涉及利用虚拟存储器的事务型存储器执行。处理器包括本地事务型缓存和资源管理器。资源管理器对来自请求线程的事务型存储器事务请求做出响应,确定本地事务型缓存是否能够容纳事务型存储器事务请求,并且,如果可以,则本地事务型缓存执行事务型存储器事务。但是,如果本地事务型缓存不能容纳事务型存储器事务请求,则事务型存储器事务请求的数据被溢出到和请求线程相关联的应用程序的虚拟地址空间中。
文档编号G06F12/08GK1959641SQ20051010780
公开日2007年5月9日 申请日期2005年9月30日 优先权日2004年9月30日
发明者拉维·拉吉瓦尔, 莫里斯·赫利希 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1