日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[ARM-assembly]-ARMV8的exclusive和inexclusive的介绍

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [ARM-assembly]-ARMV8的exclusive和inexclusive的介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

★★★ 個人博客導讀首頁—點擊此處 ★★★

AMRv8-aarch64架構中的A64指令中,提供了如下的一些exclusive指令,用來支持exclusive操作

那為什么,arm在加入exclusive指令呢?加入這個,主要是為了解決多核情況下,鎖的競爭問題。

在軟件層面,對于共享資源的訪問,會設定一個鎖,只有能拿到這個鎖的程序,才能夠訪問共享資源,而沒有拿到鎖的程序,就不能訪問該共享資源。

static int g_lock;void lock() {while(!g_lock);g_lock = 1; // 上鎖 }void unlock() {g_lock = 0; //釋放鎖 }

在使用操作系統后,這個程序也可能會出現潛在的問題,因為操作系統會調度應用程序。假設應用程序A在讀取到鎖狀態后,值為0,表示當前鎖沒有被其他程序占有,正當自己要將鎖鎖上的時候,操作系統進行了調度,應用程序B執行。程序B也讀取鎖狀態,發現值為0,表示當前鎖沒有被其他程序占有,然后將鎖給鎖上,訪問共享資源。此時,操作系統又進行了調度,應用程序A執行,將鎖給鎖上,然后訪問共享資源。那此時,就出現了2個應用程序,同時訪問共享資源,鎖的作用,被屏蔽了。

(單核的情況下)為了解決這個問題,可以在獲取鎖的時候,屏蔽中斷,那這個時候,操作系統就不能調度,也就避免上面出現的問題

static int g_lock;void lock() {mask_interrupt();while(!g_lock);g_lock = 1; // 上鎖unmask_interrupt(); }void unlock() {g_lock = 0; //釋放鎖 }

但是在多核的情況下,各個cpu是并行執行的,因此這個時候,還會出現,上面描述的2個程序,同時獲取到鎖的狀態,而這個時候,通過禁止中斷,是沒有效果的.
為了解決多核情況下的鎖競爭問題,arm引入了exclusive操作,并添加了相應的指令
exclusive的操作的核心,就是會將鎖,用一個狀態機進行維護,該狀態機有2種狀態,open狀態和exclusive狀態。要想成功的對鎖進行上鎖,狀態必須要從exclusive狀態切換到open狀態,其他狀態,都是失敗的。

為了支持exclusive操作,在A64,新增了LDXR和STXR指令。

在A32和T32下,也加入LDREX和STREX指令來支持

LDXR指令,將狀態從open狀態切換到exclusive狀態,STXR指令,將狀態從exclusive狀態切換到open狀態,這個就表示store exclusive操作成功

總結

以上是生活随笔為你收集整理的[ARM-assembly]-ARMV8的exclusive和inexclusive的介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。