用于限制对版本存储资源使用的方法和系统的制作方法

文档序号:6649399阅读:105来源:国知局
专利名称:用于限制对版本存储资源使用的方法和系统的制作方法
技术领域
本发明一般涉及计算机,尤其涉及资源使用。
背景技术
每次客户机启动与诸如数据库的版本存储的一事务,就要消耗一定数量的资源。即使在该事务提交或放弃后,这些资源仍可能继续被消耗,直到先于该事务启动的所有事务也都已经结束。在诸如文件复制系统(FRS)的高频率更改版本存储中,或在相比并发的事务含有少量资源的版本存储中,在进行中的事务所需的资源可以超过可用的资源数量。需要一种用于限制对版本存储资源使用的方法和系统。

发明内容
本发明简要地提供了一种用于限制对版本存储的资源使用的方法和系统。限制指示了可以由正在进行的事务所消耗的资源的总量。剩余资源的累计被维护。在新的事务开始之前,作出关于是否存在足够的剩余资源来完成新的事务的判断。如果是的,那么该事务开始并调整累计。如果不是,那么该事务等待直到有更多资源可用。当一个事务完成时,如果它是最老的进行中的事务,那么释放资源。否则,与该事务关联的资源不被释放直到在该事务前开始的所有事务都已经完成。这保证了,版本存储的客户机不会超过可以由进行中的事务所消耗的资源的限制。
当结合附图,由下文具体实施方式
,其它优点会变得明显,附图中


图1是表示可在其中包含本发明的计算机系统的框图;图2是根据本发明的多个方面,表示可使用来实现本发明的示例性版本存储的框图;图3是示出根据本发明的多个方面的示例性数据机构的框图;图4是根据本发明的多个方面,一般表示为启动一个事务在获取资源中可能发生的动作的流程图;图5是根据本发明的多个方面,一般表示在一个事务完成后释放资源之前可能发生的动作的流程图;图6是根据本发明的多个方面,表示可在其中实现本发明的示例性环境的框图;图7是根据本发明的多个方面,表示可在其中实现本发明的另一个示例性环境的框图。
具体实施例方式
示例性操作环境图1示出了可在其上实现本发明的合适的计算系统环境100的示例。计算系统环境100只是合适的计算环境的一个示例,并不旨在对本发明的使用范围或功能提出任何限制。也不应该把计算环境100解释为对示例性操作环境100中示出的任一组件或其组合有任何依赖性或要求。
本发明可用众多其它通用或专用计算系统环境或配置来操作。适合在本发明中使用的公知的计算系统、环境和/或配置的示例包括,但不限于,个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微控制器的系统、机顶盒、可编程消费者电子产品、网络PC、小型机、大型机、包含上述系统或设备中的任一个的分布式计算机环境等。
本发明可在诸如由计算机执行的程序模块等的计算机可执行指令的通用语境下描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定任务或实现特定抽象数据类型。本发明也可以在分布式计算环境下实现,其中任务由通过通信网络连接的远程处理设备执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。
参考图1,用于实现本发明的一个示例性系统包括计算机110形式的通用计算设备。计算机110的组件可以包括,但不限于,处理单元120、系统存储器130和将包括系统存储器在内的各种系统组件耦合至处理单元120的系统总线121。系统总线121可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构中的任一种的局部总线。作为示例,而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、扩展的ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也被称为Mezzanine总线)。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是能够被计算机110访问的任何可用介质,且包括易失性和非易失性介质、可移动和不可移动介质。作为示例,而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由计算机110访问的任何其它介质。通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语“已调制数据信号”指的是这样一种信号,其一个或多个特征以在信号中编码信息的方式被设定或更改。作为示例,而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。上述中任一个的组合也应包括在计算机可读介质的范围之内。
系统存储器130包括易失性或非易失性存储器形式的计算机存储介质,诸如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包含有助于诸如启动时在计算机110中元件之间传递信息的基本例程,它通常存储在ROM 131中。RAM 132通常包含处理单元120可以立即访问和/或目前正在操作的数据和/或程序模块。作为示例,而非限制,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可以包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图1示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器141,从可移动、非易失性磁盘152中读取或向其写入的磁盘驱动器151,以及从诸如CD ROM或其它光学介质等可移动、非易失性光盘156中读取或向其写入的光盘驱动器155。可以在示例性操作环境下使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括,但不限于,盒式磁带、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器141通常由不可移动存储器接口,诸如接口140连接至系统总线121,磁盘驱动器151和光盘驱动器155通常由可移动存储器接口,诸如接口150连接至系统总线121。
以上描述和在图1中示出的驱动器及其相关联的计算机存储介质为计算机110提供了对计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同或不同。操作系统144、应用程序145、其它程序模块146和程序数据147在这里被标注了不同的标号是为了说明至少它们是不同的副本。用户可以通过输入设备,诸如键盘162和定点设备161(通常指鼠标、跟踪球或触摸垫)向计算机110输入命令和信息。其它输入设备(未示出)可以包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、手持PC或其它书写板的触敏屏等。这些和其它输入设备通常由耦合至系统总线的用户输入接口160连接至处理单元120,但也可以由其它接口或总线结构,诸如并行端口、游戏端口或通用串行总线(USB)连接。监视器191或其它类型的显示设备也经由接口,诸如视频接口190连接至系统总线121。除监视器以外,计算机也可以包括其它外围输出设备,诸如扬声器197和打印机196,它们可以通过输出外围接口195连接。
计算机110可使用至一个或多个远程计算机,诸如远程计算机180的逻辑连接在网络化环境下操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它共用网络节点,且通常包括上文相对于计算机110描述的许多或所有元件,尽管在图1中只示出存储器存储设备181。图1中所示逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其它网络。这样的网络环境在办公室、企业范围计算机网络、内联网和因特网中是常见的。
当在LAN网络环境中使用时,计算机110通过网络接口或适配器170连接至局域网171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172或用于通过诸如因特网等WAN 173建立通信的其它装置。调制解调器172可以是内部或外部的,它可以通过用户输入接口160或其它合适的机制连接至系统总线121。在网络化环境中,相对于计算机110所描述的程序模块或其部分可以存储在远程存储器存储设备中。作为示例,而非限制,图1示出了远程应用程序185驻留在存储器设备181上。可以理解,所示的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其它手段。
限制消耗的资源图2是根据本发明的多个方面,表示可使用来实现本发明的示例性版本存储的框图。该版本存储包括,数据库205、事务日志210和为众多事务消耗的资源215-217。消耗的资源215-217可以部分或全部存储在事务日志210中。每一事务的下标指示了事务开始的时间顺序。例如,事务T1在事务T3之前开始的事务T2之前开始。
在版本存储中,每次客户机(未示出)使用数据库205启动一个事务,创建了数据库的“快照”。逻辑上,“快照”是数据库在时间上特定点的副本。事务日志可以用来跟踪从启动该事务的时刻开始的数据库中的差异(例如,增量),使得启动事务的时刻的数据库状态可以从事务日志中获得,而不是当创建快照时创建数据库的整个新的副本。
事务是原子的、一致的、独立的且持久的。在处理一事务的过程中,可能发生对多个记录的修改。可以复制将被修改的记录,且可修改副本,而不是直接在数据库中修改记录。数据库的其它客户机在该事务提交之前不能够看到这些修改。当该事务提交时,使用一个原子操作传送这些修改至数据库。如果放弃了该事务,那么丢弃修改,且不将修改传送给数据库。修改可以被存储在事务日志210中至少直到该事务被提交或放弃。
在处理事务的过程中,要修改的记录可以被复制到事务日志210中。这些被复制的记录消耗事务日志210中的资源。如果事务在大小上都是固定的,那么每一事务消耗的资源数量也可以是固定的。如果事务在大小上可以变化,那么每一事务消耗的资源数量也可以变化。
可以以其它方式实现版本存储,但是即使在那样的版本存储中,当事务在进行中时消耗资源,即使在该事务提交或放弃后也可能继续消耗资源。版本存储可以以多种方式实现而不背离本发明的精神或范围。
可以同时进行多于一个的事务。与进行中的事务相关联的资源不能被返回来重新使用直到在该事务之前启动的所有事务完成(即,提交或放弃)。这由事务215-217所消耗的资源之间的依赖箭头示出。例如,如果T3在T1进行时发生,然后T3提交,由T3217消耗的资源不能够被释放直到由T1215消耗的资源被释放。
更正式地,给定以时间顺序发生的事务T1到Tn(即,T1先于T2,T2先于T3,以此类推),令δ1到δn表示由每一事务消耗的资源的数量。那么,∑δi(其中,1≤i≤n)是在当事务T1到Tn进行中的任何时刻消耗的资源总量。
然而,当事务Tk完成时,能够被释放的资源的数量可以是1.0,如果存在一个未结束的事务Ti使得i<k;或者2.给定j,使得j>k且Tj是一个进行中的事务,那么可以被释放的资源的数量是对所有i使得(k<i<j)且(Ti已经完成)的∑δi。注意到,j可以指示没有仍在进行中的在Tk之后开始的事务。j可以通过被设为无限大或指示最大值的一个数字来指示这个。
规定上述释放资源的条件的另一种方式是,当Tk完成时没有资源可以释放除非Tk是最老的事务(即,没有i<k使得Ti是在进行中的事务)。
为了避免需要比在任何给定时间可以被消耗的资源总量更多的资源,版本存储的一个客户机可以被分配一个资源限制,超过该限制客户机不能进行。客户机可以确定启动一个事务是否会超过该限制,并阻塞(例如,等待)直到有足够的资源是可用的来保证客户机可以完成该客户机启动的任何事务而不超过可以被消耗的资源的总量。在任何给定时刻可以由一个客户机消耗的资源的总量以后往往被称为Θ。
通过促成客户机阻塞直到资源变成可用来限制在进行中的事务的数量,可以使用下列三个原语InitializeResource(p)、AcquireResource(T,δ)以及ReleaseResource(T)。
InitializeResource(ρ)可以在启动第一个事务之前的任何时刻被调用。当调用InitializeResource(ρ)时,消耗的资源的总量(以后用σ表示)被分配给当没有事务进行时残留的消耗的资源的数量。例如,可能存在与诸如创建数据结构等维护版本存储相关联的开销。该开销可以由InitializeResource(ρ)说明,其中ρ等于当没有事务进行时消耗的资源数量。除非σ<Θ,没有事务可以被允许开始。
AcquireResource(T,δ)可以在启动以T表示的事务之前被调用,其中T是由调用者分配给每一事务的存储器中的唯一对象。AcquireResource(T,δ)检查条件(δ+σ)<=Θ,且如果该条件为真,那么它返回,令调用者启动消耗资源总计为δ的新事务。如果该条件为假,那么AcquireResource(T,δ)阻塞直到上述条件被满足,将σ分派给δ+σ,然后返回。
ReleaseResouree(T)可以在事务T完成后被调用。ReleaseResource(T)可以被实现为一个无阻塞的原语。
在本发明的一个实施例中,可以选择δ为每一事务中预计的更新的数量。平均起来,该数量可以结果是一个常数。在这种情况下,δ可以被选择为1或其它任何常数只要Θ是按照δ来计算的。如果δ随事务变化,δ可以被表示为基线资源数量的倍数。例如,调用者可以知道它将会修改版本存储中的四个记录,并可以传递一个δ是当仅修改一个记录时传递过的δ的四倍。
在本发明的另一个实施例中,δ可以以信用的形式为特征,其中总可用信用等于Θ,而δ是由调用者为每一事务计算的。
传统的信号可以被用来跟踪资源的使用。信号是能够被初始化为一个整数值并提供下列三种操作的变量I(信号,δ)该操作初始化信号为δ;P(信号,δ)该操作阻塞直到信号>=δ,然后在返回之前从信号中减去δ;V(信号,δ)该操作将δ加到信号上,唤醒阻塞在该信号上的任何线程,然后返回。
上述每一操作都是原子的。理想上,V唤醒和δ能够满足的精确地一样多的线程。在多个Windows操作系统中,这些操作可以分别由CreateSemaphore(),WaitForSingleObject(),and ReleaseSemaphore()来实现。其它操作系统可以使用其它调用来实现这些操作,而不背离本发明的精神或范围。
给定上述原语,σ可以被实现为一个初始化为Θ(允许消耗的资源总量)的信号。AcquireResource()可以被实现为产生P(σ,δ)。这保证了消耗的资源总量会<=Θ。
ReleaseResource()可以不向信号发信号V(σ,δ),如果存在比T老的进行中的事务。为了确定是否存在更老的进行中的信号,可以利用如图3中所示的双向链表300。当链表中仅包含头节点305和空节点315时,链表300为空。链表的头是由头节点305连接的第一个节点(即,节点310)只要它不是空节点315。内部节点310-312的每一个可以对应于一个事务,且可以包括标识符T和由该事务消耗的资源的数量。
在任何给定点上,该双向链表可以包括,头TiTjTk...空,其中事务以时间顺序从左往右排列。可以实现返回由T消耗的资源数量的函数。以后,由T消耗的资源的数量往往可以称作Δ(T)。为了存储与每一节点相关联的资源的数量,可以在每一节点中储备存储器。
也可以实现保证对链表互斥的锁。某些示例性的锁包括,旋转锁、互斥、同步化事件等。然而,可以认识到,可以使用保证对链表互斥的任何锁,而不背离本发明的精神和范围。锁可以被用来预防链表在链表插入、遍历或查找过程中被另一个进程修改。在本文档中,这些锁原语往往称为AcquireListLock()和ReleaseListLock()。
用于为一个事务获取资源的一个示例性算法如下AcquireResource(T,δ){If(δ>Θ)return error;//This request can never be//satisfied(这个请求永远不能够被满足)Obtain memory for T;InitializeΔ(T)toδ;P(σ,δ); //this may block(可能阻塞)AcquireListLock();Insert T at the tail of the list;ReleaseListLock();return;}上述算法在启动一个事务之前被调用,并在图4中描述,图4是根据根发明的多个实施例,一般表示为启动一个事务而获取资源中可能发生的动作的流程图。
在框405处,过程开始。在框407处,作出关于是否δ>Θ的判断。如果是,那么过程沿分支到带一个错误返回的框412处。如果不是,过程沿分支到框410处。δ>Θ指示该事务可能潜在地使用比允许使用的资源的总量更多的资源。在框412处返回一个错误,而不是永久地阻塞来等待有足够的资源成为可用(不会发生)。
在框410处,为节点获取存储器。在框415处,指示事务T潜在需要的资源的节点中的一个变量被初始化为δ。在框420处,执行P(σ,δ),可能会阻塞(直到更多的资源成为可用)。在框425处,在链表上获得一个锁。在框430处,该节点被插入链表的尾部。在框435处,释放该锁。在框440处,该过程带着一个成功的指示返回。
图5是根据本发明的多个方面,一般表示在一个事务完成后释放资源之前可能发生的动作的流程图。该过程在提交或放弃一个事务之前被调用。在框505处,该过程开始。在框510处,在链表上获得一个锁。在框512处,与刚完成的事务关联的节点(即T)被设置。在框515处,作出关于T是否是链表头的判断。记住,如果头节点指向T,那么T是链表的头。如果T是链表的头,那么过程沿分支到框520处;否则,过程沿分支到框525处。
在框520处,由T指示的消耗的资源被添加到信号上,且阻塞在该信号上的所有线程被唤醒。注意,当与该节点直接右边的节点相关联的事务完成时,由T指示的消耗的资源可以向上调整(例如,见框525和530)。
在框525和530处,做好将由T指示的资源添加到T直接左边的节点(即,T’)的准备。注意,T’保证存在,因为T不是链表的头。在框525处,T’被设置。在框530处,由T指示的消耗的资源被添加至由T’表示的消耗的资源。
在框535处,将T从链表中移除。在框540处,释放链表上的锁。在框545处,该过程返回。
按照前述的原语,该算法可以如下表示ReleaseResource(T){AcquireListLock();////If T is the oldest transaction,then we can release its//resources completely(如果T是最老的事务,那么我们可以完全释放其资源)//if(T is the head of the list){V(σ,Δ(T));//release all resources and wake up any//threads that are blocked(释放所有资源并唤醒阻塞的任何线程)}else{////Since there are older transactions outstanding,//T may not release its resources//until all the outstanding transactions are finished.(因为存在未完成的更老的事务,T不能释放其资源直到该未完成的事务完成。)//T′=LeftLink(T);////LeftLink()obtains the transaction that is essentially//the immediately preceding,temporally,transaction of//T.This is guaranteed non-NIL since T is not the head//of the list.(LeftLink()获取基本上T的时间上直接在前的事务。这保证是非空的,因为T不是头)//Δ(T′)←Δ(T′)+Δ(T);//propagate the resources//consumed up the chain(将消耗的资源沿链向前传送)}Remove(T)from the list;Free memory for T;ReleaseListLock();return;}
尽管,图3-5是参考双向链表描述的,这样可以获得对获取/释放原语的O(1)的实现,可以认识到,可以使用其它的数据结构包括,散列表、单向链表、数组、层次结构等。实际上,可以使用能够维护事务时间顺序的任何数据结构,而不背离本发明的精神或范围。
图6是根据本发明的多个方面,表示可在其中实现本发明的示例性环境的框图。该环境包括客户机605、服务器610和版本存储615。在本发明的一个实施例中,当服务器610接收到版本存储的请求,并执行维护版本存储615的必要措施时,结合图4和5描述的过程在客户机605上执行。在本发明的该实施例中,客户机使用来限制其事务的资源限制可以由客户机、服务器、专用程序、计算机管理员等来选择。在本发明的一个实施例中,客户机605可以查询服务器610来确定服务器610可以向客户机605贡献多少资源而不显著地降低对其它客户机的性能。注意,客户机605、服务器610和版本存储615中的任何可以被一起包括在一台机器上或可以在分开的机器上,而不背离本发明的精神或范围。
图7是根据本发明的多个方面,表示可在其中实现本发明的另一个示例性环境的框图。该环境包括服务器705、版本存储710、和四个客户机715-718。在如图7所示的实施例中,客户机715-718中的每一个可试图来使用版本存储710来开启事务。为了保证客户机的联合动作不会引起在执行中的事务消耗的资源超过一个全局限制,每一客户机可以被分派一个限制,使得即使所有客户机达到其限制,也不会超过全局限制。对每一客户机的资源限制可以由客户机、服务器、客户机之间的协商、专用程序、计算机管理员等确定。为每一客户机确定资源限制可以在该客户机使用版本存储参与事务之前发生,且可以动态地修改。例如,如果客户机715经常阻塞而客户机716至多消耗一定数量的资源,那么与客户机716相关联的资源限制可以被降低而分派给客户机715的资源限制可以增加。
正如从前述具体实施方式
中可以看到,提供了用于限制版本存储资源使用的方法和系统。尽管本发明是对多个修改和替换结构敏感的,其中某些示出的实施例在附图中显示并如上详细描述。然而,应该理解,不存在将本发明限制在所揭示的特定形式的意图,而正相反,旨在包含属于本领域的精神和范围内的所有修改、替换构造和等价物。
权利要求
1.一种含有计算机可执行指令的计算机可读介质,包括跟踪在完成与版本存储相关的多个事务中潜在会使用的资源数量;在启动一个新事务之前,确定是否有足够的资源可用于完成所述新事务;如果有足够的资源可用,则启动所述新事务;以及如果没有足够的资源可用,则等待直到有更多的资源可用。
2.如权利要求1所述的计算机可读介质,其特征在于,所述多个事务中的至少一个是在进行中的。
3.如权利要求1所述的计算机可读介质,其特征在于,还包括对所述多个事务潜在会使用的资源数量设置限制。
4.如权利要求1所述的计算机可读介质,其特征在于,所述版本存储在每一事务启动之前创建数据库的一个新快照。
5.如权利要求4所述的计算机可读介质,其特征在于,所述快照在日志文件中作为差异来维护。
6.如权利要求4所述的计算机可读介质,其特征在于,所述数据库在创建所述新快照之前含有第一状态,且所述第一状态是可从所述日志文件中连同所述数据库的第二状态一起创建的。
7.如权利要求1所述的计算机可读介质,其特征在于,所述等待直到有更多的资源可用包括阻塞一个线程直到资源可用。
8.如权利要求1所述的计算机可读介质,其特征在于,还包括获取跟踪在完成与版本存储相关的多个事务中潜在会使用的资源的数量的数据结构的锁;修改所述数据结构以包含关于所述新事务的信息;以及之后释放所述锁。
9.如权利要求8所述的计算机可读介质,其特征在于,所述数据结构包括一双向链表,且其中,修改所述数据结构以包括关于所述新事务的信息包括添加一个节点至所述数据结构。
10.如权利要求8所述的计算机可读介质,其特征在于,所述数据结构将所述事务按时间排序。
11.如权利要求1所述的计算机可读介质,其特征在于,还包括完成一个事务,且如果所述事务在仍在进行中的其它事务中的任何一个之前启动,那么修改在完成所述多个事务时潜在使用的资源的数量。
12.如权利要求1所述的计算机可读介质,其特征在于,还包括完成一个事务,且如果所述事务在仍在进行中的其它事务中的任何一个之后启动,那么不修改潜在使用的资源的数量。
13.如权利要求12所述的计算机可读介质,其特征在于,还包括修改与进行中的前一事务相关联的数据来添加已经完成的事务潜在使用的资源的数量。
14.如权利要求13所述的计算机可读介质,其特征在于,还包括完成所述前一事务,并且修改潜在使用的资源数量来释放由所述数据指示的一些资源。
15.如权利要求1所述的计算机可读介质,其特征在于,跟踪在完成与版本存储相关的多个事务时潜在会使用的资源数量包括在一个信号上阻塞。
16.一种用于限制资源使用的方法,包括设置指示可以由进行中的事务消耗的资源总量的限制;维护指示仍可由任何新的事务使用的剩余资源量的累计;以及基于所述累计和完成一个新事务潜在所需的资源的需求数量,来确定是否存在足够的资源来完成所述的新事务。
17.如权利要求16所述的方法,其特征在于,还包括,将所述累计初始化为所述限制。
18.如权利要求16所述的方法,其特征在于,还包括,如果存在足够的资源来启动所述新事务,则启动所述新事务。
19.如权利要求16所述的方法,其特征在于,确定是否存在足够的资源来启动所述的新事务包括从所述累计中减去所需资源的数量来获取一个结果,并判断所述结果是否大于或等于0。
20.如权利要求16所述的方法,其特征在于,还包括,获取一数据结构上的锁,并修改所述数据结构。
21.如权利要求20所述的方法,其特征在于,所述数据结构是根据进行中的事务的启动时间排序的双向链表。
22.如权利要求20所述的方法,其特征在于,还包括,确定所述双向链表中与一刚完成的事务相关联的节点是否在所述双向链表的头部。
23.如权利要求22所述的方法,其特征在于,如果所述节点在所述双向链表的头部,那么将所述累计增加由所述节点指示的数量。
24.如权利要求22所述的方法,其特征在于,如果所述节点不是在所述双向链表的头部,那么将由所述节点指示的资源添加到所述双向链表中在所述节点之前的另一节点,并将所述节点移除。
25.如权利要求16所述的方法,其特征在于。还包括,在一个事务完成之后增加所述累计,并唤醒与由于没有足够的资源来启动而被阻塞的新事务相关联的任何线程。
26.一种用于限制资源使用的系统,包括第一客户机,它被安排成与一版本存储交互,其中,所述第一客户机还被安排成执行动作,包括获取指示作为所述第一客户机使用所述版本存储参与事务的结果可以被消耗的资源的总量的第一限制;维护指示仍然可由所述第一客户机启动的任何新事务使用的资源的剩余数量的第一总计;以及基于所述第一总计和完成一新事务潜在需要的资源的需求数量,确定是否存在足够的资源来启动所述新事务。
27.如权利要求26所述的系统,其特征在于,还包括第二客户机,它被安排成与所述版本存储交互,其中,所述第二客户机还被安排成执行动作,包括获取指示作为所述第二客户机使用所述版本存储参与事务的结果可以被消耗的资源的总量的第二限制;维护指示仍然可由所述第二客户机启动的任何新事务使用的资源的剩余数量的第二总计;以及基于所述第二总计和完成一新事务潜在需要的资源需求数量,确定是否存在足够的资源来启动所述新事务。
28.如权利要求27所述的系统,其特征在于,所述第一和第二限制是通过客户机之间的协商获得的。
29.如权利要求27所述的系统,其特征在于,所述第一和第二限制是通过每一客户机上的系统设置获得的。
30.如权利要求27所述的系统,其特征在于,所述第一和第二限制是通过用户输入获得的。
31.如权利要求27所述的系统,其特征在于,还包括,被安排成周期性地执行并基于所述第一和第二总计的历史调整第一和第二限制的程序。
32.如权利要求27所述的系统,其特征在于,还包括,被安排成提供对所述版本存储的访问的服务器。
33.如权利要求27所述的系统,其特征在于,每一客户机还被安排成与所述服务器通信,以设置指示可以由每一客户机消耗的资源总量的每一客户机的限制。
34.如权利要求26所述的系统,其特征在于,获取所述第一限制包括从第一客户机上的存储中检索第一限制。
35.如权利要求26所述的系统,其特征在于,获取所述第一限制包括与服务器通信。
36.如权利要求26所述的系统,其特征在于,所述版本存储用于文件复制系统的。
全文摘要
用于限制对版本存储的资源使用的方法和系统。限制指示了可以由进行中的事务所消耗的资源的总量。维护了剩余资源的数量的累计。在一个新的事务启动之前,作出关于是否存在剩余的足够资源来完成该新的事务的判断。如果是,那么该事务启动且调整该累计。如果否,那么该事务等待直到更多资源可用。当一个事务完成时,如果它是进行中的最老的事务,那么释放资源。否则,与该事务相关联的资源不被释放直到在该事务之前启动的所有事务完成。这保证了版本存储的一个客户机不会超过可由进行中的事务所消耗的资源的限制。
文档编号G06F9/50GK1766843SQ20051010855
公开日2006年5月3日 申请日期2005年9月30日 优先权日2004年10月7日
发明者R·普迪佩迪 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1