免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jjj137

bootsect启动时,为何要把自己搬到0x9000呢? [复制链接]

论坛徽章:
0
发表于 2009-01-31 22:50 |显示全部楼层
原帖由 jjj137 于 2009-1-31 22:39 发表
……看来咱们说的是两回事……我问的不是MBR……


你把你看到的东西贴出来再说
我是浪费口水,我 stop

论坛徽章:
0
发表于 2009-01-31 23:02 |显示全部楼层
原帖由 mik 于 2009-1-31 22:50 发表


你把你看到的东西贴出来再说
我是浪费口水,我 stop

晕啊,我还以为我的标题已经写得很清楚了呢……
不过还是感谢版主大大的热心解答,以后遇到问题再来问~

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
发表于 2009-01-31 23:44 |显示全部楼层

不是为了给参数留空间,你的理解是错误的

因为Bootsec加载了内核,内核很大,会Overwrite 0x7c00。
这样你就死机了。
此外,对于OS来说,保护模式才容易出错。因为系统更Complex了。对于那时的程序员来说,实模式才是得心应手,他们是从8086走过来的噢。

论坛徽章:
0
发表于 2009-02-01 09:08 |显示全部楼层
原帖由 folklore 于 2009-1-31 23:44 发表
因为Bootsec加载了内核,内核很大,会Overwrite 0x7c00。
这样你就死机了。
此外,对于OS来说,保护模式才容易出错。因为系统更Complex了。对于那时的程序员来说,实模式才是得心应手,他们是从8086走过来的噢。

晕啊,我是说加载自己(bootsect),而不是说加载setup.S和head.S,bootsect自己只有512字节,怎么会超了呢?
实模式没有错误判断,出错了系统就启动不了了,不断死循环……

论坛徽章:
0
发表于 2009-02-01 17:19 |显示全部楼层

回复 #9 jjj137 的帖子

版主所说的是现代操作系统的加载方式
早期系统内核小,加载比较简单,所以直接写入bootsect了

现代操作系统比较复杂,加载程序可以分成多个部分,最初加载的代码可以只是负责加载功能更加完善的加载程序,后者负责操作系统的进一步加载。例如多系统并存,不能在512字节的引导程序里提供复杂的系统选择,可以让引导程序加载更复杂的程序来选择启动操作系统
《LINUX内核源代码情景分析》(下)的系统启动一章开始对这种情况有所描述,可以看看

加载程序根据需要可以分成许多部分,根据需要来一步一步完成加载过程
没有研究过grub,不过感觉grub就是分成多步来加载系统的

论坛徽章:
0
发表于 2009-02-01 18:54 |显示全部楼层
原帖由 pFreeStyle 于 2009-2-1 17:19 发表
版主所说的是现代操作系统的加载方式
早期系统内核小,加载比较简单,所以直接写入bootsect了

现代操作系统比较复杂,加载程序可以分成多个部分,最初加载的代码可以只是负责加载功能更加完善的加载程序,后 ...

我说的setup.S和head.S就是你所说的进一步加载,bootsect加载setup,setup加载head……

论坛徽章:
0
发表于 2009-02-01 19:10 |显示全部楼层

回复 #16 jjj137 的帖子

可以这样理解
不过只能加载一个系统

若要是多个系统则需要一个特殊的引导程序了,例如grub,可以选择要启动的系统,
比如选择linux后直接从它的setup和head执行,就不需要bootsect了

论坛徽章:
0
发表于 2009-02-01 19:14 |显示全部楼层

回复 #17 pFreeStyle 的帖子

呃,这个我知道……
那个是MBR和Bootloader……

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
发表于 2009-02-01 21:13 |显示全部楼层

不懂别装懂,看懂这段ASM再说吧

原帖由 jjj137 于 2009-2-1 09:08 发表

晕啊,我是说加载自己(bootsect),而不是说加载setup.S和head.S,bootsect自己只有512字节,怎么会超了呢?
实模式没有错误判断,出错了系统就启动不了了,不断死循环……


完毕,以后也不会多嘴了

论坛徽章:
0
发表于 2009-02-01 22:19 |显示全部楼层
原帖由 folklore 于 2009-2-1 21:13 发表


完毕,以后也不会多嘴了

到底有没有看我说话啊……setup加载到0x9020当然是因为空间不够,可是我问的是正好512字节的bootsect……
我自问没说什么过分的话,怎么就成了不懂装懂了呢……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP