BetterTs

鸢飞戾天者,望峰息心;经纶世务者,窥谷忘反

计算机的启动过程

计算机的启动过程是一个十分复杂的过程,了解启动过程前,我们需要先理解以下基本概念

基本概念

  1. BIOS    

    BIOS(原意Basic Input/Ouput System,基本输入输出系统),全称是ROM-BIOS。BIOS(Basic Input/Output System,基本输入输出系统)全称是ROM-BIOS,是只读存储器基本输入/输出系统的简写,它实际是一组被固化到电脑中,为电脑提供最低级最直接的硬件控制的程序,它是连通软件程序和硬件设备之间的枢纽,通俗地说,BIOS是硬件与软件程序之间的一个"转换器"或者说是接口(虽然它本身也只是一个程序),负责解决硬件的即时要求,并按软件对硬件的操作要求具体执行。
    《计算机的启动过程》

  2. 自诊断程序:通过读取CMOS RAM中的内容是被硬件配置,进行自检和初始化。
  3. CMOS设置程序:引导过程中,用特殊热键启动,进行设置后存入CMOS RAM中。
  4. Boot:系统自举装载程序,自检成功后将磁盘相对0道0扇区上的引导程序装入内存。

 

计算机的启动过程一般分为四个阶段

第一阶段:BIOS

开机程序BIOS被刷入ROM中,通电启动后主要做以下几件事

1.1硬件自检

BIOS启动后,首先检查硬件是否满足基本的条件,如果硬件出现问题,主板就会发出蜂鸣声,启动终止,电脑死机。此过程叫Power-On Self-Test,缩写POST。

1.2确定启动顺序-加载引导扇区

在硬件自检完成后,BIOS的主要工作就是加载引导扇区。BIOS会把控制权交给下一阶段的启动程序。此时BIOS需要外部有一个外部存储设备的顺序表(Boot Sequence),在此顺序表中排在前面的设备具有优先启动权。

第二阶段:主引导记录

    主引导记录,MBR,是存储设备的第一个扇区。

BIOS按照启动顺序,把控制权交给排在第一位的存储设备。BIOS将所检查外部存储设备的第一个扇区(512B)载入内存,放在0x00007C00处,如果一个扇区的最后两个字节是"55 AA",那么这就是一个引导扇区,这个外部存储设备也就是一块可引导盘。通常这个大小为512B的程序就称为引导程序(boot)。如果最后两个字节不是"55 AA",那么BIOS就检查下一个外部存储设备。如果没有其他启动介质,则显示 "No ROM BASIC" ,然后死机。

2.1MBR的结构

  1. 调用操作系统的机器码:占据1-446字节
  2. 分区表:占据447-510字节
  3. 主引导记录签名:占据511-512字节(即0x55和0xAA)

分区表的作用是将硬盘分成若干个区。

2.2分区表

分区表的长度只有64个字节,里面又分为四项,每一项16个字节。因此每一个硬盘最多只有四个一级分区,这些一级分区就是"主分区"。

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

  1. 第1个字节:该字节用于标识控制权能否转交给该分区,若为0x80,就表示该分区是激活分区,控制权需要装交给该分区。四个主分区只能由一个是激活的。
  2. 第2-4个字节:标识了主分区里第一个扇区的物理位置(磁头、柱面、扇区号等等)
  3. 第5个字节:标识了主分区的类型
  4. 第6-8个字节:标识了主分区最后一个扇区的物理位置。
  5. 第9-12个字节:该主分区第一个扇区的逻辑位置。
  6. 第13-16个字节:主分区的扇区总数

最后的四个字节决定了主分区的长度,主分区扇区总数不超过2^32

第三阶段:硬盘启动

到此阶段,计算机的控制权就要转交给硬盘的某个分区了。

3.1卷引导记录

四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做"卷引导记录"(Volume Boot Record,缩写为VBR,也可称为分区引导记录,Partition Boot Record,缩写为PBR)。

"卷引导记录"的主要作用是,寻找激活分区根目录下的NTLDR(XP)、bootmgr(Win7 above)、grldr(Grub)、btldr.mbr(BootLink)等可用于引导的程序。

 

3.2启动管理器

启动管理器是系统预先安装的程序,可由用户选择启动哪一个操作系统。卷引导记录搜索到激活分区中的启动管理器,将控制权交给启动管理器运行。

启动管理器寻找激活分区中的启动配置文件,根据启动配置数据,在显示器上显示多操作系统选择画面。选择相应的操作系统,控制权交给操作系统。

Linux环境中,目前最流行的启动管理器是Grub。在windows下为启动管理器bootmgr(xp中的ntldr文件)。

第四阶段:操作系统

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

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

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

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

 

 

 

 

参考文献

    《计算机是如何启动的?》阮一峰

点赞
  1. 护士衫下说道:

    写的太好了 :surprised: ,请问博主在哪里高就?(了5毛一条,十二点40发,括号内容删除)

    1. Ts说道:

      5毛太贵了,便宜点

发表评论

电子邮件地址不会被公开。 必填项已用*标注