BIOS启动过程详解

BIOS 

工作原理

 


最近几天在看《
UNIX

操作系统设计》突然想到计算机是如何启动的呢?那就得从
BIOS

说起,其实这个冬冬早已是
n

多人写过的了,今天就以自己的理解来写写,权当一个学习笔记。


一、        

 


预备知识:

 


很多人将
BIOS


CMOS

混为一谈,在开始介绍
BIOS

工作原理以前先来简单的了解以下
BIOS


CMOS


 


什么是
BIOS 


 


系统开机启动
 BIOS

,即微机的基本输入输出系统
(Basic Input-Output System)

,是集成在主板上的一个
ROM

芯片,其中保存有微机系统最重要的基本输入
/

输出程序、系统信息设置、开机上电自检程序和系统启动自举程序。


集成在
BIOS

上得程序主要有如下几个:


BIOS


中断例程:

 


BIOS

中断服务程序。它是微机系统软、硬件之间的一个可编程接口,用于程序软件功能与微机硬件实现的衍接。
 DOS/Windows

操作系统对软、硬盘、光驱与键盘、显示器等外围设备的管理即建立在系统
BIOS

的基础上。程序员也可以通过
 


INT 5


INT 13

等中断的访问直接调用
BIOS

中断例程。
 


BIOS


系统设置程序:

 

微机部件配置情况是放在一块可读写的
CMOS RAM

芯片中的,它保存着系统
CPU

、软硬盘驱动器、显示器、键盘等部件的信息。
 

关机后,系统通过一块后备电池向
CMOS

供电以保持其中的信息。如果
CMOS

中关于微机的配置信息不正确,会导致系统性能降低、零部件不能识别,并由此引发一系统的软硬件故障。在
BIOS ROM

芯片中装有一个程序称为

系统设置程序

,就是用来设置
CMOS RAM

中的参数的。这个程序一般在开机时按下一个或一组键即可进入(一般为
Delete

键),它提供了良好的界面供用户使用。这个设置
 CMOS

参数的过程,习惯上也称为
“BIOS

设置

。新购的微机或新增了部件的系统,都需进行
BIOS

设置。
 


POST


上电自检

 

微机接通电源后,系统将有一个对内部各个设备进行检查的过程,这是由一个通常称之为
POST(Power On Self Test,

上电自检
)

的程序来完成的。这也是
BIOS

的一个功能。完整的
POST

自检将包括
CPU


640K

基本内存、
1M

以上的扩展内存、
ROM

、主板、
 CMOS

存贮器、串并口、显示卡、软硬盘子系统及键盘测试。自检中若发现问题,系统将给出提示信息或鸣笛警告。
 


BIOS


系统启动自举程序

 

在完成
POST

自检后,
ROM BIOS

将按照系统
CMOS

设置中的启动顺序搜寻软硬盘驱动器及
CDROM

、网络服务器等有效的启动驱动器
 

,读入操作系统引导记录,然后将系统控制权交给引导记录,由引导记录完成系统的启动。
 

 

 


什么是
CMOS 


 


CMOS

(本意是指互补金属氧化物半导体
——

一种大规模应用于集成电路芯片制造的原料)是微机主板上的一块可读写的
RAM

芯片,用来保存当前系统的硬件配置和用户对某些参数的设定。
CMOS

可由主板的电池供电,即使系统掉电,信息也不会丢失。
 CMOS RAM

本身只是一块存储器,只有数据保存功能,而对
CMOS

中各项参数的设定要通过专门的程序。早期的
CMOS

设置程序驻留在软盘上的
(


IBM


PC/AT

机型
)

,使用很不方便。现在多数厂家将
CMOS

设置程序做到了
BIOS

芯片中,在开机时通过特定的按键
 

就可进入
CMOS

设置程序方便地对系统进行设置,因此
CMOS

设置又被叫做
BIOS

设置。
 

早期的
CMOS

是一块单独的芯片
MC146818A(DIP

封装
)

,共有
64

个字节存放系统信息
,


CMOS

配置数据表。
386

以后的微机一般将
 MC146818A

芯片集成到其它的
IC

芯片中
(


82C
206


PQFP

封装
)

,最新的一些
586

主板上更是将
CMOS

与系统实时时钟和后备电池集成到一块叫做
DALLDA DS1287

的芯片中。随着微机的发展、可设置参数的增多,现在的
CMOS RAM

一般都有
128

字节及至
256

字节的容量。为保持兼容性,各
BIOS

厂商都将自己的
BIOS

中关于
CMOS RAM

的前
64

字节内容的设置统一与
MC146818A


CMOS RAM

格式一致,而在扩展出来的部分加入自己的特殊设置,所以不同厂家的
BIOS

芯片一般不能互换,即使是能互换的,互换后也要对
 CMOS

信息重新设置以确保系统正常运行。


 


二、工作原理介绍

 


 


下面从计算机加电开始,看
BIOS

是如何一步一步工作的:


 


1、             

 


加电

 


计算机电源开始工作,当电源的输入电压稳定以后,主板的
timer

被触发,它产生一个复位脉冲送给
80X86cpu


cpu

开始工作,当
cpu

收到该复位脉冲后,其硬件逻辑就会置
CS

寄存器为
FFFFH


IP

寄存器为
0000H

,也就是说,会自动地到
FFFF:0000H

去取第一条指令,(在对内存编址的时候,高地址部分总是编给一些

ROM

,在这些
ROM

里是预先写好的程序或数据,地址
 FFFF


0000h

其实就是在
ROM

里。以前不懂这个规则的时候着实被搞糊涂了,不明白
FFFF


0000h

里的跳转指令是哪里来的,其实就是写死在
ROM

里的了,就这么简单。)
这个地方只有一条
JMP

指令,告诉处理器到什么地方读取
BIOS ROM


 


2


POST

 

POST

其实是一系列的执行不同初始化和计算机硬件检测的函数或例程。
BIOS

以对主板硬件的一系列检测开始,包括检测:
cpu

,数学协处理器、时钟
IC


DMA

控制器和中断请求(
IRQ

)控制器,检测的顺序根据主板的不同而不同。


然后,
BIOS

会在地址
C000:000h 


 C780:000h

之间检测视频
 ROM

是否存在,如果视频
BIOS

存在,则对视频
ROM

中的内容求校验和进行检测,如果检测成功,则
BIOS

将控制权转交给视频
BIOS

让其初始化当完成时再将控制权交回给
BIOS

。此时你将会在屏幕上看到显卡信息,例如显卡制造商的
logo

,显卡的描述信息,以及显卡
BIOS

信息等。


然后
BIOS


2K

的增量扫描
C800:000h 


DF800:000h

直接的地址,以检测计算机中可能装的其他
ROM

,比如网卡、
SCSI

适配器等,如果找到一个设备的
ROM

,则对该设备的
ROM

中的内容做校验和,如果检测通过则将控制权转交给设备
BIOS

让其对设备进行初始化,初始化结束后
BIOS

再收回控制权,如果校验和检测失败,将再屏幕上显示:“
XXX ROM Error

”,其中
XXX

是检测到该
ROM

的地址的断地址。


然后,
BIOS

开始检测地址为
0000:0472h

的内存,该处存放这一个标识系统是通过冷启动启动还是通过热启动启动的标志,如果为
1234h

则代表热启动(该数值是一
little endian

的格式存储的,因此在内存中的应为
3412

),
BIOS

将直接跳过剩余的
POST

例程。如果是冷启动,
BIOS

将继续执行剩余的
POST

例程,在此过程中,
BIOS

将一个
16

进制的编码写到端口
80h

(不同的计算机端口号会不同),这个
16

进制编码指示在何时检测什么。


 


3


、引导操作系统

 


POST

结束之后,
BIOS

会寻找一个操作系统。通常,
BIOS

会试图在软驱中寻找
DOS

系统的引导盘,如果找不到,它会试图在
C

盘寻找操作系统。如果软驱中有引导盘,
BIOS


1

扇区
0

磁头
0

柱面的内容(引导记录)载入内存
0000


7C
00h

开始的地方。如果软盘中没有
DOS

引导盘,则
BIOS

搜索硬盘寻找硬盘的第一个扇区,然后把主引导记录(
MBR

)载入内存
0000


7C
00h

开始的地方。
一旦引导记录加载完毕,
BIOS
就交出系统的执行控制权,跳转到引导程序的头部执行。下面就是硬盘的
MBR
代码流程,其中的引导扇区是指硬盘相应分区的第一个扇区,是和操作系统有关的操作系统的引导是由它来完成的,而
MBR
(硬盘的第一个扇区)并不负责,
MBR
和操作系统无关他的任务是把控制权转交给操作系统的引导程序
 


程序流程:
 


将程序代码由
0000:7C00H
移动到
0000:0600H
(注,
BIOS

MBR
放在
0000:7C00H
处)
 


搜索可引导分区,即
80H
标志
 

成功:
goto 3 

失败:跳入
ROM BASIC 

无效分区表:
goto 5 


读引导扇区
 (

注:用于操作系统的引导,将它读到
0000

7C
00H)

失败:
goto 5 

成功:
goto 4 


验证引导扇区最后是否为
55AAH 

失败:
goto 5 

成功:
goto 6 


打印错误进入无穷循环
 


跳到
0:7C00H
进行下一步启动工作
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章