简述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. Socket编程:UDP和TCP概论及案例

    网络编程的三要素: 1.IP地址  2.端口 3.协议 什么是Socket? Socket就是通信链路的端点称"套接词". 基于TCP协议的Socket网络通信: 用来实现双向安全 ...

  2. ubuntu安装伪分布式Hadoop3.1.2

    作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3223 本文是基于已经安装好的ubuntu环境上搭建伪分布式hadoop,在 ...

  3. java并发编程(二十四)----(JUC集合)ArrayBlockingQueue和LinkedBlockingQueue介绍

    这一节我们来了解阻塞队列(BlockingQueue),BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,当容量满时往BlockingQ ...

  4. Security Guards (Gym - 101954B)( bfs + 打表 )

    题意及思路 题目主要是讲先给出所有guard的位置,再给出所有incidents的位置,求出guard到达每个incident处最小的steps,其中guard每次可以向四周8个方向移动. 思路:对于 ...

  5. JVM 栈帧之操作数栈与局部变量表

    目录 前置知识 引子 基于寄存器的设计模式 基于栈的设计模式 一个简单的例子 如何查看局部变量表? 实例方法中的局部变量表 结论 前置知识 阅读本文需要对以下知识有所了解: * 栈 * 汇编 * Ja ...

  6. laya 下以光标为中心缩放对象

    private MouseWheel(e: Laya.Event) { console.log("event"); let currentSp = e.target as Laya ...

  7. ggplot2: how to check the color and coreponding value pairs

    The way to check the color and coreponding value pairs in ggplot2 To see what colors are used to mak ...

  8. ubuntu16.04安装Ros(kinetic版本)【亲测好用】

    准备 1.ubuntu16.04 64位桌面版 ps:关于系统的下载和安装这里不做介绍,请自行百度,不是介绍重点 2.更改源 图上的几个勾默认是选上的,如果没有选上,选成上图这样(如果修改过勾,点击关 ...

  9. Leetcode solution 124: Binary Tree Maximum Path Sum

    Problem Statement Given a non-empty binary tree, find the maximum path sum. For this problem, a path ...

  10. NN入门,手把手教你用Numpy手撕NN(一)

    前言 这是一篇包含极少数学推导的NN入门文章 大概从今年4月份起就想着学一学NN,但是无奈平时时间不多,而且空闲时间都拿去做比赛或是看动漫去了,所以一拖再拖,直到这8月份才正式开始NN的学习. 这篇文 ...