[architecture]-DBG、DMB、DSB 和 ISB指令介绍
生活随笔
收集整理的這篇文章主要介紹了
[architecture]-DBG、DMB、DSB 和 ISB指令介绍
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
1、DBG、DMB、DSB 和 ISB指令介紹
調試指令、數(shù)據內存屏障指令、數(shù)據同步屏障指令和指令同步屏障指令。
語法
- DBG{cond} {#option}
- DMB{cond} {option}
- DSB{cond} {option}
- ISB{cond} {option}
cond : 是一個可選的條件代碼(請參閱條件執(zhí)行)。
option : 對提示操作的可選限制。
說明:如果指令未實現(xiàn),則與 NOP 效果相同
- (1)、DBG : 調試提示可向調試系統(tǒng)及其相關系統(tǒng)發(fā)送提示。
- (2)、DMB :數(shù)據內存屏障可作為內存屏障使用。 它可確保會先檢測到程序中位于 DMB 指令前的所有顯式內存訪問指令,然后再檢測到程序中位于 DMB 指令后的顯式內存訪問指令。它不影響其他指令在處理器上的執(zhí)行順序
option 的允許值為:SY, 完整的系統(tǒng)DMB 操作。 這是缺省情況,可以省略
舉個例子: 如下的操作,確保dmb之前的內存訪問已經完成了,即數(shù)據讀到了x1、x2、x3、x21,然后后面的inval_dcache_aera會使用這些參數(shù)。
- (3)、DSB : 數(shù)據同步屏障是一種特殊類型的內存屏障。 只有當此指令執(zhí)行完畢后,才會執(zhí)行程序中位于此指令后的指令。 當滿足以下條件時,此指令才會完成:
位于此指令前的所有顯式內存訪問均完成。
位于此指令前的所有緩存、跳轉預測和 TLB 維護操作全部完成
允許的值為:
SY : 完整的系統(tǒng) DSB 操作。 這是缺省情況,可以省略。
UN : 只可完成于統(tǒng)一點的DSB 操作。
ST : 存儲完成后才可執(zhí)行的DSB 操作。
UNST : 只有當存儲完成后才可執(zhí)行的DSB 操作,并且只會完成于統(tǒng)一點
- (4)、ISB : 指令同步屏障可刷新處理器中的管道,因此可確保在 ISB 指令完成后,才從高速緩存或內存中提取位于該指令后的其他所有指令。這可確保提取時間晚于 ISB 指令的指令能夠檢測到 ISB 指令執(zhí)行前就已經執(zhí)行的上下文更改操作的執(zhí)行效果,例如更改ASID 或已完成的 TLB 維護操作,跳轉預測維護操作以及對 CP15 寄存器所做的所有更改。
此外,ISB 指令可確保程序中位于其后的所有跳轉指令總會被寫入跳轉預測邏輯,其寫入上下文可確保 ISB 指令后的指令均可檢測到這些跳轉指令。這是指令流能夠正確執(zhí)行的前提條件。
舉個例子:如果上述代碼中1和2處的之類,同時從icache中取的,那么2處位置sp的值感測不到1處對sp的修改。那么有了isb之類后,保證1處操作完成之后,再進行2處取指令,這樣就不會亂了。
2、Linux Kernel中的smp_mb()、smp_rmb()、smp_wmb()、mb()、wmb()、rmb()
smp_mb()、smp_rmb()、smp_wmb()在底層調用的都是dmb
#define __smp_mb() dmb(ish) #define __smp_rmb() dmb(ishld) #define __smp_wmb() dmb(ishst)#ifndef smp_mb #define smp_mb() __smp_mb() #endif#ifndef smp_rmb #define smp_rmb() __smp_rmb() #endif#ifndef smp_wmb #define smp_wmb() __smp_wmb() #endifmb()、wmb()、rmb()在底層調用的也都是dmb
#define mb() asm volatile("dmb ish" ::: "memory") #define wmb() asm volatile("dmb ishst" ::: "memory") #define rmb() asm volatile("dmb ishld" ::: "memory")問:smp_mb()、smp_rmb()、smp_wmb() 和 mb()、wmb()、rmb()到底有什么區(qū)別嗎
總結
以上是生活随笔為你收集整理的[architecture]-DBG、DMB、DSB 和 ISB指令介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [architecture]-ARMV8
- 下一篇: 探究实现中断下半部分的第四种方式