名词解释
BIOS
- Basic input and output system
ROM - Read only memory
RAM - Random access memory
启动流程 BIOS
- 主板上电。
- 将BIOS中的命令映射到内存0XF0000到0XFFFFF。
- CPU中CS寄存器值设为0XFFFF,IP寄存器设为0,所以物理地址为0XFFFF0,正好是BIOS占用的部分。
- 运行指向的jmp指令跳到BIOS中的硬件检查部分然后继续执行。
- 运行BOIS建立中断向量表,注册各种IO中断,同时将内容存到视频显示RAM输出到屏幕。
内存使用示意
- ROM->BIOS
- 存储器拓展区RAM
- 视频显示RAM
- 普通内存
- BIOS数据中断服务程序
- BIOS中断向量表
启动流程 Bootloader
- BIOS结束,查找启动盘。
- 启动盘判定标准:第一个扇区512字节,以0XAA55结束。
- 运行启动盘内第一个扇区内的boot.img
- 启动盘内的代码是Linux工具GRUB2(Grand Unified Bootloader Version 2)放的。
- boot.img相关代码boot.S。
- boot.S相当于一个指路牌,运行指向内核镜像core.img。
- core.img 同样是GRUB2放的。
- core.img 不是只Linux内核,是指grub内核。
- core.img分三个部分。
- diskboot.img。
- 相关代码diskboot.S。
- 用来解压/调用起 lzma_decompress.img。
- lzma_decompress.img。
- 因为实模式下内存只有1M,所以在此切换到保护模式。
- 用来解压/调用起kernel.img。
- 保护模式下启用分段/分页
- 分段更方便进程管理
- 分页是可选的(当然现在大部分都是段页式),是为了让内存中更少的段冗余。还有额外的好处:内存可以虚拟化啦,在TLB转换之前一直指向的都是虚拟地址了。
- kernel.img
- grub内核映像。
- 选择可调用的内核,内核要从这里启动!
- diskboot.img。