Linux系统启动柜过程

linux系统启动过程

启动过程可以分为6步:POST–>BIOS–>MBR(GRUB)–>Kernel–>Init–>Runlevel。POST为Power On Self test,MBR(GRUB)其实也可以分开来讲,MBR的作用是去引导记录,为GRUB做准备。

各过程解析

POST

POST为加电自检的过程,检查cpu、内存、磁盘等硬件单元。一般来说,这个步骤可以归类到BIOS中。

BIOS

BIOS全称Basic Input/Output System,基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检的过程,然后会加载bios程序到内存中,BIOS一个主要的功能就是存储磁盘的启动顺序,BIOS会按照启动顺序去查找第一个磁盘头的MBR信息,并加载和执行MBR中的BootLoader程序,若第一个磁盘不存在MBR,则会查找第二个磁盘,一旦BootLoader程序被检测并加载内存中,BIOS就将控制权交接给了BootLoader程序。

MBR

MBR全称Master Boot Record,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。

GRUB

GRUB(Grand Unified Bootloader),多系统启动程序,其执行过程可分为三个步骤:

  • Stage1:这个其实就是MBR,它的主要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5
  • Stage1_5:该步骤就是为了识别文件系统
  • Stage2:GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。

PS:实际上这个步骤/boot还没被挂载,GRUB直接识别grub所在磁盘的文件系统,所以实际上应该是/grub/grub.conf文件

    grub.conf: #boot=/dev/sdadefault=0        #设定默认启动的title的编号,从0开始timeout=5       #等待用户选择的超时时间splashimage=(hd0,0)/boot/grub/splash.xpm.gz    #GRUB的背景图片hiddenmenu     #隐藏菜单title CentOS (2.6.18-194.el5PAE)      #内核标题root (hd0,0)         #内核文件所在的设备kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/     #内核文件路径以及传递给内核的参数initrd /initrd-2.6.18-194.el5PAE.img                            #ramdisk文件路径

kernel

Kernel,内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件,initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。
Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序。

Init

init,初始化,顾名思义,该程序就是进行OS初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,简单讲下这个脚本的任务(可以去看看实际脚本,看看都做了什么):

  1. 激活udev和selinux
  2. 根据/etc/sysctl.conf文件,来设定内核参数
  3. 设定系统时钟
  4. 装载硬盘映射
  5. 启用交换分区
  6. 设置主机名
  7. 根文件系统检测,并以读写方式重新挂载根文件系统
  8. 激活RAID和LVM设备
  9. 启用磁盘配额
  10. 根据/etc/fstab,检查并挂载其他文件系统
  11. 清理过期的锁和PID文件

执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。

Runlevel

runlevel,运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种

0:关机模式

1:单一用户模式(直接以管理员身份进入)

2:多用户模式(无网络)

3:多用户模式(命令行)

4:保留

5:多用户模式(图形界面)

6:重启

在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本

Run level 0 – /etc/rc.d/rc0.d/
Run level 1 – /etc/rc.d/rc1.d/
Run level 2 – /etc/rc.d/rc2.d/
Run level 3 – /etc/rc.d/rc3.d/
Run level 4 – /etc/rc.d/rc4.d/
Run level 5 – /etc/rc.d/rc5.d/
Run level 6 – /etc/rc.d/rc6.d/
这些目录下的脚本只有K和S开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

释放WebKit潜能:硬件加速的秘诀与实战

释放WebKit潜能:硬件加速的秘诀与实战 在当今快速发展的Web开发领域,性能优化已成为开发者们关注的焦点。WebKit作为众多流行浏览器的内核,其渲染性能直接影响到用户的浏览体验。本文将深入探讨如何通过硬件加速来释放WebKit的潜能&#xff…

面试题之一

路由的两种模式:hash模式和 history模式。 两种的区别、如何实现。 hash模式中#的作用 vue性能优化。具体如何实现(回答了一个可以函数引入的方法引入路由。问) keep-alive 说一下EventBus CSS: flex布局 css新特性 盒子模型 J…

STM32的EXTI简介

一,EXTI(External Interrupt)外部中断事件控制器 什么是EXTI? 1.监测指定的GPIO口的电平信号变化,并检测到指定条件时,向内核的中断控制器NVIC发出中断申请。NVIC在裁决后,如果满足条件&#xf…

pytest-自动执行固件

目前为止,所有固件的使用都是手动指定,或者作为参数,或者使用 usefixtures。 如果我们想让固件自动执行,可以在定义时指定 autouse 参数。 下面是两个自动计时固件,一个用于统计每个函数运行时间(functio…

4-linux获取命令帮助方式

目录 查看命令帮助 命令搜索 查看命令帮助 在使用的过程中获取命令注释和帮助非常重要,相当于R语言中的help查看函数的使用功能。 [root####### ~]# whatis ls ls (1) - list directory contents[root############ ~]# ls --help 用法&#xff1…

【自然语言处理】司法阅读理解

司法阅读理解 1 任务目标 1.1 任务说明 裁判文书中包含了丰富的案件信息,比如时间、地点、人物关系等等,通过机器智能化地阅读理解裁判文书,可以更快速、便捷地辅助法官、律师以及普通大众获取所需信息。 本次任务覆盖多种法律文书类型&am…

半个月从几十升粉到500(发红包喽)

目录 1. 背景2. 涨粉秘籍2.1 持续创作高质量内容2.1.1 保持频率2.1.2 技术文章为主2.1.3 图文并茂 2.2 积极参与社区活动2.2.1 社区分享2.2.2 发文活动 2.3 互动与建立信任2.3.1 与读者互动2.3.2 红包互动2.3.3 动态分享 2.4 标题与内容的优化2.4.1 标题吸引2.4.2 内容实用 2.5…

【AI应用探讨】—支持向量机应用场景

目录 1. 文本分类 2. 图像识别 3. 生物信息学 4. 金融预测 5. 其他领域 1. 文本分类 垃圾邮件过滤:SVM通过训练大量标记为垃圾邮件和非垃圾邮件的样本,学习出能够区分两者的模型,从而实现对新邮件的自动分类。情感分析:在社…

Anaconda 和 Python 的区别及其重要性

引言 Python 是一种广泛使用的编程语言,特别是在数据科学、机器学习和科学计算领域。随着 Python 的普及,许多开发工具和环境也应运而生,其中 Anaconda 是一个非常流行的 Python 发行版。本文将探讨 Anaconda 和 Python 的区别,A…

【面试分享】嵌入式面试题常考难点之关于单链表的增删改查

文章目录 【面试分享】嵌入式面试题常考难点之关于单链表的增删改查一、单链表结点定义二、增(Create)——插入结点1. 于链表头部插入结点(头插法)2. 于链表尾部插入结点(尾插法)3. 于链表中间插入结点3-1.…

Listary(Windows 文件搜索工具)专业版值得购买吗?

说到经典的国货软件,有一款 Win 软件是一定绕不过去的。它就是知名的本地文件搜索工具 Listary! 便捷的文件搜索窗口;快捷操作的体验;与系统更匹配的外观设计;更智能的排序和更可靠的索引。 便捷的文件搜索窗口 紧凑…

Java基础(三)——类和对象、构造方法

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

HarmonyOS Next开发学习手册——弹性布局 (Flex)

概述 弹性布局( Flex )提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等。 容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴…

昇思MindSpore学习笔记9--保存与加载

摘要: 昇思MindSpore支持checkpoint和MindIR两种形式的模型保存和加载。 保存和加载模型,便于微调fine-tune和后续的模型推理与部署。 一、环境准备 安装minspore模块 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.c…

多见线程方法

多见线程方法 本节的类代码可以查看上一节的类代码 线程暂停 Thread.sleep(1000);//暂停1000毫秒这就有点像在时间里面学习的*sleep()*函数了 package multiThread2;public class main {public static void main(String[] args) {Animal a1 new Animal("张三",1…

PHP电商系统开发指南数据库管理

回答:数据库管理是电商系统开发的关键,涉及数据的存储、管理和检索。选择合适的数据库引擎,如mysql或 postgresql。创建数据库架构,定义数据的组织方式(如产品表、订单表)。进行数据建模,考虑实…

第四回 把全部的操作系统代码从硬盘搬到内存

此时操作系统的短短几行代码,就将数据段寄存器ds和代码段寄存器cs设置为了0x9000,方便了之后访问代码及访问数据。并且,将栈顶地址ss:sp设置在了离代码的位置0x9000足够遥远的0x9FF00处,保证栈向下发展不会轻易撞见代码的位置。 简单地说,就是设置了如何访问数据的数据毒…

K8s node节点替换

K8s node节点替换 一、node节点下线二、node节点上线 一、node节点下线 1.将节点设置为不可调度&#xff0c;防止Pod调度在此节点 # kubectl cordon <node-name># 执行后kubectl get nodes 可以查看到该节点有SchedulingDisable字段2.驱逐该节点所有Pod # kubectl dra…

C++ 设计模式之组合模式

C 设计模式之组合模式 简介 1、组合模式&#xff08;Composite&#xff09;是一种将对象组合成树形结构以表示“部分-整体”的层次结构&#xff0c;使得用户对单个对象和组合对象的使用具有一致性。在组合模式中&#xff0c;客户端将一组对象当作一个单一的对象来处理&#x…

java笔记(30)——反射的 API 及其 使用

文章目录 反射1. 什么是反射2. 获取class字段&#xff08;字节码文件对象&#xff09;方式1方式2方式3应用 3. 获取构造方法和权限修饰符前期准备获取所有的公共构造方法获取所有的构造方法获取无参构造方法获取一个参数的构造方法获取一个参数的构造方法获取两个参数的构造方法…