浅析现代计算机启动流程
文章目录
- 前言
- 启动流程概述
- 磁盘分区格式
- MBR磁盘
- GPT磁盘
- 隐藏分区
- 传统BIOS引导
- 传统BIOS启动流程
- UEFI引导
- UEFI引导程序
- UEFI启动流程
- 引导加载程序
- 启动操作系统
- 相关参考
前言
现代计算机的启动是一个漫长的流程,这个流程中会涉及到各种硬件的配置与交互,包括硬件状态检测、设备配置等,并最终引导到用户可操作的操作系统界面。
启动流程概述
现代计算机的启动流程总体上可以分成三个阶段:BIOS/UEFI启动阶段、引导加载程序以及启动操作系统。如下:

其中:
- BIOS/UEFI阶段:完成上电自检、基本硬件初始化,选择引导介质,并将控制权移交到引导介质上的加载程序;
- 引导加载程序:负责完成操作系统的选取,并引导对应的操作系统;
- 启动操作系统:操作操作正式开始接管计算机,并对硬件继续进行初始化、加载驱动以及拉起系统服务,并最终进入人机交互界面。
对于普通计算机而言,主要还是从硬盘引导操作系统。

磁盘分区格式
BIOS和UEFI引导方式与磁盘采用的分区格式有对应的关系,因此在说明计算机启动流程之前,有必要对磁盘分区格式进行一定的了解。通常,我们在使用磁盘时都会对磁盘进行分区,并在分区上创建文件系统之后进行使用,这里涉及到了磁盘是如何管理这些分区信息的。目前有两个标准的分区技术可以被使用:MBR分区格式和GPT分区格式。
MBR磁盘
早期计算机基本都是采用MBR磁盘格式,并配合传统BIOS引导方式进行启动。MBR,全称Master Boot Record,即主引导记录,是一种将磁盘引导程序和磁盘分区信息保存在磁盘第一个扇区(扇区大小512B)的磁盘分区格式,其结构示意如下:

主引导扇区存储的内容包括:
- 引导程序:基于传统BIOS方式启动的计算机,在上电时会从磁盘第一个扇区加载引导程序到内存指定位置,并进行启动。主引导记录可支持存储最长引导程序大小为448字节;
- DPT分区表:主引导记录使用64字节大小的空间,最多可记录4个分区的信息,这也是在windows系统下最多只能创建4个主分区的原因,但可以将其中主分区信息设置成扩展分区,扩展分区又可以继续划分成多个逻辑分区;
- 结束符:主引导扇区结束标识。
由于MBR只使用磁盘的第一个扇区来保存分区表信息,这导致了一系列限制,例如划分的主分区数量不能超过4,最大只能识别2TB左右的分区空间。此外,若第一个扇区遭到损坏,所有的分区信息都会丢失。
GPT磁盘
为了破除只有512个字节的MBR分区表的许多限制,技术人员对硬盘分区表的标准进行了升级,提出了新的 GUID Partition Table(全局唯一标识磁盘分区表),简称 GPT 分区表。GPT磁盘的结构示意如下:

对GPT磁盘的关键结构进行说明如下:
- 保护MBR:GPT磁盘为了保持与MBR磁盘的兼容性,将磁盘的第一个扇区定义为保护MBR。GPT分区技术本身不会使用到这个扇区。同时为了防止一些MBR磁盘工具破坏GPT磁盘的分区信息;
- GPT头:
- GPT分区表:从第2扇区到第33扇区,用于记录分区表信息;
- 分区区域:磁盘数据分区;
- GPT备份区域:包含GPT分区表备份和GPT头备份,若GPT头部和分区表遭到损坏,可以通过备份区域进行恢复。
隐藏分区
GPT磁盘还包含了两个隐藏分区:
- ESP分区:EFI系统分区,主要用于在EFI平台上引导操作系统,可以存放EFI引导程序、驱动程序以及系统维护工具等;
- MSR分区:微软保留分区,与Windows操作系统相关,其它操作系统可以不关心。
传统BIOS引导
BIOS,Basic Input System,即基本输入输出系统,是一组固化在计算机主板上一个只读存储器芯片的程序,保存着计算机最初始的系统配置信息、上电自检程序和系统初始化程序。

传统BIOS启动流程
BIOS的工作流程和功能可以分为以下几个主要方面:
- 上电自检:系统上电后,会首先加载BIOS程序执行。BIOS程序启动后会进行上电自检;
- 准备硬件:BIOS设置并准备好电脑的主要硬件,比如CPU和硬盘,为启动操作系统做好准备。
- 引导过程:BIOS确定从哪个设备(硬盘、U盘等)启动电脑,并开始加载操作系统。
- 系统设置:BIOS提供一个界面,让用户可以设置或更改电脑的硬件配置。
UEFI引导
UEFI,统一可扩展固件接口,用于替代传统BIOS的引导方式。

UEFI引导程序
UEFI引导方式主要与GPT磁盘进行配合完成计算机的启动。在前面提到过,GPT磁盘中包含了ESP隐藏分区,用于存放EFI引导程序。EFI引导程序会在计算机启动后,被UEFI固件加载继续执行引导流程。对于不同处理器平台,UEFI规范定义的EFI引导程序名称存在差异。
| 硬件平台 | 文件名 | PE可执行机器类型 |
|---|---|---|
| 32-bit | BOOTIA32.EFI | 0x14c |
| x64 | BOOTx64.EFI | 0x8664 |
| AArch32 | BOOTARM.EFI | 0x01c2 |
| Aarch64 | BOOTAA64.EFI | 0xAA64 |
在此以Armv8平台为例,可以查看ESP分区(通常会被挂载到/boot/efi目录)下的EFI引导程序信息:
[root@localhost BOOT]# file BOOTAA64.EFI
BOOTAA64.EFI: MS-DOS executable PE32+ executable (EFI application) Aarch64 (stripped to external PDB), for MS Windows
UEFI启动流程
UEFI的启动流程相对简化了很多,在系统上电后,UEFI固件被加载执行,在UEFI完成基本的系统配置后,会从ESP分区查找指定的EFI引导程序并执行,随后所有的流程便由EFI引导程序接管。
引导加载程序
启动操作系统
相关参考
- 《Gentoo Handbook》
相关文章:
浅析现代计算机启动流程
文章目录 前言启动流程概述磁盘分区格式MBR磁盘GPT磁盘隐藏分区 传统BIOS引导传统BIOS启动流程 UEFI引导UEFI引导程序UEFI启动流程 引导加载程序启动操作系统相关参考 前言 现代计算机的启动是一个漫长的流程,这个流程中会涉及到各种硬件的配置与交互,包…...
七月论文审稿GPT第2.5和第3版:分别微调GPT3.5、Llama2 13B以扩大对GPT4的优势
前言 自去年7月份我带队成立大模型项目团队以来,我司至今已有5个项目组,其中 第一个项目组的AIGC模特生成系统已经上线在七月官网第二项目组的论文审稿GPT则将在今年3 4月份对外上线发布第三项目组的RAG知识库问答第1版则在春节之前已就绪至于第四、第…...
Android Studio导入项目 下载gradle很慢或连接超时
AS最常见的问题之一就是下载gradle非常慢,还经常出现下载失败的情况,没有gradle就无法build项目,所以一定要先解决gradle的下载问题,下面教大家两种常用方法 手动下载压缩包并替换 1、关闭Android Studio,复制下面的网…...
如何使用VSCode上运行Jupyter,详细案例过程出可视化图
Python作为最受AI喜欢的语言之一,我们与大家共同学习下如何在VS Code上运行Jupyter,并且用简单案例实现出图。 环境 VS Code version: 1.80.1 Python: 3.12.0 小白安装过程: 在准备好基础环境,小白心想,AI可是霸占科…...
Linux中有名管道和无名管道
无名管道基础 进程间通信介绍 常用通信方式 无名管道(pipe) 有名管道 (fifo) 信号(signal) 共享内存(mmap) 套接字(socket)过时的IPC通信方式 System V IPC 共享内存(sh…...
[SWPUCTF 2021 新生赛]easyupload1.0
发现是上传文件第一想到是文件木马 <?php eval ($_POST[123]);?>木马上传burp修改后缀发现flag里面这个是假的 我们猜想是在phpinfo我们上传<?php eval(phpinfo(););?>木马上传burp修改后缀里面 CtrlF 发现flag...
【Linux网络编程三】Udp套接字编程(简易版服务器)
【Linux网络编程三】Udp套接字编程(简易版服务器) 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…...
【Rust】字符串,看这篇就够了
这节课我们把字符串单独拿出来讲,是因为字符串太常见了,甚至有些应用的主要工作就是处理字符串。比如 Web 开发、解析器等。而 Rust 里的字符串内容相比于其他语言来说还要多一些。是否熟练掌握 Rust 的字符串的使用,对 Rust 代码开发效率有很…...
单片机和 ARM 的区别
单片机和 ARM 在功能和使用上有一些区别,因此哪个更好用取决于具体的需求和场景。 单片机是一种集成了微处理器、存储器和外设接口的集成电路芯片,通常具有体积小、功耗低、可靠性高、成本低等特点。单片机广 泛应用于各种领域,如智能仪表、工…...
JavaScript从入门到精通系列第三十一篇:详解JavaScript中的字符串和正则表达式相关的方法
文章目录 知识回顾 1:概念回顾 2:正则表达式字面量 一:字符串中正则表达式方法 1:split 2:search 3:match 4:replace 知识回顾 1:概念回顾 正则表达式用于定义一些字符串的…...
23、数据结构/查找相关练习20240205
一、请编程实现哈希表的创建存储数组{12,24,234,234,23,234,23},输入key查找的值,实现查找功能。 代码: #include<stdlib.h> #include<string.h> #include<stdio.h> #include<math.h> typedef struct Node {int data;struct n…...
【VSTO开发-WPS】下调试
重点2步: 1、注册表添加 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\WPP\AddinsWL] "项目名称"""2、visual studio 运行后,要选中附加到调试,并指定启动项目。 如PPT输入WPP搜…...
git 的基本概念
当使用Git时,一些基本概念包括: 1. **仓库(Repository):** 存储项目文件和版本历史的地方。可以是本地仓库(在你的计算机上)或远程仓库(在服务器上)。 2. **提交&#…...
《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第6章 逻辑斯谛回归与最大熵模型(1)6.1 逻辑斯谛回归模型
文章目录 第6章 逻辑斯谛回归与最大熵模型6.1 逻辑斯谛回归模型6.1.1 逻辑斯谛分布6.1.2 二项逻辑斯谛回归模型6.1.3 模型参数估计6.1.4 多项逻辑斯谛回归 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第3章 k邻近邻法 《统计学习…...
Go 中如何检查文件是否存在?可能产生竞态条件?
嗨,大家好!本文是系列文章 Go 技巧第十三篇,系列文章查看:Go 语言技巧。 Go 中如何检查文件是否存在呢? 如果你用的是 Python,可通过标准库中 os.path.exists 函数实现。遗憾的是,Go 标准库没有…...
红日靶场1搭建渗透
环境搭建 下载好镜像文件并解压,启动vmware 这里我用自己的win7 sp1虚拟机作为攻击机,设置为双网卡NAT,vm2 其中用ipconfig查看攻击机ip地址 设置win7 x64为双网卡,vm1,vm2 设置win08单网卡vm1,win2k3为单…...
ChatGPT之搭建API代理服务
简介 一行Docker命令部署的 OpenAI/GPT API代理,支持SSE流式返回、腾讯云函数 。 项目地址:https://github.com/easychen/openai-api-proxy 这个项目可以自行搭建 OpenAI API 代理服务器工具,该项目是代理的服务器端,不是客户端。…...
Kotlin手记(一):基础大杂烩
Kotlin简介 2011年7月,JetBrains推出Kotlin项目,这是一个面向JVM的新语言 2012年2月,JetBrains以Apache 2许可证开源此项目。 2016年2月15日,Kotlin v1.0发布,这被认为是第一个官方稳定版本。 在Google I/O 2017中&am…...
redis源码之:集群创建与节点通信(2)
在上一篇redis源码之:集群创建与节点通信(1)我们可知,在集群中,cluster节点之间,通过meet将对方加入到本方的cluster->nodes列表中,并在后续过程中,不断通过clusterSendPing发送p…...
2024.2.5 寒假训练记录(19)
文章目录 牛客 寒假集训2A Tokitsukaze and Bracelet牛客 寒假集训2B Tokitsukaze and Cats牛客 寒假集训2D Tokitsukaze and Slash Draw牛客 寒假集训2E Tokitsukaze and Eliminate (easy)牛客 寒假集训2F Tokitsukaze and Eliminate (hard)牛客 寒假集训2I Tokitsukaze and S…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
