学408当时听课时,这里讲的基本就是说BIOS引导什么的,属实不是很清楚,索性找了几个详解的文章学习了下,梳理了大体流程,这里简单概括下。
首先简要过一遍流程:按下开机按钮上电—主板上写死的固件(硬件电路)运行—CPU将所有寄存器的值都设为默认值—CPU指向BIOS(在主板ROM中的固定位置)–BIOS程序进行硬件检测和初始化操作—搜索启动盘—(读取 MBR)将启动盘中的 0 盘 0 道 1 扇区的 512 个字节原封不动的写入(拷贝)内存中0x7c00
开始的位置—确定活动分区—确定引导扇区,将其加载到内存中—操作系统加载。
按下开关(不重要)
CPU会执行一个复位(Reset)过程:CPU内置有一个复位电路,该电路会向CPU的所有寄存器发送一个特殊的复位信号,以重置所有寄存器。
CPU将所有寄存器的值都设为默认值
PC 寄存器被强制初始化为 0xFFFF0 ,这也是BIOS程序的入口地址。
- 段基址寄存器 cs 初始化为 0xF000
- 偏移地址寄存器 IP 初始化为 0xFFF0
- 根据实模式下的最终地址计算规则,将段基址左移 4 位,加上偏移地址,得到最终的物理地址也就是抽象出来的 PC 寄存器地址为 0xFFFF0。
复位信号会将通用寄存器AX、BX、CX、DX等以及其他寄存器如标志寄存器FLAGS、指令指针寄存器IP等重置为默认值。默认值通常是0或者一些固定的值,具体取决于CPU架构和制造商。
其他…
启动BIOS
- BIOS上电自检POST(Power-On Self Test)
- 初始化硬件设备
- 按照顺序搜索启动设备
- BIOS在启动时会按照一定的顺序搜索可用的启动设备,通常包括硬盘、CD/DVD光驱、USB闪存驱动器等。这个顺序可以通过BIOS设置进行配置,并被称为“启动顺序”或“启动顺序”。
BIOS加载启动区
- BIOS 会按照设备顺序,读取主引导记录MBR,即读取0 盘 0 道 1 扇区的内容,如果末尾的两个字节分别是 0x55 和 0xaa,那么 BIOS 就会认为它是个启动区。
- MBR(Master Boot Record,主引导记录,大小为 512 字节)
- 第1-446 字节:包含了引导程序的代码,即调用操作系统的机器码,可以被 CPU 直接执行。
- 第 447-510 字节:分区表(Partition Table)信息,将硬盘分为了若干个分区。
- 分区表(Partition Table)记录了硬盘上的所有分区信息,包括每个分区的起始位置、大小和分区类型等。
- 第 511-512 字节:“MBR结束标志”(MBR End of Sector Marker),记录签名(0x55 和 0xAA),若记录签名正确,表示设备可以用于启动—也就是说这个区是启动区。
- MBR(Master Boot Record,主引导记录,大小为 512 字节)
- 如果计算机确定了当前盘的MBR是启动区,那么BIOS会将硬盘中启动区的 512 字节的数据,原封不动复制到内存中的 0x7c00处
{:height 717, :width 663}
查找活动分区(引导分区)
- PC寄存器的值变为0x7c00,从这里开始运行—启动区开始跑起来!
- 当BIOS将MBR加载到内存中后,它会读取分区表中的活动分区标识位。若分区表中的活动分区标识位被设置为1,则表示该分区是可引导的。
- 分区表记录了磁盘上所有分区的位置、类型和大小等信息,在分区表中,有一个标识位被称为“活动分区”(Active Partition),一般为某个主分区,也就是至多四个主分区之一。此标识位指示了系统应该从哪个分区引导操作系统
- 每个硬盘最多只能有一个活动分区。如果硬盘上存在多个操作系统,那么每个操作系统都需要独立的活动分区来引导启动。
- BIOS会跳转到该分区上的的引导扇区(Boot Sector)上,并将其加载到内存中执行。
- 引导扇区是一个特定的扇区,通常包含了操作系统引导程序的代码和数据,例如Windows操作系统的
bootmgr
或grub
引导程序。
- 引导扇区是一个特定的扇区,通常包含了操作系统引导程序的代码和数据,例如Windows操作系统的
操作系统加载(不重要)
- 一旦引导扇区(Boot Sector)被加载到内存中执行,它会继续加载操作系统的其他部分。通常,这涉及到在文件系统中查找操作系统的核心文件,并将其加载到内存中。在 Windows 操作系统中,这个核心文件可能是 ntoskrnl.exe,而在 Linux 操作系统中,它可能是 vmlinuz。
- 操作系统的核心文件被加载到内存后,它就开始初始化操作系统,包括创建进程、分配内存等。
- 接下来,操作系统会开始运行第一个进程,这通常是 init 进程或 systemd 进程,它负责启动其他进程和服务。最终,操作系统完成了启动过程,并准备好接受用户的交互请求。
参考
- ChatCPT回答
- 九曲阑干计算机操作系统课程
- 你管这破玩意叫操作系统源码 | 第一回 最开始的两行代码
- 全网最硬核讲解计算机的启动过程