Linux开机启动过程(个人理解)
简述Linux启动过程
1)BIOS开机自检
2)MBR引导
3)启动引导程序菜单(GRUB)
4)加载内核
5)加载虚拟文件系统加载函数模块
6)启动系统进程
/sbin/init
--->/etc/init/rcs.conf--->/etc/rc.d/rc.sysinit--->系统初始化
--->/etc/inittab--->/etc/init/rc.conf--->/etc/rc.d/rc-->/etc/rc[0-6]--->按照优先级启动和关闭脚本
--->/etc/rc.d/local--->登录界面--->输入用户名和密码登录系统
Linux启动过程详解(Centos6.X版本)
一.BIOS开机自检
- 对基础硬件环境进行开机自检,如:cpu,HDD,Memory,主板等, 根据启动顺序(默认硬盘启动)进行启动,只有自检通过才会进行下一步动作
二.启动引导过程
- 系统启动后,会从硬盘0柱面0磁头1扇区(MBR主引导程序)读取引导启动程序(Boot loader)用于引导操作系统启动,当MBR加载到内存之后,BIOS讲控制权交给MBR(MBR中最主要的功能就是存储启动引导程序)
- 名词解释
1)柱面-Cylinders:硬盘有多个盘片(和光盘相似)组成,每个盘面被划分为数目相等的磁道,所以盘片都会从外向内进行磁道编号,最外侧的就是0磁道,具有相同编号的磁道形成一个圆柱,这个圆柱称为磁盘的柱面
2)磁道-track:每个盘片在逻辑上有很多同心圆,最外面的同心圆为0磁道,每个同心圆称为磁道(硬盘的磁道密度非常高,通常盘面上有上千个磁道)
3)扇区-sector:将每个磁道分为若干个孤段,每个孤段就是一个扇区,扇区的大小是固定的512字节,也是磁盘的最小存储单位{1B(byte)=8位(bit) 1024字节=1MB),GB-TB-PB-EB-ZB-YB-BB-NB-DB以此类推},下图是MBR和扇区,磁道,柱面的逻辑抽象图(部分截图来自互联网)
4)MBR(Master Boot Record)主引导程序,占用一个扇区大小共512字节,其中启动引导程序(linux启动引导程序GRUB2)占用446字节,分区表占用64字节(每个分区项占用16字节,这也是为什么硬盘最大只能分四个主分区的原因),最后还有2字节的结束标识
三.加载内核及函数模块(驱动)
- 如果系统只有一个内核,则单系统直接启动
- 如果系统有多个内核(比如一个操作系统既安装了Linux系统,又安装了Windows系统,这种情况一般用于测试实验环境或者个人喜好,实际生产环境很少使用),开机界面则有多个选项让用户自行选择哪个内核进行启动
- linux内核是以压缩的形成保存在启动系统的/boot目录下(被启动引导程序调用加载在内存中),内核会先在内存中进行解压缩,解压缩完成之后,内核会再执行一次自检(linux一般更信任内核自检)内核的自检过程会记录在"/var/log/dmesg"文件中,启动引导程序加载内核之后,就需要内核加载硬件的驱动程序,一般情况下IDE接口的硬盘驱动都保存在内核中,可以直接调用(IDE硬盘基本淘汰)这时候有一个问题,如果内核加载了所有的驱动程序,那么内核会非常大,linux的解决方案是把常用的驱动加载在内核中,把不常用的驱动做成函数模块加载放在/boot/lib/modules文件中,需要的时候进行调用。
四.虚拟文件系统--initramfs
- 但是这里又有个新的问题,内核还不能识别硬盘如何去识别"/boot/lib/modules"文件呢?(/boot分区通过启动引导程序加载,不是由内核加载)这里引用了“虚拟文件系统-initramfs”通过虚拟文件系统加载基本的驱动加载在内核里,然后解压缩并在内存中仿真成一个根目录,并且这个仿真的文件系统能够提供一个可执行程序,通过该程序加载启动过程中所需要的内核模块,如:USB,sata硬盘驱动,RAID驱动(建立仿真目录,加载真正的硬件驱动),具体参考如下图

- 虚拟文件系统(initramfs)在/boot分区下,可以查看,它是一个压缩文件,可以使用file命令查看格式,然后进行压缩,查看发现非常类似系统的根目录,以下是详细过程

五.启动系统进程
系统启动的第一个进程/sbin/init,是其他所有进程的父进程,通过父进程调用“/etc/init/rcs.conf”,此进程有两个功能
(1)调用“/etc/rc.d/rc.sysinit”进行系统初始化(初始网络环境,挂着设备,初始硬件等等)则系统的基本功能具备
(2)调用“/etc/inittab”查看系统运行级别-->调用“/etc/init/rc.conf”-->调取--->“/etc/rc.d/rc”目录--->再调取“/etc/rc.d/rc[0-6]”文件执安装优先级启动和关闭脚步--->在登录系统界面之前在启动“/etc/rc.d/local”文件--->登陆界面--->输入用户名和密码登陆系统,以下是各文件详细参数:
- “/etc/inittab”文件--->启动运行级别

- “/etc/init/rc.conf”文件

- “/etc/rc.d/rc”目录及调取“/etc/rc.d/rc[0-6].conf”按照优先级启动和关闭脚步

- “/etc/rc.d/local”

以上是我个人的理解,如有不足,欢迎大家指正修改,相互学习,一起进步!
Linux开机启动过程(个人理解)的更多相关文章
- LINUX开机启动过程
LINUX开机启动过程 启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息 ...
- linux 开机启动过程详解
Linux开机执行内核后会启动init进程,该进程根据runlevel(如x)执行/etc/rcx.d/下的程序,其下的程序是符号链接,真正的程序放在/etc/init.d/下.开机启动的程序(服务等 ...
- 001.Linux开机启动过程
相关Linux启动过程解析,此作为通用启动参考:
- Linux入门——开机启动过程浅析
Linux开机启动过程浅析 Introduction 开机启动过程分为以下6个步骤,分别是BIOS, MBR, GRUB, Kernel, Init, RunLevel, RunDefinition ...
- 【转载】简述Linux的启动过程
原文:简述Linux的启动过程 本文将简单介绍一下Linux的启动过程,希望对那些安装Linux的过程中遇到了问题的朋友有些帮助 声明:本人没用过UEFI模式和GPT分区格式,所有关于这两部分的内容都 ...
- 5.Linux的启动过程和系统指令
1.Linux的启动过程 作为一台计算机,启动它的第一步是加电自检,也就是给电脑用电然后按电源按钮开机.加电之后的运行步骤:(1)加载bios,然后检查硬盘信息 (2)读取MBR的配置(MBR就是硬盘 ...
- Linux内核启动过程概述
版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...
- Linux 开机启动
Linux开机启动(bootstrap) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机开机是一个神秘的过程.我们只是 ...
- (转)Linux的启动过程
原文链接:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 半年前,我写了<计算机是如何启动的?>,探讨BIOS ...
随机推荐
- Mysql的行级锁与表级锁
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎).表级锁(MYISAM ...
- 关于程序null值的见解
今天遇到了一个问题,查询一条数据,返回用list接,发现少了2个值(ssh框架).执行SQL少的这两个字段的值为null.上图说明一下: 可以看到第一次查询没有角标38.39的值. 是同一条SQL,第 ...
- js 共有和私有
//共有 var SunHang = function(){ var name = "ssss"; this.name = "hhhhh"; function ...
- [NUnit] discover test finished: 0 found issue
%Temp%\VisualStudioTestExplorerExtensions & restart visual studio
- Android使用com.google.android.cameraview.CameraView进行拍照
import android.Manifest;import android.annotation.SuppressLint;import android.content.Context;import ...
- coursera课程《how to learning 怎么学习》 总结
总体来说,学完课程没有茅舍顿开的感觉,而是更加印证了之前的那个认知:大道至简,践则无敌,很多的学习方法上学的时候老师都教过我们,关键是我们能否坚持执行.课程讲了很多脑科学有关学习的知识,但对于我们实践 ...
- Netty学习(九)-Netty编解码技术之Marshalling
前面我们讲过protobuf的使用,主流的编解码框架其实还有很多种: ①JBoss的Marshalling包 ②google的Protobuf ③基于Protobuf的Kyro ④Apache的Thr ...
- 机器学习中的误差 Where does error come from?
误差来自于偏差和方差(bias and variance) 对于随机变量 X,假设其期望和方差分别为 μ 和 σ2.随机采样 N 个随机变量构成样本,计算算术平均值 m,并不会直接得到 μ (除非 ...
- SpringBoot:Mybatis + Druid 数据访问
西部开源-秦疆老师:基于SpringBoot 2.1.7 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 简介 对于数据访问层 ...
- websocket初体验(小程序)
之前上个公司做过一个二维码付款功能,涉及到websocket功能,直接上代码 小程序onShow方法下加载: /** 页面的初始数据 **/ data: { code: "", o ...