因为目前应用程序没有那么大的内存需求,所以ARM64处理器不支持完全的64位虚拟地址,实际支持情况如下:
虚拟地址的最大宽度是48位:
- 内核虚拟地址在64位地址空间的顶部,高16位是全1,范围是[0xFFFF_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF];
- 用户虚拟地址在64位地址空间的底部,高16位全是0,范围是[0x0000_0000_0000_0000, 0x0000_FFFF_FFFF_FFFF];
高16位是全1或全0的地址称为规范的地址,两者之间是不规范的地址,不允许使用。

在ARM64架构的Linux内核中,内核虚拟地址和用户虚拟地址的宽度相同。
所有进程共享内核虚拟地址空间,每个进程有独立的用户虚拟地址空间,同一个线程组的用户线程共享用户虚拟地址空间,内核线程没有用户虚拟地址空间。
ARM64架构的处理器在Linux内核中仅支持48位虚拟地址,内核虚拟地址位于高16位全1的区域,用户虚拟地址位于高16位全0的区域。所有进程共享内核地址空间,而每个进程拥有独立的用户地址空间,线程组内的用户线程共享这一空间。这种设计确保了内存管理的效率和安全性。
3898

被折叠的 条评论
为什么被折叠?



