背景
作为一个应用软件工程师,对于系统的启动流程是非常的陌生,然而这段时间刚好架构调整到计算机事业部,所以就趁着这个机会,提升部分系统软件的知识,第一个当然是要先知道整个计算机的启动过程是什么样的,要有大概的认识,然后再从不同的步骤中去了解细节构建知识树,比如当电源供应后,CPU充值和初始化是在做什么操作,BIOS/UEFI的启动代码是放在哪个固定位置让CPU去找等等 所以这篇文章主要是从粒度比较粗的层面去讲解计算机是如何启动的,让我们开始来了解和这个过程。
过程
1. 电源供应
按下电源键后,电源供应单元(PSU)会给主板上的各个组件供电,包括CPU、内存、显卡等;
2. CPU重置和初始化
CPU得到电源之后,首先执行一个内置的启动程序,这个过程涉及到读取一个固定位置上的指令,这个位置通常是固件(BIOS/UEFI)所在的地方,在这个阶段,CPU处于一个预设状态,会自动寻找固件(BIOS/UEFI)的启动代码;
PS:CPU是第一个获得控制权的硬件组件
3. BIOS/UEFI激活
CPU找到了固件(BIOS/UEFI)的启动代码后,就开始执行它。这就激活了BIOS/UEFI;
PS:固件(BIOS/UEFI)位于主板上的非易失性存储器中,通常是闪存(Flash)
4. 自检过程(POST)
BIOS/UEFI立即开始执行POST,它检查计算机的基本硬件配置是否正确,如内存、显卡、键盘和其他必要的外围设备,如果检测到问题,系统可能会发出蜂鸣声或显示错误代码;
5. 硬件初始化和配置
POST之后,BIOS/UEFI会初始化系统硬件,设置必要的硬件参数和配置(比如设置CPU、内存的工作模式,配置硬盘、键盘、鼠标等外设),以便操作系统可以正确地使用这些硬件;
PS:UEFI比传统BIOS启动快,有一个原因是UEFI能够并行地初始化硬件设备,而不是像BIOS那样,按照一定顺序逐个进行
6. 引导设备选择
BIOS/UEFI接下来回根据设置的启动顺序,从可能得启动设备中(如硬盘、USB设备、网络、光驱)查找启动扇区,同时会检查其中的启动信息是否有效?对于传统的BIOS系统,要查找有效的MBR(主引导记录);对于使用UEFI的系统,这涉及到查找EFI系统分区上的EFI启动加载程序
7. 引导加载程序(Bootloader)
一旦BIOS/UEFI找到一个有效启动扇区的设备,验证信息有效,就会加载那里的引导加载程序。对于Windows系统,这个加载程序是Windows Boot Manager;对于Linux系统,常见的是GRUB;
8. 操作系统加载
引导加载程序会加载操作系统的内核到内存中,并传递控制权给它;
PS:内核是操作系统的核心部分,负责管理硬件是设备和运行其他程序
9. 硬件和软件服务初始化
操作系统内核加载后,它会负责初始化系统的其余部分,包括配置硬件设备驱动程序、启动系统服务和用户界面。对于Windows,这包括Winlogon(登录界面)、Explorer(提供桌面环境)等;对于Linux,包括系统守护进程和图形界面;
10. 用户登录
最后操作系统加载完毕,用户被提示输入用户名和密码来登录系统。此时操作系统完全启动,用户可以开始使用计算机。
总结
此时你已经了解系统启动的整体步骤了,接下来如果你感兴趣,可以在每个步骤里面深入学习,无非就是多问为什么,怎么做的。 在这个过程中,ChatGPT是你很好的助手。