BIOS程序在内存最开始的位置(0x00000)用1KB的内存空间(0x00000~0x003FF)构建中断向量表,在紧挨着它的位置用256KB的内存空间构建BIOS数据区(0x00400~0x004FF),并在大约57KB以后得位置(0x0e05b)加载了8KB左右的与中断向量表相应的若干中断服务程序 。
中断向量表有256个中断向量,每个中断向量占4个字节,其中两个字节是CS值,两个字节是IP值 。每个中断向量都指向一个具体的中断服务程序 。
BIOS阶段的工作POST开机自检
BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做”硬件自检”(Power-On Self-Test),缩写为POST 。如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止 。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息 。
电脑主机打开电源的时候,随后会听到滴的一声,系统启动开始了开机自检(POST-power on self test)自检开始)
这个过程中主要是检测计算机硬件设备比如:CPU,内存,主板,显卡,CMOS等设备是否有故障存在
如果有硬件故障的话将按两种情况理:
- 对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;
- 对于非严重故障则给出提示或声音报警信号,等待用户处理),如果没有故障,POST完整自己的接力任务,将尾部工作交接给BIOS处理
文章插图
加载BIOSBIOS把控制权转交给下一阶段的启动程序 。
这时,BIOS需要知道,”下一阶段的启动程序”具体存放在哪一个设备 。也就是说,BIOS需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备 。这种排序叫做”启动顺序”(Boot Sequence) 。打开BIOS的操作界面,里面有一项就是”设定启动顺序” 。
文章插图
在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了 。
引导操作系统硬件自检完成后,我们期望能否启动操作系统,但是问题出来了
- 操作系统存放在哪?
- BIOS如何找到操作系统?
- BIOS如何加载操作系统?
为了寻找操作系统,BIOS按照”启动顺序”,把控制权转交给排在第一位的储存设备 。
这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节 。
如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;
如果不是,表明设备不能用于启动,控制权于是被转交给”启动顺序”中的下一个设备 。
这最前面的512个字节,就叫做主引导记录(Master boot record,缩写为MBR)
主引导记录 MBR位于MBR中的主boot loader是一个512字节的镜像,其中不仅包含了程序代码,还包含了一个小的分区表 。
最初的446字节是主boot loader,它里面就包含有可执行代码以及错误消息文本 。接下来的64字节是分区表,其中包含有四个分区的各自的记录(一个分区占16字节) 。MBR通过特殊数字0xAA55(译者注:在电子界中AA55确实是具有传奇色彩的数字,想知道为什么么?将它展开成二进制形式,看看有什么规律)作为两个字节的结束标志 。0x55AA同时也是MBR有效的校验确认 。
主boot loader的工作是寻找并加载次boot loader 。它通过分析分区表,找出激活分区来完成这个任务,当它找到一个激活分区时,它将继续扫描剩下的分区表中的分区,以便确认他们都是未激活的 。确认完毕后,激活分区的启动记录从设备中被读到RAM,并被执行 。
“主引导记录”只有512个字节,放不了太多东西 。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统 。主引导记录由三个部分组成:
- 第1-446字节:调用操作系统的机器码 。
- 第447-510字节:分区表(Partition table) 。
- 第511-512字节:主引导记录签名(0x55和0xAA) 。
分区表硬盘分区有很多好处 。考虑到每个区可以安装不同的操作系统,”主引导记录”因此必须知道将控制权转交给哪个区 。分区表的长度只有64个字节,里面又分成四项,每项16个字节 。所以,一个硬盘最多只能分四个一级分区,又叫做“主分区” 。
推荐阅读
- PHP 开源工作流引擎 V6.0.0 正式版发布
- 鸿蒙APP开发:如何实现“百度地图”的显示?需要3项认真操作才行
- linux-centos网络配置bond
- 国三车能开到什么时候?
- 国产Linux系统可爱鱼CutefishOS 0.7 Beta发布
- 这样清理C盘不影响系统,电脑一下子多了30G,运行忒流畅
- App制作的流程是什么?如何制作App开发流程?
- Java业务开发常见错误
- 小白如何看出计算机操作系统是否开启勒索病毒危险端口
- 小白是如何让Kali Linux操作系统从U盘成功启动