为什么在64位虚拟地址与物理地址(52位长)相比,4位短(48位长)?

在“低级编程:英特尔®64架构上的C,汇编和程序执行”一书中,我读到:

每个虚拟64位地址(例如,我们在程序中使用的地址)由几个字段组成。地址本身实际上只有48位宽; 它被符号扩展为64位规范地址。它的特点是它的17个左位是相等的。如果不满足条件,则在使用时立即拒绝该地址。然后借助特殊表将48位虚拟地址转换为52位物理地址。

为什么虚拟地址和物理地址之间的差异为4位?


MM们
浏览 1484回答 4
4回答

weixin_慕少0359847

因为虚拟地址地址空间是某个进程的地址空间。虚拟地址和物理地址偏移量字段一样。但虚拟地址的页号长度小于物理地址,因为表示范围不同嘛。

MMTTMM

您说:“只使用9位运行来索引每个级别的表”,然后再描述虚拟地址组件。但作者表示,对于每个表索引都使用12位(加起来为48位)而不是9位。我只是说如果有什么好的东西来自这个观察。其他位是一个符号位,其他17位(加上64位)必须等于不丢弃的地址,如我的书中引用的那样。作者将架构描述为“Intel 64架构:也称为x86_64和AMD64” 

拉丁的传说

即使是2MB的页面并不可怕; 汉斯甚至建议4M可能没问题。(这是x86-32巨大的页面大小。)而BTW,只有像数据库这样的高性能软件才会将非易失性存储DIMM映射到自己的虚拟地址空间,相当于直接IO。其他一切都将通过文件系统。或者如果它足够快(或DRAM有限/不存在),OS可以mmap(PROT_READ|PROT_EXEC)通过将非易失性存储直接映射到1G / 2M / 4k页来满足请求。将映射限制为2M的2M对齐倍数将是一个全面的胜利。
打开App,查看更多内容
随时随地看视频慕课网APP