加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux如何在x86-64中支持超过512GB的虚拟地址范围?

发布时间:2020-12-14 01:06:46 所属栏目:Linux 来源:网络整理
导读:Linux的x86-64用户虚拟地址空间为47位.这实际上意味着Linux可以映射具有大约~128 TB虚拟地址范围的进程. 然而,让我感到困惑的是x86-64架构支持每个进程的ISA定义的4级分层页表(排列为基数树).页表的根目录最多只能映射512 GB的连续虚拟地址空间.那么Linux如
Linux的x86-64用户虚拟地址空间为47位.这实际上意味着Linux可以映射具有大约~128 TB虚拟地址范围的进程.

然而,让我感到困惑的是x86-64架构支持每个进程的ISA定义的4级分层页表(排列为基数树).页表的根目录最多只能映射512 GB的连续虚拟地址空间.那么Linux如何支持512GB以上的虚拟地址范围呢?它是否为每个进程使用多个页表?如果是,那么对于一个进程,CR3(x86-64的寄存器包含页表基址的地址)应包含哪个给定进程?我错过了什么吗?

解决方法

The root of the page table can only map up to 512 GB of contiguous virtual address space. So how Linux can support more than 512GB of virtual address range? Does it uses multiple page tables for each process? If yes,then for a process what should the CR3 (x86-64’s register to contain the address of the base of the page table) contain for any given process? Am I missing something?

我不知道“页面表的根目录”是什么意思,但x86-64上的分页看起来像这样:

>页表 – 最低级别的分页结构.每个都有512个8字节条目(PTE)描述一个4 KiB页面,因此PT描述512 * 4 KiB = 2 MiB的内存(它也可以作为2 MiB页面使用,但现在让我们离开它).
>页面目录 – 表,类似于PT,包含指向PT的512个8字节条目(PDE);因此,PD描述512 * 2 MiB = 1 GiB的内存(它也可以作为1 GiB页面,类似于PT).
>页面目录页面表 – 类似于PD,但包含指向PD的512个8字节条目(PDPTE);所以,PDPTE描述了512 * 1 Gib = 512 GiB的内存.
> PML4,最高级别的分页结构,是包含512个8字节条目(PML4E)的表,指向PDPT;所以,PML4描述了512 * 512 GiB = 256 TiB的内存.

我不知道Linux的确切内存映射,但可能更高的一半(从-128 TiB到0 – 从0xFFFF800000000000到0xFFFFFFFFFFFFFFFF)保留给内核,下半部分(从0到128 TiB – 从0x0000000000000000到0x00007FFFFFFFFFFF)是用户空间应用程序因此,Linux支持512倍于您要求的512 GiB虚拟地址范围;甚至托瓦兹也不会说“我们不会支持PML4”.我不知道是什么让你感到困惑 – 是你错过了这个部分,说页面表映射2 MiB并且你已经把它当作一个页面映射 – 4 KiB – 但是如果有什么我可以澄清,请询问它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读