浅析计算机 bios 和 bootloader 运行之道

计算机启动时,CPU首先执行BIOS中的程序,进行硬件初始化和设备检测,然后加载启动设备(如硬盘)的主引导扇区到内存0x7C00处。BIOS完成后,引导加载器接手,加载操作系统内核到RAM,最终将控制权交给操作系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PC计算机加电之后,一般不直接运行操作系统,80x86 结构的 CPU 将自动进入实模式,而是执行系统初始化软件程序(物理地址 0xFFFFFFF0,这个地址通常是 ROM-BIOS 中的地址 ),以完成基本IO初始化和引导加载功能。

简单地说,系统初始化软件程序:就是在操作系统内核运行之前运行的一段小软件(固化程序)。通过这段小软件程序,我们可以完成初始化硬件设备、建立系统的内存空间映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核,准备好正确的环境。最终引导加载程序把操作系统内核映像加载到RAM中,然后将系统控制权传递给它。

对于绝大多数计算机系统而言,操作系统和应用软件是存放在磁盘(硬盘/软盘)、光盘、EPROM、ROM、Flash等可在掉电后继续保存数据的存储介质上。计算机启动后,CPU一开始会到一个特定的地址开始执行指令,这个特定的地址存放了系统初始化软件程序,负责完成计算机基本的IO初始化,这是系统加电后运行的第一段软件代码。

对于Intel 80386的体系结构而言,PC机中的系统初始化软件由BIOS (Basic Input Output System,即基本输入/输出系统,其本质是:

(1)一个固化在主板Flash/CMOS上的软件);

(2)位于软盘/硬盘引导扇区中的 OS Boot Loader(在ucore中的bootasm.S和bootmain.c)

一起组成。

BIOS实际上是被固化在计算机ROM(只读存储器)芯片上的一个特殊的软件程序,为上层软件提供最底层的、最直接的硬件控制与支持。更形象地说,BIOS就是PC计算机硬件与上层软件程序之间的一个"桥梁",负责访问和控制硬件。

以Intel 80386为例,计算机加电后,CPU从物理地址0xFFFFFFF0(由初始化的CS:EIP确定,此时CS和IP的值分别是0xF000和0xFFF0))开始执行。在0xFFFFFFF0这里只是存放了一条跳转指令,通过跳转指令跳到BIOS例行程序起始点。BIOS做完计算机硬件自检和初始化后,会选择一个启动设备(例如软盘、硬盘、光盘等),并且读取该设备的第一扇区(即主引导扇区或启动扇区)到内存一个特定的地址0x7c00处,然后CPU控制权会转移到那个地址继续执行。至此,BIOS的初始化工作做完了,进一步的工作交给了ucore的bootloader

CS(Code Segment Register):代码段寄存器,存在于CPU中,指向CPU当前执行代码在内存中的区域(定义了存放代码的存储器的起始地址)。

IP/EIP(Instruction Pointer):指令指针寄存器,存在于CPU中,记录将要执行的指令在代码段内的偏移地址,和CS组合即为将要执行的指令的内存地址。实模式为绝对地址,指令指针为16位,即IP;保护模式下为线性地址,指令指针为32位,即EIP。

上图可以看到: cpu通电后 ,IP和CS寄存器的初始值,这里的存储的是一条跳转指令,跳转到BIOS程序的第一个程序指令上, 这个时候BIOS程序就会执行(BIOS效果就是 自审硬件设备是否正常,初始化设备) ,最后会选择一个启动设备(很重要)。

这里最重要的是会将该设备的第一扇区(即主引导扇区)的程序内容512字节内容加载到内存,注意这里加载带内存的0X7C00处

debug (break * 0x7c00)

bootleader执行结束之后,就会加载 elf 格式的 os内核镜像,然后将cpu的操作权力交予操作系统。

总之,计算机开机后的工作顺序为: BIOS ->  Bootloader -> OS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值