目录

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;帮助金融机构评估借款人风险。 请展…