[发明专利]不使用原子指令而适当处理大量处理器的读复制更新的宽限期检测有效
| 申请号: | 200580029437.7 | 申请日: | 2005-10-13 |
| 公开(公告)号: | CN101142551A | 公开(公告)日: | 2008-03-12 |
| 发明(设计)人: | 保罗·麦肯尼;保罗·拉塞尔;迪潘卡·萨马 | 申请(专利权)人: | 国际商业机器公司 |
| 主分类号: | G06F9/46 | 分类号: | G06F9/46 |
| 代理公司: | 中国国际贸易促进委员会专利商标事务所 | 代理人: | 康建峰 |
| 地址: | 美国*** | 国省代码: | 美国;US |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 使用 原子 指令 适当 处理 大量 处理器 复制 更新 宽限期 检测 | ||
技术领域
本发明涉及计算机系统和方法,其中数据资源在相对于每一个数据使用者保留数据的完整性和一致性的同时由并行的数据使用者共享。更特别的,本发明涉及对称为“读复制更新”的互斥机制的改进,该机制中,无锁的数据读取操作与数据更新操作并行运行。
背景技术
作为背景技术,读复制更新是一互斥技术,它不使用锁、不对共享存储器进行写入、不需要内存栅、不使用原子指令或其它计算昂贵的同步机制,而允许对共享数据进行读取访问,同时还允许数据被更新(修改、删除、插入等等)。该技术特别适合于多处理器计算环境,其中访问共享数据集的读操作(读取器)的数目相比较而言大于更新操作(更新器)的数目,并且其中对每一个读取操作来说使用其它互斥技术(如锁)的开销会高。作为例子,在网络路由表至多每几分钟更新一次但每一秒却被检索数千次这样的情形下,读取端的锁捕获会相当繁重。
读复制更新技术在两个阶段中实现数据更新。在第一阶段(初始更新)中,实际的数据更新以暂时保留正被更新的数据的两个视图的方式来完成。一个视图是旧的(更新前)数据状态,为利于当前可能正在引用数据的操作而保持该旧的数据状态。另一个视图是新的(更新后)数据状态,为利于在更新后对数据进行访问操作,该数据状态是可用的。在第二个阶段(延迟更新)中,旧的数据状态在“宽限期”后被移除,该宽限期足够长以保证所有的正在执行的操作不再保持对更新前的数据的引用。
图1A-1D示出了使用读复制更新修改数据元素A、B和C的组中的数据元素B。数据元素A、B和C排在以非循环的方式遍历的单向链表中,除了存储一些数据项,其中每一个元素包括指向链表中下一个元素的指针(或对最后的元素为NULL指针)。假定全局指针(未显示)指向表的第一个成员-数据元素A。本领域的技术人员将认识到数据元素A、B和C可以使用多个传统的程序构件的任何一个而实现,这些程序构件包括但不仅限于由C语言“结构体”变量所定义的数据结构。
假设图1A-1D中的数据元素表由多个并行读取器遍历(不锁定),并且偶尔由那些删除、插入或修改表中的数据元素的更新器更新。图1A中,如数据元素下面的垂直箭头所示,数据元素B正被读取器r1引用。图1B中,更新器u1希望通过修改数据元素B来更新链表。在产生更新后的数据元素的版本(如图1C中所示的数据元素B’)并将其插入到链表中的同时,u1保留B,而不是不考虑r1正在引用它而简单地更新数据元素(这可能破坏r1)。这是通过u1获得自旋锁、为B’分配新的存储空间、复制B的内容到B’、如果需要的话修改B’、更新从A到B的指针以使其指向B’以及释放该自旋锁来完成的。所有随后(更新后)的遍历链表的读取器,如读取器r2,将因此通过遍历到B’看到更新操作的效果。另一方面,旧的读取器r1将是未受影响的,因为B的原始版本及其指向C的指针是保留的。尽管r1现在将读取陈旧的数据,但在许多情形中这是可以容忍的,如当数据元素跟踪计算机系统外部的成分的状态(如网络连通性)以及由于通信延迟必须容忍旧的数据的时候。
在更新之后的一些随后时间里,r1将继续它对链表的遍历并除去它对B的引用。此外,将有一时间没有其它的读取器过程有权访问B。如图1D所示,正是在这一点上,代表以上提及的宽限期的期满,u1可以释放B。
图2A-2C示出了使用读复制更新删除数据元素A、B和C的单向链表中的数据元素B。如图2A所示,假定读取器r1当前正引用B并且更新器u1希望删除数据元素B。如图2B所示,更新器u1更新从A到B的指针,这样现在A指向C。这样,r1未被扰乱,但随后的读取器r2看到了删除的效果。如图2C所示,随后r1将除去它对B的引用,允许B在宽限期期满后被释放。
在读复制更新机制的语境中,宽限期代表某一点,在此所有有途经访问使用读复制更新所保护的数据元素的运行进程都经过了“静态”,在“静态”中它们不再保持对数据元素的引用、在其上发布锁或对数据元素的状态做出任何假设。相反地,对操作系统内核代码路径来说,对任何特定的CPU,语境(进程)切换、空循环和用户模式执行都代表静态(如其它操作能做的那样,将不在此处列出)。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于国际商业机器公司,未经国际商业机器公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200580029437.7/2.html,转载请声明来源钻瓜专利网。





