小公司研发总监,既当司令也当兵!
分类: LINUX
2015-08-14 09:38:03
在学习linux系统启动的过程中,经过仔细的思考,我还存在一点困惑:CPU的reset信号撤销掉,CPU会从F000:FFF0地址(即1MB的RAM的最高地址的64KB)开始执行,这个位置实际上是一条跳转指令,直接跳转到BIOS的地址开始执行。
为什么说我对这个还有些困惑呢?我困惑的时在我的脑海里CPU是只能直接与RAM打交道的,但是BIOS是存储在ROM中的,既然说跳转到BIOS的地址开始执行,那么此时BIOS应该已经在RAM里面了,但是是谁把ROM里面的BIOS程序下载到RAM里面去的呢?更何况才刚刚打开电源,也没有足够的时间啊?
在网上查阅了一些资料后,我开始慢慢明白了,其实CPU不仅仅可以跟RAM打交道的,也可以跟ROM打交道的,只是一般情况下ROM的速度实在太慢,所以一般情况下并不跟ROM打交道,但那并不代表不能跟ROM直接打交道,ROM和RAM在CPU看来是一样的,只是他们的速度不一样而已。
实际上, 处理器的第一条指令会将地址定位到BIOS存储器中,让初始化程序开始执行,F000段只是ROM占用了RAM段而已。 CPU会执行BIOS的一小部分代码,我们习惯把这一段代码叫做Boot Block。这段代码将对内存RAM进行检测,检测完毕后再将剩下的代码转到RAM中去执行,这些代码再去做BIOS的各种工作。
很多人都知道BIOS是工作在计算机最底层的的基本输入输出系统,它是英文Basic Input/Output System的首字母缩写。从本质上来讲,狭义的BIOS就是指加载在电脑硬件系统上的最基本的软件程式码,如果我们按照功能来划分,BIOS有5大功能:
1 . 开机自我测试:检查中央处理器 (CPU) 及各控制器的状态是否正常;
2. 初始化动作:针对内存、主板芯片组、显卡及周边装置做初始化动作;
3. 记录系统设定值:提供各元件的基本设定,如显示器、键盘、处理器、内存等;
4. 提供常驻程式库:提供操作系统或应用程式呼叫的中断常驻程式,如INT 10H等;
5. 加载操作系统:从储存装置中加载操作系统到随机存取内存。
通俗来讲,我们可以将BIOS看作是专门与硬件沟通的微型操作系统,通常使用与CPU相容的组合语言来编写(机械语言+高级语言)。但在笔者看来,BIOS既是英文的首字母缩写,同时也具有希腊文字“βιοζ”(生命)的寓意。 真正的BIOS技术起源于IBM PC/AT机器的流行,以及第一台由康柏公司研制生产的“克隆”PC。在启动的过程中,BIOS担负著初始化硬件、检测硬件功能以及引导操作系统的责任。在早期,BIOS还需要提供一套运行时的服务程序给操作系统或者应用软件来使用。
可以说,BIOS是整台计算机最核心的灵魂,所以必须找到一个合适的容器来妥善保管;否则一旦魂飞魄散,那整台计算机也就失去了工作的能力。由于特殊的工作要求,BIOS中的微代码程序必须存放在一个断电后能够不丢失信息的只读存储器中,当系统加电或者被重置时,处理器的第一条指令会将地址定位到BIOS 存储器中,让初始化程序开始执行。