vm_galloc 内核服务

用途

在 64 位内核中分配全局内存的区域。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/vmuser.h>

int vm_galloc (int  type, vmsize_t  size, ulong * eaddr)

描述

vm_galloc 内核服务将从 64 位内核上的内核全局内存池分配内存。 分配大小向上舍入到最接近的 4K 边界。 除非被 V_UREAD 标志覆盖,否则全局内存段的缺省页保护键为 00。

类型字段可能具有以下值,这些值可以组合在一起:

描述
正在工作 (_V) 必需。 创建工作存储器段。
V_SYSTEM 新分配的是一个全局系统区域,不属于任何应用程序。 此区域的存储器引用错误将导致系统崩溃。
V_UREAD 覆盖缺省页面保护 (00) 并创建缺省页面保护 (01) 的新区域。
V_NOEXEC 缺省情况下,区域中的页面将没有执行保护。 仅在 POWER4 和更高版本的硬件上受支持。

vm_galloc 内核服务旨在用于具有大型数据结构的子系统,对于这些子系统, 克马洛克 不是管理的最佳选择。 内核 克马洛克 堆本身确实驻留在全局内存中。

参数

描述
TYPE 可能指定的用于控制分配的标志。
大小 指定所需分配的大小 (以字节为单位)。
埃德尔 指向 vm_galloc 将返回已分配存储器的起始地址的位置的指针。

执行环境

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

返回值

描述
重大安全事件数量 成功完成。 已分配新区域,并且它的起始地址将在 埃德尔 参数指定的地址处返回。
EINVAL 指定的大小或类型无效。
ENOSPC 加洛克 堆中没有足够的空间来执行分配。
ENOMEM 可用资源不足,无法满足请求。