本节书摘来自异步社区《操作系统真象还原》一书中的第0章,第0.28节,作者:郑钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看
0.28 MBR、EBR、DBR和OBR各是什么
这几个概念主要是围绕计算机系统的控制权交接展开的,整个交接过程就是个接力赛,咱们从头梳理。
计算机在接电之后运行的是基本输入输出系统BIOS,大伙儿知道,BIOS是位于主板上的一个小程序,其所在的空间有限,代码量较少,功能受限,因此它不可能一人扛下所有的任务需求,也就是肯定不能充当操作系统的角色(比如说让BIOS运行QQ是不可能的),必须采取控制权接力的方式,一步步地让处理器执行更为复杂强大的指令,最终把处理器的使用权交给操作系统,这才让计算机走上了正轨,从而可以完成各种复杂的功能,方便人们的工作和生活。采用接力式控制权交接,BIOS只完成一些简单的检测或初始化工作,然后找机会把处理器使用权交出去。交给谁呢?下一个接力棒的选手是MBR,为了方便BIOS找到MBR,MBR必须在固定的位置等待,因此MBR位于整个硬盘最开始的扇区。
MBR是主引导记录,Master或Main Boot Record,它存在于整个硬盘最开始的那个扇区,即0盘0道1扇区,这个扇区便称为MBR引导扇区。注意这里用CHS方式表示MBR引导扇区的地址,因此扇区地址以1开始,顺便说一句,LBA方式是以0为起始为扇区编址的,有关CHS和LBA的内容会在后面章节介绍。一般情况下扇区大小是512字节,但大伙儿不要把这个当真理,有的硬盘扇区并不是512字节。在MBR引导扇区中的内容是:
(1)446字节的引导程序及参数;
(2)64字节的分区表;
(3)2字节结束标记0x55和0xaa。
在MBR引导扇区中存储引导程序,为的是从BIOS手中接过系统的控制权,也就是处理器的使用权。任何一棒的接力都是由上一棒跳到下一棒,也就是上一棒得知道下一棒在哪里才能跳过去,否则权利还是交不出去。BIOS知道MBR在0盘0道1扇区,这是约定好的,因此它会将0盘0道1扇区中的MBR引导程序加载到物理地址0x7c00,然后跳过去执行,这样BIOS就把处理器使用权移交给MBR了。
既然MBR称为“主”引导程序,有“主”就得有“次”, MBR的作用相当于下一棒的引导程序总入口,BIOS把控制权交给MBR就行了,由MBR从众多可能的接力选手中挑出合适的人选并交出系统控制权,这个过程就是由“主引导程序”去找“次引导程序”,这么说的意思是“次引导程序”不止一个。也许您会问,为什么BIOS不直接把控制权交给“次引导程序”?原因是BIOS受限于其主板上的存储空间,代码量有限,本身的工作还做不过来呢,因此心有余而力不足。好啦,下面开始下一轮的系统控制权接力。不要忘了,MBR引导扇区中除了引导程序外,还有64字节大小的分区表,里面是分区信息。分区表中每个分区表项占16字节,因此MBR分区表中可容纳4个分区,这4个分区就是“次引导程序”的候选人群,MBR引导程序开始遍历这4个分区,想找到合适的人选并把系统控制权交给他。
通常情况下这个“次引导程序”就是操作系统提供的加载器,因此MBR引导程序的任务就是把控制权交给操作系统加载器,由该加载器完成操作系统的自举,最终使控制权交付给操作系统内核。但是各分区都有可能存在操作系统,MBR也不知道操作系统在哪里,它甚至不知道分区上的二进制01串是指令,还是普通数据,好吧,它根本分不清楚上面的是什么,谈何权利交接呢。
为了让MBR知道哪里有操作系统,我们在分区时,如果想在某个分区中安装操作系统,就用分区工具将该分区设置为活动分区,设置活动分区的本质就是把分区表中该分区对应的分区表项中的活动标记为0x80。MBR知道“活动分区”意味着该分区中存在操作系统,这也是约定好的。活动分区标记位于分区表项中最开始的1字节(有关分区内容,后面介绍分区的章节中会细说),其值要么为0x80,要么为0,其他值都是非法的。0x80表示此分区上有引导程序,0表示没引导程序,该分区不可引导。MBR在分析分区表时通过辨识“活动分区”的标记0x80开始找活动分区,如果找到了,就将CPU使用权交给此分区上的引导程序,此引导程序通常是内核加载器,下面就直接以它为例。
“控制权交接”是处理器从“上一棒选手”跳到“下一棒选手”来完成的,内核加载器的入口地址是这里所说的“下一棒选手”,但是内核加载器在哪里呢?虽然分区那么大,但MBR最想去看的是内核加载器,不想盲目地看看。因此您想到了,为了MBR方便找到活动分区上的内核加载器,内核加载器的入口地址也必须在固定的位置,这个位置就是各分区最开始的扇区,这也是约定好的。这个“各分区起始的扇区”中存放的是操作系统引导程序——内核加载器,因此该扇区称为操作系统引导扇区,其中的引导程序(内核加载器)称为操作系统引导记录OBR,即OS Boot Record,此扇区也称为OBR引导扇区。在OBR扇区的前3个字节存放了跳转指令,这同样是约定,因此MBR找到活动分区后,就大胆主动跳到活动分区OBR引导扇区的起始处,该起始处的跳转指令马上将处理器带入操作系统引导程序,从此MBR完成了交接工作,以后便是内核的天下了。
不过OBR中开头的跳转指令跳往的目标地址并不固定,这是由所创建的文件系统决定的,对于FAT32文件系统来说,此跳转指令会跳转到本扇区偏移0x5A字节的操作系统引导程序处。不管跳转目标地址是多少,总之那里通常是操作系统的内核加载器。
计算机历史中向来把兼容性放在首位,这才是计算机蒸蒸日上的原因。OBR是从DBR遗留下来的,要想了解OBR,还是先从了解DBR开始。DBR是DOS Boot Record,也就是DOS操作系统的引导记录(程序),DBR中的内容大概是:
(1)跳转指令,使MBR跳转到引导代码;
(2)厂商信息、DOS版本信息;
(3)BIOS参数块BPB,即BIOS Parameter Block;
(4)操作系统引导程序;
(5)结束标记0x55和0xaa。
在DOS时代只有4个分区,不存在扩展分区,这4个分区都相当于主分区,所以各主分区最开始的扇区称为DBR引导扇区。后来有了扩展分区之后,无论分区是主分区,还是逻辑分区,为了兼容,分区最开始的扇区都作为DOS引导扇区。但是其他操作系统如UNIX,Linux等为了兼容MBR也传承了这个习俗,都将各分区最开始的扇区作为自己的引导扇区,在里面存放自己操作系统的引导程序。由于现在这个“分区最开始的扇区”引导的操作系统类型太多了,而且DOS还退出历史舞台了,所以DBR也称为OBR。
这里提到了扩展分区就不得不提到EBR。当初为了解决分区数量限制的问题才有了扩展分区,EBR是扩展分区中为了兼容MBR才提出的概念,主要是兼容MBR中的分区表。分区是用分区表来描述的,MBR中有分区表,扩展分区中的是一个个的逻辑分区,因此扩展分区中也要有分区表,为扩展分区存储分区表的扇区称为EBR,即Expand Boot Record,从名字上看就知道它是为了“兼容”而“扩展”出来的结构,兼容的内容是分区表,因此它与MBR结构相同,只是位置不同,EBR位于各子扩展分区中最开始的扇区(注意,各主分区和各逻辑分区中最开始的扇区是操作系统引导扇区),理论上MBR只有1个,EBR有无数个。有关扩展分区的内容还是要参见后面有关分区的章节,那里介绍得更细致。
现在总结一下。
EBR与MBR结构相同,但位置和数量都不同,整个硬盘只有1个MBR,其位于整个硬盘最开始的扇区——0道0道1扇区。而EBR可有无数个,具体位置取决于扩展分区的分配情况,总之是位于各子扩展分区最开始的扇区,如果此处不明白子扩展分区是什么,到了以后跟踪分区的章节中大伙儿就会明白。OBR其实就是DBR,指的都是操作系统引导程序,位于各分区(主分区或逻辑分区)最开始的扇区,访扇区称为操作系统引导扇区,即OBR引导扇区。OBR的数量与分区数有关,等于主分区数加逻辑分区数之和,友情提示:一个子扩展分区中只包含1 个逻辑分区。
MBR和EBR是分区工具创建维护的,不属于操作系统管理的范围,因此操作系统不可以往里面写东西,注意这里所说的是“不可以”,其实操作系统是有能力读写任何地址的,只是如果这样做的话会破坏“系统控制权接力赛”所使用的数据,下次开机后就无法启动了。OBR是各分区(主分区或逻辑分区)最开始的扇区,因此属于操作系统管理。
DBR、OBR、MBR、EBR都包含引导程序,因此它们都称为引导扇区,只要该扇区中存在可执行的程序,该扇区就是可引导扇区。若该扇区位于整个硬盘最开始的扇区,并且以0x55和0xaa结束,BIOS就认为该扇区中存在MBR,该扇区就是MBR引导扇区。若该扇区位于各分区最开始的扇区,并且以0x55和0xaa结束,MBR就认为该扇区中有操作系统引导程序OBR,该扇区就是OBR引导扇区。
DBR、OBR、MBR、EBR结构中都有引导代码和结束标记0x55和0xaa,因此很多同学都容易把它们搞混。不过它们最大的区别是分区表只在MBR和EBR中存在,DBR或OBR中绝对没有分区表。MBR、EBR、OBR的位置关系如图0-21所示。
您看,MBR位于整个硬盘最开始的块,EBR位于每个子扩展分区,各子扩展分区中只有一个逻辑分区。MBR和EBR位于分区之外的扇区,而OBR则属于主分区和逻辑分区最开始的扇区,每个主分区和逻辑分区中都有OBR引导扇区。