AArch32,arm的32bit架构;

AArch64,arm的64bit架构;

ARMv8.2-LPA,是armv8.2中的新feature,扩大了IPA和PA的支持范围,从48bit扩展到52bit。

armv8-a core内部使用virtual memory,内部通过mmu转换为physical address。

mmu的好处:

1)允许system同时运行多个task,各个task之间完全是地址透明的。

2)同一个task,code在编写的时候,也完全不需要了解processor内部的地址分配。

3)mmu还可以实现memory access permission的控制,memory attribute的控制,cache policy的控制。

这样app的编写,编译,链接都是在virtual memory space中进行的。

arm提出trustzone之后,定义了两种physical address space,在理论上,secure和non-secure的physical address

应该是完全分开的两个地址空间,甚至存储器,但是在实现中,多通过bus attribute来进行控制。表示的是

同一块地址,在进行secure和non-secure切换的时候,需要自己保存上下文。

arm规定,non-secure不能访问secure空间,但是secure是可以访问secure和non-secure的,这样的化,在应用中

如果一个secure的master,读了两次同一个地址,一次是secure bus读,一次是non-secure bus读,这样在cache

中会出错,所以一般要求,secure在读取non-secure的时候,要求使用non-secure bus attr。

mmu内部的translation table根据exception level分为四级:

1) EL0------app

2) EL1------kernel

3) EL2------hypervisor,armv7加入的一个arm core mode,主要为了virtualization。

4) EL3------secure monitor,在trustzone切换过程中的mode。

一般情况下EL0是执行在unprivilege mode下的,其他三种都是执行在privilege mode下的。需要配置自己的TCR寄存器

EL0和EL1都可以执行在non-secure或secure mode下,但是EL2只能执行在non-secure mode下,EL3只能执行在secure mode下。

EL0和EL1的translation table base address是指定在寄存器中,Translation Table Base Registers(TTBR0_EL1)和(TTBR1_EL1)

EL0和EL1的区分是通过VA的高位地址来区分的,OS的地址都在高位,高位都为1;

APP的地址都在低位,高位都为0;

一般是16bit的高位,这样和32bit级联起来,刚好48bits

EL2和EL3都只有TTBR0,寄存器分别为TTBR0_EL2和(TTBR0_EL3)

除了base address,还有一个Translation control register(TCR_EL1),其中控制

1)IPA size,最终的PA的范围大小,3bits,000---32bitsPA,101---48bitsPA

2)TG0/TG1,translation table的size大小,2bits,00---4KB,01---16KB,11---64KB  (Translation Granule)

3)T0SZ/T1SZ,高bits的位数,来区分EL0/EL1的高位,5bits

VA到PA的translation:

对于一个nbits的VA空间的应用,高位64-n必须是全零或者全1,否则mmu会报event error。

VA的低位地址,或直接作为PA中的offset,具体bit是按design而定的。

一个转换的流程图,多级转换:

TTBR0_EL1,TTBR1_EL1以及TCR_EL1都是不区分secure和non-secure的寄存器,所以在secure切换的时候,

必须自己做context的保存。

VMSAv8-64的translation table format descripter:

主要有以下几个方面,

1) invalid或者valid; bit[0]

2) table entry或者block entry;  bit[1]

descripter与granule的颗粒有关系,

4k granule      16granule        64granule

level0  block entry不支持  block entry不支持    block entry不支持

level1            block entry不支持    block entry不支持(主要看ARMv8.2-LPA是否支持)

level2

对于level3的table,都是支持block entry的,不支持table entry

对于不支持ARMv8.2-LPA的level0-level3的descripter的各种格式,

level3的descripter格式:

amrv8.2中的多级地址映射:

两级的translations,主要引入了hypervisor的控制,stage1由guest os控制,stage2由hypervisor控制。

1) 主要在level0和level1进行了扩展,可能会有stage2。对于secure的操作,系统中是不允许在做stage2的。

对于non-secure操作,需要配置Hypervisor Configuration Register(HCR_EL2)来进行stage2。

2) EL2和EL3都是只有stage1的,Translation base table,分别有自己的TTBR0_EL2/EL3,secure world是不允许有virtualization的。

3) stage2的 Translation base table寄存器是单独的VTTBR0_EL2,并且有自己单独的control寄存器VTCR_EL2

另一类的access的控制,是对执行attr的控制,反应到bus上就是某些instruction的prefetch不能再一些地址上进行。

block/page可以被标识为Execute Never(XN),Unprivilege Execute Never(UXN),Privilege Execute Never(PXN),

通过配置每个level的SCTLR_ELn寄存器来实现。

AF(access flag),是软件的应用,表明目前该page是否被访问过,优化在OS memory control中的实现。

Bit[58:55],不论是block descripter还是table descripter,中都会预留,为OS使用。可以存放page是否dirty等信息。

mmu中还包括secure ctrl register(SCR)寄存器,可以定义secure是否可以访问non-secure的空间,

arm中还定义了指令LDTR和STTR,可以允许在EL1中执行数据的加载和写入,权限等是按照EL0的配置来执行。

在其他的except level中,LDTR和STTR指令与普通的LDR和STR相同。

TLB(Translation Lookaside Buffer),MMU中访问page translation的cache,每个TLB的entry,都包括memory type,

cache policy,access permission,ASID,VMID等信息。

如果memory中的translation entry已经更新,但是TLB中的未更新,这时需要OS进行invalidation stale TLB entry。

指令TLBI ,可以指定stage-level,specify-attr等。

ALL,VMALL,VMALLSI2,ASID,VA,VAA

TLB中的entry是区分secure和non-secure的,所以在secure切换的时候,是不需要context-switch的。

arm el2与el3_armv8 memory translation相关推荐

  1. arm el2与el3_armv8架构与指令集.整理.初稿.pdf

    目 录 第 1 章 ARMV8 简介 3 1.1 基础认识 3 1.2 相关专业名词解释 3 第 2 章 EXECUTION STATE 4 2.1 提供两种EXECUTION STATE 4 2.2 ...

  2. arm el2与el3_ARMv8的学习笔记

    0. 状态 执行态:        AARCH64, AARCH32 最高异常等级只能工作在Aarch64, 其他EL可以工作在Aarch64或者Aarch32.  SCR_EL3.RW,  HCR_ ...

  3. Memory Translation and Segmentation(内存转换与段)

    Memory Translation and Segmentation(内存转换与段) https://manybutfinite.com/post/memory-translation-and-se ...

  4. arm el2与el3_【精品博文】ARMv8的A32的异常等级

    原标题:[精品博文]ARMv8的A32的异常等级 ARMv8,定义了异常等级,来进行权限控制.分别是EL0,EL1,EL2,EL3. 对于AArch32,ARMv8定义了9种PE模式,来确执行权限,不 ...

  5. ARM linux的启动部分源代码简略分析

    ARM linux的启动部分源代码简略分析 以友善之臂的mini2440开发板为平台,以较新的内核linux-2.6.32.7版本为例,仅作说明之用. 当内核映像被加载到RAM之后,Bootloade ...

  6. 一颗ARM架构芯片的软硬件构成

    硬件和软件是一颗芯片系统互相依存的两大部分.本文总结了一颗芯片的软硬件组成.作为对芯片的入门级概括吧. (一)硬件 主控CPU:运算和控制核心.基带芯片基本构架採用微处理器+数字信号处理器(DSP)的 ...

  7. 深入理解Memory Order

    深入理解Memory Order cpu 保证 cache 编程技术 lock-free wait-free Read–modify–write Compare-And-Swap(CAS) cas原理 ...

  8. ARM linux的启动部分源代码简略分析【转】

    转自:http://www.cnblogs.com/armlinux/archive/2011/11/07/2396784.html ARM linux的启动部分源代码简略分析 以友善之臂的mini2 ...

  9. 了解 ARM Coretex-A 系列芯片

    1.UART串口 2.SPI 接口 3.USB Host/Device 4.音频接口 5.SDMMC接口 6.IIC(I2C)通信接口 7.键盘和外部中断 8.PWM Timer PWM Timer脉 ...

最新文章

  1. SpringBoot 实战 (九) | 整合 Mybatis
  2. Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
  3. java插件获取首选项_Eclipse RCP 中创建自定义首选项,并能读取首选项中的值
  4. Spring构造注入重载
  5. java代码_35个Java 代码优化细节
  6. 云商城云小店官网源码-修复30套模板支持一键对接各大系统
  7. python中的main函数可以被其他文件调用么_Python中在脚本中引用其他文件函数的实现方法...
  8. webpack3快速入门
  9. (转)功能测试(黑盒测试)常用的策略和方法
  10. sonar jacoco 覆盖率为0_接口测试代码覆盖率(jacoco)方案分享
  11. 数据库课程设计(学校运动会管理系统)2021-9-21
  12. mysql 添加 删除索引(index) alter table 修改字段 修改列
  13. 零基础入门,资深吃货带你搞懂大数据
  14. 扫描二维码报修公司电脑
  15. HCIE - 2204-MPLS
  16. 使用 Wrapper 自定义SQL
  17. 工资管理系统/c语言期末大作业学习经历
  18. NopCommerce 在Category 显示Vendor List列表
  19. Unity3D教程:简单的碰撞检测
  20. 11月面完美团+网易+腾讯+百度+滴滴熬夜5天整理面经攒人品

热门文章

  1. 第五期 RHCE远程班 12月1日开课(周末班)
  2. Cisco对中国CCIE认证下重手了
  3. 点站点链接出现短时间白屏或闪屏现象
  4. 50个不上你网站的理由
  5. 数字化时代的创新意欲何为?
  6. 傲游浏览器---自定义 UserAgent 字符串
  7. Android热修复升级探索——SO库修复方案
  8. 移动html特殊链接【打电话_发短信_发邮件】
  9. rhel7 http实例2
  10. linux tac sed,Day08 - 一些常用 Linux 指令 - 3-7 (cat、tac、head、tail、vi、sed)