简述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. DesignPattern系列__02接口隔离原则

    介绍 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小接口上. Demo引入 先来看一张图: interface MyInterface { void operation1(); ...

  2. 分布式ID系列之为什么需要分布式ID以及生成分布式ID的业务需求

    为什么需要分布式id生成系统 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店.猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID ...

  3. 90后iOS开发者的出路,如何规划30岁前的自己(程序员必修课)

    前言: 最近发生了一些和我们没有直接关系但是有间接关系的事情.比如华为“清洗”高龄基层员工,比如游戏公司2号员工拿不到股份而离职.先不说事实到底如何,起码很多码农是心有戚戚焉. 最近一年多也发生了一些 ...

  4. axios异步提交表单数据的不同形式

    踩坑Axios提交form表单几种格式 前后端分离的开发前后端, 前端使用的vue,后端的安全模块使用的SpringSecurity,使用postman测试后端的权限接口时发现都正常,但是使用vue+ ...

  5. 【C/C++】随机数的生成

    C/C++:rand()函数 rand()函数的头文件:#include<stdlib.h> 该函数产生的随机数随机性差,速度慢,周期小(0-32767) 用法如下所示: #include ...

  6. JavaWeb——JSP开发1

    1.什么是jsp,为什么要使用jsp. 再使用idea创建完一个web工程后,在webapp目录下会生成一个index.jsp 直接编译运行,网站将自动打开这样一个网页: 所以我们可以推测这个inde ...

  7. Window.open使用总结

    前言 今天在项目中,突然看到window.open的使用,感觉还是很神奇,突然心血来潮查看了window.open的用法. 用途 主要用于在打开网站时弹出的其他窗口.用于通知广告一类的. 用法 win ...

  8. 减谈迷宫C++

    今天老师让做了个迷宫问题,我一看到就发现和我之前写过的一个程序是一样 的,但是在后来编写的时候有一个地方搞错了,最后下课了我还是没有正确的编写好,然后今天回来之后自己有看了一下,现在已经解决了. #i ...

  9. vue.js中ref及$refs的使用及讲解

    关于ref和$refs的用法及讲解,vue.js中文社区( https://cn.vuejs.org/v2/api/#ref )是这么讲解的: ref 被用来给元素或子组件注册引用信息,引用信息将会注 ...

  10. cs231n---语义分割 物体定位 物体检测 物体分割

    1 语义分割 语义分割是对图像中每个像素作分类,不区分物体,只关心像素.如下: (1)完全的卷积网络架构 处理语义分割问题可以使用下面的模型: 其中我们经过多个卷积层处理,最终输出体的维度是C*H*W ...