请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 148|回复: 0

x64架构为何要引入扩高地址(Canonical address)?

[复制链接]

70

主题

34

回帖

1126

积分

管理员

积分
1126
发表于 2024-1-23 11:04:40 | 显示全部楼层 |阅读模式
      要理解的第一个概念是扩高地址。在设计 x86 的 64 位扩展时,AMD 没有将实际的虚拟地址空间扩展到完整的 64 位,而只是扩展到 48 位。(这样做主要是为了平衡扩展地址空间的好处与页表额外级别的成本:64位的虚拟地址空间将需要一个6级的分页表;48位为您提供256 TB的虚拟地址空间,远远超过最大的机器在未来许多年内所拥有的空间, 并且只需要 4 个级别的分页表。

      他们本可以让处理器忽略额外的16位地址空间,但聪明的程序员倾向于利用这些”飞地“来做一些事情,比如将额外的信息存储在虚拟地址的"未使用"部分。但是,如果处理器决定将地址空间扩展到更多位,这些聪明的技巧就会失算并产生问题。为了防止这种情况,他们对微处理器施加了限制:任何用作虚拟地址的64位值(例如,写入指令指针寄存器)必须采用扩高形式:也就是说,位48-63必须与位47相同。因此,有效的地址空间存在于两个不连续的 128 TB 块中。每当将 64 位值用作不适合这两个范围之一的虚拟地址时,处理器将引发一般保护异常GP。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2024-2-21 14:31 , Processed in 0.212624 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表