现在的位置: 首页 > 综合 > 正文

IBM大型主机(Mainframe)技术简介之七——应用开发摘要(三)

2013年12月11日 ⁄ 综合 ⁄ 共 2813字 ⁄ 字号 评论关闭

本文简要介绍Mainframe的CICS技术框架。

CICS基本概念

CICS是Mainframe事务(Transaction)处理的主要媒介,它位于操作系统z/OS之上,处在应用程序(例如Cobol程序)、用户和数据库等子系统之间,完成实现业务功能的映射。

从应用程序角度看,CICS提供了一个编程界面,提供应用程序大部分原来由OS提供的功能。

CICS在系统指派给它的唯一的Address Space中执行,在这个单一的Space中CICS支持Multitasking,这里的任务task指CICS能为用户同时分别服务,也就是说CICS支持多用户。

CICS两种编程模式Conversational和Pseudo Conversational。前者是始终处于等待用户输入的状态,不常使用;后者会保存事务状态信息,因此可以不必等待。通常实践的CICS程序是Pseudo
Conversational;


CICS装载和运行程序是Reentrant,即支持Multithreading,即同一段代码可执行同一段代码(指用COBOL实现的逻辑),代码位于CICS的Address
Space中,而每个执行者(User)可以有他们自己的Working-storage从而实现数据的分离和私有化。


CICS通过一系列服务(Services)和其他子系统交互,例如Program Control提供程序调用转移;File
Control访问VSAM数据等。


CICS的实现语言:BMS mapset(类汇编语言)。
物理(physical) mapset用于描述界面显示和布局
符号(symbolic) mapset是一个COBOL的COPY MEMBER即代码段,以允许相应COBOL程序操作在物理mapset中的显示数据。



MAPSET

mapset的基本语法:(注:MAPSET汇编和CICS都不用//作为注释,但是这里用于说明,且不会发生二义,后同)

         PRINT NOGEN            //起始
<名字>   DFHMSD                  // mapset起始
<名字>   DFHMDI                  // map起始(即一个80x24界面描述,一个mapset可以定义多个map),定义map界面大小等
[<名字>] DFHMDF                  // field(字段)起始,定义字段的位置长度属性等
          DFHMSD  TYPE=FINAL    // mapset末尾
          END                   //末尾

字段是一个map上的一段连续字符,如果mapset中给它命名,则可以在cobol程序中依照X(长度)引用,可以是protected(不可更改)或是unprotected(可更改,用户输入或/和显示输出),除了这个分类外字段还有一些其他的属性。每个字段均以一个属性字节标志起始(数据字段可再以另一个属性字节结尾,用以例如指示光标跳转),属性字节占据显示位置,但不显示任何内容。属性字节包含以下主要信息(相见参考资料[5])
IC 指定光标将在该attribute控制的字段,如果多个IC则出现在最后一个


Cobol程序

对应的Cobol程序的结构释义(仅仅列写关键区段):

IDENTIFICATION DIVISION.
PROGRAM-ID. <程序名>             // 这个在CICS配置时需要保持一致
…
DATA DIVISION.
WORKING-STORAGE SECTION.
…
01 <本地对应通信数据名称>          // 本地通信数据区,这是本程序使用的
…
COPY <mapset名称>.               // 将根据physical mapset手写或生成的symbolic mapset展开到程序中,得以引用mapset中字段

LINKAGE SECTION.
01 DFHCOMMAREA                  // 跨程序执行通信数据区

PROCEDURE DIVISION.
0000-主程序名.
  // 条件: WHEN EIBCALEN=ZERO   // 第一次执行(后续执行均为正)
  …
  // 某个退出逻辑条件
     PERFORM XXXX-发送结束消息   // 发送结束消息

EXEC CICS

  RETURN  // 退上一层

END-EXEC
  ...
  EXEC CICS
      RETURN TRANSID(<程序执行的事务的ID>)
                     COMMAREA(上述<本地对应通信数据名称>)
  END-EXEC.
 
XXXX-发送结束消息
  EXEC CICS
  SEND TEXT FROM(‘关闭消息’)
            ERASE
            FREEKB
  END-EXEC.

CICS程序模块调用和转移的原则:

RETURN总是返回上一逻辑层,可含或不含tran-id;
LINK总是开启一个新的下一个逻辑层,并让程序运行在这个逻辑层中;
XCTL总是进入同层的程序,于是相当于新的程序替换老程序;
最基础层是CICS。


DFHCOMMAREA是跨执行的公共区,位于COBOL程序的Linkage Section, 供接续程序复制到working-storage
section中使用;而在程序完成后必须将working-storage section中的内容交给return。


常用的CICS命令(作为事务出现),详见参考资料[4]
CESN 登录
CESF 注销
CECI 命令行解释。如可以测试一个Mapset,通过CECI SEN M(Mapset名)
CEDA 事务装载和维护:

        CEDA INS TRANS(指定事务id)
GROUP(group名)   将事务装载到group中
        CEDA INS PROG(程序id) GROUP(group名)   将程序装载到group中
        CEDA INS MA(mapset id) GROUP(group名)  将mapset装载到group中

CEDF 开启事务程序调试(之后运行的事务每个map交换步骤均会出现调试界面显示运行状态信息)

CEMT 加载Program: CEMT SET PROG(程序名) NEWCOPY


[未完待续]


参考文献:

[1]http://www.csc.ncsu.edu/faculty/mpsingh/local/SOC/s08/hw/p6.html

[2]http://sites.google.com/site/cobolmaterial/cics-tutorial

[3] (IBM)CICS内建事务:
http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=%2Fcom.ibm.cics.ts31.doc%2Fdfha7%2Fdfha726.htm

[4] Mainframe绝对wiki参考宝典:
http://www.wikimf.com/index.php?title=CICS_MAP_and_CICS_program

[5] IBM参考DFHMDF
http://publib.boulder.ibm.com/infocenter/txformp/v6r0m0/index.jsp?topic=%2Fcom.ibm.cics.te.doc%2Ferziai00160.htm



抱歉!评论已关闭.