中科院_分布式操作系统_分布式共享内存资料.ppt
文本预览下载声明
释放一致性 在上述情况下,如果进程正确使用获取和释放操作(即成对地执行获取-释放操作),那么任何执行顺序的结果都与它们在顺序一致存储器下执行的结果相同。实际上,获取和释放原语将对共享变量上的操作块变为原子操作,以防止出现交错。 * 释放一致性 释放一致性的另一应用是懒惰释放一致性(lazy release consistency)(Keleher等, 1992)。通常的释放一致性,我们下面将称为渴望释放一致性(eager release consistency),和它的区别在于变量是否为“懒惰”的。 * 释放一致性 渴望释放一致性在执行释放操作后,执行此操作的处理机将所有修改的数据传给所有那些已经有其缓冲拷贝且可能需要它的处理机。因为没有办法判断它们是否确实需要它,为安全起见,它们将获得所有修改过的数据。 * 释放一致性 尽管这样将所有数据传输出去的方法很直接,但通常不够有效。在懒惰释放一致性中,在执行释放时,不发送任何数据。相反,在执行获取操作时,处理机试图从拥有这些变量的机器上取得它们的最新值。时间戳协议可用来确定需传送哪些变量。 * 释放一致性 在许多程序中,常常在一个循环中使用临界区。在渴望释放一致性中,每经过一次循环,就要执行一次释放访问,所有修改过的数据就要被发送到拥有其拷贝的所有机器上。这种算法浪费带宽,导致不必要的延时。 * 释放一致性 在懒惰释放一致性中,执行释放访问时不做任何工作。在下一次获取访问时,如果进程发现它已有所需的所有数据,所以也不需要产生任何消息。除非其它进程也执行获取操作,否则使用懒惰释放一致性根本不产生网络流量。在没有外部竞争时,同一进程可以自由地重复执行获取-释放操作对,而且是没有通信开销的。 * 入口一致性 另一种使用临界区的一致模型是入口一致性(Bershad等,1993)。和释放一致性的两个变体一样,它也需要编程人员或编译器在临界区的首尾分别使用获取和释放操作。然而,与释放一致性不同的是,入口一致性要求每个普通的共享数据都要与某种同步变量如锁(lock)或屏障(barrier)相关联。 * 入口一致性 若并行访问数组元素,不同的数组元素就需要与不同的锁相联系。在对一个同步变量执行获取操作时,只保证与这个同步变量有关的共享数据一致。入口一致性与懒惰释放一致性不同在于,后者没有将共享数据与锁或屏障相连系,做获取操作时必须凭经验确认它需要哪些变量。 * 入口一致性 * 入口一致性 将每个同步变量与一组共享变量相连,可减少获取访问和释放访问一个同步变量时的开销,因为只有极少数共享变量需同步。它还允许包含不相关共享变量的多个临界区同时执行同步,增加了并行度。代价是将每个共享数据变量与同步变量相联系,这要求额外的开销,且增加了复杂度。这样编程更为复杂且更易于出错。 * 入口一致性 同步变量的使用如下。每个同步变量有一个当前拥有者,即最近对它执行获取操作的进程。拥有者可以反复进出临界区,而不必在网上发送消息。同步变量的非拥有者进程试图对其执行获取操作时,必须在网上发送消息给拥有者,要求拥有权,获得相关变量的当前值。在非互斥方式下,几个进程同时拥有一个同步变量页是可能的,也就是说,它们只能读,而不能写相关的数据变量。 * 入口一致性 当存储器满足下列所有条件时,就成为入口一致性存储器(Bershad和 Zekauskas,1991): ⑴只有某一进程的保护共享变量全部被更新以后,该进程方允许执行同步变量的获取访问; * 入口一致性 ⑵在一进程以互斥模式访问该进程的同步变量之前,不允许其他进程持有此同步变量,即使在非互斥模式下; ⑶在结束互斥模式下对一个同步变量的访问后,任意其他进程必须与该变量的拥有者核查,才能试图以非互斥模式访问该同步变量。 * 入口一致性 第一个条件说明,当进程执行获取访问时,该操作在所有保护的共享变量均更新后才能结束(即将控制权交给下一条语句)。也就是说,在获取操作时,所有被保护数据的远程修改都必须是可见的。 * 入口一致性 第二个条件说明,在更新一个共享变量前,进程必须以互斥方式进入临界区,以确定没有其他进程同时更新它。 第三个条件说明,若进程试图以非互斥方式进入临界区,它必须与保护此临界区的同步变量的拥有者核查,以获得被保护共享变量的最新拷贝。 * 一致性模型总结 尽管还有其他的一致性模型,以上讨论的是主要的几种。它们的区别在于限制的不同、应用复杂度、编程难易程度及性能的不同。严格一致性最为严格,但因为它在DSM系统中的应用几乎不可能,所以从未使用过。 * 一致性模型总结 顺序一致性是可行的,在编程人员中很流行且广泛应用。但是它的性能很差。解决这个问题的方法是放宽一致性的模型。下图(a)以限制程度递减的顺序给出了几种可能的模型。 * 一致性模型总结 一
显示全部