第2章 系统引导

计算机启动前必须使得硬件处在最安全、通用、功能最弱的状态,并在启动过程中对硬件进行设置,逐步提升硬件处理能力

  • 必须使用启动程序对计算机进行启动
  • 启动程序必须运行在启动好的计算机上

OS启动是一个逐步释放系统灵活性的过程

启动的流程:BIOS → MBR → BootLoader → OS

BootLoader

引导加载程序,是系统加电后运行的第一段代码,在操作系统内核启动前运行

  • Booter:初始化并运行系统硬件
  • Loader:将操作系统代码加载到内存中,并跳转运行

嵌入式系统经常用U-boot作为OS装载程序,X86常使用LILOGRUB

计算机的启动过程(MIPS

MIPS架构使用的U-boot分为stage1stage2两个阶段,通常stage1使用汇编语言实现,stage2使用C语言实现

  • stage1实现简单的功能,初始化设备
  • stage2stage1的基础上可以实现更复杂的功能

MIPS的基本地址空间

在32位系统下,程序地址空间(共4GB)被划分为四个区域,不同区域具有不同的属性:

image-20230217203905712

按物理地址自下而上地,具有自己的特征:

  • kuseg:用户态可用地址,只有在MMU建立好后才能使用这2GB的地址
  • kseg0:去除最高位后,能直接映射到地址从0开始的区域;只有在cache设置好后才能访问这段地址
    • 几乎访问这段地址时都需要经过cache
    • 对于有MMU的系统,操作系统核心存放在这个区域
  • kseg1:去除高三位后与kseg0类似,但非cache存取
    • kseg1唯一在系统重启时能正常工作的地址空间:MIPS系统的启动入口地址为0xBFC00000,就位于kseg1段内
  • kseg2:仅核心态可用地址,同样需要先建立MMU

MIPS启动stage1

image-20230217204603657

MIPS启动stage2

stage2开始时在board_init_f中初始化并分配内存、堆和栈,把U-boot代码复制至ram上运行,在结束时启动Linux kernel

image-20230217205011993

MIPSLinux系统引导过程

  • BootLoaderLinux内核移动到指定的物理地址处,确定内核开始执行的第一条指令地址
  • 第一阶段从head.s文件开始,初始化堆栈、内存等
  • 第二阶段从start_kernel()开始初始化硬件平台相关的代码

计算机的启动过程(X86

计算机首先跳转至BIOS处运行寻找硬件设备,随后读取MBR区段并把控制权转移给操作系统的BootLoader

BIOS

BIOS设置程序是在ROM上固定的一组程序,为电脑提供最底层的硬件控制,与硬件系统集成在一起

  • 系统上电时会自动跳转至BIOS存放的地址开始运行,等待BIOS提供硬件等信息
  • Power-On Self-TestBIOS支持上电自检,保证关键组件都能启动并正确初始化
  • BIOS可更改启动引导设备

UEFIBIOS

  • EFI使用模块化、C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,突破了BIOS16位的寻址限制

MBR

硬盘上第0磁头第0磁道第1扇区被称为MBR(Master Boot Record),大小为512B

  • MBR中存放了BootLoader和驱动器的逻辑分区信息:前446字节为启动代码与数据(BootLoader),随后是16字节的分区数据*4个分区(分区数据意义见课件P39),最后的两个字节应存放AA 55,他们被称为幻数(当BIOS读取MBR时,如果末位无幻数就认为这是一个没有分区的硬盘)
image-20230217211343465
  • 硬盘分区共三种:主磁盘分区、扩展磁盘分区、逻辑分区
  • MBR限制磁盘至多只能有4个主分区,系统必须位于主分区上
  • 单一硬盘最多4个主分区,最多一个拓展分区,(并且主+扩不超过4),逻辑分区可有若干个
  • 主分区只能有一个为激活状态

X86下的Linux系统引导过程

MBR被读取到内存中后,其中的BootLoader接管系统,并初始化硬件设备、建立内存映射,为启动系统做好准备

  • BIOSMBR读入0x7C00处,检查0x7DFE是否为0xAA55后,执行MBR程序
  • 将自身复制至0x0600
  • 搜索激活的主分区,将其第一个扇区(Boot Sector)读入0x7C00处,检查0x7DFE是否为0xAA55,跳转0x7C00执行特定系统的启动程序

MBR与分区引导扇区Boot Sector

  • 启动顺序有先后。PC机启动时,先执行MBR,再根据选择执行某个分区下的boot sector。
    • (选择执行的boot sector所在分区就是活动分区。“用户选择一个操作系统” 实际上也就是选择一个分区作为活动分区。)
  • boot sector可以为空(没装系统),但MBR必须包含内容。
  • MBR必须被读取并执行;引导扇区根据选择执行,有的甚至可以不执行(即上文中的”数据是无效的”)。
  • MBR实际上包含的内容也比boot sector广泛,MBR中相当于包含了硬盘整体层面上的引导扇区(自举装入程序)、根目录区(分区表)。
  • MBR选择Boot Sector,Boot Sector驱动分区内的操作系统
image-20230217213348532