[architecture]-arm exclusive机制介绍

article/2025/9/29 17:08:48

关键词:spinlock,原子操作,独占访问,exclusive,inclusive,mutex,Semaphore,互斥,同步,同步原语

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈

  • 付费专栏-付费课程 【购买须知】:
  • 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈

在这里插入图片描述

术语
synchronization primitives : 同步原语

1、软件同步

当对共享资源的访问必须一次仅限于一个agent 时,软件必须同步。 通常,共享资源是共享内存位置或外围设备,agent 可能是处理器、进程或线程。 这种同步通常通过原子修改保存资源当前状态的变量来管理。 也就是说,修改总是完全成功,或者根本不成功。 它也必须对可能同时访问该变量的所有agent 可见。

1.1、软件同步接口

操作系统或平台库向应用程序开发人员隐藏了这些低级硬件原语,它们位于构成应用程序编程接口 (API) 一部分的硬件独立函数后面。

本文涵盖以下高级软件同步原语(synchronization primitives):

  • Mutex
    一个变量,能够指示锁定和解锁两种状态。 试图锁定已经处于锁定状态的互斥锁会阻止执行,直到持有互斥锁的代理解锁它。 互斥体有时称为锁或二进制信号量。
  • Semaphore
  • 可以原子递增和递减的计数器。 尝试递减一个值小于 1 的信号量会阻止执行,直到另一个代理递增该信号量。

除了阻塞操作之外,API 还可以定义非阻塞变体。 如果非阻塞函数无法执行请求的操作,则返回错误条件而不是阻塞。

1.2、多任务系统中的同步

在多任务操作系统中,即使被上下文切换中断,任何同步操作也必须保证正确运行。 当不需要与其他处理器同步时,软件可以通过在更新同步变量时禁用中断来实现这一点。 这可能是在操作系统内核中实现同步的有用方法,但系统调用的性能开销使其成为应用软件不切实际的解决方案。 此外,当低中断延迟很重要时,这不是一个好的解决方案

1.3、多处理器系统中的同步

多核和多处理器系统引入了一个新问题,因为它们可能需要在整个系统中原子地锁定互斥锁或修改信号量。 这可能需要系统维护跟踪活动同步操作的全局状态。

1.4、ARM 架构中同步原语的历史

SWP 和 SWPB 指令在寄存器和存储器之间自动交换 32 位字或字节。 从 ARMv6 架构开始,ARM 不赞成使用 SWP 和 SWPB。 这意味着未来的架构不能保证支持这些指令。 ARM 强烈建议所有软件都使用本文中描述的新同步原语。 对于针对旧系统的开发人员,附录 A SWP 和 SWPB 提供了有关这些说明的一些信息。

1.5、ARMv6 架构中的添加

ARMv6 架构引入了对内存位置进行独占访问的概念,提供了更灵活的原子内存更新。 第 1-4 页的独占访问描述了新指令和架构概念。

它还介绍了内存类型、内存访问排序规则和用于显式排序内存访问的屏障指令的概念。 有关这些概念的信息,请参阅您的体系结构版本和配置文件的 ARM 体系结构参考手册。 本文档可从 http://infocenter.arm.com 索取

2、独占访问(Exclusive accesses——

ARMv6 架构以 Load-Exclusive 和 Store-Exclusive 同步原语 LDREXSTREX 的形式引入了 Load Link 和 Store Conditional 指令。 从 ARMv6T2 开始,这些指令在 ARM 和 Thumb 指令集中可用。 Load-Exclusive 和 Store-Exclusive 提供灵活且可扩展的同步,取代已弃用的 SWP 和 SWPB 指令。

2.1、LDREX 和STREX

LDREX 和 STREX 指令将原子更新内存的操作分成两个独立的步骤。 它们一起提供原子更新以及跟踪独占内存访问的独占监视器。 Load-Exclusive 和 Store-Exclusive 只能访问标记为 Normal 的内存区域。

LDREX
LDREX 指令从内存加载一个字,初始化独占监视器的状态以跟踪同步操作。 例如,LDREX R1,[R0] 从 R0 中的地址执行 Load-Exclusive,将值放入 R1 并更新独占监视器。

STREX
STREX 指令执行一个字到内存的条件存储。 如果独占监视器允许存储,则操作更新内存位置并在目标寄存器中返回值 0,表示操作成功。 如果独占监视器不允许存储,则操作不会更新内存位置并在目标寄存器中返回值 1。 这使得可以根据内存操作的成功或失败来实现有条件的执行路径。 例如,STREX R2, R1, [R0] 对 R0 中的地址执行 Store-Exclusive 操作,有条件地存储来自 R1 的值并在 R2 中指示成功或失败。

独占访问大小
ARMv6K 架构引入了 LDREX 和 STREX 的字节、半字和双字变体:

  • LDREXB and STREXB
  • LDREXH and STREXH
  • LDREXD and STREXD.

ARMv7 体系结构将这些添加到 A 和 R 配置文件中的 Thumb 指令集中。 ARMv7-M 支持字节和半字,但不支持双字变体。 ARMv6-M 不支持独占访问。

该架构要求每个 Load-Exclusive 指令只能与对应的 Store-Exclusive 指令一起使用,例如 LDREXB 必须只能与 STREXB 一起使用。

2.2、Exclusive monitors

独占监视器是一个简单的状态机,具有open和exclusive的两种状态。 为了支持处理器之间的同步,系统必须实现两组监视器,local和global。 Load-Exclusive 操作将监视器更新为exclusive状态。 Store-Exclusive 操作访问监视器以确定它是否可以成功完成。 只有当所有访问的独占监视器都处于独占状态时,Store-Exclusive 才能成功。

图 1-1 显示了一个示例系统,它由一个 Cortex™-A8 处理器、一个 Cortex-R4 处理器和一个在两者之间共享的存储设备组成。
在这里插入图片描述
(1)、Local monitors
每个支持独占访问的处理器都有一个本地监视器。 仅针对此本地监视器检查对标记为不可共享的内存位置的独占访问。 对标记为 Shareable 的内存位置的独占访问会针对本地监视器和全局监视器进行检查。

例如,如果上图中的 Cortex-A8 处理器上执行的软件必须在本地执行的应用程序之间强制执行同步,它可以使用放置在不可共享内存中的互斥锁来实现。 生成的 Load-Exclusive 和 Store-Exclusive 指令仅访问本地监视器。

可以实现本地监视器来标记一个地址供独占使用,或者它可以包含一个状态机,仅跟踪 Load-Exclusive 和 Store-Exclusive 指令的发布。 这意味着可共享位置的 Store-Exclusive 可能会成功,即使前面的 Load-Exclusive 来自完全不同的位置。 出于这个原因,可移植代码不能假设执行地址检查的独占访问。

如果该位置是可缓存的,则同步可能在没有任何外部总线事务的情况下发生,并且结果对于外部观察者(例如系统中的其他处理器)不可见。

(2)、Global monitors
全局监视器跟踪对标记为可共享的内存区域的独占访问。任何针对可共享内存的 Store-Exclusive 操作都必须检查其本地监视器和全局监视器,以确定它是否可以更新内存。

例如,如果在第 1-5 页的图 1-1 中的一个处理器上执行的软件必须与在另一个处理器上执行的软件同步其操作,则可以使用放置在可共享内存中的互斥锁来实现这一点。生成的 Load-Exclusive 和 Store-Exclusive 指令访问本地监视器和全局监视器。

还可以将全局监视器或全局监视器的一部分与本地监视器结合实现,例如在实现缓存一致性管理的系统中。请参阅第 1-8 页的在多核系统中使用。

全局监视器可以为支持独占访问的系统中的每个处理器标记一个地址。当处理器对可共享位置执行 Load-Exclusive 时,全局监视器标记访问地址以供该处理器独占使用。以下事件将处理器 N 的全局监视器条目重置为打开状态:

  • 处理器 N 从不同的位置执行独占加载
  • 不同的处理器成功地对标记为处理器 N 专用的位置执行存储或存储独占。

其他事件可以清除全局独占监视器,但它们是实现定义的,可移植代码不能依赖它们。

如果配置为 Shareable 的区域未与全局监视器关联,则对该区域的 Store-Exclusive 操作始终失败,并在目标寄存器中返回 0。

Exclusives Reservation Granule
当独占监视器标记一个地址时,可以标记为独占访问的最小区域称为独占保留颗粒 (ERG)。 ERG 是实现定义的,范围为 8-2048 字节,是两个字节的倍数。 可移植代码不得假设任何有关 ERG 大小的信息。

Resetting monitors
当操作系统执行上下文切换时,它必须将本地监视器重置为打开状态,以防止误报发生。 ARMv6K 引入了清除独占指令 CLREX 来重置本地监视器。

在 ARMv6 基础架构和 ARMv6T2 中,本地监视器必须通过对专用地址执行虚拟存储独占来重置。

在数据中止异常之后,监视器的状态在架构上是未定义的。 因此,ARM 建议异常处理代码执行 CLREX 或伪 Store-Exclusive 指令。

如果上下文切换在进程执行了 Load-Exclusive 之后但在它执行 Store-Exclusive 之前调度了一个进程,则 Store-Exclusive 在进程恢复时返回一个假阴性结果,并且内存不会更新。 这不会影响程序功能,因为进程可以立即重试操作。

出于这些原因,ARM 建议:

  • Load-Exclusive 和 Store-Exclusive 相隔不超过 128 个字节
  • 在 Load-Exclusive 和 Store-Exclusive 之间不执行显式缓存维护操作或数据访问。


http://chatgpt.dhexx.cn/article/EFc4xSe5.shtml

相关文章

使用Armitage进行渗透测试与键盘记录

0x00:Armitage是一款基于GUI开发的图形化渗透工具,对于渗透测试而言能够快速了解网络的拓扑以及主机状态,其功能丰富,是每一位渗透测试者的必备武器;今天我就来演示如何在Armitage下入侵纯在漏洞的XP系统,废…

在2022年的kali linux上面安装armitage

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在2022年的kali linux上面安装armitage 前言一、armitage是什么?二、安装步骤1.官网下载2.build安装3.配置数据库 总结 前言 提示:在2022年的kali li…

ARMv8 architecture里的Memory aborts

在AArch64 Virtual Memory System Architecture中,有以下几种机制会导致PE在访问memory失败时产生exceptions。 Debug exception: An exception caused by the debug configuration.Alignment fault: An Alignment fault is generated if the address used for a m…

Armitage图形化前端

开源免费图形前端 ● 作者自称是众多不会使用metasploit的安全专家之一(命令行) ● MSF基于命令行,缺少直观的GUI图形用户接口 Armitage只是调用MSF的漏洞利用能力 ● Armitage的每一个GUI操作都可以对应MSF中的一条命令 红队团队合作模拟…

Kali Linux 使用Armitage

目录 说明安装扫描网络Quick Scan (OS detect)输入网段扫描结果 图形化ms17_010先扫描 auxiliary再攻击被渗透图形化metaspliotMeterpreter 5类任务:计算系统密码的hash值 Browser filesLog Keystrokes 写在最后 Armitage是一款用Java为Metasploit编写的图形化操作界…

【Arm架构】什么是Arm?

1 Arm architecture Arm 架构是世界上最流行的处理器架构之一。每年有数十亿台基于 Arm 的设备出货。 A-Profile (Applications) R-Profile (Real-Time) M-Profile (Microcontroller) 高性能场景 实时系统 小型,高能效设备 用于运行复杂的操作系统&#xff0…

「Arm Arch」 初识 Arm

本文源自《书香度年华》「ARM 架构专栏」,是一系列由浅入深、循序渐进的文章,文章之间有一定的前后关联性,所以按顺序阅读,建议收藏专栏。 目录 前言 一、架构概述 1.1 冯诺依曼架构 1.2 哈佛架构 1.3 Arm 架构 二、架构图谱…

Armitage的介绍和使用

目录 1.1Armitage的介绍与原理 1.1.2 Armitage的主要功能包括: 1.2 启动Armitage 1.2.1 Armitage启动的三种方法: 1.2.2 Armitage启动前初始化: 1.3 使用Armitage生成被控端和主控端 1.3.1 Armitage的工作界面: 1.3.2 使用…

ARM 架构是什么?

ARM(Advanced RISC Machines)架构是一种处理器架构,它是一种精简指令集计算机(RISC)架构。ARM架构最初由ARM Holdings(现在是SoftBank Group的子公司)开发,并在1980年代末和1990年代…

Armitage的使用

一.简介 Armitage是一个攻击管理工具,它以图形化方式实现了Metasploit框架的自动化攻击。Armitage采用Java构建,拥有跨平台特性。 二.使用 (一)基本原理 1.入门 1.1开启Armitage 在命令行输入armitage命令会弹出如下对话框&…

黑客工具Armitage

Armitage介绍: Armitage是一款Java写的Metasploit图形界面化的攻击软件,可以用它结合 Metasploit中已知的exploit来针对主机存在的漏洞自动化攻击。通过命令行的方式使用Metasploit难度较高,需要记忆的命令过多,而Armitage完美的…

Armitage的介绍与使用

目录 1.1 Armitage的介绍与原理1.1.1 Armitage主要利用什么漏洞?为什么会出现这种漏洞?攻击怎么实现? 1.2 启动Armitage1.2.1 Armitage启动的三种方法:1.2.2 Armitage启动前初始化: 1.3 使用Armitage生成被控端和主控端…

Armitage之——网络扫描以及主机管理

转载请注明出处:https://blog.csdn.net/l1028386804/article/details/86676136 继续上一篇《Armitage之——基本原理》 Armitage中使用独立的Hosts选项卡来实现主机的管理操作和主机的扫描操作。可以单击导航栏上的Hosts按钮选项,然后选中下拉菜单上的…

Armitage之——基本原理

转载请注明出处:https://blog.csdn.net/l1028386804/article/details/86675559 Armitage是一个攻击管理工具,它以图形化方式实现了Metasploit框架的自动化攻击。Armitage采用Java构建,拥有跨平台特性。 1.入门 1-1.开启Armitage 在命令行…

oracle11g数据库已关闭,oracle数据库已关闭

关于 oracle数据库已关闭的搜索结果 问题 linux操作系统 重启oracle数据库 1. 打开secureCRT,连接到数据库所在的linux机器。若用户为root,请输入命令“su - oracle”并回车,若要密码,输入密码后并回车,就切换到了ora.…

Oracle 视图 代码 格式化,ASP.NET Aries :列表数据表格的格式化处理及行内编辑

前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作。 先看一下列表: 接下来我们有很多事情可以做。 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化…

mongo连接oracle,Oracle连接MongoDB数据库工具下载

oracleToMongo是能帮助工程师们将Oracle连接MongoDB数据库的小工具,它能使用计划自动完成转换任务,这个功能相当实用,有需要备份迁移数据库的直接来IT猫扑下载! Oracle转MongoDB工具介绍 OracleToMongo是一种数据转换软件&#xf…

oracle管道输出,oracle管道输出

通常我们会在oracle中用dbms_output输出调试信息,但dbms_output只能在调用过程完成才返回结果,不能实时输出的。这意味着通常我们经常要等几分钟或更长的时间才能看到调试信息,那怎么才能实现实时输出呢? 如果想实时输出可以通过写…

oracle中的with函数,Oracle层次查询和with函数的使用

开发中大家应该都做过什么类似部门管理这样的功能,一般情况下一个部门下面还有下一级部门(子部门),这个层级就类似一棵树。这种情况下一般会把父级部门和子级部门分成2个或者多个表,这种算是比较常规的做法;有时可能为了数据表管理…

node.js配置oracle,Node.js 安装配置 | 菜鸟教程

Node.js 安装配置 本章节我们将向大家介绍在 Windows 和 Linux 上安装 Node.js 的方法。 本安装教程以 Node.js v4.4.3 LTS(长期支持版本)版本为例。 你可以根据不同平台系统选择你需要的 Node.js 安装包。 注意:Linux 上安装 Node.js 需要安装 Python 2.6 或 2.7 &…