# 知识储备
- C 语言
- C++
- 汇编
- Linux
# 汇编部分补充
# 数据描述符
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的重要标示。
复杂指令集
CISC(Complex Instruction Set Computer): 增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化。精简指令集
RISC(Reduced Instruction Set Computer):较少指令种类和简化指令功能,提高指令的执行效率
# 南桥北桥
在早期,芯片组分为南桥芯片组和北桥芯片组两部分,其中北桥负责 CPU 与 内存的数据 交换, 图形处理 , CPU与PCIE (高速串行计算机扩展总线标准) 数据交换,南桥负责系统的输入输出功能。 北桥芯 片还叫 " 图形与内存控制器 ", 南 桥叫 " 输入/输出 控制器 "。北桥芯片组因与 CPU 联系密切靠近 CPU 位置,在现代制造工艺越来越先进,集成度越来越高, 内存控制 器已经被集成到 CPU内部 ,显卡收进 CPU (核显),而 PCIE 控制器收归南桥管理,北桥芯片组功能基本被瓜分。在 Intel 芯片组中北桥被取消,而 AMD 只有早期主板仍保留着北桥和南桥。
PCIE : 属于 高速串行 点对点双通道 高宽带传输 ,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量 QOS 等功能。
# 电脑启动过程 (早期)
- 系统
加电BIOS初始化硬件 - BI0S
读取引导扇区代码-- 加载程序 - 加载
内核并跳转到内核执行- 操作系统内核
# 当装入 多个 操作系统
# 工作模式
实模式
程序中用到的地址都是
真实的物理地址。在实模式下,内存寻址方式和
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 - 按指定
启动顺序从软盘,硬盘或光驱启动
# 启动加载程序 Bootloader
到
setup部分,进入保护模式运行
system模块,进入操作系统
# bootsect.s
工作在
实模式下,起到搬运工的作用
# setup.s
setup.s负责从BIOS中获取系统数据,并将这些数据放到系统内存的适当地方。此setup.s和system已经由bootsect引导块加载到内存中。
# head.s
进一步设置
中断描述符和全局描述符表,设计页表-- 开始对系统内存进行管理
# BIOS 缺点
开发效率低 :大部分 BIOS 使用汇编开发,开发效率低,汇编开发代码与设备的耦合度太高,(软件工程讲究高内聚低耦合,目的是使程序模块的可重用性,移值性大大增强)性能差:BIOS 基本输入输出通过中断来完成,开销大,并且 BIOS 没有提供异步工作模式,大量时间消耗在等待上- 功能
扩展性差,升级缓慢:BIOS 代码采用静态链接,增加硬件功能时,必须将 16 位代码放置在 0x0C0000 ~ 0x0DFFFF 区间,初始化时将其设置为约定的中断处理程序。而且 BIOS 没有提供动态加载设备驱动方案 安全性:BIOS 运行过程中对可执行代码没有安全方面考虑- 不支持从硬
盘2TB以上的地址引导:受限于 BIOS 硬盘的寻址方式,BIOS 硬盘采用32位地址,因而引导扇区的最大逻辑块地址2^32(换算成字节地体,即2^32 X 512= 2TB)
# UEFI
# 参考资料
- 厦门大学《操作系统原理》
- 《UEFI 原理与编程》
- 获得 BIOS 中英文对照:公众号回复:
BIOS英文即可获得 - 下载:https://foryouos.lanzoul.com/iApcp138b9be 密码:5213
- 获得 BIOS 中英文对照:公众号回复:
