Linux kernel x86_64中的linux虚拟内存用户/内核空间分割

Linux kernel x86_64中的linux虚拟内存用户/内核空间分割,linux-kernel,kernel,x86-64,virtual-memory,Linux Kernel,Kernel,X86 64,Virtual Memory,从/proc/cpuinfo中我们可以看到,当前Linux只使用48位虚拟地址大小。根据,内核虚拟地址从FFFF8000000000-ffff80ffffffffff(=40位)保护孔开始。如何理解这一点?我看到[48:63]符号扩展造成了一个行读取孔。这是否意味着内核在遇到虚拟地址时只解释低48位而忽略高16位 符号扩展是因为x86-64只使用低位48位来寻址内存。为了防止程序员滥用16个高阶位,第47位被符号扩展。因此,如果位47为0,则所有位[48:63]也将为0,如果位47为1,则所有位

/proc/cpuinfo
中我们可以看到,当前Linux只使用48位虚拟地址大小。根据,内核虚拟地址从FFFF8000000000-ffff80ffffffffff(=40位)保护孔开始。如何理解这一点?我看到[48:63]符号扩展造成了一个行读取
。这是否意味着内核在遇到虚拟地址时只解释低48位而忽略高16位

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


实际上,内核内存是那些高地址,其中17个高阶位为1,用户空间内存是低内存,其中高阶位为0。

如果有人对这个问题不满意,请告诉我。但我真的想知道你为什么否决这个问题。