leenjewel / leenjewel.github.io

leenjewel's blog
3 stars 2 forks source link

内核加载之后的内存布局 #1

Closed ColorFuzzy closed 8 years ago

ColorFuzzy commented 8 years ago

文章链接: http://leenjewel.github.io/blog/2015/05/26/%5B%28xue-xi-xv6%29%5D-jia-zai-bing-yun-xing-nei-he/

文章里写的是: 0x00000000 +------------------------------------------------------------------------—+ | 0x7c00 0x7d00 0x10000 | | 栈 | 引导程序 | | 内核 | +-------------------------------------------------------------------------+ 0xffffffff

引导程序的开始是0x7c00, 是BIOS载入/执行的位置; 但是引导程序结束的位置为何是0x7d00, BIOS载入的数据是512byte, 计算过来引导程序的结束位置应该是0x7e00. 希望自己没有理解错, 欢迎指正😊

系列文章很有帮助, 非常感谢 ~

leenjewel commented 8 years ago

你好,最近比较忙,没有抽出时间来继续研究 xv6,你提出的问题确实也是我的一个疏忽。这段内容以及引用的内存地址 0x7c00 -- 0x7d00 是出自《官方手册》附录 B 的内容。当时并没有深究就直接引用过来了。

这块儿我也没有分析,还暂时不能回答你,抱歉,等我弄明白了再告诉你。如果你弄明白了,欢迎你告诉我,很高兴认识你,很高兴你喜欢我写的东西。

leenjewel commented 8 years ago

关于这个问题,我最近特别写了封邮件发给 MIT 来询问并得到了他们的答复:

I think this may be a wording issue with "through". The bootloader is loaded at [0x7c00, 0x7dff] according to https://pdos.csail.mit.edu/6.828/2014/labs/lab1/ The xv6 bootloader may not use up all of the 512 bytes though

他们说其实这只是个措辞问题,BIOS 载入 512 byte 数据,内存地址确实是 0x7c00 ~ 0x7e00,只是 xv6 并没有用到整个 512 byte 的空间。

ColorFuzzy commented 8 years ago

明白了, 谢谢!