0

我是 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 时?

4

1 回答 1

1

现在第一件事是0x100000地址在上图中??

0x100000 不在图表上,因为只有第一个兆字节是特殊的。超过该点,物理内存至少在 15-16MB 点之前是连续的。

第二件事是当它说内核实模式块被重定位到“0x10000和低内存结束之间的任何地址”时意味着它可以重定位到0x10000到000600之间的地址?

实模式代码可以存在于大约 1 MB 以下的任何地方,并且结尾可能就在附近,在 0x9A000 或 EBDA 开始的任何地方。

当它说低内存意味着内存下降到 000600 和高内存上升到 0A0000 时?

你有它在图表上,从 0xA0000 向下,到 0。

于 2013-04-09T11:39:22.980 回答