Intel x86 PC的引导(硬盘部分)(一)

本来想写前面的引导部分的,但是最近看的最多的还是这个部分,就先写下来吧! :)

       很多人可能搞不清楚到底机器是怎么引导的,感觉很神秘,其实没什么大不了,简单说,就是BIOS在POST后会调用int 19h 读取一个预先设置好的引导介质上的固定区域到一个固定地址的内存区域,(很饶口对吧 - -)。然后就执行这个内存区域里的代码,再有这部分代码,来完成后面的工作。

OK,那么我们先从第一步,int 19h入手。int 19h会根据你在BIOS Setup中设置的引导顺序,依次搜索各个引导设备,并且读取找到设备上的第一个扇区,对于硬盘,就是 第0头 第0柱 第1个扇区了。而对于软盘,就是第一个扇区。这个扇区的内容,int 19h会把它读到内存里的这个地址 "0000:7C00",然后就从这个地址开始执行这段代码了。到这里int 19h 的工作就完成了,不过int 19h是如何区分这第一个扇区是不是启动扇区的呢?很简单,它通过检查扇区最后的2个字节是否为"55AA"来确定是否是有效启动扇区。是的话,就读取,不是的话,就换下一个预先设置好的设备。如果所有设备上都没找到合法的启动扇区,那么引导失败。

然后我们再看看一个合法的引导扇区的样子:一个合法的引导扇区,也就是硬盘上的 0柱面 0磁头 1扇区,我们称它为MBR(Main Boot Record) 。它大体上由2部分组成,引导代码+磁盘分区表(DPT) 在512个字节当中,前446个字节,为引导代码。后64个为磁盘分区表DPB, 最后2个字节,就是合法效验位55AA。MBR一般不会有特定操作系统的特征,不过偶从装着Linux的机器上读出来的却明显带有GRUB的痕迹(汗,难道我读错了)因为MBR并不会直接加载OS,加载OS的任务是由对应分区的DBR来完成的。看到这里你可能有点晕了,那就先不要管OS和DBR, 我们先看MBR吧!

MBR的后64个字节是分区表(不算最后的2个效验字节),这个表中能记录最多4个分区的信息,每个分区的信息占16字节。你可能会很奇怪,4个?4个么?!我机器上有20个分区啊(- -上帝,我看到了有钱人 - -+)。没错,的确是4个。那大于4个的分区怎么存放的呢? 其实并不是所有的分区都存放在这里的,这里的确只能放4个,那么其他的呢?其他的分区是以链表的结构组织起来的。在这4个16字节中,每一个都会指明了分区开始和结束的CHS参数。

而在对应的每个分区中,有2种选择,一个是主分区,一个是扩展分区。如果是扩展分区,则还会包含自己的一个分区表,我们称为EBR。这个分区表的结构和MBR中的DPT部分相似,这个分区表将扩展分区重新划分,但是一般只用2项,第一项用于说明自己的CHS位置,另一项用于说明下一个分区的CHS位置,剩下的2项不用。而扩展分区中的每个逻辑分区,也同样包含一个EBR,用于标明自己的CHS参数和下一个逻辑分区的CHS参数。这样,扩展分区中就形成了一条逻辑分区链,把所有的逻辑分区链在一起,保证系统可以正常的访问。如果是主分区,则只包含引导记录(DBR)。注意,无论是扩展分区中的每个逻辑分区,还是主分区,都会包含DBR的。扩展分区中的每个逻辑分区,因为都有EBR,所以DBR一般会放在EBR之后的某个位置上,具体要看DBR中的内容了。

MBR   EBR  DBR都要占用512字节,也就是一个扇区长。

看到这里,你至少应该明白,分区表采用了链表+递归的思路去设计的。而关于MBR中的DPT的详细含义,DBR中内容的含义,以及剩下的引导过程,偶下次写。。。现在偶又困了…… …… ……

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值