CN101495976B - 用于直接更新软件事务存储器的方法和系统 - Google Patents

用于直接更新软件事务存储器的方法和系统 Download PDF

Info

Publication number
CN101495976B
CN101495976B CN200680026687XA CN200680026687A CN101495976B CN 101495976 B CN101495976 B CN 101495976B CN 200680026687X A CN200680026687X A CN 200680026687XA CN 200680026687 A CN200680026687 A CN 200680026687A CN 101495976 B CN101495976 B CN 101495976B
Authority
CN
China
Prior art keywords
thread
shared storage
storage position
affairs
registration record
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
Application number
CN200680026687XA
Other languages
English (en)
Other versions
CN101495976A (zh
Inventor
T·L·哈里斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN101495976A publication Critical patent/CN101495976A/zh
Application granted granted Critical
Publication of CN101495976B publication Critical patent/CN101495976B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99938Concurrency, e.g. lock management in shared database
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99939Privileged access

Abstract

一种事务存储器编程接口允许线程在事务内直接并安全地访问一个或多个共享存储器位置,同时维护控制结构来管理一个或多个其它并发线程对这些相同位置的存储器访问。该线程访问的每一存储器位置与一登记记录相关联,并且每一线程维护其存储器访问的事务日志。在一事务内,读操作直接在存储器位置上执行,而写操作直接在存储器位置而非某一中间缓冲区上尝试。该线程可检测存储器位置的登记记录与线程的事务日志之间的不一致性,以确定事务内的存储器访问是否不可靠以及是否应重试事务。

Description

用于直接更新软件事务存储器的方法和系统
技术领域
本发明一般涉及计算机存储器操作,尤其涉及直接更新软件事务存储器。 
背景技术
多线程进程的多个线程在并发执行期间共享公共存储器位置是常见的。因此,多线程化程序的两个不同线程可读取并更新可由该程序访问的同一存储器位置。然而,必须仔细地确保当一个线程正处于依赖于共享存储器位置的值的操作序列当中时另一线程不会修改该值。 
例如,假定一程序正在访问两个不同软件对象的内容,其中每一对象表示一不同银行帐户中的钱币数。最初,第一帐户的数量为$10,储存在存储器地址A1处,而第二帐户的数量为$200,储存在存储器地址A2处。银行程序的第一线程被编码为将$100从A2传输到A1,而第二线程被编码为计算两个帐户中的总资金量。第一线程可通过将$100加到A1的内容开始,将其更新为$110,然后继续从A2的内容中减去$100,从而将其更新为$100。然而,如果第二线程在这两个操作之间执行,则第二线程可能计算两个帐户的不正确的总量$310而非正确的总量$210。 
软件事务存储器提供了一种编程抽象,通过该编程抽象,线程可安全地执行一系列共享存储器访问,从而允许线程在没有来自另一线程的干扰的情况下完成其事务。因此,可在软件中采用事务存储器来确保包括第一线程的示例性加减操作关于存储器位置A1和A2是“原子的”,因此第二线程将计算两个帐户的正确的总量。 
然而,用于以软件来实现事务存储器的现有方法遭受到性能问题。例如,在一种现有方法中,当一线程在一事务内访问一系列存储器位置时,该线程维护它希望在事务期间读取和更新(即,写入)的存储器位置和值的单独列表,然后在事务结束时,该线程更新实际共享存储器位置处的所有这些值。如果在事务期间,该线程希望重新读取或重新写入其列表中的任何存储器位置,则该线程必须在列表中搜索存储器位置的条目以访问该条目,这在程序上是很慢的事情。因此,这一用软件 实现事务存储器的间接方法遭受较差的性能。 
发明内容
此处所描述和要求保护的实现通过提供一种事务存储器编程接口来解决上述问题,该接口允许线程在事务内直接并安全地访问一个或多个共享存储器位置,同时维护一些控制结构以管理一个或多个其它并发线程对这些相同位置的存储器访问。由线程访问的每一存储器位置与一登记(enlistment)记录相关联,且每一线程维护其存储器访问的事务日志。在一事务内,在存储器位置上直接执行读操作,并且在存储器位置上直接尝试写操作而非写入某一中间缓冲区。如果该线程检测到存储器位置的登记记录与其事务日志之间的不一致性,则该线程确定事务内的存储器访问是不可靠的,并且该事务应被重试。此外,如果该线程在事务内试图写入存储器位置并确定另一线程已在另一未完成的事务内更新了该存储器位置,则第一线程或者可等待并在稍后重试该事务,或者可试图解决与其它线程的竞争。另外,该线程可维护其在事务期间写存储器访问的撤消日志,包括该位置的原始值和地址,以允许线程在事务被异常中止的情况下撤消这些操作。 
在某些实现中,制品作为计算机程序产品来提供。计算机程序产品的一个实现提供了可由计算机系统读取、并对一计算机程序进行编码的计算机程序存储介质。计算机程序产品的另一实现可以在由计算机系统以载波体现并对该计算机程序进行编码的计算机数据信号中提供。 
此处还描述并叙述了其它实现。 
附图说明
图1示出了经由示例性直接更新软件事务存储器接口来访问共享存储器位置的两个并发线程。 
图2示出了用于经由示例性直接更新软件事务存储器接口来执行存储器访问的操作。 
图3示出了用于在事务内登记存储器位置上的读操作的示例性操作。 
图4示出了用于在事务内登记存储器位置上的写操作的示例性操作。 
图5示出了用于在直接更新软件事务存储器接口中提交事务的示例性操作。 
图6示出了可用于实现所描述的技术的系统。 
具体实施方式
图1示出了经由示例性直接更新软件事务存储器接口108和110(例如,应用程序编程接口,即API)来访问共享存储器位置104和106的两个并发线程100和102。线程100表示例如对银行帐户转账的计算(得出报告112),而线程102例如表示两个银行帐户的总数的计算(得出报告114)。共享存储器位置104(A1)和106(A2)驻留在共享存储器区域116中,并储存表示两个单独的帐户中的资金量,最初分别为$10和$200。 
每一共享存储器位置可以与系统内的存储器地址范围(例如,数组、列表、表、软件对象等)相关联。诸如e-rec 118或e-rec 120等登记记录用作直接更新软件事务存储器访问的一种控制结构,它与每一存储器位置相关联。登记记录可以用各种方式与存储器位置相关联,对每一存储器位置一条登记记录、对每一软件对象一条登记记录、或对诸如进程的虚拟地址空间中的页等一存储器位置块一条登记记录。在一个实现中,登记记录包括两个字段:版本字段和暂存值(scratch)字段,然而版本字段也可保持事务标识符。在另一实现中,登记记录包括单个版本字段,然而版本字段也可保持事务标识符或事务日志指针。也构想了其它登记记录结构。 
在所示的示例中,线程100包括用于从对应于存储器地址104的第一帐户转帐$100到对应于存储器位置106的第二帐户的单个事务中的至少两个原子操作。第一操作将100加到对应于存储器位置104的值上,而第二操作从对应于存储器位置106的值中减去100以实现转帐。并发线程102包括用于总计两个帐户中的数量的事务中的原子操作。 
为确保对每一事务的安全存储器访问,线程100和102使用API 108和110来访问共享存储器位置104和106。一线程通过API直接在存储器位置上执行事务内的读操作,并且在该事务完成时,接收指示该线程是否可依赖于该事务的结果的信号。同样,一线程通过API直接在共享存储器位置上执行一事务内的写操作,只要另一线程尚未对该共享存储器位置标记写操作。 
每一线程维护一事务日志(例如,事务日志122或事务日志124)以管理其直接更新事务存储器访问。在一个实现中,事务日志具有两个组成列表,一个列表用于读,一个列表用于更新。在一个替换实现中,事务日志具有单个列表,其中的列表条目被参数化为“读”或“更新”。每一事务日志还包括一状态字段,该字段保持指示活动(ACTIVE)、异常中止(ABORTED)或已提交(COMMITTED)的值。各个列表条目可包括指向一相关联存储器地址的登记记录的指针(例如,引用), 并且还可包括一版本值。在替换实现中,列表条目还可包括暂存值字段。称为撤消日志的另一数据结构保持在该事务内已被更新的存储器地址及其先前值(即,在存储器位置被更新之前)的列表。在又一实现中,使用组合了事务日志和更新日志的功能的单个日志,其中的列表条目被参数化为“读”、“更新”(或“写”)或“撤消”条目。 
每一事务还维护一撤消日志(126和128),该日志可用于撤消给定事务的存储器写访问。在一个实现中,撤消日志记录与事务的每一写访问相关联的原始值和存储器地址。以此方式,如果事务被异常中止,则可按相反的顺序执行撤消日志中的条目以将由该事务写入的共享存储器位置还原到其事务前状态。 
通过遵循对API 108和110指定的协议,线程100和102可在单独的事务内对共享存储器位置安全地执行存储器访问序列而没有另一线程的未检测到的干扰的风险。 
图2示出了用于经由示例性直接更新软件事务存储器接口在事务内执行存储器访问序列的操作200。操作200表示由访问一个或多个共享存储器位置的单独的线程通过API作出的调用。例如,共享存储器位置可对应于用于单独的银行帐户的软件对象。每一共享存储器位置在创建相应的软件对象时与一存储器地址以及一登记记录相关联。 
启动操作202启动对线程的新事务。在一个实现中,启动操作202在示例性直接更新软件事务存储器接口中由“TransactionStart()”(事务开始)操作来表示,该操作为新事务分配并初始化一事务日志。事务日志维护在可由线程访问的本地(即,非共享)存储器中。在启动时,用于线程的事务日志为空,并且其状态被设为活动。在一个实现中,启动操作202还分配并初始化与事务相关联的新撤消日志。 
登记操作204登记用于诸如读操作或写操作等存储器访问操作的指定存储器位置。在一个实现中,登记操作204在示例性直接更新软件事务存储器接口中由“EnlistAddrForRead(Addrr)”(登记读地址)操作来表示,其中地址r(Addrr)表示指定存储器位置的地址。在另一实现中,登记操作204在示例性直接更新软件事务存储器接口中由“EnlistAddrForWrite(Addrr)”(登记写地址)操作来表示,其中地址r(Addrr)表示指定存储器位置的地址。以下提供登记操作的更详细描述。 
访问操作206诸如通过读操作或写操作来执行对指定存储器位置的存储器访问。在一个实现中,访问操作206由对指定存储器位置的直接读来表示。在另一实 现中,访问操作206在示例性直接更新软件事务存储器接口中由“TransactionRead(Addrr)”(事务读)操作来表示,其中地址r(Addrr)表示指定存储器位置的地址,并且该操作从指定存储器位置直接读取值。在又一实现中,访问操作206由对指定存储器位置的直接写来表示。在该实现中,也可采用单独的UpdateUndo(Addrr)(更新撤消)来更新撤消日志(如上所述)。在再一实现中,访问操作206在示例性直接更新软件事务存储器接口中由“TransactionWrite(Addrr,Valuev)(事务写)操作来表示,其中地址r(Addrr)表示指定存储器位置的地址,而值v(Valuev)表示要写入该存储器位置的值,并且该操作将一条目添加到撤消日志。 
判定操作208确定在事务序列中是否还剩余另一存储器访问操作。如果是,并且该事务先前未访问下一存储器访问操作的指定存储器位置,则该处理前进到登记操作204。或者,该处理可绕过登记操作204,因为指定存储器位置已在当前事务中登记。 
在任何情况下,该处理步进通过事务序列中的每一存储器访问,直到该事务序列中没有剩下任何存储器访问操作,此时提交操作210试图提交事务。在一个实现中,提交操作210在示例性直接更新软件事务存储器接口中由“TransactionCommit()”(事务提交)操作来表示。一般而言,提交操作210确定该事务内的所有存储器读操作是否已在该事务内完成而没有另一线程的干扰的更新。如果提交操作210失败,则该线程确定事务失败,并且在适当时重试整个事务。如果提交操作210成功,则该线程确定事务已成功完成,并且该线程可依赖于事务结果(例如,读值和更新操作)。在完成时,提交操作210“暂停”事务的登记,使得相关联的存储器位置变得可由其它线程访问。在一个实现中,暂停是通过迭代通过事务日志中的写事务条目,并对每一相关联的登记记录在更新的存储器位置的登记记录中的版本字段中储存一新版本号(例如,递增版本号)来实现。 
版本号有可能超限(例如,版本字段中的所有可用数字可能随着时间的推移都已被使用)。例如,如果对每一更新将版本递增一(例如,0、1、2、3等)并且最终超过最大版本号“N”,则“翻转(rollover)”或以其它方式处理版本号的溢出的机制可能是适宜的。在一个实现中,如果随时间推移执行的事务数超过N,则此时活动的事务可被异常中止。或者,如果随时间推移执行的事务数超过N,则此时活动的事务可被部分提交,使得无效事务被异常中止且有效事务保持活动。在又一实现中,可以使大小N大到使得合理的进程极不可能超过N的程度。 
可在示例性直接更新软件事务存储器接口中由TransactionAbort()(事务异常中止)操作提供的异常中止操作放弃与当前线程相关联的当前事务,并回退在异常中止事件之前在该事务内执行的任何更新。在一个实现中,当前事务日志中的状态字段被设为异常中止,并且撤消日志中的条目反向执行,从而还原已更新存储器位置中的事务前状态。一旦异常中止的事务的更新完成,则异常中止操作“暂停”登记。 
图3示出了用于在事务内登记存储器位置上的读操作的示例性操作300。响应于一线程关于规定存储器地址r对登记读操作(见关于图2的讨论)的调用,定位操作302定位与存储器地址r相关联的登记记录(即,“e-rec”)。在一个实现中,登记记录是与存储器地址r相关联的数据结构(例如,作为存储器地址r处的软件对象的一部分或由该软件对象所引用的)。 
版本化操作304从所定位的登记记录中读取与存储器地址相关联的版本值。判定操作306确定所读取的版本值实际上是表示版本、指示当前事务的标识符、还是指示另一事务的标识符。如果读取的版本值表示版本,则日志记录操作308将该版本和指向所定位的登记记录的指针(例如,引用)添加到事务日志的读事务列表(例如,链表)中的条目。该线程然后可以开始直接在存储器地址处读取值。 
如果读取的版本值表示由当前事务写入存储器地址的登记记录的标识符,则事务日志已由当前事务中的写操作更新,并且该线程可以仅继续(如由继续操作310所指示的)直接在存储器地址处读取值。通过继续,该线程确认用于登记记录的事务日志条目已在该事务的事务日志中生成。事务的标识符可以是任意的、唯一的事务标识符、返回到事务日志中的暂存值字段的指针(例如,引用)、或某一其它唯一标识符。 
如果读取的版本值表示由另一事务写入存储器地址的登记记录的标识符,则线程日志已由该另一事务中的写操作更新,并且该线程调用解决操作312,然后重试登记。在一个实现中,示例性解决操作312实际上是无操作(no-op)指令,它可使得登记操作自旋等待(spin-wait)。或者,一互斥锁可与登记记录相关联以避免自旋。在又一替换实现中,每一事务日志可以与一可废除锁相关联。在该实现中,后一访问事务(T2)的解决操作可从前一事务(T1)中获得可废除锁。有了可废除锁,T2可代表T1来执行TransactionAbort(),然后释放T1的可废除锁。之后,T2可对其读操作重新登记存储器地址r,并且T1可被转移到一恢复功能,该功能将引发异常以指示T1被异常中止并且应在处理中的适当点处重启。 
在替换实现中,EnlistAddrForRead()操作省略了它所读取的版本值的判定操作306,并且仅假定登记记录中的版本字段的内容是版本。在该实现中,TransactionCommit()操作高速缓存共享存储器位置中的任何冲突,不论该冲突是由版本冲突还是另一线程的写访问对共享存储器位置的保留引起的。 
图4示出了用于在事务内登记存储器位置上的写操作的示例性操作400。响应于一线程关于给定存储器位置r对登记写操作(见关于图2的讨论)的调用,定位操作402定位与存储器地址r相关联的登记记录(即,“e-rec”)。在一个实现中,该登记记录是与存储器地址r相关联的数据结构(例如,作为存储器地址处的软件对象的一部分或由该软件对象所引用的)。 
版本化操作404从所定位的登记记录中读取与存储器地址相关联的版本值。判定操作406确定所读取的版本值实际是表示版本、指示当前事务的标识符、还是指示另一事务的标识符。如果所读取的版本值表示版本,则日志记录操作408将版本以及指向所定位的登记记录的指针(例如,引用)添加到事务日志的写事务列表(例如,链表)中的条目。标记操作410使用原子比较并交换操作在存储器地址r的登记记录的版本字段中设置指定当前事务的标记,从而为当前事务临时保留了存储器地址r(以及相关联的存储器位置、存储器位置范围、对象等)。如果比较和交换操作成功(如由判定操作412所确定的),则将保存在事务日志内的写事务列表中的版本值写入登记记录的暂存值字段中,然后该线程可开始直接在存储器地址处更新值。或者,如果比较并交换操作失败,则从事务日志内的写事务列表中删除版本以及指向所定位的登记记录的指针(例如,引用),并且再次在定位操作402中尝试登记。 
在一个实现中,暂存值字段可被包括在事务条目而非登记记录中。在该实现中,登记记录的版本字段中的事务标识符是指向事务条目的指针(例如,引用)。以此方式,可采用快速比较并交换操作,并且版本暂存值被储存在本地的未共享存储器中,仅用于事务中的已更新存储器位置。 
如果所读取的版本值表示由当前事务写入存储器地址的登记记录的标识符,则事务日志已由当前事务中的写操作更新,并且该线程可仅继续(如由继续操作416所指示的)直接在存储器地址处更新值。如果所读取的版本值表示由另一事务写入存储器地址的登记记录中的标识符,则事务日志已由该另一事务中的写操作更新。由此,该线程调用解决操作418,然后重试登记。示例性解决操作已关于解决操作418讨论。 
图5示出了用于在直接更新软件事务存储器接口中提交事务的示例性操作500。日志条目操作502从事务日志的读事务列表中的条目读取指针(例如,引用)。使用该指针,登记记录操作504读取与存储器地址相关联的登记记录的版本字段。判定操作506确定从版本字段读取的值实际是表示版本、指示当前事务的标记还是指示另一事务的标记。 
如果从版本字段读取的值实际上是版本,则读操作508从在日志条目操作502中从中读取指针(例如,引用)的事务日志条目中读取版本。如果两个版本匹配(如由判定操作510所确定的),则线程仍能够成功完成,因为与当前日志条目相关联的存储器地址并未在事务期间由另一线程更新。如果这对于读事务列表中的所有日志条目都为真,则当前事务中对该存储器地址的所有读都有效,并且该事务有效。 
判定操作512确定在读事务列表中是否存在下一事务日志条目。如果是,则处理前进到日志条目操作502。否则,成功操作514用信号表示来自提交操作的成功,并且将当前事务日志的状态设为已提交。版本化操作520更新与写事务列表条目相关联的所有登记记录的版本值,以指示与该存储器位置相关联地成功完成了一事务。终止操作522从事务日志中移除所有事务日志条目,并删除事务日志本身。 
如果判定操作510确定版本不匹配,则该失配指示对存储器位置的读不是有效的,因为该存储器地址在当前事务期间被另一线程更新。在这一情况下,处理前进到失败操作518,该操作用信号表示提交操作的失败。此外,异常中止操作如上所述地异常中止该事务。 
如果判定操作506确定从登记记录的版本字段中读取的值实际表示指示当前事务的标识符,则读操作516从暂存值字段中读取版本值。在一个实现中,暂存值字段是存储器地址的登记记录的一部分。在一个替换实现中,暂存值字段被储存在事务日志的条目中。处理然后前进到读操作508,并且判定操作510将来自暂存值字段的版本与事务日志中的版本进行比较。 
如果判定操作506确定从登记记录的版本字段中读取的值实际表示指示另一事务的标识符,则对该存储器地址的更新受到另一并发事务的更新的阻止。因此,失败操作518用信号表示事务失败。此外,异常中止操作如上所述地异常中止该事务。 
图6的用于实现本发明的示例性硬件和操作环境包括计算机20形式的通用计算设备,包括处理单元21、系统存储器22、以及操作上将包括系统存储器在内的各种系统组件耦合到处理单元21的系统总线23。可以仅有一个或可以有一个以上 处理单元21,使得计算机20的处理器包括单个中央处理单元(CPU),或多个处理单元,这通常被称为并行处理环境。计算机20可以是常规计算机、分布式计算机或任何其它类型的计算机;本发明不限于此。 
系统总线23可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线、交换光纤、点对点连接、以及使用各类总线体系结构的局部总线。系统存储器还可被简称为存储器,并包括只读存储器(ROM)24和随机存取存储器(RAM)25。基本输入/输出系统(BIOS)26被储存在ROM 24中,它包含如在启动时协助在计算机20内的元件之间传输信息的基本例程。计算机20还包括用于对硬盘(未示出)进行读写的磁硬盘驱动器27,用于对可移动磁盘29进行读写的磁盘驱动器28,以及用于对可移动光盘31,如CD-ROM或其它光介质进行读写的光盘驱动器30。     
硬盘驱动器27、磁盘驱动器28以及光盘驱动器30分别通过硬盘驱动器接口32、磁盘驱动器接口33和光盘驱动器接口34连接至系统总线23。驱动器及其相关的计算机可读介质为计算机20提供了计算机可执行指令、数据结构、程序模块和其它数据的非易失性存储。本领域的技术人员应当理解,示例性操作环境中可以使用储存可由计算机访问的数据的任何类型的计算机可读介质,诸如盒式磁带、闪存卡、数字视频盘、随机存取存储器(RAM)、只读存储器(ROM)等等。 
多个程序模块可被储存在硬盘、磁盘29、光盘31、ROM 24或RAM 25中,包括操作系统35、一个或多个应用程序36、其它程序模块37以及程序数据38。用户可以通过诸如键盘40和定点设备42等输入设备向计算机420输入命令和信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线的串行端口接口46连接到处理单元21,但也可以通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。监视器47或其它类型的显示设备也通过接口,如视频适配器48连接到系统总线23。除监视器之外,计算机通常包括其它外围输出设备(未示出),如扬声器和打印机。 
计算机20可以使用到一个或多个远程计算机,如远程计算机49的逻辑连接在网络化环境中操作。这些逻辑连接通过耦合到计算机20或作为其一部分的通信设备来实现;本发明不限于特定类型的通信设备。远程计算机49可以是另一计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并通常包括许多或所有相对于计算机20所描述的元件,尽管在图6中仅示出了存储器存储设备 50。图6描述的逻辑连接包括局域网(LAN)51和广域网(WAN)52。这类网络环境常见于办公室网络、企业范围计算机网络、内联网以及因特网,这些都是网络的类型。 
当在LAN网络环境中使用时,计算机20通过网络接口或适配器53连接至局域网51。当在WAN网络环境中使用时,计算机20通常包括调制解调器54、网络适配器、一类通信设备、或用于通过广域网52建立通信的任何其它类型的通信设备。调制解调器54可以是内置或外置的,它通过串行端口接口46连接至系统总线23。在网络化环境中,相对于计算机20所描述的程序模块或其部分可储存在远程存储器存储设备中。可以理解,示出的网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其它装置和通信设备。 
在一个示例性实现中,TransactionStart()模块、EnlistAddrForRead()模块、EnlistAddrForWrite()模块、TransactionRead()模块、TransactionWrite()模块、TransactionAbort()模块、TransactionCommit()模块以及其它模块可作为操作系统35、应用程序36或其它程序模块37的一部分包含。事务日志、登记记录和其它数据可作为程序数据38来储存。 
此处所描述的技术被实现为一个或多个系统中的逻辑操作和/或模块。逻辑操作可被实现为(1)在一个或多个计算机系统中执行的处理器实现的步骤的序列,以及(2)一个或多个计算机系统内的互连机器或电路模块。同样,对各组件模块的描述可按照由该模块执行或实现的操作来提供。所得的实现是选择问题,取决于实现所描述的技术的底层系统的性能要求。因此,构成此处所描述的技术的各实施例的逻辑操作以各种方式被称为操作、步骤、对象或模块。此外,应当理解,逻辑操作可以用任何顺序来执行,除非明确地另外要求保护或权利要求的语言使得特定顺序固有地变得必需。 
以上说明书、示例和数据提供了本发明的示例性实施例的结构和使用的完整描述。由于可在不脱离本发明的精神和范围的前提下作出本发明的许多实施例,因此本发明归于所附权利要求书。具体地,应当理解,所描述的技术可独立于个人计算机来使用。因此,构想了其它实施例。 

Claims (16)

1.一种管理在第一线程的事务内对共享存储器位置的存储器访问的方法,所述共享存储器位置可由所述第一线程和第二线程访问,所述方法包括:
标识与所述共享存储器位置相关联的登记记录;
如果所述登记记录指示与所述第二线程对所述共享存储器位置的写存储器访问没有冲突,则将所述登记记录标记为为所述事务保留所述共享存储器位置;
在一撤消日志中记录对所述共享存储器位置的引用及其内容;以及
在所述事务终止时将一新版本值写入所述共享存储器位置的所述登记记录。
2.如权利要求1所述的方法,其特征在于,还包括:
响应于所述标记操作,在所述事务内执行对所述共享存储器位置的写存储器访问。
3.如权利要求1所述的方法,其特征在于,所述标记操作包括:
将一事务标识符写入所述登记列表,所述事务标识符标识所述第一线程的事务。
4.如权利要求1所述的方法,其特征在于,所述登记记录指示在所述登记记录由第二线程标记的情况下因所述第二线程对所述共享存储器位置的写存储器访问而引起的冲突。
5.如权利要求1所述的方法,其特征在于,所述撤消日志包括共享存储器位置引用和相关联内容的有序序列,并且所述方法还包括:
将所述内容写入所述相关联共享存储器位置,其中以所述序列中的反向顺序执行各个写访问。
6.如权利要求1所述的方法,其特征在于,还包括:
记录包括对所述登记记录的引用的事务日志条目,所述事务日志条目被记录在包含所述事务内的多个写存储器访问的事务日志条目的事务日志中。
7.如权利要求1所述的方法,其特征在于,还包括:
如果所述登记记录指示因所述第二线程对所述共享存储器位置的写存储器访问而引起的冲突,则解决所述冲突以允许在所述第一线程的事务内对所述共享存储器位置的写存储器访问。
8.如权利要求1所述的方法,其特征在于,所述登记记录包括版本字段,并且所述标记操作包括:
将所述版本字段的内容记录在一暂存值字段中;
将一事务标识符写入所述版本字段。
9.一种管理在第一线程的事务内对共享存储器位置的存储器访问的方法,所述共享存储器位置可由所述第一线程和第二线程访问,所述方法包括:
标识与所述共享存储器位置相关联的登记记录;
生成与所述事务相关联的事务日志条目,所述事务日志条目引用了与所述共享存储器位置相关联的登记记录;
读取所述登记记录的版本字段的内容;
由所述第一线程在所述事务内执行对所述共享存储器位置的读存储器访问;以及
响应于所述执行操作,如果所述事务日志条目和所引用的登记记录没有指示因所述第二线程对所述共享存储器位置的写存储器访问而引起的冲突,则将所述事务提交给所述读存储器访问。
10.如权利要求9所述的方法,其特征在于,所述登记记录包括版本字段,并且还包括:
如果所述内容表示所述第一线程的事务标识符,则确认针对所述登记记录的事务日志条目已在所述事务内生成。
11.如权利要求9所述的方法,其特征在于,所述登记记录包括版本字段,并且所述方法还包括:
如果所述内容表示所述第二线程的事务标识符,则异常中止所述事务。
12.如权利要求9所述的方法,其特征在于,所述登记记录包括版本字段,并且所述方法还包括:
如果所述内容表示版本值,则将所述版本值记录在所述事务日志条目中。
13.如权利要求9所述的方法,其特征在于,还包括:
如果在提交时记录在所述事务日志条目中的版本值不匹配记录在所述登记记录中的版本值,则标识因所述第二线程对所述共享存储器位置的写存储器访问而引起的冲突。
14.如权利要求13所述的方法,其特征在于,还包括:
如果标识了冲突,则异常中止所述事务。
15.如权利要求9所述的方法,其特征在于,所述登记记录包括版本字段,并且所述方法还包括:
从与所述登记记录相关联的暂存值字段中读取先前储存在所述登记记录的版本字段中的版本值;以及
如果在提交时记录在所述事务日志条目中的版本值不匹配记录在所述暂存值字段中的版本值,则标识因所述第二线程对所述共享存储器位置的写存储器访问而引起的冲突。
16.一种管理在第一线程的事务内对共享存储器位置的存储器访问的方法,所述共享存储器位置可由所述第一线程和第二线程访问,所述方法包括:
在所述事务内登记所述共享存储器位置;
维护包括与所述事务相关联的事务日志条目的事务日志以及用于每一共享存储器位置的登记记录;
维护包括对所述共享存储器位置的写存储器访问的条目的撤消日志,每一条目包括与所述写存储器访问的共享存储器位置相关联的地址以及所述共享存储器位置的先前内容;
直接对所述共享存储器位置执行存储器访问;以及
响应于所述执行操作,如果没有检测到因所述第二线程对所述共享存储器位置的写存储器访问而引起的冲突,则将所述事务提交给所述存储器访问,其中如果在提交时记录在所述事务日志条目中的版本值不匹配记录在所述登记记录中的版本值,则标识因所述第二线程对所述共享存储器位置的写存储器访问而引起的冲突。
CN200680026687XA 2005-07-29 2006-07-28 用于直接更新软件事务存储器的方法和系统 Expired - Fee Related CN101495976B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/192,784 US7536517B2 (en) 2005-07-29 2005-07-29 Direct-update software transactional memory
US11/192,784 2005-07-29
PCT/US2006/029327 WO2007016302A2 (en) 2005-07-29 2006-07-28 Direct-update software transactional memory

Publications (2)

Publication Number Publication Date
CN101495976A CN101495976A (zh) 2009-07-29
CN101495976B true CN101495976B (zh) 2011-11-09

Family

ID=37695711

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200680026687XA Expired - Fee Related CN101495976B (zh) 2005-07-29 2006-07-28 用于直接更新软件事务存储器的方法和系统

Country Status (13)

Country Link
US (1) US7536517B2 (zh)
EP (1) EP1910929B1 (zh)
JP (1) JP5010601B2 (zh)
KR (1) KR101203297B1 (zh)
CN (1) CN101495976B (zh)
AU (1) AU2006275736A1 (zh)
BR (1) BRPI0613946A2 (zh)
CA (1) CA2616422A1 (zh)
IL (1) IL188665A0 (zh)
MX (1) MX2008001159A (zh)
NO (1) NO20080235L (zh)
RU (1) RU2008103273A (zh)
WO (1) WO2007016302A2 (zh)

Families Citing this family (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7818513B2 (en) * 2004-08-10 2010-10-19 Oracle America, Inc. Coordinating accesses to shared objects using transactional memory mechanisms and non-transactional software mechanisms
US8037476B1 (en) * 2005-09-15 2011-10-11 Oracle America, Inc. Address level log-based synchronization of shared data
US7630991B2 (en) * 2005-10-27 2009-12-08 Microsoft Corporation Compiling join patterns using software transactional memories
US8099726B2 (en) * 2005-12-07 2012-01-17 Microsoft Corporation Implementing strong atomicity in software transactional memory
US8799882B2 (en) * 2005-12-07 2014-08-05 Microsoft Corporation Compiler support for optimizing decomposed software transactional memory operations
US8271994B2 (en) * 2006-02-11 2012-09-18 International Business Machines Corporation Reduced data transfer during processor context switching
US20070198979A1 (en) * 2006-02-22 2007-08-23 David Dice Methods and apparatus to implement parallel transactions
US8028133B2 (en) * 2006-02-22 2011-09-27 Oracle America, Inc. Globally incremented variable or clock based methods and apparatus to implement parallel transactions
US8316352B2 (en) * 2006-06-09 2012-11-20 Oracle America, Inc. Watchpoints on transactional variables
US8181158B2 (en) * 2006-06-09 2012-05-15 Oracle America, Inc. Viewing and modifying transactional variables
US8601456B2 (en) * 2006-08-04 2013-12-03 Microsoft Corporation Software transactional protection of managed pointers
US7788242B2 (en) * 2006-08-23 2010-08-31 Oracle America, Inc. Method and system for implementing a concurrent set of objects
US8010550B2 (en) 2006-11-17 2011-08-30 Microsoft Corporation Parallelizing sequential frameworks using transactions
US8024714B2 (en) 2006-11-17 2011-09-20 Microsoft Corporation Parallelizing sequential frameworks using transactions
US7860847B2 (en) 2006-11-17 2010-12-28 Microsoft Corporation Exception ordering in contention management to support speculative sequential semantics
US8132158B2 (en) * 2006-12-28 2012-03-06 Cheng Wang Mechanism for software transactional memory commit/abort in unmanaged runtime environment
US7908255B2 (en) * 2007-04-11 2011-03-15 Microsoft Corporation Transactional memory using buffered writes and enforced serialization order
US8621468B2 (en) * 2007-04-26 2013-12-31 Microsoft Corporation Multi core optimizations on a binary using static and run time analysis
US8688920B2 (en) 2007-05-14 2014-04-01 International Business Machines Corporation Computing system with guest code support of transactional memory
US8117403B2 (en) * 2007-05-14 2012-02-14 International Business Machines Corporation Transactional memory system which employs thread assists using address history tables
US8095741B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory computing system with support for chained transactions
US8321637B2 (en) * 2007-05-14 2012-11-27 International Business Machines Corporation Computing system with optimized support for transactional memory
US9009452B2 (en) * 2007-05-14 2015-04-14 International Business Machines Corporation Computing system with transactional memory using millicode assists
US8095750B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory system with fast processing of common conflicts
US8719514B2 (en) * 2007-06-27 2014-05-06 Intel Corporation Software filtering in a transactional memory system
US7890725B2 (en) * 2007-07-09 2011-02-15 International Business Machines Corporation Bufferless transactional memory with runahead execution
US20090064141A1 (en) * 2007-08-29 2009-03-05 Microsoft Corporation Efficient utilization of transactions in computing tasks
US8245232B2 (en) * 2007-11-27 2012-08-14 Microsoft Corporation Software-configurable and stall-time fair memory access scheduling mechanism for shared memory systems
US7793052B2 (en) * 2007-12-31 2010-09-07 Oracle America, Inc. System and method for implementing hybrid single-compare-single-store operations
US8200914B2 (en) * 2008-01-03 2012-06-12 International Business Machines Corporation Apparatus, system, and method for a read-before-write storage controller instruction
US8359437B2 (en) * 2008-05-13 2013-01-22 International Business Machines Corporation Virtual computing memory stacking
US9047139B2 (en) * 2008-06-27 2015-06-02 Microsoft Technology Licensing, Llc Primitives for software transactional memory
US8341133B2 (en) 2008-06-27 2012-12-25 Microsoft Corporation Compressed transactional locks in object headers
US8769514B2 (en) * 2008-06-27 2014-07-01 Microsoft Corporation Detecting race conditions with a software transactional memory system
US8839213B2 (en) 2008-06-27 2014-09-16 Microsoft Corporation Optimizing primitives in software transactional memory
US20100017581A1 (en) * 2008-07-18 2010-01-21 Microsoft Corporation Low overhead atomic memory operations
US8627292B2 (en) * 2009-02-13 2014-01-07 Microsoft Corporation STM with global version overflow handling
WO2010097847A1 (ja) * 2009-02-24 2010-09-02 パナソニック株式会社 プロセッサ装置、マルチスレッドプロセッサ装置
US8688921B2 (en) * 2009-03-03 2014-04-01 Microsoft Corporation STM with multiple global version counters
JP5338435B2 (ja) * 2009-03-31 2013-11-13 富士通株式会社 情報処理プログラム、情報処理装置および情報処理方法
US20120117317A1 (en) 2009-08-20 2012-05-10 Rambus Inc. Atomic memory device
US8566524B2 (en) 2009-08-31 2013-10-22 International Business Machines Corporation Transactional memory system with efficient cache support
US8239635B2 (en) 2009-09-30 2012-08-07 Oracle America, Inc. System and method for performing visible and semi-visible read operations in a software transactional memory
US9104715B2 (en) 2010-06-23 2015-08-11 Microsoft Technology Licensing, Llc Shared data collections
US8595426B2 (en) * 2011-04-11 2013-11-26 Sandisk Il Ltd. Handling commands within a write-once read-many storage device configuration
US9043363B2 (en) * 2011-06-03 2015-05-26 Oracle International Corporation System and method for performing memory management using hardware transactions
US9164753B2 (en) 2013-01-08 2015-10-20 Sap Se Generating software updates
US20160239372A1 (en) * 2013-09-26 2016-08-18 Hewlett Packard Enterprise Development Lp Undoing changes made by threads
US9524195B2 (en) 2014-02-27 2016-12-20 International Business Machines Corporation Adaptive process for data sharing with selection of lock elision and locking
US9262206B2 (en) 2014-02-27 2016-02-16 International Business Machines Corporation Using the transaction-begin instruction to manage transactional aborts in transactional memory computing environments
US9424072B2 (en) 2014-02-27 2016-08-23 International Business Machines Corporation Alerting hardware transactions that are about to run out of space
US9465673B2 (en) 2014-02-27 2016-10-11 International Business Machines Corporation Deferral instruction for managing transactional aborts in transactional memory computing environments to complete transaction by deferring disruptive events handling
US9442853B2 (en) 2014-02-27 2016-09-13 International Business Machines Corporation Salvaging lock elision transactions with instructions to change execution type
US9442775B2 (en) 2014-02-27 2016-09-13 International Business Machines Corporation Salvaging hardware transactions with instructions to transfer transaction execution control
US9575890B2 (en) 2014-02-27 2017-02-21 International Business Machines Corporation Supporting atomic accumulation with an addressable accumulator
US9311178B2 (en) 2014-02-27 2016-04-12 International Business Machines Corporation Salvaging hardware transactions with instructions
US9430273B2 (en) 2014-02-27 2016-08-30 International Business Machines Corporation Suppressing aborting a transaction beyond a threshold execution duration based on the predicted duration
US9329946B2 (en) 2014-02-27 2016-05-03 International Business Machines Corporation Salvaging hardware transactions
US9411729B2 (en) 2014-02-27 2016-08-09 International Business Machines Corporation Salvaging lock elision transactions
US9361041B2 (en) 2014-02-27 2016-06-07 International Business Machines Corporation Hint instruction for managing transactional aborts in transactional memory computing environments
US9336097B2 (en) 2014-02-27 2016-05-10 International Business Machines Corporation Salvaging hardware transactions
US9645879B2 (en) 2014-02-27 2017-05-09 International Business Machines Corporation Salvaging hardware transactions with instructions
US20150242216A1 (en) 2014-02-27 2015-08-27 International Business Machines Corporation Committing hardware transactions that are about to run out of resource
US9471371B2 (en) 2014-02-27 2016-10-18 International Business Machines Corporation Dynamic prediction of concurrent hardware transactions resource requirements and allocation
US9524187B2 (en) 2014-03-02 2016-12-20 International Business Machines Corporation Executing instruction with threshold indicating nearing of completion of transaction
US9710271B2 (en) 2014-06-30 2017-07-18 International Business Machines Corporation Collecting transactional execution characteristics during transactional execution
US9448939B2 (en) 2014-06-30 2016-09-20 International Business Machines Corporation Collecting memory operand access characteristics during transactional execution
US9348643B2 (en) 2014-06-30 2016-05-24 International Business Machines Corporation Prefetching of discontiguous storage locations as part of transactional execution
US9336047B2 (en) 2014-06-30 2016-05-10 International Business Machines Corporation Prefetching of discontiguous storage locations in anticipation of transactional execution
US9600286B2 (en) 2014-06-30 2017-03-21 International Business Machines Corporation Latent modification instruction for transactional execution
US9754001B2 (en) 2014-08-18 2017-09-05 Richard Banister Method of integrating remote databases by automated client scoping of update requests prior to download via a communications network
US9665280B2 (en) * 2014-09-30 2017-05-30 International Business Machines Corporation Cache coherency verification using ordered lists
US10540524B2 (en) * 2014-12-31 2020-01-21 Mcafee, Llc Memory access protection using processor transactional memory support
US10838983B2 (en) 2015-01-25 2020-11-17 Richard Banister Method of integrating remote databases by parallel update requests over a communications network
CN105045563B (zh) * 2015-06-19 2017-10-10 陕西科技大学 一种推测嵌套软件事务存储的冲突管理方法
US10990586B2 (en) 2015-09-16 2021-04-27 Richard Banister System and method for revising record keys to coordinate record key changes within at least two databases
US10838827B2 (en) 2015-09-16 2020-11-17 Richard Banister System and method for time parameter based database restoration
US10003634B2 (en) * 2016-05-14 2018-06-19 Richard Banister Multi-threaded download with asynchronous writing
WO2018118040A1 (en) * 2016-12-21 2018-06-28 Hewlett-Packard Development Company, L.P. Persistent memory updating
EP3607443A1 (en) * 2017-04-19 2020-02-12 Huawei Technologies Co., Ltd. Hardware transactional memory (htm) assisted database transactions
EP3610373B1 (en) * 2017-04-19 2022-03-30 Huawei Technologies Co., Ltd. Updating metadata in hardware transactional memory user aborts
US10521116B2 (en) * 2018-01-23 2019-12-31 Nutanix, Inc. System and method for managing object store
US10445238B1 (en) * 2018-04-24 2019-10-15 Arm Limited Robust transactional memory
US11194769B2 (en) 2020-04-27 2021-12-07 Richard Banister System and method for re-synchronizing a portion of or an entire source database and a target database

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5983225A (en) * 1998-01-26 1999-11-09 Telenor As Parameterized lock management system and method for conditional conflict serializability of transactions
US6856993B1 (en) * 2000-03-30 2005-02-15 Microsoft Corporation Transactional file system

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6586993B2 (en) * 2000-11-08 2003-07-01 Research In Motion Limited Impedance matching low noise amplifier having a bypass switch

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5983225A (en) * 1998-01-26 1999-11-09 Telenor As Parameterized lock management system and method for conditional conflict serializability of transactions
US6856993B1 (en) * 2000-03-30 2005-02-15 Microsoft Corporation Transactional file system

Also Published As

Publication number Publication date
KR101203297B1 (ko) 2012-11-20
EP1910929A4 (en) 2010-12-08
CN101495976A (zh) 2009-07-29
KR20080031039A (ko) 2008-04-07
EP1910929B1 (en) 2016-02-17
JP2009506403A (ja) 2009-02-12
US20070028056A1 (en) 2007-02-01
MX2008001159A (es) 2008-03-13
BRPI0613946A2 (pt) 2011-02-22
NO20080235L (no) 2008-02-28
AU2006275736A1 (en) 2007-02-08
CA2616422A1 (en) 2007-02-08
WO2007016302A2 (en) 2007-02-08
WO2007016302A3 (en) 2009-04-16
EP1910929A2 (en) 2008-04-16
IL188665A0 (en) 2008-08-07
RU2008103273A (ru) 2009-08-10
JP5010601B2 (ja) 2012-08-29
US7536517B2 (en) 2009-05-19

Similar Documents

Publication Publication Date Title
CN101495976B (zh) 用于直接更新软件事务存储器的方法和系统
US10268579B2 (en) Hybrid hardware and software implementation of transactional memory access
CN100514299C (zh) 利用虚拟存储器的事务型存储器执行
US11386065B2 (en) Database concurrency control through hash-bucket latching
US8429134B2 (en) Distributed database recovery
US8868577B2 (en) Generic database manipulator
JP3512439B2 (ja) チェックイン・チェックアウトモデルにおける施錠方式
US8271739B2 (en) Memory control apparatus, program, and method
US8977898B1 (en) Concurrent access to data during replay of a transaction log
JPH0799509B2 (ja) メモリへのデータブロックのエントリを制御する方法
US7548919B2 (en) Computer program product for conducting a lock free read
CN101652761A (zh) 使用缓存写和强制串行化次序的事务存储器
CN109947742B (zh) 面向二阶段锁的多版本数据库并发控制方法和系统
US7523088B2 (en) Method for increasing system resource availability in database management systems
Mishra et al. Hyflowcpp: A distributed transactional memory framework for c++
JP3107094B2 (ja) 共用バッファのロック期間短縮処理方法及び装置
US11940994B2 (en) Mechanisms for maintaining chains without locks
KR100630213B1 (ko) 데이터 저장시스템에서 데이터 버퍼 제어 블록을 이용한로그 우선 출력 프로토콜 수행 방법

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
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150429

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150429

Address after: Washington State

Patentee after: MICROSOFT TECHNOLOGY LICENSING, LLC

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20111109

Termination date: 20210728

CF01 Termination of patent right due to non-payment of annual fee