一些概念
实模式存取下的1M(20位地址线)空间(有关实模式与保护模式 :https://blog.csdn.net/qq_43606914/article/details/106011785)
- 前面640K [00000 – 9FFFF]:基本内存
- 中间128K [A0000 – BFFFF]:显卡显存
- 末尾256K [C0000 – FFFFF]:BIOS
BIOS 基本输入输出系统【Basic Input Output System】:在BIOS内有底层I/O软件,包括读键盘,写屏幕,进行磁盘I/O以及其他过程。
- C0000 – C7FFF:显示卡BIOS
- C8000 – CBFFF:IDE控制器BIOS
- F0000 – FFFFF:最后64KB,系统BIOS
系统BIOS
功能:
- 系统启动配置
- 基本的设备I/O服务
- 系统的加电自检和启动
加电自检POST[Power On Self-Test]
功能:
- 初始化基本硬件:CPU,内存,显卡等
tip:自检正常不提示,错误则通过喇叭提示
按下PowerOn或者Reset键执行第一条指令
执行FFFF0处的指令:POST位于系统BIOS内部
POST之后:
- 查找显卡BIOS,调用显卡BIOS
- 依次查找其他设备执行相应设备的BIOS
- 显示启动画面
- 从硬盘/软盘/光驱/U盘读入OS
- OS启动后,由OS接管计算机
MBS 主启动扇区【Main Boot Sector】
- 位置:硬盘的0磁道0柱面1扇区
- 功能:完成OS加载或启动管理功能
- 大小:512bytes
- 组成:
- 主引导记录MBR(Master Boot Record):446bytes
- 分区表DPT(Disk Partition Table):64bytes
- 硬盘有效标志(Magic Number):2bytes
tip1:BIOS读硬盘时,先读MBS这个特殊的扇区
tip2:MBS与操作系统无关,每个硬盘都有
建议:
想要更深入MBR了解分区可参阅《鸟哥的Linux私房菜》磁盘分区这一小节,里面有对主引导扇区中分区表的详细介绍。
MBR 主启动记录【Main Boot Record】
- 位置:存放在硬盘/软盘的首扇区MBS
- 功能:实际上是一段程序,存放着和OS启动的相关信息;装载第二引导装载程序,如Windows产生的MBR装载运行PBR
- 大小:446bytes
- 组成:内含开机管理程序Boot Loader
Boot Loader的目的:加载核心文件
它的主要工作有:- 提供菜单:让用户选择不同的启动项,实现多重启动
- 加载核心文件:直接指向可启动区加载操作系统
- 跳转:将启动管理功能转交给其他loader(程序)
PBR分区引导记录【Partition Boot Record】
- 位置:每个非扩展主分区及每个逻辑分区的第一个扇区
- 大小:512bytes
- 功能:存放着小段程序,其加载并启动安装在其上的操作系统
BIOS和MBR程序运行过程
(1)POST —> CMOS(硬盘启动)—> 读取MBR ---->控制权交给MBR;
(2)MBR读取分区表(Partition Table),找到其中的活动分区(Active Partition),并确认其他的分区都不是活动分区,MBR读取活动分区的第一个分区(分区引导记录PBR)并把它加载到内存中去。【可将所有主分区和逻辑分区中的一个标识为Active,某分区被标识为Active,则表示系统启动时即加载运行其PBR程序】;
(3)PBR继续控制后面的引导过程。
tip:Windows 只能由活动主分区引导,Linux 则不同,像Ubuntu 的引导程序不仅可以安装在非活动的主分区,甚至可以安装在逻辑分区!
操作系统启动的三个主要步骤
简单来说:从加电到用户工作环境准备好的过程
1.初始引导
- 目的:把OS核心装入内存并使之开始工作接管计算机
- 过程:
(1)加电,JUMP POST
(2)BIOS中的启动程序运行
启动程序:读取MBR(0面0道第一扇区内容)
加载MBR中的引导程序
引导程序:根据相关参数,读取硬盘指定位置的文件到内存
加载硬盘上OS内核,并初始化基本参数
OS内核:逐步加载OS剩余部分,最后完全控制计算机
2.核心初始化
- 目的:OS内核初始化系统的核心数据
- 典型工作:
- 各种寄存器的初始化
- 存储系统和页表初始化
- 核心进程构建
3.系统初始化
- 目的:为用户使用系统作准备,使系统处于待命状态
- 主要工作:
- 初始化文件系统
- 初始化网络系统
- 初始化控制台
- 初始化图像界面