文章目录
  1. 1. 第一阶段:BIOS
    1. 1.1. BIOS进行POST
    2. 1.2. 启动顺序
  2. 2. 第二阶段:MBR
    1. 2.1. MBR的结构
    2. 2.2. 分区表
  3. 3. 第三阶段:开机管理程序(boot loader)
    1. 3.1. 提供菜单
    2. 3.2. 载入核心文件
    3. 3.3. 转交其他loader
  4. 4. 第四阶段:操作系统

我小的时候一直有个疑问,电脑是怎么启动的,当我们按下电源键的时候,电脑内部是怎么运行的,总不能是电源键和操作系统捆绑在一起,形成一个事件吧@_@。这个问题一直在困扰着我,我一直都不知道这其中到底是怎么一回事,这几天碰巧看到一些关于MBR(即主引导记录)的文章,脑袋里大概有了那么点概念了,想想好像是那么一回事。这几天,经过查阅相关资料,在这里整理一下我梳理的笔记。

买来的零件,组装起来成为一部台式计算机,此时就像是一副空空的躯体一样,他是没有灵魂的,不过好在他还带有一张铭牌,记录着他身上每个部位的信息。这个铭牌就是我们所说的CMOS芯片,这块在主板上小小的芯片是主板上的一块可读写的并行或串行FLASH芯片,是用来保存BIOS的硬件配置和用户对某些参数的设定的。CMOS本质上他其实是一块可读写的RAM芯片,需要配合主板上的CMOS电池一起工作,这也就是为什么我们的计算机关机后,下次开机时时间依然是正确的原因了。所以我们的计算机上的一些基本启动信息(如日期、时间、启动设置)如果错误的话,多半是CMOS或是CMOS电池的问题了。当然,绝大多数的用户通常不会关心CMOS的硬件问题,而只关心写在CMOS上的信息,也就是BIOS的设置问题,其中提到最多的就是系统故障时拿掉主板上的电池,进行CMOS放电操作,从而还原BIOS设置。

BIOS是英文”Basic Input Output System”的缩略词,直译过来后中文名称就是”基本输入输出系统”。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。装过系统的人都知道,我们在设置启动盘启动的时候,进入的那个界面(一般为蓝色)就是我们这里所说的BIOS。不同的BIOS系统进入的方式不一样,一般为Delete键。

好了,下面我们进入正题,计算机的整个启动过程可以分为四个阶段。

第一阶段:BIOS

当我们按下电源键时,主板即被唤醒,读取主板上的固件BIOS,BIOS开始运行。

BIOS进行POST

BIOS启动时首先要做的事情就是进行POST(Power-OnSelfTest,加电自检),POST的主要任务就是检测系统中一些关键的硬件设备是否能够正常工作。如果硬件出现问题,主板便会发出不同的“蜂鸣”声来告诉我们硬件出现问题,启动终止。如果没有问题,计算机则会显示BIOS的启动画面,包括硬件信息(例如CPU、内存、硬盘等)和BIOS的类型、序列号和版本号等。在正常的情况下,POST过程进行的非常的快,我们几乎无法察觉到它的存在。

启动顺序

当完成BIOS的POST过程时,BIOS将执行最后一项任务:按照用户在BIOS界面指定的启动顺序(Boot Sequence)进行启动(一般默认为主机硬盘,如果是安装系统的话,也可以是光驱和一些USB存储设备)。

其实BIOS在这里做的任务主要就是根据用户设定的启动顺序,将计算机的控制权转交给启动顺序指定存储设备中的启动程序。也就是BIOS只需要知道,“下一阶段的启动程序”存放在哪一个存储设备中即可,寻找的途径就是按照启动顺序依次进行,找不到则跳到下一存储设备。

第二阶段:MBR

MBR,在上面也说了,就是主引导记录。排在启动顺序第一位的存储设备在拿到BIOS转交的系统控制权后,这时,计算机就会读取设备的第一个扇区,也就是读取最前面的512字节(因为目前的磁盘的每个扇区就是512字节)。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给启动顺序中的下一个设备。

MBR的结构

MBR只有512个字节,放不了太多东西。它的主要作用是告诉计算机到硬盘的哪一个位置去找操作系统。

主引导记录由三个部分组成:

  1. 第一部分(第1-446字节):调用操作系统的主引导程序(boot loader)。
  2. 第二部分(第447-510字节):分区表(Partition table区),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。
  3. 第三部分(第511-512字节):主引导记录签名(magic number),占2个字节,(0x55和0xAA)。

分区表

分区表的作用就是将硬盘分成若干个区。安装个操作系统的人都知道,在装之前一般都要进行分区,当然你只使用一个分区并不会出现什么问题,只是会给使用上带来一些不方便罢了。

硬盘分区有利于我们对硬盘的管理,而且分区有一个很重要的优点是,我们在每个区都可以安装不同的操作系统,这对于我们喜欢折腾的人来说,可是省了一大笔花销呢。“生命不息,折腾不止”,正是由于每个区都可以安装不同的操作系统,所以我们的MBR必须知道要将计算机的控制权交给哪个系统(这个将在下面详细讲)。

分区表的长度只有64个字节,在其中每个分区又占用16个字节,所以分区表只能记录4个分区的信息,这样的一级分区我们把它叫做主分区。这就是硬盘的主分区数目不能超过4个的原因。

每个主分区的16个字节,由6个部分组成:

  (1) 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
  (2) 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
  (3) 第5个字节:主分区类型。
  (4) 第6-8个字节:主分区最后一个扇区的物理位置。
  (5) 第9-12字节:该主分区第一个扇区的逻辑地址。
  (6) 第13-16字节:主分区的扇区总数。 

最后的四个字节(”主分区的扇区总数”),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。
如果每个扇区为512个字节,就意味着单个分区最大不超过2TB。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB。如果想使用更大的硬盘,只有2个方法:一是提高每个扇区的字节数,二是增加扇区总数。

第三阶段:开机管理程序(boot loader)

这时,计算机的控制权就要转交给MBR中的开机管理程序了。开机管理程序(boot loader)是一个可以读取操作系统核心文件的程序。所以说这个开机管理程序的目的是在载入(load)核心文件,由于开机管理程序是操作系统在安装的时候所提供的,所以他会认识硬盘内的文件系统格式,因此就能够读取核心文件。

由上面的说明我们会知道,BIOS与MBR都是硬件本身会支持的功能,至于boot loader则是操作系统安装在MBR上面的一套软件了。由于MBR仅有446 字节而已,因此这个开机管理程序是非常小而美的。 这个boot loader的主要任务有下面这些项目:

  • 提供菜单:使用者可以选择不同的开机项目,这也是多重开机的重要功能!
  • 载入核心文件:直接指向可开机的程序区段来开始操作系统;
  • 转交其他loader:将开机管理功能转交给其他loader负责。

提供菜单

提供菜单就是在开机要进入系统之前,出现一个系统选择界面,由用户选择启动哪一个操作系统,想必装过双系统的人应该都知道吧。

在windows平台下,我们最常用的系统引导软件就是EasyBCD了,每次装完双系统,莫名其妙进不去的时候,就用它来修复一下,分分钟解决问题。

Linux环境中,目前最流行的启动管理器是Grub。

载入核心文件

载入核心文件就是boot loader会自动识别自己的系统盘内的可开机核心文件,并运行它,将计算机的控制权转交给它。

转交其他loader

这一点很有趣呢!这表示你的计算机系统里面可能具有两个以上的开机管理程序呢!什么?你说什么?Are you kidding me?我们的硬盘不是只有一个MBR而已?是的没错,不过开机管理程序除了可以安装在MBR之外, 还可以安装在每个分区的引导扇区(boot sector)。没错,这个特色才能造就“多重开机”的功能啊!

第四阶段:操作系统

boot loader将控制权转交给操作系统后,操作系统的内核首先被载入内存。

以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。

然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。

至此,全部启动过程完成。

P.s.以下内容有时间的时候我会再深入研究,并总结出来

1.我们的系统只有四个主分区,那为什么有的计算机能够分不止四个区呢?

随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)。

所谓”扩展分区”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做”逻辑分区”(logical partition)。

计算机先读取扩展分区的第一个扇区,叫做”扩展引导记录”(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。

计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。

2.MBR支持的最大分区为2TB,有没有其他方法可以让我们的系统支持更大的分区?

答案是有,GPT可以满足你的要求!

与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大卷为18 EB(Exabytes)并且每磁盘的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,IA-64版Windows限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性。

3.UEFI和BIOS的区别?

暂时不太清楚,以后再慢慢深入@_@~

文章出自:Krzer http://www.krzer.com/版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。

文章目录
  1. 1. 第一阶段:BIOS
    1. 1.1. BIOS进行POST
    2. 1.2. 启动顺序
  2. 2. 第二阶段:MBR
    1. 2.1. MBR的结构
    2. 2.2. 分区表
  3. 3. 第三阶段:开机管理程序(boot loader)
    1. 3.1. 提供菜单
    2. 3.2. 载入核心文件
    3. 3.3. 转交其他loader
  4. 4. 第四阶段:操作系统