ARM64架構處理器採用48位物理定址機制,最大可以尋找到256TB的物理地址空間。對於目前的應用來說已經足夠了,不需要擴展到64位的物理地址定址。虛擬地址也同樣最大支持48位支持,所以在處理器的架構設計上,把虛擬地址空間劃分為兩個空間,每個空間最大支持256TB。Linux內核在大多數體繫結構中都 ...
ARM64架構處理器採用48位物理定址機制,最大可以尋找到256TB的物理地址空間。對於目前的應用來說已經足夠了,不需要擴展到64位的物理地址定址。虛擬地址也同樣最大支持48位支持,所以在處理器的架構設計上,把虛擬地址空間劃分為兩個空間,每個空間最大支持256TB。Linux內核在大多數體繫結構中都把兩個地址空間劃分為用戶空間和內核空間。
-
用戶空間:0x0000_0000_0000_0000到0x0000_ffff_ffff_ffff
-
內核空間:0xffff_0000_0000_0000到0xffff_ffff_ffff_ffff
64位的Linux內核已經沒有高端記憶體的概念了,因為48位的定址空間已經足夠大了
在QEMU實驗平臺上,ARM64架構的LInux內核的記憶體分佈圖如下:
如圖所示,ARM64架構處理器的Linux內核記憶體佈局圖。ARM64架構處理器的Linux內核記憶體佈局如下:
(1)用戶空間:0x0000_0000_0000_0000到0x0000_ffff_ffff_ffff,一共有256TB。
(2)非規範區域
(3)內核空間:0xffff_0000_0000_0000到0xffff_ffff_ffff_ffff。一共有256TB。
內核空間又做瞭如下細分:
- vmalloc區域:0xffff_0000_0000_0000到0xffff_7bff_bfff_0000,大小為126974GB。
- vmemmap區域:0xffff_7bff_c000_0000到0xffff_7fff_c000_0000,大小為4096GB。
- PCI I/O區域:0xffff_7fff_ae00_0000到0xffff_7fff_be00_0000,大小為16MB。
- Modules區域:0xffff_7fff_c000_0000到0xffff_8000_0000_0000,大小為64MB。
- normal memory線性映射區:0xffff_8000_0000_0000到0xffff_ffff_ffff_ffff,大小為128TB。