我是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之间。
由于一些较新的BIOSes已经开始分配一些相当大的内存,称为扩展的基本输入输出系统数据区,接近低内存的顶部,所以希望尽可能地保持“内存上限”--启动加载程序触及的低内存中的最高点。
当它说低内存意味着内存下降到000600,高内存上升到0A0000??
发布于 2013-04-09 19:39:23
现在第一件事是0x100000地址在上面的图表中是哪里??
0x100000不在图表上,因为只有第一兆字节是特殊的。超过这一点,物理内存是连续的,至少直到15-16MB为止。
的第二件事是,当它说内核实数模式块被重新定位到“0x10000和内存不足的末尾之间的任何地址”时,意味着它被重新定位到0x10000到000600之间的地址?
实模式代码可以位于大约1MB以下的任何地方,结束可能就在那里附近,在0x9A000或EBDA开始的任何地方。
说低内存意味着内存下降到000600,高内存上升到0A0000??
你可以在图表上看到它,从0xA0000往下到0。
https://stackoverflow.com/questions/15900456
复制相似问题