Page 12 - 《软件学报》2025年第9期
P. 12

徐学政 等: RISC-V  内存一致性模型的同地址顺序一致性定理证明                                             3923


                 (a,b)∈int 或  int(a,b), 满足: int(a,b)≜proc(a)=proc(b).
                    定义  3. ext (external) 是一个二元关系集合, 表示两个事件位于不同线程. 若事件              a  和  b  满足  ext 关系, 记为
                 (a,b)∈ext 或  ext(a,b), 满足: ext(a,b)≜proc(a)≠proc(b).
                    由  int 和  ext 的定义可得: ∀a,b∈E, int(a,b)∨ext(a,b).
                    定义  4. loc (same location) 是一个二元关系集合, 表示两个事件的访存地址相同. 若事件            a  和  b  满足  loc 关系,
                 可知  addr(a)=addr(b), 记为  (a,b)∈loc 或  loc(a,b). 显然, loc 具有传递性和对称性.
                    定义  5. gmo  是一个二元关系集合, 表示两个事件在全局访存序中的顺序关系. 若事件                     a  和  b  满足  gmo  关系,
                 记为  (a,b)∈gmo  或  gmo(a,b), 满足: gmo(a,b)≜id(a)<id(b). 显然, gmo  是非对称的. 所有访存事件在  gmo  中构成全序,
                 即: ∀a,b∈E, a≠b→gmo(a,b)∨gmo(b,a).
                    定义  6. po  是一个二元关系集合, 表示同线程内两个事件在程序执行中的先后顺序. 若事件                       a  和  b  满足  po  关
                 系, 记为  (a,b)∈po  或  po(a,b), 满足: po(a,b)≜int(a,b)∧poidx(a)<poidx(b). 显然, po  是传递的、非对称的. 同线程的访
                 存事件在   po  上构成全序, 即: ∀a,b∈E, a≠b∧int(a,b)→po(a,b)∨po(b,a).
                    定义  7. rf (read from) 是一个二元关系集合, 表示读事件的值来自某个写事件. 若事件               a  和  b  满足  rf 关系, 可
                 知: loc(a,b)∧a∈W∧b∈R, 记为  (a,b)∈rf 或  rf(a,b). 注意, 满足  loc(a,b)∧a∈W∧b∈R  的事件  a  和  b  并不一定满足  rf
                 关系.
                    定义  8. co (coherence order) 是一个二元关系集合, 表示对同地址的两个写事件的顺序关系. 若事件                a  和  b  满
                 足  co  关系, 记为  (a,b)∈co  或  co(a,b), 满足: co(a,b)≜loc(a,b)∧a∈W∧b∈W∧gmo(a,b). 显然, co  是传递的、非对称的.
                 由  gmo  的定义可知, 所有同地址的写事件在         co  上构成全序, 即: ∀a,b∈W, a≠b∧loc(a,b)→co(a,b)∨co(b,a).
                    定义   9. fr (from read) 是一个二元关系集合, 属于     rf 和  co  的派生关系. 若事件   a  和  b  满足  fr  关系, 记为
                 (a,b)∈fr 或  fr(a,b), 满足: fr(a,b)≜a∈R∧b∈W∧(∃x∈E, rf(x,a)∧co(x,b)). 图  6  给出了  fr 关系的示意图.


                                                                  a: R x=1
                                                           rf        fr
                                                            co
                                                  x: W x=1       b: W x=2
                                                  图 6 派生关系    fr 的示意图

                    定义  10. poloc (program order with the same location) 是一个二元关系集合, 属于  po  和  loc 的派生关系. 若事件
                 a  和  b  满足  poloc 关系, 记为  (a,b)∈poloc 或  poloc(a,b), 满足: poloc(a,b)≜po(a,b)∧loc(a,b). 显然, poloc 关系是传递
                 的和非对称的.
                    定义  11. ppo1  是一个二元关系集合, 表示符合保留程序序规则             1  的事件关系. 若事件     a  和  b  满足  ppo1  关系,
                 记为  (a,b)∈ppo1  或  ppo1(a,b), 满足: ppo1(a,b)≜poloc(a,b)∧b∈W.
                    定义  12. ppo2  是一个二元关系集合, 表示符合保留程序序规则             2  的事件关系. 若事件     a  和  b  满足  ppo2  关系,
                 记为  (a,b)∈ppo2  或  ppo2(a,b), 满足:
                          ppo2(a,b)≜poloc(a,b)∧a∈R∧b∈R∧(∄x∈W, poloc(a,x)∧poloc(x,b))∧(∄x∈W, rf(x,a)∧rf(x,b)).
                    定义  13. ppo  是一个二元关系集合, 表示保留程序序, 是程序序中不允许乱序的部分. RVWMO                     定义了   13  条
                 保留程序序规则, 本文使用前两条, 记为           ppo1  和  ppo2. 其余  11  条规则与本文的定理证明无关. 若事件       a  和  b  满足
                 ppo  关系, 记为  (a,b)∈ppo  或  ppo(a,b), 满足: ppo(a,b)≜ppo1(a,b)∨ppo2(a,b).
                    定义  14. 部分关系根据是否位于同一线程划分为两个子关系:
                                          rfi(a,b)≜rf(a,b)∧int(a,b), rfe(a,b)≜rf(a,b)∧ext(a,b);
                                         coi(a,b)≜co(a,b)∧int(a,b), coe(a,b)≜co(a,b)∧ext(a,b);
                                          fri(a,b)≜fr(a,b)∧int(a,b), fre(a,b)≜fr(a,b)∧ext(a,b).
                 进一步可得:
   7   8   9   10   11   12   13   14   15   16   17