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 | 无 |
注:
- 有关更多详细信息,请参阅 进行 XPI 调用中对 RESPONSE 和 REASON 的说明。
- 如果将 GETMAIN 请求与 SUSPEND (NO) 一起指定,并且没有足够的可用存储器来满足该请求,那么将返回IN存储空间。
- 如果将 GETMAIN 请求与 SUSPEND (YES) 一起指定,没有足够的存储空间来满足该请求,那么将返回 PURGED ,并且将清除该任务。