为什么要启用/禁用A20线?

9
我对A20门有疑问。我看过一篇文章,其中提到该机制是为了解决新的CPU采用32位地址总线而不是旧的20位总线时出现的“环绕”问题。
在我看来,正确的处理方法应该是关闭A20到A31位上的所有位,而不仅仅是A20位。
为什么只关闭A20位就足以解决这个问题呢?

1
http://wiki.osdev.org/A20_Line - Martijn van den Broek
1
谢谢,我之前已经看过了!但我认为还是没有回应! - smainoo
1个回答

16
原始问题与x86内存分段有关。
使用segment:offset访问内存,其中segmentoffset都是16位整数。实际地址计算为segment * 16 + offset。在20位地址总线上,这自然会被截断为最低的20位。
当相同的代码在宽于20位的地址总线上运行时,这种截断可能会导致问题,因为程序可能会访问超过第一个兆字节的内存,虽然本质上不是问题,但这可能会成为向后兼容性问题。
为了解决这个问题,他们引入了一种方法来强制A20地址线为零,从而强制环绕。
你的问题是:“为什么只有A20A21-A31呢?”
请注意,使用16位的段:偏移方案可以寻址的最高位置是0xffff * 16 + 0xffff = 0x10ffef。这适用于21位。因此,线路A21-A31始终为零,只需要控制A20

1
这就是我想要的!!谢谢NPE。 - smainoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接