當然虛擬地址空間劃分不只是如此。因為目前應用程序沒有那么大的內存需求,所以ARM64處理器不支持完全的64位虛擬地址,實際支持情況如下。
(1)-虛擬地址位寬
虛擬地址的最大寬度是48位 內核虛擬地址在64位地址空間的頂部,高16位是全1,范圍是[0xFFFF 0000 0000 0000,0xFFFF FFFF FFFF FFFF];
用戶虛擬地址在64位地址空間的底部,高16位是全0,范圍是[0x00000000 0000 0000,0x0000 FFFF FFFF FFFF];
高16位是全1或全0的地址稱為規范的地址,兩者之間是不規范的地址,不允許使用。
如果處理器實現了ARMv8.2標準的大虛擬地址(Large Virtual Address,LVA)支持,并且頁長度是64KB,那么虛擬地址的最大寬度是52位。這個也就是大頁表,可以提升內存與訪問速度。
可以為虛擬地址配置比最大寬度小的寬度,并且可以為內核虛擬地址和用戶虛擬地址配置不同的寬度。
轉換控制寄存器(Translation Control Register)TCR_EL1的字段T0SZ定義了必須是全0的最高位的數量,字段T1SZ定義了必須是全1的最高位的數量,用戶虛擬地址的寬度是(64-TCR_EL1.T0SZ),內核虛擬地址的寬度是(64-TCR_EL1.T1SZ)。(全是0是代表的用戶,全是1代表的是內核。)
(2)編譯ARM64架構的Linux內核時,可以選擇虛擬地址寬度
? (1)如果選擇頁長度4KB,默認的虛擬地址寬度是39位。
? (2)如果選擇頁長度16KB,默認的虛擬地址寬度是47位。
? (3)如果選擇頁長度64KB,默認的虛擬地址寬度是42位。
? (4)可以選擇48位虛擬地址。
在ARM64架構的Linux內核中,內核虛擬地址和用戶虛擬地址的寬度相同。
? 所有進程共享內核虛擬地址空間,
? 每個進程有獨立的用戶虛擬地址空間,
? 同一個線程組的用戶線程共享用戶虛擬地址空間,內核線程沒有用戶虛擬地址空間。
-
處理器
+關注
關注
68文章
19407瀏覽量
231172 -
ARM
+關注
關注
134文章
9165瀏覽量
369168 -
內存
+關注
關注
8文章
3055瀏覽量
74326 -
MMU
+關注
關注
0文章
91瀏覽量
18364
發布評論請先 登錄
相關推薦
評論