为什么在保护模式下启用A20线路?

时间:2015-11-20 13:06:18

标签: linux assembly linux-kernel x86 operating-system

在Linux 0.01的引导加载程序的汇编源文件中,启用了A20行。

来自boot/boot.s

| that was painless, now we enable A20

call     empty_8042
mov al,#0xD1

...

然后引导加载程序跳转到保护模式。

在实模式下,启用A20线路可以为我们提供64 KiB - 16字节的地址空间扩展。
在保护模式下,地址总线会自动解锁。

当跳转到保护模式时,为什么引导加载程序会启用A20地址线呢?

1 个答案:

答案 0 :(得分:10)

  

在实模式下,启用A20线路可以为我们提供64 KiB - 16字节的地址空间扩展。

正确,在实模式下(在286 +上),您可以将段寄存器设置为0xFFFF,这样您就可以访问最多(0xFFFF << 4) + 64K的内存。

  

在保护模式下,地址总线会自动解锁。

保护模式是CPU模式,因此它不会解锁&#34;总线,它只允许使用额外的地址空间,这需要地址总线上更多的引脚。

  

当跳转到保护模式时,为什么引导加载程序会启用A20地址线呢?

因为它不会。 &#34; A20&#34;通常是指在PC-AT中添加的硬件黑客,需要在保护模式按预期运行之前被禁用。

首先,回想一下旧的旧CPU(通过80186)最多只能访问1 MiB的内存,因此有20条地址线(A0-A19)。一些非常古老的软件利用了1 MiB以上的内存访问将包裹到较低内存的事实。

当286添加更多地址线时,IBM并不想破坏与这个旧软件的兼容性,因此他们做了不可想象的事情:他们在第21个地址线上放置了外部门(A20),默认情况下将其关闭,重新启用环绕行为,因此旧软件仍能正常运行。所以286本身对这个黑客一无所知 - 它在CPU外部。对于CPU,A20与任何其他地址线没什么区别。

此门(A20门)由键盘控制器IC上的GPIO引脚控制。因此,您需要在进入保护模式之前启用它。如果你没有,(并且说你平面映射了所有4GB的物理内存),那么作为Micheal Petch indicated,&#34;每个奇数编号的兆字节区域都将无法访问。因此1mb-2mb实际上将参考0-1mb,3mb-4mb将参考2mb-3mb等。&#34; 另见:

相关问题