计算机启动过程

2019-07-14 02:01发布

计算机启动过程

计算机的整个启动过程分成四个阶段当我们按下电源,电源就开始向主板和其它设备供电,此时电压还不太稳定,计算机第一时间读取ROM(被内置在计算机中的一段只读程序),该程序向CPU发出并保持一个RESET(重置)信号,让CPU内部自动恢复到初始状态,但CPU在此刻不会马上执行指令。当芯片组检测到电源已经开始稳定供电了,它便撤去RESET信号,CPU马上就从地址FFFF0H(这是BIOS的地址)处开始执行指令,跳到系统BIOS中真正的启动代码处。

第一步硬件检查

1,硬件自检

BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),即POST自检。如果硬件出现问题,主板会发出蜂鸣(不同蜂鸣代表不同硬件错误),启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。POST结束之后就会调用其它代码来进行更完整的硬件检测。 蜂鸣含义:https://wenku.baidu.com/view/087433df250c844769eae009581b6bd97f19bc4f.html

2,查找显卡

系统BIOS在C0000H处(一般都在这个位置),找到显卡BIOS之后就调用它的初始化代码,由显卡BIOS来初始化显卡,此时多数显卡都会在屏幕上显示出一些初始化信息,介绍生产厂商、图形芯片类型等内容,不过这个画面几乎是一闪而过。系统BIOS接着会查找其它设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。 查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BIOS的类型、序列号和版本号等内容。

3,内存硬盘等测试

接着系统BIOS将检测和显示CPU的类型和工作频率,然后开始测试所有的RAM,并同时在屏幕上显示内存测试的进度,我们可以在CMOS设置中自行决定使用简单耗时少或者详细耗时多的测试方式。 内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CD-ROM、串口、并口、软驱等设备,另外绝大多数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。

4,即插设备测试和配置

标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。 到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作。

第二步主引导记录

1,更新ECSD

ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS(一小块特殊的RAM,由主板上的电池来供电)之中。通常ESCD数据只在系统硬件配置发生改变后才会更新,所以不是每次启动机器时都会执行ECSD更新;但是有的主板BIOS会每次都更新。

2,主引导记录

ESCD更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。传统的主引导记录是位于磁盘最前边的一段引导代码,称为MBR。它负责磁盘操作系统对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统在对硬盘进行初始化时产生的。MBR代码有512个字节,分为三部分:1) 第1-446字节:调用操作系统的机器码。2) 第447-510字节:分区表(Partition table)3) 第511-512字节:主引导记录签名(0x55和0xAA)分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做"主分区"。每个主分区的16个字节,由6个部分组成:第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。第5个字节:主分区类型。第6-8个字节:主分区最后一个扇区的物理位置。第9-12字节:该主分区第一个扇区的逻辑地址。第13-16字节:主分区的扇区总数。这个决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。

第三步硬盘启动

这时,计算机的控制权就要转交给硬盘的某个分区了,这里又分成三种情况。

卷引导记录

四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做"卷引导记录"。"卷引导记录"的主要作用是,告诉计算机,操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。

扩展分区和逻辑分区

随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成"扩展分区",所谓"扩展分区",就是指这个区里面又分成多个区。这种分区里面的分区,就叫做"逻辑分区",计算机先读取扩展分区的第一个扇区,叫做"扩展引导记录"它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。很少有通过这种方式启动操作系统。

启动管理器

计算机读取"主引导记录"前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的"启动管理器",由用户选择启动哪一个操作系统。Linux环境中,目前最流行的启动管理器是Grub。

第四步操作系统

操作系统启动

以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。至此,全部启动过程完成。

结束

BIOS陪伴着计算机长久以来的成长,不过在英特尔发布Sandy Bridge架构处理器的时候,传统BIOS也到了和我们说再见的时间,采用图形化界面的EFI以及UEFI很快就取代了传统BIOS成为了众多主板的标配。

UEFI的诞生

EFI是Extensible Firmware Interface(可扩展固件接口)的缩写,是由英特尔倡导推出的一种在类PC系统中替代BIOS的升级方案。与传统BIOS相比,EFI通过模块化、C语言的参数堆栈传递方式和动态链接的形式构建系统,较BIOS而言更易于实现,容错和纠错特性更强。UEFI则是Unified Extensible Firmware Interface(统一可扩展固件接口),它是基于EFI 1.10标准为基础发展起来的,不过所有者并不是英特尔,而是一个名为Unified EFI Form的国际组织。UEFI是一种详细描述类型接口的标准,可以让PC从预启动的操作环境,加载到操作系统上。