- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * 在图2-28(a)-(c)中三个事务被三个独立的进程同时执行。如果它们顺序执行,那么X的最终结果应该是1,2或3,取决于哪一个事务最后运行(X可以是一个共享变量,一个文件或某种其它对象)。在图2-28(d)中我们看到了称之为调度表的不同次序,其中事务可以是交错的。调度1是真正串行的,即事务严格按顺序来运行,因此它满足连续性的定义。调度2不是串行的,但是它也是合法的,因为它返回的X值与严格串行返回的值一致。第三个调度是非法的,因为它将X的值置成了5,这是顺序执行所不可能产生的。为保证独立的操作正确交替执行是系统的责任。通过给予系统按照自己需要选择操作执行顺序的自由——假设它得到的答案是正确的——我们消除了程序员自己进行互斥处理的需要,因此简化了编程。 * * * * * * * * * * * * * * * * * * * * * * * * * * * 一、私有工作空间(续) 第一个优化基于这样的一种认识, 当一个进程读取文件而不作修改时,就不需要私有拷贝了。 该进程可以直接读取真正的文件(除非当事务开始后文件已被改动)。 * 一、私有工作空间(续) 当某个进程开始一个事务的时候,只要创建一私有工作空间,该私有工空间只包含一个指向父辈工作区的指针就足够了。 当事务处于最顶层的时候,它的工作区就是真正的文件系统。 当一个进程打开文件进行读取的时候,指针向回指直到可以在父辈(或更老的祖先)工作区中定位文件为止。 当打开一个文件进行写入时,它可用同读取时一样的方法进行定位,不过首先要将其复制到私有工作空间。 * 一、私有工作空间(续) 第二个优化方法大大减少了拷贝工作。 该方法并不是将全部文件都拷入私有工空间,而只将其索引拷入。 * 一、私有工作空间(续) 通过私有索引,文件可以按通常的方式读取。 因为索引中包含有文件开始几个块的磁盘地址。 * 一、私有工作空间(续) 当一个文件块第一次被修改时,将会生成该块的拷贝,其地址也将被插入索引中,然后就可以在不影响原始块的情况下更新这个块。 添加块也是用这个方法解决的。新块有时也称作影象块(shadow block)。 如图所示,运行事务的进程看到了被修改的文件,但是其它进程看到的仍是原来的文件。 * 一、私有工作空间(续) 在一个更复杂的事务中,私有工空间可能包含了大量的文件而不仅仅是一个。 如果事务异常终止,那么私有工空间就会被删除,它所指向的所有私有块也将被释放回自由列表中。 如果事务成功结束,那么私有索引将会被自动移到父辈的工作区中,如图所示。不需要的块将它放回自由列表中。 * 二、写前日志 另一个实现事务的常用方法是写前日志(Writehead log)。有时也称为计划列表、意向表 (intentions list)。 使用这种方法时,文件会真正被修改。但是在改动任何块之前,将一条记录写入稳定存储器的写前日志中,以判断是哪一个事务在进行修改操作,哪一个文件的哪一块被改动了,旧值与新值分别是什么。 只有当日志被成功的写入之后才可以进行文件的修改。 先写写前日志再修改! * 二、写前日志—例子 以下是一个日志如何工作的例子。 图 (a)中有一个使用两个初值均是0的共享变量(或其它对象)x,y的简单事务。 对事务中三条语句中的每一条,在执行之前都要写入一条日志,以记录新值和旧值,它们用斜杠来区分。 * 二、写前日志—例子(续) 如果事务执行成功并被提交,那么它的提交记录将被写入日志,但数据结构不需要变动,因为它们已经被更新了。 如果事务异常终止,那么可用日志来备份初始状态。 * 三、两阶段提交协议 事务提交操作必须是原子性的,即瞬时的和不可再分的。 在分布式系统中,提交操作可能需要不同机器上的多个进程的协作,这些进程中的每一个都有一些被事务改动过的变量、文件、数据库或者其它对象。 本节将研究一个在分布式系统中实现原子性提交的协议。 该协议称为两阶段提交协议(two-phase commit protocol)(Gray,1978)。尽管它不是此类协议中唯一的一个,但它却是使用最广泛的一个 。 * 三、两阶段提交协议(续) 基本思想:进程中的某一个会起到协调者的作用。一般来说这个进程就是执行事务的进程。①提交协议开始时协调者先写入一条日志条目以表明它要开始提交协议。 * 三、两阶段提交协议(续) ②然后它给每个相关进程(下属)发送一条消息通知它们为提交作好准备。 * 三、两阶段提交协议(续) ③当一个下属收到消息后,它先进行检查以确认是否为提交作好了准备,然后将它的决定发回给协调者。 * 三、两阶段提交协议(续) ④当协调者收到了所有的响应后,它就知道是否可以提交或终止。 如果所有的进程都准备提交,那么事务就可以
文档评论(0)