Memory Management (4) DXE GCD 机制

来源:互联网 发布:大型网络游排行榜2016 编辑:程序博客网 时间:2024/06/06 04:28

上一篇大概介绍了,关于UEFI 资源管理与汇报的大概流程。这篇就主要介绍一下GCD 机制。关于GCD 的讲解主要spec 有 PI Vol2_DXE_CIS_1_5 7.2 和 Beyond BIOS2nd chapter8 .

GCD:
GCD (Global Coherency Domain ) 这些function 主要是管理对于处理器可见的 memory 和 IO 的资源。memory 和 io 是分开的,memory 是uefi firmware 必须有的, io 是可选的 。所以就分为以下两类:

  • GCD memory space map
  • GCD IO space map

GCD 初始化是在Dxe Core 里,用的是HOB 里的信息,所以也可以说GCD 就是HOB信息的另外一种表现方式。以下是GCD 描述内容:

  1. CPU 能访问内存的地址线宽度
  2. 内存地址各个块的位置,大小,属性等等
  3. Firmware device 映射到内存的地址
  4. Firmware volume 地址
  5. Dxe 之前已经分配的内存资源 (之前提到的在PEI 阶段用AllocatePage 分配的资源)

GCD 里描述内存大概可以分为以下几类:

  • Nonexistent memory
  • System memory
  • Memory-mapped I/O
  • Reserved memory

Nonexistent memory: 是指CPU 可以访问的地址线,但是在这段地址线上没有对应的device(或者翻译成system components)。
System memory: 这个好理解,就是对应我们dimm (GCD 不描述Cache)
Memory-mapped I/O: 就是一段地址CPU 去访问,但是会映射到IO device 。
Reserved memory : CPU 可以访问这段地址空间,但是这段地址空间对应的device 不是memory controller 和 IO device.

GCD 描述的每段地址空间的起始和大小,不会描述内存使用的情况。GCD 对OS 是不可见的,仅仅是UEFI Firmware 内部使用

GCD 关于管理memory Resource 的function 有:

  • AddMemorySpace ( )
  • AllocateMemorySpace ( )
  • FreeMemorySpace ( )
  • RemoveMemorySpace ( )
  • SetMemorySpaceAttributes ( )

GCD 关于查询 memory Resource 的function 有:

  • GetMemorySpaceDescriptor ( )
  • GetMemorySpaceMap ( )

下面可以看一个图片
这里写图片描述

多看看这张图片,之后会发现越看越有感觉。
关于这图片这里先简单介绍两个接下来要介绍的图片最右边的(system memory )部分,比如我们要进行DXE 阶段的内存分配,看图它首先会找Non Existent (总部) 用Add ()批发一块system memory 类型的内存块的。然后就可以在这个块里进行单独管理(allocate ,free)。 还有一个是上面的块,这个我们之后也会介绍在PCI bus 里会介绍,这是给PCIe device 分配 mem 资源,首先PCI bus driver 会找 Non Existent 调用Add()批发一块MMIO 类型的内存块,然后进行单独管理给每个PCIe device 分配内存地址(这个内存其实是指PCIe 域的内存地址,和CPU 域不是一个概念,虽然X86 是1:1map,地址一样,但是概念不一样)。

GCD 关于 IO 描述与memory 类似,这里不做具体介绍,可以参考开头介绍的两本spec.

0 0