1. 程式人生 > 其它 >aarch64-translaiton table descriptors 頁表描述符-記憶體屬性欄位

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