当前位置: 首页 > news >正文

计算机启动的时候,OS都干了啥事。

建议在电脑上看,手机上格式有点问题,认真读,这方面没问题的,肝了一天。

一.计算机启动直观图

在这里插入图片描述

二.步骤详解

1.开机阶段

 当按下电源按钮,电源供应器开始为各个硬件组件供电。此时,CPU重置,从固定的内存地址开始执行代码。这个阶段主要涉及硬件初始化,但还没有进入BIOS或UEFI代码的执行。

a.电源接通:主板、CPU、内存等硬件开始供电。
b.CPU重置:CPU从固定地址(如x86的0xFFFF0)开始执行代码(BIOS入口)。
c.时钟与总线初始化:主板芯片组初始化时钟信号和总线协议(如PCIe)。

2.执行BIOS阶段

 BIOS(Basic Input Output System基本输入输出系统)存储在主板上的ROM中,CPU在重置后会跳转到BIOS的入口地址(通常是0xFFFF0),BIOS负责进行POST(Power-On Self Test)。
 CPU重置后PC指向的内存地址就是BIOS,且是ROM内存(ROM和RAM一起编制组成内存)。此后CPU开始按照该内存地区中的指令一步步执行,如检测硬件设备如内存、硬盘、键盘等是否正常。POST完成后,BIOS会按照预设的启动顺序(Boot Order)查找可启动设备(如硬盘)。:

a.硬件检测:检查内存、硬盘、键盘等关键设备是否正常,异常则通过蜂鸣器或屏幕提示报错。
b.中断初始化:初始化中断向量表(如INT 0x19用于加载引导程序)。
c.读取CMOS设置:按预设启动顺序(Boot Order)查找可启动设备(如硬盘、USB)。
d.加载引导扇区:从选中设备的第一个扇区(磁盘中的MBR)读取512字节到内存0x7C00。

注意:中断向量表(IVT)是计算机中用于处理中断和异常的数据结构,记录了每个中断号对应的处理程序地址。在启动过程中,BIOS阶段会初始化中断向量表,以便硬件中断能被正确处理。

3.执行引导记录(MBR)阶段

 BIOS找到启动设备后,会读取该设备的第一个扇区(即MBR,主引导记录),大小为512字节。MBR包含引导加载程序(引导加载PBR用的)和分区表。引导加载程序的任务是加载更复杂的引导程序(活动分区中的PBR),或者直接加载操作系统内核,然后将控制权交给操作系统。分区表则是记录了硬盘的分区信息。
 当CPU执行完BIOS程序之后,MBR内容已经载内存中了,CPU随之解析其内容并执行其一些列指令,如加载操作系统

a.解析MBR结构
 引导代码(446字节):加载并执行后续引导程序PBR用的。
 分区表(64字节):定义4个主分区信息(起始扇区、大小、类型等)。
 签名(2字节0x55AA):验证MBR有效性。
b.引导加载程序(用于加载PBR)
加载第二阶段引导程序PBR,或直接加载操作系统内核。
 切换至保护模式:设置GDT(全局描述符表)和IDT(中断描述符表)。
 传递内核参数:如根文件系统位置(root=/dev/sda1)。

注意:PBR(分区引导记录)位于每个分区的第一个扇区,用于加载该分区内的操作系统。
注意:MBR中存储的是用于引导加载PBR的引导程序,即操作系统的引导过程由MBR中的引导代码启动,然后跳转到活动分区的PBR执行进一步引导。
注意:

4.操作系统加载与初始化

 当MBR中的引导程序将PBR引导程序加载到内存时候,CPU会执行PBR中的一系列指令完成对操作系统的加载和初始化。

a.内核加载与初始化
 内核加载:引导程序将内核映像(如vmlinuz)加载到内存.
 内核初始化:
  1.初始化关键数据结构:GDT/IDT(定义内存段和中
   断处理程序),页表(启用分页机制)
  2.硬件探测与驱动加载:识别CPU、内存、磁盘控制
   器等,加载驱动程序。
  3.根文件系统挂载:根据引导参数挂载根分区。
b.用户空间初始化
 启动init进程:内核启动第一个用户进程(PID=1)。
 执行初始化脚本:如挂载文件系统,启动系统服务。
 登录界面就绪:启动显示管理器。

注意:MBR负责全局引导,PBR负责分区内引导。如此处就是MBR引导某分区PBR(通常为C盘),C盘中的活动分区PBR引导加载此盘中的操作系统。

3.最终流程和关注重点

 开机上电 → BIOS阶段(初始化IVT) → 加载MBR → 执行MBR引导代码 → 跳转至活动分区的PBR → 加载操作系统内核(挂载文件系统) → 系统启动完成

4.样例

http://www.xdnf.cn/news/254449.html

相关文章:

  • OpenHarmony - 驱动使用指南,HDF驱动开发流程
  • 【Linux】关于虚拟机
  • 【论文速递】2025年09周 (Robotics/Embodied AI/LLM)
  • Git 基本操作(二)
  • Java怎么实现一个敏感词过滤?有哪些方法?怎么优化?
  • 纹理对象创建
  • Nacos使用
  • 组件通信-props
  • 类与对象(中)
  • OnlyOffice Document Server 源码调试指南-ARM和x86双模式安装支持
  • < 自用文 Texas style Smoker > 美式德克萨斯烟熏炉 从设计到实现 (第一部分:烹饪室与燃烧室)
  • 类与类之间的关系详解
  • 部署Superset BI(二)再战Superset
  • 【信息系统项目管理师-论文真题】2013上半年论文详解(包括解题思路和写作要点)
  • AI编译器对比:TVM vs MLIR vs Triton在大模型部署中的工程选择
  • PyQt 或 PySide6 进行 GUI 开发文档与教程
  • 【东枫电子】AMD / Xilinx Alveo™ UL3422 加速器
  • MTV-SCA:基于多试向量的正弦余弦算法
  • GNOME扩展:ArcMenu的Brisk布局左右调换
  • 在Kali Linux上安装GNOME桌面环境完整教程
  • 【Linux系统】线程
  • 一种快速计算OTA PSRR的方法(Ⅰ)
  • open files 打开文件数
  • SALOME源码分析: JobManager
  • [更新完毕]2025五一杯B题五一杯数学建模思路代码文章教学: 矿山数据处理问题
  • php artisan resetPass 执行密码重置失败的原因?php artisan resetPass是什么 如何使用?-优雅草卓伊凡
  • PDF转换工具xpdf-tools-4.05
  • 【AI面试准备】AI误判案例知识库优化方案
  • 依赖倒置原则
  • AI外挂RAG:大模型时代的检索增强生成技术