linux – 为什么在保护模式下启用A20线路?

linux – 为什么在保护模式下启用A20线路?,第1张

概述在 Linux 0.01的引导加载程序的汇编源文件中,启用了A20行. 从boot / boot.s: | that was painless, now we enable A20call empty_8042mov al,#0xD1... 之后,引导加载程序跳转到保护模式. 在实模式下,启用A20线路可以为我们提供64 KiB – 16字节的地址空间扩展. 在保护模式下,地址总 在 Linux 0.01的引导加载程序的汇编源文件中,启用了A20行.

从boot / boot.s:

| that was painless,Now we enable A20call     empty_8042mov al,#0xD1...

之后,引导加载程序跳转到保护模式.

在实模式下,启用A20线路可以为我们提供64 KiB – 16字节的地址空间扩展.

在保护模式下,地址总线自动解锁.

当跳转到保护模式时,为什么引导加载程序会启用A20地址线呢?

解决方法

In Real Mode,enabling the A20 line grants us an address space expansion of 64 KiB – 16 bytes.

正确,在实模式下(在286上),您可以将段寄存器设置为0xFFFF,这将允许您访问高达(0xFFFF << 4)64K的存储器.

In Protected Mode,the address bus is unlocked automatically.

保护模式是cpu模式,因此它不会“解锁”总线,它只允许使用额外的地址空间,这需要地址总线上有更多的引脚.

Why does the bootloader enable the A20 address line when the jump to Protected Mode would do that anyway?

因为它不会. “A20”通常是指在PC-AT中添加的硬件黑客,需要在保护模式按预期运行之前禁用.

首先,回想一下旧的旧cpu(通过80186)最多只能访问1 MiB的内存,因此有20条地址线(A0-A19).一些非常古老的软件利用了1 MiB以上的内存访问将包装到较低内存的事实.

当286增加了更多地址线时,IBM不想破坏与这个旧软件的兼容性,所以他们做了不可想象的事情:他们在21号地址线(A20)上放置了一个外部门,并在默认情况下将其关闭 – 启用环绕行为,因此旧软件仍可正常运行.所以286本身对这个黑客一无所知 – 它在cpu外部.对于cpu,A20与任何其他地址线没有什么不同.

该门(A20门)由键盘控制器IC上的GPIO引脚控制.因此,您需要在进入保护模式之前启用它.如果你没有,(并说你平面映射了所有4GB的物理内存),那么作为Micheal Petch indicated,“每个奇数兆字节区域都将无法访问.所以1mb-2mb实际上将引用0-1mb,3mb-4mb将参考2mb-3mb等“
也可以看看:

> A20 Line(维基百科)

总结

以上是内存溢出为你收集整理的linux – 为什么在保护模式下启用A20线路?全部内容,希望文章能够帮你解决linux – 为什么在保护模式下启用A20线路?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/1047610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存