1.前言
2.基本概念
- Observer
可以發起對memory read/write訪問的都是observer;
- Observability
是一種觀察能力,通過read可以感知到別的observer的write,通過感知到別的observer的read而不能write的這種能力;
- observed write
觀察到了某個observer的write動作;
- locally observed write
是限定在一個shareability domain內部,或者指定的一個observer的集合都觀察到了某個observer的write動作;
- observed read
當某個observer無法通過write操作來影響另一個observer的read操作的時候,我們就認為該observer已經感知到了另一個observer的read操作;
- globally observed read
就是一個shareability domain內所有的observers都觀察到了一個observer的read操作;
- completion
內存訪問指令完成
3. 訪存指令完成的條件
內存訪問指令完成,需滿足如下條件:
(1)該內存訪問操作被特定的shareability domain內的所有的observer globally observed
(2)和該內存訪問指令相關的translation table walks(也會引發內存訪問操作)必須執行完畢,即:
a)這個translation table walks而引起的內存訪問操作被該shareability domain內的所有的observer globally observed
b)TLB已經完成更新
4. 內存屏障
按照嚴格程度從低到高排列:DMB < DSB < ISB
- DMB:數據存儲器隔離
DMB 指令保證僅當所有在它前面的存儲器訪問操作都執行完畢后,才提交(commit)在它后面的存儲器訪問操作;
- DSB:數據同步隔離。
比 DMB 嚴格,僅當所有在它前面的存儲器訪問操作都執行完畢后,才執行在它后面的指令(亦即任何指令都要等待存儲器訪問操作——譯者注);
- ISB:指令同步隔離
最嚴格,它會清洗流水線,以保證所有它前面的指令都執行完畢之后,才執行它后面的指令.
5. 參考文檔
[1] DDI0487A_k_armv8_arm_iss10775.pdf
[2] ARMv8之Atomicity