A20地址线问题

【0】README

text description from Zhaojiong’s perfect analysis of Linux kernel


【1】A20地址线问题(干货来了)

1981年8月,IBM公司最初推出的个人计算机IBM PC 使用的CPU 是 Intel 8088。在该微机中地址线只有20根(A0~A19)。在当时内存 RAM 只有几百 KB 或不到1MB时,20 根地址线已足够用来寻址这些内存 。其所能寻址的最高地址是 0xffff:0xffff,也即0x10ffef=0xffff * 10h + 0xffff。对于超出0x100000(1M)的寻址地址将默认地环绕到 0x0ffef (取模)。当IBM公司于 1985年 引入AT机时,使用的是 Intel80286 CPU,具有24根地址线,最高可寻址16MB,并且有一个与 8088 完全兼容的实模式运行方式。然而,在寻址值超过 1MB时,它却不能像 8088那样实现地址寻址的环绕。但 当时已经有一些程序是利用这种地址环绕机制进行工作的。为了实现完全的兼容性, IBM 公司发明了使用一个开关来 开启或禁止 0x100000地址比特位。由于在当时的8042 键盘 控制器上恰好有空闲的端口引脚,于是便使用了该引脚来作为与门控制这个地址比特位。该信号被称为A20。如果它为零, 则比特20 及以上地址都被清除。从而实现兼容性。

由于在机器启动时,默认条件下,A20地址线都是禁止的,所以os 必须使用适当的方法来开启它。

  • 如何开启A20地址线?
    • 对A20信号线 进行控制的常用方法是通过设置 键盘控制器的端口值。
    • 有些os 将A20的开启和禁止作为实模式和 保护模式之间进行切换的标志过程中的一个部分。
    • 由于键盘的控制器速度很慢, 因此就不能使用键盘控制器对A20 线来进行操作。为此引进了一个A20 快速门选项(fast gate A20),它使用 IO 端口 0x92来处理 A20 信号线,避免了使用慢速的键盘控制器是操作方式。
      这里写图片描述
      (Bingo!)
原文地址:https://www.cnblogs.com/pacoson/p/4893152.html