【操作系统】BIOS开机自检

2023-10-12 20:04

本文主要是介绍【操作系统】BIOS开机自检,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.BIOS的基本功能

        BIOS 全称 Basic Input/Output System,中文可译为基本输入/输出系统。电脑在按下电源键后的第一反应就是执行BIOS这个程序。之所以会被称之为“基本”,是因为它主要负责了一些开启计算机所需要最最基本的东西,其它更加复杂的操作它也干不了,会交给后续的其他程序做,它主要实现功能如下:

  • 进行第一次最基本的开机自检,挑一些重要的、能够保证计算机正常运行的检查,比如风扇、灯控、CPU等
  • 检查完成后开始硬件初始化操作,确定设备的启动顺序
  • 完成以上操作后将电脑的控制权交给下一位嘉宾(也就是MBR),然后继续睡觉

        有了上面的基本认识后,我们会产生几个疑问:

  • BIOS放在哪里?
  • 什么东西运行了BIOS?
  • 为什么那个东西可以找到它的位置?
  • BIOS里面放了什么东西?

二.第一第二个问题答案

        先回答第一个和第二个问题:BIOS作为第一个被启动的程序,总不能自己启动自己,它是被固化在主板的一个ROM存储器上面,安安静静地等着被翻牌子,等着被谁翻牌子呢?等着被CPU翻牌子。

        知识补充:RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。ROM(Read-Only Memory)即只读内存,是一种只能读出事先所存数据的固态半导体存储器,断电后也能保存数据,一般保存那种一成不变的内容,写进去后便不再变更。如果对存储器为什么可以断电也能保存数据,可以参考我之前写过的一篇文章:【计算机组成原理】寄存器的本质——锁存器

三.第三个问题答案

        再来回答第三个问题:CPU怎么知道BIOS程序在哪里?注意在上面描述BIOS的位置的时候,用了“固化”两个字,说明它的位置已经是确定不变的了,CPU直接来到这个位置找到它就行。那么BIOS具体的位置在哪里呢?0XFFFF0这里。这是什么东西?这是BIOS的地址,CPU打开了导航,把这个地址输入进去,跟着导航走,就能直接找到BIOS。

         这里又引申出来一个问题:

  • 为什么这个地址就是BIOS?而不是其他的地址?

        这里就得从X86架构的CPU鼻祖——Intel 8086微处理器开始说起,传说中8086CPU一共有20条地址总线,所以这个CPU的寻址访问就是:2的20次方=1048576=1MB,如果将用16进制表示,则是0X00000到0XFFFFF。而这每一个地址都有它需要存储的东西:

        PS:这个表格如果看不懂,那么你就可以理解为,因为8086CPU最多只能找到0X00000到0XFFFFF这么大的地址范围(滴滴司机最多就认识本区域内的路是怎么走的,超出这个区域司机就不认路了,也不会走了),为了快速找到需要的功能(司机为了又快又准地把顾客送往目的地),所以规定了每个地址的具体用途(司机自己记住了每个地方的名字),等有指令来的时候就可以直奔那个地址去(顾客说要去公积金中心,司机就知道是去二片区三街道办),不用再花时间找这个数据究竟在那个地址了(司机就不用再从一片区一街道办开始从头到尾地找)。

         从表格中里面可以看到,地址0X00000~0X9FFFF处一共占据640KB的容量,这块地址对应的是DRAM(Dynamic Random Access Memory),也就是动态随机访问内存,也就是对应了插在主板上的内存条。0XA0000~0XEFFFF是预留给外设用的,比如显存、硬盘控制器等,最后的0XF0000~0XFFFFF则是我们的主人公BIOS。

         这里需要再次重申一个细节,这些地址是地址总线的参数输入,与内存条完全没有关系。CPU可以通过地址访问到数据,是由地址总线通过映射完成的,地址总线把某个ROM存储器绑定了这个地址,或者把某个外设的内存绑定了那个地址,等到CPU要使用时就可以直接访问地址,而不需要知道究竟数据放在哪个物理存储单元。

         PS:看到这里,如果你的觉悟够深,那么你可能会遇到和我一样的疑问:

        该问题的答案是直接被CPU执行的,无需加载到内存中运行,此技术叫做XIP eXecute In Place,芯片内就地执行。后续如果我更新了该技术的文章会及时更新链接,如果没有请自行百度,但是懂不懂这个技术都不影响本文章的核心内容。

        回到最先提出的那个问题:为什么这个地址就是BIOS?而不是其他的地址?因为人家就是这么规定的……就相当于为什么1+1=2而不是1+1=10086一样,只是我一开头就和你说你不一定能相信,反正现在估计也不信就是了。

四.第四个问题答案

        最后一个问题:BIOS里面放了什么东西?这个问题的答案可以用BIOS被启动运行的过程来解答,当电源键被按下的一瞬间,CPU中的一对寄存器CS和IP(如果不知道这是什么东西,可以参考我之前写过的一篇文章:【汇编语言】CS:IP寄存器)就被强制初始化成0XF000和0XFFF0,由于开机是在实模式下的,CS和IP再该模式下的段基址会左移四位,所以这对寄存器组合在一起就是BIOS的入口地址。但是从上面那个内存布局表格就可以看到,整个BIOS一共也就16B,这么小的地方又要检查基本硬件又要做各类初始化工作,显然是不够容量的,说明真正进行检查的代码并不在0XFFFF00XFFFFF这个位置,这个位置或许只是一个条状指令,让CPU跳转到真正进行的BIOS自检的代码区域那边去。

        可以看到CS:IP寄存器来到了0XFFFF0这个地址,而这个地址里面保存了一个指令,跳转到0XFE05B这个位置,而这个地方才是BIOS真正的代码开始的地方,检测内存、显卡等外设信息,初始化硬件,建立向量表等等,完成这些工作后,BIOS将控制权交给下一位嘉宾,也就是MBR。

这篇关于【操作系统】BIOS开机自检的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198139

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

笔记本电脑开机报错故障的原因及解决办法

笔记本电脑开机报错故障是指笔记本电脑开机自检时或启动操作系统前停止启动,在显示屏 出现一些错误提示的故障。   笔记本电脑开机报错故障的原因及解决办法   造成此类故障的原因一般是笔记本电脑在启动自检时,检测到硬件设备不能正常工作或在自 检通过后从硬盘启动时,出现硬盘的分区表损坏、硬盘主引导记录损坏、硬盘分区结束标志丢失 等故障,笔记本电脑出现相应的故障提示。   维修此类故障时

设置zookeeper开机自启动/服务化

设置启动zk的用户为zookeeper 设置启动zk的用户为zookeeper用户,而非root用户,这样比较安全。 可以使用root用户进行zookeeper的管理(启动、停止…),但对于追求卓越和安全的的人来说,采用新非root用户管理zookeeper更好。 步骤: 1. 创建用户和用户组 2. 相关目录设置用户和用户组属性 3. 采用zookeeper用户启动进程 设置z

1、简述linux操作系统启动流程

1、简述linux操作系统启动流程 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启

操作系统是怎么为不同的程序分配所需的内存空间的

操作系统为不同的程序分配内存空间的过程涉及多个关键步骤,确保每个程序都有其所需的内存资源,同时避免程序之间的冲突。以下是操作系统如何为程序分配内存空间的详细过程: 1. 内存管理的基础概念 虚拟内存:现代操作系统使用虚拟内存机制来为程序提供隔离的内存空间。每个程序运行在其独立的虚拟地址空间中,这使得程序间的内存互不干扰。物理内存:实际的 RAM(随机存取存储器),由操作系统和硬件共同管理。虚拟