UEFI学习笔记(八):Memory Services

news2024/11/13 4:44:15

UEFI学习笔记(八):Memory Services

  • 一、内存服务概况
    • 1、PEI阶段
    • 2、DXE阶段(系统内存)
    • 3、SMM阶段
  • 二、HOB概述
    • 1、为什么在PEI阶段要引入HOB?
    • 2、HOB的类型
  • 三、MEMORY类型
  • 四、内存分布
    • 1、PEI内存分布
    • 2、DXE内存分布
  • 参考文章

一、内存服务概况

本文主要针对系统内存。在SEC阶段,只有栈上的空间可用,没有可用的内存服务。内存服务在PEI(Pre-EFI Initialization)阶段才开始提供。

1、PEI阶段

分为物理内存初始化之前、物理内存初始化之后,在内存准备好之前,memory空间是非常少的。

CreateHob:CreateHob 是 UEFI 中用于创建 HOB(Hand-Off Block)的函数。HOB 是一种用于在引导过程中传递信息的结构体,主要在 PEI(Pre-EFI Initialization)阶段使用。
AllocatePool:轻量级的,不支持内存类型(都是Boot Service Data类型),没有FreePool API,不能释放。
AllocatePages/FreePages:不支持内存分配类型(都是Boot Service Data类型)

2、DXE阶段(系统内存)

物理内存都是存在,可以使用的。DXE阶段管理的是整个系统的memory,管理的空间较大。

AllocatePool/FreePool(UEFI的Boot Services Table提供):用于分配指定大小的内存块。所有的pool都有额外的信息标识起始地址,有一定的损耗
AllocatePages/FreePages(UEFI的Boot Services Table提供):用于释放之前通过 AllocatePool 分配的内存。用链表结构管理。

3、SMM阶段

在 SMM(系统管理模式)阶段,仅支持运行时数据和代码。SMM 在 SMRAM(系统管理 RAM)中有自己的专用内存空间,其他区域是不可访问的。

AllocatePool/FreePool:只支持runtime数据和代码
AllocatePages/FreePages:只支持runtime数据和代码

二、HOB概述

1、为什么在PEI阶段要引入HOB?

HOB(Hand-Off Block)主要用于在不同的阶段共享数据。由于Flash是只读的,直接修改全局变量是无效的。因此,在PEI(Pre-EFI Initialization)阶段,需要使用HOB来共享全局信息。HOB提供了一块临时内存,这块内存是CPU缓存的一部分,可以进行读写操作,从而在不同的阶段之间传递和共享信息。

2、HOB的类型

1) EFI_HOB_TYPE_HANDOFF:主要用于保存和传递在PEI阶段生成的信息,这些信息会被DXE阶段的驱动程序或其他组件使用。

2) EFI_HOB_TYPE_MEMORY_ALLOCATION:用于描述内存分配的信息。它通常用于传递有关分配的内存区域的元数据,包括内存的起始地址、大小和类型。

3) EFI_HOB_TYPE_RESOURCE_DESCRIPTION:用于描述系统资源的详细信息。这种类型的HOB包含有关系统资源的布局和分配信息,如内存区域、I/O端口、以及其他硬件资源的描述。

4) EFI_HOB_TYPE_GUID_EXTENTION:用于共享pre-memory和after-memory之间的数据。

5) EFI_HOB_TYPE_FV:用于描述固件卷(Firmware Volume)的信息。(是给DXE阶段用的)

6) EFI_HOB_TYPE_CPU:用于描述CPU的信息。

7) EFI_HOB_TYPE_MEMORY_POOL:提供有关内存池的配置和管理信息,帮助系统在不同的初始化阶段正确识别和利用内存池资源。

三、MEMORY类型

1、EfiLoaderCode/EfiLoaderData:用于的UEFI 应用程序代码/数据的内存区域
2、EfiBootServicesCode/EfiBootServicesData: UEFI/PEI/DXE 驱动
3、EfiRuntimeServicesCode/EfiRuntimeServicesData: Runtime驱动(不能被OS使用)
4、EfiReservedMemoryType: BIOS预留下来的一段内存,通常用于固件或其他系统组件在启动过程中的内部用途。(不能被OS使用)
5、EfiACPIReclaimMemory:用于标记ACPI需要的内存区域
6、EfiACPIMemoryNVS:用于标记 ACPI非易失性存储 (Non-Volatile Storage) 区域的内存。这种类型的内存用于存储需要在系统休眠和恢复过程中保持不变的数据。(不能被OS使用)

四、内存分布

1、PEI内存分布

1)在系统中,HOB(Hand-Off Block)内存分配是从低地址向高地址进行的。
2)HOB 和 AllocatePool 都位于低地址区域。
3)而 AllocatedPage 是从高地址向低地址分配的,位于高地址区域。
4)HOB的长度都是8字节对齐的
5)Top要大于Bottom

PEI Memory Layout

2、DXE内存分布

1)内存分配的方向从高往低
2)EFI_MEMORY_TYPE_INFORMATION 机制确保相同类型的内存尽可能集中分配。初次分配时需估算预留空间,并在启动前收集实际使用的内存信息保存为 EFI 变量。之后的启动可以使用更准确的预留值,若不够再从Remaining内存中分配。
3)ACPI、Reserved、Runtime Memory:是OS不可以回收的
4)将BIOS阶段预留的内存分配尽可能放置在高地址区域,以便操作系统能够使用连续的内存空间。
5)Pool 和 Page 在相同的内存空间中。申请 Pool 时,首先分配 Page,然后从 Page 中提供给 Pool 使用。Pool 和 Page 的管理都通过链表实现。
DXE Memory Layout

参考文章

【BIOS/UEFI】内存布局,包括 PEI Memory 和 DXE Memory

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上海亚商投顾:沪指探底回升 华为产业链午后爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日探底回升,深成指、创业板指盘中跌逾1%,午后集体拉升翻红。华为产业链午后走强…

一天一道算法题day05

目录 合并两个有序链表 什么是链表? 链表的基本概念: Java 中的链表实现 Java 内置 LinkedList 类: 回到题目 解题思路 代码实现 总结: 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼…

【几维安全-注册_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、建造者模式2、建造者模式使用场景3、优点4、缺点5、主要角色6、代码示例:1)实现要求2)UML图3)实现步骤:1)创建一个表示食物条目和食物包装的接口2)创建实现Packing接口的实体类3&a…

828华为云征文 | 深入解析华为云X实例保障云上业务安全的关键策略

前言 在云计算快速发展的背景下,安全问题一直是企业上云过程中关注的焦点。随着数据迁移至云端,企业对云计算平台的安全性能提出了更高要求,特别是如何防止数据泄露、网络攻击、以及确保合规性等问题至关重要。华为云作为全球领先的云服务提供…

分类预测|基于哈里斯鹰优化最小二乘支持向量机的数据分类预测Matlab程序HHO-LSSVM多特征输入多类别输出

分类预测|基于哈里斯鹰优化最小二乘支持向量机的数据分类预测Matlab程序HHO-LSSVM多特征输入多类别输出 文章目录 一、基本原理1. 哈里斯鹰优化算法(HHO)2. 最小二乘支持向量机(LSSVM)HHO-LSSVM模型流程总结 二、实验结果三、核心…

2024/9/12 408“回头看”之文件元数据和索引节点

文件元数据: 索引节点: 把所有文件元数据放在一起,其中只保存文件名和索引节点号,然后通过索引节点来指向其他信息: 索引节点放在外存。 未采用索引节点:找目录项得一个磁盘块、一个磁盘块的找&#xff…

通用四期ARM架构银河麒麟桌面操作系统V10【安装、配置FTP客户端】

一、操作环境 服务端:银河麒麟桌面操作系统V10SP1 客户端:银河麒麟桌面操作系统V10SP1 二、服务端配置 注:以下命令均在终端执行 鼠标点击桌面右键,选择打开终端 操作步骤: 1、安装vsftpd软件:如果提…

【运维监控】Prometheus+grafana+kafka_exporter监控kafka运行情况

本示例通过kafka_exporter收集kafka的监控指标,然后将数据收集到prometheus中,最后通过grafana的dashboard导入模板进行可视化。本示例分为四个部分,即prometheus、grafana部署、kafka_exporter部署与配置和最后的集成。说明:本示…

智科python毕业设计方向汇总

文章目录 🚩 1 前言1.1 选题注意事项1.1.1 难度怎么把控?1.1.2 题目名称怎么取? 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢? 🚩2 选题概览🚩 3 项目概览题目1 : 深度学习社…

12、xinference部署与自定义模型

1、环境创建 创建虚拟环境 conda create --name xinference python3.10.9激活虚拟环境 conda activate xinference2、安装文件 官网:https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html pip install "xinference[transfor…

DM数据库报错集合

DM数据库报错集合 DMHS安装部署报错 Oracle端的报错 启动dmhs时失败并报错 解决方法:这里就是没有密钥key,需要拥有DM数据库对应的key,然后将其命名为dmhs.key,并放在dmhs安装路径的bin目录下,就可直接运行 Orac…

经典任务损失函数与评价指标

损失函数_Lcm_Tech的博客-CSDN博客 1. 回归任务损失函数(MAE、MSE) 【损失函数】MSE, MAE, Huber loss详解_mse损失函数-CSDN博客 【回归损失函数】L1(MAE)、L2(MSE)、Smooth L1 Loss详解_mae损失函数-CS…

Qt连接mysql数据库---kalrry

Qt连接mysql数据库---kalrry 前言解决方法1解决方法2 前言 Qt自带SQLite数据库驱动很好用,但如果甲方要求必须使用MySql,那么坑就来了(本教程在Qt5版本下测试成功,Qt6需要自行尝试) 以下是记录解决Qt连接mysql的驱动问题 解决方法1 使用my…

企业需要多少六西格玛绿带?

在探讨企业的六西格玛绿带专业人员需求时,我们需要理解这个术语的背景和含义。六西格玛是一种质量改进方法,通过数据驱动的方法来解决过程问题和提高效率。六西格玛绿带是一种专业技能的认证,代表了对于六西格玛方法的深入理解和实践经验。 在…

超声波清洗机洗眼镜效果好吗?超声波清洗机洗眼镜推荐

眼镜是我们日常生活中不可或缺的伙伴。然而,在长时间使用之后,眼镜上往往会沾染各种污垢,这些污渍不仅影响视觉效果,还可能引起眼部不适。因此,清洁眼镜显得尤为重要。幸运的是,有了超声波清洗机这一工具&a…

春招审核新策略:Spring Boot系统实现

3系统分析 3.1可行性分析 通过对本大学生入学审核系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本大学生入学审核系统采用Spring Boot框架,JA…

树形结构-数据结构

一、基本知识 树:一对多的树形结构顶层的结点:称为根节点叶子结点(终端结点):最外围的结点,只有前驱结点,没有后继结点的结点,其结点的度是0分支结点:分支点是描述数据结…

金山在线文档编辑器

官方文档地址:快速开始-WebOffice 知识库 首先按照文档写的方式将包引入项目了 util.js import WebOfficeSDK from "../../public/JSEditor/open-jssdk-v0.0.13.umd" export function WordSDK(url, isEdit, mountDom, isShowTopArea, isShowHeader) {c…

【HTML】HTML页面和常见标签

文章目录 什么是前端HTML 页面编写如何快速生成代码框架常见标签注释标签标题标签段落标签换行标签格式化标签 什么是前端 Web 前端,用来直接给以用户呈现的一个一个的网页。一个软件通常是由 后端前端 完成的 后端:通过 Java/C等语言,完成相…