标准原子指令扩展命名为A,包含对原子原子读-修改-写存储器,以支持不同hart之间对同一片内存空间的同步。A扩展提供了两种原子指令,包括load-reserved/store-conditional和fetch-and-op存储指令。两种指令都支持各种存储器的一致性排序,包括无序、获取、释放和顺序一致性。这些指令使得RISC-V可以支持RCsc内存一致性模型。
原子指令指定顺序
基础RISC-V ISA有一个宽松的内存模型,使用FENCE指令来施加额外的顺序约束。地址空间被执行环境划分为存储器域和I/O域,FENCE指令提供了对其中一个或两个访问地址域的访问顺序。
为了对release consistency提供更有效的支持,每个原子指令包含两个bit:aq和rl,用于额外指定内存访问的顺序约束。这些bit会约束特定域(存储器域或I/O域)内的访问顺序,两个域之间的访问无法做顺序约束,只能使用FENCE指令规定跨域访问顺序。
- 如果aq和rl都为0,则不对原子操作添加额外的顺序约束;
- 如果只有aq = 1,则原子内存操作被视为acquire access,即在acquire操作之前,同一个hart上不会执行同一个域的内存操作;
- 如果只有rl = 1,则原子内存操作被视为release access,即同一个域的内存操作只会在release操作之前执行;
- 如果aq和rl都为1,则原子内存操作是sequentially consistent,即这个hart上的内存操作是顺序执行的。