娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

ARM平臺下獨占訪問指令LDREX和STREX

發布者:GoldenSunrise最新更新時間:2024-11-05 來源: cnblogs關鍵字:ARM平臺  LDREX  STREX 手機看文章 掃描二維碼
隨時隨地手機看文章

為了實現線程間同步,一般都要在執行關鍵代碼段之前加互斥(Mutex)鎖,且在執行完關鍵代碼段之后解鎖。為了實現所謂的互斥鎖的概念,一般都需要所在平臺提供支持。

本文主要用來說明ARM平臺上特有的獨占訪問指令LDREX和STREX的工作原理,以及如何使用。而它們也是ARM平臺上,實現互斥鎖等線程同步工具的基礎。

我們先來看看LDREX和STREX兩條指令的語義。其實LDREX和STREX指令,是將單純的更新內存的原子操作分成了兩個獨立的步驟。

1)LDREX用來讀取內存中的值,并標記對該段內存的獨占訪問:

LDREX Rx, [Ry]

上面的指令意味著,讀取寄存器Ry指向的4字節內存值,將其保存到Rx寄存器中,同時標記對Ry指向內存區域的獨占訪問。

如果執行LDREX指令的時候發現已經被標記為獨占訪問了,并不會對指令的執行產生影響。

2)而STREX在更新內存數值時,會檢查該段內存是否已經被標記為獨占訪問,并以此來決定是否更新內存中的值:

STREX Rx, Ry, [Rz]

如果執行這條指令的時候發現已經被標記為獨占訪問了,則將寄存器Ry中的值更新到寄存器Rz指向的內存,并將寄存器Rx設置成0。指令執行成功后,會將獨占訪問標記位清除。

而如果執行這條指令的時候發現沒有設置獨占標記,則不會更新內存,且將寄存器Rx的值設置成1。

一旦某條STREX指令執行成功后,以后再對同一段內存嘗試使用STREX指令更新的時候,會發現獨占標記已經被清空了,就不能再更新了,從而實現獨占訪問的機制。

大致的流程就是這樣,但是ARM內部為了實現這個功能,還有不少復雜的情況要處理。

在ARM系統中,內存有兩種不同且對立的屬性,即共享(Shareable)和非共享(Non-shareable)。共享意味著該段內存可以被系統中不同處理器訪問到,這些處理器可以是同構的也可以是異構的。而非共享,則相反,意味著該段內存只能被系統中的一個處理器所訪問到,對別的處理器來說不可見。

為了實現獨占訪問,ARM系統中還特別提供了所謂獨占監視器(Exclusive Monitor)的東西,其結構大致如下:

可以看出來,一共有兩種類型的獨占監視器。每一個處理器內部都有一個本地監視器(Local Monitor),且在整個系統范圍內還有一個全局監視器(Global Monitor)。

如果要對非共享內存區中的值進行獨占訪問,只需要涉及本處理器內部的本地監視器就可以了;而如果要對共享內存區中的內存進行獨占訪問,除了要涉及到本處理器內部的本地監視器外,由于該內存區域可以被系統中所有處理器訪問到,因此還必須要由全局監視器來協調。

對于本地監視器來說,它只標記了本處理器對某段內存的獨占訪問,在調用LDREX指令時設置獨占訪問標志,在調用STREX指令時清除獨占訪問標志。

而對于全局監視器來說,它可以標記每個處理器對某段內存的獨占訪問。也就是說,當一個處理器調用LDREX訪問某段共享內存時,全局監視器只會設置針對該處理器的獨占訪問標記,不會影響到其它的處理器。當在以下兩種情況下,會清除某個處理器的獨占訪問標記:

1)當該處理器調用LDREX指令,申請獨占訪問另一段內存時;

2)當別的處理器成功更新了該段獨占訪問內存值時。

對于第二種情況,也就是說,當獨占內存訪問內存的值在任何情況下,被任何一個處理器更改過之后,所有申請獨占該段內存的處理器的獨占標記都會被清空。

另外,更新內存的操作不一定非要是STREX指令,任何其它存儲指令都可以。但如果不是STREX的話,則沒法保證獨占訪問性。

現在的處理器基本上都是多核的,一個芯片上集成了多個處理器。而且對于一般的操作系統,系統內存基本上都被設置上了共享屬性,也就是說對系統中所有處理器可見。因此,我們這里主要分析多核系統中對共享內存的獨占訪問的情況。

為了更加清楚的說明,我們可以舉一個例子。假設系統中有兩個處理器內核,而一個程序由三個線程組成,其中兩個線程被分配到了第一個處理器上,另外一個線程被分配到了第二個處理器上。且他們的執行序列如下:

大致經歷的步驟如下:

1)CPU2上的線程3最早執行LDREX,鎖定某段共享內存區域。它會相應更新本地監視器和全局監視器。

2)然后,CPU1上的線程1執行LDREX,它也會更新本地監視器和全局監視器。這時在全局監視器上,CPU1和CPU2都對該段內存做了獨占標記。

3)接著,CPU1上的線程2執行LDREX指令,它會發現本處理器的本地監視器對該段內存有了獨占標記,同時全局監視器上CPU1也對該段內存做了獨占標記,但這并不會影響這條指令的操作。

4)再下來,CPU1上的線程1最先執行了STREX指令,嘗試更新該段內存的值。它會發現本地監視器對該段內存是有獨占標記的,而全局監視器上CPU1也有該段內存的獨占標記,則更新內存值成功。同時,清除本地監視器對該段內存的獨占標記,還有全局監視器所有處理器對該段內存的獨占標記。

5)下面,CPU2上的線程3執行STREX指令,也想更新該段內存值。它會發現本地監視器擁有對該段內存的獨占標記,但是在全局監視器上CPU1沒有了該段內存的獨占標記(前面一步清空了),則更新不成功。

6)最后,CPU1上的線程2執行STREX指令,試著更新該段內存值。它會發現本地監視器已經沒有了對該段內存的獨占標記(第4步清除了),則直接更新失敗,不需要再查全局監視器了。

所以,可以看出來,這套機制的精髓就是,無論有多少個處理器,有多少個地方會申請對同一個內存段進行操作,保證只有最早的更新可以成功,這之后的更新都會失敗。失敗了就證明對該段內存有訪問沖突了。實際的使用中,可以重新用LDREX讀取該段內存中保存的最新值,再處理一次,再嘗試保存,直到成功為止。

還有一點需要說明,LDREX和STREX是對內存中的一個字(Word,32 bit)進行獨占訪問的指令。如果想獨占訪問的內存區域不是一個字,還有其它的指令:

1)LDREXB和STREXB:對內存中的一個字節(Byte,8 bit)進行獨占訪問;

2)LDREXH和STREXH:中的一個半字(Half Word,16 bit)進行獨占訪問;

3)LDREXD和STREXD:中的一個雙字(Double Word,64 bit)進行獨占訪問。

它們必須配對使用,不能混用。


關鍵字:ARM平臺  LDREX  STREX 引用地址:ARM平臺下獨占訪問指令LDREX和STREX

上一篇:u-boot頂層目錄config.mk分析
下一篇:ARM MMU

推薦閱讀最新更新時間:2025-05-27 11:23

ARM平臺獨占訪問指令LDREXSTREX
為了實現線程間同步,一般都要在執行關鍵代碼段之前加互斥(Mutex)鎖,且在執行完關鍵代碼段之后解鎖。為了實現所謂的互斥鎖的概念,一般都需要所在平臺提供支持。 本文主要用來說明ARM平臺上特有的獨占訪問指令LDREX和STREX的工作原理,以及如何使用。而它們也是ARM平臺上,實現互斥鎖等線程同步工具的基礎。 我們先來看看LDREX和STREX兩條指令的語義。其實LDREX和STREX指令,是將單純的更新內存的原子操作分成了兩個獨立的步驟。 1)LDREX用來讀取內存中的值,并標記對該段內存的獨占訪問: LDREX Rx, 上面的指令意味著,讀取寄存器Ry指向的4字節內存值,將其保存到Rx寄存器中,同時標記對Ry指向內存區域的獨
[單片機]
<font color='red'>ARM</font><font color='red'>平臺</font>下<font color='red'>獨占</font><font color='red'>訪問</font><font color='red'>指令</font><font color='red'>LDREX</font>和<font color='red'>STREX</font>
Arm 計算平臺加持,全新 Llama 3.2 LLM實現AI 推理的全面加速和擴展
在 Arm CPU 上運行 Meta 最新 Llama 3.2 版本,其云端到邊緣側的性能均得到顯著提升,這為未來 AI 工作負載提供了強大支持 Meta 與 Arm 的合作加快了用例的創新速度,例如個性化的端側推薦以及日常任務自動化等 Arm 十年來始終積極投資AI領域,并廣泛開展開源合作,為 1B 至 90B 的 LLM 實現在 Arm 計算平臺上無縫運行 人工智能 (AI) 的迅猛發展意味著大語言模型 (LLM) 的新版本不斷推陳出新。要充分發揮 AI 的潛力并抓住其帶來的機遇,需要實現 LLM 從云端到邊緣側的廣泛部署,而這也伴隨著對計算和能源需求的大幅增長。整個生態系統正攜手尋找應對這一挑戰的解決方
[嵌入式]
ARM平臺設備WinCE下UART配置
UART串口作為最為常用的工業設備接口之一被廣泛且大量的應用,本文就基于Toradex ARM平臺設備為例介紹WinCE下UART配置。 我們采用Colibri ARM核心板產品搭配Colibri開發板來進行測試,OS為Toradex官方發布的最新版WinCE,其中Colibri系列默認定義了三個串口,UART A, UART B和UART C,其中UART A用作調試串口使用,下面就分別針對不同SoC產品進行說明。 1).基于NXP i.MX6Solo/DualLite的Colibri i.MX6產品 系統默認定義COM 1 – UART A (調試串口,全功能);COM 2 – UART B (支持Flow con
[單片機]
基于ARM9-Linux平臺的車載導航系統設計
1. 前言 近年來,隨著國民經濟的迅速發展,人民生活水平的日益提高,各種機動車輛的數量急劇增加,同時對汽車導航系統的需求數量也急劇增加。本文采用了基于ARM9-Linux 平臺的嵌入式系統作為系統的控制平臺,提高系統的性能、集成度以及可擴展性;運用GPS 定位技術和先進的GPRS 無線通信技術相結合的方案,以實現車輛電子地圖導航和短消息報警;通過LCD 模塊的設計實現了車輛各種信息的靈活顯示,豐富了人機交互界面,使得系統更加智能化。本文所研究的車載GPS 導航系統是智能交通系統(ITS,Intelligent Transportation System)的一個重要分支,對解決城市交通問題具有重要意義。 2. GPS 全球定位系統(
[單片機]
基于<font color='red'>ARM</font>9-Linux<font color='red'>平臺</font>的車載導航系統設計
基于AT91RM9200的嵌入式ARM開發平臺的實現
嵌入式系統是以應用為中心,以計算機技術為基礎,軟硬件可以裁剪來適應系統對功能、可靠性、成本、體積、功耗要求嚴格的專用計算機體系。隨著各種微處理器功能的完善以及軟件上操作系統的支持,使得嵌入式系統有了完整的體系架構。 在專用的嵌入式板上運行操作系統需要利用Bootloader來引導加載內核和系統程序。Bootloader主要實現初始化硬件設備、建立內存空間的映射圖,從而把嵌入式硬件和嵌入式操作系統很好地銜接起來。 U-Boot是當前比較流行、功能強大、比較有代表性的Bootloader,支持的處理器包括Powerarm(ARM7,ARM9,Srongarm,Xscale)、MIPS、X86、Motorola等系列。 與
[單片機]
基于AT91RM9200的嵌入式<font color='red'>ARM</font>開發<font color='red'>平臺</font>的實現
ARM Cortex-A8處理器為TI OMAP 3平臺帶來領先業界的超高效能
TI OMAP3430處理器展現低功率、高效能之多媒體、網頁瀏覽及游戲等眾多功能   德州儀器(Texas Instrument, TI)于日前舉行的3GSM全球大會中,展出采用ARM Cortex A8處理器核心之 OMAP 3430處理器,并于會中展示包括網頁瀏覽、高分辨率影片、先進Java 多媒體及3D游戲在內的多項手機功能,以及其在電源電效率及效能方面的無限潛能。   德州儀器副總裁暨無線終端產品事業部總經理Alain Mutricy表示:“對OMAP3平臺的開發而言,與ARM的合作是相當重要的一步。從OMAP 3平臺所表現出來的高延展性,即可驗證ARM Cortex-A8處理器的卓越效能。在德州儀器的低功率65納米制
[新品]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 老河口市| 鲁甸县| 无锡市| 治县。| 巴青县| 涞源县| 青阳县| 贵阳市| 西吉县| 仪征市| 丹巴县| 岳普湖县| 积石山| 扎赉特旗| 西丰县| 深州市| 深泽县| 乌兰浩特市| 凌源市| 洛隆县| 衡阳市| 余姚市| 库伦旗| 嘉兴市| 手游| 石屏县| 阳西县| 松江区| 泰来县| 西乡县| 团风县| 沧州市| 瓮安县| 许昌市| 临汾市| 凯里市| 宁都县| 哈巴河县| 徐闻县| 遵化市| 沂南县|