设置存储器保护
CICS® 提供用于保护存储器的工具: 存储器保护,事务隔离,命令存储器保护和重入程序存储器保护。
有关这些设施的信息,请参阅 如何保护 CICS 存储器。
开启存储器保护
- 将 STGPROT 系统初始化参数设置为 YES。
您可以使用 CEMT INQ SYSTEM 来查看区域中存储器保护的状态。 如果开启了存储器保护,那么 Storeprotect 的值为 "活动"。
- 确保大多数应用程序定义为 用户密钥应用程序; 即,在程序定义上使用 EXECKEY(USER) ,在关联的事务定义上使用 TASKDATAKEY(USER) 。 USER 是 EXECKEY 和 TASKDATAKEY 选项的缺省值。 因此,在大多数情况下,您不必更改资源定义。
- 请参阅 CICS-key 应用程序 ,以确定是否有任何应用程序正在使用必须使用 EXECKEY(CICS) 和 TASKDATAKEY(CICS)定义的工具。 相应地更改资源定义。
开启事务隔离
- 确保在 CICS 区域中启用了存储器保护。
- 要全局开启事务隔离 (即,对于整个 CICS 区域) ,请将 TRANISO 系统初始化参数设置为 YES。
您可以使用 CEMT INQ SYSTEM 来显示区域中事务隔离的状态。 如果事务隔离处于打开状态,那么 Tranisolate 的值为 "活动"。
- 如果需要,请在事务资源定义上指定 ISOLATE(NO) ,以允许事务在无法满足缺省值隔离 (YES) 的条件时继续运行。 请参阅 z/OS 子空间 ,以更好地了解缺省值,并确定是否有任何程序需要共享公共存储器。
ISOLATE(NO) 为迁移提供支持,允许将事务分隔到它们自己的唯一子空间中以逐步登台。 最佳方法是除去事务相互依赖关系。 但是,某些程序合理需要一个任务来访问或共享另一个任务的存储。 在这种情况下,请考虑更改程序以使用共享存储器; 即,使用 SHARED 选项通过 GETMAIN 命令获取的存储器。
打开命令存储器保护
- 将 CMDPROT 系统初始化参数设置为 YES。 这将导致 CICS 验证存储器的开始地址,并在 CICS 执行命令之前确定应用程序对以该地址开头的存储器具有写访问权。
- 您可以使用 CEMT INQ SYSTEM 在区域中显示 CMDPROT 的值。 如果命令存储器保护处于活动状态,那么 Cmdprotect 的值为
Cmdprot。
开启重入程序存储保护
- 将 RENTPGM 系统初始化参数设置为 PROTECT。 这将导致 CICS 从键 0 只读存储器获取合格程序的存储器。 如果使用 RENT 属性将程序作为重入程序进行链接编辑,那么 CICS 装入程序会自动将程序装入只读 DSA (RDSA 和 ERDSA)。 使用 RENT 和 RMODE(ANY) 进行链接编辑的程序将装入到 ERDSA 中。 如果您具有在应用程序中设置断点的开发辅助包,请为开发区域指定 RENTPGM=NOPROTECT 。 有关程序资格的更多详细信息,请参阅 在只读 DSA 中运行应用程序。
- 您可以使用 CEMT INQ SYSTEM 在区域中显示 RENTPGM 的值。 如果从密钥 0 存储器分配只读存储器,那么 Reentprotect 的值为
Reentprot。
结果
激活这些工具后,当 CICS 检测到并阻止尝试的存储器违例时,您会收到消息 DFHSR0001 报告保护异常 (0C4)。 在消息中包含程序中的 X'offset ' 和程序名。 检查程序以确定它尝试修改不允许其修改的存储器的原因。 此外,请确保在事务或程序定义中没有任何错误。