存档

文章标签 ‘释放一致性’

存储一致性之释放一致性(Release Consistency)

2011年5月6日 sigma 1 条评论 27,731 views

倘若在弱一致性中,存储器能够区分进入还是离开临界区的话,应用起来会更有效。鉴于此,我们需要两种类型而非一个同步变量或操作。

释放一致性(Gharachorloo等,1990)提供了这样两种操作:

•获取(acquire)操作是用于通知数据存储进程进入临界区的操作。

•释放(release)操作是表明进程刚退出临界区。

释放一致性本质上和弱一致性相同,但是同步访问必须仅是处理机一致的。同步操作被分裂成获得(acquire)和释放(release)操作。

共享存储器在遵守以下规定时就是释放一致的:

  1. 在访问共享变量前,进程所有先前的获取操作都必须成功地完成;
  2. 在允许释放操作前,进程先前的所有读写操作都必须完成;
  3. 获取操作和释放操作必须是顺序一致的(这是胡老师《共享存储体系结构》一书的讲法,夏老师课件里讲的是顺序一致,具体哪种有待考证)。

存储器和软件的协议说明,当软件执行获取操作时,存储器会根据需要确保被保护数据的所有本地拷贝被更新为最新数据,并和远程数据拷贝保持一致。当执行释放操作时,修改的被保护变量要传送到其他机器上。执行获取操作并不能保证本地所作的修改会立即传送到其他本地拷贝。类似地,执行释放操作也不会必然地从其它拷贝引入所做的改变。

上图是释放一致性下的一个有效事件顺序。进程P1执行获取操作,两次改变共享变量x的值,然后执行释放操作。进程P2执行获取操作,并读取x。它应在释放操作时得到x的值为b(除非P2的获取操作先于P1的获取操作)。若P2的获取操作在P1的释放操作之前,则它必须等待到P1执行了释放操作。因为P3在读共享变量前没有执行获取操作,存储器不必给它x的当前值,因此返回a是允许的。

释放一致性分为渴望释放一致和懒惰释放一致性:

渴望释放一致性在执行释放操作后,执行此操作的处理机将所有修改的数据传给所有那些已经有其缓冲拷贝且可能需要它的处理机。因为没有办法判断它们是否确实需要它,为安全起见,它们将获得所有修改过的数据。尽管这样将所有数据传输出去的方法很直接,但通常不够有效。

在懒惰释放一致性中,在执行释放时,不发送任何数据。相反,在执行获取操作时,处理机试图从拥有这些变量的机器上取得它们的最新值。时间戳协议可用来确定需传送哪些变量。

无觅相关文章插件,快速提升流量