BIOS与系统自启
知识储备
- C语言
- C++
- 汇编
- Linux
- 汇编补充C++文章复习
汇编部分补充
数据描述符
AX
累加器:用到最多最频繁,AX,AH和AL在乘,除法等操作中有专门的用途。BX
基址寄存器: 用于存放偏移地址CX
为计数寄存器:在循环操作中做计数器用,用于控制循环程序的执行次数DX
数据寄存器:在乘,除法及I/O端口操作时专门用途。
指令
操作方向标识为DF(Direction Flas
)
使用此指令
控制
方向标志DF
,决定内存地址增大还是减小。在子串操作中使SI或DI的地址指针自动递减,字串处理由后往前。
CLD
使DF复位
,即让DF=0
向高
地址增加
STD
使DF置位
,即让DF = 1
向低
地址减少
CPU架构
CPU架构
是CPU厂商给属于同一系列
的CPU
产品定的一个规范,主要目的是为了区分不同类型CPU
的重要标示。
CPU架构
-
复杂指令集
CISC
(Complex Instruction Set Computer):增强原有指令的功能,设置更为复杂
的新指令实现软件功能的硬化
。 -
精简指令集
RISC
(Reduced Instruction Set Computer):较少指令
种类和简化
指令功能,提高指令的执行效率
指令集对比
南桥北桥
在早期,芯片组分为南桥芯片组和北桥芯片组两部分,其中北桥负责CPU
与内存的数据
交换,图形处理
,CPU与PCIE
(高速串行计算机扩展总线标准)数据交换,南桥负责系统的输入输出功能。北桥芯
片还叫"图形与内存控制器
",南
桥叫"输入/输出
控制器"。北桥芯片组因与CPU联系密切靠近CPU位置,在现代制造工艺越来越先进,集成度越来越高,内存控制
器已经被集成到CPU内部
,显卡收进CPU(核显),而PCIE控制器收归南桥管理,北桥芯片组功能基本被瓜分。在Intel 芯片组中北桥被取消,而AMD只有早期主板仍保留着北桥和南桥。
PCIE
:属于高速串行
点对点双通道高宽带传输
,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量QOS等功能。
南桥
电脑启动过程(早期)
启动顺序
- 系统
加电BIOS
初始化硬件
- BI0S
读
取引导扇区代码
-- 加载程序 - 加载
内核
并跳转到内核执行
- 操作系统内核
刚启动时内存布局
十六位实模寻址
当装入多个
操作系统
主引导记录MBR格式
多个操作系统
工作模式
实模式
程序中用到的地址都是
真实
的物理地址。在实模式下,内存寻址方式和
8086
(8086,微处理器,1MB
内存地址,3微米
晶体管,IBM
1981年生产的第一台
电脑就是使用8086简化版,标志着x86架构
和IBM PC兼容电脑的产生)相同,机器段
起始地址的低4位
设置为0
,由16位段寄存器
的内容乘以16(左移4位
)作为段基址
(Segment Base Address)(能被16整除的主存物理地址),加上16位段偏移地址形成20位
物理地址,
段基址
最大
寻址空间1MB
,最大分段64KB
。可以使用32位指令
,即32位的x86 CPU也可以兼容实模式,此时的实模式相当于高速8086(32位CPU的实模式可以使用32位下的资源)。在32位CPU
下,系统复位或加电时都是以实模式启动
,然后再切换为保护模式
。在实模式下,所有的段都可以读
,写和可执行的。由于实模式下没有特权级
,程序可以随意修改
自己的段基址,加上实模式下对地址的访问就是实际物理地址
,随意修改给操作系统带来极大安全隐患
- 保护模式
标志位
表示权限
,当用户访问与读取的段
文件权限进行对比
,已达到保护的目的。每一个指令,每一个程序本身就有一个权限,可以用
CPL/RPL
描述,访问的目标字符段也有一个权限为DPL
。处理器会对特权集进行检查,判断
当前的CPL/RPL
是不是大于等于
DPL。
实模式与保护模式
BIOS概念
BIOS(
Basic Input Output System
)全称基本输入/输出系统
,固件,它是存储在主板ROM
(只读存储器,生成之后只有一次
写入机会,数据一旦写入则不可更改。按照内容写入方式分为:可一次变成PROM
,可擦除
ROM,又分为EPROM紫外线
擦除电写入和E2PROM电擦
除电写入等)里的一组程序代码。主要包括:
加电自检
(Power On Self Test POST)程序,用于开机时对硬件的检测,BIOS包含基本输入输出程序,包括读取键盘,写入屏幕,和执行磁盘I/O等操作过程,去检测开机时系统状况,而显卡不可检测
Blos
(Blos采用16位汇编语言
编写)只能运行在16位
实模式下,实模式下最大寻址范围时1MB
系统加电时,当CPU收到复位事件时,当它被上电或重新启动时--指令寄存器就被装入 一个预定义的内存位置,并在那里开始执行。
- 系统初始化代码,包括
硬件设备的初始化
,创建BIOS中断向量
等- 基本的外围
I/O处理
子程序代码CMOS
设置程序:Complementary Metal-Oxide-Semiconductor: 保存了系统引导的最基本的资料(基本设置,时钟信息)。
初始化过程
- 硬件
自检POST
- 检测系统中
内存
和显卡
等关键部件的存在和工作状态 - 查找并执行显卡等接口
卡BIOS
,进行设备初始化
- 执行
系统BIOS
,进行系统检测
-- 检测和配置系统中安装的即插即用设备 - 更新
CMOS
中的扩展系统配置数据ESCD
- 按指定
启动顺
序从软盘
,硬盘
或光驱
启动
bios
启动加载程序Bootloader
引导启动内核的过程
引导启动内核程序
linux启动代码
到
setup
部分,进入保护模式
运行
system模块
,进入操作系统
bootsect.s
工作在
实模式
下,起到搬运工
的作用
第一部分
片段二
片段三
片段四
片段六
setup.s
setup.s
负责从BIOS
中获取系统数据
,并将这些数据
放到系统内存
的适当地方
。此setup.s
和system
已经由bootsect引
导块加载到内存
中。
setup
片段一
片段二
片段四
片段五
总
head.s
进一步设置
中断描述符
和全局描述符
表,设计页表
--开始对系统内存
进行管理
head.s
设置中断描述符
mian函数工作流程
main函数
BIOS缺点
开发效率
低 :大部分BIOS使用汇编开发,开发效率低,汇编开发代码与设备的耦合度太高,(软件工程讲究高内聚低耦合
,目的是使程序模块的可重用性,移值性大大增强)性
能差:BIOS基本输入输出通过中断来完成,开销大,并且BIOS没有提供异步工作模式,大量时间消耗在等待上- 功能
扩展性
差,升级缓慢:BIOS代码采用静态链接,增加硬件功能时,必须将16位代码放置在0x0C0000 ~ 0x0DFFFF区间,初始化时将其设置为约定的中断处理程序。而且BIOS没有提供动态加载设备驱动方案 安全
性:BIOS运行过程中对可执行代码没有安全方面考虑- 不支持从硬
盘2TB
以上的地址引导
:受限于BIOS硬盘的寻址方式,BIOS硬盘采用32位
地址,因而引导扇区的最大逻辑块地址2^32
(换算成字节地体,即2^32 X 512
= 2TB)
UEFI
UEFI
参考资料
- 厦门大学《操作系统原理》
- 《UEFI原理与编程》
- 获得BIOS中英文对照:公众号回复:
BIOS英文
即可获得 - 下载:https://foryouos.lanzoul.com/iApcp138b9be 密码:5213
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)