4rrr 发表于 2015-10-4 13:36:52

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

本文简要介绍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(字段)起始,定义字段的位置长度属性等
DFHMSDTYPE=FINAL    // mapset末尾
END                   //末尾



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

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命令(作为事务出现),详见参考资料

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
  



[未完待续]





参考文献:



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



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



(IBM)CICS内建事务:

http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=%2Fcom.ibm.cics.ts31.doc%2Fdfha7%2Fdfha726.htm



Mainframe绝对wiki参考宝典:

http://www.wikimf.com/index.php?title=CICS_MAP_and_CICS_program



IBM参考DFHMDF

http://publib.boulder.ibm.com/infocenter/txformp/v6r0m0/index.jsp?topic=%2Fcom.ibm.cics.te.doc%2Ferziai00160.htm
页: [1]
查看完整版本: IBM大型主机(Mainframe)技术简介之七——应用开发摘要(三)