嵌入式技术
思考:
- 页表最大支持几级页表查询?
- 虚拟地址的有效位一般是多少?最大是多少?
- 虚拟地址的高16bit的用途?
- 查询到的页面的大小,可以是多大?
Memory Management Unit (MMU) 的主要功能就是 能够让系统在执行多任务时,作为一个独立的程序运行它自己的虚拟地址空间中,它们无需知道真正的物理地址是什么 。开启MMU的硬件框图如下所示:
Virtual and physical memory的映射图如下所示:
TLB中不仅仅包含物理地址和虚拟地址,它还包含一些属性,例如:memory type、cache policies、access permissions、ASID、VMID
注:ASID - Address Space ID, VMID - Virtual Machine ID
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,例如:
如果支持了contiguous bit,那么:TLB查询后的PA = TLB entry中的PA + index。
如果开启了contiguous bit,而要转换的table entries却不是连续的,或者entries的output在地址范围之外或没有对齐,那么将会产生TLB abort。
如果os修改了页表(entries),那么os需要告诉TLB,invalid这些TLB entries,这是需要软件来做的. 指令如下:
TLBI < type >< level >{IS} {, < Xt >}
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
MMU除了完成地址的翻译,还控制访问权限、memory ordering、cache policies。
如图所示,列出了三种类型的entry信息:
bits[1:0]表示该输出是block address,还是next level table address,还是invalid entry
有三种granule sizes的页表:4kb、16kb、64kb
MMU使用translation tables 和 translation registers控制着cache policy、memory attributes、access permissions、va到pa的转换
全部0条评论
快来发表一下你的评论吧 !