原子性
原子性是访存行为的一个特征,我们一般称具有原子性的访存操作为原子性操作。ARMv8-A架构有两种原子性,一种是单拷贝原子性(single-copy atomicity),另一种是多拷贝原子性(multi-copy atomicity)。
观察者是指系统能观察到访存行为的主体,可以是进程或线程等。但更具体地说,在ARMv8-A架构中,观察者的具体含义为:
可以读写存储系统的机制;
可以取指令或填充指令缓存的机制,这些操作被视为读操作;
可以遍历转换表的机制,这些操作也被视为读操作。
当满足如下条件时,一个读或写的访存行为是单拷贝原子性的:
当对一个内存位置进行一系列写操作后,这个内存位置的值只能是这一系列写操作中一个写操作所写的值,而不可能部分来自于一个写操作,部分来自于另一个;
当一个读操作和一个写操作共同作用于一个内存位置时,读操作读到的值要么是写操作发生之前该内存位置的值,要么是写操作之后该内存位置的值,而不会部分是写之前的值,部分是写之后的值。
在一个多处理器系统中,当对一个内存位置的写操作同时满足如下两个条件时该写操作是满足多拷贝原子性的:
多个写操作是序列化的。这就是说这些写操作的顺序对所有的能观察到它们的观察者来说是一致的,尽管有些观察者可能只能看到部分的写操作;
在一个写操作的观察者都观察到该写操作之前,对该写操作所作用的内存位置的读操作不能返回值。