gpt4 book ai didi

linux-kernel - linux 虚拟内存用户/内核空间在 x86_64 中拆分

转载 作者:行者123 更新时间:2023-12-04 05:21:00 24 4
gpt4 key购买 nike

/proc/cpuinfo我们可以看出目前Linux只使用48位的虚拟地址大小。根据/Documentation/x86/x86_64/mm.txt ,内核虚拟地址从 ffff800000000000 - ffff80ffffffffff(=40 位)保护孔开始。怎么理解呢?我看到有一行读取 hole caused by [48:63] sign extension。这是否意味着内核在遇到虚拟地址时只会解释低48位而忽略高16位?

最佳答案

符号扩展是因为 x86-64 只使用低 48 位来寻址内存。为了防止程序员滥用高 16 位,第 47 位被符号扩展。因此,如果 bit 47 为 0,则所有 bits [48:63] 也将为 0,如果 bit 47 为 1,则所有 bits [48:63] 将为 1。具有此地址的地址形式被称为“规范”。如果您尝试使用非规范地址(即位 [48:63] != 位 47),则硬件将引发一般保护错误。

在实际应用中,内核内存是高17位为1的高地址,用户空间内存是低位内存,高17位为0。

关于linux-kernel - linux 虚拟内存用户/内核空间在 x86_64 中拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com