程序员面试必考题(十七)--基本输入输出系统BIOS

2019-07-14 03:34发布

基本输入输出系统(BasicInput Output System,BIOS)是计算机系统软件中与硬件关系最密切的软件之一,它包含最基本的中断服务程序、系统设置程序、加电自检程序和系统启动自举程序。BIOS程序是计算机开机加电后第一个开始执行的程序,完成硬件检测及基本的设置功能,BIOS也为操作系统及其他自启动程序的开发、加载提供接口,是计算机系统中最基础的系统软件。本文主要介绍BIOS的构成及功能。 一、 BIOS的概述 在日常使用计算机的过程中,特别是在进行安装操作系统、设置开机密码等操作时,经常会接触到BIOS的相关概念。BIOS是“BasicInput Output System”的缩写,其中文名称为“基本输入输出系统”。BIOS是固化在计算机主板上的ROM芯片中的一组程序,直接对计算机系统中的输入输出设备进行硬件级的控制,为其他软件程序与硬件设备之间建立连接提供基础。BIOS是计算机加电后最先执行的程序,完成对系统的各个硬件设备初始化设置和测试等功能,以确保系统能够正常工作。若硬件不正常则立即停止工作,并把出错的设备信息反馈给用户。 在计算机主板中,保存BIOS程序的ROM及其配套电路构成了BIOS芯片。BIOS芯片通常是一块32针的双列直插式长方形或正方形集成电路,表面贴有“BIOS”字样的标签。BIOS芯片根据其ROM存储器特点的不同,可以分为EPROM和EEPROM两种类型。EPROM称为可擦除可编程只读存储器,其芯片的中央有一个透明的小窗口,通过这个小窗口可以使用紫外线光将芯片上保存的信息擦除掉,因此需要一块不透明的标签将已保存了信息的EPROM芯片的紫外线窗口封住。在向EPROM写入内容时,必须先用紫外线擦除器将EPROM中的信息清除掉,即将EPROM中的每个信息存储比特位单元都变成“1”状态。而EEPROM是电可擦除可编程只读存储器,在通常情况下,EEPROM与EPROM一样也是只读的,当需要写入内容时,只要在指定的引脚加上一个高电压即可快速地写入或擦除。另外还有一种EEPROM就是现在主板上常见的FLASHROM——闪速存储器,其读写速度更快、更可靠,而且可以用单电压进行读写和编程,为便携式设备的在线操作提供了极大的便利,也因此广泛应用在计算机主板上。通常,在Intel486以及486以下档次计算机中使用的BIOS芯片基本上采用的是EPROM芯片,而586及以上档次计算机中使用的BIOS芯片基本上均是EEPROM。 在微型计算机主板上使用的主流BIOS产品有AMIBIOS、AwardBIOS、PhoenixBIOS三种类型。AMIBIOS是AMI公司出品的BIOS系统软件,开发于80年代中期,早期的286、386大多采用AMIBIOS,它对各种软、硬件的适应性好,能保证系统性能的稳定。AwardBIOS是由AwardSoftware公司开发的BIOS产品,在台式机的主板中应用最为广泛。PhoenixBIOS是Phoenix公司的产品,在性能和稳定性方面要优于AwardBIOS和AMIBIOS,多用于服务器系统、品牌机和笔记本电脑中。目前,Phoenix公司已经与Award公司合并,其产品Phoenix-AwardBIOS应用于各种类型的微型计算机主板系统。 二、 BIOS的组成 固化在ROM中的BIOS程序包括以下几部分。 1.BIOS中断服务程序 中断是改变处理器执行指令顺序的一种事件,这样的事件与CPU芯片内外部硬件电路产生的电信号相对应。计算机在执行程序的过程中,当出现中断时,计算机停止现行程序的运行,转向对这些中断事件的处理,处理结束后再返回到现行程序的间断处。引起中断产生的事件称为中断源,包括外部设备请求、发生设备故障、实时时钟请求、数据通道中断、软件中断等等。CPU对中断的处理是通过执行中断服务程序来实现的,中断服务程序是系统开发者针对某种中断事件事先编写好的,保存在内存的某个地址空间,每个中断服务程序的入口地址保存在中断向量表中。中断源在向CPU进行中断请求时,会告知CPU一个中断类型号n(n在x86系统中规定为0-255之间的整数),每个n是一个整型数,对应一种中断服务程序。CPU根据中断类型号,查找中断向量表,找出对应的中断服务程序的入口地址,进而调用该中断服务程序。BIOS中包含很多中断服务程序(或者称为中断服务例程),比如显示服务(INT10H)、直接磁盘服务(INT13H)、键盘服务(INT16H)等等,可以为微型计算机软件和硬件之间提供可编程接口,用于软件功能与硬件设备实现衔接。 DOS、Windows等操作系统对软盘、硬盘、光驱与键盘、显示器等外围设备的管理即建立在系统BIOS的基础上。程序员也可以直接调用BIOS中断服务程序。 2.BIOS系统设置程序 微型计算机中各部分组件的配置参数是放在一块可读写的CMOSRAM芯片(简称CMOS)中的,它保存着系统CPU、软/硬盘驱动器、显示器、键盘等部件的配置信息。微型计算机关闭电源后,系统通过一块后备电池向CMOS供电以保持其中的信息。如果CMOS中关于微机部件的配置信息不正确,会导致系统性能降低和零部件不能识别,并由此引发一系列的软硬件故障。在BIOS芯片中装有一个程序称为系统设置程序,其作用就是用来设置CMOS中的各种参数。各品牌和型号的微型计算机对进入CMOS设置界面使用的按键有不同的规定。可以在开机后按下规定的按键进入到CMOS系统配置程序进行相关参数的设置。系统配置程序提供了良好的界面供用户使用。设置CMOS参数的过程,习惯上也称为“BIOS设置”。增加了新的部件或者要进行操作系统的安装或升级,通常都需要进行BIOS设置。 在这里要注意CMOS设置和BIOS设置概念的区别。CMOS是微型计算机主机板上一块特殊的RAM芯片,是系统参数存放的地方,而BIOS是一组程序,存储在主板上EPROM或EEPROM芯片中,BIOS中所包含的系统设置程序是完成参数设置的手段。因此,准确的说法应是通过BIOS中的系统设置程序对CMOS参数进行设置。 3.POST加电自检程序 微型计算机在接通电源后,系统有一个对内部各个设备进行检查的过程,该过程是由一个通常称之为 POST(PowerOn Self Test, 加电自检 ) 的程序来完成的。完整的 POST 自检过程包括了 CPU 、 640K 基本内存、 1M 以上的扩展内存、 ROM 、主板、 CMOS 存储器、串口、并口、显示卡、硬盘及键盘的测试。自检中若发现问题,系统将给出提示信息或鸣笛警告。 4.BIOS系统启动自举程序 BIOS系统启动自举程序的作用是在完成POST自检后,按照系统CMOS设置中的启动顺序搜寻硬盘驱动器及CDROM、网络服务器等有效的启动驱动器,读入操作系统引导程序,然后将系统控制权交给引导程序。操作系统从执行引导程序开始逐步完成操作系统内核的加载和初始化,完成系统的启动。 三、 BIOS的基本功能 根据BIOS所包含的各种程序,归纳出BIOS的基本功能如下。 1.自检及初始化 在微型计算机接通电源到操作系统开始工作之前,BIOS程序负责系统的启动。首先是通过POST自检程序对系统各个部件进行检查测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告。其次,BIOS可以为微型计算机系统提供初始化服务,包括创建中断向量、设置寄存器、对一些外部设备进行参数设置等等,只有当硬件参数设置与实际微型计算机硬件相符合时,系统才能正常工作。最后,BIOS还负责操作系统的引导。BIOS先从硬盘的开始扇区读取引导记录,如果没有找到,则会在显示器上显示没有引导设备,如果找到引导程序会把微型计算机系统的控制权转给引导程序,通过执行引导程序开始,逐步把操作系统装入内存,并执行操作系统程序。 2.提供程序服务处理 BIOS是连接微型计算机系统软件和硬件之间的“桥梁”,它可以为各种操作系统软件和应用程序提供微型计算机输入输出设备的处理服务,比如磁盘的读写、键盘的读取、将文件输出到打印机等。为了完成这些操作,CPU通过执行BIOS程序直接与计算机的输入输出设备之间进行命令和数据的交换,通过特定的端口向输入输出设备发出命令,向这些外部设备传送数据或者接收这些设备传过来的数据,从而实现操作系统或应用程序对输入输出设备的硬件操作。 3.提供硬件中断处理 因为BIOS中包含了各种中断服务程序,当系统需要对不同硬件进行操作时,BIOS可以调用其中的中断服务程序来实现微型计算机硬件设备的控制和使用。 2、3两部分功能虽然是各自独立,但在使用上密切相关。这两部分分别为软件和硬件服务,通常情况下都是联合在一起工作,保证微型计算机系统的正常运行。 四、 微型计算机启动的一般过程 微型计算机设备从打开电源到进入操作系统界面,在这短短的几秒钟时间里,是由BIOS系统控制和配合计算机硬件进行工作的,下面来简单分析一下微型计算机启动的一般过程。 1.当电源开关按下时,电源开始向主板和其他设备供电,此时电压并不稳定,于是,当主板认为电压并没有达到CMOS中记录的CPU的主频所要求的电压时,就会向CPU发出RESET信号(复位信号),当电压达到符合要求的稳定值时复位信号撤销,CPU立刻从基本内存的BIOS段读取一条跳转指令,跳转到BIOS的启动代码处,开始执行启动系统的BIOS程序。 2.执行BIOS启动程序会进行加电自检POST。这个过程进行得很快,它的主要工作是检测关键设备,如电源、CPU芯片、BIOS芯片、基本内存等电路是否存在,供电情况是否良好。如果自检出现了问题,系统喇叭会发出警报声(根据警报声的长短和次数可以知道出现了什么问题)。 3.如果自检通过,系统BIOS会查找显卡BIOS,找到后会调用显卡BIOS的初始化代码,此时显示器就开始显示了,BIOS会在屏幕上显示显卡的相关信息。 4.显卡检测成功后会进行其他设备的测试,通过测试后系统BIOS重新执行代码,并显示启动画面,将相关信息显示在屏幕上,而后会进行内存测试,最后是短暂出现系统BIOS设置的提示信息,此时按下进入BIOS程序设置CMOS参数界面的按键,可以对系统BIOS进行需要的设置,完成后系统会重新启动。 5.此后BIOS会检测系统的标准硬件(如硬盘、光驱、串行和并行接口等),检测完成后会接着检测即插即用设备,如果有的话就为该设备分配中断、DMA通道和I/O端口等资源,至此所有的设备都已经检测完成了,比较老的计算机会进行一次清屏操作并显示一个系统配置表,如果与上次启动相比出现了硬件变动,BIOS还会更新扩展系统配置数据ESCD(ExtendedSystem Configuration Data,ESCD),它是系统BIOS用来与操作系统交换硬件配置信息的数据,这些数据被存放在CMOS中。新型机器则不再显示这些内容了。 6.当上面的所有步骤都顺利完成以后,BIOS将执行最后一项任务:按照用户指定的设备顺序,依次从设备中找启动程序,以完成系统启动。例如:我们设置的启动顺序是先从光驱启动,然后从硬盘启动,BIOS会先去光驱中找启动程序,如果光驱中没有光盘的话,系统接着从硬盘启动。如果启动的目的是要加载操作系统的话,接下来微型计算机将会先执行启动程序,然后加载操作系统、完成操作系统初始化、将系统的控制权交给操作系统。