# 知识储备
- 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微米
晶体管,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
- 按指定
启动顺
序从软盘
,硬盘
或光驱
启动
# 启动加载程序 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 中英文对照:公众号回复: