计算机启动流程大概分为两个阶段:一是计算机板载启动,二是操作系统启动。整个过程大致如下:
通电–>>BOIS–>>主引导记录
–>>(操作系统)
前三步在于硬件及相关程序
BIOS->控制权移交
BIOS(Basic Input Output System,基本输入输出系统)是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。
BIOS首先会对硬件进行检查,判断计算机硬件是否满足要求,即所谓“硬件自检”(Power-On Self-Test,POST)过程。
在完成POST自检后,ROM BIOS将按照系统CMOS设置中的启动顺序搜寻软硬盘驱动器及CDROM、网络服务器等有效的启动驱动器 ,完成一系列外设初始化,并从软盘或硬盘的开始扇区读作系统引导记录,然后将系统控制权交给主引导记录。
此外,BIOS还会以及提供外设相关的程序服务、硬件中断等服务。
主分区引导记录MBR->控制权移交
系统读取位列第一的可启动存储设备。计算机先读取该设备的第一个0.5KB的扇区——主引导记录”(Master boot record,MBR),它主要告诉计算机从该设备的哪一个分区来装载引导加载程序(boot loader)。
活动分区启动管理器(boot loader(和grub))。
此时它寻找boot文件中的BCD files(BCD files contain the boot configuration data )->dispaly the start screen and its(multiple) operatting system。当有多个操作系统时,每个操作系统都有自己对应的boot loader。我们可以通过 boot loader加载grub, 在这个过程中主要靠Grub的引导开始的,在这个过程中主要靠Grub的引导开始的,Grub分为两个阶段:stage1:Boot loader 加载所有配置档与相关的环境参数文件;stage2:使用/boot/grub 来进行grub引导,加载内,stage2在下节叙述。
操作系统部分
- (选择好操作系统后),比如linux,boot loader 会读取/boot下其他文件,帮助我们加载内核;内核加载好后,就会开始检测硬件与加载驱动程序,并再次检测一遍硬件,此时内核接管整个计算机。
/boot下的内核文件,此时操作系统接管,linux读取文件顺序为:
1.加载linux 内核后,开始运行程序 /sbin/init(PID 为1),它的作用是初始化系统环境。
2.init读取/etc/inittab,它用于设置运行级别,如打开第一行是:
id:2:initdefault:
运行级别为2。每个运行级别都有对应需要加载的程序。每个运行级别在/etc目录下面,都有一个对应的子目录,指定要加载的程序。
一般情况下,依据有无网络与有无 X Window ,Linux 将 run level 划分为7个等级(0-6)。其中0是关机,1是单用户模式,6是重启。而 2-5,一般来说都是多用户模式。
3.执行“/etc/rcX.d/”目录下的启动脚本,然后是“/etc/rcN.d/”目录。X代表运行级别。例如设定的运行级别为3,那么它对应的启动目录为“/etc/rc3.d/。设置计算机名称,时区,检测文件系统,挂载硬盘,清空临时文件,设置网络……
根据“/etc/rcS.d/”文件夹中对应的脚本启动
(3)启动登录管理器,等待用户登录
其他:
如windows,操作系统部分,此时就会把把控制权移交给winload.exe
加载windows内核;
等待用户登录