ARM 原子操作里的两个汇编指令
今天一個讀者朋友給我留言,問了這個問題,ARM原子操作的匯編代碼,還給我截圖了兩個不同的解釋,讓我說哪個是正確的。
原子操作的起因是為了內核同步,保證數據在正確性,之前已經吹過一波,可以看這幾篇文章。
Linux 互鎖斥 信號量 死鎖 原子操作
第4章 原子操作
第4章 原子操作 第二節
CPU和和存儲的連接圖
原子操作的代碼
我截取的這段是ARM7之后的代碼,在ARM6之前的CPU并不支持SMP。所以原子操作的代碼也分成了ARM6之前的和ARM7之后的區分。
我們主要討論兩個匯編指令
LDREX <Rt>,[<Rn>]
LDREX 指令從「<Rn>」中獲取「內存地址」,并且將「內存地址」的內容加載到「<Rt>」目標寄存器中。
STREX<Rd>,<Rt>,[<Rn>]
STREX 指令從「<Rn>」中獲取「內存地址」,并且將「內存地址」的內容加載到「<Rt>」目標寄存器中,并且把執行結果保存在 「<Rd>」。
在執行的時候,還有兩個監視器在共同工作
local monitor 「本地監視器」
global monitor「全局監視器」
單CPU執行原子操作執行的同步情況
單CPU的情況下是不需要global monitor 參與的。
多CPU執行原子操作執行的同步情況
多CPU的情況下需要global monitor 參與。
關于這個同步機子的C語言嵌入匯編代碼,還有更加詳細的解釋,大家如果有興趣的話,可以看這幾個鏈接,會更加詳細。
http://www.wowotech.net/linux_kenrel/atomic.html
https://biscuitos.github.io/blog/ATOMIC/
? 推薦閱讀:
? ??專輯|Linux文章匯總
? ??專輯|程序人生
? ??專輯|C語言
嵌入式Linux
微信掃描二維碼,關注我的公眾號?
總結
以上是生活随笔為你收集整理的ARM 原子操作里的两个汇编指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海富勒wms_冷库推荐|上海1800托
- 下一篇: 台式计算机可以发射无线网络,台式电脑无线