我是 Linux 内核的新手,正在阅读内核加载程序的内存布局,但对下面给出的图表感到困惑
0A0000 +------------------------+
| Reserved for BIOS | Do not use. Reserved for BIOS EBDA.
09A000 +------------------------+
| Command line |
| Stack/heap | For use by the kernel real-mode code.
098000 +------------------------+
| Kernel setup | The kernel real-mode code.
090200 +------------------------+
| Kernel boot sector | The kernel legacy boot sector.
090000 +------------------------+
| Protected-mode kernel | The bulk of the kernel image.
010000 +------------------------+
| Boot loader | <- Boot sector entry point 0000:7C00
001000 +------------------------+
| Reserved for MBR/BIOS |
000800 +------------------------+
| Typically used by MBR |
000600 +------------------------+
| BIOS use only |
现在解释这个图的声明对我来说有点混乱。
使用 bzImage 时,保护模式内核被重定位到 0x100000(“高端内存”),内核实模式块(引导扇区、设置和堆栈/堆)被重定位到 0x10000 和低端末尾之间的任何地址记忆。
现在第一件事是0x100000地址在上图中??
第二件事是当它说内核实模式块被重定位到“0x10000和低内存结束之间的任何地址”时意味着它可以重定位到0x10000到000600之间的地址?
最初,内核模式块放置在 0x10000 到 09A000 之间。
“希望保持“内存上限”——引导加载程序触及的低内存中的最高点——尽可能低,因为一些较新的 BIOS 已经开始分配一些相当大量的内存,称为扩展 BIOS数据区,靠近低内存的顶部”。
当它说低内存意味着内存下降到 000600 和高内存上升到 0A0000 时?