的发射点2
☞ 通用计算机启动过程
1️⃣一个基础固件:BIOS
一个基础固件:BIOS→基本IO系统,它提供以下功能:
- 上电后自检功能 Power-On Self-Test,即POST:上电后,识别硬件配置并对其进行自检,保证正常运行和初始化;
- 基本IO驱动与事件处理功能:初始化并驱动硬件,如显示器、串口、键盘等接口,使能基本的中断;
- 启动参数设置功能:过程中允许通过热键启动设置界面,进而对CMOS RAM中的启动参数进行配置。CMOS RAM等效于BBSRAM,存放启动配置数据,电池掉电后数据丢失;
- 系统自动装载功能:在系统自检成功后,根据启动顺序,将相应启动设备主引导记录MBR(一般位于0磁道的0扇区,大小为512字节)的引导程序装入内存并从入口地址运行;
2️⃣WIndows操作系统启动过程
① 系统上电或复位,X86处理器复位——代码段寄存器CS为0xFFFF,指令指针寄存器IP为)0x0000,CS:IP地址存放下一条跳转指令,跳转至ROM中BIOS入口地址0xFFFFFFF0(复位向量地址),并启动BIOS。
② BIOS上电自检,若出现错误则初始化基本硬件,允许用户进行参数配置。
③ BIOS将第1个启动设备的第1个扇区加载到系统RAM的0x7C000地址,启动MBR中的引导程序,进入引导的第一个阶段。
④ 调用 Windows MBR Loader 或 LILO GRUB WinGrub等引导程序,进入引导的第二个阶段。
⑤ 引导程序调用 OS Boot Loader 把用户选择的操作系统内核加载到内存,并跳转到操作系统入口地址开始执行。
此时,计算机的控制权交给了操作系统,基本启动过程完成。
☞ 嵌入式系统启动过程
MCS-51 MCU 上电复位后,PC寄存器的初值为0x0000。0000H,0001H,0002H这三个单元存放了一条无条件跳转指令,当从该地址执行时将直接跳转到主程序的入口地址。
arm处理器复位后将从0x00000000地址处开始执行指令。
1️⃣处理器片内集成启动固件——嵌入式系统启动
① 上电程序引导
片内集成独立 Boot ROM (Brom),代码 Rom Boot Loader (RBL) 支持从 NAND Flash、SPI、UART 等外部接口启动。
- 加电后,处理器将从该ROM的复位向量地址开始执行,RBL通过判断处理器特定引脚的电平来进入正常启动模式或开发模式;
- RBL获取下一步要执行的代码,并将其复制到SRAM或SDRAM中引导执行;
② 嵌入式操作系统装载
嵌入式操作系统的引导也需要特定的机制和软件支持,即 Boot Loader。
- 复位后,将 Boot Loader 代码从Flash 拷贝到SDRAM的特定区间并引导执行;
- Boot Loader 程序执行一系列基本的硬件初始化工作;
- 将自身拷贝到SDRAM中,RAM中的 Boot Loader 继续执行,为操作系统的运行做好环境准备,并将外部存储器中的操作系统内核映像及根文件系统映像拷贝到内存中的代码,数据空间,设置内核启动参数;
- 跳转至内核入口地址开始执行。
2️⃣裸机
直接部署在嵌入式硬件上的软件称为裸机代码,或裸机(应用)软件。一般来说都是些无限循环结构,比如空调、冰箱等嵌入式系统。通过板级支持包BSP,向下屏蔽硬件的细节,向上提供统一的服务和接口。没有操作系统,通过中断来实现多任务运行。
☞ Linux系统启动过程
计算机接通电源上电后,需要经过BIOS加电自检、MBR系统引导、加载内核三步之后,操作系统才会启动。
1️⃣BIOS加电自检
- BIOS全称 Basic Input/Output System,即基本输入输出系统,它是一个被永久刻录在ROM中的软件,加电自检是指 Power On Self Test,POST,属于BIOS的主要组成部分。
- 计算机在接通电源后,BIOS通过POST来加载硬件信息,进行内存、CPU、主板等检测,如果硬件设备正常工作,BIOS会寻找硬盘第一个扇区中存储的数据,并使用MBR中的数据激活引导加载程序。
2️⃣MBR系统引导
- MBR全程 Master Boot Recode,是一种磁盘分区格式,也是以此种格式的磁盘中0盘片0扇区中存储的一段记录——主引导记录。磁盘中扇区的大小为512byte,主引导记录MBR占据第一个扇区的前446字节,剩余的空间依次存储一个64字节的磁盘分区表,和一个用于标识MBR是否有效的2字节的模数。
- 主引导记录MBR中包含一个实现引导加载功能的程序——Boot Loader。由于BIOS只能访问很少量的数据,所以MBR中的引导加载程序其实只是一段初始程序的加载程序 Initial Program Loader,IPL,这段程序唯一的功能就是定位并加载 Boot Loader 的主体程序。
- 加载引导分为两个阶段
- 第一阶段,BIOS引导IPL获取 Boot Loader 主题程序在磁盘中的位置,此时系统启动的控制权由BIOS转移到MBR;
- 第二阶段,Boot Loader 主题程序与操作系统对应的内核,定位到内核文件所在的位置,并将其加载到计算机内存中,此时系统启动的控制权由MBR转移到内核。
3️⃣加载内核
- 内核是操作系统的核心,Linux操作系统的内核就是Linux。内核以一种自解压的压缩格式压缩,它与一个初始化的内存映像和存储设备映像表一起存储在 /boot 目录下。
- 在选定的内核被加载到内存中并开始执行前需要先从压缩格式中解压,一旦内核自解压完成,systemd进程(也就是早期版本中的init进程)便被启动。
- systemd进程的启动标识着引导过程的结束,也标识着启动过程的开始。在系统启动之初,由于系统中没有除systemd之外的程序执行,系统初始化工作尚未完成,因此计算机不能执行任何和用户相关的功能性工作。
- 系统初始化需要进行挂载文件系统、启动后台服务等等一系列工作,这些初始化工作全部由systemd进程完成。对于用户来说,系统初始化完成后,系统才算正式启动。
4️⃣附:init进程启动级别
系统启动流程:
BIOS → MBR → boot loader → kernel → init
BIOS → MBR → GRUB → kernel → init
- BIOS:找到启动介质 - 移动硬盘、磁盘、U盘等,找到启动介质后读取其中的第一个扇区;
- MBR:第一个扇区(512字节)称为主引导记录。主引导记录分为3部分,前446byte是引导信息,后64byte是磁盘分区信息,最后2byte是标志位。MBR的作用是找到 boot loader 。
- GRUP:是一种 boot loader ,用于加载kernel核心信息。
- kernel:内核。
- init:内核的第一个程序,分为7个启动级别。
查看启动级别配置文件
cat /etc/inittab #查看启动级别相关的配置文件
inti命令可以切换系统的启动级别
inti 0/1/2/3/4/5/6
- 0表示关机(不能设置为开机默认启动级别)
- 1表示单用户
- 2表示多用户(无网络的3级别)
- 3多用户(命令行模式,字符终端)
- 4用于开发
- 5图形界面,默认启动方式
- 6reboot(不能设置为开机默认启动级别)
runlevel #查看系统的启动级别
相关文章:
的发射点2
☞ 通用计算机启动过程 1️⃣一个基础固件:BIOS 一个基础固件:BIOS→基本IO系统,它提供以下功能: 上电后自检功能 Power-On Self-Test,即POST:上电后,识别硬件配置并对其进行自检,…...
深入揭秘Lucene:全面解析其原理与应用场景(一)
本系列文章简介: 本系列文章将深入揭秘Lucene,全面解析其原理与应用场景。我们将从Lucene的基本概念和核心组件开始,逐步介绍Lucene的索引原理、搜索算法以及性能优化策略。通过阅读本文,读者将会对Lucene的工作原理有更深入的了解…...
拿捏算法的复杂度
目录 前言 一:算法的时间复杂度 1.定义 2.简单的算法可以数循环的次数,其余需要经过计算得出表达式 3.记法:大O的渐近表示法 表示规则:对得出的时间复杂度的函数表达式,只关注最高阶,其余项和最高阶…...
C语言实战—猜数字游戏(涉及循环和少部分函数内容)
对于前面一些内容的总结 不妨跟着一起试试吧 折半查找算法(二分查找) 比如我买了一双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让 你猜,你会怎么猜?…...
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) 这个宏 MODIFY_REG 是在嵌入式编程中,它用于修改一个寄存器的特定位,而不影响其他位。这个宏接受三个参数ÿ…...
使用 Docker 部署 Stirling-PDF 多功能 PDF 工具
1)Stirling-PDF 介绍 大家应该都有过这样的经历,面对一堆 PDF 文档,或者需要合并几个 PDF,或者需要将一份 PDF 文件拆分,又或者需要调整 PDF 中的页面顺序,找到的线上工具 要么广告满天飞,要么 …...
springcloud第3季 项目工程搭建与需求说明1
一 需求说明 1.1 实现结构图 订单接口调用支付接口 二 工程搭建 2.1 搭建工程步骤...
外包干了3个月,技术退步明显。。。。
先说一下自己的情况,本科生,2019年我通过校招踏入了南京一家软件公司,开始了我的职业生涯。那时的我,满怀热血和憧憬,期待着在这个行业中闯出一片天地。然而,随着时间的推移,我发现自己逐渐陷入…...
Redis特性与应用场景
Redis是一个在内存中存储数据的中间件,用于作为数据库,用于作为数据缓存,在分布式系统中能够发挥重要作用。 Redis的特性 1.In-memory data structures: MySQL使用表的方式存储数据,这意味着数据通常存储在硬盘上,并且…...
openssl3.2 - exp - 可以在命令行使用的口令算法名称列表
文章目录 openssl3.2 - exp - 可以在命令行使用的口令算法名称列表概述笔记测试工程实现备注整理 - 总共有126种加密算法可用于命令行参数的密码加密算法备注END openssl3.2 - exp - 可以在命令行使用的口令算法名称列表 概述 上一个笔记openssl3.2 - exp - PEM <…...
模板不存在:./Application/Home/View/OnContact/Index.html 错误位置
模板不存在:./Application/Home/View/OnContact/Index.html 错误位置FILE: /home/huimingdedhpucixmaihndged5e/wwwroot/ThinkPHP123/Library/Think/View.class.php LINE: 110 TRACE#0 /home/huimingdedhpucixmaihndged5e/wwwroot/ThinkPHP123/Library/Think/View.class.php(…...
复杂的数据类型如何转成字符串!
1.首先,会调用 valueOf 方法,如果方法的返回值是一个基本数据类型,就返回这个值, 如果调用 valueOf 方法之后的返回值仍旧是一个复杂数据类型,就会调用该对象的 toString 方法, 如果 toString 方法调用之后…...
云原生构建 微服务、容器化与容器编排
第1章 何为云原生,云原生为何而生 SOA也就是面向服务的架构 软件架构的发展主要经历了集中式架构、分布式架构以及云原生架构这几代架构的发展。 微服务架构,其实是SOA的另外一种实现方式,属于SOA的子集。 在微服务架构下,系统…...
JavaSE——面向对象高级一(2/4)-饿汉式单例、懒汉式单例、代码块、static的注意事项
目录 static的注意事项 static相关:代码块 单例设计模式 饿汉式单例 懒汉式单例 static的注意事项 类方法中可以直接访问类的成员,不可以直接访问实例成员。 public class Student{//定义一个类变量和一个实例变量static String schoolName;int s…...
排序之冒泡排序
通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。 流程: 首先,对 n 个元素执行“冒泡”,将数组的最大元素交换至正确位置。接下来,对剩余 n−1 个元素执行“冒泡”&…...
【NR技术】 3GPP支持无人机服务的关键性能指标
1 性能指标概述 5G系统传输的数据包括安装在无人机上的硬件设备(如摄像头)收集的数据,例如图片、视频和文件。也可以传输一些软件计算或统计数据,例如无人机管理数据。5G系统传输的业务控制数据可基于应用触发,如无人机上设备的开关、旋转、升…...
Day29:安全开发-JS应用DOM树加密编码库断点调试逆向分析元素属性操作
目录 JS原生开发-DOM树-用户交互 JS导入库开发-编码加密-逆向调试 思维导图 JS知识点: 功能:登录验证,文件操作,SQL操作,云应用接入,框架开发,打包器使用等 技术:原生开发&#x…...
Python爬虫——scrapy-4
目录 免责声明 目标 过程 先修改配置文件 再修改pipelines.py 最后的结果是这样的 read.py pipelines.py items.py settings.py scrapy日志信息以及日志级别 settings.py文件设置 用百度实验一下 指定日志级别 WARNING 日志文件 注意 scrapy的post请求 简介 …...
美团春招编程第一场第三题
美团春招编程第一场第三题 题目 解答 思路-暴力解法 pair中存储从原点到包含当前元素的0,1数量,得到二维数组mat; 从头到尾遍历尺寸为i*i的矩形,计算完美矩形数量 #include <iostream> #include <vector> using namespace std;int main()…...
BulingBuling - 《金钱心理学》 [ The Psychology of Money ]
金钱心理学 摩根-豪泽尔 关于财富、贪婪和幸福的永恒课程 The Psychology of Money Morgan Housel Timeless Lessons on Wealth, Greed, and Happiness 内容简介 [ 心理学 ] [ 金钱与投资 ] Whats it about? [ Psychology ] [ Money & Investments ] 《金钱心理学》&…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
