Memory Management(2) PEI 内存分配

PEI 阶段内存分配的函数有两个:

  • AllocatePage()
  • AllocatePool()

具体请参考Vol1_PEI_1_5 4.6

还是看图,有的时候,我看spec,我就喜欢看总纲的图,每次都看,每次看会有不同的理解。
这里写图片描述

关于这两个函数AllocatePage(),AllocatePool()。如果仅仅通过字面上,一个是分配比较大内存,一个是比较小的内存。

但是两个function 还是有点差别的。主要差别如下:

  • AllocatePage() 需要memory install 之后才能使用,而AllocatePool() 不需要。
  • AllocatePage() 分配是的内存在蓝色框里,并且在绿色框里增加一个EFI_HOB_TYPE_MEMORY_ALLOCATION 的Hob; AllocatePool() 分配内存返回地址是在绿色框内,并且在绿色框里增加EFI_HOB_TYPE_MEMORY_POOL 类型的Hob;
  • 地址对齐不同
  • AllocatePage 会被记录到GCD 里,AllocatePool() 不会。

关于这两个function 具体实现,我不想贴代码,还是直接看上图吧 仔细观察黄色框部分和绿色框中Allocate 1 2 3 字的部分。
黄色框的部分是我们用AllocatePage() 分配内存时候的状况,绿色框里的Allocate 1 2 3 是我们用AllocatePool() 分配内存的时候。也回想一下,上篇文章,当Pei memory install 的时候PHIT 指针的情况

PHIT->EfiMemoryTop = dPeiMemHi 
PHIT->EfiMemoryBottom = dPeiMemBase 
PHIT->EfiFreeMemoryTop = dPeiMemHi 
PHIT->EfiFreeMemoryBottom=PHIT->EfiEndOfHobList+sizeof (EFI_HOB_GENERIC_HEADER);

刚开始EfiMemoryTop 和 EfiFreeMemoryTop 是相等的,当我们用AllocatePage 分配两端内存两个黄色框的Memory Allocation 2,3 的时候EfiFreeMemoryTop 就向下移动到黄色框底端(当然,还会添加一个hub 在绿色区域,EfiFreeMemoryBottom 也会往移动)。相反,当我们用AllocatePool 的时候EfiFeeMemoryBottom 就往上移动。

EFI 阶段的内存其实也谈不上管理,它只是一个记录作用。当然它也不支持Free memory 的function 。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值