0%

操作系统引导全过程

原文链接:操作系统引导全过程

导言

预备知识

了解操作系统引导需要先了解预备知识

BIOS

BIOS(Basic Input Output System基本输出输入系统):主板的固件(具有软件功能的硬件)程序,位于ROM芯片中,能控制管理硬件设备

BIOS程序内存分布

BIOS工作在实模式下,最大20位寻址,也就是1M寻址范围(0x00000 ~ 0xFFFFF)(最初的8086处理器能够访问的内存最大只有1MB,保证兼容性)

0x00000 ~ 0x9FFFF(640KB):基本内存

1
2
3
4
5
0x00000 ~ 0x003FF: 中断向量表(1024B)
0x00400 ~ 0x004FF: bios数据区(256B)
0x00500 ~ 0x07BFF: 自由内存区
0x07C00 ~ 0x07DFF: 引导程序加载区(512B)
0x07E00 ~ 0x9FFFF: 自由内存区

0xA0000 ~ 0xBFFFF(128KB):显存

1
2
3
0xA0000 ~ 0xAFFFF: EGA/VGA/XGA/XVGA图形视频缓冲区(64KB)
0xB0000 ~ 0xB7FFF: Mono text video buffer(32KB)
0xB8000 ~ 0xBFFFF: CGA/EGA+ chroma text video buffer(32KB)

0xC0000 ~ 0xFFFFFF(128KB):BIOS运行内存

1
2
3
4
0xC0000 ~ 0xC7FFFF: 显卡bios使用(32KB)
0xC8000 ~ 0xCBFFFF: ide控制器bios使用(16KB)
0xCC000 ~ 0xEFFFFF:
0xF0000 ~ 0xFFFFFF: 系统bios使用(64KB)

硬盘

硬盘结构

物理结构

硬盘有机械和固态,存储介质和读写方式不同,但是都逻辑化为柱面(磁道)、磁头和扇区。硬盘扇区默认大小512B,空间分配一般按簇分配(多个扇区为一组簇)。

$硬盘容量=磁头数柱面数扇区数*512B$

文件结构

主要包括NTFS、FAT32、FAT16、exFAT等。不同操作系统的文件系统兼容性不同,如FAT32最大文件4G,但是win10镜像超过4G。FAT32本身理论上文件分配表的文件大小没有限制,但是却人为限制了大小。

逻辑结构

硬盘结构:硬盘内部有MBR(Master Boot Record主引导记录)、以及多个分区,每个主分区也有自己的PBR(分区引导记录)。一个MBR硬盘最多4个主分区(可通过其他方法创建逻辑分区),可标记为活动分区

MBR

MBR大小512B,位于0柱面、0磁头、1扇区,包括:主引导程序(446B)、硬盘分区表DPT(64B)、MBR结束标志AA55(2B)

  • 主引导程序:如GRUB,是执行操作系统引导的程序,用汇编实现,可以自己写然后刻录到iso中
  • 分区表DPT:一个分区16B空间
偏移 长度 内容
00 1 主分区状态标志 00非活动,80活动
01 1 主分区起始磁头号(最大256个磁头)
02 2 前5位起始扇区号,后10位起始柱面号
04 1 文件系统标志,常见FAT12:01,FAT16:04或06,NTFS:07
05 1 主分区结束磁头号
06 2 前5位结束扇区号,后10位结束柱面号
08 4 主分区起始相对扇区号
0c 4 主分区总扇区数
  • 结束标志AA55
PBR

每个主分区都有自身的PBR分区引导记录,详细参考

  • 跳转指令(3B):跳转至引导代码
  • 厂商标识和DOS版本号(8B)
  • BPB:BIOS参数块
  • 操作系统引导程序
  • 结束标志AA55

引导详细过程

  1. boot加载
    按下开机,CPU供电,执行0x0FFFF0H指令(跳转指令),跳转到BIOS程序入口地址
  2. 执行BIOS程序
  3. Power-On Self Test BIOS对硬件自检
  4. 自检完毕后,执行显卡、IDE等BIOS,检查PCIE、SATA等设备,如果检查有问题例如不兼容(b85主板+3代CPU无法兼容P104显卡),BIOS检查不通过,不能亮机
  5. BIOS显示画面,可以设置引导顺序和CSM等操作
  6. BIOS加载首位硬盘的MBR到内存,控制权转交MBR引导程序
  7. MBR从查找分区表找到活动分区表,将活动分区的分区引导记录加载到内存,控制权转交PBR引导程序(启动管理器)
  8. 加载操作系统

引导考试简单过程

  1. CPU通电,boot跳转
  2. 通电自检
  3. 启动BIOS
  4. 加载MBR
  5. 加载PBR、加载启动管理器
  6. 加载操作系统

BIOS程序在内存最开始的空间构建中断向量表和相应服务程序,在后续POST过程中要用到中断调用等功能。 然后进行通电自检POST (Power-on Self Test)以检测硬件是否有故障。 CPU检测到中断信号后,根据中断号查询中断向量表,跳转到相应的中断处理程序。