最近学习了linux引导流程,简单总结下。
我下面写的内容告诉了大家我们启动linux系统,从按下电源的那刻起计算机都做了什么,当然本文是针对linux系统而言的。
第一步:
固件firmware(CMOS/BIOS)POST (power on self test),加电自检过程,这是基于PC的就是说不依赖操作系统的,不管是linux还是windows这个步骤都是一样要进行下去的,就算我们有一台裸机也是一样,这个阶段firmware对硬件进行检测,检测硬件是否正常,比如线是否插好等等,这是在硬件层面就是物理层面上来检测的。之所以把CMOS/BIOS称之为固件是因为我们不能把它简单的称为软件,因为它是固化在主板上的一段程序,但我们又不能把它称为硬件,因为它是软件控制程序,在国际上就把它称作固件fireware。
第二步:
加电自检没问题以后,计算机就会读取MBR,下面我解释下什么是MBR,MBR就是Master Boot Record,主引导记录,是计算启动时读取硬盘上数据的第一个位置。我们知道其实硬盘是由不同的盘片组成的,每个盘片上都有一个读写磁头,编号0,1,2,3......,跟盘片相关的还有两个概念,就是柱面和扇区。MBR就位于0柱面0磁头1扇区。MBR里面写有自举程序BootLoader,和磁盘分区表Partition Tab以及结束字。读取MBR后紧接着会载入自举程序BootLoader,在目前的大对数linux操作系统中这个自举程序叫做GRUB,载入GRUB之后系统后续的启动过程就交给了GRUB,GRUB中最重要的内容有三行,一个是指定GRUB的根目录boot,一个是指定linux Kernel内核位置,还有一个就是一些必要的镜像文件。GURB启动之后做的最重要的一件事就是载入Kernel,至此GRUB使命就算完成了,系统后续的启动过程继续交给Kernel处理。
第三步:
载入Kernel之后,Kernel做了两个比较重要的事情,一个是驱动硬件,一个是启动init进程。解释下驱动硬件,这里的驱动硬件跟第一步所说的硬件检测是不一样的,这一步是在操作系统层面即软件层面上检测硬件是否可用,说白了就是这个硬件是否能被操作系统识别。内核启动init进程,init进程的PID恒唯1,但它也必须向一个更高级的功能负责即内核调度器(PID恒为0),它用于获取CPU时间,分配CPU时间,处理分时任务。
第四步:
init启动后,会读取inittab文件,inittab文件中定义了一些系统的配置和默认缺省运行级别等等,那么由inittab继续完成系统后续的所有引导过程。
至此linux启动完毕。