stage1.5这个阶段一般不怎么提的. 这往往是事情最重要的一个环节. 每个stage的作用:
1. stage1, 就是在所谓的MBR空间里, 最大长度为446bytes. 这些代码可以知道分区的始与终, 知道下一个stage的物理位置. 会跳到那里去
2. stage2, 在文件系统上去. 它拥有读懂文件系统的能力. 主要任务: 加载kernel
这里就存在一个大问题: stage1是不懂得文件系统的(只有长度为446bytes就可以懂到文件系统的代码就是神奇的代码), 它怎么把CPU交给stage2呢?
这里就需要stage1.5的帮助. stage1.5是懂得文件系统. 也就是它可以把CPU交给stage2.
这个过程的关键一点就是stage1.5. 但是: stage1.5是存放在哪里的呢?
先对硬盘结构来一次回顾
fdisk的参数看起:jessinio@jessinio-laptop:~$ sudo fdisk -l /dev/sda
Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00038329
Device Boot Start End Blocks Id System
/dev/sda1 * 1 100 803218+ 83 Linux
/dev/sda2 101 30401 243392782+ 8e Linux LVM
几个名词:head, sector, cylinder, block
这几个概念当与硬盘结构对应起来时, 就有点点问题。 特别是head这个概念。现在的硬盘哪里有255个head?这是不可能的!你看过这么厚的硬盘吗?
这里也没有255个head。255个是多少呢?看:
所以!head数目是与物理磁头的数目不对应的。它有什么用处呢?
硬盘数据的寻址方式
早期的硬盘是可以按照数据存放的几何位置寻址,三个数据简称:CHS后期硬盘发展明显不是这样的。但是为了兼容,三个概念还是保留下来。并映射成一种新的寻址方式:LBA
每一块可以被寻址的位置被称为:block
一般每一块block的大小都是512bytes
保留地址
从CHS到LBA的转算公式:- C, H and S are the cylinder number, the head number, and the sector number
- LBA is the logical block address
- HPC is the number of heads per cylinder
- SPT is the number of sectors per track
- * 来自http://en.wikipedia.org/wiki/Logical_block_addressing
可以看出, S是从1开始的(不可能为0的). 也就是说: 0 sector没有被使用! 这样就有 sector * 512 bytes的空间是没有划分到分区中!
其中, head为0, sector为0时, 叫MBR.
还有( sector - 1 ) * 512的空间做什么呢?
刚好, 被用来放stage1.5!
因为保留的空间的大小也有限的. 也就是说: 不能把常用的文件系统驱动都带有. 实现方法是:
* 每种boot分区文件系统有指定的stage1.5文件!
例如: e2fs_stage1_5, fat_stage1_5, ffs_stage1_5, jfs_stage1_5,
minix_stage1_5,
reiserfs_stage1_5, vstafs_stage1_5, xfs_stage1_5
不同的文件系统有不同的stage1.5文件.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.