BUAA-OS-Theory-Chapter2
第2章 系统引导
计算机启动前必须使得硬件处在最安全、通用、功能最弱的状态,并在启动过程中对硬件进行设置,逐步提升硬件处理能力
- 必须使用启动程序对计算机进行启动
- 启动程序必须运行在启动好的计算机上
OS启动是一个逐步释放系统灵活性的过程
启动的流程:BIOS → MBR → BootLoader → OS
BootLoader
引导加载程序,是系统加电后运行的第一段代码,在操作系统内核启动前运行
Booter
:初始化并运行系统硬件Loader
:将操作系统代码加载到内存中,并跳转运行
嵌入式系统经常用U-boot
作为OS装载程序,X86
常使用LILO
和GRUB
计算机的启动过程(MIPS
)
MIPS
架构使用的U-boot
分为stage1
和stage2
两个阶段,通常stage1
使用汇编语言实现,stage2
使用C语言实现
stage1
实现简单的功能,初始化设备stage2
在stage1
的基础上可以实现更复杂的功能
MIPS
的基本地址空间
在32位系统下,程序地址空间(共4GB)被划分为四个区域,不同区域具有不同的属性:
按物理地址自下而上地,具有自己的特征:
kuseg
:用户态可用地址,只有在MMU
建立好后才能使用这2GB的地址kseg0
:去除最高位后,能直接映射到地址从0开始的区域;只有在cache
设置好后才能访问这段地址- 几乎访问这段地址时都需要经过
cache
- 对于有
MMU
的系统,操作系统核心存放在这个区域
- 几乎访问这段地址时都需要经过
kseg1
:去除高三位后与kseg0
类似,但非cache
存取kseg1
是唯一在系统重启时能正常工作的地址空间:MIPS
系统的启动入口地址为0xBFC00000
,就位于kseg1
段内
kseg2
:仅核心态可用地址,同样需要先建立MMU
MIPS
启动stage1
MIPS
启动stage2
stage2
开始时在board_init_f
中初始化并分配内存、堆和栈,把U-boot
代码复制至ram
上运行,在结束时启动Linux kernel
MIPS
下Linux
系统引导过程
BootLoader
将Linux
内核移动到指定的物理地址处,确定内核开始执行的第一条指令地址- 第一阶段从
head.s
文件开始,初始化堆栈、内存等 - 第二阶段从
start_kernel()
开始初始化硬件平台相关的代码
计算机的启动过程(X86
)
计算机首先跳转至
BIOS
处运行寻找硬件设备,随后读取MBR
区段并把控制权转移给操作系统的BootLoader
BIOS
BIOS
设置程序是在ROM
上固定的一组程序,为电脑提供最底层的硬件控制,与硬件系统集成在一起
- 系统上电时会自动跳转至
BIOS
存放的地址开始运行,等待BIOS
提供硬件等信息 Power-On Self-Test
:BIOS
支持上电自检,保证关键组件都能启动并正确初始化BIOS
可更改启动引导设备
UEFI
与BIOS
EFI
使用模块化、C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,突破了BIOS
16位的寻址限制
MBR
硬盘上第0磁头第0磁道第1扇区被称为
MBR
(Master Boot Record),大小为512B
MBR
中存放了BootLoader
和驱动器的逻辑分区信息:前446字节为启动代码与数据(BootLoader
),随后是16字节的分区数据*4个分区(分区数据意义见课件P39
),最后的两个字节应存放AA 55
,他们被称为幻数(当BIOS
读取MBR
时,如果末位无幻数就认为这是一个没有分区的硬盘)
- 硬盘分区共三种:主磁盘分区、扩展磁盘分区、逻辑分区
MBR
限制磁盘至多只能有4个主分区,系统必须位于主分区上- 单一硬盘最多4个主分区,最多一个拓展分区,(并且主+扩不超过4),逻辑分区可有若干个
- 主分区只能有一个为激活状态
X86下的Linux
系统引导过程
当
MBR
被读取到内存中后,其中的BootLoader
接管系统,并初始化硬件设备、建立内存映射,为启动系统做好准备
BIOS
将MBR
读入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驱动分区内的操作系统
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 sin!