boot sequence overview

原文在这里:
http://www.os-forum.com/minix/boot/bootsequence.php

当pc启动的时候,pc将会搜索磁盘(其实也就是你bois设置的启动顺序)上的一个magic number(0xAA55),这个number是在磁盘第一个扇区的起始510字节位移处。

当magic number被发现,磁盘的第一个扇区将会被装载进地址为LOAD0FF(0x7C00)的内存然后执行它,这一切都是pc的ROM bios所实现的,不依赖于具体的操作系统。如果操作系统是minix,则被装载执行的代码要么是master bootblock code(masterboot.s)要么是bootstrap code(bootblock.s).其他的操作系统提供了他们自己的等效于 masterboot或者bootblock的代码。下面我们描述的就是minix boot system.

如果在第一个扇区的代码是master bootblock,这个代码将会复制他自己到 BUFFER(0x0600)然后跳转到BUFFER处。用户能够通过按alt键选择哪一个分区用来引导(可以看masterboot.s).如果用户没有按住alt键,这段代码要么load fix变量指定的分区,要么搜索分区表来查找激活的分区。如果没有

激活的分区,下一个磁盘的第一块引导区将会被load。

如果代码是bootstrap code(bootblock.s)。the bootstrap也会被装载进LOAD0FF(0x7C00),可是他并不会复制自己.the bootstrap将会自动加载boot镜像。the bootstrap装载boot monitor代码到BOOTSEG(0x1000 )然后跳转到BOOTSEG:BOOTOFF(0x0030)--也就是跳过了镜像的头部。

boot monitor 文件包含4个文件(boothead.s, boot.c, bootimage.c, and rawfs.c).boot monitor 的主函数就是用来装载minix操作系统,或者其他的操作系统.(更详细的boot monitor 的描述可以看这里http://www.os-forum.com/minix/boot/monitor.8.html)

正如在boothead.s的注释中所描述的,boothead.s包含了启动和低级别的支持(主要是执行BIOS的系统调用).一旦当bootstrap跳到boot monitor ,boothead.s中的代码将会立即执行,它决定了内存布局,处理器,当前的视频模式,被引导的设备,然后最终将会调用boot()(在boot.c中).此外,boothead.s还有一个退出boot monitor 的函数,这个函数定义设备参数,读写数据到磁盘,从/到键盘或者屏幕读/写字符.退出boot monitor 并跳转到minx os内核的函数(如果合适将会跳到保护模式)在boothead.s中。

boot.c包含了在 monitor 中高级的函数。其中最高等级的函数是boot().这个函数调用initialize(). initialize()移动boot monitor ,并且从
传递给内核的内存映射中删除boot monitor 。然后他将会调用下面的函数:

get_parameters()设置了几个环境变量和函数从bootparams扇区(激活分区的第二个扇区)得到几个参数.环境变量比如"processor", "bus", and "video" 都会被设置.

r_super()(在rawfs.c)检测系统是否是minix文件系统,并且决定文件系统的参数.

当着两个函数返回后,boot monitor将会执行用户键入的命令,比如boot(直接引导系统).

boot.image.c主函数是bootminix().她被boot monitor的boot(也就是上面所说的)命令所调用.这个函数将会调用下面的几个函数:

select_image()查找磁盘上正确的os镜像。

exec_image()装载os镜像到内存。

minix()(boothead.s)转换到保护模式,并且跳转到内核。

bootminix()当os从boot monitor返回时也会返回(比如用户关机(shutdown))

rawfs.c顾名思义,执行一个文件系统的操作的子集。例如能从磁盘读的块,能够从一个文件得到的信息,能够读取的目录的内容,能转换为inode number的一个路径。但是很多一般的文件系统的操作不能用在boot monistor的文件系统,比如创建文件.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值