计算机原理-OS-系统上电后-BIOS引导过程-计算机的引导启动过程

构建自定义bootos BootOS (也称 ramos ),是一个基于内存的操作系统,系统启动后全部加载到内存中运行,不依赖磁盘存储设备,因此可以对硬件层级进行一系列的操作。2.获取现有系统的initramfs内存文件系统,解压并自定义自定义添加软件包修改启动文件。ps: 编译内核的时候可以指定initramfs文件,之后就编译成一个文件了。1.获取现有系统镜像中的initrd内存,解压并自定义添加软件包修改启动文件。路径:/boot/vmlinuz-`unamr -r`3.根据现有系统的文件,拷贝所需的文件构成bootos。 阅读详情

原创 底层软件架构 2019-07-15 22:36:19

新博客地址(shankusu.me)

本文翻译并修改自:http://duartes.org/gustavo/blog/

微信公众号:技术原理君

之前有一篇文章介绍了《Intel计算机的主板与内存映射》,从而为本文设定了一个系统引导阶段的场景。引导(Booting)是一个复杂的,充满技巧的,涉及多个阶段,又十分有趣的过程。下图列出了此过程的概要:

计算机的引导启动过程

引导过程概要

当你按下计算机的电源键后(现在别按!),机器就开始运转了。一旦主板上电,它就会初始化自身的固件(firmware)——芯片组和其他零零碎碎的东西 ——并尝试启动CPU。如果此时出了什么问题(比如CPU坏了或根本没装),那么很可能出现的情况是电脑没有任何动静,除了风扇在转。一些主板会在CPU 故障或缺失时发出鸣音提示,但以我的经验,此时大多数机器都会处于僵死状态。一些USB或其他设备也可能导致机器启动时僵死。对于那些以前工作正常,突然 出现这种症状的电脑,一个可能的解决办法是拔除所有不必要的设备。你也可以一次只断开一个设备,从而发现哪个是罪魁祸首。

如果一切正常,CPU就开始运行了。在一个多处理器或多核处理器的系统中,会有一个CPU被动态的指派为引导处理器(bootstrap processor简写BSP),用于执行全部的BIOS和内核初始化代码。其余的处理器,此时被称为应用处理器(application processor简写AP),一直保持停机状态直到内核明确激活他们为止。虽然Intel CPU经历了很多年的发展,但他们一直保持着完全的向后兼容性,所以现代的CPU可以表现得跟原先1978年的Intel 8086完全一样。其实,当CPU上电后,它就是这么做的。在这个基本的上电过程中,处理器工作于实模式,分页功能是无效的。此时的系统环境,就像古老的MS-DOS一样,只有1MB内存可以寻址,任何代码都可以读写任何地址的内存,这里没有保护或特权级的概念。

CPU上电后,大部分寄存器的都具有定义良好的初始值,包括指令指针寄存器(EIP),它记录了下一条即将被CPU执行的指令所在的内存地址。尽管此时的Intel CPU还只能寻址1MB的内存,但凭借一个奇特的技巧,一个隐藏的基地址(其实就是个偏移量)会与EIP相加,其结果指向第一条将被执行的指令所处的地址0xFFFFFFF0(长16字节,在4GB内存空间的尾部,远高于1MB)。这个特殊的地址叫做复位向量(reset vector),而且是现代Intel CPU的标准。

主板保证在复位向量处的指令是一个跳转,而且是跳转到BIOS执行入口点所在的内存映射地址。这个跳转会顺带清除那个隐藏的、上电时的基地址。感谢芯片组提供的内存映射功能,此时的内存地址存放着CPU初始化所需的真正内容。这些内容全部是从包含有BIOS的闪存映射过来的,而此时的RAM模块还只有随机的垃圾数据。下面的图例列出了相关的内存区域:

计算机的引导启动过程

引导时的重要内存区域

随后,CPU开始执行BIOS的代码,初始化机器中的一些硬件。之后BIOS开始执行上电自检过程(POST),检测计算机中的各种组件。如果找不到一个可用的显卡,POST就会失败,导致BIOS进入停机状态并发出鸣音提示(因为此时无法在屏幕上输出提示信息)。如果显卡正常,那么电脑看起来就真的运转起来了:显示一个制造商定制的商标,开始内存自检,天使们大声的吹响号角。另有一些POST失败的情况,比如缺少键盘,会导致停机,屏幕上显示出错信息。其实POST即是检测又是初始化,还要枚举出所有PCI设备的资源——中断,内存范围,I/O端口。现代的BIOS会遵循高级配置与电源接口(ACPI)协议,创建一些用于描述设备的数据表,这些表格将来会被操作系统内核用到。

POST完毕后,BIOS就准备引导操作系统了,它必须存在于某个地方:硬盘,光驱,软盘等。BIOS搜索引导设备的实际顺序是用户可定制的。如果找不到合适的引导设备,BIOS会显示出错信息并停机,比如"Non-System Disk or Disk Error"没有系统盘或驱动器故障。一个坏了的硬盘可能导致此症状。幸运的是,在这篇文章中,BIOS成功的找到了一个可以正常引导的驱动器。

现在,BIOS会读取硬盘的第一个扇区(0扇区),内含512个字节。这些数据叫做主引导记录(Master Boot Record简称MBR)。一般说来,它包含两个极其重要的部分:一个是位于MBR开头的操作系统相关的引导程序,另一个是紧跟其后的磁盘分区表。BIOS 丝毫不关心这些事情:它只是简单的加载MBR的内容到内存地址0x7C00处,并跳转到此处开始执行,不管MBR里的代码是什么。

计算机的引导启动过程

主引导记录

这段在MBR内的特殊代码可能是Windows 引导装载程序,Linux 引导装载程序(比如LILO或GRUB),甚至可能是病毒。与此不同,分区表则是标准化的:它是一个64字节的区块,包含4个16字节的记录项,描述磁盘是如何被分割的(所以你可以在一个磁盘上安装多个操作系统或拥有多个独立的卷)。传统上,Microsoft的MBR代码会查看分区表,找到一个(唯一的)标记为活动(active)的分区,加载那个分区的引导扇区(boot sector),并执行其中的代码。引导扇区是一个分区的第一个扇区,而不是整个磁盘的第一个扇区。如果此时出了什么问题,你可能会收到如下错误信息:"Invalid Partition Table"无效分区表或"Missing Operating System"操作系统缺失。这条信息不是来自BIOS的,而是由从磁盘加载的MBR程序所给出的。因此这些信息依赖于MBR的内容。

随着时间的推移,引导装载过程已经发展得越来越复杂,越来越灵活。Linux的引导装载程序Lilo和GRUB可以处理很多种类的操作系统,文件系统,以及引导配置信息。他们的MBR代码不再需要效仿上述"从活动分区来引导"的方法。但是从功能上讲,这个过程大致如下:

  • 1、 MBR本身包含有第一阶段的引导装载程序。GRUB称之为阶段一。
  • 2、 由于MBR很小,其中的代码仅仅用于从磁盘加载另一个含有额外的引导代码的扇区。此扇区可能是某个分区的引导扇区,但也可能是一个被硬编码到MBR中的扇区位置。
  • 3、 MBR配合第2步所加载的代码去读取一个文件,其中包含了下一阶段所需的引导程序。这在GRUB中是"阶段二"引导程序,在Windows Server中是C:/NTLDR。如果第2步失败了,在Windows中你会收到错误信息,比如"NTLDR is missing"NTLDR缺失。阶段二的代码进一步读取一个引导配置文件(比如在GRUB中是grub.conf,在Windows中是boot.ini)。之后要么给用户显示一些引导选项,要么直接去引导系统。
  • 4、 此时,引导装载程序需要启动操作系统核心。它必须拥有足够的关于文件系统的信息,以便从引导分区中读取内核。在Linux中,这意味着读取一个名字类似"vmlinuz-2.6.22-14-server"的含有内核镜像的文件,将之加载到内存并跳转去执行内核引导代码。在Windows Server 2003中,一部份内核启动代码是与内核镜像本身分离的,事实上是嵌入到了NTLDR当中。在完成一些初始化工作以后,NTDLR从"c:/Windows/System32/ntoskrnl.exe"文件加载内核镜像,就像GRUB所做的那样,跳转到内核的入口点去执行。

这里还有一个复杂的地方值得一提(这也是我说引导富于技巧性的原因)。当前Linux内核的镜像就算被压缩了,在实模式下,也没法塞进640KB的可用RAM里。我的vanilla Ubuntu内核压缩后有1.7MB。然而,引导装载程序必须运行于实模式,以便调用BIOS代码去读取磁盘,所以此时内核肯定是没法用的。解决之道是使用一种倍受推崇的"虚模式"。它并非一个真正的处理器运行模式(希望Intel的工程师允许我以此作乐),而是一个特殊技巧。程序不断的在实模式和保护模式之间切换,以便访问高于1MB的内存同时还能使用BIOS。如果你阅读了GRUB的源代码,你就会发现这些切换到处都是(看看stage2/目录下的程序,对real_to_prot 和 prot_to_real函数的调用)。在这个棘手的过程结束时,装载程序终于千方百计的把整个内核都塞到内存里了,但在这后,处理器仍保持在实模式运行。

至此,我们来到了从"引导装载"跳转到"早期的内核初始化"的时刻,就像第一张图中所指示的那样。在系统做完热身运动后,内核会展开并让系统开始运转。

【我所認知的BIOS】-->自己動手啟動計算機  【我所認知的BIOS】-->自己動手啟動計算機LightSeed2009-11-5我当时在做《汇编语言》王爽(第一版)著的那本书的最后一题“课程设计二”的时候有关于启动OS的操作,想想这个题目对理解我们BIOS到OS的控制权的交付有比较形象的理解,故在这里也和大家探讨一下。1、软盘的引导扇区格式及原理1.1引导扇区的格式(笔者:以下这段是参考http://hi.b 阅读详情

相关推荐

OS系列——操作系统镜像加载BIOS固件工作原理详解

0 前言 装过n多系统,制作过n多个启动优盘,所有教程上都讲重装系统前的第一步就是设置BIOS/UEFI为“U盘启动”,但一直不知道何为BIOS/UEFI。最近在学习南大蒋炎岩老师/教授的《操作系统:设计与实践》,终于弄明白了BIOS/UEFI是啥、BIOS/UEFI的工作原理以及操作系统镜像的加载过程这几问题。特将学习笔记整理如下。 1 Firm固件/BIOS 首先,BIOS和UEFI是两种常用的Firm固件,其中BIOS较为古老,UEFI较为新。 思考一个问题:计算机是如何将操作系统镜像源码加载到硬件中

高自强的博客 4731

探秘开源操作系统:bootOS

是一个微型但功能强大的实时操作系统(RTOS),由 Nanochess 团队开发并开源。它专注于嵌入式系统和物联网应用,提供了一个轻量级、高性能的基础运行环境。 ## 项目简介 bootOS 设计的目标是简洁而高效,其源代码结构清晰,易于理解和定制。作为一个小型RTOS,它的核心是微内核设计,强调最小化内核组件以提高系统的可靠性、安全性和实时性。这样的设计使得 bootOS 能在资源有限的硬件

gitblog_00021的博客 641

计算机启动流程

因为我的工作是嵌入式软件,所以对硬件并不熟悉。很久之前曾经对这个开机流程有去查过,但是后续因为工作未接触,还是会忘记,最近再次想要了解这个流程,在查资料之余还想记录下这个知识点。所以这篇文章并不算特别专业,是我查资料并结合自己的理解写的文章,如有错误之处,麻烦各位看官在评论指出。计算机有个比较重要的部件,我们常称其为主板。1、BIOS芯片,保存控制主板最基本的指令。2、I/O芯片,负责输入和输出,可以提供对键盘、鼠标、串口、并口的支持。3、CPU插座,顾名思义,装处理器的插座。

detail69784的博客 1102

x86机器linux机器,bootOS:一个单片操作系统,只含512字节的x86机器代码

_ _ ____ _____| | | | / __ \ / ____|| |__ ___ ___ | |_| | | | (___| '_ \ / _ \ / _ \| __| | | |\___ \| |_) | (_) | (_) | |_| |__| |____) ||_.__/ \___/ \___/ \...

weixin_42169971的博客 748

OS引导解析 (读谢煜波《操作系统引导探究》,整理读书笔记)

  《操作系统引导探究》链接:http://purec.binghua.com/Article/Class6/Class7/200411/81.htm一、开机加电过程                                                                    图1. 电源开启,PC处理流程 二、引导扇区图1中最后一个流程,B

DaySummer's Hut 3734

BootOS开源操作系统详解与实践

本文还有配套的精品资源,点击获取 简介:BootOS是一个为开发者提供的开源操作系统,它拥有高度可定制性和易于开发的特性。该操作系统允许用户访问和修改引导加载程序(Bootstrap Loader)源代码,以优化操作系统启动流程或添加新功能。BootOS的版本标识可能包含大版本号和小更新号,以及默认配置标识。initrd.img文件是BootOS启动过程中的关键组件,用于载...

weixin_28999139的博客 1471

Windows系统启动引导过程

计算机系统引导方式主要有两种:一种是传统的BIOS模式,另一种是新型UEFI(全称统一的可扩展固件接口)模式。UEFI启动也可以看作是Bios的升级版。不同模式对应不同的磁盘分区类型,BIOS只可以识别MBR分区;而UEFI可同时识别MBR分区和GPT分区,所以在UEFI下可以启动不同磁盘类型中的操作系统。

4379

BootOS-开源

BootOS提供了供您使用的操作系统。 我们的操作系统还提供了源代码,因此易于开发。

计算机启动过程分析

计算机启动过程分析

Android应用开发工程师 3263

WinCC与施耐德PLC的Modbus TCP通信实战指南

本文详细解析了西门子WinCC与施耐德PLC通过Modbus TCP协议实现通信的完整实战流程。内容涵盖硬件网络配置、Modbus地址映射核心规则、WinCC驱动连接建立、变量创建及高级数据访问技巧,并提供了常见故障排查思路,帮助工程师高效解决跨品牌设备通信难题。

weixin_29194693的博客 1001

手把手教你用OpenCompass评估Qwen1.5-1.8B模型(含数据集配置详解)

本文提供了使用OpenCompass评估Qwen1.5-1.8B-Chat模型的详细实战教程。内容涵盖从创建独立Python环境、下载模型与核心数据集,到编写配置文件、执行评测命令及解读结果的完整流程。重点解析了模型与数据集的配置细节,并分享了性能调优与常见问题排查方法,旨在帮助开发者快速上手系统化的模型评估。

weixin_29228781的博客 137

计算机开机BIOS初始化与MBR操作系统引导详解

我们的计算机在开机之前,它是一个纯硬件的机器,但是从按下开机按钮的那一刻起,ROM上的固化程序就开始为操作系统这个重要的软件进行初始化工作,初始化工作完成以后,将操作系统内核加载到内存中,操作系统就会帮助我们管理各种硬件资源,带给了用户良好的体验。我们普通用户通常都不关心,在电脑启动时具体都做了什么,但是作为一个IT行业的从业人员或者即将作为一名IT行业的从业人员,尤其是作为一个搞技术开发的从业人...

weixin_43971252的博客 4624

STM32嵌入式开发实战:如何用miniLZO压缩算法节省70%存储空间(附完整工程)

本文详细介绍了如何在STM32嵌入式开发中使用miniLZO无损压缩算法实现高达70%的存储空间节省。通过对比分析不同轻量级算法,重点讲解miniLZO的内存优化配置、分块压缩策略和完整工程实现,帮助开发者有效解决嵌入式系统中的存储瓶颈问题。

ss78901的博客 881

动手编写操作系统(2):系统引导过程——BIOSMBR(上)

接下来,我们将利用Bochs,对系统引导过程中的BIOS和MBR环节进行探究

Zheng__Huang的博客 5105

【WRF-Chem工具】anthro_emiss 详解:生成人为排放数据

anthro_emiss 详解:生成人为排放数据

WW、forever的博客 2055

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战

KJ.JK 1414

操作系统引导过程 与 服务进程的控制

加电后,bios程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据mbr的指引 找到完整的grub程序,再根据grub的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后,会启动第一个程序是系统的级的程序 代为管理系统上的服务程序systemd 是保姆级程序,如果是yum,以及rpm安装的软件可以直接使用systemctl 去启动 关闭 重启 开机自启高等功能。但是!

wyq2070857323的博客 1469

002、搭建你的第一个Agent开发环境:Python与核心库安装

在上一篇《Agent智能体开发入门:概念、应用与前景》中,我们描绘了Agent智能体的宏伟蓝图,理解了其作为“数字员工”的巨大潜力。然而,许多开发者在迈出第一步时,常常被复杂的依赖、版本冲突和晦涩的配置所劝退,空有想法却无从下手。这种感觉就像拿到了一张藏宝图,却找不到出发的港口。本文正是你的“启航指南”。我们将彻底解决这个痛点,通过一个清晰、可复现的流程,为你搭建一个专为Agent开发量身定制的Python环境。一个纯净、隔离的Python虚拟环境,避免项目间的“依赖地狱”。一套经过验证的核心工具链。

G_RE_RE的博客 111

(2)打造简单OS-开机BIOS初始化与MBR操作系统引导详解

================大概了解即可=============== 1、BIOS的工作: 我们的计算机在开机之前,它是一个纯硬件的机器,但是从按下开机按钮的那一刻起,ROM上的固化程序就开始为操作系统这个重要的软件进行初始化工作,初始化工作完成以后,将操作系统内核加载到内存中,操作系统就会帮助我们管理各种硬件资源,带给了用户良好的体验。我们普通用户通常都不关心,在...

jadeshu的博客 2641

YOLOv11与3D点云检测融合技术深度解析:从2D检测到三维空间投影的完整实现

2D-3D融合目标检测技术研究 本文系统阐述了基于YOLOv11的2D-3D目标检测融合技术,重点分析了YOLOv11在融合系统中的定位优势及其架构设计。研究表明,2D图像与3D点云数据具有显著的互补特性:2D图像提供丰富语义信息,而3D点云则精确描述几何结构。 关键技术要点: YOLOv11通过GSConv平衡卷积和VoVGSCS特征融合模块,在保持实时性的同时提升了检测精度 系统采用模块化设计,包含坐标投影、点云分割、边界框拟合等核心组件 针对点云数据的非均匀分布特性,提出了多尺度特征增强和距离差异化检

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1126

simulink建模仿真实例1000例--第375例:基于Simulink进行复杂交通流的仿真建模

特点多车互动:模拟多个车辆之间的相互作用。动态变化:交通流量随时间和事件(如事故、天气变化)而变化。多样化驾驶行为:考虑不同的驾驶员行为模式(激进型、保守型等)。挑战准确性:准确地模拟各种因素对交通流的影响。实时性:处理大量车辆数据,并迅速做出反应。可扩展性:支持从简单场景到复杂城市交通网络的扩展。首先明确要模拟的任务内容。模拟不同类型的车辆(轿车、卡车、公交车等)。考虑不同驾驶员的行为模式。分析交通拥堵、事故对交通流的影响。

xiaoheshang_123的博客 202

bcd 初始化库系统卷失败_Windows系统引导过程以及多系统引导原理

系统启动的两种引导方式计算机系统引导方式主要有两种:一种是传统的BIOS模式,另一种是新型UEFI(全称统一的可扩展固件接口)模式。UEFI启动也可以看作是Bios的升级版。不同模式对应不同的磁盘分区类型,BIOS只可以识别MBR分区;而UEFI可同时识别MBR分区和GPT分区,所以在UEFI下可以启动不同磁盘类型中的操作系统。BIOS芯片BIOS+MBR引导过程BIOS引导过程:开机自检>...

weixin_39522408的博客 576

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

linux开机引导和启动过程详解

理解操作系统开机引导和启动过程对于配置操作系统和解决相关启动问题是至关重要的。该文章陈述了grub2引导装载程序开机引导装载内核过程和systemd初始化系统执行开机启动操作系统的过程。 事实上,操作系统的启动分为两个阶段:引导boot和启动startup .引导阶段开始于打开电源开关,结束于内核初始化完成和systemd进程成功运行。启动阶段接管了剩余工作,直到操作系统进入和操作状态。 总体来说...

热气球 712

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Linux操作系统之一:简述Linux系统开机引导和启动过程

Linux操作系统之一:简述Linux系统开机引导和启动过程操作系统的启动分为两个阶段:引导boot启动startup引导阶段开始于打开电源开关,结束于内核初始化完成和 systemd 进程成功运行。启动阶段接管了剩余工作,直到操作系统进入可操作状态。总体来说,Linux 的开机引导和启动过程是相当容易理解,下文将分节对于不同步骤进行详细说明。BIOS 上电自检(POST)引导装载程序 (GRUB...

fuhanga123的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

计算机启动:操作系统背后的魔法

通过这篇文章,我们深入探讨了计算机启动过程中操作系统所做的每一步。从按下电源按钮到最终进入用户空间,每一个步骤都充满了技术细节和复杂性。理解这些过程不仅有助于我们更好地掌握计算机的工作原理,还能在遇到启动问题时更快地找到解决方案。希望这篇文章能帮助你更好地理解计算机启动的奥秘,并在实际编程中有所应用。如果你有任何问题或想法,欢迎在评论区留言讨论!

xycxycooo的博客 1554

5分钟上手Redox OS引导配置:从启动流程到GRUB实战指南

你是否曾在尝试安装Redox OS时卡在启动配置环节?面对陌生的引导流程和GRUB设置感到无从下手?本文将带你一步步掌握Redox OS的引导原理与配置方法,即使是新手也能轻松完成系统启动设置。读完本文后,你将能够:理解Redox OS的启动流程、配置GRUB引导项、解决常见启动问题,并成功在虚拟机或物理机上启动系统。 ## Redox OS简介 Redox OS是一款用Rust语言开发的开源...

gitblog_00028的博客 840
上一篇: 计算机原理-OS-引导-内核引导过程详解
下一篇: C 整数转换规则
shankusu2017
博客等级 码龄15年 155粉丝 155原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值