简述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开机启动过程(个人理解)的更多相关文章

  1. LINUX开机启动过程

    LINUX开机启动过程 启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息 ...

  2. linux 开机启动过程详解

    Linux开机执行内核后会启动init进程,该进程根据runlevel(如x)执行/etc/rcx.d/下的程序,其下的程序是符号链接,真正的程序放在/etc/init.d/下.开机启动的程序(服务等 ...

  3. 001.Linux开机启动过程

    相关Linux启动过程解析,此作为通用启动参考:

  4. Linux入门——开机启动过程浅析

    Linux开机启动过程浅析 Introduction 开机启动过程分为以下6个步骤,分别是BIOS, MBR, GRUB, Kernel, Init, RunLevel, RunDefinition ...

  5. 【转载】简述Linux的启动过程

    原文:简述Linux的启动过程 本文将简单介绍一下Linux的启动过程,希望对那些安装Linux的过程中遇到了问题的朋友有些帮助 声明:本人没用过UEFI模式和GPT分区格式,所有关于这两部分的内容都 ...

  6. 5.Linux的启动过程和系统指令

    1.Linux的启动过程 作为一台计算机,启动它的第一步是加电自检,也就是给电脑用电然后按电源按钮开机.加电之后的运行步骤:(1)加载bios,然后检查硬盘信息 (2)读取MBR的配置(MBR就是硬盘 ...

  7. Linux内核启动过程概述

    版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...

  8. Linux 开机启动

    Linux开机启动(bootstrap)   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机开机是一个神秘的过程.我们只是 ...

  9. (转)Linux的启动过程

    原文链接:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 半年前,我写了<计算机是如何启动的?>,探讨BIOS ...

随机推荐

  1. 开发一个Spring Boot Starter!

    在上一篇文章中,我们已经了解了一个starter实现自动配置的基本流程,在这一小结我们将复现上一过程,实现一个自定义的starter. 先来分析starter的需求: 在项目中添加自定义的starte ...

  2. 全屏滚动插件pagePiling.js

    全屏滚动效果是最近非常流行的网页设计形式,带给用户良好的视觉和交互体验.pagePiling.js 这款 jQuery 插件可以帮助前端开发人员轻松实现这种效果.支持所有的主流浏览器,包括IE8+,支 ...

  3. python第三课--函数

    函数的作用 编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题.例如3次求阶乘: m = int(input( ...

  4. 安利一个免费下载VIP文档神器

    今天安利给大伙一个非非非常好用的可以免费下载VIP文档的下载神器------冰点文库下载器,用过的人都说好.操作简单,小巧轻便,完全免费.支持百度.豆丁.畅享.mbalib.hp009.max.boo ...

  5. (三十五)c#Winform自定义控件-Tab页

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  6. Sqlserver 游标的写法记录

    ---游标更新删除当前数据 ---1.声明游标 declare orderNum_03_cursor cursor scroll for select OrderId ,userId from big ...

  7. 数据结构与算法—二叉排序树(java)

    前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度.规则相对是简单的. 再数据结构中树.图才是数据结构标志性产物,(线性表大多都现成api可以使用),因为树的难度相比线性表大一 ...

  8. nginx之gzip压缩提升网站速度

    目录: 为啥使用gzip压缩 nginx使用gzip gzip的常用配置参数 nginx配置gzip 注意 为啥使用gzip压缩 开启nginx的gzip压缩,网页中的js,css等静态资源的大小会大 ...

  9. Spring中的循环依赖解决详解

    前言 说起Spring中循环依赖的解决办法,相信很多园友们都或多或少的知道一些,但当真的要详细说明的时候,可能又没法一下将它讲清楚.本文就试着尽自己所能,对此做出一个较详细的解读.另,需注意一点,下文 ...

  10. Java描述表达式求值的两种解法:双栈结构和二叉树

    Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...