关于bios的理解

首先说一下我对bios的疑问?

1、为什要工作在实模式下?为了更好的兼容以前的芯片么?

2、bios的地址问题?如显卡的bios编制规则?

3、bios为啥只能识别MBR?又是怎么读到内存里面的?


边学边更新。。。。

1、bios上电工作在实模式下,这要追随到intel早期推出的芯片,随着cup和操作系统的发展,bios却没有进步,一方面因为屏蔽硬件和系统的更新,另一方面是完全能够担当重任且有良好的兼容性。


2、bios现在流行的是lba逻辑编址,cpu只负责把想要的地址告诉适配器,然后由硬盘适配器进行翻译寻址。所有bios都是同一编址的,包括显卡等,在内存中有对应的空洞。


3、这个问题其实也很简单,bios其实可以识别大于mbr的区域,但为了通用性,mbr成了一个约定俗成的限制。


综上所述:uefi的出现是必然的,标准化的规范使开发变得更容易,灵活性也增加了。



工作原理介绍

 
下面从计算机加电开始,看 BIOS 是如何一步一步工作的:
 
1、 加电
计算机电源开始工作,当电源的输入电压稳定以后,主板的 timer 被触发,它产生一个复位脉冲送给 80X86cpu 让 cpu 开始工作,当 cpu 收到该复位脉冲后,其硬件逻辑就会置 CS 寄存器为 FFFFH , IP 寄存器为 0000H ,也就是说,会自动地到 FFFF:0000H 去取第一条指令,(在对内存编址的时候,高地址部分总是编给一些 ROM ,在这些 ROM 里是预先写好的程序或数据,地址 FFFF : 0000h 其实就是在 ROM 里。以前不懂这个规则的时候着实被搞糊涂了,不明白 FFFF : 0000h 里的跳转指令是哪里来的,其实就是写死在 ROM 里的了,就这么简单。) 这个地方只有一条 JMP 指令,告诉处理器到什么地方读取 BIOS ROM 。
 
2 、 POST
POST 其实是一系列的执行不同初始化和计算机硬件检测的函数或例程。 BIOS 以对主板硬件的一系列检测开始,包括检测: cpu ,数学协处理器、时钟 IC , DMA 控制器和中断请求( IRQ )控制器,检测的顺序根据主板的不同而不同。
然后, BIOS 会在地址 C000:000h 和 C780:000h 之间检测视频 ROM 是否存在,如果视频 BIOS 存在,则对视频 ROM 中的内容求校验和进行检测,如果检测成功,则 BIOS 将控制权转交给视频 BIOS 让其初始化当完成时再将控制权交回给 BIOS 。此时你将会在屏幕上看到显卡信息,例如显卡制造商的 logo ,显卡的描述信息,以及显卡 BIOS 信息等。
然后 BIOS 以 2K 的增量扫描 C800:000h 到 DF800:000h 直接的地址,以检测计算机中可能装的其他 ROM ,比如网卡、 SCSI 适配器等,如果找到一个设备的 ROM ,则对该设备的 ROM 中的内容做校验和,如果检测通过则将控制权转交给设备 BIOS 让其对设备进行初始化,初始化结束后 BIOS 再收回控制权,如果校验和检测失败,将再屏幕上显示:“ XXX ROM Error ”,其中 XXX 是检测到该 ROM 的地址的断地址。
然后, BIOS 开始检测地址为 0000:0472h 的内存,该处存放这一个标识系统是通过冷启动启动还是通过热启动启动的标志,如果为 1234h 则代表热启动(该数值是一 little endian 的格式存储的,因此在内存中的应为 3412 ), BIOS 将直接跳过剩余的 POST 例程。如果是冷启动, BIOS 将继续执行剩余的 POST 例程,在此过程中, BIOS 将一个 16 进制的编码写到端口 80h (不同的计算机端口号会不同),这个 16 进制编码指示在何时检测什么。
 
3 、引导操作系统
POST 结束之后, BIOS 会寻找一个操作系统。通常, BIOS 会试图在软驱中寻找 DOS 系统的引导盘,如果找不到,它会试图在 C 盘寻找操作系统。如果软驱中有引导盘, BIOS 将 1 扇区 0 磁头 0 柱面的内容(引导记录)载入内存 0000 : 7C 00h 开始的地方。如果软盘中没有 DOS 引导盘,则 BIOS 搜索硬盘寻找硬盘的第一个扇区,然后把主引导记录( MBR )载入内存 0000 : 7C 00h 开始的地方。 一旦引导记录加载完毕, BIOS 就交出系统的执行控制权,跳转到引导程序的头部执行。下面就是硬盘的 MBR 代码流程,其中的引导扇区是指硬盘相应分区的第一个扇区,是和操作系统有关的操作系统的引导是由它来完成的,而 MBR (硬盘的第一个扇区)并不负责, MBR 和操作系统无关他的任务是把控制权转交给操作系统的引导程序 。
程序流程:
1 将程序代码由 0000:7C00H 移动到 0000:0600H (注, BIOS 把 MBR 放在 0000:7C00H 处)
2 搜索可引导分区,即 80H 标志
成功: goto 3
失败:跳入 ROM BASIC
无效分区表: goto 5
3 读引导扇区 ( 注:用于操作系统的引导,将它读到 0000 : 7C 00H)
失败: goto 5
成功: goto 4
4 验证引导扇区最后是否为 55AAH
失败: goto 5
成功: goto 6
5 打印错误进入无穷循环
6 跳到 0:7C00H 进行下一步启动工作
 
 
 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值