小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

DSB,ISB,DMB指令

 BeautymengRoom 2013-05-13

DSB,ISB,DMB指令

分類: ARM 1489人閱讀 評(píng)論(0) 收藏 舉報(bào)

目錄(?)[+]

轉(zhuǎn)載:   http://infocenter./help/index.jsp?topic=/com.arm.doc.dui0204hc/CIHJFGFE.html

http://www./h/Cortex_M3_DefinGuide/29.php



4.11.9. DBG、DMB、DSB 和 ISB

調(diào)試指令、數(shù)據(jù)內(nèi)存屏障指令、數(shù)據(jù)同步屏障指令和指令同步屏障指令。

語(yǔ)法

DBG{cond} {#option}

DMB{cond} {option}

DSB{cond} {option}

ISB{cond} {option}

其中:

cond

是一個(gè)可選的條件代碼(請(qǐng)參閱條件執(zhí)行)。

option

對(duì)提示操作的可選限制。

用法

這些是提示指令。 是否實(shí)現(xiàn)這些指令是可選的。 只要其中任何一個(gè)指令未實(shí)現(xiàn),則與 NOP 效果相同。

DBG

調(diào)試提示可向調(diào)試系統(tǒng)及其相關(guān)系統(tǒng)發(fā)送提示。 有關(guān)這些系統(tǒng)如何使用此指令的信息,請(qǐng)參這些系統(tǒng)的文檔。

DMB

數(shù)據(jù)內(nèi)存屏障可作為內(nèi)存屏障使用。 它可確保會(huì)先檢測(cè)到程序中位于 DMB 指令前的所有顯式內(nèi)存訪問(wèn)指令,然后再檢測(cè)到程序中位于 DMB 指令后的顯式內(nèi)存訪問(wèn)指令。它不影響其他指令在處理器上的執(zhí)行順序。

option 的允許值為:

SY

完整的系統(tǒng)DMB 操作。 這是缺省情況,可以省略。

DSB

數(shù)據(jù)同步屏障是一種特殊類型的內(nèi)存屏障。 只有當(dāng)此指令執(zhí)行完畢后,才會(huì)執(zhí)行程序中位于此指令后的指令。 當(dāng)滿足以下條件時(shí),此指令才會(huì)完成:

  • 位于此指令前的所有顯式內(nèi)存訪問(wèn)均完成。

  • 位于此指令前的所有緩存、跳轉(zhuǎn)預(yù)測(cè)和 TLB 維護(hù)操作全部完成。

允許的值為:

SY

完整的系統(tǒng) DSB 操作。 這是缺省情況,可以省略。

UN

只可完成于統(tǒng)一點(diǎn)的DSB 操作。

ST

存儲(chǔ)完成后才可執(zhí)行的DSB 操作。

UNST

只有當(dāng)存儲(chǔ)完成后才可執(zhí)行的DSB 操作,并且只會(huì)完成于統(tǒng)一點(diǎn)。

ISB

指令同步屏障可刷新處理器中的管道,因此可確保在 ISB 指令完成后,才從高速緩存或內(nèi)存中提取位于該指令后的其他所有指令。這可確保提取時(shí)間晚于 ISB 指令的指令能夠檢測(cè)到 ISB 指令執(zhí)行前就已經(jīng)執(zhí)行的上下文更改操作的執(zhí)行效果,例如更改ASID 或已完成的 TLB 維護(hù)操作,跳轉(zhuǎn)預(yù)測(cè)維護(hù)操作以及對(duì) CP15 寄存器所做的所有更改。

此外,ISB 指令可確保程序中位于其后的所有跳轉(zhuǎn)指令總會(huì)被寫(xiě)入跳轉(zhuǎn)預(yù)測(cè)邏輯,其寫(xiě)入上下文可確保 ISB 指令后的指令均可檢測(cè)到這些跳轉(zhuǎn)指令。這是指令流能夠正確執(zhí)行的前提條件。

option 的允許值為:

SY

完整的系統(tǒng)DMB 操作。 這是缺省情況,可以省略。

體系結(jié)構(gòu)

這些 ARM 和 32 位 Thumb 指令可用于 ARMv7。

這些指令均無(wú) 16 位 Thumb 版本。








訪問(wèn)存儲(chǔ)器指令

編譯器不能C語(yǔ)言直接生成的主存儲(chǔ)器指令是用于裝載和存儲(chǔ)的專用指令(LDREXSTREX)。這些指令常常專用于存儲(chǔ)器的存取操作,例如在不同的線程之間提供人工干預(yù)操作。


屏蔽指令

Cortex-M3,這種內(nèi)核支持許多屏蔽指令。在下一個(gè)指令或者事件開(kāi)始執(zhí)行以前,這些屏蔽指令常常用于確保必然事件執(zhí)行完成。

在處理器內(nèi)部指令同步屏蔽ISB)刷新流水線;以致于這個(gè)指令執(zhí)行完以后,緊接著從緩存或者存儲(chǔ)器取出指令表。這個(gè)表會(huì)改變這個(gè)系統(tǒng),例如MPU立即生效。

數(shù)據(jù)同步屏蔽DSB)指令作為一種特殊的存儲(chǔ)器屏蔽指令。訪問(wèn)外部存儲(chǔ)器操作完成之前,執(zhí)行完成數(shù)據(jù)同步屏蔽指令(DSB)。執(zhí)行數(shù)據(jù)同步屏蔽指令,在該指令沒(méi)有完成以前不再執(zhí)行任何指令——換句話說(shuō),執(zhí)行完成所有的掛起操作。

數(shù)據(jù)存儲(chǔ)屏蔽DMB)指令作為一種存儲(chǔ)器屏蔽指令。數(shù)據(jù)存儲(chǔ)屏蔽(DMB)指令和數(shù)據(jù)同步屏蔽(DSB)指令有微小的差別。數(shù)據(jù)存儲(chǔ)屏蔽(DMB)指令確保:數(shù)據(jù)同步屏蔽(DSB)指令執(zhí)行完成之前,訪問(wèn)任意存儲(chǔ)器;執(zhí)行數(shù)據(jù)同步屏蔽(DSB)指令后,緊接著執(zhí)行訪問(wèn)任意存儲(chǔ)器操作。

如例8所示,典型MPU代碼的一部分顯示如何這些屏蔽指令。用嵌入?yún)R編完成一個(gè)小的功能,每個(gè)功能都含有一條屏蔽指令。編譯時(shí)鏈接器將連接這些功能。

8用預(yù)處理指令使用屏蔽指令的范例

/*pseudo_intrinsics.c */

/*Small embedded assembly functions for barrier instructions*/

/*Link with armlink --inline ... */

__asmvoid __ISB(void)

{

ISB

BXlr

}

__asmvoid __DSB(void)

{

DSB

BXlr

}

/*scs.c - Initialize System Control Space registers */

voidSCS_init(void)

{

/*Code to configure the MPU regions inserted here

*/

/*Enable the MPU */

SCS.MPU.Ctrl|= 1;

/*Force Memory Writes before continuing */

__DSB();

/*Flush and refill pipline with updated permissions */

__ISB();

}








4.3.5 匯編語(yǔ)言:指令隔離(barrier)指令和存儲(chǔ)器隔離指令

CM3 中的另一股新鮮空氣是一系列的隔離指令(亦可以譯成“屏障”、“路障”,可互換使用——譯者 注)。它們?cè)谝恍┙Y(jié)構(gòu)比較復(fù)雜的存儲(chǔ)器系統(tǒng)中是需要的(典型地用于流水線和寫(xiě)緩沖——譯者注)。在 這類系統(tǒng)中,如果沒(méi)有必要的隔離,會(huì)導(dǎo)致系統(tǒng)發(fā)生紊亂危象(race condition),(相當(dāng)于數(shù)電中的“競(jìng)爭(zhēng) 與冒險(xiǎn)”——譯者注).

舉例來(lái)說(shuō),如果可以在運(yùn)行時(shí)更改存儲(chǔ)器的映射關(guān)系或者內(nèi)存保護(hù)區(qū)的設(shè)置,(通過(guò)寫(xiě) MPU 的寄存 器),就必須在更改之后立即補(bǔ)上一條 DSB 指令(數(shù)據(jù)同步指令)。因?yàn)閷?duì) MPU 的寫(xiě)操作很可能會(huì)被放 到一個(gè)寫(xiě)緩沖中。寫(xiě)緩沖是為了提高存儲(chǔ)器的總體訪問(wèn)效率而設(shè)的,但它也有副作用,其中之一,就是 會(huì)導(dǎo)致寫(xiě)內(nèi)存的指令被延遲幾個(gè)周期執(zhí)行,因此對(duì)存儲(chǔ)器的設(shè)置不能即刻生效,這會(huì)導(dǎo)致緊臨著的下一 條指令仍然使用舊的存儲(chǔ)器設(shè)置——但程序員的本意顯然是使用新的存儲(chǔ)器設(shè)置。這種紊亂危象是后患 無(wú)窮的,常會(huì)破壞未知地址的數(shù)據(jù),有時(shí)也會(huì)產(chǎn)生非法地址訪問(wèn) fault。紊亂危象還有其它的表現(xiàn)形式, 后續(xù)章節(jié)會(huì)一一介紹。CM3 提供隔離指令族,就是要消滅這些紊亂危象(在有些講解計(jì)算機(jī)體系體系結(jié) 構(gòu)的書(shū)中,這類紊亂危象也被稱為“存儲(chǔ)器相關(guān)”——譯注)。

CM3 中共有3 條隔離指令,如表4.27 所列

表4.27 隔離指令

指令名

功能描述

DMB

數(shù)據(jù)存儲(chǔ)器隔離。DMB 指令保證: 僅當(dāng)所有在它前面的存儲(chǔ)器訪問(wèn)操作

都執(zhí)行完畢后,才提交(commit)在它后面的存儲(chǔ)器訪問(wèn)操作。

DSB

數(shù)據(jù)同步隔離。比 DMB 嚴(yán)格: 僅當(dāng)所有在它前面的存儲(chǔ)器訪問(wèn)操作

都執(zhí)行完畢后,才執(zhí)行在它后面的指令(亦即任何指令都要等待存儲(chǔ)器訪 問(wèn)操作——譯者注)

ISB

指令同步隔離。最嚴(yán)格:它會(huì)清洗流水線,以保證所有它前面的指令都執(zhí)

行完畢之后,才執(zhí)行它后面的指令。

DMB 在雙口 RAM 以及多核架構(gòu)的操作中很有用。如果 RAM 的訪問(wèn)是帶緩沖的,并且寫(xiě)完之后

馬上讀,就必須讓它“喘口氣”——用 DMB 指令來(lái)隔離,以保證緩沖中的數(shù)據(jù)已經(jīng)落實(shí)到 RAM 中。 DSB 比 DMB 更保險(xiǎn)(當(dāng)然也是有執(zhí)行代價(jià)的),它是寧可錯(cuò)殺也不漏網(wǎng)——清空了寫(xiě)緩沖,使得任 何它后面的指令,不管要不要使用先前的存儲(chǔ)器訪問(wèn)結(jié)果,通通等待訪問(wèn)完成。大蝦們可以在有絕 對(duì)信心時(shí)使用 DMB,新手還是使用 DSB 比較保險(xiǎn)。
同 DMB/DSB 相比,ISB 指令看起來(lái)似乎最強(qiáng)悍,但是卻一身都是“愣勁”,不由分說(shuō)就“動(dòng)粗”。
不過(guò)它還有其它的用場(chǎng)——對(duì)于高級(jí)底層技巧:“自我更新”(self-mofifying)代碼,非常有用。舉例 來(lái)說(shuō),如果某個(gè)程序從下一條要執(zhí)行的指令處更新了自己,但是先前的舊指令已經(jīng)被預(yù)取到流水線 中去了,此時(shí)就必須清洗流水線,把舊版本的指令洗出去,再預(yù)取新版本的指令。因此,必須在被 更新代碼段的前面使用 ISB,以保證舊的代碼從流水線中被清洗出去,不再有機(jī)會(huì)執(zhí)行(譯者覺(jué)得 這種做法太工于技巧,有點(diǎn)“作秀”,現(xiàn)實(shí)編程中應(yīng)該極少會(huì)用到,因此讀者不必太鉆它)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多