共2条
1/1 1 跳转至页
ARM,semaphore,instruction ARM中semaphore instruction的作用?

问
看文档的时候,看到semaphore instructions:
semaphore instructions:
The ARM instruction set has two semaphore instructions:
Swap(SWP)
Swap Byte(SWPB)
These instructions are provided for process synchronization. Both instructions generate an
atomic load and store operation, allowing a memory semaphore to be loaded and altered
without interruption.
semaphore instructions用于进程同步, 不是很理解。
记得操作系统中进程同步用信号量,底层实现用这个指令?
atomic load and store operation什么意思?
是不是每个cpu都有这种指令/
谢谢
答 1: re摘自ARM_zhiling.pdf from zlgARM是risc,对存储器访问只能使用加载和存储指令。
swp是寄存器和存储内容交换的指令,可用于信号量操作,实现系统任务之间的同步或互斥。使用例子如下:
DISP_SEM EQU 0X40002A00
DISPWAIT MOV R1,#0
LDR R0,=DISP_SEM
SWP R1,R1,[R0]
CMP R1,#0
BEQ DISP_WAIT
------------------------以上摘抄
答 2: re在单个CPU工作时,这条指令意义不大,因为在单个CPU下禁止多任务访问同一个内存单元可以采用禁止CPU中断的方法实现。
ARM并没有说不支持多CPU结构,在多CPU结构中,比如SMP,禁止中断只能对单个的CPU生效,此时就需要使用这条指令访问互斥信号量了。
答 3: 回复关于SWP指令OS的底层实现上也不一定会使用这条指令,如上面所说,在单个CPU的情况下,因为没有其它CPU干扰,信号量操作可以采用关闭中断的方法实现。
原子操作,意思就是“不可分割的操作”,这个是OS里的一个基本概念。
ARM SWP指令要求目标寄存器中应当先有一个已知值,在执行后把目标寄存器的内容与目标地址的内容交换,这样就可以用别的指令检查那个地址的值是否处于期望的状态,通常只用于在OS中用于实现互斥信号量。比如:
MUTEX_PORT equ 0x80000000 ; 多CPU共用的旗标内存区
retry
mov r0, #1 ; 试图占用(互斥)信号量
ldr r1, =MUTEX_PORT
swp r0, r0, [r1]
cmp r0, #0 ; 0表示没有别的CPU在这个临界区执行,其它值表示有别的CPU正在这个临界区执行
bne retry
mutex_action ; 占用成功后,这一小段代码是一个临界区操作
....
done
mov r0, #0 ; 释放(互斥)信号量
ldr r1, =MUTEX_PORT
swp r0, r0, [r1]
这一小段代码是支持多处理器的OS中实现多CPU互斥操作(比如,操作就绪任务队列)的一种典型的模式算法,可以看出SWP指令还伴随着一个轮循过程(这个就是多CPU结构1+1<2的重要原因)。尽管ARM指令规定第二个参数中的初始值可以是任意的,通常使用时却只有0和1两个。这条指令不能用于多CPU环境下的同步信号量,多CPU下的同步信号量比互斥信号量还要复杂。
所有支持多处理器结构的CPU中都有类似的指令,或者有替代的实现(如x86 CPU的LOCK指令前缀)。只能单个工作的CPU不需要支持这条指令。
semaphore instructions:
The ARM instruction set has two semaphore instructions:
Swap(SWP)
Swap Byte(SWPB)
These instructions are provided for process synchronization. Both instructions generate an
atomic load and store operation, allowing a memory semaphore to be loaded and altered
without interruption.
semaphore instructions用于进程同步, 不是很理解。
记得操作系统中进程同步用信号量,底层实现用这个指令?
atomic load and store operation什么意思?
是不是每个cpu都有这种指令/
谢谢
答 1: re摘自ARM_zhiling.pdf from zlgARM是risc,对存储器访问只能使用加载和存储指令。
swp是寄存器和存储内容交换的指令,可用于信号量操作,实现系统任务之间的同步或互斥。使用例子如下:
DISP_SEM EQU 0X40002A00
DISPWAIT MOV R1,#0
LDR R0,=DISP_SEM
SWP R1,R1,[R0]
CMP R1,#0
BEQ DISP_WAIT
------------------------以上摘抄
答 2: re在单个CPU工作时,这条指令意义不大,因为在单个CPU下禁止多任务访问同一个内存单元可以采用禁止CPU中断的方法实现。
ARM并没有说不支持多CPU结构,在多CPU结构中,比如SMP,禁止中断只能对单个的CPU生效,此时就需要使用这条指令访问互斥信号量了。
答 3: 回复关于SWP指令OS的底层实现上也不一定会使用这条指令,如上面所说,在单个CPU的情况下,因为没有其它CPU干扰,信号量操作可以采用关闭中断的方法实现。
原子操作,意思就是“不可分割的操作”,这个是OS里的一个基本概念。
ARM SWP指令要求目标寄存器中应当先有一个已知值,在执行后把目标寄存器的内容与目标地址的内容交换,这样就可以用别的指令检查那个地址的值是否处于期望的状态,通常只用于在OS中用于实现互斥信号量。比如:
MUTEX_PORT equ 0x80000000 ; 多CPU共用的旗标内存区
retry
mov r0, #1 ; 试图占用(互斥)信号量
ldr r1, =MUTEX_PORT
swp r0, r0, [r1]
cmp r0, #0 ; 0表示没有别的CPU在这个临界区执行,其它值表示有别的CPU正在这个临界区执行
bne retry
mutex_action ; 占用成功后,这一小段代码是一个临界区操作
....
done
mov r0, #0 ; 释放(互斥)信号量
ldr r1, =MUTEX_PORT
swp r0, r0, [r1]
这一小段代码是支持多处理器的OS中实现多CPU互斥操作(比如,操作就绪任务队列)的一种典型的模式算法,可以看出SWP指令还伴随着一个轮循过程(这个就是多CPU结构1+1<2的重要原因)。尽管ARM指令规定第二个参数中的初始值可以是任意的,通常使用时却只有0和1两个。这条指令不能用于多CPU环境下的同步信号量,多CPU下的同步信号量比互斥信号量还要复杂。
所有支持多处理器结构的CPU中都有类似的指令,或者有替代的实现(如x86 CPU的LOCK指令前缀)。只能单个工作的CPU不需要支持这条指令。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 |