note :了解计算机启动的step 1做了什么!
简述一句话:加电后,读取BIOS,BIOS读取加载程序,加载程序读内核映像。
1. CPU初始化
CPU加电稳定后从0xFFFF0读第一条指令:
- 第一条指令是跳转指令
- CS:IP = 0xf0000 : fff0
- CPU初始状态为16位实模式
- PC = 16 * CS + IP
- 最大地址空间1MB
2. BIOS初始化
别人文章的介绍:BIOS基本流程介绍
一句话简述里说,“读取BIOS,BIOS读取加载程序“,其实这里还有很多事情要做:
- 硬件自检POST:加电自检,检测系统中内存、显卡等关键部件是否存在、是否在正常工作,将他们进行初始化。
- 执行系统BIOS:进行系统检测,检测和配置系统中安装的即插即用设备;更新CMOS中的扩展系统配置数据ESCD
- 按指定启动顺序 从软盘、硬盘或光驱启动
老式电脑只有1个磁盘,1个分区,但现在电脑可能有好几个磁盘、分区,该去哪一个分区找加载程序呢?——
主引导记录MBR格式
(看图,最多只能描述4个分区)
启动代码:446字节
- 检查分区表正确性
- 加载并跳转到磁盘上的引导程序
硬盘分区表:64字节
- 描述分区状态和位置
- 每个分区描述信息占据16字节
结束标志字:2字节(55AA)
- 主引导记录的有效标志
通过读取上面的主引导扇区代码,就可以跳转到活动分区的引导扇区去了!
分区引导扇区格式
- JMP : 跳转指令,跳转到启动代码,和平台有关
- 文件卷头:文件系统描述信息
- 启动代码:跳转到加载程序。注意:加载程序不是存在这512个字节里!存在哪由此处约定、告知,一般存在硬盘里,可以改动。
3.加载程序
从文件系统中读取启动配置信息(windows、linux的格式就不一样),依据配置信息确定启动参数(正常启动、安全模式启动、调试状态启动等等),所以在加载内核时候会有不同。
系统启动规范
BIOS
- 固化到计算机主板上的程序
- 包括系统设置、自检程序和系统自启动程序
- BIOS-MBR(最多描述4个分区,看上边的图)
- BIOS-GPT(全局唯一标识分区表,用来描述更多的分区结构,可以大于4,MBR的进一步发展)
- PXE (网络启动的标准)
UEFI
- 接口标准
- 在所有平台上一致的操作系统启动服务