码迷,mamicode.com
首页 > 其他好文 > 详细

解析Centos启动过程

时间:2017-03-17 21:36:21      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:系统启动过程解析

解析Centos启动过程

第一步---加载BIOS

打开电源,系统会首先加载BIOS,BIOS运行上电自检程序,对电脑的硬件设施进行完全彻底的检验和测试,检测完成后通过BIOS获取到与CPU、内存、硬盘、设备启动顺序等相关的信息。


第二步---读取MBR记录

硬盘上的0磁道的第一个扇区既是MBR,大小为512字节,存放着预启动信息、分区表信息,当系统读取到MBR记录,就会把MBR记录复制到0x7c00地址所在的物理内存之中,成为boot loader(在centos中就是grub)。


第三步---加载boot loader

在操作系统加载内核之前,会先加载boot loader,通过boot loader初始化硬件设备、建立内存映射图,从而把系统的硬件和软件环境调试到一个合适的状态,为系统加载内核做好准备。


第四步---加载内核

通过上一步,系统的硬件和软件环境已经做好准备,可以加载内核。系统首先读取内存映像,并解压内存映像,把解压之后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成linux内核的建立。


第五步---定义运行级别

内核加载成功之后,/sbin/init会首先运行,该程序会去读取/etc/inittab文件,依据文件的配置进行初始化工作,设定系统的运行级别。


第六步---执行rc.sysinit
运行级别定义之后,系统会执行/etc/rc.d/rc.sysinit脚本,这个脚本会设定网络配置、启动swap分区、设定/proc等等内容,有关rc.sysinit脚本的具体功能,可以查看/etc/rc.d/rc.sysinit里面的内容。


第七步---加载内核模块
依据/etc/modules.conf文件或/etc/modules.d目录下的文件来加载内核模块,这个功能的实现与sys_init_module()函数和load_module()函数有关,但是我本人不是很了解这两个函数,社区中对于linux开机如何加载内核模块也没有一个很明确规范的文章,如果有些朋友对这一方面有所兴趣,可以私信我,互相学习讨论。


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


第九步---执行/etc/rc.d/rc.local
在系统启动的最后阶段,系统会执行rc.local里面的命令,这是自定义开机启动程序,可以根据自己的需求把需要开机自动运行的程序写在这个脚本里


第十步---执行/bin/login程序

login程序会提示用户输入账号及密码,如果用户名与密码输入正确,则为用户初始化环境,并将控制权交给shell,login程序成功后,系统开始设置各种环境变量。对于bash来说,系统首先寻找/etc/profile脚本文件并执行它;然后如果用户的主目录中存在.bash_profile文件,就执行它,在这些文件中又可能调用了其他配置文件,所有的配置文件执行后,各种环境变量也就设好了,至此整个启动过程就结束了。


   本文只是对Centos启动过程做一次大概的解析,其中还有很多内容未涉及,深究起来,可以写几万字呢,如果此文有勘误,欢迎大家在下面留言。



本文出自 “每一次进步,愿与你分享” 博客,请务必保留此出处http://lidaxia.blog.51cto.com/11588738/1907611

解析Centos启动过程

标签:系统启动过程解析

原文地址:http://lidaxia.blog.51cto.com/11588738/1907611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!