快捷搜索:   nginx

关于LiLo--原理篇

1一般的开机引导过程。
在PC机上,最初的启动由BIOS完成。当开机自检结束时(Power-On Self Test,POST),
BIOS尝试读入软盘的第一个扇区,把它看作引导扇区。若没有软盘,则尝试读入硬盘
的第一个扇区。新的BIOS可以改变这种次序,先从硬盘启动。甚至从光盘启动。由于
大多数BIOS不提供SCSI支持,若要从SCSI磁盘启动,SCSI适配器要提供他自己的
BIOS.如果什么都找不到,老的BIOS会启动内置的ROM BASIC,或直接打印"NO
ROM-BASIC".
操作系统的启动分几步完成。由于引导扇区比较小,通常它主要任务是读入第二
个loader,第二个loader再读入第三个loader,直到整个操作系统被完全读入。

DOS 引导区:
OFFSET
0x000 JMP xx Near jump into the program code
0x003 Disk parameters
0x03E Program code loading the DOS kernel
0x1FE 0xAA55 Magic number for BIOS
可见,引导区的结构相对比较简单。它的长度总是512字节。以上,磁盘参数
只对DOS有意义。重要的是引导区从0开始,以BIOS的magic number 结束。
从软盘启动比较简单,因为只有一个引导扇区:第一个扇区。硬盘则困难一些,
它被分成很多分区。但是,BIOS根本不管分区信息,它象对待软盘一样对待硬盘,
仍读入第一个分区,叫作:master boot record.(MBR).
所以MBR也应该和上面介绍的结构一样:从0开始,以BIOS的magic number 结束
在MBR的最后部分,有分区表。如下图:

OFFSET Length
0x000 0x1BE code loading and starting the boot sector of the active
partitian
0x1BE 0x010 partition1
0x1CE 0x010 partition2
0x1DE 0x010 partition3
0x1EE 0x010 partition4
0x1FE 0x0012 0xAA55 Disk parameters

每个分区信息占16字节,结构如下:
1 BOOT Boot flag: 0=not active ,0x80 active
1 HD Begin:head number
2 SEC CYL Begin:sector and cylinder number of boot sector
1 SYS System Code:0x83 linux , 0x82 linux swap etc.
1 HD End:head number
2 SEC CYL End: sector and cylinder number of boot sector
4 low byte high byte Relative sector number of start sector
4 low byte high byte Number of sectors in the partition
所以硬盘可以有4个分区。这四个分区叫做主分区:primary prititions.假如它
们不够用,可以设置所谓的扩展分区。 扩展分区包含至少一个逻辑分区。扩展
分区的第一个扇区结构类似MBR,它的分区表的第一表项对应第一个逻辑分区。如果
存在第二个逻辑分区,那么分区表的第二个表项就包含了一个指针。这个指针指向
第一个逻辑分区后面的一个地址。这个地址包含一个分区表。该分区表的第一表项
对应第二个逻辑分区。这样就组成一个链表,从而扩展分区可以有任意多的逻辑分
区。
每一个主分区和扩展区都包含一个引导扇区。系统只能从这几个地方之一启动。
BOOT标志决定哪个区被引导。
原来,只有主分区,因此,MS-DOS的fdisk和大多数同类工具只能激活主分区..
MBR的代码要作以下的操作:
1:确定活动分区。
2:使用BIOS,将活跃分区的启动扇区读入。
3:跳到启动扇区的0位置。
MBR的空间足够完成这些工作。如上所述,每个分区理论上包含一个引导扇区,
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论