主板上电后整个主板和其上的芯片/总线控制器就构成了一幅地图,该地图表示某某设备在哪一个地方放着,而后BIOS自检就开始了。须要注意的是,万事开头难,bios是怎么开始运行的呢?它的指令代码如何开始执行的呢?这无须咱们关心,是标准强制的,好比bios占据地址总线上发出地址a到b这个区间,而后主板地图创建好(电压稳定)以后,cpu从地址a到b之中的某个特定的位置c开始执行,这个过程十分简单,cpu将从c取指令,将地址c发到地址总线,北桥根据标准将之路由到bios芯片,而后bios芯片将指令经过数据总线发回cpu,cpu执行,这样就开始了执行bios指令,bios基本就是自检,而后跳转到别的地方,至于跳到什么地方,cpu和主板的设计者就无论了,全由bios决定,反正这时候整个板子已经开始工做了,你想跳转到磁盘分区中的代码,你就要先将磁盘中的代码载入内存,这又是一个发送地址到地址总线,取指令执行的过程。
那么bios自检的原理是什么呢?在主板上电且电压稳定以后,其上全部的设备芯片电压都会稳定,而且每一种芯片都会处在reset状态,也就是说这些芯片都遵循各自标准,电路处在一种稳定状态,各个芯片的稳定电路都有本身的标准,好比芯片X的稳定标准为,给它的第1个和第3个引脚发射一个高电平,那么若是从其第5个引脚能获得一个高电平,就说明该芯片正常,而后从其第10到20个引脚会获得一个10位的电平序列,好比是:高-高-低-高-低-高-低-低-高-低,二进制就是1101010010,该二进制数字就是此芯片X的相关信息,再好比检测ram容量,可能就是依次往ram的每个存储芯片某些引脚发送电平信号序列,而后从其另外一些引脚读取该芯片的容量,这样就会在屏幕上最终显示出ram的总大小,正如咱们看到的电脑开机时ram容量从0跳变到最大值同样的效果。bios经过相似的方式探测到全部设备的特性。那么bios是如何找到特定设备的呢?前面的文章说过,bios内部要么保存着一张拓扑图要么在开始运行时第一步先初始化一张该拓扑图(具体如何进行初始化,不外乎根据标准针对特定的芯片引脚发送电平序列信号,注意,仍是根据标准),该拓扑图记载了主板上各个芯片或者设备总线的地址信息和其它的元信息,有了这个拓扑图,主板地图上的芯片/设备/总线就有了各自的地址了,bios此时是总管,若是把主板当成一座城市的话,bios此时就是城市主管,记录着每家每户的地址信息,而后挨家挨户慰问如今一切安好!这就是自检的过程。
注意,通常而言,主板芯片或者设备总线的地址信息是硬存储在bios芯片内部的,然而大多数的芯片特性却不保存在bios芯片内部,而是在自检的时候从对应地址动态读取到的,读取的方式无非就是根据地址信息获得设备标准,而后根据标准往设备的某些引脚发送一些电平序列,而后获得设备特性信息,这些特性信息被保存在芯片或者设备内存的小芯片中,或者叫设备控制器或者叫设备bios。
LinuxBIOS,如今的Coreboot,它实现了一个开源的bios,而且使用了大量的linux内核源码,它至关于一个高度精简的linux操做系统,除了自检以外,它还能作不少事情,由于控制权在交给其它代码以前一直在linuxbios手中,且它又是基于linux的,所以它完成的功能更多。bios咱们平时接触很少,然而却能控制整个计算机,好比计算机有多少内存可用,操做系统是直接求于bios的,若是bios告诉操做系统只有30M的内存,那么操做系统只能使用30M,若是bios告诉操做系统虽然有4G的ram,而后有2.7G都为设备保留,那么你除了抗议以外没有任何办法。现在所谓的IT从业者都关注于顶层的应用,而专一于底层机制的人均可以被视为机修工了,CIH那样的病毒也愈来愈少了,然而一旦再次出现,我想不多有人能应付。
前面提到过BIOS里面的地址拓扑图,这幅图能够存储在cmos芯片里面,也能够动态检测,这也就构造了两种bios自检的办法,第一种是cmos中已经存储了地址拓扑图,bios直接根据拓扑图中的地址和属性信息来检测设备,好比cmos中有下面一个条目:位于地址A处的是PCI设备,那么bios就根据PCI设备的标准像地址A处发送电平信号,而后读取回复;第二种方式就是探测法,bios从地址0开始,一直探测到最大的地址处,在每个地址处,虽然bios不知道是什么设备,可是须要每个设备都要提供一个探测接口,好比这个接口是写入10110,那么bios往每个地址都写入10110,而后获得的回复便是设备的类型,而后再根据第一种方式进行自检。熟悉LinuxBIOS的可能对此比较熟悉,bios自检彻底是基于主板设计的,所以bios的开发技术一直都被主板厂商把持着,一种板子对应一个bios,这就是道理!bios仍是把持着一切,主板和应用软件之间有一个接口,那就是bios。linux