我是新来的Linux内核的东西,是阅读内核加载程序的内存布局,但混淆如下图从内核加载器的x86内存布局困惑
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之间的地址?
内部kernle模式块位于0x10000到09A000之间。
“由于一些较新的BIOS已经开始分配一些相当大量的内存,所以希望保持”内存上限“(由引导加载程序触及的低内存中的最高点)尽可能低,称为扩展BIOS数据区,靠近低端内存“。
当它说低内存意味着内存下降到000600和高内存上升到0A0000?
参见[这里](http://wiki.osdev.org/Memory_Map_%28x86%29#.22Low.22_memory_.28.3 C_1_MiB.29)了解什么是低内存。此外,地址0x000000将是低端内存的开始,因此低端内存的结尾意味着更大的地址。 – Shahbaz 2013-04-09 11:41:46
谢谢Shahbaz,你的评论让我的照片更加清晰。 – 2013-04-09 12:00:15