ARMv8百日谈(内存管理系统)

来源:互联网 发布:mac版网络游戏下载 编辑:程序博客网 时间:2024/04/30 01:51

1、MMU的作用是啥:进行地址转换,地址权限控制,地址属性定义,以及对PE发起的访问进行check

2、在不同的EL下以及不同的安全状态下,VA到PA的过程是不一样的,经过的stage转换阶段,如下:

      

3、在aarch64状态下,VA(虚拟地址)的最高8个bit,即63-56bit是被忽视的,当用来进行以下三个场景的判断:

      a、在转换系统使能以后,判断地址会不会因为超出范围而导致 translation fault

      b、地址会不会导致 由于超出范围的address size错误,在转换系统未使能的情况下(这里不太明白,转换系统未使能,怎么判断转换的地址数目多少呢?)

      c、地址是不是需要无效(invld),当执行一个按地址进行 TLB invld的指令(难道b说的是在55bit的一个边界地址,增加后的size,比如1个4k的尾地址导致的地址超过range?)

4、当使用aarch64 EL1&EL0转换体制的时候:

      VA的bit 55决定了控制Address tag使用的寄存器bit(Address tag是什么玩意?是存储在cache中用来进行匹配的玩意吗?

      a、VA【55】==0:TCR_EL1.TBI0决定address tag是否被使用,如果stage1被使能的话,ttbr0_EL1存储了页表所在的内存基地址

      b、VA【55】==1:TCR_EL1.TBI1决定”address tag是否被使用,如果stage1被使能的话,ttbr1_EL1存储了也表所在的内存基地址

5、当使用aarch64 EL2的转换机制的时候,其实就是在EL2下进行页表转换:

      TCR_EL2.TBI决定address tag是否被使用,ttbr0_EL2里存储了页表所在的内存基地址(这里有个疑问,页表所在地址应该是不需要转换的吧,该寄存器中存储的应该就是物理地址,不然mmu是怎么工作的,他肯定要有一段直接找物理地址,然后控制其他的虚拟地址到物理地址吧,ttbr寄存器的意义应该是这样的

6、当使用aarch64 EL3下的转换机制,其实就是在EL3下进行页表转换:

     TCR_EL3.TBI决定address tag是否被使用,ttbr0_EL3里存储了页表所在的内存基地址

7、TCR_ELx.TBI决定了address tag是否被使用,与相应阶段stage是否被使能是无关的(notice)

8、这里加一条(https://armv8-ref.codingbelief.com/zh/chapter_d4/d41_1_address_tagging_in_aarch64_state.html 这个里面的链接说address tag其实就是地址的高8bit是否被作为tag,那么把地址的高8bit拿去到底做什么啊,这个很费解)

9、由于PC寄存器是64bit的,那么使能这个address tag功能后,因为高8bit被忽视了,是不是这8个bit直接更新到pc中呢?有下列场景,address tag功能对pc值有影响

      a、在所有的可控EL下,所有branch和函数返回

      b、在陷入一个异常的时候,并不关心陷入异常时候进入的EL是不是产生异常的EL

      c、在异常返回的时候,并不关心返回的这个EL是不是执行了return返回的EL 

      d、从debug状态返回EL状态(arm core的debug状态是什么状态

      这里给出了一个EL2的例子来对应9的描述:

      

10、一个具体的TBI bit是决定address tag是否使能,它对于pc值的具体操作是这样的,9描述的是场景,10描述的是具体怎么影响pc

        a、当在EL1&EL0的时候,控制已经load到pc地址的tbi 对应bit使能了,那么pc中的63-56都是55bit的有符号扩展,意思就是复制55bit到56-63的8个bit(这里进行扩展的值是pc寄存器中的值)

        b、当在EL2和EL3的时候,控制已经load到pc中地址的tbi bit使能的话,那么pc中的63-56bit就必须强制使用0x00这个值

11、当address tag使能的时候,导致data abort异常的时候,far里面的值是包含了地址标签的

      

       10点半了,今天先到这里,女朋友回来了。


     c/djaskfjd

0 0