事务存储结构的实现(1)(2)
2015-07-28 01:08
导读:图3 LogTM的硬件结构 (图中黑框中为其特有结构)2.1 版本管理(Version Management) LogTM使用积极的版本管理,将新的执行数据存储在目标区域(目标地址)中,而将旧

图3 LogTM的硬件结构 (图中黑框中为其特有结构)2.1 版本管理(Version Management) LogTM使用积极的版本管理,将新的执行数据存储在目标区域(目标地址)中,而将旧的数据存储在其它缓冲区。它通过在内存中开辟一块事务日志区域存储事务执行过程中被修改的数据(上文中提到的原始数据)和这些数据所对应的地址,新的执行数据则被保存在目标存储区(目标地址),当执行完成提交时,这些新数据将会立即生效;当事务执行过程中或提交时发生冲突或错误需要回滚时,则通过事务日志中记录的信息恢复出事务执行前的初始状态。 刚开始创建线程时,每一个线程对应着一个日志而且为日志分配一块虚拟存储区域,并将该日志基地址写入Log Base寄存器,当旧数据需要存储到日志时,LogTM通过Log Base寄存器中的值定位到日志的入口然后将旧数据的虚拟地址和值一同保存在日志中以便恢复时使用。为了减少冗余日志,LogTM为每一个cache块添加了对应的写(W)位,用此来标识该cache块在日志中的记录情况。当事务提交成功后,LogTM将对应cache块的写(W)标志位清0并将Log Pointer(日志指针)重新指向日志的入口处,以便处理后续事务。 LogTM也为每个cache块设置了一个读(R)标志位,就像上面我们讨论的写(W)标志位一样。在每个事务操作过程中LogTM同样将读标志位设置用于表示读操作的执行(如图4所示),而且在事务结束后,读标志位也清0。 这种积极的版本管理模式的缺点就是在事务发生冲突或错误需要回滚时执行比较慢,在回滚时,LogTM为了完成恢复必须将原始数据从日志中读到合适的目标地址中然后重置写(W)位,同时因为有很多数据记录在日志中,所以恢复过程必须按照由后向前(后进先出)的顺序进行。但在事务冲突比较少的情况下,这种模式能够带来高效的执行效率。 为了能更好的理解LogTM版本管理过程,图4通过一个例子进行了很好的分析。 (1)事务执行开始前的状态——cache数据块中存放着原始数据,每块的读(R)、写(W)位置0,LogBase(日志基址寄存器)指向日志入口地址,LogPtr(日志偏移指针)指向日志入口地址同时TMcount(事务计数器)置1代表正准备执行一个事务。 (2) 读00地址(十六进制地址)中的数据到寄存器r1中,00地址对应数据块的读(R)标志位置1表示此数据被读。 (3) 将寄存器r2中数据(这里假设为56)存入c0地址中,由于c0地址中存在原始数据34,将c0地址和该原始数据一起根据LogBase中的日志入口地址存入日志中,并将LogPtr指针后移,指向用于存放下个数据的地址位,同时将c0地址对应块的写(W)标志位置1,代表一次写操作的完成,其他的状态不变。 (4) 读取40地址中数据到寄存器r3中,然后r3中数据加1,并将执行后的r3数据存回40地址中,该操作对40地址对应块执行了一次读操作和一次写操作,将读(R)和写(W)标志位置1,然后将原始40地址对应块中数据存入日志中,存入LogPtr指向的地址中,同时将LogPtr指针后移。 (5) 事务提交后状态——将与本事务相关的各个数据块对应读写标志位清0,将LogPtr置位到LogBase,TMcount置0。(本例仅针对单事务执行,如果是嵌套事务的执行,LogTM结构会更加复杂,具体支持嵌套事务的LogTM实现,请参考[2]) (6) 事务回滚后状态——事务在执行或提交过程中如果出错需要回滚,则将日志中记录的原始数据按照地址映射关系重新加载到对应cache数据块中,同时将各个块对应读写标志位清0,LogPtr重置并且TMcount置0。

图 4 事务版本管理过程——成功提交和回滚共2页: 1 [2] 下一页 论文出处(作者):
本文来自中国科教评价网 基于多Agent的第三方物流系统协作研究
基于JXTA和P2P的资源发布系统研究