什么是 A20

Unix 的 boot loader 里,在最开始部分有段代码是用来打开 A20 的。什么是 A20 呢?为什么不让它默认为打开,而是每次系统启动时都要打开它呢?

原来这个是计算机的历史遗留问题。在 8088 的时候,计算机只有 20 条地址线,所以只能寻址 1 MB 的范围。PC 通常用两个 16 位寄存器寻址,一个存 selector,一个存 offset,即 selector:offset,计算得到的地址就是 selector*16+offset。这样,最大的地址就是 FFFF:FFFF,即 0x10FFEF,但是这就超过了 20 条地址线的寻址范围 1 M,所以 8088 自动把高出 1 MB 的那部分置 0,例如 0x10FFEF wrap 成 0x00FFEF,相当于是对 1 M 求模。

到了 80286 时代,PC 已经有了 24 条地址线,但是为了向下兼容性,80286 的设计目标是在实模式下保持与 8088 一样的行为。但是最终 286 出现了一个 bug,在实模式下对 0x100000 到 0x10FFEF 寻址时,实际上并没有对 1M 求余,而是真的访问了 0x100000 到 0x10FFEF 之间的内存。为了解决这个问题,IBM 发明了一个开关,用来打开或关闭 0x100000 地址位。在实模式时,关闭 0x100000 位,即使第 21 根地址线无效,进入保护模式前,再打开 0x100000 位。具体是利用键盘控制器闲置线来控制一个与门来控制,这个信号就叫做 A20。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值