Memory 为什么启用/禁用A20线路

Memory 为什么启用/禁用A20线路,memory,x86,operating-system,bios,osdev,Memory,X86,Operating System,Bios,Osdev,我有一个关于这个问题的问题。我读过一篇关于它的文章,文章说这种机制的存在是为了解决地址“环绕”的问题,这种问题出现在较新的CPU使用32位地址总线而不是较旧的20位总线时 在我看来,处理环绕的正确方法是关闭所有位A20-A31,而不仅仅是A20 为什么只关闭位A20就足以处理问题?原来的问题与此有关 可以使用段:偏移量访问内存,其中段和偏移量都是16位整数。实际地址计算为段*16+偏移量。在20位地址总线上,它自然会被截断到最低的20位 当相同的代码在大于20位的地址总线上运行时,这种截断可能会

我有一个关于这个问题的问题。我读过一篇关于它的文章,文章说这种机制的存在是为了解决地址“环绕”的问题,这种问题出现在较新的CPU使用32位地址总线而不是较旧的20位总线时

在我看来,处理环绕的正确方法是关闭所有位A20-A31,而不仅仅是A20


为什么只关闭位A20就足以处理问题?

原来的问题与此有关

可以使用
段:偏移量
访问内存,其中
偏移量
都是16位整数。实际地址计算为
段*16+偏移量
。在20位地址总线上,它自然会被截断到最低的20位

当相同的代码在大于20位的地址总线上运行时,这种截断可能会出现问题,因为程序可以访问超过第一兆字节的内存,而不是环绕。虽然这本身不是一个问题,但这可能是一个向后兼容性问题

为了解决这个问题,他们引入了一种方法来强制
A20
地址行为零,从而强制进行环绕

你的问题是:“为什么只是
A20
?那么
A21
-
A31
呢?”


请注意,使用16位
段:offset
方案可以寻址的最高位置是
0xffff*16+0xffff=0x10ffef
。这符合21位。因此,
A21
-
A31
行始终为零,只需要控制
A20

谢谢我以前读过它!!但我想还是没有反应!!这就是我想要的!!谢谢NPE