飞腾CPU体系结构(十四)
飞腾CPU体系结构(十四)
1. MMU原理
MMU的大致工作原理是:
64位虚拟地址首先分成虚拟页帧号和页内偏移量两部分,虚拟页帧号即页表项索引;根据页表项索引,在进程的页表里查找到对应页表项,然后将页表项的物理页帧号和页内偏移量组合成物理地址,最后根据映射属性进行访存操作。
2. TLB
因为页表是软件预先设定在系统主存中的,如果每次地址翻译都要去访存才能获取页表项,这一定会严重降低系统性能。因此,MMU提供了页表项的高速缓存TLB。
- 可以简单地将TLB理解为页表项在高速缓存中的副本。
- 当TLB失效时,MMU到内存页表中获取相应的页表项内容,并将其装载到TLB中;
- 如果内存页表中的页表项是无效的(一般情况是无有效的物理页帧号),飞腾CPU就会触发页故障异常。
- 页故障异常处理软件就会分配物理页帧,并将内存页表中的页表项完善,处理完成页故障异常后会重新执行寻址指令。
3. 飞腾的TLB实现
飞腾CPU不提供对TLB写的操作指令,只提供TLB失效指令。
- TLB的写更新完全是硬件设计来实现,当MMU访问TLB没有命中时,MMU就会在内存中的进程页表中查找相应的页表项,并将页表项内容更新到TLB中。
- 飞腾CPU提供一条TLB失效指令TLBI,并提供多种操作选项,可以实现所有TLB失效,以及某个地址范围的TLB失效等操作。
4. 映射属性
MMU将虚拟地址翻译成物理地址后,会根据映射属性进行访存操作。映射属性包括访问控制和内存类型等属性。内存类型属性可以参考第五节高速缓存中的内存属性内容;因此,我们这里仅仅介绍EL0和EL1权限级相关的访问控制属性。
- 访问控制属性主要描述了相应的虚拟页帧是否允许读、写和执行等操作。
- “是否允许读/写”主要体现为针对Load/Store指令的数据访问控制上。
AP[2:1] | EL1权限级 | EL0权限级 |
---|---|---|
00 | 读写 | 不可访问 |
01 | 读写 | 读写 |
10 | 只读 | 不可访问 |
11 | 只读 | 只读 |
- “是否允许执行”主要体现为对指令的获取控制上。
UXN | PXN | EL1权限级 | EL0权限级 |
---|---|---|---|
0 | 0 | 可取指 | 可取指 |
0 | 1 | 可取指 | 不可取指 |
1 | 0 | 不可取指 | 可取指 |
1 | 1 | 不可取指 | 不可取指 |
- 飞腾CPU采用多级页表结构,
- 上一级页表的页表项包括了下一级页表的物理地址和映射属性。
- 上级页表项的映射属性会对下级页表项的映射属性进行约束。
APTable[2:1] | 对下一级页表访问控制属性的约束 |
---|---|
00 | 不限制 |
01 | EL0权限级不可访问 |
10 | 所有权限级不可写 |
11 | 所有权限级不可写,且EL0权限级不可读 |