ARMv8/ARMv9的Exclusive机制深度解读
说明:本文虽然以spinlock函数为例,但并不会深度解读spinlock函数。本文重点解读exclusive机制。
基础知识
-
每一个core都有一个Internal exclusive monitor,它有open和exclusive两个状态,管理着:Load-Exclusive accesses 、Store-Exclusive accesses、Clear-Exclusive(CLREX) instructions
-
Load-Exclusive instruction和Store-Exclusive instruction是LDX, LDAX, STX, STLX
-
可以使用这些指令去构造semaphores、spinlock,以确保在同一个core之间的不同线程的同步操作。在不同的core之间也是可以使用同一个的coherent memory locations来确保同步。
-
Load-Exclusive instruction标记一个block用于独占访问的内存, CTR_EL0定义了这个block的大小。
LDXR Wt, [base{,#0}]
(1)、从base
地址处读取一个数字,存放到Wt寄存器中;
(2)、将Monitor的状态变成exclusive
STXR Ws, Wt, [base{,#0}]
(1)、将Wt中的数据写入到base
地址处,如果成功Ws返回0,否则返回1;
(2)、将Monitor从exclusive状态切换成open, 如果切换成功&#x