1.持续更新:
D4.2.3 Memory translation granule size
The memory translation granule size defines both:
• The maximum size of a single translation table.
• The memory page size. That is, the granularity of a translation table lookup.
页粒度有两层定义:单个页表的最大尺寸为2^n; 内存进行分页的size也是2^n;
对于64位系统,4K页表:n=12; 每个页表为2^n, 每个entry为8bit,所以每个页表含有2^(n-3)个entries. IA[(n-1):0]为每个页的偏移量,the final level of lookup: IA[((n-1)+(n-3)):n],
The previous level of lookup: IA[((2n-4)+(n-3)):(2n-3)],以此类推,每次首尾两个地址都加上n-3;
对于4KB granule size, lookup level: Zero: IA[47:39]; First: IA[38:30]; Second, IA[29:21]; Third IA[20:12]; the initial lookup可以是level 0或level 1, 甚至level 2;
把页表的基地址存放在TTBR0_EL1中,MMU如何知道存的是第几级页表?
例如只采用两级页表,level1和level2,把level1的基地址告诉TTBR0_EL1;
这是MMU通过,TCR_EL1,T0SZ, bits [5:0],The region size is 2(64-T0SZ) bytes.知道虚拟地址的有效位,当转化时,把VA,bit[38:30]作为偏移量加上TTBR0_EL1中存的基地址,来寻找下一级页表;
2.aarch64配置mmu的流程:
2.1.配置TCR_EL1寄存器;
2.2.create_page_table创建页表,把初始页表的基地址赋值给,TTBR0_EL1寄存器;
2.3.配置SCTLR_EL1寄存器,开启mmu;