当前位置: 首页 > news >正文

x86计算机的启动初期流程 Linux 启动流程

x86计算机的启动初期流程

CPU:

step1,加点开机,cpu自己初始化

step2,cpu 从物理地址 0xFFFFFFF0h 取指令执行;此处存放BIOS代码,这些代码可以是由主板自动从 EEPROM中拷贝至此内存地址处;即下面将执行的 POST 代码

BIOS:


step3,POST:加电自检(Power-On Self-Test, POST):计算机通电后,BIOS会执行自检程序,检查硬件是否正常工作。


step4,测试成功 则继续下面的步骤,否则显示出错信息;


step5,加载 BIOS 的中断向量到物理内存的最低1024字节单元中去;


step6,执行 INT 19h 软中断调用,根据 CMOS 的设置,顺序地从引导盘搜寻引导扇区(以55AA为标志该盘为引导盘),找到第一个引导盘的引导扇区后,继续下一步;

     补充:MBR 主引导记录在磁盘的0磁头0柱面1号扇区,BIOS的代码会锁定这个位置查看。

                MBR 由三部分构成:

                      (1)446字节的引导记录,负责检查硬盘分区表、寻找可引导分区、将可引导的活动分区记录DBR装入内存,它位于硬盘的每一分区的第一个扇区;

                      (2)硬盘分区表16x4=64,每份16字节的4份硬盘分区表,其中记录了每个分区的类型,分区size,和分区开始与结束的位置等;

                       (3)magic Number  55AAH ,占2个字节,是MBR结束标志

                      MBR 总共占 446 + 64 + 2 = 512 bytes


step7,执行 INT 13h 软中断调用,从引导扇区取 MBR 值DBR转存到内存00007C00处,并跳转到该处开始执行,即将控制权交给引导扇区的引导程序。

上述3~7步由BIOS完成,开源的BIOS可参考复古8088PC的 8088_bios 和 快跑的 Coreboot:

 

GitHub - skiselev/8088_bios: BIOS for Intel 8088 based computers

 

GitHub - coreboot/coreboot: Mirror of https://review.coreboot.org/coreboot.git. We don't handle Pull Requests.

 

Loader:


step8,执行引导程序:引导扇区中包含引导程序(Boot Loader),比如 grub2,该程序负责加载操作系统的核心部分到内存中,例如 vmlinux,并启动操作系统的运行。

上述由引导程序完成,可参考 grub2:

GNU GRUB - Obtaining GRUB

https://github.com/rhboot/grub2

GNU GRUB Manual 2.12

OS:


step9,启动操作系统:引导程序加载完操作系统核心后,控制权被转移到操作系统内核,操作系统开始初始化并启动系统服务。

Linux。。。

http://www.lryc.cn/news/373508.html

相关文章:

  • P450Rdb: CYP450数据库--地表最强系列--文献精读24
  • ubuntu 22.04下载和安装
  • Fegin如何传参form-data文件
  • 解决 Visual C++ 17.5 __cplusplus 始终为 199711L 的问题
  • Mac M3 Pro安装Hadoop-3.3.6
  • mac下Xcode在iphone真机上测试运行iOS软件
  • Mysql(一):深入理解Mysql索引底层数据结构与算法
  • WebMvcConfigurer配置不当导致鉴权失败
  • 微信小程序毕业设计-实验室管理系统项目开发实战(附源码+论文)
  • C#:lock锁与订单号(或交易号)的生成
  • 计算机图形学入门11:图形管线与着色器
  • 正解 x86 Linux 内存管理
  • springboot读取配置时,读取到了系统环境变量
  • 平均召回(Average Recall,AR)概述
  • WWDC 2024 回顾:Apple Intelligence 的发布与解析
  • [Cloud Networking] SPDY 协议
  • Linux-笔记 samba实现映射网络驱动器到Win 10
  • 【技巧】Leetcode 67. 二进制求和【简单】
  • vue项目问题汇总
  • Android 工程副总裁卸任
  • Qt 6.13
  • 发布自己的c#包到nuget
  • 【学习笔记】MySQL(Ⅲ)
  • STM32项目分享:心率血氧手环(可报警)
  • 前端面经总结、学习【2023秋招】
  • Linux DMA-Buf驱动框架
  • MySQL之优化服务器设置(三)
  • 如何实现 Python 源码压缩加密常用解决方案详细教程(更新中)
  • SAP Build 2-PDF数据提取与决策
  • 【回溯】Leetcode 77. 组合【中等】