RTOS编程中的原子操作

RTOS编程中的原子操作

一、什么是原子操作

        原子操作(Atomic operation)是指一种不可分割的操作,在整个操作过程中都不会被打断。

二、为什么需要原子操作

        在一些可能 会被系统调度、中断等事件打断的场景的编程中,我们需要原子操作的支持来保障操作的原子性。

        同时原子操作还可以在多线程编程中,保障多线程间的并发执行不出现数据竞争问题;在一些程序的同步、并发控制中,提供有效支撑。

        在RTOS编程中,为了实现对临界区资源进行保护,常规的会通过 开关全局中断,调度器上锁等方式来进行处理。如果采用原子操作来替代这些处理,就能够大幅度提高临界区代码的执行效率、提升系统的运行效率,降低编程的复杂度。

三、RTOS是如何支持原子操作的

        一般来说RTOS为了实现原子操作支持,都会借助芯片平台的硬件指令来进行,并为用户侧提供原子操作函数来供用户使用。

        因为RTOS的原子操作支持依赖具体平台的原子操作指令与相关指令来实现,所以哪些平台有该支持呢?常规来说,采用ARM指令集的绝大多数内核、采用 RV32 指令集的大部分内核、采用 RV64 指令集的大部分内核都提供原子操作支持。

  • 硬实现:

        所谓硬实现就是使用与具体平台(aarch64、arm、riscv)紧密相关的具体原语指令进行操作,如:aarch64中的LSE扩展和ldxr、stxr;arm中的同步原语(ldrex、ldrexb、ldrexh、ldrexd、strex、strexb、strexh、strexd);riscv中的amo指令(amoswap、amoadd、amoand、amoor、amoxor、amomx、amomaxu、amomin、amominu)。

  • 软实现:

        所谓软实现就是通过软件关中断的方式对操作段进行保护,操作结束后再开启中断。

 

 

你可能感兴趣的:(RTOS,嵌入式,学习日记,原子操作,RTOS原子操作,同步原语,amo指令)