当前位置: 技术问答>linux和unix
BIOS地址到底在那里?
来源: 互联网 发布时间:2014-12-28
本文导语: 在有的参考书上介绍PC启动时,CPU从0xFFFFFFF0地址单元取得指令,这个地址接近32位机的最后地址. 而有的参考书说一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定在ROMBIOS中,ROMBIOS一般是在FEOOOh到FFFFF...
在有的参考书上介绍PC启动时,CPU从0xFFFFFFF0地址单元取得指令,这个地址接近32位机的最后地址.
而有的参考书说一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定在ROMBIOS中,ROMBIOS一般是在FEOOOh到FFFFFh中)
这个不是互相矛盾了吗?
而有的参考书说一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定在ROMBIOS中,ROMBIOS一般是在FEOOOh到FFFFFh中)
这个不是互相矛盾了吗?
|
http://developer.ccidnet.com/pub/disp/Article?columnID=317&articleID=27337&pageNOo=2
|
当计算机打开电源时,内存里包含的是一些随机的数据,所有的东西都没有被初始化,操作系统也没有被加载。开始整个启动过程的是一个特殊的硬件电路,它触发CPU的Reset脚的逻辑值。然后,一些CPU的寄存器比如CS(一个分段寄存器:代码段寄存器,它指向含有程序指令的段),eip(在执行指令过程中,当CPU检测到一个意外事故发生时,它会做出三种类型的判断:错误、陷阱、中止,这取决于eip寄存器的值,它存储在内核模块栈里)就会被给定一个值。接着,物理地址为0xfffffff0的代码将被执行。这个地址被存储在一个只读存储器(ROM)里。BIOS(基本输入/输出系统)实际上是一段存储在ROM里的程序。它包含了一系列可以被某些操作系统调用,用于处理计算机各种硬件设备的中断驱动和低级程序。其中微软的DOS就是这样的一种操作系统。
Linux是否使用附于计算机系统的BIOS来初始化硬件设备?或者说,是否有其它的东西来完成同样的任务?不过这个问题没有那么简单,必须要了解一些知识。我们从80386模式开始。Intel微处理器实现地址翻译(从逻辑地址->线性地址->物理地址)有两种不同的途径,分别称作实模式和保护模式。实模式存在主要是为了使得处理器可以和较老的处理相兼容。事实上,所有的BIOS程序都是在实模式下运行的。但是,Linux内核是在保护模式下运行,而不是在实模式下。因此,一旦初始化完成后,Linux就不再使用BIOS,而是完全由自己来为计算机上的所有硬件提供驱动程序(这点和DOS是不一样的)。
Linux是否使用附于计算机系统的BIOS来初始化硬件设备?或者说,是否有其它的东西来完成同样的任务?不过这个问题没有那么简单,必须要了解一些知识。我们从80386模式开始。Intel微处理器实现地址翻译(从逻辑地址->线性地址->物理地址)有两种不同的途径,分别称作实模式和保护模式。实模式存在主要是为了使得处理器可以和较老的处理相兼容。事实上,所有的BIOS程序都是在实模式下运行的。但是,Linux内核是在保护模式下运行,而不是在实模式下。因此,一旦初始化完成后,Linux就不再使用BIOS,而是完全由自己来为计算机上的所有硬件提供驱动程序(这点和DOS是不一样的)。