Memory Management (1)PEI 信息建立
来源:互联网 发布:pc手机微信三合一源码 编辑:程序博客网 时间:2024/05/01 09:30
PEI 阶段有它自己的使命,其中非常重要的一个就是初始化内存,建立内存信息,然后传给下一个阶段。为了完成PEI 的这些任务,它也需要有内存管理。
1 PEI 阶段和内存相关的,我们又不得不提一个重要的结构HOB
HOB (Hand-Off Block)
Hob 主要功能就是记录信息并且可以传递出去。(关于HOB 初始化,还有例如PEI 阶段临时内存到恒定内存,堆栈转换等等,会在之后PEI Core 里讲解)。
图1
具体各个区块的含义,下面用到哪个就具体介绍哪一个,先看看长什么样就好。
2 PEI 阶段内存的安装
主要的一个function 就是 InstallEfiMemory() 这个function 里呢做了很重要的两件事:
- build Resource HOB
- install PEI memory
下图是X86内存MAP 的一个大概的样子
// // Memory Mapping // // *------------+ HostIOBoundaryHi // * + // *------------+ 4G = HighSystemMemoryBase // * + // * + [MMIO Memory] // * + // *------------+ HostIOBoundary // * + // *------------+ GMS Base // * + // *------------+ GTT Base // * + // *------------+ TSEG Base // * + // *------------+ dPeiMemHi // * + // * + // *------------+ dPeiMemBase Base // * + // * + // * + [System Memory] // * + // *------------+ 0x1000 // * + // *------------+ 0x400000 (256M) // * + // *------------+ 0x100000 (1M) = LowSystemMemoryBase // * + // *------------+ legacy // * + // *------------+ 0 图2
那么在InstallEfiMemory ()里会为上图每个区块调用BuildResourceDescriptorHob()去记录这些信息(包括属性,起始地址和长度)。之后在DXE 阶段就可以通过查找这些ResourceHob 去了解整个系统内存的分布情况。接下来还会调用 InstallPeiMemory()去建立PEI 内存的使用信息。我们PEI 阶段使用的内存会在TSEG BASE 下面,如上图的dPeiMemBase 位置。PeiMemSize 可以根据自己的板子,RCcode或者kernel 开发者会去调整大小。
3 . HOB 的建立
HOB 是有规定的,第一个HOB 必须是PHIT HOB , 最后一个必须是End of HOB List HOB.
当InstallPeiMemory 之后PHIT 被初始化如下内容:
PHIT->EfiMemoryTop = dPeiMemHi
PHIT->EfiMemoryBottom = dPeiMemBase
PHIT->EfiFreeMemoryTop = dPeiMemHi
PHIT->EfiFreeMemoryBottom = PHIT->EfiEndOfHobList + sizeof (EFI_HOB_GENERIC_HEADER);
到目前,我们Hob 里就有如下信息:
- Resource hob 若干 (每个Hob 都描述了一个地址区块) 总共0-4G 或者 0-64G
- PHIT信息指向了 Pei memory 区块。
- Memory Management (1)PEI 信息建立
- Memory Management(2) PEI 内存分配
- iOS memory management 1
- Memory Management(1)
- Linux Kernel Memory Management (1)
- 【简记】Operating System—— memory management(part 1)
- Memory Management
- Memory Management
- Memory management
- Memory Management
- Memory management
- Memory Management
- Memory management
- Memory Management
- Memory Management
- memory management
- Item 35. Memory Management part 1
- Advanced Memory Management: Dynamic Allocation, Part 1
- ubuntu中将java环境由安装版的openjdk替换为tar版的jdk
- 前缀、中缀、后缀表达式(待续···)
- 文件夹批量导入多个txt文件到mysql及问题解决
- Jmeter注意事项
- 常用的linux命令
- Memory Management (1)PEI 信息建立
- 《项目管理利器Maven》学习(一):Maven概述及搭建Maven开发环境
- c++bytebuffer留着用,要不每次要写或者找
- substring()在JAVA,C#,SQL中的区别
- 自定义注解(java的API)
- Windows server 2008 R2 服务器系统安全防御加固方法
- MySQL索引原理及慢查询优化
- 稀疏表示学习之路之基本概述
- Linux环境下Python操作word