1981 年 8 月,IBM 公司最初推出的个人计算机 IBM PC 使用的 CPU 是 Intel 8088。在该微机中地址
线只有 20 根(A0 – A19)。在当时内存 RAM 只有几百 KB 或不到 1MB 时,20 根地址线已足够用来寻址
这些内存。其所能寻址的最高地址是 0xffff:0xffff,也即 0x10ffef。对于超出 0x100000(1MB)的寻址地址
将默认地环绕到 0x0ffef。当 IBM 公司于 1985 年引入 AT 机时,使用的是 Intel 80286 CPU,具有 24 根地
址线,最高可寻址 16MB,并且有一个与 8088 完全兼容的实模式运行方式。然而,在寻址值超过 1MB
时它却不能象 8088 那样实现地址寻址的环绕。
但是当时已经有一些程序是利用这种地址环绕机制进行工
作的。为了实现完全的兼容性,IBM 公司发明了使用一个开关来开启或禁止 0x100000 地址比特位。由
于在当时的 8042 键盘控制器上恰好有空闲的端口引脚(输出端口 P2,引脚 P21)
,于是便使用了该引脚
来作为与门控制这个地址比特位。该信号即被称为 A20。如果它为零,则比特 20 及以上地址都被清除。
从而实现了兼容性。
由于在机器启动时,默认条件下,A20 地址线是禁止的,所以操作系统必须使用适当的方法来开启
它。但是由于各种兼容机所使用的芯片集不同,要做到这一点却是非常的麻烦。因此通常要在几种控制
方法中选择。
对 A20 信号线进行控制的常用方法是通过设置键盘控制器的端口值。这里的 setup.s 程序(138-144
行)
即使用了这种典型的控制方式。
对于其它一些兼容微机还可以使用其它方式来做到对 A20 线的控制。
有些操作系统将 A20 的开启和禁止作为实模式与保护运行模式之间进行转换的标准过程中的一部
分。由于键盘的控制器速度很慢,因此就不能使用键盘控制器对 A20 线来进行操作。为此引进了一个
A20 快速门选项(Fast Gate A20),它使用 I/O 端口 0x92 来处理 A20 信号线,避免了使用慢速的键盘控制
器操作方式。
对于不含键盘控制器的系统就只能使用 0x92 端口来控制,
但是该端口也有可能被其它兼容
微机上的设备(如显示芯片)所使用,从而造成系统错误的操作。
还有一种方式是通过读 0xee 端口来开启 A20 信号线,写该端口则会禁止 A20 信号线。
分享到:
相关推荐
### Linux 0.11 内核源码分析 #### 概述 《[Linux的内核及其内核源码分析] Linux 0.11》是一本介绍Linux早期版本内核实现细节的经典著作,适合Linux内核学习的初学者。本书通过详细剖析Linux 0.11 版本的内核源码...
通过以上对《Linux 0.11内核学习手册》的详细分析,我们可以看到这本书不仅对0.11内核的每一个组成部分都进行了详尽的解释,而且还提供了大量的背景知识和技术细节,这对于希望深入了解Linux内核工作机制的学习者来...
- **A20 Line**: 在x86架构中,A20地址线的管理对于访问超过1MB的内存至关重要。文档中提到的“A20’()*+.”部分,可能涉及到A20地址线的初始化。 ##### 2. **设备驱动与硬件接口** - **Head.s**: 这部分涉及了...
书中选择了Linux 0.11内核作为讲解的基础,详细解析了从开机加电到操作系统运行的全过程。 在内容上,本书分为六个章节,全面覆盖了Linux内核的各个关键环节: 1. 第一章详细介绍了从系统加电到main函数执行之前的...
* 开地址线 A20,寻址空间达到 4GB,后对 8259 重新编程,改变中断号。 * 转到 head.s(大小是 25K+184B)执行,执行该程序完后是这样的:0x00000~0x04FFF:页目录与 4 个页表,每一项是 4KB,共 20KB;0x05000~0x...
本次实验主要关注的是Linux操作系统的启动过程,通过对《Linux内核完全注释》第六章的学习,我们能够理解计算机和Linux 0.11版本的引导流程。实验内容包括修改0.11版本的引导程序bootsect.s以及可选地修改setup.s。 ...
Linux内核0.11版本中,对硬件设备的管理涉及到复杂的交互机制。题目中提及的设备驱动与内核之间的通信,以及特定硬件设备的识别和控制,展示了操作系统内核在硬件抽象层面上的作用。 #### 9. 内存管理与页表结构 在...