开放式 TCB 管理
在开放式事务环境 (OTE) 中,CICS 应用程序代码可以在 CICS 地址空间内使用非 CICS 服务(CICS API 作用域外的设施),而不会在拟重入任务控制块 (QR TCB) 上引起等待问题。
利用开放式事务环境的应用程序在其自己的开放式 TCB 上运行,而不是在 QR TCB 上运行。 CICS 不会在开放式 TCB 上执行子分派,而在 QR TCB 上执行子分派。 如果在开放式 TCB 上运行的应用程序调用了阻止 TCB 的非CICS 服务,那么 TCB 阻塞不会影响其他 CICS 任务。 有关编写应用程序以利用开放式事务环境的更多信息,请参阅 多线程: 重入程序,准重入程序和线程安全程序。
TCB 方式
- L8 方式 TCB 和 L9 方式 TCB
- 这些 TCB 按如下所示使用:
- L8 TCB 用于 CICS-通过其 PROGRAM 资源定义定义为 API (OPENAPI) 的密钥应用程序。
- L8 TCB 用于 CICS-通过其 PROGRAM 资源定义定义为 CONCURRENCY (REQUIRED) 和 API (CICSAPI) 的密钥应用程序。
- L8 当程序需要通过使用 ENABLE PROGRAM 命令上的 OPENAPI 选项启用的任务相关用户出口 (TRUE) 访问资源管理器时,将使用 TCB。 与任务相关的用户出口始终在 CICS 键中运行。
- CICS 在访问存储在 z/OS UNIX System Services文件中的文档模板和 HTTP 静态响应时,会使用 L8。
- L8 TCB 用于 Web Service 请求和解析在 CICS 键中运行并定义为 OPENAPI 的 XML CICS 程序。
- L9 TCB 用于在用户密钥中运行并定义为 OPENAPI 的应用程序。
CICS 使用与 OPENAPI 任务相关的用户出口进行操作,因此在连接到以下产品时使用 L8 TCB:- IBM® MQ 使用 CICS® - MQ 适配器
- Db2®,使用 CICS Db2 连接工具。 有关开放式事务环境中的 CICS Db2 连接设施线程 TCB 的更多信息,请参阅 概述: 线程工作方式。
- IMS V12 或更高版本,使用 CICS DBCTL 数据库适配器 Transformer (DFHDBAT)。 请参阅 通过线程安全编程使 CICS IMS 应用程序能够使用开放式事务环境 (OTE)。
其他 IBM 产品,例如 IP CICS Sockets 和 z/OS Integrated Cryptographic Service Facility (ICSF),也可以使用启用 OPENAPI 的任务相关用户出口。 有关管理 IP CICS 套接字的更多信息,请参阅 z/OS Communications Server :IP CICS 套接字指南。 有关 CICS -ICSF Attachment Facility 的更多信息,请参阅 z/OS Cryptographic Services ICSF System Programmer's Guide。
- SP 方式 TCB 和 S8 方式 TCB
- 这些TCB由 CICS 用于管理 SSL 连接,并通过DFHDDAPX XPI接口处理发往 LDAP 的请求。 S8 的TCB在单一保护区中运行,该保护区由SP TCB拥有,同时包含 SSL 缓存。
S8 的TCB包含在 SSL 池中,该池由 CICS 调度程序管理。 每个 SSL 连接都使用来自 SSL 池的 S8 TCB。 针对 SSL 连接的所有 CICS 处理均在 S8 信任计算基础结构(TCB)上进行(不会在 S8 和SO TCB之间切换)。 网络服务器 HTTP 的附加任务(默认为CWXN)将保持在 S8 的可信计算基(TCB)上,直至所有数据完成发送或接收。
任务控制块( S8 )TCB从任务控制块池( SSL )分配给任务,但仅在执行功能期间被锁定,例如执行 SSL 握手或 LDAP 请求。 该函数执行完毕后,TCB将被释放回 SSL 池以供重复使用。
注: 如果要发送或接收的消息非常大,那么该任务可能会达到失控限制并被终止。 为了避免任务被取消,您可能需要增加Web服务器 HTTP (默认情况下为CWXN)、Web服务器别名事务以及任何发出Web客户端API命令SEND、RECEIVE和CONVERSE的事务的RUNAWAY值。在 UNIX 系统服务 (USS) 中,可以使用 MAXTHREADS 和 MAXTHREADTASKS 参数来限制 USS 进程可以拥有的 pthread 数。 每个 SSL TCB都需要一个pthread线程和一个 MVS 任务。 因此,必须确保这些 USS 参数的值超过 MAXSSLTCBS 系统初始化参数的值。 若未为 MAXTHREADS 或 设置足够 MAXTHREADTASKS 高的值,且 CICS 在尝试附加 SSL 信任控制基元(TCB)时触及其中一个限制, CICS 将从DFHDSIT发出错误消息 DFHDS0002 严重错误代码X'0137'。
- TP 方式 TCB 和 T8 方式 TCB
- 这些TCB由 JVM 服务器用于处理Java™程序的请求。 JVM 服务器是一个运行时环境,能够在单个 JVM 中处理Java应用程序的多重并发请求。 TP模式TCB拥有 Language Environment 安全域及 T8 TCB池。 在 CICS 区域运行的每个 JVM 服务器都拥有一个TP TCB,以及至少一个但不超过256个 T8 TCB。 任务控制块( T8 )TCB从相应 JVM 服务器的THRD池中分配给任务,但仅在执行系统处理所需的时间段内保持锁定状态。 T8 TCB 不会在 JVM 服务器之间共享。
- X8 方式 TCB 和 X9 方式 TCB
- 这两个TCB都用于运行使用XPLINK选项编译的C和C++程序。 X8 TCB 用于 CICS 键中的程序, X9 TCB 用于用户键中的程序。 XPLink 程序的每个实例都使用一个 X8 或 X9 TCB。 有关使用 XPLink 的更多信息,请参阅 XPLink 以及 C 和 C++ 编程 。
开放式 TCB 池
CICS 管理 池中的开放式 TCB。 池包含用于相同目的的开放式 TCB。 池可以由分配给任务的一些 TCB 以及已由应用程序释放并可供复用的其他 TCB 组成。
- 如果指定了 MAXOPENTCBS 系统初始化参数,那么将设置开放式 TCB 池的值。 如果未指定 MAXOPENTCBS 系统初始化参数, CICS 会根据 CICS 区域指定的最大任务数(MXT 值),使用以下公式自动设置 L8 和 L9 模式开放 TCB 池的限制:
(2 * MXT Value) + 32. 如果最大任务数被动态调整,则 CICS 会根据调整后的 MXT 值重新计算 MAXOPENTCBS 。 需要注意的是,在明确指定 MAXOPENTCBS 后,如果要恢复到允许 CICS 自动设置 的状态,必须重新初始化本地和全局目录。有关自己明确设置 MAXOPENTCBS 参数的信息,请参阅 MAXOPENTCBS。
- 系统 MAXSSLTCBS 初始化参数指定了 SSL TCB池的值。
- MAXTHRDTCBS 指定 JVM 服务器THRD TCB池的值。 为每个 JVM 服务器保留的线程数是JVMSERVER资源中的值
THREADLIMIT,该值通过在线程数基础上加1自动计算得出,上限为2000。 - 如果指定了 MAXXPTCBS 系统初始化参数,那么将设置 XP TCB 池的值。 如果未指定 MAXXPTCBS 系统初始化,那么 CICS 会自动将 X8 和 X9 方式 XP TCB 池的限制设置为等于为 CICS 区域指定的最大任务数 (MXT 值) 的值。 有关自行显式设置 MAXXPTCBS 参数的信息,请参阅 MAXXPTCBS 系统初始化参数 。
当应用程序发出需要开放式 TCB 的请求时, CICS 首先尝试查找适合在相应池中复用的 TCB。 仅当 TCB 用于正确的子空间时, CICS 才能将请求与具有正确方式的可用 TCB 相匹配。 CICS 在找不到与正确子空间的可用 TCB 匹配的新 TCB 时连接,前提是尚未达到池的限制。
允许 CICS 任务根据需要使用任意数量的 X8 和 X9 TCB ,并且这些 TCB 仅保留到程序完成为止。 但是,每个 CICS 任务最多允许一个 L8 和一个 L9 TCB ,并且在分配到任务结束时保留 L8 和 L9 TCB ,并根据需要将其用于进一步请求。 然后, TCB 变为可用,并且 CICS 可以将其分配给另一个任务或将其销毁。
有时, CICS 找不到适合应用程序请求的匹配项,并且已达到池的限制。 在此情况下, CICS 可能会通过销毁池中具有错误子空间或方式的可用 TCB ,并将其替换为具有正确方式和子空间的 TCB 来实现请求。 此技术称为 窃取。 根据开放式 TCB 的类型,窃用可能会导致性能成本高昂,因此 CICS 会避免在需要执行此操作的地方执行此操作。 CICS 在 CICS 分派器 TCB 方式和 TCB 池统计信息中维护过量 TCB 管理和 TCB 窃取活动的统计信息。
如果 TCB 数达到池的限制,并且没有可用 TCB 可供窃用,那么将使用 OPENPOOL 来暂挂该任务,直到 TCB 变为可用,或者增加池的限制。
为了最大限度减少对存储器的影响, CICS 会尝试根据当前需要平衡每个池中打开的 TCB 数。 如果 CICS 在池中找到可用 TCB ,那么它将通过拆离这些 TCB 来逐步减少多余的 TCB 数,从而释放多余的 TCB 所使用的资源。