BIOS执行位置的问题

来源:互联网 发布:率土之势力值算法 编辑:程序博客网 时间:2024/05/03 04:23

看到CSDN上面问到一个问题,BIOS执行第一句的时候到底是在RAM中执行,还是在ROM中执行的。http://topic.csdn.net/t/20061215/10/5232444.html

里面很多高手在讨论,有的人搬出最权威的书籍,有的自己做实验,甚至有人去量PCI和BIOS引脚的电平。看了这些回答,我很受用。首先,要知道ROM和RAM是统一编址的。那是不是上电后,在BIOS自检之前,BIOS将自己搬到RAM(内存)中去了呢,还是根本就是直接在BIOS里面取指令执行的呢?

现在有两个疑问:

                     1:如果是直接在BIOS ROM里面取指令执行,那么没有RAM程序是无法运行的,比如一些变量没有地方存?

                     2:如果是在RAM里面执行的,就说明是上电后,CPU将BIOS里面的代码搬到内存中然后在内存中执行的,那么我将内存条不插然后开机,蜂鸣器会报警。这正好说明了在使用内存之前,CPU还是运行了一段代码的(检测是否有内存),这段程序肯定是在BIOS里面执行的。从这个点来说,程序是可以再BIOS ROM里面执行的。

                     3:但是据书上说,在内存里面却是为BIOS分配了内存,这个内存到底是放BIOS程序和存变量使用,还是只是为了存放变量呢。

                     4:必须有内存条才可以进入BIOS设置,这又说明,运行BIOS应该是在RAM里面的。

 

 

综合以上分析,基本上可以得到结论,在按下电源键后,首先CPU在BIOS ROM里面执行一段代码,检测是否有必须的硬件(比如内存条等等),如果正常,再把自己拷贝到内存里面去执行。只是分析得到的结果,是否正确还有待核实。。。

 

一)自检及初始化

   这部分负责启动电脑,具体有三个部分:

  第一个部分是用于电脑刚接通电源时对硬件部分的检测,也叫做加电自检(Power On Self Test,简称POST),功能是检查电脑是否良好,通常完整的POST自检将包括对CPU,640K基本内存,1M以上的扩展内存,ROM,主板,CMOS存储器,串并口,显示卡,软硬盘子系统及键盘进行测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告。自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。

  第二个部分是初始化,包括创建中断向量、设置寄存器、对一些外部设备进行初始化和检测等,其中很重要的一部分是BIOS设置,主要是对硬件设置的一些参数,当电脑启动时会读取这些参数,并和实际硬件设置进行比较,如果不符合,会影响系统的启动。

  第三个部分是引导程序,功能是引导DOS或其他操作系统。BIOS先从软盘或硬盘的开始扇区读取引导记录,如果没有找到,则会在显示器上显示没有引导设备,如果找到引导记录会把电脑的控制权转给引导记录,由引导记录把操作系统装入电脑,在电脑启动成功后,BIOS的这部分任务就完成了。

  (二)程序服务处理

  程序服务处理程序主要是为应用程序和操作系统服务,这些服务主要与输入输出设备有关,例如读磁盘、文件输出到打印机等。为了完成这些操作,BIOS必须直接与计算机的I/O设备打交道,它通过端口发出命令,向各种外部设备传送数据以及从它们那儿接收数据,使程序能够脱离具体的硬件操作。

  (三)硬件中断处理

  硬件中断处理则分别处理PC机硬件的需求,BIOS的服务功能是通过调用中断服务程序来实现的,这些服务分为很多组,每组有一个专门的中断。例如视频服务,中断号为10H;屏幕打印,中断号为05H;磁盘及串行口服务,中断14H等。每一组又根据具体功能细分为不同的服务号。应用程序需要使用哪些外设、进行什么操作只需要在程序中用相应的指令说明即可,无需直接控制。

  (二)(三)两部分虽然是两个独立的内容,但在使用上密切相关。这两部分分别为软件和硬件服务,组合到一起,使计算机系统正常运行。

  另外需注意:BIOS设置不当会直接损坏计算机的硬件,甚至烧毁主板,建议不熟悉者慎重修改设置。

  (四)记录设置值

  用户可以通过设置BIOS来改变各种不同的设置,比如onboard显卡的内存大小。

  (五)加载操作系统

  用户手上所有的操作系统都是有BIOS转交给引导扇区,再由引导扇区转到各分区激活响应的操作系统。