aarch64-translaiton table descriptors 页表描述符-内存属性字段
作者:互联网
摘录自 原文: Linux内存管理(二):ARMv8 地址转换
https://blog.csdn.net/yhb1047818384/article/details/108210044
memory attributes
Table descriptor和table entry, block entry中都有attribute的概念
table descriptor(only for stage1):
NSTable | NS表示Non-Secure,该table描述符指向的下一级的转换表是否存储在secure memory之中。为0表示存储在Secutre PA中,否则表示存储在Non-secure PA中。当在non-secure状态下进行地址映射时,该标志别忽略 |
APTable | 下一级level lookup的access permission |
UXNTable | Unprivileged Execute Never, 下一级level lookup的是否有内存的执行权限 |
PXNTable | 下一级level lookup的是否有内存的特权执行权限(EL1) |
table/block entry:
UXN | Excute-never, 决定了descriptor指向的region是否excuteable |
PXN | privileged excute-never, 决定了descriptor指向的region在EL1是否excuteable |
Contiguous | 该表项是否为连续表项中的一项。即转换表在该表项前后是连续的,没有空洞。这样,这些连续的表项便有可能一次性加载到cache中(比如由一个TLB entry缓存) |
DBM | dirty bit modifier, dirty bit指示内存页有没有被修改 |
nG | not global, 指明当前的entry是global(nG=0,所有process都可以访问)还是non-global(nG=1,only本process允许访问)。如果是global类型,则TLB中不会tag ASID;如果是non-global类型,则TLB会tag上ASID,且MMU在TLB中查询时需要判断这个ASID和当前进程的ASID是否一致,只有一致才证明这条entry当前process有权限访问。 |
AF | access flag,当该标志为0,标明对应的内存区域(一个block或者一个page)并非真正映射到物理内存,访问会引发异常。为1表示 真正映射到了物理内存。 |
SH | shareable attribute。00 non-shareable; 01 reserved; 10 outer shareable, 11 inner shareable |
AP |
access permission, 设置数据访问的权限,可以设置为4中, 只读,读写,非EL0的只读, 非EL0的读写。
|
NS | security bit, 当从Secure状态访问内存时,该标志指示转换后的地址在Secure区域还是在Non-Secure区域 |
Indx | index into the MAIR_ELn, 指向内存区域的类型以及可缓存性。见 https://www.cnblogs.com/zhangzhiwei122/p/15975446.html |
标签:表项,aarch64,descriptors,global,内存,table,entry,ASID 来源: https://www.cnblogs.com/zhangzhiwei122/p/15975505.html