状态列举法[1][7]研究整个系统的状态空间。首先用有限状态机来描述协议中组件的模型,并定义全局状态由所有组件的状态组成。然后推导系统所有的可达状态,推导过程从一个初始的全局状态出发,进行每一种可能的转换,这将产生出一些新的状态。新的状态如果是第一次出现,将被插入到工作队列,重复这个过程直到再没有新的状态产生为止。在得到所有的可达状态集合后,需要验证对于每一个可达的全局状态。若所有Cache中的数据都是一致的,即可说明要验证的协议的正确性。在我们的验证模型中,全局状态用(s1,s2)表示,其中s1,s2∈[M E S I]。可以从初始状态(I,I)出发,逐步得到全部可达状态集合。表2给出了所有全局状态,其中有下划线的为不可达状态。在所有可达状态下,Cache间的数据都是一致的,从而验证了在本文模型下MESI一致性协议的正确性。
可以用来刻画模型的规范化语言不是唯一的,这里以CTL(Computation Tree Logic 运算树逻辑)[2]为例来定义模型和进行验证。CTL是常用的布尔命题逻辑(BPL)的扩展,除了支持常规的逻辑操作外,还支持辅助的时序操作和路径操作符。在运算树逻辑中,一条路径是一个无限的状态序列(s0,s1,...),其中存在着由si到si+1的转换。这种方法首先要得到系统的全局状态图,由系统所有可达的全局状态及状态间的转换操作构成。图4给出了我们的验证模型的全局状态图。要证明系统满足数据一致性的性质用AGf表示,这里f为数据保持一致性的命题。并且要求在系统中的所有路径上的所有状态都要满足命题f。在本例中条件满足,这就说明本文模型下MESI一致性协议的正确性。