一、软件和硬件的桥梁
1、Bare metal与程序的约定
为了让计算机运行任何程序,一定存在软件/硬件的约定
(1)CPU reset后,处理器处于某一个确定的状态
PC指针一般指向一段memory mapped ROM(内存映射)
ROM存储了厂商提供的firmware(固件)
处理器的大多特性处于关闭状态
缓存,虚拟存储。。。
(2)Firmware(固件,厂商提供的代码)
将用户数据加载到内存
如存储在介质上的二级loader(加载器)
或者直接加载操作系统
2、x86 Family CPU Reset行为
(1)寄存器回到初始状态
EIP=0x0000FFF0
CR0=0x60000010
16bit模式
EFLAGS=0x00000002
interrupt disable
3、CPU Reset之后
(1)从PC(CS:IP)指针处理取指令、译码、执行。。。
(2)从firmware考试执行
ffff0通常时一条想firmware的跳转指令
二、操作系统的加载和初始化
1、Firmware:BIOS与UEFI
(1)都是主板/主板上外插设备的软件抽象
支持操作系统管理程序运行
(2)Legacy BIOS(Basic I/O System)基本输入输出系统
(3)UEFI(Unified Extensible Firmware Interface)统一可扩展固件接口
2、Legacy BIOS:约定
Firmware必须约定提供机制,将用户数据载入内存
(1)Legacy BIOS把第一个可引导的的设备的第一个扇区加载到区里内存的7C00位置
此时处理器处于16bit模式
规定CS:IP:0x7C00, (R[CS]<<4) | R[IP] == 0x7C00
情况1:CS=0x7C00, IP=0;
情况2:CS=0, IP=0x7C00;
注:如果磁盘第一个512字节 最后字节为:aa55, 表示可以启动
三、AbstractMachine代码导读
1、TRM+MPE
(1)完全等同于多线程(处理器相当于线程)
(2)IOE API:完全时普通库函数
2、CTE
(1)允许创建多个执行流(类比协程)
(2)yied主动切换;会被中断被动打断
(3)on_interrupt会拦截到中断事件
3、VME
(1)允许创建一个“经过地址翻译的执行模式”
(2)通过CET API管理