在具有多個執(zhí)行線程的系統(tǒng)中,某些資源可能不能同時被訪問或者修改。這些資源可以是外圍設備或內(nèi)存緩沖區(qū)和數(shù)據(jù)結(jié)構(gòu),例如打印機不會在一個時刻響應多個訪問。這就需要一些同步機制去處理這些資源的同時控制(concurrency control)問題。需要注意的是,這里說的“同步”,不是同時的意思,而是協(xié)同的意思。某個資源使用受限的情況下,你用完了我用,大家協(xié)同工作。
可以通過“鎖(lock)”機制來實現(xiàn)同步,對這些不能同時被訪問的共享資源提供一個鎖。線程在訪問這些資源之前必須先獲得鎖權(quán)限。這時,如果其它線程也想申請鎖,會發(fā)現(xiàn)鎖被占用,只能等待鎖被釋放。擁有鎖的線程在訪問結(jié)束后,必須釋放鎖,以便其它的線程可以繼續(xù)訪問。
可以使用內(nèi)存中的變量來實現(xiàn)簡單的鎖,該變量可以包含兩個值(狀態(tài)):LOCKED和UNLOCKED。進程如果發(fā)現(xiàn)這個鎖是UNLOCKED狀態(tài),即可以修改為LOCKED,并擁有該資源的訪問權(quán)限。
圖中的整個過程分為三個步驟:
讀內(nèi)存中的變量,并做狀態(tài)比較;
修改寄存器值;
寫內(nèi)存變量。
在具有多個核或線程的系統(tǒng)中,此方法容易受到另一個線程的攻擊,即在變量值的第一次讀取和回寫之間修改內(nèi)存中的值。
這個問題可以用軟件解決,也可以用額外的硬件功能來解決。一種解決方案可以是使“讀-比較-修改-寫(read-compare-modify-write)”的原子操作指令。ARM架構(gòu)的早期版本使用SWP指令實現(xiàn)類似的功能。
ARMv8-A使用下面要介紹的,一種特殊類型的加載和存儲指令來檢測內(nèi)存中的值自上次讀取以來是否發(fā)生了變化。ARMv8-A 64位指令集提供了兩條獨占指令LDXR(Load Exclusive)和STXR(Store Exclusive)。
當使用LDXR指令讀取地址時,會將其標記為獨占訪問。如果使用STXR指令向標記為獨占的地址寫入,則會清除獨占狀態(tài)。嘗試使用STXR指令向未標記為獨占的地址寫入將會失敗。地址的獨占狀態(tài)由稱為獨占監(jiān)視器(Exclusive Monitor)的硬件維護。
使用獨占load/store后的鎖實現(xiàn):
鎖值的更新不能保證是原子的,但現(xiàn)在可以檢測到初始讀取和更新之間的任何更改。如果獨占存儲失敗,軟件可以再次嘗試獲取鎖。
前面提到過,需要對標記為獨占的地址進行監(jiān)控。獨占監(jiān)視器可以是一個簡單的狀態(tài)機,其狀態(tài)可以是開放的(open)和獨占的(exclusive)。ARM架構(gòu)定義了兩種不同的狀態(tài)機:本地獨占監(jiān)視器(Local Exclusive Monitor)和全局獨占監(jiān)視器(Global Exclusive Monitor)。
根據(jù)被訪問地址的可共享性屬性,檢查本地監(jiān)視器或全局監(jiān)視器的獨占訪問。
對于Non-shareable地址的獨占訪問檢查僅在本地獨監(jiān)視器。
對shareable地址的獨占訪問檢查在本地監(jiān)視器或全局監(jiān)視器。
每個處理器核都有一個與其關(guān)聯(lián)的本地監(jiān)視器。本地監(jiān)視器可以構(gòu)造為保存特定地址的獨占狀態(tài),也可以構(gòu)造為不保存該地址。本地監(jiān)視器作為處理器的一部分實現(xiàn)。
全局監(jiān)視器在多個處理器核之間共享。與本地監(jiān)視器一樣,它們只需要監(jiān)視一個地址,如果監(jiān)視器可以標記多個地址,則每個地址都有自己的狀態(tài)機。
ARM體系結(jié)構(gòu)要求以下內(nèi)存類型能夠與全局監(jiān)視器一起工作:
如果程序無法獲得鎖,會不斷嘗試申請鎖。但是這樣會浪費處理器的資源,并且消耗不必要的功耗。有幾種方式可以改善這個問題。對于在釋放鎖之前等待時間相對較長的情況,鎖代碼可以返回給操作系統(tǒng)調(diào)度程序,這允許在釋放鎖之前調(diào)度其它線程。
對于鎖可能快速被釋放的情況,ARM架構(gòu)有一種機制,即允許處理器暫停執(zhí)行,進入低功耗模式,等待鎖被釋放。ARM提供WFE(Wait For Event)指令,如果處理器申請鎖失敗,程序可以執(zhí)行WFE進入等待。以前的做法是,負責釋放鎖的代碼中會執(zhí)行SEV(Send Event)指令,通過發(fā)送EVENT喚醒正在等待鎖資源的處理器核?,F(xiàn)在ARMv8-A架構(gòu)中,清除全局監(jiān)視器會自動向所有連接的處理器核發(fā)送EVENT喚醒。
審核編輯 :李倩
-
ARM
+關(guān)注
關(guān)注
134文章
9328瀏覽量
375660 -
寄存器
+關(guān)注
關(guān)注
31文章
5427瀏覽量
123705 -
變量
+關(guān)注
關(guān)注
0文章
614瀏覽量
28862
原文標題:技術(shù)分享 | ARM系列 -- 同步原語
文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ARM Mali GPU 深度解讀
ISERDESE2原語端口及參數(shù)介紹

詳解CKS32F107xx系列的定時器同步功能

以RK3568為例,ARM核心板如何實現(xiàn)NTP精準時間同步?

ARM開發(fā)板與樹莓派的比較
立錡科技推出ACOT同步降壓轉(zhuǎn)換器系列
ZS7606X系列60V高性能同步整流控制器
ZS7605X系列45V高性能同步整流控制器
ZS7703X系列45V同步整流控制器產(chǎn)品使用規(guī)格書
ZS7607X系列60V同步整流控制器產(chǎn)品使用規(guī)格書
ZS7608X系列60V同步整流控制器使用規(guī)格書
ZS7607X系列60V同步整流控制器使用規(guī)格書
ZS7703X系列45V同步整流控制器使用規(guī)格書
鋇錸工業(yè)級 ARM 邊緣計算控制器BL330 系列

同步整流芯片U711XW系列輕松化解電源方案煩惱

評論