计算机开机启动流程详解
一、BIOS
1、BIOS是什么
BIOS:基本输入输出系统(Basic Input Output System),它是一组固化到计算机内主板上一个ROM(Read-Only Memory)只读存储器,不需要供电就可保持数据不丢失芯片上的程序,BIOS保存着计算机最重要的基本输入输出的程序、系统设置信息、开机上电自检程序和系统启动自检程序。
2、BIOS的功能及作用
a、POST上电自检及初始化:执行不同初始化和计算机硬件检测的函数或例程,开机后BIOS最先被启动,然后它会对电脑的硬件设备(CPU、640K基本内存(640K BASE MEMORY)、1MB以上扩展内存(EXTEND MEMORY)、ROM(READ-ONLY MEMORY,只读存储器)、主板、CMOS存储器、串口、并口、显卡、软盘子系统、硬盘子系统、键盘)进行完全彻底的检验和测试
b、BIOS 系统操作系统启动程序:完成 POST 自检后, ROM BIOS 将按照系统 CMOS 设置中的启动顺序搜寻软硬盘驱动器及 CDROM 、网络服务器等有效的启动驱动器 ,读入操作系统引导记录,然后将系统控制权交给引导记录,由引导记录完成系统的启动。
c、BIOS 中断服务程序:开机时,BIOS会告诉CPU各硬件设备的中断号,当用户发出使用某个设备的指令后,CPU就根据中断号使用相应的硬件完成工作,再根据中断号跳回原来的工作。
d、程序服务:BIOS直接与计算机的I/O(Input/Output,即输入/输出)设备打交道,通过特定的数据端口发出命令,传送或接收各种外部设备的数据,实现软件程序对硬件的直接操作
BIOS 系统设置程序: 机器部件的配置情况是存放在一块可读写的 CMOS RAM 芯片中的,它保存着系统 CPU 、软硬盘驱动器、显示器、键盘等部件的信息。 关机后,系统通过一块后备电池向 CMOS 供电以保持其中的信息。如果 CMOS 中关于微机的配置信息不正确,会导致系统性能降低、零部件不能识别,并由此引发一系统的软硬件故障
二、CMOS
1、CMOS是什么
CMOS:(Complementary Metal-Oxide-Semiconductor)主板上的一块可读写的 RAM 芯片, CMOS用来保存计算机基本启动信息(如日期、时间、启动设置等)和当前系统的硬件配置和用户某些参数的设定的芯片,CMOS的特性是可读写的,因此在电脑的主板上是用来保存BIOS的设置电脑硬件参数的数据,这个芯片仅仅用来存储数据,CMOS是靠主板上的纽扣电池供电的,就算主机断电也能保存数据。CMOS芯片一般被集成在南北桥芯片组里面。
2、CMOS芯片中存储了哪些数据
CPU的类型、内存的容量与类型、硬盘的类型和基本的参数
3、BIOS和CMOS的区别、联系
联系:BIOS中的系统设置程序是完成CMOS参数设置的手段,即通过BIOS设置程序对CMOS参数进行设置。CMOS既是BIOS设置系统参数的存放场所,又是BIOS设置系统参数的结果。
区别: bios保存系统的重要信息和设置系统参数的设置程序(BIOSSetup程序),而cmos是主板上的一块可读写的RAM芯片,里面装的是关于系统配置的具体参数,其内容可通过设置程序进行读写。
三、EC
EC(Embed Controller,嵌入式控制权)又称开机控制芯片
1、EC是什么?
EC是一个16位单片机,它内部本身也有一定容量的Flash来存储EC的代码。由于早期的EC主要管控键盘,所以也称KBC(KeyBoard Controller,键盘控制器)。EC在系统中的地位绝不次于南北桥,在系统开启的过程中,EC控制着绝大多数重要信号的时序。
在笔记本中,EC是一直开着的,无论你是在开机或者是关机状态,除非你把电池和Adapter完全卸除。 在关机状态下,EC一直保持运行,并在等待用户的开机信息。而在开机后,EC更作为键盘控制器,充电指示灯以及风扇等设备的控制,它甚至控制着系统的待机、休眠等状态。
2、EC的作用
在系统关机的时候,只有RTC(实时时钟)部分和EC部分在运行。RTC部分维持着计算机的时钟和CMOS设置信息,而EC则在等待用户按开机键。在检测到用户按开机键后,EC会通知整个系统把电源打开,CPU被RESET后,会去读BIOS内一个特定地址内的指令(其实是一个跳转指令,这个地址是由CPU硬件设定的)。在CPU读到所发出的地址内的指令后,执行它被RESET后的第一个指令。在这个系统中,EC起到了桥接BIOS和南桥(或者说整个系统)的作用。 EC是一个单独的处理器,在开机前和开机过程中对整个系统起着全局的管理。而BIOS是在等EC把内部的物理环境初始化后才开始运行的。如果说BIOS 是底层系统的话,那EC 似乎更加底层。 在南桥上还有一个功能块就是电源管理单元(PM,Power Management)。 一般来说,他和EC来共同配合完成。这里包括从开机(power button)键按下后,启动,待机,休眠,关机的全部功能。还包括对背光亮度,声音等的控制等等。 至于现在Intel的Speed Step技术,也有部分功能是透过南桥来实现的(南桥发送SLP、STPCLK(sleep,Stop Clock)来实现睡眠、深睡眠等)。 (Embedded Controller,嵌入式控制器)在一组特定系统中,新增到固定位置,完成一定任务的控制装置就称为嵌入式控制器。
参考网址:https://blog.csdn.net/maomaovv/article/details/1549819
四、计算机开机启动流程
Stage1:加电开机
按下电源的开关,电源马上开始向主板和其它的设别开始供电,但此时的电压还不是很稳定,主板上的控制芯片组会向CPU发出并保持一个reset(重置)信号,让CPU内部自动恢复到初始状态下,当芯片组检测到电源已经开始稳定的供电了(从不稳定到稳定的过程中只需要一瞬间即可),芯片组则开始撤去reset信号,CPU马上开始从FFFF0H出执行指令,这个地址是在系统的BIOS的地址范围内,其实放在这里的只是一条跳转指令,指向BIOS中真正的启动代码地方。
Stage2:BIOS启动,POST自检(Power-On-self-test)
BIOS启动后,第一件事情就是执行POST自检阶段,主要针对系统的一些关键设备是否存在或者是功能是否正常,如:内存、显卡等,如果在POST过程中系统设备存在致命的问题,BIOS将会发出声音来报告检测过程中出现的错误,声音的长短及次数对应着系统的错误类型。POST过程会非常快速,对用户几乎感觉不出来。
显卡初始化:在POST过程中,BIOS会去查找显卡的BIOS,并且去调用显卡BIOS的代码,由显卡BIOS去初始化显卡,这个时候显示器一般会显示一些初始化的信息,同时系统BIOS也会去查找其它设备的BIOS,分别调用她们的初始化代码来初始化设备。
BIOS报错声音对应链接:https://baike.baidu.com/item/BIOS%E6%8A%A5%E8%AD%A6%E5%A3%B0/4231622?fr=aladdin
总之:如果硬件出现问题,主板会发出不同的蜂鸣,启动中止,如果没有问题,则显示器会显示相关信息。
Stage3:启动顺序
硬件自检结束后,BIOS这个时候将控制权交给下一阶段的启动程序,但是这个时候BIOS需要知道“下一个阶段要启动的程序具体放在了哪一个设备上”也就是我们平时说的BIOS下的启动顺序,但排在第一位的是优先转交的设备,这个叫做启动顺序。
启动顺序,我们日常工作中可以开机进入BIOS的去调节启动设备的优先级。
Stage4:主引导记录
BIOS按照设定好的启动顺序,将控制权交给排在第一位的存储设备,即开始从第一位设备中读取设备的MBR,并且将程序放在0x7c000的内存地址位中。
MBR:存储设备中的第一个扇区,磁盘最前面的512Byte,称为“主引导扇区”(Master boot record,缩写为MBR)
这个时候计算机会去读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,BIOS会继续去找下一个设备,并将控制权转交给”启动顺序”中的下一个设备。
主引导记录(MBR)的结构组成:
MBR很小,只有512字节,存放程序很小,其主要作用是:告诉计算机在哪一个位置去找操作系统。
主引导记录由三个部分组成:
1、1-446字节:调用操作系统的程序
2、447-520字节:分区表
3、511-512字节:主引导记录的签名(0x55和0xAA)
分区表:
硬盘分区有很多好处。考虑到每个区可以安装不同的操作系统,”主引导记录”因此必须知道将控制权转交给哪个区。
分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做”主分区”。
每个主分区的16个字节,由6个部分组成:
(1) 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
(2) 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
(3) 第5个字节:主分区类型。
(4) 第6-8个字节:主分区最后一个扇区的物理位置。
(5) 第9-12字节:该主分区第一个扇区的逻辑地址。
(6) 第13-16字节:主分区的扇区总数。
注:最后的四个字节(”主分区的扇区总数”),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。
Stage5:硬盘启动
这时,计算机要将控制权转交给硬盘的某个分区,但是分区又会出现几种情况:
1、卷引导记录
四个分区中,只有一个是激活的,计算机开始读取激活的第一个扇区,叫“卷引导记录"(Volume boot record,缩写为VBR)
卷引导记录主要作用:告诉计算机,操作系统在这个分区,可以开始加载操作系统
2、扩展分区和逻辑分区
扩展分区:分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)。可以在扩展分区中继续分区
逻辑分区:指在扩展区里面又分成多个区。这种分区里面的分区,就叫做”逻辑分区”(logical partition)
计算机先读取扩展分区的第一个扇区,叫做”扩展引导记录”(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。
计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。
3、启动管理器
在这种情况下,计算机读取”主引导记录”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的”启动管理器”(boot loader),由用户选择启动哪一个操作系统。
Boot loader:是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境
Stage6:操作系统启动
控制权转交给操作系统后,操作系统的内核被载入内存。
以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。
然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。