ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Synchronization and semapores
1.前言
本文主要介绍原子变量的实现原理,对原子变量的修改有一套特殊的机制
2. Local monitor和Global monitor
- UP时执行Load EX和Store EX时仅需关注Local Monitor的状态即可
图 UP时Local Monitor和Global Monitor
- SMP时执行Load EX和Store EX时需关注Local Monitor和Global Monitor的状态
图 SMP时Local Monitor和Global Monitor
3. Exclusive access instructions and Non-shareable memory locations
Non-hareable内存指的是具有内部共享属性的的一块存储区域。它仅会在本PE内部进行共享
图 Local Monitor状态机图
- Load-Exclusive
Load-Exclusive指令执行时local monitor标记PE执行load EX的地址为独占,local monitor由Open Access状态转换为Exclusive Access状态;
- Store-Exclusive
依赖local monitor的状态:
(1)如果local monitor 为Exclusive Access状态
如果store的地址为先前load EX访问时的地址,则store EX会发生,并清空独占地址标记,否则由各个厂商自己定义,状态值会返回给寄存器,如果store EX发生则状态值为0,否则状态值为1;
(2)如果local monitor为Open Access状态:
不会有store EX发生;状态值1返回给寄存器,表示store EX没有发生;状态local monitor保持open access状态
4. Exclusive access instructions and shareable memory locations
Shareable内存指的是具有内部共享或外部共享属性的的一块存储区域。它会在所有的PE之间进行共享。
图 SMP Global monitor状态机
- Load-Exclusive
1. 对于shareable内存,local monitor会将本PE的load EX访问地址标记,忽略其他PE的访问请求, store Ex交由global monitor检查;
2. PE执行load EX时,global monitor会为这个PE标记访问的物理地址为独占访问,这标记主要用于本PE store EX操作,这个独占访问标记会被其它PE的load EX清除。
- Store-Exclusive
store EX操作时会检查global monitor状态是否对本PE设置独占标记,如果是则store EX会执行,如果成功会清除global monitor为本PE设置的独占标记, 并返回状态0,失败返回1。
也就是本PE store EX操作只有在gloabal monitor为本PE设置独占标记的时候才能执行, 任一时刻global monitor至少为一个PE标记地址
5. Marking and the size of the marked memory block(?)
当执行Load Ex指令时,通过忽略掉64bit内存地址的的LSB来标记一个块,标记的块大小为2a 个Bytes ,标记的块大小范围为4~512 words, 由SOC厂家自定义。
例如厂家定义为4个words,则a为4,LDXRB地址 0x341B4 会使用0x341B4的bits[47:4] 标记一个块为独占访问,也就是从0x341B0 到0x341BF被标记为独占访问。
6. Context switch support
异常返回会清空local monitor
7. Load-Exclusive and Store-Exclusive 指令使用限制
- LoadExcl/StoreExcl pair只有运行在相同的虚拟地址才能成功;
- LoadExcl/StoreExcl pair操作的数据宽度必须相同;
- LoadExcl/StoreExcl pair必须访问相同数量的寄存器;
- LoadExcl/StoreExcl pair满足一定的条件才可以继续运行;
- LoadExcl/StoreExcl pair相隔越近则性能越好,因为相隔近,就会减少mornitor标记被清除的可能性;
- 体系结构设置了LoadExcl/StoreExcl pair设置独享访问的地址上限为2048字节。性能考虑,则将独享访问范围分割成设定的粒度,分多次进行访问;
- 如果接收到data abort异常,则独享标记是未知的;
- LoadExcl/StoreExcl pair内存访问属性必须一致,否则store行为未知;
- LoadExcl/StoreExcl pair之间发生了虚拟地址与物理地址映射的改变,则store EX不会通过monitor的独占标记检查;
8.spin-locks中使用WFE 和 SEV指令
ARMv8 提供了 如下指令:
- Wait For Event
- Send Event
- and Send Event Local instructions
- WFE
- SEV
- SEVL
如上指令减少了power consumption and bus contention caused by PEs repeatedly attempting to obtain a spin-lock.这些指令是应用级的
9.参考文档
[2] DDI0487A_k_armv8_arm_iss10775.pdf
ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Synchronization and semapores的更多相关文章
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- ARMV8 datasheet学习笔记1:预备知识
1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之VMSA
1. 前言 2. VMSA概述 2.1 ARMv8 VMSA naming VMSAv8 整个转换机中,地址转换有一个或两个stage VMSAv8-32 由运行AArch32的异常级别来管理 VMS ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它
1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常
1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2. RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST
1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer
1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型
1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性 2. 存储系统体系结构 2.1. 地址空间 指令地址空间溢出 指令地址计算((address_of ...
随机推荐
- 【题解】 bzoj3894: 文理分科 (网络流/最小割)
bzoj3894,懒得复制题面,戳我戳我 Solution: 首先这是一个网络流,应该还比较好想,主要就是考虑建图了. 我们来分析下题面,因为一个人要么选文科要么选理科,相当于两条流里面割掉一条(怎么 ...
- 自学Linux Shell16.1-函数概念
点击返回 自学Linux命令行与Shell脚本之路 16.1-函数概念 编写比较复杂的shell脚本时,完成具体任务的代码可能需要重复使用.bash shell提供满足这种要求的特性.函数是被赋予名称 ...
- 【转】stm32CubeMx上移植自己的printf()和scanf()函数
要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中.重定向是指用户可以自己重写C 的库函数,当连接器检查到用户编写了与C 库函数相同名字的函数 ...
- nginx 深入篇
nginx 防盗链 上文介绍了如何以最最简单的方式配置静态资源,还存在一定的隐患,一般的盗链如何预防, 设置验证referer server { listen 8000; server_name 12 ...
- 【codevs1004】四子连棋 状压bfs
题目大意:给定一个大小为 4*4 的棋盘,分别有 7 个黑子.7 个白子和 2 个空位构成,求出至少需要移动多少步,才能使得四个相同的棋子共线. 题解:显然每一种棋盘的局面都是一个状态,因此需要采用状 ...
- 关于使用IsapiRewrite重写,重定向的语句
早上起床,发现之前的IsapiRewrite写法有改进的地方, 有几个废弃的网址可以使用IsapiRewrite的重定向,转到新的网址上来. 搞了有十分钟的时间,测试老是不重定向. 因为之前已经有一个 ...
- Vue.js 开发环境的搭建
1. cnpm install vue-cli(安装vue 脚手架) 2. vue init webpack my-project(my-project:自定义,取一个项目的名字,init 初始化一个 ...
- Linux记录-Linux Swap分区虚拟内存相关解决方案
Swap用途:Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区.当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临 ...
- spring中用到了哪些设计模式
spring中用到了哪些设计模式?(顺丰) spring中常用的设计模式达到九种,我们举例说明: 第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种G ...
- AbstractQueuedSynchronizer同步队列与Condition等待队列协同机制
概要: AQS维护了一个同步队列 Condition是JUC的一个接口,AQS的ConditionObject实现了这个接口,维护了一个等待队列(等待signal信号的队列) 线程调用reentran ...