计算机系统启动过程分析
1 简介
本文是2011年博客的重新整理。之前的博客参考CSDN。
关机状态按下计算机开关时,硬件使能电源(PSU)引脚,电源DC输出打开。DC输出稳定后, 电源向主板发出Power Good信号。主板时钟芯片收到Power Good信号后,向CPU发出reset 信号。CPU检测到复位信号后,设置某些寄存器为特定值,其中寄存器CS和IP被预置为 CS:IP=0xF000:FFF0,并让CPU在实模式下运行,可知CPU将执行地址0xFFFF0处代码。 硬件电路把地址0xFFFF0映射到ROM中,这个地址包含一条JUMP指令,将跳转到真实的ROM BIOS(Basic Input/Output System)处开始执行BIOS代码。BIOS例程完成通电自检 (POST,Power-on-self-test)、硬件初始化、读取CMOS配置,并提供一组中断驱动的 低级过程供操作系统启动时使用。BIOS初始化完成后,将搜索一个操作系统来启动, 按照用户配置,这个过程试图访问软盘、光盘、磁盘、USB、FLASH等存储芯片。 在找到一个有效设备后,BIOS把该设备主引导记录(MBR,或者称作分区扇区,是0柱面 0磁头1扇区,LBA下称为0扇区,512字节)的内容拷贝到RAM中物理地址为0x7C00的位置, 然后跳转至CS:IP=0x0000:0x7C00执行来自MBR的代码。一个有效设备MBR中最后两个字节的 值为0x AA 55。MBR分为三部分,分别是指令代码、分区表DPT (Disk Partition Table)、 幻数0x AA 55。一般在MBR中存放引导程序的一部分,由这部分指令读取引导程序剩余部分, 加载整个引导程序到内存并继续运行引导程序。引导程序查询可引导的操作系统列表, 提供给用户选择,或者在超过一个预设的时间值后,加载默认的操作系统项。操作系统加载 完毕后,计算机执行权限交给操作系统,而引导程序则功成身退。操作系统从实模式开始, 初始化各类资源与环境,最终向用户提供健壮、一致、高性能、功能完备的操作系统环境。
2 引导程序
2.1 功能
2.2 GRUB
2.3 Multiboot Spec
为实现多操作系统共存,简化OS引导部分实现,GNU定义Multiboot Spec,包含如下三个 方面的接口:
- 引导程序看到的OS镜像格式;
- 引导程序启动操作系统时的机器状态;
- 引导程序传递给操作系统的信息格式。
请参考GNU Multiboot。
3 操作系统
3.1 TMP
配置CPU运行环境,切换到虚地址模式(cr3寄存器),初始化内存管理子系统、调度子系统、 中断子系统、进程派生环境、文件系统子系统,之后加载initrd,执行初始化进程init, 内核接着 引导程序把操作系统装载到内核中,并跳转到内核起始地址。
4 参考资料
- 2011博客链接Cppgp 深入理解Grub
1 - 深入理解GRUB01:介绍
2 - 深入理解 GNU GRUB - 02 boot.S 2.1 相关BIOS例程
3 - 深入理解 GNU GRUB - 02 boot.S 2.2 MBR结构 2.3 boot.S代码结构
4 - 深入理解 GNU GRUB - 02 boot.S 2.5 MBR过程模拟实现
5 - 深入理解 GNU GRUB - 03 diskboot.S 3.1 diskboot.S执行时的环境 & 3.2 diskboot.S代码结构
6 - 深入理解 GNU GRUB - 03 diskboot.S 3.3 diskboot.S详细注释
- Multiboot
http://www.gnu.org/software/grub/manual/multiboot/
- Multiboot Grub
http://tldp.org/HOWTO/Multiboot-with-GRUB.html
- Tldp Bootup
http://en.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/bootup.html
- PSU WIKI
https://en.wikipedia.org/wiki/Power_supply_unit_(computer)
- Grub Multiboot 规范
http://www.cnblogs.com/chio/archive/2008/01/01/1022430.html
- Multiboot 规范CSDN博客(1/2/3)
http://blog.csdn.net/u013012494/article/details/39178345 http://blog.csdn.net/wuhui_gdnt/article/details/6647757 http://blog.csdn.net/wuhui_gdnt/article/details/6647758 https://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html
- LILO