操作系统启动过程简单分为四部分,从BIOS自检、系统引导、启动内核、初始化系统。其中每个部分又分为多个自部分,操作系统的建立是一个相对比较复杂的事情。
操作系统从加电到用户工作环境准备好的过程分为三个步骤:初始引导,核心初始化,系统初始化。
一.初始引导
1.实模式和保护模式
(1)实模式(实地址模式):系统按照8086寻址方法访问00000h~FFFFFh(1MB大小)。
寻址方式:物理地址(20位)=段地址左移四位+偏移地址
CPU单任务运行。
实模式的存在时间非常短,一般感觉不到。CPU在复位(reset)或加电(power on)的过程中是以实模式方式进行的。CPU以实模式运行时,不能实现权限分级,也不能访问20位以上的地址线,即只能访问1MB大小的内存。之后进行加载操作系统模块,实模式转化为保护模式。
实模式存取的1MB空间:
前面640K(00000~9FFFF):基本内存
中间128K(A0000~8FFFF):显卡内存
末尾256K(C0000~FFFFF):BIOS
C0000~C7FFF:显卡 BIOS
C8000~CBFFF:IDE控制器BIOS
F0000~FFFFF:系统BIOS
(2)保护模式(内存保护模式)
寻址方式:段(32位)和偏移量(32位),寻址4GB。
保护模式改变了程序的寻址方式,使进程的地址空间得到保护。
2.系统BIOS(BASIC I/O SYSTEM)(fireware,固件)
在实模式下访问的1MB空间的最后64KB(F0000~FFFFF)中存储着系统BIOS。
功能:CMOS设置、基本的I/O设备中断服务、POST(上电自检)、系统自举。
3.POST
在加电后CPU回马上从FFFF0h处开始执行指令,这里的指令是JUMP POST的跳转指令,跳到系统BIOS启动代码处。该代码会进行POST(Power On Self Test ,加电后自检)。首先会先检查显卡BIOS,检查完后开始在屏幕上显示显卡信息。其后是检查系统中一些关键设备是否正常工作,如果存在问题,系统BIOS会直接控制喇叭发出发出声音来汇报错误信息,然后系统BIOS会继续检查各种标准硬件设备,在这之后会继续检查一些即插即用设备。在所有硬件设备检查完毕后,系统BIOS会根据用户指定的启动顺序选择从软件、硬件或者光驱启动。
4.MBR(Master Boot Record,主引导记录)
在通常设定的启动顺序下,系统BOIS会读取磁盘0面0道第一扇区的内容(MBR)。MBR只有512个字节,其主要作用是告诉计算机到磁盘那个位置去寻找操作系统。计算机会加载MBR中的引导程序,常见的引导程序有:ntrdl(WinXP以下)、bootmgr(Vista以上Win7)、GRUB、LILO。接着引导程序会根据相关参数读取硬盘指定位置的文件到内存,加载硬盘上的操作系统内核并初始化基本参数,再之后,操作系统内核会加载其内核剩余部分,直至完全控制计算机。
二.核心初始化
目的:执行系统核心的初始子程序,初始化系统核心数据。
典型工作:
l 各种寄存器的初始化
l 存储系统和页表初始化
l 核心进程构建
…
三.系统初始化
目的:为用户使用系统做准备,使系统处于待命状态。
四.系统启动举例
1.Windows的启动过程
l POST
加电后BIOS启动加电自检程序
l 初始引导
BIOS从MBR读入引导程序,装入内存的特定位置引导程序启动DOS7.0,调入操作系统核心WINDOWS开始接管系统
l 核心初始化
资源状态、核心数据等初始化
l 系统初始化
GUI界面生成,系统处于待命/消息接受状态
2.Linux的启动过程
POST → MBR → KERNEL映像 → KERNEL映像自解压并执行→内核初始化→内核启动