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 和操作系统无关他的任务是把控制权转交给操作系统的引导程序 。

程序流程:

1 将程序代码由 0000:7C00H 移动到 0000:0600H (注, BIOS 把 MBR 放在 0000:7C00H 处)

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

成功: goto 3

失败:跳入 ROM BASIC

无效分区表: goto 5

3 读引导扇区 ( 注:用于操作系统的引导,将它读到 0000 : 7C 00H)

失败: goto 5

成功: goto 4

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

失败: goto 5

成功: goto 6

5 打印错误进入无穷循环

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

posted @ 2014-02-12 10:56  oo_o  阅读(1303)  评论(0编辑  收藏  举报