Linux 系统开机加电后发生了什么?( 二 )


在次 boot loader 存在与内存中后,就可以对文件系统进行查询了,同时将默认的内核镜像以及初始化内存盘镜像也被加载到内存中 。
一切准备完毕之后,次 boot loader 就会调用内核镜像,完成操作系统的加载 。
加载内核并从实模式转换为保护模式当内核映像被加载到内存中(加载过程仍然用int 0x13中断向量),并且次引导加载程序释放控制权之后,内核阶段就开始了 。
加载内核镜像内核映像并不是一个可执行的内核,而是一个压缩过的内核映像 。通常它是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是提前使用 zlib 进行压缩过的 。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用 。然后该例程会调用内核,并开始启动内核引导的过程 。
当 bzImage(用于 i386 映像)被调用时,我们从 ./arch/i386/boot/head.S 的 start 汇编例程开始执行 。
这个例程会执行一些基本的硬件设置,并调用 ./arch/i386/boot/compressed/head.S 中的 startup_32,设置一个基本的环境(堆栈等),并清除 Block Started by Symbol(BSS) 。然后调用一个叫做 decompress_kernel 的 C 函数(在 ./arch/i386/boot/compressed/misc.c 中)来解压内核 。当内核被解压到内存中之后,就可以调用它了 。这是另外一个 startup_32 函数,但是这个函数在 ./arch/i386/kernel/head.S 中 。
进入保护模式并初始化

  • 进入保护模式
  • 设置中断描述附表和全局描述符表
  • 创建了内存分页机制
启动内核
  • start_kernel启动内核
  • 创建init进程
BIOS阶段–准备实模式下的中断向量表和中断服务程序BIOS是什么上个世纪70年代初,”只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它 。计算机,启动这块芯片里的程序叫做”基本輸出輸入系統”(Basic Input/Output System),简称为BIOS 。
它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息 。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制 。
BIOS存储的信息BIOS芯片中主要存放:
  • 自诊断程序:通过读取CMOSRAM中的内容识别硬件配置,并对其进行自检和初始化;
  • CMOS设置程序:引导过程中,用特殊热键启动,进行设置后,存入CMOS RAM中;
  • 系统自举装载程序:在自检成功后将磁盘相对0道0扇区上的引导程序装入内存,让其运行以装入DOS系统;
  • 主要I/O设备的驱动程序和中断服务:由于BIOS直接和系统硬件资源打交道,因此总是针对某一类型的硬件系统,而各种硬件系统又各有不同,所以存在各种不同种类的BIOS,随着硬件技术的发展,同一种BIOS也先后出现了不同的版本,新版本的BIOS比起老版本来说,功能更强 。
BIOS:计算机加电自检完成后第一个读取的地方就是就是BIOS(Basic Input Output System,基础输入输出系统),BIOS里面记录了主机板的芯片集与相关设置,如CPU与接口设备的通信频率、启动设备的搜索顺序、硬盘的信息、系统时间、内存信息、时钟信息、PnP特性、外部总线、各种接口设备的I/O地址、已经与CPU通信的IRQ中断信息,所以,启动如果要顺利启动,首先要读取BIOS设置 。
计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它 。
电脑启动后,CPU逻辑电路被设计为只能运行内存中的程序,没有能力直接运行存在于软盘或硬盘中的操作系统,如果想要运行,必须要加载到内存(RAM)中 。
BIOS是如何启动的CPU硬件逻辑设计为在加电瞬间强行将CS值置为0XF000,IP为0XFFF0,这样CS:IP就指向0XFFFF0这个位置,这个位置正是BIOS程序的入口地址 。
BIOS需要在内存中加载中断向量表和中断服务程序BIOS程序被固化在计算机主机板上的一块很小的ROM芯片里 。现在CS:IP已经指向了0XFFFF0这个位置,意味着BIOS开始启动 。随着BIOS程序的执行,屏幕上会显示显卡的信息,内存的信息,说明BIOS程序在检测显卡,内存,这个就是POST开机自检期间,有一项对启动操作系统至关重要的工作,那就是BIOS在内存中建立中断向量表和中断服务程序


推荐阅读