解析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启动过程做一次大概的解析,其中还有很多内容未涉及,深究起来,可以写几万字呢,如果此文有勘误,欢迎大家在下面留言。

时间: 2024-10-12 00:02:17

解析Centos启动过程的相关文章

centos 启动过程

firmware(bios加电自检) | bootloader(grub自启动程序,硬盘0磁头0柱面1扇区) | kernel(加载内核,加载驱动) | init(/sbin/init进程,启动该进程---CentOS 5及以前:SysV init     配置文件:/etc/inittab CentOS 6:Ubantu研发的Upstart       配置文件:/etc/inittab   /etc/init/*.conf CentOS 7:Systemd      配置文件:/usr/li

AngularJS进阶(三十九)基于项目实例解析ng启动加载过程

基于项目实例解析ng启动加载过程 前言 在AngularJS项目开发过程中,自己将遇到的问题进行了整理.回过头来总结一下angular的启动过程. 下面以实际项目为例进行简要讲解. 1.载入ng库 2.等待,直到DOM树构造完毕. 3.发现ng-app,自动进入启动引导阶段. 4.根据ng-app名称找到相应的路由. 5.加载默认地址. 6.Js顺序执行,加载相应模版页 sys_tpls/home.html 7.在此,可以看到index路由中只是填充了ui-view为sys_login的div模

tomcat的启动过程(Tomcat源码解析(三))

Tomcat组件生命周期管理 在Tomcat总体结构 (Tomcat源代码解析之二)中,我们列出了Tomcat中Server,Service,Connector,Engine,Host,Context的继承关系图,你会发现它们都实现了org.apache.catalina.Lifecycle接口,而org.apache.catalina.util.LifecycleBase采用了模板方法模式来对所有支持生命周期管理的组件的生命周期各个阶段进行了总体管理,每个需要生命周期管理的组件只需要继承这个基

OGRE启动过程详解(OGRE HelloWorld程序原理解析)

本文介绍 OGRE 3D 1.9 程序的启动过程,即从程序启动到3D图形呈现,背后有哪些OGRE相关的代码被执行.会涉及的OGRE类包括: Root RenderSystem RenderWindow ResourceGroupManager LogManager Viewport SceneManager Camera SceneNode Entity Light 建议在阅读本文时参考OGRE API Reference,OGRE官方给的API Reference没有类的协作图,可以自己用Do

Android启动过程深入解析

Android启动过程深入解析 2014/06/20 分享到:7 本文由 伯乐在线 - 云海之巅 翻译.未经许可,禁止转载!英文出处:kpbird.欢迎加入翻译小组. 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样的? 什么是Linux内核? 桌面系统linux内核与Android系统linux内核有什么区别? 什么是引导装载程序? 什么是Zygote? 什么是X86以及ARM linux? 什么是init.rc? 什么是系统服务? 当我们想到Android启

tomcat 解析(五)-Tomcat的核心组成和启动过程

声明:源码版本为Tomcat 6.0.35 前面的文章中介绍了Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话,整个Tomcat的组成可以如下图所示: Tomcat在接收到用户请求时,将会通过以上组件的协作来给最终用户产生响应.首先是最外层的Server和Service来提供整个运行环境的基础设施,而Connector通过指定的协议和接口来监听用户的请求,在对请求进行必要的处理和解析后将请求的内容传递给对应的容器,经过容器一

github项目解析(八)-->Activity启动过程中获取组件宽高的三种方式

转载请标明出处:一片枫叶的专栏 上一个github小项目中我们介绍了防止按钮重复点击的小框架,其实现的核心逻辑是重写OnClickListener的onClick方法,添加防止重复点击的逻辑,即为第二次点击与第一次点击的时间间隔添加阙值,若第二次点击的时间间隔与第一次点击的时间间隔小于阙值,则此次点击无效,再次基础上我们又封装了点击组件验证网络Listener,点击组件验证是否登录Listener等,具体可参考:github项目解析(七)–>防止按钮重复点击 本文中我将介绍一下android中A

Sql Server tempdb原理-启动过程解析实践

我们知道在SqlServer实例启动过程中数据库会进行还原(Redo,Undo)然后打开提供服务,但我们知道tempdb是不提供重做机制的(Redo)那tempdb是如何还原的呢?如果tempdb损坏我们该怎么办,这里我将通过实例给大家介绍. 有时tempdb因为一些原因会变得非常巨大,一些DBA的解决方式就是重启数据库实例,的确重启后tempdb就会恢复到初始设置大小,理由很简单tempdb会重新创建. Tempdb的创建过程. 1在model库打开后进行tempdb创建(可以日志中看到mod

Android系统启动流程(一)解析init进程启动过程

前言 作为"Android框架层"这个大系列中的第一个系列,我们首先要了解的是Android系统启动流程,在这个流程中会涉及到很多重要的知识点,这个系列我们就来一一讲解它们,这一篇我们就来学习init进程. 1.init简介 init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等.init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init.本文将基于Androi