GETMAIN 调用

GETMAIN 获取存储元素以供出口程序使用。 您可以请求特定存储器 CLASS ,并且可以请求将其初始化为单字节值。 您还可以要求从从未受指令执行保护的 DSA 分配存储器。

当获取时正在使用的 TCA 终止时, CICS® 将释放通过使用 GETMAIN 调用获取且位于以下类中的存储器:
  • CICS
  • CICS24
  • USER
  • USER24.
相反,以下类中的存储器不会在任务结束时自动释放。 必须使用 FREEMAIN 调用来释放它。
  • 共享 CICS
  • SHARED_CICS24
  • 共享用户
  • SHARED_USER24
  • TERMINAL。

此外,还可以从系统任务中调用某些用户出口。 在这些情况下,在下次 CICS 关闭之前不会释放存储器。 因此,使用 FREEMAIN 调用以在完成使用后立即释放 GETMAIN 调用获取的所有存储区域。

GETMAIN

DFHSMMCX [CALL,]
      [CLEAR,]
      [IN,
      FUNCTION(GETMAIN),
      GET_LENGTH(name4 | (Rn) | expression),
      STORAGE_CLASS(CICS|CICS24|SHARED_CICS|SHARED_CICS24|
                  SHARED_USER|SHARED_USER24|USER|USER24|TERMINAL),
      SUSPEND(NO|YES),
      [EXECUTABLE(NO|YES),]
      [INITIAL_IMAGE(name1 | literalconst),]
      [TCTTE_ADDRESS(name4 | (Ra)),]]
      [OUT,
      ADDRESS(name4 | (Rn) | *),
      RESPONSE(name1 | *),
      REASON(name1 | *)]

此命令是线程安全的。

地址 (name4 | (Rn) | *)
返回通过调用获取的存储器的地址。
name4
保存获取的存储地址的全字的名称。
(Rn)
设置为指向获取的存储器的寄存器。
*
参数列表本身 (名称 SMMC_ADDRESS) 用于保留地址。
EXECUTABLE (NO| YES)
指定是否从受保护不执行指令的 DSA 获取存储器。
该存储器是从符合指令执行保护条件的 DSA 中获取的。 如果在 CICS 区域中启用了指令执行保护,那么会针对指令执行保护该存储器。 缺省值为 NO。
YES
从从未受指令执行保护的 DSA 获取存储器。
GET_LENGTH (name4 | (Rn) | 表达式)
指定所需存储量的字节数,以下列任何一种方式表示:
name4
以二进制格式指定字节数的全字的名称。
(Rn)
以二进制格式包含字节数的寄存器。
表达式
有效的汇编程序表达式; 例如,数字,符号表达式或两者的组合。

如果您请求 TERMINAL 存储器,那么指定的长度不包括存储器记帐区域 (SAA) 的长度。 可以指定的最大长度为 65,515 字节。 CICS 存储管理会添加 8 字节的 SAA ,并且 XPI 调用返回的地址是 SAA 启动的地址。

如果请求 CICS24, CICS, USER24, USER , SHARED_CICS24, SHARED_CICS , SHARED_USER24或 SHARED_USER 存储器,那么只需要指定程序所需的长度。 返回的地址是启动数据存储器的地址。 这些存储类的最大存储器大小与从中分配这些存储类的 DSA 的大小相同。
INITIAL_IMAGE (name1 | literalconst)
指定初始化模式。 例如,您可能想要将获取的存储器设置为二进制零。
name1
存储 1 字节初始化模式的位置的名称。
文学
字面值格式的数字,例如 B '00000000'X'FF 'X'FC'"0"或具有类似值的等号。
STORAGE_CLASS (CICS|CICS24|SHARED_CICS|SHARED_CICS24| SHARED_USER|SHARED_USER24|USER|USER24|TERMINAL)
指定作为调用主体的存储器的类。 表 1中列出了可以指定给此选项的值以及每个选项表示的存储器类型。
表 1. CICS 存储类
STORAGE_CLASS 存储类型
CICS 任务-生存期 CICS-超过 16 MB 但低于 2 GB 的密钥存储器
CICS24 任务-生存期 CICS-16 MB 以下的密钥存储器
共享 CICS 高于 16 MB 但低于 2 GB 的共享 CICS密钥存储器
SHARED_CICS24 低于 16 MB 的共享 CICS密钥存储器
共享用户 高于 16 MB 但低于 2 GB 的共享用户密钥存储器
SHARED_USER24 低于 16 MB 的共享用户密钥存储器
TERMINAL 此类存储器具有 8 字节的 SAA。
USER 高于 16 MB 但低于 2 GB 的任务生存期用户密钥存储器
USER24 低于 16 MB 的任务生存期用户密钥存储器

必须在 GETMAIN 请求上指定存储类。 在 FREEMAIN 请求中,它是可选参数, CICS不会检查您指定的任何值。

SUSPEND (YES | NO)
指定如果可用的存储空间少于在 GET_LENGTH 选项中请求的存储空间,是否暂挂请求。
TCTTE_ADDRESS (name4 | (Ra))
指定终端控制表终端项 (TCTTE) 的地址。 在 GETMAIN 请求上,如果在 STORAGE_CLASS 选项上指定了 TERMINAL 类,那么必须对此选项进行编码。 在 FREEMAIN 请求上,如果释放 TERMINAL 类存储器,那么必须对此选项进行编码。
注: 在获取 TERMINAL 类存储器之前,请检查 TCAFCI 位 7 以确保 TCA 在终端下运行。
name4
包含地址的全字的名称。
(拉)
指向 TCTTE 的寄存器。

GETMAIN 的 RESPONSE 和 REASON 值

响应 推理
确定
EXCEPTION 存储器不足
DISASTER
INVALID
KERNERROR
PURGED
注:
  1. 有关更多详细信息,请参阅 进行 XPI 调用中对 RESPONSE 和 REASON 的说明。
  2. 如果将 GETMAIN 请求与 SUSPEND (NO) 一起指定,并且没有足够的可用存储器来满足该请求,那么将返回IN存储空间。
  3. 如果将 GETMAIN 请求与 SUSPEND (YES) 一起指定,没有足够的存储空间来满足该请求,那么将返回 PURGED ,并且将清除该任务。