电脑启动过程(超详细过程)
Linux启动过程(超详细过程)
- 一、前言
- 二、启动过程概述
- 三、加电自检及初始化
- 四、主引导记录
- 五、加载kernel
- 六、加载init
- 致谢
一、前言
我开始的时候写了一篇关于Linux启动过程的文章,但是不是特别详细,并没有从内核文件的角度去分析Linux的启动过程,今天这篇文章就会比较详细的介绍一下Linux内核的整个启动过程,如果你只是想简单的了解一下Linux是如何启动的话你可以看另一篇文章,如果你想要详细的了解一下Linux是如何启动的,那咱们就直接开始吧!
Linux启动过程详讲解
树莓派的启动流程
二、启动过程概述
Linux系统的启动过程并不复杂,其过程可以分为5个阶段:
BIOS自检 --> 读取主引导记录 --> 加载内核 --> 加载init --> 系统启动
但是我们不是简单的知道这些过程就可以了,我们今天要详细的了解一下每个过程是怎么实现的,每个过程是靠哪个硬件或软件来实现的。
但是我们不能满足与此,我们还需要对Linux启动过程有个更深的了解,下面我们就从上电开始给大家一步一步讲解Linux是如何启动的。
三、加电自检及初始化
当Linux上电后,电脑首先会进行硬件的自检,该过程主要检查电脑硬件有没有问题,比如电脑的CPU是否正常、系统主板是否正常、系统ROM BIOS
等是否正常。
在CPU生厂商生产CPU的时候会给CPU内置一系列指令,让CPU通电以后就在固定的内存(ROM)中寻找自检指令,进行自检。该自检程序是保存在主板上的ROM
寄存器内固化的BIOS程序,上电后该程序将自动执行。
当我们按下开机键后会自行FFFF0处的指令:JUMP POST;
跳转到加电自检,POST位于系统BIOS内部。
在POST中会查找显卡BIOS,并且调用显卡BIOS,完成显卡BIOS的初始化。完成BIOS调用后会依次执行相应设备的BIOS,执行相应设备的初始化,最后会显示启动画面。
完整的POST
自检包括对CPU、系统主板、基本的640KB
内存、1MB
以上的扩展内存、系统ROM BIOS
的测试、CMOS
中系统配置的校验、初始化视频控制器、测试视频内存、检验视频信号和同步信号,对VGA
接口进行测试、对键盘、软驱、硬盘及CDROM
子系统作检查、对并行口(打印机)和串行口(RS232
)进行检查。
自检中如发现有错误,将按两种情况处理:
- 对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;
- 对于非严重故障则给出提示或声音报警信号,等待用户处理;
BIOS的最后一项任务就是将MBR读入到内存中,
四、主引导记录
在完成BIOS后系统会从硬盘/软盘/光驱/U盘中读入操作系统(OS),并由操作系统接管计算机。在操作系统接管计算机之后操作系统会读取硬盘(软盘)的首扇区即主启动记录。
MBR 也就是主引导记录,位于硬盘的 0 磁道、0 柱面、1 扇区中,主要记录了启动引导程序和磁盘的分区表,我们通过下图来看看 MBR 的结构。
MBR并不存在于任何一个分区中,而是处于分区之上,里面存储着一段用于装载操作系统的小程序。
主启动记录总长度512个字节,主引导记录最后两个字符0xAA55h
,在分区表中会被分成不同的扇区,每个扇区又被分成不同的块,来执行不同的功能。
五、加载kernel
当主引导记录完成初始化读取到PBR后,主引导记录就会接加载内核kernel,内核kernel是以压缩的形式存储的,所以kernel会经历边解压边运行的过程,将内核加载到内存中运行。
GRUB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。这时内核开始替代 BIOS 接管 Linux 的启动过程了。
那么,Linux 的内核在 /boot
启动目录中,我们来看看这个目录下的内容吧。
config-5.4.0-122-generic:
内核的配置文件,内核编译时选择的功能与模块;initrd.img-5.4.0-122-generic:
虚拟文件系统;System.map-5.4.0-122-generic:
内核功能和内存地址的对应列表;lost+found:
boot分区的备份目录;grub:
启动引导程GTUB的数据目录;vmlinuz-5.4.0-122-generic:
用于启动的Linux内核。这个文件是一个压缩的内核镜像;
主引导程序不仅要加载kernel,还要负责加载Initial Ram Disk
,又被成为initrd
。其目的主要是为了保证一个小体积的内核。initrd
为一个简单的文件系统,它包含了一些内核必要的文件和模块。
基于此,首先将initrd
挂载为一个根系统,然后kernel利用这个基本的系统,来检测环境,加载更多的必要的模块。
在完成所有的加载后,这时kernel
已经完全准备就绪。此时initrd
对于kernel
来说,已经不需要了。这时,kernel
会将initrd
从根/
上卸载,并挂载上真正的根系统,并执行正常的启动程序。
六、加载init
Linux系统启动过程中通过init_task
创建0
号idle
进程。然后通过kernel_thread
创建1
号init
进程。创建该进程时通过系统调用,在内核空间执行用户空间的/sbin/init
程序,通过该程序产生出shell
,并依赖init
衍生出其他进程。
致谢
本文主要参考以下文章完成:
- Linux系统启动管理
- Linux内核加载全流程
- Linux启动流程详解
- 操作系统原理-华中科技大学
- Linux启动流程 | kernel执行第一个init应用程序的实现原理
电脑启动过程(超详细过程)相关推荐
- 【PyTorch】构造VGG19网络进行本地图片分类(超详细过程)——项目介绍
本篇博客主要解决以下3个问题: 如何自定义网络(以VGG19为例). 如何自建数据集并加载至模型中. 如何使用自定义数据训练自定义模型. 第一篇:[PyTorch]构造VGG19网络进行本地图片分类( ...
- VMware安装Centos7超详细过程(图文)
原文:https://www.jianshu.com/p/ce08cdbc4ddb?utm_source=tuicool&utm_medium=referral 本篇文章主要介绍了VMware ...
- VMware安装Centos7和卸载超详细过程(图文)
下载Centos7镜像 下载地址 提供几个下载Linux镜像的网站,这里我下载的是Centos7.9版本的系统,内核版本为3.10.0版本 国内外镜像源: 阿里云:http://mirrors.ali ...
- 使用Matlab工具箱(procamcalib)进行投影仪标定---超详细过程
使用Matlab工具箱(procamcalib)进行投影仪标定-超详细过程 一 .procamcalib工具箱应用场景 同于相机标定的方法和步骤,投影仪的原理通常被看作是相机成像的逆过程,网上关于相机 ...
- SVM支持向量机 超详细过程讲解
SVM支持向量机 超详细过程讲解 前言 一.线性模型 前言 此篇文章为B站浙大机器学习课程支持向量机部分的个人笔记,不喜勿喷.笔记顺序从线性模型到非线性模型,层层递进,十分易懂. 一.线性模型 先从一 ...
- 电脑技巧全书(超详细.)
目录检索(相关文章在对应的目录下找~~)~~ 1.最全的windows操作系统快捷键-------------------------------------1楼 2.Windows 开始→运行→ ...
- Windows10+YOLOV3+VisualStudio2017最新版本超详细过程
最近两天在看yolo项目,所以想着把作者的项目copy一下运行看一下效果,谁知道一不小心,陷入坑中无法自拔.真实感叹作者的厉害之处. 同时也记录了自己Windows10+YOLOV3+VisualSt ...
- Apache Hive 2.1.1 安装配置超详细过程,配置hive、beeline、hwi、HCatalog、WebHCat等组件...
2019独角兽企业重金招聘Python工程师标准>>> 在Docker环境成功搭建了Apache Hadoop 2.8 分布式集群,并实现了NameNode HA.ResourceM ...
- 【干货】Apache Hive 2.1.1 安装配置超详细过程,配置hive、beeline、hwi、HCatalog、WebHCat等组件...
在Docker环境成功搭建了Apache Hadoop 2.8 分布式集群,并实现了NameNode HA.ResourceManager HA之后(详见我的另一篇博文:Apache Hadoop 2 ...
最新文章
- c++ 怎么读取rtf文件_最全集合!Word、PPT、Excel、PDF文件转换方法大全!建议收藏...
- 【转】JavaScript事件顺序
- 当对象与原型有相同的属性,调用时的上下文指向问题
- 利用Virtual Audio Cable实现系统声音录制
- 【最详细解析】1052 卖个萌 (20分)_28行代码AC
- 迭代反投影法代码_程序员的数学笔记3--迭代法
- java空格 逗号_Java将字符串中的空格换为逗号
- codeforces 467A-C语言解题报告
- 专题导读:科学数据治理
- docker pull 国内镜像_MAC版 的最新Docker 2.2版本配置国内代理的解决办法
- JQuery选择器中含有冒号的ID处理差异的分析
- pythongetpass_Python模块之getpass模块的使用
- 有关古文的C语言编程题,文言文考试也编程,文言语言!!!(附c/c++自译)
- 多层感知机从零开始实现
- gmp计算机分类,GMP附录——计算机化系统汇总.pptx
- JavaScript 运算符
- 英文论文发表必备干货!SCI投稿7个阶段经典邮件模板,请拿走
- 《Metasploit魔鬼训练营》 第二、三章
- 靠写代码登上胡润富豪榜花半年写得Python基础 入门必看
- 亲情的矛盾都是因为爱而化解 写给17 岁的你