【问题标题】:How CICS shared memory works?CICS 共享内存如何工作?
【发布时间】:2012-02-18 22:23:56
【问题描述】:

我使用 EXEC CICS 程序控制命令、LINK、XCTL 和 RETURN 来在 Cobol 程序之间传递数据。在我的一次治疗中,CICS 共享内存损坏了。似乎通过 COMMAREA 覆盖了不属于 CICS 的内存。 为了找出这个问题发生的原因,我需要更好地了解当我使用 EXEC CICS 程序控制命令时 CICS 如何管理共享内存。它是复制 COMMAREA 还是使用指针?使用嵌套的 EXEC CICS,共享内存中存储了多少 COMMAREA?

配置:我使用Microfocus Net Express编译器,环境是UniKix。

PS:如果您了解有关使用 EXEC CICS 覆盖的更多信息,请查看此问题 What can cause CICS transaction to write out of CICS allocated memory?

【问题讨论】:

    标签: cobol cics commarea


    【解决方案1】:

    不确定 Net Express,但在 CICS 中,逗号区域是使用指针访问的。

    因此,如果将 x 链接到编程 y,则对 y 中的 commarea 所做的任何更新都将在 x 中可见。

    如果 y 中的 Commarea 定义大于 x 中的定义,我会变得更糟 - 您可以在 commarea 之后更新变量。

    对于 XCTL,commarea 将被复制到 CICS 控制区域,并将指针传递给程序

    【讨论】:

    • 这实际上只在非常有限的情况下有效。从历史上看,是的,这很好。但几十年来,IBM 一直致力于将其区域划分为特定功能。因此,只要链接/返回/XCTLed 程序在同一个 AOR 中,指向共享内存的指针就可以很好地工作,但是如果正在进行任何类型的动态事务路由,它就会严重失败。
    • 一个几乎绝对的规则是永远不要假设共享内存并且永远不要将指针放在逗号中。它可能在 Microfocus 测试平台上工作,但在生产时会惨遭失败。
    猜你喜欢
    • 2014-03-22
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 2022-01-02
    • 2014-10-08
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多