我是新來的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