0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM系列--同步原语

安芯教育科技 来源:老秦谈芯 2023-01-05 14:18 次阅读

在具有多个执行线程的系统中,某些资源可能不能同时被访问或者修改。这些资源可以是外围设备或内存缓冲区和数据结构,例如打印机不会在一个时刻响应多个访问。这就需要一些同步机制去处理这些资源的同时控制(concurrency control)问题。需要注意的是,这里说的“同步”,不是同时的意思,而是协同的意思。某个资源使用受限的情况下,你用完了我用,大家协同工作。

可以通过“锁(lock)”机制来实现同步,对这些不能同时被访问的共享资源提供一个锁。线程在访问这些资源之前必须先获得锁权限。这时,如果其它线程也想申请锁,会发现锁被占用,只能等待锁被释放。拥有锁的线程在访问结束后,必须释放锁,以便其它的线程可以继续访问。

可以使用内存中的变量来实现简单的锁,该变量可以包含两个值(状态):LOCKED和UNLOCKED。进程如果发现这个锁是UNLOCKED状态,即可以修改为LOCKED,并拥有该资源的访问权限。

5a0693ee-8cb5-11ed-bfe3-dac502259ad0.png

图中的整个过程分为三个步骤:

读内存中的变量,并做状态比较;

修改寄存器值;

写内存变量。

在具有多个核或线程的系统中,此方法容易受到另一个线程的攻击,即在变量值的第一次读取和回写之间修改内存中的值。

这个问题可以用软件解决,也可以用额外的硬件功能来解决。一种解决方案可以是使“读-比较-修改-写(read-compare-modify-write)”的原子操作指令。ARM架构的早期版本使用SWP指令实现类似的功能。

ARMv8-A使用下面要介绍的,一种特殊类型的加载和存储指令来检测内存中的值自上次读取以来是否发生了变化。ARMv8-A 64位指令集提供了两条独占指令LDXR(Load Exclusive)和STXR(Store Exclusive)。

当使用LDXR指令读取地址时,会将其标记为独占访问。如果使用STXR指令向标记为独占的地址写入,则会清除独占状态。尝试使用STXR指令向未标记为独占的地址写入将会失败。地址的独占状态由称为独占监视器(Exclusive Monitor)的硬件维护。

使用独占load/store后的锁实现:

5a2e9326-8cb5-11ed-bfe3-dac502259ad0.png

锁值的更新不能保证是原子的,但现在可以检测到初始读取和更新之间的任何更改。如果独占存储失败,软件可以再次尝试获取锁。

前面提到过,需要对标记为独占的地址进行监控。独占监视器可以是一个简单的状态机,其状态可以是开放的(open)和独占的(exclusive)。ARM架构定义了两种不同的状态机:本地独占监视器(Local Exclusive Monitor)和全局独占监视器(Global Exclusive Monitor)。

根据被访问地址的可共享性属性,检查本地监视器或全局监视器的独占访问。

对于Non-shareable地址的独占访问检查仅在本地独监视器。

对shareable地址的独占访问检查在本地监视器或全局监视器。

每个处理器核都有一个与其关联的本地监视器。本地监视器可以构造为保存特定地址的独占状态,也可以构造为不保存该地址。本地监视器作为处理器的一部分实现。

全局监视器在多个处理器核之间共享。与本地监视器一样,它们只需要监视一个地址,如果监视器可以标记多个地址,则每个地址都有自己的状态机。

ARM体系结构要求以下内存类型能够与全局监视器一起工作:

5a3a7c36-8cb5-11ed-bfe3-dac502259ad0.png

如果程序无法获得锁,会不断尝试申请锁。但是这样会浪费处理器的资源,并且消耗不必要的功耗。有几种方式可以改善这个问题。对于在释放锁之前等待时间相对较长的情况,锁代码可以返回给操作系统调度程序,这允许在释放锁之前调度其它线程。

对于锁可能快速被释放的情况,ARM架构有一种机制,即允许处理器暂停执行,进入低功耗模式,等待锁被释放。ARM提供WFE(Wait For Event)指令,如果处理器申请锁失败,程序可以执行WFE进入等待。以前的做法是,负责释放锁的代码中会执行SEV(Send Event)指令,通过发送EVENT唤醒正在等待锁资源的处理器核。现在ARMv8-A架构中,清除全局监视器会自动向所有连接的处理器核发送EVENT唤醒。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8662

    浏览量

    362193
  • 寄存器
    +关注

    关注

    30

    文章

    5057

    浏览量

    117849
  • 变量
    +关注

    关注

    0

    文章

    597

    浏览量

    28119

原文标题:技术分享 | ARM系列 -- 同步原语

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    同步多台示波器的应用指南

    本应用指南以泰克4,5和6系列MSO为例,说明了多示波器同步的程序和原理。4,5和6系列MSO支持任意型号示波器之间的同步,从而实现更多通道的同步
    发表于 03-08 12:41 163次阅读
    <b class='flag-5'>同步</b>多台示波器的应用指南

    ARM系列STM32F103芯片的解密方法

    本文介绍ARM系列STM32F103芯片的解密方法,其内核是Cortex-M3,内存从16K-512K都有。
    发表于 02-28 11:20 484次阅读

    如何用RTL原语实现MUX门级映射呢?

    对于前端设计人员,经常会需要一个MUX来对工作模式,数据路径进行明确(explicit)的声明,这个对于中后端工程师下约束也很重要。这里介绍一种巧用的RTL原语,实现MUX的方法。
    的头像 发表于 12-14 16:26 570次阅读
    如何用RTL<b class='flag-5'>原语</b>实现MUX门级映射呢?

    Arm微架构分析系列Arm的X计划

    前文介绍了Arm公司近几年在移动处理器市场推出的Cortex-A系列处理器。Cortex-A系列处理器每年迭代,性能和能效不断提升,是一款非常成功的产品。
    的头像 发表于 11-28 17:02 890次阅读
    <b class='flag-5'>Arm</b>微架构分析<b class='flag-5'>系列</b>—<b class='flag-5'>Arm</b>的X计划

    ARM系列-P Channel介绍

    ARM定义了两个低功耗接口(Low Power Interface),用于低功耗控制握手,分别是Q-Channel和P-Channel。
    的头像 发表于 10-26 14:42 800次阅读
    <b class='flag-5'>ARM</b><b class='flag-5'>系列</b>-P Channel介绍

    ARM系列-P Channel简析

    ARM定义了两个低功耗接口(Low Power Interface),用于低功耗控制握手,分别是Q-Channel和P-Channel。
    的头像 发表于 10-24 10:49 880次阅读
    <b class='flag-5'>ARM</b><b class='flag-5'>系列</b>-P Channel简析

    光在光纤中的传输原怎样还原语音?

    光在光纤中的传输原怎样还原语音? 近年来,随着通信技术的不断发展,光纤通信已经成为主流通信技术之一,它的优势在于高带宽、低衰减、强抗干扰等方面,广泛应用于电话、电视、互联网等各种通信领域。其中,最为
    的头像 发表于 09-07 14:46 463次阅读

    ARM架构同步概述及案例分析

    本白皮书的目的是分享有关ARM架构的同步知识。 本文档的目标读者是从事ARM®架构同步工作的人员。 [警告]当我们处理锁定优化时,我们必须非常小心正确性。
    发表于 08-21 07:51

    高阶产品大盘点:新唐Arm9微处理器系列

    高阶产品大盘点:新唐Arm9微处理器系列
    的头像 发表于 08-10 16:27 1196次阅读
    高阶产品大盘点:新唐<b class='flag-5'>Arm</b>9微处理器<b class='flag-5'>系列</b>

    ARMv8-A同步原语介绍

    可以通过实现锁函数来保护共享资源,该锁函数允许线程请求资源的所有权。然后,软件可以签订合同,只访问 在声明锁定后共享资源。简单的锁定功能可以扩展到支持多个锁,每个共享资源一个锁。解锁功能是允许软件松开锁。 一个简单的锁实现可以使用内存中的变量来实现,该变量可以包含LOCKED和UNLOCKED两个值之一。该过程将从 内存,如果锁定为UNLOCKED,则该值可以更新为LOCKED并写回。
    发表于 08-02 13:11

    ARM同步原件体系结构指南

    本文介绍了ARM中可用的硬件同步原语体系结构,并提供了系统级程序员如何使用它们的示例。
    发表于 08-02 10:59

    ARM PrimeCell同步串行端口(PL022)技术参考手册

    PrimeCell同步串行端口(SSP)是一个高级微控制器总线体系结构(AMBA)从块,连接到高级外围总线(APB)。PrimeCell SSP是一款符合AMBA的片上系统(SoC)外设,由ARM
    发表于 08-02 10:24

    ARM系列—机密计算

    今天来看一个ARM中的新东西,机密计算架构(Confidential Compute Architecture,CCA)。CCA是ARM公司在2021年发布的,属于Armv9-A的关键架构之一。有了机密计算,ARM称将进入下一个
    发表于 05-24 15:25 966次阅读
    <b class='flag-5'>ARM</b><b class='flag-5'>系列</b>—机密计算

    安全光栅光同步选型资料

    安全光栅光同步系列选型资料,
    发表于 05-17 14:51 2次下载

    FPGA入门之原语BUFIO的理解

    BUFIO是用来驱动I/O列内的专用时钟网络,这个专用的时钟网络独立于全局时钟资源,适合采集源同步数据。BUFIO只能由位于同一时钟区域的Clock-Capable I/O驱动。一个时钟区域
    的头像 发表于 05-11 16:16 1760次阅读
    FPGA入门之<b class='flag-5'>原语</b>BUFIO的理解