福星,开机启动这块我有点迷糊,老师讲的我有点不理解,你能给我顺顺么?

其实我也蛮尴尬的,细致的讲,是一本书,简单点讲,容易迷糊,结合前辈的知识,场景记忆法则,画图。

按了电源按钮过一会就能出现登录提示框,这是最简单的开机流程,这个过程都包含什么内容呢?福星带你来一探究竟。

启动第一步----加载BIOS (COMS)信息

当你打开计算机电源,计算机会优先加载BIOS信息,BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。(类似查字典,计算机做到心里有谱,知道该去哪里读取哪个硬件设备了)。

启动第二步----读取MBR

硬盘上第0磁道第一个扇区被称为MBR,也就是主引导记录,它的大小是512字,里面存放了启动信息、分区表信息(MBR被坏坏的程序利用是非常危险的)。

系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0X7C00地址所在的物理内存中。其实被复制过去的内容就是Boot Loader,具体到自己电脑,就是开机引导菜单。Lilo和grub的称呼或许更让你熟悉

启动第三步----Boot Loader

Boot Loader就是在操作系统内核运行之前的一个小程序。通过它我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适的状态,为最终调用操作系统内核准备好一切

启动第四步----加载内核

根据Boot Loader(grub/Lilo)设定的内核映像所在路径,系统读取内存映像,并进行解压操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

启动第五步----初始化 INIT

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件进行初始化工作。其实该文件最主要的工作是设定linux运行级别。可以通过查看该文件来获取响应信息

# Default runlevel. The runlevels used are:#   0 - halt (Do NOT set initdefault to this)#   1 - Single user mode#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)#   3 - Full multiuser mode#   4 - unused#   5 - X11#   6 - reboot (Do NOT set initdefault to this)# id:3:initdefault:

启动第六步----init进程执行rc.sysinit

设定了运行等级后,Linux系统执行的第一个用户文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH,设定网络配置、启动swap分区、设定/proc等等,有兴趣可以看一下rc.sysinit文件,对学习shell有一定的帮助

启动第七步----启动内核模块

具体依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。(优化内核参数

启动第八步----执行不同运行级别的脚本程序

根据不同运行级别,系统会运行rc0.d到rc6.d中的相应脚本程序,来完成响应的初始化工作和启动响应的服务

启动第九步----执行/etc/rc.d/tc.loca(用户个性化设置比较贴切)

rc.local就是在一切初始化工作后,linux留给用户进行个性化的地方。可以把想设置和启动的东西放到这里,当然chkconfig所管理的也是在这里加载

启动第十步----执行/bin/login程序,进入登录状态

这块,就不用我说了把,黑窗口.....

其实这背后,还有这一系列复杂的底层函数调用,有兴趣可以研究。。。

本文部分内容摘自网络,感谢先辈们的无私奉献

email:b1maw3n@163.com