Closed ColorFuzzy closed 8 years ago
你好,最近比较忙,没有抽出时间来继续研究 xv6,你提出的问题确实也是我的一个疏忽。这段内容以及引用的内存地址 0x7c00 -- 0x7d00 是出自《官方手册》附录 B 的内容。当时并没有深究就直接引用过来了。
这块儿我也没有分析,还暂时不能回答你,抱歉,等我弄明白了再告诉你。如果你弄明白了,欢迎你告诉我,很高兴认识你,很高兴你喜欢我写的东西。
关于这个问题,我最近特别写了封邮件发给 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 的空间。
明白了, 谢谢!
文章链接: 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
. 希望自己没有理解错, 欢迎指正😊系列文章很有帮助, 非常感谢 ~