为什么80%的码农都做不了架构师?>>>   

一、linux系统的启动流程

关于linux系统的启动流程我们可以按步进行划分为如下:

POST加电自检-->BIOS(Boot Sequence)-->加载对应引导上的MBR(bootloader)-->主引导设置加载其BootLoader-->Kernel初始化-->initrd—>/etc/init进程加载/etc/inittab,其进程流程图如下:

二、剖析详细启动过程

⑴、

POST开机自检:电脑主机打开电源的时候,随后会听到滴的一声,系统启动开始了开机自检(POST-power on selftest)自检开始),这个过程中主要是检测计算机硬件设备比如:CPU,内存,主板,显卡,CMOS等设备是否有故障存在,如果有硬件故障的话将按两种情况理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理),如果没有故障,POST完整自己的接力任务,将尾部工作交接给BIOS处理。

⑵、

BIOS:计算机加电自检完成后第一个读取的地方就是就是BIOS(Basic Input Output System,基础输入输出系统),BIOS里面记录了主机板的芯片集与相关设置,如CPU与接口设备的通信频率、启动设备的搜索顺序、硬盘的大小与类型、系统时间、外部总线、各种接口设备的I/O地址、已经与CPU通信的IRQ中断信息,所以,启动如果要顺利启动,首先要读取BIOS设置。

⑶、

按照BIOS所设定的系统启动流程,如果检测通过,则根据引导次序(Boot Sequence)开始在第一台设备上支持启动程序,我们的启动设备主要包括硬盘、USB、SD等,我们一般用的是硬盘,然后进行读取第一个设备就是硬盘,第一个要读去的就是该硬盘的主引导记录MBR(Master Boot Record),然后系统可以根据启动区安装的引导加载程序(Boot Loader)开始执行核心识别的工作。【在此插一句:MBR程序只是找到只是硬盘分区内最前面的446个字节的Boot Loader】然后查找相关配置和定义。

⑷、

Boot Loader 加载Grub程序 在这个过程中主要靠Grub的引导开始的,Grub分为连个阶段:stage1:主要是Boot loaderstage 1.5:过渡stage2:主要是/boot/grub

通过上面我们可以发现linux的内核VMLnuz,grub、initrd都在/boot目录下

在/boot/grub/下面我们看到了熟悉的stage1,stage2及grub工具的配置文件  grub.conf,那么grub.conf内都定义了什么呐??

⑸、Kernel

根据Grub内的定义,grub读取完毕后就把下面的工作交个内核了。kernel主要是完成系统硬件探测及硬件驱动的初始化,并且以读写的方式挂载根文件系统(根切换),那么这里就出现了一个“先有鸡还是先有蛋的文件了”,具体是什么那?要想访问真正的根文件系统(rootfs)的话,就必须加载根文件系统中的设备,这时根文件系统又没有挂载,要挂载根文件系统又得加载根文件系统中的驱动程序,哪怎么办呢?为了解决这个问题,这是就用到了initrd文件了。  在来说下kernel初始化所要工作的内容做下简单总结:  探测硬件->加载驱动(initrd)->挂载根文件系统->rootfs(/sbin/init)

⑹、

到此止内核空间的相关工作已经完成,内核空间的任务开始向用户空间转移,内核空间通过一个间接的initrd(微型linux)向用户空间的/sbin/init过度,所以gurb开始引导内核转向initrd。initrd:一个虚拟的文件系统,里面有lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目录,其实你会发现里面的目录有点像真的/对吧,所以我们称之为虚拟的根文件系统,作用就是将kernel和真的根文件系统建立关联关系,让kernel去initrd中加载根文件系统所需要的驱动程序,并以读写的方式挂载根文件系统,并让执行用户当中第一个进程init。

下面我们看下init脚本内的内容:

从上面的脚本内容我们可以看到init进程的主要工作:

挂载 :将initrd中的/proc, /sys  /dev 挂载到当前的主分区中的相应目录  创建目录:/dev/mapper  通过mknod完成block or character special files的创建  相关模块的挂载  创建root设备  挂载 /sysroot  最后完成根切换

⑺、init执行完毕以后会启动系统内的/etc/inittab文件,来完成系统系统的初始化工作。下面我们来介绍一下inittab这个配置文件内的详细内容

各个级别的定义:

默认运行级别

0:halt                      //关机  1: single user mode    //单用户维护模式)  2:multi user mode, without NFS  //不支持NFS功能  3: multi user mode, text mode     //字符界面  4:reserved   //系统保留  5: multi user mode, graphic mode   //图形化界面  6: reboot   //重启

/etc/inittab格式及语法(:)

[选项]:[runlevel]:[行为]:[命令]行为:  initdefault:代表默认运行级别  sysinit:代表系统初始化操作选项  ctrlaltdel:代表重启的相关设置  wait:代表上一个命令执行结束后方可执行下面的操作  respawn:代表后面字段可以无限制再生(reboot)命令选项  一些命令,不过通常都是脚本

下面说下inittab内定义的初始化脚本:rc.sysinit  --/etc/rc.d/rc.sysinit

如上图所示:rc.sysinit脚本内定义了一些与系统初始化的定义设定主机名检测并挂载/etc/fstab中其他文件系统启动swap分区/etc/sysctl.conf设定内核参数装载键映射-->键盘上每个键的功能然后根据系统运行级别运行相关的服务脚本:/etc/rc.d/init.d/脚本和/etc/rc.d/rc#d

rc0-rc6目录下脚本:K*     ##只要是以K开头的文件均执行stop工作  S*     ##只要是以S开头的文件均执行start工作  0-99  (执行次序,数字越小越先被执行)用户自定义开机启动程序(/etc/rc.d/rc.local)  可以根据自己的需求将一些执行命令或是脚本写到/etc/rc.d/rc.local里,当开机时,就可以加载啦

三、总结

系统初始化的大致内容总结如下:

硬件的初始化,图像界面启动的初始化(如果设置了默认启动基本)  主机RAID的设置初始化,device mapper 及相关的初始化,  检测根文件系统,以只读方式挂载  激活udev和selinux  设置内核参数 /etc/sysctl.conf  设置系统时钟  启用交换分区,设置主机名  加载键盘映射  激活RAID和LVM逻辑卷  挂载额外的文件系统 /etc/fstab  最后根据mingetty程序调用login让用户登录->用户登录(完成系统启动) 在系统启动过程中主要的脚本和目录有: boot /grub /boot/grub/grub.conf /boot/initrd+内核版本 /initrd文件中的/proc/  /sys/    /dev/ 目录的挂载 及根的切换 /etc/inittab  脚本 /etc/rc.d/rc.sysinit  脚本 等

转载于:https://my.oschina.net/liting/blog/390087

linux系统开机过程相关推荐

  1. linux系统开机过程描述

    本文描述linux系统开机过程,属于个人理解范畴,如果文中表述有误请大家批评指正! 计算机开机之后,首先要加载BIOS(基本输入输出系统)信息,BIOS包含了很多重要的信息,包括CPU信息,设备启动顺 ...

  2. Linux系统开机过程详细分析

    各位是否曾经对电脑整个开机的流程感到好奇呢 ? 这一次 , 我们所要讨论的  主题 , 就是 Linux 从开机的一瞬间到 login 为止 , 到底发生了什么事情 ? 想必各位都知道 , 在刚开机时 ...

  3. linux 更改 引导分区,Linux系统引导过程及引导修复

    0.Linux系统引导过程: 1.通电 2.bios初始化 3.磁盘引导阶段 4.grub2文件引导程序 5.内核加载 6.系统初始化镜像 7.系统启动级别 8.超级用户密码 以下内容是针对各过程会出 ...

  4. linux 重启_四步见证linux系统重启过程,小心操作,防止后悔!

    linux小白到大神的成长之路:四步见证linux系统重启过程,小心操作,防止后悔! 本经验由宗龙龙原创,全文共880多字,阅读需要14分钟! 记得上篇文章给大家讲述linux系统的重启与关机操作,但 ...

  5. Linux系统开机启动流程介绍

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

  6. linux 开机速度 固态,Windows/Linux系统开机OCZ胜出

    SSD评测报告 以下是相关测试项目结果: Windows系统开机效率 作业系统的开机过程,对於硬盘.SSD来说,是相当重要的测试,因为复杂的开机文件读入,是很好的综合性读入评量,也反应最终用户操作计算 ...

  7. Linux系统引导过程及引导修复详解

    Linux系统引导过程及引导修复 前言: 在我们启动Linux系统时,需要先通电,接着系统会自动进行bios初始化,对硬件进行检测并初始化硬件时钟,之后就进入了 Linux系统引导过程.Linux系统 ...

  8. Linux系统引导过程(BIOS和Bootloader部分)

    Linux系统引导过程(BIOS和Bootloader部分) 刘建文( http://blog.csdn.net/keminlau ) KEY:x86体系 CPU 系统引导 启动过程 Linux LI ...

  9. linux开机引导进程是什么,Linux系统开机启动流程介绍

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

最新文章

  1. 新手推荐!天池数据挖掘挑战赛,2019全球数据智能大赛正式启动!60万奖金等你来拿...
  2. 必读!TOP10生成对抗网络GAN论文(附链接)
  3. mysql字段默认值不生效的问题解决(上)
  4. 大量linux内存被cached
  5. pom.xml中的常用依赖包总结
  6. 关于 Web Deployment Projects
  7. matlab数学实验课件4,数学实验4_数学实验_doc_大学课件预览_高等教育资讯网
  8. js php调用webservice,php调用web services两种方法soap和curl
  9. 树莓派安装mysql5.6_Linux上安装MySQL5.6
  10. 手把手教你用杰奇建小说站
  11. 《明朝那些事儿》读书笔记
  12. LWN:让内核支持符合FIPS规范的随机数!
  13. 爬虫6_周杰伦新歌《Mojito》B站弹幕分析
  14. 友宝在线在港交所上市申请“失效”:连续两年亏损,王滨为大股东
  15. ArcGIS教程:最小值和最大值条形图
  16. 昨日伦镍交易无效静待上海处理结果,橡胶认购大涨,印尼神油强势涨停YP新低2022.3.9
  17. zbt (Steam游戏道具)自动发货
  18. golang打造p2p网络
  19. python 3D绘图 基础
  20. Package com.** signatures do not match previously installed version; ignoring

热门文章

  1. Linux 部署.NetCore 站点
  2. CNC数据采集解决方案(2023杭州乐芯科技)
  3. 没办法计算机快捷键,快捷键Ctrl+Shift无法切换输入法没响应的解决办法
  4. atmega8a -pu设置熔丝位,atmega8a -pu最小系统
  5. php ci框架开发手册下载,php敏捷开发codeigniter框架-CodeIgniter教程(中文手册)pdf格式免费完整版-东坡下载...
  6. vnc 软件 linux,vnc-E4_6_2-x86_x64_win32远程桌面linux工具下载
  7. 【C++】C++函数需要有返回值,但非全分支return(RVO)
  8. kubernetes集群内部DNS解析原理
  9. vidaa4基于android,Vidaa 4系统:流畅且富有人性化_海信 LED55MU8600UC_液晶电视评测-中关村在线...
  10. 垃圾3D打印机Makerbot Replicator Z18 常见报错