GETMAIN64
获取 24 位, 31 位或 64 位存储器。 此命令仅用于非语言环境 ® (LE) AMODE (64) 汇编语言应用程序。
请参阅 汇编程序语言编程限制和要求。
描述
GETMAIN64 获取由 FLENGTH 选项指示的大小的主存储区。 该区域的地址在 SET 选项中提供的 64 位指针引用中返回。 缺省情况下,请求程序的寻址方式 (AMODE) 确定获取的存储器的位置。 因此,对于 AMODE (64) 程序, GETMAIN64 获取 64 位存储器。
您还可以使用 LOCATION 参数来指定获取 24 位或 31 位存储器,而不考虑调用程序的 AMODE。 例如,如果指定 LOCATION (LOC31) ,那么将返回 31 位存储器区域的 64 位地址。
CICS® 始终在 16 个字节的边界上进行分配,并将请求的长度舍入到最接近的 16 个字节的倍数。
- 24 位存储器中的 DSA:
- 低于 16 MB (低于界线) 的 CICS 动态存储区 (CDSA)
- 低于 16 MB 的用户动态存储区 (UDSA)
- 低于 16 MB 的共享动态存储区 (SDSA)
- 31 位存储器中的 DSA; 扩展动态存储区 (EDSA):
- 扩展 CICS 动态存储区 (ECDSA) ,高于 16 MB 但低于 2 GB (高于该行)
- 扩展用户动态存储区 (EUDSA) ,高于 16 MB 但低于 2 GB
- 扩展共享动态存储区 (ESDSA) ,高于 16 MB 但低于 2 GB
- 64 位存储器中的 DSA: 高于界线的动态存储器区域 (GDSA):
- 高于条形的 CICS DSA (GCDSA)
- 高于栏的用户 DSA (GUDSA)
- 以上条形共享 DSA (GSDSA)
- 只读 DSA (RDSA)
- 扩展只读 DSA (ERDSA)
- 扩展可信 DSA (ETDSA)
- 用户数据键
- CICSplex 数据键
- 共享
- 如果在 GETMAIN64 命令上未指定任何数据键选项,那么在运行请求程序的 RDO TRANSACTION 资源定义上的 TASKDATAKEY 选项。 请参阅 TRANSACTION 属性。
| 无数据键选项 | 已指定 USERDATAKEY | 指定了 CICSDATAKEY |
|---|---|---|
| 存储键由事务定义上的 TASKDATAKEY 确定 | 用户密钥存储器。 如果未指定 SHARED 选项,那么将从 UDSA , EUDSA 或 GUDSA 获取存储器。 如果指定了 SHARED 选项,那么将从 SDSA , ESDSA 或 GSDSA 获取存储器。 | CICS键存储器。 从 CDSA , ECDSA 或 GCDSA 获取存储器。 |
GETMAIN64 命令上的数据键选项将覆盖 RDO TRANSACTION 资源定义上的 TASKDATAKEY 选项。 例如,可以指定 CICSDATAKEY 以确保请求程序从 CICS DSA 获取 CICS-key 存储器,即使在 RDO TRANSACTION 资源定义上指定了 TASKDATAKEY (USER) 也是如此。
任务获取的存储器在使用 FREEMAIN 或 FREEMAIN64 命令释放之前可用。 对于在不使用 SHARED 选项的情况下获取的存储器,只有获取该存储器的任务才能释放该存储器。 在任务结束时, CICS 会自动释放尚未释放的此类存储器。
所有任务 (包括通过事务隔离运行的任务) 都可以访问使用 SHARED 选项获取的任何存储器。 但是,共享区域不会在任务结束时释放,并且在显式释放之前保留; 任何任务都可以发出 FREEMAIN 或 FREEMAIN64 请求。 这意味着您可以在任务间通信中使用共享存储器。
选项
- CICSplex 数据键
- 指定 CICS 从 CICS-key DSA (CDSA , ECDSA 或 GCDSA) 分配存储器,覆盖在事务资源定义上指定的 TASKDATAKEY 选项。 如果未指定数据密钥选项,那么存储密钥 (CICS-key 或 user-key) 取决于事务资源定义上的 TASKDATAKEY 选项。注: 如果程序正在事务资源定义上使用 TASKDATAKEY (USER) 定义的任务下运行,请勿显式使用 FREEMAIN 或 FREEMAIN64 请求,但允许在任务终止过程中释放存储器。
- FLENGTH (data-value)
- 指定所需的存储字节数 (全字二进制格式)。
对于 64 位存储器,可以指定的最大长度为 2146435056 (2 GB-(1 MB + 16 字节))。 如果请求的长度大于可用存储器,那么将发生 NOSTG 情况。
对于 24 位或 31 位存储器,可以指定的最大长度是相应 DSA (即 DSALIMIT 或 EDSALIMIT) 的限制值。 DSALIMIT 和 EDSALIMIT 是系统初始化参数,用于定义 CICS 可以在其中分别分配和管理 24 位和 31 位存储器中的各个 DSA 的总体存储器限制。 如果请求的长度大于相应的 DSALIMIT 或 EDSALIMIT 值,那么将发生 LENGERR 条件。 如果请求的长度小于相应的限制,但大于可用存储器,那么将发生 NOSTG 情况。
- 位置 (cvda)
- 指定 CICS 从 24 位或 31 位存储器分配存储器,而不考虑调用程序的 AMODE。 CVDA 值如下:
- LOC24
- 获取 24 位存储器 (低于 16 MB); 即,从 CDSA , UDSA 或 SDSA 获取。
- LOC31
- 31 位存储器 (高于 16 MB 但低于 2 GB) 从 ECDSA , EUDSA 或 ESDSA 获取。
- 无暂挂
- 指定如果没有可用的存储器,那么 CICS 不会暂挂该任务,而是发出 NOSTG 条件。
- SET (ptr-ref64)
- 将 64 位指针引用设置为获取的主存储器的地址。 指针设置为存储区的第一个字节。
指针引用返回 64 位, 31 位或 24 位存储器区域的 64 位地址。 除非指定 LOCATION 选项,否则获取的存储器的位置取决于调用者的 AMODE。
- 共享
- 阻止 GETMAIN64 命令在请求存储器的任务结束时自动释放该存储器。 这将启用任务到任务通信。 在发出相应的 FREEMAN 或 FREEMAIN64 请求 (无论是请求任务还是其他任务) 之前,不会释放使用 SHARED 获取的区域。
请注意,如果任务异常终止,那么不会自动释放所获取的任何共享存储器。
- 用户数据键
- 指定 CICS 从用户密钥 DSA (UDSA , SDSA , EUDSA , ESDSA , GUDSA 或 GSDSA) 分配存储器,覆盖在事务资源定义上指定的 TASKDATAKEY 选项。 如果未指定数据密钥选项,那么存储密钥 (CICS-key 或 user-key) 取决于事务资源定义上的 TASKDATAKEY 选项。
条件
- 16 INVREQ
- RESP2 值:
- 3
- LOCATION 选项无效。
- 22 LENGERR
- RESP2 值:
- 1
- FLENGTH 值小于 1 ,或大于要满足请求的目标动态存储区的长度。 请参阅 CICS 动态存储区中有关 DSA 的讨论。
- 42 个 NOSTG
- RESP2 值:
- 2
- 请求的存储空间大于目标 DSA 中当前可用的存储空间。 请参阅 CICS 动态存储区中有关 DSA 的讨论。
示例
EXEC CICS GETMAIN64 SET(5)
FLENGTH(1048576)
CICSDATAKEY
