博客
关于我
PC机引导程序之——BOIS
阅读量:618 次
发布时间:2019-03-13

本文共 1106 字,大约阅读时间需要 3 分钟。

PC引导程序的核心——BOIS

PC启动时,系统会自动启动引导程序进行初始化和操作系统的启动,这个引导程序被称为BIOS(Basic Input/Output System)。与Linux系统的启动流程类似,BIOS对于PC的初始化起到了至关重要的作用。在缺乏操作系统的情况下,BIOS能够启动系统,确保硬件正常运行并为后续的操作系统加载做好准备。

BOIS的功能

  • 硬件初始化与测试

    BOIS首先会初始化和测试系统的硬件设备,包括CPU、内存、存储器等,确保每个设备都处于正常工作状态。

  • 存储设备检测与引导程序加载

    BOIS会从系统的存储设备(如硬盘、SSD等)中扫描并找到引导程序(通常是MBR,Master Boot Record,主启动记录)。这一步骤是系统启动的关键环节。

  • 硬件控制与中断支持

    BOIS为显示器、键盘、鼠标、打印机等输入输出设备提供中断处理功能,确保这些设备能够正常工作。

  • 支持存储型BIOS

    随着技术的发展,传统的ROM存储的BIOS已逐渐被闪存(Flash)取代,闪存不仅支持读取还允许重写,这极大地提升了维护和更新的便利性。

  • 系统启动流程

  • POST自检(Power-On Self-Test)

    计算机首次上电时,会执行POST检查,确保各项硬件和软件配置都正常。具体包括:

    • 验证CPU寄存器和BIOS代码的完整性
    • 初始化和验证主内存
    • 检查和配置系统总线、显卡、 DMA 控制器等重要组件
  • 复位向量的作用

    在PC设备上电启动时,CPU会尝试执行复位向量指向的代码。复位向量位于NVRAM中,地址为FFFF:0。
    在冷启动模式下,BOIS存储在闪存中,北桥会将复位向量指向闪存中的引导程序;而在热启动模式下,BOIS会被加载到RAM中,复位向量也会被指向RAM中的引导程序地址。

  • 引导程序的执行

    COMS位(传统的EL Case)中的BIOS代码会被加载到内存中并执行。引导程序的主要任务是将控制权转移到操作系统的引导扇区。

  • 引导扇区的重要性

  • MBR的作用

    主启动记录(MBR)是引导扇区的核心组件,包含以下信息:

    • 引导程序本身
    • 磁盘的分区表信息
    • 分隔符标识
  • 引导扇区的加载过程

    引导程序会将控制权转移到目标操作系统的引导扇区。引导扇区正常运行后,会对自身硬件进行测试并注册中断向量,以供后续程序使用。

  • GRUB引导程序的作用

  • 扇区检测与签名验证

    引导扇区会扫描磁盘,寻找可引导的扇区,并检查扇区签名(通常为0x55 0xAA)。一旦找到符合签名的扇区,引导程序会将控制权转移到该扇区。

  • 系统环境配置

    引导扇区不仅仅是引导程序的容器,它还会初始化系统环境,为后续的操作系统加载做好准备。

  • 转载地址:http://njkaz.baihongyu.com/

    你可能感兴趣的文章
    order by rand()
    查看>>
    SSM(Spring+SpringMvc+Mybatis)整合开发笔记
    查看>>
    ViewHolder的改进写法
    查看>>
    Orderer节点启动报错解决方案:Not bootstrapping because of 3 existing channels
    查看>>
    org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement profile
    查看>>
    sql查询中 查询字段数据类型 int 与 String 出现问题
    查看>>
    org.apache.commons.beanutils.BasicDynaBean cannot be cast to ...
    查看>>
    org.apache.dubbo.common.serialize.SerializationException: com.alibaba.fastjson2.JSONException: not s
    查看>>
    sqlserver学习笔记(三)—— 为数据库添加新的用户
    查看>>
    org.apache.http.conn.HttpHostConnectException: Connection to refused
    查看>>
    org.apache.ibatis.binding.BindingException: Invalid bound statement错误一例
    查看>>
    org.apache.ibatis.exceptions.PersistenceException:
    查看>>
    org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned
    查看>>
    org.apache.ibatis.type.TypeException: Could not resolve type alias 'xxxx'异常
    查看>>
    org.apache.poi.hssf.util.Region
    查看>>
    org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbeans/XmlOptions;
    查看>>
    org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /
    查看>>
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugManifest'
    查看>>
    org.hibernate.HibernateException: Unable to get the default Bean Validation factory
    查看>>
    org.hibernate.ObjectNotFoundException: No row with the given identifier exists:
    查看>>