热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

ARM同步指令之LDREX和STREX

LDREX和STREX和ldr、str指令很像,就像是派生出来的。。。。功能很强大。。。用来做同步。。。比如linuxatomic原子操作就是用该指令完成的。。它就是独占机制

LDREX和STREX和ldr、str指令很像,就像是派生出来的。。。。

功能很强大。。。

用来做同步。。。比如linux atomic原子操作就是用该指令完成的。。

它就是独占机制。。。。。。

用法

LDREX Rx ,[Ry]
将Ry寄存器指向的内存单元处的值读取出来放到Rx寄存器中,并标记[Ry]单元处的内存单元为Exclusive Access state…….

STREX Rx ,Ry,[Rz]
将Ry寄存器中的值读出来放到Rz指向的内存单元处,如果Rz内存单元的状态为Exclusive Access state,则Rx的值将会被赋值为0,而如果Rz内存单元的状态为Open Access state的话,Rx的值将会被赋值为1。。。。。。并且Ry的值也不会被加载到Rz指向的内存单元中。也就是指令失败

看到这里,大概懂了吧,怎么实现独占。

也就是先用LDREX指令然后对内存单元进行标记,完成动作之后,在用STREX清除内存标记。这里先不讲它是怎么实现同步的,如果想知道请看另外一篇内核同步原子操作的文章。

这里主要讲机制。

arm的内部对内存的属性有 共享 和 非共享
共享:在多核处理器中,可以被多个CPU访问。
非共享:只能由一个CPU访问。

所以怎么对内存进行标记呢?

arm 用了两个东东来实现。分别是Local monitor 和 Global monitor。
他们

Local monitor : 对非共享内存和共享内存都会使用到,是对该CPU本地的内存进行标记。

Global monitor : 对共享内存使用,也就是多个CPU都依赖于Global monitor。

这里举个例来理解,这里 CPU1 有两个线程,CPU2有一个线程,他们都要对同一块共享内存进行访问。但时间不一样
这里写图片描述

首先CPU3 thread3 使用ldrex ,此时Global monitor内存标识为Exclusive Access state,CPU3 的Local monitor 为Exclusive Access state,然后CPU1 使用LDREX,此时CPU1的Local monitor 也为Exclusive Access state ,然后CPU1 的thread2 也是同样。
之后。。。。。。。。CPU1 的 thread1 执行strex ,此时Local monitor的状态变为 Open Access state,Global monitor 也被变为Open Access state。 然后Cpu2 的thread3 的local monitor 为Exclusive Access state 但是 Global 为Open Access state.所以指令执行失败。。。。。最后是CPU1的thread2 。global monitor 为Open Access state。。。所以指令执行失败。

Thats all thanks!


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 乐视手机S1 Pro发布,声称手机真不卡,外观酷似iPhone
    乐视宣布即将发布乐视手机S1 Pro,搭载虎贲T7510芯片,声称手机真不卡。该手机外观与iPhone 14 Pro相似,采用居中药丸式挖孔屏和方形三摄模组。官方定位该手机为便宜的5G手机,售价预计在千元价位。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • PL2303HXD电路图(USB转UART)介绍及应用
    本文介绍了PL2303HXD电路图(USB转UART)的特性和应用,该电路图可以实现RS232和USB信号的转换,方便嵌入到手持设备中。PL2303HXD作为USB/RS232双向转换器,可以将USB数据转换为RS232信息流格式发送给外设,并将RS232外设的数据转换为USB数据格式传送回主机。通过利用USB块传输模式和自动流量控制,PL2303HXD能够实现更高的数据传输吞吐量比传统的UART端口。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
author-avatar
心语忆录_288
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有