0%
x86启动顺序 - 第一条指令
- CS = F000H, EIP = 0000FFF0H
- 实地址是:
Base + EIP = FFFF0000H + 0000FFF0H = FFFFFFF0H
这是BIOS的EPROM(Erasable Programmable Read Only Memory)所在地
- 当CS被新值加载,则地址转换规则将开始起作用
- 通常第一条指令是一条长跳转指令(这样CS和EIP都会更新)到BIOS代码中执行
x86启动顺序 - 处于实模式的段
- 段选择子(Segment Selector): CS,DS,SS,…
- 偏移量(Offset): EIP
x86启动顺序 - 从BIOS到Bootloader
- BIOS 加载存储设备(比如软盘、硬盘、光盘、USB盘)上的第一个 扇区(主引导扇区,Master Boot Record, or MBR)的512字节到内存的0x7c00 …
- 然后跳转到 @ 0x7c00的第一条指令开始执行
x86启动顺序 - 从Bootloader到OS
- bootloader做的事情
- 使能保护模式(protection mode)& 段机制(segment-level protection)
- 从硬盘上读取kernel in ELF 格式的ucore kernel (跟在MBR后面的扇区)并放到内存中固定位置
- 跳转到ucore OS的入口点(entry point)执行,这时控制器到了ucore OS中
x86启动顺序 - 段机制
x86启动顺序 - 使能保护模式
- 使能保护模式(protection mode),bootloader/OS 要设置CR0的bit 0(PE)
- 段机制(segment-level protection)在保护模式下是自动使能的
x86启动顺序 - 加载ELF格式的ucore OS kernel