根據ARM手冊,分析ARM架構中,原子操作的軟硬件實現的底層原理

目錄

1.問題背景:

2.原子操作

2.1 硬件操作

2.1.1 LDREX/LDXR指令

2.1.2 STREX/STXR指令

2.2 軟件操作

2.3 軟件硬件操作的各性能對比

3.總結


1.問題背景:

我們知道,RTOS的任務調度算法是搶占式優先級調度算法。

既然是搶占了,說明會出現一種情況:當我們的任務還沒完成的時候,CPU的權限就被更高優先級的任務給搶去了。

有的時候,我們任務還在進行重要數據的運算,然后這個數據的內存是和其他任務共享的,在這互相搶占中,就會出現數據運算的丟失。

既然我都說重要了,說明這件事情是不可容忍的!

那么我們有什么辦法解決呢?

有的,兄弟有的,那就是原子操作

2.原子操作

首先我們要知道什么是原子操作:

原子操作指的是在執行過程中不可被中斷的操作。這意味著一旦這個操作開始執行,它就會持續執行直至完成,期間不會被其他線程或進程打斷。

就是你不管在什么時候查詢他的狀態,他的狀態有且只有兩個,完成未完成

那這么厲害的東西,是怎么實現的呢?

目前主流的原子操作的實現方式是通過硬件實現的,少部分不支持硬件的MCU是通過軟件實現的。

2.1 硬件操作

就像中斷一樣,原子操作也是通過硬件支持的,而硬件這么支持原子操作呢?我們可以查看ARM(Armv6)的手冊。ARM Synchronization Primitives Development Article

得知我們原子操作和中斷一樣在匯編層提供了硬件指令集:LDREX和STREX

提示:

  • 硬件支持就是指硬件對我們功能的實現提供了什么幫助,而這個幫助這么用到的呢?就是通過在軟件層調用硬件指令,后續代碼的實現就在硬件上不占用軟件的資源。
  • 軟件支持就是軟件開辟一個臨界區,你的代碼實現是在軟件上,占用的是軟件的資源。
  • 在ARMv8指令集下,LDREX指令被改名成了LDXR指令,而STREX指令被改名成了STXR指令,功能基本上是一樣的,除了添加了一個新的特性。當全局監視器標記的對某段內存的獨占訪問被清空后,將向所有標記了對該段內存獨占訪問的CPU核都發送事件,將它們從WFE指令中喚醒,繼續執行。

下面我們查看手冊中關鍵的部分。

2.1.1 LDREX/LDXR指令

LDREX 指令從內存中加載一個字節,并將獨占監視器的狀態初始化為用于跟蹤同步操作的值。

LDREX R1,[R0]

會從 R0 中的地址處取出一個值(無法被打斷),將值存入 R1 中,并更新獨占監視器。

2.1.2 STREX/STXR指令

STREX 指令會對一個字進行條件存儲到內存中。

如果獨占監視器允許進行此存儲操作,那么該操作會更新內存中的位置,并在目標寄存器中返回值 0,表示操作成功。

如果獨占監視器不允許進行此存儲操作,那么該操作不會更新內存位置,并在目標寄存器中返回值 1。

這使得能夠基于內存操作的成功或失敗來實現條件執行路徑。

STREX R2, R1, [R0]

執行到 R0 中地址的存儲獨占操作,條件存儲 R1 中的值,并在 R2 中指示成功或失敗。

當然這個內存獨占訪問還是能繼續寫下去的,但這樣的話篇幅過長脫離了我們的主題,且閱讀難度驟升,因此本章先忽略,各位感興趣的可以自行去其他博客查看。

2.2 軟件操作

軟件操作最終實現的結果肯定是和硬件相同的,原理就是我們軟件算法和同步機制模擬原子性。依賴軟件的鎖/信號量和算法的實現。下面舉一個例子。

pthread_mutex_lock(&mutex); // 加鎖 // 執行原子操作 pthread_mutex_unlock(&mutex); // 解鎖

注意:

如果在硬件支持的情況下,鎖的實現是通過硬件指令實現的。

但如果沒有硬件呢?那就是通過一些輪詢或者算法來實現,例如:

  • 忙等待(Busy Waiting):也稱為自旋鎖(Spinlock)。一個線程不斷地檢查鎖是否可用,直到成功獲取鎖為止。這種方法簡單但效率低下,因為它會占用大量的CPU時間
  • Peterson算法:一種經典的軟件解決方案,用于在兩個線程之間實現互斥。它利用了共享內存和幾個布爾標志位以及一個指示哪個線程準備進入臨界區的變量。
  • Lamport's bakery algorithm:為了解決多個進程之間的互斥問題而設計的一種算法,它模擬了一個“面包店”取號排隊的過程,確保每個“顧客”(進程)按照先來后到的順序獲得服務(進入臨界區)。

2.3 軟件硬件操作的各性能對比

對比維度

硬件實現

軟件實現

性能

高(直接由硬件指令完成)

低(依賴鎖或算法,存在上下文切換)

兼容性

依賴硬件支持(如x86、ARM指令集)

通用性強,適用于任何硬件平臺

實現復雜度

低(由編譯器/庫自動調用硬件指令)

高(需手動實現鎖或算法)

適用場景

高性能并發編程(如數據庫、操作系統)

資源受限或硬件不支持的場景

3.總結

在項目越來越復雜,MCU的性能、項目對性能的要求越來越高的時候,單單一個裸機跑循環實現各種任務的優勢會大大縮減,大部分都是通過各種RTOS這種搶占式任務的創建,來實現項目核心功能的穩定運行,這個時候,為了我們的數據的完整性,原子操作是必不可少的,因此學習原子操作,了解底層就顯得有必要了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89702.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89702.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS 抓包工具選擇與配置指南 從零基礎到高效調試的完整流程

iOS 抓包:復雜網絡調試的必要技能 隨著移動端應用越來越依賴網絡交互,iOS 抓包作為核心調試工具之一,變得尤為重要。無論是調試 App 與后端的接口通信、排查 HTTPS 請求加密問題,還是定位網絡連接超時、請求異常,抓包都…

Java使用FastExcel實現Excel文件導入

依賴配置 (Maven pom.xml)<dependencies><!-- FastExcel 核心庫 --><dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version>1.0.0</version></dependency><!-- Apache POI…

【60】MFC入門到精通——運行后 button按鍵上不顯示 按鍵名, 控件上的文字不顯示

文章目錄運行后&#xff0c;button按鍵上不顯示 “Test”原因是屬性&#xff0c;圖標–>True&#xff0c;改為False就好了。

抖音回應:沒有自建外賣,就是在團購的基礎上增加的配送功能

今年以來&#xff0c;外賣行業競爭愈加激烈&#xff0c;市場格局風云變幻。在這一背景下&#xff0c;外賣行業動向備受關注。近日&#xff0c;針對抖音上線團購版外賣的消息引發公眾關注。為此&#xff0c;大公科技以商家身份咨詢了抖店客服&#xff0c;對方回應稱&#xff0c;…

中間件安全攻防全解:從Tomcat到Weblogic反序列化漏洞介紹

本文僅用于技術研究&#xff0c;禁止用于非法用途。 Author:枷鎖 文章目錄什么是中間件中間件漏洞(1) Tomcat(2) Weblogic(3) JBoss漏洞什么是中間件 中間件&#xff08;Middleware&#xff09;是指一種軟件組件&#xff0c;其作用是在不同的系統、應用程序或服務之間傳遞數據…

現代前端開發流程:CI/CD與自動化部署實戰

目錄 引言現代前端開發面臨的挑戰CI/CD基礎概念前端CI/CD流程設計實戰案例&#xff1a;構建前端CI/CD管道自動化部署策略監控與回滾機制最佳實踐與優化建議總結 引言 隨著前端技術的飛速發展&#xff0c;現代Web應用變得越來越復雜。前端項目不再只是簡單的HTML、CSS和JavaS…

MySQL EXPLAIN深度解析:優化SQL性能的核心利器

MySQL EXPLAIN深度解析&#xff1a;優化SQL性能的核心利器 引言&#xff1a;數據庫性能優化的關鍵 在數據庫應用開發中&#xff0c;SQL查詢性能往往是系統瓶頸的關鍵所在。當面對慢查詢問題時&#xff0c;EXPLAIN命令就像數據庫工程師的X光機&#xff0c;能夠透視SQL語句的執行…

Sentinel配置Nacos持久化

前言&#xff1a; Sentinel在使用控制臺時進行配置是純內存操作&#xff0c;并沒有提供默認的持久化措施&#xff0c;一旦服務重啟會導致配置的流控、熔斷等策略失效。Sentinel官方提供了多種持久化方式如&#xff1a;Redis、Zookeeper、Etcd、Nacos以及其他方式等。此文以Naco…

Java學習第五十五部分——在軟件開發中的作用

目錄 一. 前言提要 二. 主要作用 1. 跨平臺能力&#xff08;核心優勢&#xff09; 2. 企業級應用開發&#xff08;主導領域&#xff09; 3. 安卓應用開發&#xff08;關鍵角色&#xff09; 4. 大數據處理&#xff08;重要組件&#xff09; 5. 嵌入式系統 & IoT 6. 桌…

Keil編譯文件格式轉換全解析

目錄 介紹 Keil自帶常用命令概覽 fromelf介紹 Keil可燒錄文件概述 核心差異概覽 .axf文件獲取 .hex文件獲取 .bin文件生成 ?編輯 補充:生成可執行文件的匯編代碼&#xff08;.asm文件&#xff09; Keil自帶常用命令詳解 核心功能?? ??格式轉換?? ??輸出路…

World of Warcraft [CLASSIC] The Ruby Sanctum [RS] Halion

World of Warcraft [CLASSIC] The Ruby Sanctum [RS] Halion 紅玉圣殿海里昂 清小怪小德可以睡龍類 打完3個副官就激活 【海里昂】 第一階段&#xff1a;外面環境&#xff08;現實位面&#xff09;火抗光環 第二階段&#xff1a;內場環境&#xff08;暗影環境&#xff09;暗…

Excel基礎:格式化

Excel格式化是指對單元格內容進行視覺呈現方式的調整&#xff0c;它不改變實際數據內容&#xff0c;但能顯著提升數據的可讀性&#xff0c;根據格式應用的范圍&#xff0c;格式可分為"單元格格式"和"數據格式"。本文介紹了這兩類格式的主要設置方法&#x…

基于STM32單片機車牌識別系統攝像頭圖像處理設計的論文

摘 要 本設計提出了一種基于 32 單片機的車牌識別系統攝像頭圖像處理方案。該系統主要由 STM32F103RCT6 單片機核心板、2.8 寸 TFT 液晶屏顯示、攝像頭圖像采集 OV7670、蜂鳴器以及 LED 電路組成。 在車牌識別過程中&#xff0c;STM32F103RCT6 單片機核心板發揮著關鍵的控制作用…

React hooks——useCallback

一、簡介useCallback 是 React 提供的一個 Hook&#xff0c;用于緩存函數引用&#xff0c;避免在組件重新渲染時創建新的函數實例&#xff0c;從而優化性能。1.1 基本語法const memoizedCallback useCallback(() > {// 函數邏輯},[dependencies] // 依賴項數組 );第一個參數…

跨個體預訓練與輕量化Transformer在手勢識別中的應用:Bioformer

目錄 一、從深度學習到邊緣部署&#xff0c;手勢識別的新突破 &#xff08;一&#xff09;可穿戴設備 邊緣計算 個性化醫療新可能 &#xff08;二&#xff09;肌電信號&#xff08;sEMG&#xff09;&#xff1a;手勢識別的關鍵媒介 &#xff08;三&#xff09;挑戰&#…

無線調制的幾種方式

不同的調制方式在 頻譜效率、抗干擾能力、功耗、實現復雜度 等方面存在顯著差異。以下是主要調制方式的對比分析&#xff1a;一、調制方式的核心區別調制方式原理頻譜效率抗干擾能力功耗典型應用AM改變載波振幅低差&#xff08;易受噪聲影響&#xff09;較高廣播電臺FM改變載波…

五分鐘系列-網絡性能測試工具iperf3

目錄 一、iperf3 是什么&#xff1f; 二、為什么需要 iperf3&#xff1f; 三、iperf3 的主要測量指標 四、安裝 iperf3 五、基礎使用模式&#xff08;命令行參數示例&#xff09; 1. 啟動 Server 端 (必須) 2. 啟動 Client 端進行測試 (最常見) 基本 TCP 測試 (10秒) …

LiFePO4電池的安全詳解

一、電池的制作過程 鋰離子電池的五大核心組成部分:正極、負極、電解液、隔膜和外殼。 正極:把正極材料(如LiFePO?)+ 導電劑(如炭黑)+ 粘結劑(如PVDF)混合成漿料,涂覆在鋁箔上,然后烘干、輥壓。 負極:把負極材料(如石墨)+ 導電劑 + 粘結劑混合成漿料,涂覆在銅…

S7-200 SMART PLC: SMART 200 CPU 密碼設置及權限設置方式

在工業自動化控制中&#xff0c;SMART 200 CPU 的安全穩定運行直接關系到整個系統的可靠運作&#xff0c;而組態系統安全則是保障 SMART 200 CPU 安全的核心環節。通過合理設置密碼及相關安全參數&#xff0c;能為 SMART 200 CPU 構建一道堅固的防護屏障&#xff0c;有效保護用…

Datawhale AI數據分析 作業

一、 貸款批準預測數據集1. 數據探索與理解prompt 1:這是訓練數據&#xff0c;目的是貸款批準預測數據集上訓練的深度學習模型生成的數據&#xff0c;旨在使用借款人信息預測貸款批準結果&#xff0c;它通過模擬真實貸款審批場景&#xff0c;幫助金融機構評估借款人風險。 請展…