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 信号线。

Intel CPU 32 位保护运行模式

Intel CPU 一般可以在两种模式下运行,即实地址模式和保护模式。早期的Intel CPU(8088/8086)只能工作在实模式下,某一时刻只能运行单个任务。对于Intel 80386 以上的芯片则还可以运行在32 位保护模式下。在保护模式下运行可以支持多任务;支持4G 的物理内存;支持虚拟内存;支持内存的页式管理和段式管理;支持特权级。虽然对保护模式下的运行机制是理解Linux 内核的重要基础,但由于篇幅所限,对其的简单介绍可以参考书后的附录。但仍然建议初学者能够使用书后列出相关书籍,首先作一番仔细研究。为真正理解setup.s 程序和下面head.s 程序的作用,起码要先明白段选择符、段描述符和80x86 的页表寻址机制。段选择符逻辑地址,线性地址,物理地址段选择符的格式

最新文章

  1. 易用BPM时代,企业如何轻松驾驭H3?
  2. WebRTC手记之初探
  3. 第3.3 案例2: 工作队列 job queue
  4. 完全偶图K(3,3)与完全图K5是否存在平面表示
  5. Linux 系统目录结构
  6. 006-python基础-条件判断与循环
  7. 序列化form表单内容为json对象
  8. mybatis03
  9. Android-版本与api对应关系图
  10. Java Trie树
  11. Java:静态内部类的使用目的、使用限制、与非静态内部类的对比
  12. 项目中常用的19条MySQL优化
  13. table td中的内容过长,显示为固定长度,多余部分用省略号显示
  14. Java反射操作成员变量 Class can not access a member with modifiers "*"
  15. idea spring boot docker 多项目 maven 编译
  16. AspectJ开发
  17. 什么是Java序列化?如何实现序列化?
  18. 使用VSCode调试单个PHP文件
  19. 使用vue如何默认选中单选框
  20. PAT 1053 住房空置率

热门文章

  1. Spring Boot 实现定时任务的 4 种方式
  2. shell脚本练习02--求字符串的长度
  3. 警告(alert 消息对话框) 如果你不点击“确定”,就不能对网页做任何操作,这个小窗口就是使用alert实现的
  4. 打开串口(COM)号大于9时报错
  5. 廖雪峰Java14Java操作XML和JSON-2JSON-1Json介绍
  6. 阿里巴巴大数据产品最新特性介绍--机器学习PAI
  7. zabbix被监控端代理设置
  8. React报错:Laravel React-Router browserHistory 刷新子页面报错404
  9. PHP接收数据数据包的几个方式
  10. Git婴幼儿使用手册【十分钟让你帅气的使用命令行和团队工作】