canonical-address 地址形式
来源:互联网 发布:oracle查询优化改写 编辑:程序博客网 时间:2024/05/30 04:32
转自:点击打开链接
canonical-address 地址形式就是:64 位的 linear address(virtual address)中的从 MSB(Most Significant Bit)最高有效位到第 63 位全是 0 或 1 的这种形式。
看下面的地址:
FFFF8010_bc001000:这是符合 canonical-address 的地址,MSB 是 bit47,值为 1。 而 bit63 ~ bit48 全是 1
00007c80_b8102040:这是符合 canonical-address 的地址,MSB 是 bit47,值为 0。 而 bit63 ~ bit48 全是 0
实质上,canonical-address 地址中 bit63 ~ bit48 是符号扩展位。bit47 是 64 位地址中最高能表示的位(MSB)。
1、canonical-address 地址形式产生的前提
当前的 x64 体系中,64 位的 virtual address(linear address)仅实现了 48 位 virtual address,剩下的高 16 位仅仅是作为符号扩展,组成最终的 64 位 virtual address。
高 16 位是符号位加上 48 位真正的 virtual address 组成 64 位 virtual address,这种地址形式就是 x64 体系中的 canonical-address 地址形式。
之所以这样做,是考虑到以后实现 52、56、60 以及真正的 64 位 virtual address 时,这种地址形式(48 位+16 符号位)无需做出任何的改变就可以平滑的兼容(52、56、60 或 64 位 virtual address)。
即:48 位 + 16 符号位这个实现,既可以看成是 52 位 + 12 位符号,也可看成是 56 位 + 8 位符号位,或看成是 60 位 + 4 位符号位,或看成全 64 位 virtual address。这对于软件层面来看完全没有任何影响。
实现的不同只是 processor 才能感受到,processor 在做 virtual address 转到为 physical address 才有影响。
2、非 canonical-address 地址形式检查
processor 会对软件上的非 canonical-address 地址形式进行检查,程序中使用了非 canonical-address 会产生 #GP 异常。
象下面这种情形:
mov rax, qword ptr [0x11223344557788]
--------------------------------------------------------------
这里 [0x1122334455667788] 明显不是 canonical-address 地址,processor 检查到将会产生 #GP 异常。
又如:64 bit 下 processor 不会对 descriptor 的 limit 进行任何检查,但会以 canonical-address 地址检查为代替。若 gate descriptor 中的 offset 值是非 canonical-address 地址,processor 检测到就会产生 #GP 异常。等等诸如之类的检查。
- canonical-address 地址形式
- loopback address 回送地址
- Address Space 地址空间
- Address Book(地址薄)
- 组播地址Multicase address
- IP地址的存储形式
- Canonical Addressing
- 什么叫组播地址(Multicast Address )?
- 什么叫组播地址(Multicast Address )?
- Windows Address Windowing Extensions 地址窗口扩展
- 14. 74. 4. 地址对话框 Address Dialog
- hadoop http address绑定内网地址
- OSPF转发地址( Forwarding Address)解析
- <address>标签,为网页加入地址信息
- BGP 地址族分析 - Address-family
- 关于地址标签address的问题
- <address>标签,为网页加入地址信息
- The Abstraction: Address Spaces(地址空间)
- 通过 call gate 访问目标 code segment
- 【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的”.pvr.ccz”,”.plist”共用的终极精灵优化及注意事项!
- 使用 call/jmp 直接调用/跳转目标 code segment
- call/jmp offset 段内调用
- 目标 code segment 的访问
- canonical-address 地址形式
- 使用哪个 segment registers 进行数据的访问
- stack segment 的访问
- data segment 的访问
- long mode 下的 interrupt/trap gate
- Windows Phone7访问Sqlite数据库
- long mode 下的 TSS 和 task gate
- HDU 1339 ( A Simple Task )
- long mode 下的 call gate