关于X86架构的 Gate A20相关理解
由于8086在设计时没有考虑会成为一个开放的平台,后来因为虽然因为种种原因,成为了一个开放的平台。因为当时设计时的局限性,现在的之后的X86系列架构为了兼容之前的架构版本留下了 Gate A20这个历史问题。
关于X86的来源,我想就不用了多说了,8086在设计时,设置的地址总线为20根,于是显而易见,当时的8086能够访问的内存地址也就只有1M,由于段寄存器大小只有16位,也就是说只能存放地址为64k,所以8086使用“起始地址*16 + 偏移量”的方式来凑够20位,这个时候从寄存器获取到的地址实际上就是0 ~ 10FFEF,这样就有了能访问1M大小的数据地址。
后来随着技术的发展,1M的访问地址明显已经不够用了,地址总线也增加到了32根,但是X86毕竟是一个开放的架构啊,大家都在用,不能说你升级了,之前的版本就不兼容了,毕竟有了新欢也不能丢了旧爱啊。为了兼容老的版本,就出现了Gate A20,也有了实模式跟保护模式的划分。
关于Gate A20,下面这段话,我觉得描述的非常清楚:
在PC及其兼容机的第20根地址线比较特殊,计算机系统中一般安排一个“门”控制该地址线是否有效。为了访问1M以上的存储单元,应该打开A20"门"。这种设置与实模式下只使用低端1M字节存储空间有关,与处理器是否工作在实方式还是保护方式无关,即是关掉A20,也可以进入保护模式。----《80x86汇编语言程序设计》。
通过这段话,我理解在X86架构的芯片中,有一个叫做Gate A20门的结构,当它打开时编号为20(从0开始数)的这个地址线是有效的,也就是说这种情况下,这跟地址线,可高可低。
- 实模式下:
- Gate A20 打开 : 寻址100000 ~ 10FFEF会真正访问
- Gate A20 关闭 :回绕到 0 ~ FFEF
- 保护模式下:
- Gate A20 打开 : 可连续访问内存
- Gate A20关闭 : 只能访问到奇数的1M段,即 00000-FFFFF, 200000-2FFFFF,300000-3FFFFF…
也就是说,在 Gate A20关闭是,编号为20的这地址线,不管在什么模式,都是无效的,且读到的值为0,同时进不进保护模式实际上,跟Gate A20 没有必然的关系,你打开了能进,关闭了也能进。
关于X86架构的 Gate A20相关理解
于 2021-08-21 20:15:19 首次发布