GETMAIN64

获取 24 位, 31 位或 64 位存储器。 此命令仅用于非语言环境 ® (LE) AMODE (64) 汇编程序应用程序。

请参阅 汇编程序语言编程限制和要求

语法

GETMAIN64

读取语法图跳过可视语法图GETMAIN64SET( ptr-ref64)FLENGTH( data-value)LOCATION( CVDA)EXECUTABLESHAREDNOSUSPENDUSERDATAKEYCICSDATAKEY

条件: INVREQ , LENGERR 和 NOSTG

此命令是线程安全的。

NOHANDLERESPRESP2是常用选项,可添加到所有 EXEC CICS 命令中以处理错误条件。 命令语法图和选项说明中没有明确包含这些选项。 有关这些常用选项和 EXEC CICS 命令语法的信息,请参阅 EXEC CICS 命令格式和编程注意事项.

描述

GETMAIN64 获取由 FLENGTH 选项指示的大小的主存储区。 该区域的地址在 SET 选项中提供的 64 位指针引用中返回。 缺省情况下,请求程序的寻址方式 (AMODE) 确定获取的存储器的位置。 因此,对于 AMODE (64) 程序, GETMAIN64 将获取 64 位存储器。

您还可以使用 LOCATION 选项来指定获取 24 位或 31 位存储器,而不考虑调用程序的 AMODE。 例如,如果指定 LOCATION (LOC31) ,那么将返回 31 位存储器区域的 64 位地址。

CICS® 在 24 位, 31 位或 64 位存储器中从 DSA 分配存储器。

如果已启用,那么指令执行保护将保护 CICS DSA 免受指令执行。 这有助于保护系统免受堆栈溢出和恶意攻击等错误的影响。 但是,如果出现要从 GETMAINGETMAIN64 命令获取的存储区执行指令的情况,请使用 EXECUTABLE 选项,以便 CICS 从从未受指令执行保护的 DSA 分配存储器。 请求的存储器的属性确定从中获取存储器的 DSA。 在不使用 EXECUTABLE 选项的情况下, CICS 将从 DSA 分配受保护的存储器,以防止指令执行。

建议: 客户应用程序不应使用 EXECUTABLE 选项,除非它们从通过 GETMAINGETMAIN64 命令获取的存储器构建和执行指令。 通常,应用程序不会以此方式执行。 为了防止开发者使用此功能,您可以将其添加到受限命令 parmlib 成员 DFHAPIR ,以便 CICS 转换程序可以帮助控制在程序转换时使用受限命令。 有关详细信息,请参阅 控制特定 CICS API 和 SPI 命令的使用

CICS 始终在 16 个字节的边界上进行分配,并将请求的长度舍入到最接近的 16 个字节的倍数。 8 字节的压缩区域将添加到任务 GETMAIN64 存储器的开始和结束。 即,由 GETMAIN 和未指定 SHARED 选项的 GETMAIN64 命令获取的存储器。 在此情况下,返回的地址位于 8-bye (doubleword) 边界上。

CICS 根据以下选项从 CICS-key , user-key 或 shared DSA 分配存储器:
  • 用户数据键
  • CICSDATAKEY
  • 共享
  • 如果在 GETMAIN64 命令上未指定任何数据键选项,那么在正在其下运行请求程序的 TRANSACTION 资源定义上的 TASKDATAKEY 选项。 有关 TASKDATAKEY 资源定义选项的更多信息,请参阅 TRANSACTION 资源

GETMAIN64 命令上的数据键选项将覆盖 TRANSACTION 资源定义上的 TASKDATAKEY 选项。 例如,可以指定 CICSDATAKEY 以确保请求程序从 CICS DSA 获取 CICS-key 存储器,即使在 TRANSACTION 资源定义上指定了 TASKDATAKEY (USER) 也是如此。

在使用 FREEMAINFREEMAIN64 命令释放任务之前,该任务获取的存储器可用。 对于在不使用 SHARED 选项的情况下获取的存储器,只有获取该存储器的任务才能释放该存储器。 在任务结束时, CICS 会自动释放尚未释放的此类存储器。 如果程序正在 TRANSACTION 资源定义上使用 TASKDATAKEY (USER) 定义的任务下运行,请勿显式使用 FREEMAINFREEMAIN64 ,但允许在任务终止过程中释放存储器。

所有任务 (包括通过事务隔离运行的任务) 都可以访问使用 SHARED 选项获取的任何存储器。 但是,共享区域不会在任务结束时释放,并且在显式释放之前保留; 任何任务都可以发出 FREEMAINFREEMAIN64 请求。 此行为意味着您可以在任务间通信中使用共享存储器。

GETMAIN64SHARED 选项配合使用可能会创建会对动态事务路由的使用产生负面影响的事务间亲缘关系。 有关事务亲缘关系的更多信息,请参阅 亲缘关系

选项

CICSplex 数据键
指定 CICS 从其中一个 CICS键 DSA 分配存储器。 此选项覆盖 TRANSACTION 资源定义上的 TASKDATAKEY 选项。 如果未指定数据键选项,那么存储键 (CICS-key 或 user-key) 取决于 TRANSACTION 资源定义上的 TASKDATAKEY 选项。 从中获取存储器的实际 DSA 取决于存储器的必需键,是否需要指令执行保护以及是否需要共享存储器。
executable

指定应该从从不受指令执行保护的某个 DSA 获取存储器。 有关这些 DSA 的信息,请参阅 指令执行保护

如果未启用指令执行保护,或者事务隔离处于活动状态,那么将忽略用户密钥存储器的选项。

如果未忽略该选项,那么从中获取存储器的实际 DSA 取决于所请求存储器的位置的键。 还必须指定 LOCATION 选项。

表 1表 2 汇总了数据键选项的影响。
表 1. GETMAIN64 命令上未指定或忽略 EXECUTABLE 的数据键选项
无数据键选项 已指定 USERDATAKEY 指定了 CICSDATAKEY
存储键由 TRANSACTION 资源定义上的 TASKDATAKEY 确定。 用户密钥存储器。 如果未指定 SHARED 选项,那么将从 UDSA , EUDSA 或 GUDSA 获取存储器。 如果指定了 SHARED 选项,那么将从 SDSA , ESDSA 或 GSDSA 获取存储器。 此选项覆盖 TRANSACTION 资源定义上的 TASKDATAKEY 选项。 CICS键存储器。 从 CDSA , ECDSA 或 GCDSA 获取存储器。 此选项覆盖 TRANSACTION 资源定义上的 TASKDATAKEY 选项。
表 2。 GETMAIN64 命令上的数据键选项,其中指定了 EXECUTABLE 并且未忽略
无数据键选项 指定了 USERDATAKEY 指定了 CICSDATAKEY
存储键由 TRANSACTION 资源定义上的 TASKDATAKEY 确定 用户密钥存储器。 从 PUDSA 或 EPUDSA 获取存储器。 此选项覆盖 TRANSACTION 资源定义上的 TASKDATAKEY 选项。 CICS键存储器。 从 PCDSA 或 EPCDSA 获取存储器。 此选项覆盖 TRANSACTION 资源定义上的 TASKDATAKEY 选项。
FLENGTH (data-value)
以全字二进制格式指定所需的存储字节数。

对于 64 位存储器,可以指定的最大长度为 2146435056 (2 GB-(1 MB + 16 字节))。 如果请求的长度大于可用存储器,那么将发生 NOSTG 情况。

对于 24 位或 31 位存储器,可以指定的最大长度是相应 DSA 的限制值; 即, DSALIMITEDSALIMIT。 这些系统初始化参数定义 CICS 可分别在 24 位和 31 位存储器中分配和管理各个 DSA 的总体存储器限制。 如果请求的长度大于相应的 DSALIMIT 或 EDSALIMIT 值,那么将发生 LENGERR 条件。 如果请求的长度小于相应的限制,但大于可用存储器,那么将发生 NOSTG 情况。

位置 (cvda)
指定 CICS 从 24 位或 31 位存储器分配存储器,而不考虑调用程序的 AMODE。 LOCATION 允许程序控制它请求的存储器的位置。 CVDA 值如下:
LOC24
获得 24 位存储器 (低于 16 MB)。
LOC31
将获取 31 位存储器 (高于 16 MB 但低于 2 GB)。
无暂挂
指定如果没有可用的存储器,那么 CICS 不会暂挂该任务,而是发出 NOSTG 条件。
SET (ptr-ref64)
将 64 位指针引用设置为获取的主存储器的地址。 指针设置为存储区的第一个字节。

指针引用返回 64 位, 31 位或 24 位存储器区域的 64 位地址。 获取的存储器的位置取决于调用者的 AMODE ,除非指定了 LOCATION 选项。

共享
阻止 GETMAIN64 命令在请求存储器的任务结束时自动释放该存储器。 此行为将启用任务到任务的通信。 在发出相应的 FREEMAN 或 FREEMAIN64 请求 (无论是请求任务还是其他任务) 之前,不会释放使用 SHARED 获取的区域。

如果任务异常终止,那么不会自动释放所获取的任何共享存储器。

用户数据键
指定 CICS 从用户密钥 DSA 分配存储器。 此选项覆盖 TRANSACTION 资源定义上的 TASKDATAKEY 选项。 如果未指定数据键选项,那么存储键 (CICS-key 或 user-key) 取决于 TRANSACTION 资源定义上的 TASKDATAKEY 选项。 从中获取存储器的实际 DSA 取决于存储器的必需键,是否需要指令执行保护以及是否需要共享存储器。

条件

16 INVREQ
RESP2 值:
2
EXECUTABLE 选项对于所请求的高于界线的存储器无效。
3
LOCATION 选项无效。

缺省操作: 异常终止任务。

22 LENGERR
RESP2 值:
1
FLENGTH 值小于 1 ,或大于要满足请求的目标动态存储区的长度。
42 个 NOSTG
RESP2 值:
2
请求的存储空间大于目标 DSA 中的可用存储空间。

示例

以下示例显示如何从高于界线的 CICS键存储器获取 1048576 字节区域 (无论在事务资源定义上指定了 TASKDATAKEY 选项):
EXEC CICS GETMAIN64 SET(5)
          FLENGTH(1048576)
          CICSDATAKEY