终端控制资源管理器, DFHZCP 和 DFHTCP
终端控制由两个 CICS® 资源管理器 (ZCP 和 TCP) 组成。
- ZCP
- DFHZCP , DFHZCX 和 DFHZCXR 提供公共 (z/OS® Communications Server 和非z/OS Communications Server) 接口,而 DFHZCA , DFHZCB , DFHZCC , DFHZCW , DFHZCY 和 DFHZCZ 仅提供 z/OS Communications Server支持。
- TCP
- DFHTCP 提供非 z/OS Communications Server 支持(不支持 MVS 控制台)。
终端控制与应用程序, CICS 系统控制功能 (事务管理器,存储器控制) , CICS 应用程序服务 (基本映射支持和数据交换程序) ,系统可靠性功能 (异常情况处理) 和操作系统访问方法 (z/OS Communications Server 或 BSAM) 进行通信。
应用程序, BMS 或事务管理器对终端控制功能的请求通过 DFHZCP 的公共接口进行处理。 通常,针对其他 CICS 或操作系统功能的终端控制请求由 ZCP 或 TCP 发出,具体取决于所服务的终端。
- 仅当指定了 TCP=YES 时,才会装入 DFHTCP。
- 将始终装入 DFHZCP , DFHZCX 和 DFHZCXR。
- 仅当指定了 VTAM ® =YES (VTAM 是 z/OS Communications Server的先前名称) 时,才会装入 DFHZCA , DFHZCB , DFHZCY 和 DFHZCZ。
- 仅当指定了 ISC=YES 时,才会装入 DFHZCC 和 DFHZCW。
图 1 上的以下说明与公共接口相关。
- 当应用程序或使用 DFHTC 宏的基本映射支持 (BMS) 例程发出终端控制请求时,将在用户的任务控制区 (TCA) 中设置请求位,并将控制传递到 DFHZCP 的公共接口 (z/OS Communications Server,非z/OS Communications Server) 例程。
- 如果请求包含 WAIT 且 IMMED 选项未生效,那么控制权将传递给事务管理器以将请求程序 (任务) 置于暂挂状态。 如果未包含 WAIT ,那么控制权将返回给请求任务。
- 当将 TCATPTA 传递给终端控制时,任务的 TCA 包含名为 TCAFCAAA (设施控制区域关联地址) 的字段中的 TCTTE 地址或名为 TCATPTA 的字段中的 TCTTE 地址。
- 由于下列其中一个原因,分派器通过公共接口 (DFHZCP 中的 DFHZDSP) 分派终端控制:
- 自上次终端控制分派以来,系统地址空间出口时间间隔 (由 ICV 系统初始化参数指定) 已过去。
- 已经过指定的终端扫描延迟 (由 ICVTSD 系统初始化参数指定)。
- 存在要处理的高性能选项 (HPO) 工作。
- 终端控制事件已发布完成 (例如,在 z/OS Communications Server的情况下调度的出口,或者在非z/OS Communications Server的情况下发布的事件控制块 (ECB)) ,并且 CICS 即将进入等待状态。
- 终端控制通过其公共接口 (DFHZDSP) 请求分派器在终端控制任务已通过终端网络进行处理并且没有其他可执行的工作时执行 CICS WAIT。
- 终端控制与存储管理器通信以获取和释放存储器,如下所示:
- z/OS Communications Server
- ZCP 模块针对终端存储器 (TIOA) ,接收任何输入区域 (RAIA) 存储器和请求参数列表 (RPL) 存储器发出域调用。
- 非z/OS Communications Server
- DFHTCP 发出 DFHSC 宏以获取和释放终端和线路存储器。
- 终端控制通过 DFHKC 宏与事务管理器通信。 该宏可由某些 CICS 控制模块发出,具体取决于所服务的终端。 终端控制可以请求事务管理器执行下列其中一项操作:
- 在收到来自终端的事务标识时附加任务。
- 当任务或任务需要终端并且该设施可用时,响应 DFHKC TYPE=AVAIL 请求 (仅记录用于系统编程的任务控制宏)。
- 终端控制通过以下任一方式与操作系统访问方法进行通信,具体取决于所服务的终端:
- z/OS Communications Server
- ZCP (在此处引用资源管理器) 构建 RPL 中的 z/OS Communications Server 请求信息,然后将其传递到 z/OS Communications Server 以进行维护。 z/OS Communications Server 通过将完成信息放入 RPL 来通知终端控制完成。 ZCP 在完成时分析 RPL 的内容,以确定完成类型和是否存在错误信息。 与 z/OS Communications Server 的通信也由 z/OS Communications Server 调度出口 (例如 LOGON 或 LOSTERM) 进行。 z/OS Communications Server 传递参数列表,但并不总是使用 RPL。
当请求了授权路径 z/OS Communications Server (HPO) 时,与 z/OS Communications Server 的通信也以服务请求块 (SRB) 方式进行 (使用 DFHZHPRX); ZCP 使用带有扩展的 RPL 与其 SRB 方式代码进行通信。 当 SRB 方式 RPL 请求完成时, ZCP 将调用相关出口或发布 ECB ,如 RPL 扩展所指示。
- 非z/OS Communications Server
- DFHTCP 在数据事件控制块 (DECB) 中构建访问方法请求, DECB 是终端控制表行项 (TCTLE) 的一部分。 通过终端控制将 TCTLE 的 DECB 部分传递到访问方法,以请求该访问方法的服务。 接入方法通过 DECB 通知终端控制服务的完成。 终端控件在完成时分析 DECB 的内容,以确定完成类型并检查错误信息。
- 终端控制通过以下任一方式与 CICS 异常条件功能进行通信,具体取决于所服务的终端:
- z/OS Communications Server
- 激活扫描例程 (DFHZCA 装入模块中的 DFHZACT) 连接 CSNE 事务以运行节点异常条件程序 (DFHZNAC); 这是在 CICS 初始化期间完成的。 DFHZNAC 执行一些初步处理,然后将控制传递到节点错误程序 (DFHZNEP)。 (节点错误程序可以是您自己的版本,也可以是 CICS提供的缺省版本。) 完成用户的错误处理后,控制权将返回到 DFHZNAC。 (有关 DFHZNAC 的更多信息,请参阅 节点异常条件程序。)
- 非z/OS Communications Server
- DFHTCP 连接 CSTE 事务以运行终端异常条件程序 (TACP) ,并在发生错误时传递终端异常条件行项 (如有)。 "触角" 是 TCTLE 的 DECB 部分的副本,包含正确评估错误所需的所有信息,以及可操作以更改错误纠正过程的特殊操作指示符。 在分析 DECB 之后, DFHTACP 使用包含性地址的 COMMAREA 调用终端错误程序 (DFHTEP)。 (终端错误程序可以是您自己的版本,也可以是 CICS提供的缺省版本。) 有关 DFHTACP 的更多信息,请参阅 终端异常条件程序。
- 终端控制在用户的 TCA 或其自己的 TCA 下执行,如下所示:
- 用户的 TCA
- 在应用程序接口期间
- 在具有基本映射支持的接口期间
- 执行直接 z/OS Communications Server 终端 SEND 请求时。
- 终端控件的 TCA
- 当分派器分派终端控制时
- 当终端控制向事务管理器发出连接任务的请求时
- 当终端控制向存储控制发出请求时
- 执行非z/OS Communications Server 终端 I/O 或排队的 z/OS Communications Server 终端 I/O 时
- 未连接任何任务时用于会话控制功能。
由于 CICS 终端控件支持许多设备,因此需要大量模块来提供此支持。

高性能选项
在 MVS 环境下运行 CICS 时,可启用高性能选项(HPO)。 HPO采用 z/OS Communications Server 与 CICS 作为授权程序,从而缩短了 z/OS Communications Server 路径长度。 这是通过分派 SRB 以向终端发出发送和接收数据请求来实现的。 SBB 代码在 DFHZHPRX 模块中执行。
系统控制台支持
一个或多个 MVS 系统控制台可作为 CICS 终端使用。 这包括从 MVS /ESA SP 4.1 及后续版本引入的任何 MVS 扩展控制台;例如,TSO用户执行TSO CONSOLE命令的情况。
每台主机均拥有唯一编号( MVS /ESA SP 4.1 之前的版本)或唯一名称( MVS /ESA SP 4.1 及后续版本)。 这与 MVS 系统生成中定义的控制台编号或名称相匹配。 控制台通过CEDA DEFINE TERMINAL定义为 CICS (参见在线资源定义(RDO) )。 控制台编号或名称分别通过CONSOLE或CONSNAME关键字指定,具体取决于 MVS 的级别。
控制台操作员使用 MVS 的MODIFY命令与 CICS 通信以启动事务。 CICS 通过WTO宏或WTOR宏与控制台进行通信。
CICS 将系统控制台建模为具有关联控制块 (控制台控制元素 (CCE)) 的 TCTTE。 CCE 保存控制台的事件控制块 (ECB) 以及控制台标识和控制台名称。
系统控制台与 CICS 之间的接口是命令输入缓冲区(CIB),该缓冲区在 MVS 保护存储区中为每个MODIFY命令创建。 CIB 包含 MODIFY 命令的数据。 CICS 使用EXTRACT宏处理第一个CIB,并将CIBs串联起来。
MVS 通信ECB位于 MVS 保护存储区中;每次MODIFY命令执行时都会完整写入,当无CIB待处理时则重置。 CICS 系统等待队列包含指向 MVS 通信ECB以及每个系统控制台ECB的指针。
初始化 CICS 时,将执行EXTRACT宏以获取作业名称,并指向 MVS 通信ECB及首个CIB;所有这些信息均存储于TCT前缀中。
DFHZCP 包含两个模块 :DFHZCNA 和 DFHZCNR ,用于执行系统控制台支持。
- 在完成任务的终端事件时恢复任务
- 附加任务以满足 MODIFY 命令的事务启动请求
- 附加自动事务启动 (ATI) 请求的任务 (AVAIL)
- 在任务完成时从任务拆离终端
- 在 CICS 停顿时关闭控制台支持。
- 针对应用程序 WRITE 请求发出 WTO 宏
- 针对应用程序 CONVERSE 或 (WRITE , READ) 请求发出 WTO 和 WTOR 宏
- 针对应用程序 READ 请求发出带有消息 DFH4200 的 WTOR 宏。
控制台支持控制模块
DFHZDSP 调用 DFHZCNA 来扫描控制台以查找任何活动。
DFHZCNA 检查是否由于正在等待终端事件 (例如 READ) 而暂挂任何任务,如果该事件已完成,请在启动任何新任务之前恢复该任务。 这是通过扫描CCE链来实现的,该链中包含由 MVS 发布的ECB。
执行 MODIFY 命令时,会将通信 ECB 发布完成,并将该命令的 CIB 添加到 CIB 链的末尾。 DFHZCNA 按先入先出顺序处理 CIB 链。 对于每个 CIB , DFHZCNA 会在 CCE 链中搜索控制台。 使用 MVS /ESA SP 4.1 (或更高版本)时,搜索基于控制台名称;否则,搜索基于控制台 ID。
如果 CCE 中的 "task pending" 标志未由链中的前置 CIB 设置,那么将连接该任务。 在扫描 CIB 链的过程中, DFHZCNA 可能会找到需要附加任务的 MODIFY 命令,但无法立即附加任务,因为已经有任务处于活动状态,或者有未解决的错误情况需要清除。 DFHZCNA 因此在 CCE 中设置 "task pending" 标志以记住 CIB 的存在。 在 CIB 链扫描期间,可能会清除阻止任务连接的条件,并且可能会选择后续 CIB 进行连接。 但是, "任务暂挂" 标志会阻止此操作,并确保按顺序处理 CIBs。 在每次 CIB 链扫描之前,将重置所有 "任务暂挂" 标志。
如果要连接该任务, DFHZCNA 将获取 TIOA 并将数据从 CIB 移至 TIOA。 然后调用 DFHZATT 以连接该任务。 如果连接失败,那么将释放 TIOA。 如果连接成功,那么 QEDIT 宏将释放 CIB ,并且扫描将继续。
当事务自动启动并且 DFHKCP 调度作为控制台的终端的事务时,由 DFHZLOC 在 CCE 中设置标志。 DFHZCNA 完成扫描 CIB 链后,将检查控制台是否没有已连接的任务,并且控制台的链上是否没有 CIB; 如果满足这两个条件,那么将连接该任务。
DFHZCNA 发出 QEDIT 宏,以防止在 CICS 关闭时再接受任何 MODIFY 命令。 启动关闭后,将处理 CIB 链上的任何 MODIFY 命令。 当其他访问方法已停顿,并且没有为控制台附加任务时,控制台支持将关闭。
如果未定义到 CICS 的控制台用于输入 MODIFY 命令,那么 DFHZCNA 会设置错误代码并链接到 DFHACP 以发出错误消息。 这是使用 TCTTE 对错误控制台 CERR 完成的。
DFHZCNR 通过发出 WTO 和 WTOR 宏将终端控制请求从应用程序发送到特定系统控制台。 它由 DFHZARQ 调用。
对于 WRITE 请求, DFHZCNR 执行单个 WTO 宏或一个或多个多行 WTO 宏,具体取决于为请求指定的数据量。
对于 READ 请求, DFHZCNR 获取应答区域的 TIOA ,并使用 CICS提供的消息 DFH4200执行 WTOR 宏。 此消息请求操作员应答,事务等待此应答。
对于 CONVERSE 或 (WRITE , READ) 请求, DFHZCNR 获取应答区域的 TIOA ,并使用为 WRITE 指定的数据执行 WTOR 宏。 如果有任何剩余数据,那么 DFHZCNR 将根据数据量执行单个 WTO 宏或一个或多个多行 WTO 宏。 然后,事务将等待操作员应答此请求。