做门户网站赚钱吗软文营销软文推广
news/
2025/10/1 8:20:34/
文章来源:
做门户网站赚钱吗,软文营销软文推广,河北建设工程信息网招标公告唐县水利局,广州建设工程交易中心是干啥的#x1f525;博客主页#xff1a; 小羊失眠啦. #x1f3a5;系列专栏#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞#x1f44d;收藏⭐评论✍️ 思考: 1、cache的entry里都是有什么#xff1f; 2、TLB的entry里都是有什么? 3、MMU操作… 博客主页 小羊失眠啦. 系列专栏《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞收藏⭐评论✍️ 思考: 1、cache的entry里都是有什么 2、TLB的entry里都是有什么? 3、MMU操作的页表中的entry中都是有什么 L1和L3表中的entry中分别都是有什么 本文已有答案学完之后你能否知道看造化了哈哈…. 说明: MMU/TLB/Cache等知识太过于零碎各个模块直接又紧密相关所以在介绍时会串着介绍本文旨在介绍MMU的工作原理学习cache请参考ARM cache的学习笔记-一篇就够了) 以下来自笨叔叔公众号中的提问: 1、cache的内部组织架构是怎么样的能否画出一个cache的layout图什么是setway 2、直接映射全关联和组相联之间有什么区别优缺点是啥? 3、重名问题是怎么发生的? 4、同名问题是怎么发生的 5、VIPT会不会发生重名问题 6、什么是inner shareability 和outer shareability怎么区分 7、什么是PoU什么是PoC 8、什么是cache一致性业界解决cache一致性都有哪些方法 9、MESI状态转换图我看不懂。 10、什么cache伪共享怎么发生的如何避免? 11、DMA和cache为啥会有cache一致性问题 12、网卡通过DMA收数据和发数据应该怎么操作cache 13、对于self-modifying code怎么保证data cache和指令cache的一致性问题 文章目录 一、Memory attribute二、cache的一些基本概念 三、Cache内存访问的模型:四、MMU的介绍五、VMSA 相关术语:六、address translation system (AT)6.1 地址翻译的过程6.2 和mmu相关的System registers6.3 Enable mmu and endianness的相关寄存器6.4 Address size configuration6.5 granule sizes6.6 granule size对地址翻译的影响 6.7 disable mmu七、Translation table7.1 TTBR0/TTBR17.2 页表的entry中包含哪些信息7.3 granule sizes7.4 Cache configuration 八、ARM mmu三级页表查询的过程九、Translation Lookaside Buffer (TLB)9.1 TLB entry里有什么9.2 contiguous block entries9.3 TLB abort9.4 TLB一致性 十、VMSAv8-64 translation table format descriptors推荐 本文转自 周贺贺baron代码改变世界ctwArm精选 资深安全架构专家11年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发。
一、Memory attribute
armv8定义了device memory和normal memory两种内存其中device memory固定的就是Outer-Shareable和Non-cacheable而normal memory有多种属性可选。 说明一下在B2.7.2章节中有这么一句话“Data accesses to memory locations are coherent for all observers in the system, and correspondingly are treated as being Outer Shareable” treated as被看作是但不是所以在一些的文章中就认为device memory是没有shareable属性的。其实也能够理解一段memory设置成了non-cacheable然后再去讨论该memory的shareable属性好像也没有意义。 不管怎么样我们还是按照下方表格的来理解吧device memory固定为Outer-Shareable和Non-cacheable 对于device memory又分下面三种特性 ➨Gathering和non Gathering(G or nG)表示对多个memory的访问是否可以合并如果是nG表示处理器必须严格按照代码中内存访问来进行不能把两次访问合并成一次。例如代码中有2次对同样的一个地址的读访问那么处理器必须严格进行两次read transaction ➨Reordering(R or nR)表示是否允许处理器对内存访问指令进行重排。nR表示必须严格执行program order ➨Early Write Acknowledgement(E or nE)PE访问memory是有问有答的更专业的术语叫做transaction对于write而言PE需要write ack操作以便确定完成一个write transaction。为了加快写的速度系统的中间环节可能会设定一些write buffer。nE表示写操作的ack必须来自最终的目的地而不是中间的write buffer
针对上面的三种特性给出下面四种配置
Device-nGnRnE : 处理器必须严格按照代码中内存访问来进行、必须严格执行program order(无需重排序)、写操作的ack必须来自最终的目的地Device-nGnRE : 处理器必须严格按照代码中内存访问来进行、必须严格执行program order(无需重排序)、写操作的ack可以来自中间的write bufferDevice-nGRE : 处理器必须严格按照代码中内存访问来进行、内存访问指令可以进行重排、写操作的ack可以来自中间的write bufferDevice-GRE : 处理器对多个memory的访问是否可以合并、内存访问指令可以进行重排、写操作的ack可以来自中间的write buffer
部分属性的含义Shareable内存是共享的non-Shareable内存不共享,一般只可被单个PE访问cacheable内存会被缓存non-cacheable内存不会被缓存
PoU/PoC/Inner/Outer的定义 简而言之PoU/PoC定义了指令和命令的所能抵达的缓存或内存在到达了指定地点后Inner/Outer Shareable定义了它们被广播的范围。 例如在某个A15上执行Clean清指令缓存范围指定PoU。显然所有四个A15的一级指令缓存都会被清掉。那么其他的各个Master是不是受影响那就要用到Inner/Outer/Non Shareable 有了上面的这些定义那么我们再来看inner Shareable和outer Shareable
Shareableinner Shareable内存在inner范围内是共享的outer Shareable内存在outer范围内是共享的
读分配(read allocation) 当CPU读数据时发生cache缺失这种情况下都会分配一个cache line缓存从主存读取的数据。默认情况下cache都支持读分配。
写分配(write allocation) 当CPU写数据发生cache缺失时才会考虑写分配策略。当我们不支持写分配的情况下写指令只会更新主存数据然后就结束了。当支持写分配的时候我们首先从主存中加载数据到cache line中相当于先做个读分配动作然后会更新cache line中的数据。
写直通(write through) 当CPU执行store指令并在cache命中时我们更新cache中的数据并且更新主存中的数据。cache和主存的数据始终保持一致。
写回(write back) 当CPU执行store指令并在cache命中时我们只更新cache中的数据。并且每个cache line中会有一个bit位记录数据是否被修改过称之为dirty bit翻翻前面的图片cache line旁边有一个D就是dirty bit。我们会将dirty bit置位。主存中的数据只会在cache line被替换或者显示的clean操作时更新。因此主存中的数据可能是未修改的数据而修改的数据躺在cache中。cache和主存的数据可能不一致。 ➨ 在ARMV8定义这些属性的寄存器和linux kernel或optee软件代码中使用的示例请点击此处
二、cache的一些基本概念
cache是一个高速的内存块它包含了很多entries每一个entrie中都包含: memory地址信息(如tag)、associated data
cache的设计考虑了两大原则 空间域(spatial locality): 访问了一个位置后可能还会访问相邻区域, 如顺序执行的指令、访问一个结构体数据 时间域(Temporal locality)内存区域的访问很可能在短时间内重复如软件中执行了一个循环操作.
为了减少cache读写的次数将多个数据放到了同一个tag下这就是我们所说的cache line 访问缓存中已经存在的信息叫做cache hit访问缓存中不存在的数据叫做cache miss
cache引入的潜在问题 内存的访问不一定同编程者预期的一样; 一个数据可以存在多个物理位置处
三、Cache内存访问的模型: Memory coherency的术语定义 Point of Unification (PoU), Point of Coherency (PoC), Point of Persistence (PoP), and Point of Deep Persistence (PoDP).
四、MMU的介绍
在ARMV8-aarch64体系下ARM Core访问内存的硬件结构图如下所示 其中MMU由TLB和Table Walk Unit组成的.
TLB:Translation Lookaside Buffer (TLB)对应着TLB指令 Table Walk Unit,也叫地址翻译address translation system对应着AT指令
五、VMSA 相关术语: ➨ VMSA - Virtual Memory System Architecture ➨VMSAv8 ➨VMSAv8-32 ➨VMSAv8-64 ➨Virtual address (VA) ➨Intermediate physical address (IPA) ➨Physical address (PA) Translation stage can support only a single VA range ➨48-bit VA, 0x0000000000000000 to 0x0000FFFFFFFFFFFF ➨ARMv8.2-LVA : 64KB granule 52-bit VA,0x0000000000000000 to 0x000FFFFFFFFFFFFF Translation stage can support two VA ranges ➨48-bit VA: 0x0000000000000000 - 0x0000FFFFFFFFFFFF , 0xFFFF000000000000 to 0xFFFFFFFFFFFFFFFF ➨52-bit VA: 0x0000000000000000 - 0x000FFFFFFFFFFFFF , 0xFFF0000000000000 to 0xFFFFFFFFFFFFFFFF Address tagging / Memory Tagging Extension / Pointer authentication
六、address translation system (AT)
6.1 地址翻译的过程
MMU的地址翻译工作是一种自动行为当填好页表、配置好系统寄存器之后cpu发起的虚拟地址读写操作将会经过MMU自动转换成物理地址然后发送到AXI总线上完成真正的内存或device的读写操作. 如下列举了ARM在不同exception level中的地址翻译的模型. 在一般的情况下我们是不会启用stage2的除非enable了EL2、实现了hypervisor那么这时候才会开启stage2如下图所示 6.2 和mmu相关的System registers 在armv8-aarch64体系下TCR(Translation Control Register)寄存器有
TCR_EL1TCR_EL2TCR_EL3VTCR_EL2
它们的含义地址翻译的控制寄存器 TCR_EL1, Translation Control Register (EL1) The control register for stage 1 of the EL10 translation regime. TCR_EL3, Translation Control Register (EL3) The control register for stage 1 of the EL3 translation regime TCR_EL2, Translation Control Register (EL2) The control register for stage 1 of the EL2, or EL20, translation regime VTCR_EL2, Virtualization Translation Control Register The control register for stage 2 of the EL10 translation regime
对应的bit map为 6.3 Enable mmu and endianness的相关寄存器 在ARMV8-aarch64架构下有三个sctlr寄存器
SCTLR_EL1SCTLR_EL2SCTLR_EL3 以SCTLR_EL3该系统寄存器的SCTLR_EL3.EE(BIT[25])定义了MMU访问页表的方式小端方式读、还是大端方式读 6.4 Address size configuration
Physical address size – 告诉cpu当前系统的物理地址是多少位Output address size – 告诉mmu你需要给我输出多少位的物理地址Input address size – 告诉mmu我输入的是多数为的虚拟地址Supported IPA size – stage2页表转换的部分size暂不介绍
. Physical address size b. output address size c . Input address size
TCR_ELx.T0SZ定义使用TTBR0_ELx时VA地址的sizeTCR_ELx.T1SZ定义使用TTBR1_ELx时VA地址的size 注意最大的size为2^(64-x)x为TCR_ELx.T0SZ或TCR_ELx.T1SZ d. Supported IPA size 由VTCR_EL2.SL0 and VSTCR_EL2.SL0寄存器决定
6.5 granule sizes
a. state 1 granule sizes b. state 2 granule sizes 6.6 granule size对地址翻译的影响
granule size的配置不同将会影响到页表的建立不同的granule size的页面有着不同的页表结构例如下表所示的: 6.7 disable mmu
disable mmu之后the stage 1 translationFor the EL10 For Normal memory, Non-shareable, Inner Write-Back Read-Allocate Write-Allocate, Outer Write-Back Read-Allocate Write-Allocate memory attributes
七、Translation table
7.1 TTBR0/TTBR1
ARM文档说因为应用程序切换时要切换页表页表经常改变而kernel切换时不需要切换页表页表几乎不改。所以ARM就提供了 a number of features也就是TTBR0和TTBR1两个页表基地址. TTBR0用于0x00000000_00000000 - 0x0000FFFF_FFFFFFFF虚拟地址空间的翻译TTBR1用于0xFFFF0000_00000000 - 0xFFFFFFFF_FFFFFFFF虚拟地址空间的翻译
EL2/EL3只有TTBR0没有TTBR1所以EL2/EL3的虚拟地址空间是:0x0000FFFF_FFFFFFFF
7.2 页表的entry中包含哪些信息
MMU除了完成地址的翻译还控制的访问权限、memory ordering、cache policies.
如图所示列出了三种类型的entry信息: bits[1:0]表示该输出是block address还是next level table address还是invalid entry
7.3 granule sizes
有三种granule sizes的页表:4kb、16kb、64kb 7.4 Cache configuration
MMU使用translation tables 和 translation registers控制着cache policy、memory attributes、access permissions、va到pa的转换
八、ARM mmu三级页表查询的过程 (1)、在开启MMU后cpu发起的读写地址是一个64bit的虚拟地址(2)、该虚拟地址的高16bit要么是全0要么是全1. 如果是全0则选择TTBR0_ELx做为L1页表的基地址; 如果是全1则选择TTBR1_ELx做为L1页表的基地址;(3)、TTBRx_ELn做为L1页表它指向L2页表在根据bit[41:29]的index查询到L3页表的基地址(4)(5)、有了L3页表的基地址之后在根据bit[28:16]的index查询到页面的地址(6)、最后再根据bit[15:0]查找到最终的物理地址
九、Translation Lookaside Buffer (TLB)
9.1 TLB entry里有什么
TLB中不仅仅包含物理地址和虚拟地址它还包含一些属性例如memory type、cache policies、access permissions、ASID、VMID 注:ASID - Address Space ID, VMID - Virtual Machine ID
9.2 contiguous block entries
TLB拥有固定数目的entries所以你可以通过减少外部内存地址转换的次数来提升TLB hit率. 在ARMV8 architecture中有一个TLB中的feature叫contiguous block entries它表示一个entry可以对应多个blocks. 一个entry找到多个blocks再通过index来查找具体是哪个block。 页表的block entries中也有一个contiguous bit。这个bit为1,则表示开启了TLB的contiguous block entries feature。 contiguous block entries feature要求alignment例如 • 16 × 4KB adjacent blocks giving a 64KB entry with 4KB granule. 缓存64kb blocks,只需16 enties • 32 × 32MB adjacent blocks giving a 1GB entry for L2 descriptors, 128 × 16KB giving a 2MB entry for L3 descriptors when using a 16KB granule. • 32 × 64Kb adjacent blocks giving a 2MB entry with a 64KB granule.
如果支持了contiguous bit那么: TLB查询后的PA TLB entry中的PA index。
9.3 TLB abort
如果开启了contiguous bit而要转换的table entries确不是连续的或者entries的output在地址范围之外或没有对齐那么将会产生TLB abort
9.4 TLB一致性
如果os修改了页表(entries)那么os需要告诉TLBinvalid这些TLB entries这是需要软件来做的. 指令如下:
TLBI typelevel{IS} {, Xt}十、VMSAv8-64 translation table format descriptors
这里的table format descriptors其实就是本文开头“思考”中提到的entry在页表中的entry 要么是invalid要么是table entry要么是block entry
An invalid or fault entry.A table entry, that points to the next-level translation table.A block entry, that defines the memory properties for the access.A reserved format
如果是table entry其attribute描述如下 如果是block entry其attribute描述如下 如果是stage2的entry无论是table entry还是block entry其attribute描述如下 其实用如下的一张图来描述更清晰 这里的bit[1:0]用于定义entry的类型invalid? block ? table? reserved bit[4:2]指向 MAIR_ELn寄存器中的其中的一个字节用于定义内存(main memory和device memory)的类型
MAIR_ELn寄存器拆分成8个bytes每个byte定义一种内存类型 (MAIR_ELn, Memory Attribute Indirection Register (ELn)) 每一个byteattrn的含义如下 各个bit位的具体含义 例如optee中的内存属性配置如下:
#define ATTR_DEVICE_INDEX 0x0
#define ATTR_IWBWA_OWBWA_NTR_INDEX 0x1
#define ATTR_INDEX_MASK 0x7#define ATTR_DEVICE (0x4)
#define ATTR_IWBWA_OWBWA_NTR (0xff)mair MAIR_ATTR_SET(ATTR_DEVICE, ATTR_DEVICE_INDEX);
mair | MAIR_ATTR_SET(ATTR_IWBWA_OWBWA_NTR, ATTR_IWBWA_OWBWA_NTR_INDEX);
write_mair_el1(mair);推荐
ARMv8/ARMv9架构从入门到精通 --博客专栏《Armv8/Armv9架构从入门到精通 第二期》 --大课程8天入门ARM架构 --入门课程
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923657.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!