heap_create 内核服务

用途

初始化要与内核内存管理服务配合使用的新堆。 heap_create 内核服务将替换 初始化堆 内核服务。 它会返回可与 克马洛克Xmfree 内核服务配合使用的堆句柄。

语法

#include <sys/types.h>
#include <sys/malloc.h>
#include <sys/skeys.h>
#include <sys/kerrno.h>
kerrno_t heap_create (heapattr_t * heapattr, heapaddr_t * heapptr);

参数

描述
海帕特尔 指向已初始化的堆属性结构。 请参阅 sys/malloc.h 文件。 此结构由 heap_create的调用者初始化。
海普特尔 指向一个外部堆描述符。 调用者必须将此参数初始化为 HPA_INVALID_HEAP 值。

海帕特尔 结构中包含以下字段:

描述
eye_catch8b_t :hpa_eyec 必须将其初始化为 EYEC_HEAPATTR 值。
短 hpa_version 必须将其初始化为 HPA_VERSION 值。
长 hpa_flags 以下标志描述堆属性:
HPA_PAGED
堆返回可分页的内存。
HPA_PINED
堆返回固定内存。
HPA_SHARED
返回的描述符由公共子堆提供支持。
HPA_Private
返回的描述符由隔离存储器支持。
void * hpa_heapaddr 必须设置为 NULL (保留)。
size_t hpa_heapsize 堆大小 (以字节为单位)。 它仅用于私有堆。
size_t hpa_limit 与大小无关的使用障碍。 限制小于或等于专用堆的实际大小的专用堆中的可用量。
long hpa_debug_level 堆调试级别。 HPA_DEFAULT_DEBUG 值为堆提供了系统调试级别。
uint hpa_kkey 为分配的存储器请求了内核密钥。

描述

heap_create 服务是 初始化堆 服务的替换服务。 它可以用于创建专用堆,以及创建共享子堆。 在此服务创建专用堆或共享子堆的句柄后,可以将返回的 海帕德特 值与 克马洛克 服务或 Xmfree 服务配合使用,以从该堆分配或释放内存。

heap_create 服务的最常见用途是获取共享子堆的句柄。 通过在输入属性结构中设置 HPA_SHARED 标志来完成此操作。 请参阅 sys_malloc.h 文件。

可以通过指定 HPA_Private 标志来创建私有堆。 这允许 heap_create 服务将虚拟内存的区域作为专用堆进行初始化和管理。 必须将 hpa_heapaddr 字段设置为零。 heap_create 服务提供存储器,但保留了此字段以供将来使用。 hpa_size 字段指示专用堆的大小 (以字节为单位)。

专用堆可使用 hpa_limit 字段。 请使用 hpa_size 字段来保留最大有效地址空间。 然后,使用 hpa_limit 字段来更改和控制正在使用的有效地址空间的数量。 hpa_limit 字段的值必须小于或者等于 hpa_size 字段的值。

对于共享堆和专用堆, hpa_debughpa_kkey 字段是必需的。 hpa_debug 级别允许将组件运行时调试级别应用于使用返回的堆句柄进行的分配。 hpa_kkey 字段将内核键与可以限制内核可访问性的子堆相关联。

在成功完成时, 海帕特尔 字段将包含堆结构的地址。 可将此参数用作 克马洛克Xmfree 内核服务的参数。 这些服务和内部堆结构所返回的内存由 hpa_kkey 字段保护。 在调用 克马洛克Xmfree 堆服务时,调用者必须保存创建堆时使用的密钥。

执行环境

仅可从 流程环境 调用 heap_create 内核服务。

返回值

描述
重大安全事件数量 指示成功完成。 将在 海普特尔 参数中返回描述符。
EINVAL_HEAP_CREATE 指示下列一个或多个无效的输入:
  • heapattr 为 NULL。
  • * heapptr! = HPA_INVALID_HEAP。
  • heapattr-> hpa_eyec! = EYEC_HEAPATTR。
  • heapattr-> hpa_version! = HPA_VERSION。
  • 标记: 同时指定了 HPA_SHAREDHPA_Private 标记。
  • 标志: 既未指定 HPA_SHARED ,也未指定 HPA_Private 标志。
  • 标记: 同时指定了 HPA_PINEDHPA_PAGED 标记。
  • 标志: 既未指定 HPA_PINED ,也未指定 HPA_PAGED 标志。
  • 键: 指定的内核键无效。
  • 其他: 大小是使用共享堆指定的。
  • 其他: 使用共享堆来指定限制。
  • 其他: 指定的地址不为 NULL。
  • 其他: 限制> 专用堆的大小。
  • 其他: 专用堆大小过小 (小于 8M)。
ENOMEM_HEAP_CREATE 指示没有足够的内存可用于完成请求。