在“低级编程:英特尔®64架构上的C,汇编和程序执行”一书中,我读到:每个虚拟64位地址(例如,我们在程序中使用的地址)由几个字段组成。地址本身实际上只有48位宽; 它被符号扩展为64位规范地址。它的特点是它的17个左位是相等的。如果不满足条件,则在使用时立即拒绝该地址。然后借助特殊表将48位虚拟地址转换为52位物理地址。为什么虚拟地址和物理地址之间的差异为4位?
4 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
您说:“只使用9位运行来索引每个级别的表”,然后再描述虚拟地址组件。但作者表示,对于每个表索引都使用12位(加起来为48位)而不是9位。我只是说如果有什么好的东西来自这个观察。其他位是一个符号位,其他17位(加上64位)必须等于不丢弃的地址,如我的书中引用的那样。作者将架构描述为“Intel 64架构:也称为x86_64和AMD64”
拉丁的传说
TA贡献1789条经验 获得超8个赞
即使是2MB的页面并不可怕; 汉斯甚至建议4M可能没问题。(这是x86-32巨大的页面大小。)而BTW,只有像数据库这样的高性能软件才会将非易失性存储DIMM映射到自己的虚拟地址空间,相当于直接IO。其他一切都将通过文件系统。或者如果它足够快(或DRAM有限/不存在),OS可以mmap(PROT_READ|PROT_EXEC)
通过将非易失性存储直接映射到1G / 2M / 4k页来满足请求。将映射限制为2M的2M对齐倍数将是一个全面的胜利。
- 4 回答
- 0 关注
- 1541 浏览
添加回答
举报
0/150
提交
取消