ARMv8 同步和信号量(Synchronization and semaphores)简介

news2024/11/16 3:22:30

目录

1,Load-Exclusive/Store-Exclusive 概述

2,独占式访问指令与非共享内存( Exclusive access instructions and Non-shareable memory locations)

3,独占式访问指令与共享内存( Exclusive access instructions and shareable memory locations)

4,Global Exclusive Monitor的相关操作

5,被标记为Exclusive access的内存块的大小


1,Load-Exclusive/Store-Exclusive 概述

ARMv8使用以下指令,来提供非阻塞的共享内存的同步方法。

A64

A32/T32​​​​

 上述两表中,除了clear exclusive指令CLREX,其他Load-Exclusive/Store-Exclusive指令都是成对使用的。使用Load-Exclusive/Store-Exclusive指令来访问内存地址x:

  • Load-Exclusive指令将从地址x上读取一个值到对应寄存器。
  • 在没有其他观察者,进程或者线程同时对该地址进行store操作的情况下,对应的Store-Exclusive指令将成功地将值写入内存地址x。同时Store-Exclusive指令也会返回一个状态位(status bit),来表明当前的Store-Exclusive指令是否成功写入。

Load-Exclusive指令将会把一小块内存地址标记为独占式访问。这段被标记的内存空间的大小是由具体的实现定义的,详情见下文。

2,独占式访问指令与非共享内存( Exclusive access instructions and Non-shareable memory locations)

在文章
ARMv8内存属性与类型(Memory types and attributes)简介中,对Non-shared memory有以下描述:对于Normal 内存区域,不可共享的normal内存是一块只能被单个CPU访问的Normal内存。Non-shareable的Normal内存不要求硬件保证多个观察者数据访问的一致性,除非该内存是不可缓存的(Non-cacheable)。

对于共享属性为非共享(Non-shareable)内存的内存地址,独占式访问指令依赖于local exclusive monitor,或者称为local monitor,它将从对应执行Load Exclusive指令的处理器处理的地址中,将一段内存空间标记为Exclusive。同一处理器使用Store-Exclusive指令修改任何地址,都会将该标记清除。

Load-Exclusive指令不仅可以将内存地址上的值load到寄存器中,还可以:

  • 正在执行该Load-Exclusive指令的 处理器可以将对应物理地址标记为 独占式访问(exclusive access)
  • 正在执行指令的处理器的local monitor将会进入 Exclusive Access state。

此外 Store-Exclusive指令是否能成功进行store操作,还取决于当前local monitor的状态:

如果local monitor 处于 Exclusive Access(独占式访问) 状态:

  1. 如果Store-Exclusive指令操作的地址是之前对应的Load-exclusive指令操作的地址,store操作将成功进行,否则store操作是否进行将取决于具体的处理器实现设计。
  2. store-exclusive指令执行后,将会返回一个状态值到指定寄存器,如果store 成功指向,status value将为0,store操作失败,状态值将为1。
  3. Local monitor的状态将由独占式访问状态转为开放式访问状态(open access state)。

如果local monitor 处于开放式访问状态:

  1. store操作将不会发生。
  2. status value将为1,并返回到指定寄存器。
  3. Local monitor将继续保持open access state。

当monitor处于exclusive access状态时,我们称此时的monitor为 置位(set),当monitor处于 open access 状态时,此时monitor状态为 清除 (clear)。

当处理器执行Load-Exclusive指令进入了Exclusive access 状态,而接着并未执行对应的Store-Exclusive指令,而是普通的store指令,无论store的地址是否为标记的地址,其状态转换都是由具体的处理器设计来规定的。如下图,为local monitor的状态转移图,其中黄色标记处的状态转换由具体的实现设计定义。

3,独占式访问指令与共享内存( Exclusive access instructions and shareable memory locations)

在本章节中,一个可共享的内存地址(shareable memory location)指的是共享属性为Inner Shareable 或者 Outer shareable。

对于共享内存地址,独占式访问指令依赖于:

  • 系统中每个处理器的local monitor,当处理器执行Load-Exclusive指令时,将一段地址空间标记。除了对于共享内存,任何Store-Exclusive都将受到global monitor的检查,如果它在至少有以下一种行为:
    • 更新了内存。
    • 返回的状态值为0。
  • Globle monitor为每个特定的处理器将一个物理地址标记为独占式访问。之后,将使用此标记来确定local monitor未失败的,对该地址的Store-Exclusive是否会发生。在内存位置的共享域内,任何其他观察者(处理器)对已经被标记为exclusive access的内存块的任何成功写入,都会将该标记清除,进入open access状态。对于系统中的任何一个处理器,global monitor能够:
    • 维持至少一处被标记的内存块。
    • 为每个被global monitor保持的内存块维护一个状态机。

对于每个处理器,架构只需要global monitor对单个的被标记的地址进行处理。Global monitor可以存在于处理器中,或者做为第二个monitor存在与内存接口中。这取决于具体的架构实现,这也意味着global monitor和local monitor可以组合成一个单元,同时这个单元具备global monitor和local monitor的全部功能。

对于可共享内存位置,在某些实现和某些内存类型中,global monitor的属性需要 处理器 之外的功能。此外,一些系统实现可能无法对内存中所有位置实现该功能,但是可以运用在:

  • 系统中不支持硬件缓存一致性的任何类型内存。
  • 在支持硬件缓存一致性实现中:非缓存内存,或者是被当作非缓存的内存位置。

在这样的系统中,有以下条件定义:

  • global monitor是否实现。
  • 如果实现,它所监控的地址范围和内存属性。

由于实现可以选择将哪些内存类型视为不可缓存,因此在体系结构上保证实现global exclusive monitor的唯一内存类型是:

  • Inner Shareable, Inner Write-Back, Outer Write-Back Normal memory with Read allocation hints and Write allocation hints and not transient.
  • Outer Shareable, Inner Write-Back, Outer Write-Back Normal memory with Read allocation hints and Write allocation hints and not transient.

如果global monitor对一个地址范围或者内存属性没有实现功能,对这样的地址是用Load-Exclusive/ Store-Exclusive指令可能产生如下影响:

  • 指令将产生一个External abort。
  • 指令将产生一个由具体实现定义的MMU 错误。
  • 该指令无效,被当作NOP。
  • Load-Exclusive指令被当作访问一个非共享的内存位置,同时local monitor的状态是未知的。
  • Store-Exclusive指令也被当作访问一个非共享的内存位置,同样,local monitor的状态未知。返回的状态信息也是未知的。

4,Global Exclusive Monitor的相关操作

对一个共享的内存地址执行Load-Exclusive指令,一是可以从该内存地址中加载数据,并且会为执行该指令的处理器对该内存地址所在的一小段内存进行独占式访问标记。如果Exclusive monitor之前为该处理器标记了另一处内存地址为独占式访问,这次操作将会把先前的标记清除。

Global monitor对每个处理器,只支持一个对共享内存的独占式访问标记。

某个处理器执行Load-Exclusive指令,不会影响global monitor中其他处理器的状态。Store-Exclusive指令则是一种有条件的store指令:

  • 如果local monitor和global monitor对该执行指令的处理器都处于Exclusive access状态,store的地址也被标记为Exclusive access,Exclusive store指令才能执行成功,这种情况下:
    • 将会返回状态值 0 到指定寄存器,表明store-exclusive指令执行成功。
    • global monitor为执行该指令的处理器维护的状态机的最终状态由具体的架构实现定义。
    • 如果访问的地址被标记为exclusive access,是global monitor为其他处理器所维护的状态机标记的,则该状态机将会转为Open access 状态。
  • 如果store的地址不是为执行该指令的处理器标记为exclusive access的地址,则store-exclusive将不会成功执行:
    • 将会返回 状态值为1到指定寄存器,表明store-exclusive失败。
    • global对该处理器的状态不会改变,仍保持为open access 状态。
  • 如果其他地址被标记了exclusive access状态,store-exclusive是否成功取决于具体的架构实现:
    • store成功返回0,失败返回 1.

在一个共享内存系统中,global monitor为每个执行Load-Exclusive/ Store-Exclusive指令的处理器单独维护了一个状态机:
- 访问由当前处理器产生的,定义为(n).

- 访问由其他处理器产生的,定义为(!n).

状态机的转换关系见上图,其中打了*号的转换由具体的架构实现来定义。

5,被标记为Exclusive access的内存块的大小

当执行一个Load-Exclusive指令时,将会忽略64位地址的最低有效位,同时标记一个大小为 2^a byte大小的内存空间为Exclusive Access状态。被标记的地址可以是该内存块的任意一个地址。这个内存块称为 独占式保留颗粒(Exclusives reservation granule),granule的大小范围在4到512个words(1 word = 4 bytes)之间,其具体的大小由具体的架构实现定义。比如在A53处理器中,granule的大小为一个cache line的大小:16 words(16 words = 64 bytes = 512 bits)。

  • 4 words in an implementation where a is 4.
  • 512 words in an implementation where a is 11.

当a为4时,granule的大小为 4个words,比如对 0x341B4这个地址执行 LDXRB 指令,将会把 0x341B0 到 0x341BF这块内存空间标记为exclusive access。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文华财经期货波段趋势K线结构主图阶梯公式源码,极品多空红绿轨道指标公式

期货指标公式是通过数学逻辑角度计算而来,仅是期货分析环节中的一个辅助工具。期货市场具有不确定性和不可预测性的,请正常对待和使用指标公式! 第一步:判大势 所谓判大势,就是判断当前行情趋势,是入场前的必备步骤。…

中汽协确认参加2023EVH新能源动力总成年会

演讲主题:中国汽车工业经济运行情况 演讲大纲: 对中国汽车工业近期发展态势进行分析2023年汽车行业预测 陈士华 现任中国汽车工业协会副秘书长,兼任中国汽车工业经济技术信息研究所有限公司总经理 1999年3月至今,就职于中国汽…

接口自动化测试框架(Java 实现)

需求分析 需求点需求分析通过 yaml 配置接口操作和用例后续新增接口和测试用例只需要编写 yaml 文件即可实现。可以支持接口间的参数传递具有参数依赖的接口可以进行变量的抽取和参数赋值。支持全局、用例维度的变量存储比如时间截命名法中要用到的时间截后缀。支持用例软断言…

Go语言入门【10】Map

Map map是一种键值对形式的数据结构,一个键对应一个值,可以通过键快速检索出其对应的value值,在map中key的值是唯一的,value的值不唯一,并且map中保存的数据是无序的。 Map声明 声明Map可以使用map关键字进行声明&a…

【Yolov7】配置参数以及训练模型

一、下载Yolov7 github地址:https://github.com/WongKinYiu/yolov7 或者命令行下载 git clone https://github.com/WongKinYiu/yolov7.git二、新建一个Python环境 用Acaconda新建一个干净的环境,我命名为yolov7,python版本选择3.8 进入到…

GPT系列:GPT, GPT-2, GPT-3精简总结 (模型结构+训练范式+实验)

😄 花一个小时快速跟着 人生导师-李沐 过了一遍GPT, GPT-2, GPT-3。下面精简地总结了GPT系列的模型结构训练范式实验。 文章目录1、GPT1.1、模型结构:1.2、范式:预训练 finetune1.3、实验部分:2、GPT-22.1、模型结构2.2、范式:预…

C语言运算符(左值右值,基本运算符)

一.数据对象,左值,右值,运算符 数据对象:用于存储值的数据存储区域统称,而使用变量名是标识对象的一种方法(还有指针,后面会教的) 左值:用于标识特定数据对象的名称或表…

图的总复习

一、图的定义Graph 图是由顶点vertex集合及顶点间关系集合组成的一种数据结构: 顶点的集合 和 边的集合 二、无向图 用(x,y)表示两个顶点x和y之间的一条边(edge) 边是无方向的 N{V,E},V{0…

【学习总结】2023寒假总结

写在前面时光匆匆,白驹过隙,转眼间寒假就过去了,这次寒假可以算的上是最长的一次假期,经历了从疫情到放开,从患病到阳康,在现实与虚幻的世界中玩耍,在痛苦的数据结构中徘徊,在每次早…

FFMPEG自学一 音视频解封装

一、音视频包含哪些数据对于一个mp4文件我们可以通过音视频分析软件打开查看内部信息。从两图可以看出mp4文件一般包含 音频流 视频流等。对于上面的字段大致分析如下Format编码方式AVC现在大部分视频都是这种编码方式,即H264。CodecId编码器idavc1H264封装有2种格式…

(二)随处可见的LED广告屏是怎么工作的呢?代码实现

书接上回,上一篇中我们聊到了LED点阵屏的工作原理和一些电气参数。本篇以第一篇为基础,对软件层面进行展开,同时也为下一篇接入GUI做铺垫。文章较第一篇有所增长,大概需要5~7分钟可以看完。【目标】能够随心所欲的显示我们想要的图…

OpenWrt之IPv6设置详解

文章目录前言网络结构1. WAN口设置2. LAN口设置3. NAT6配置4. 接口状态5. 网站测试6. 关于端口放行后话前言 最近电信终于肯下发v6的地址了, 得为路由器配置一下了, 之前一直是处于关闭的状态, 今天重新设置回去. 从此有了v4与v6双公网地址. 网络结构 光猫设置为桥接路由器设…

金三银四必看的软件测试面试题宝典,背完offer随便拿

怎么来设计测试方案根据测试需求(包括功能需求和非功能性需求),识别测试要点,识别测试环境要求,安排测试轮次,根据项目计划和开发计划做整体的测试安排。 被测试的特性:通过对需求规格说明书进行…

【软件测试】一位转型测试开发成功,工作两年测开岗的经验总结......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 小伍: 在…

win10电脑性能优化设置

win10电脑性能优化设置 目录win10电脑性能优化设置1.桌面图标显示2.wini2.1 “系统”2.1.1专注助手 关2.1.2 电源和睡眠 设置为从不2.1.3 存储 开2.2 网络和Internet2.3 个性化2.4 应用2.5 账户2.6 游戏2.7 隐私墨迹书写和键入个性化:关活动历史记录:全部…

怎么样用香港主机搭建游戏网站

香港是全球主要的互联网骨干节点,拥有质量较高的网络基础设施,在网络速度和稳定性方面表现良好。因此,使用香港主机搭建游戏网站可以使用户在游戏中的体验流畅且基本不会延迟情况。本文将向用户解释如何使用香港主机搭建游戏网站。在搭建游戏…

python gui构造openai api可视化页面

背景:最近chatgpt很火,前几天也想注册体验一下,一顿操作之后,卡在该国家不支持。最后发现自己的代理开在香港,改在漂亮国就行了。虽然有chatgpt可以用,但是小平是自己封装了一个,我不能输。正好…

基于Spring Boot开发的社区物业管理系统

文章目录项目介绍主要功能截图:登录车位收费管理物业收费管理投诉信息管理车位管理保修统计分析部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料…

使用Nginx解决跨域问题

目录 使用Nginx解决跨域问题 1、修改浏览器、客户端访问地址 2、在nginx.conf配置文件需配置server 3、在Nginx中配置客户端访问的接口(按照规则或通配),并设置被代理的服务器 4、在Nginx中统一配置客户端访问的头部信息(解决…

Power BI 常见数据导入错误(查询超时、找不到文件、数据类型错误、找不到表格)

本系列的文章: 《Power BI windows下载安装流程)》《Power BI 11个必学官方示例数据案例(附下载链接)》《Power BI 数据导入(SQL Server、MySQL、网页数据)》《Power BI 存储模式介绍(导入、Di…