• 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.参考文档

    [1] Linux内核ARM构架中原子变量的底层实现研究 

    [2] DDI0487A_k_armv8_arm_iss10775.pdf

  • 相关阅读:
    深析Tomcat容器工作流程
    GC基础
    oracle sql总结
    mybatis返回值类型总结
    eclipse启动javaweb项目后,如何让局域网内的其他人访问
    oracle sql 逗号 分割 REGEXP_SUBSTR 函数
    Oracle12c安装时报"指定的oracle主目录用户已存在"错误
    spring
    Oracle sql where后面的多条件case when判断执行
    Oracle12c安装时报ins-30131
  • 原文地址:https://www.cnblogs.com/smartjourneys/p/6844471.html
Copyright © 2020-2023  润新知