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微米晶体管,IBM1981年生产的第一台电脑就是使用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


浙公网安备 33010602011771号