Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1270471
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

2009-04-12 14:57:59

RPGIV编程问题百解(9)Activation group概念(一)
 
一、Activation group的几种类型:
  1)OPM *DFTACTGRP activation group;
  2)命名的activation group;
  3)系统命名的activation group;
 
二、Activation group创建形式:
  1)OPM activation group创建形式。在OPM程序创建的时候,就采用系统提供的OPM *DFTACTGRP activation group。
   当一个作业被启动,就创建一个默认的Activation group。直到这个作业结束,这个默认的 Activation group才随之结束。
  2)ILE activation group创建形式。ILE程序创建的时候,能够根据a)程序H表中设置的键值DFTACTGRP;b)编译参数ACTGRP,这两者设置的不同组合,而产生程序使用上述多种形式之一的activation group。
三、ILE activation group的变化:
    当用CRTPGM 或CRTBNDRPG创建程序,或用CRTSRVPGM创建服务应用程序时,可以指定某值给activation group。当用CRTBNDRPG程序时,只能指定DFTACTGRP(*NO)设置activation group 值。
这个值可以是:
  1)命名的activation group。人为命名的activation group。
    当一个作业首次需要一个人为命名的Activation group时,系统才创建这个认为命名的Activation group。一个正常return的Activation group保持这个Activation group的最后使用状态。系统不会删除这个Activation group。因此,在一个有配置多进程操作的作业中,默认的和系统命名的Activation group的一个正常的return动作不会造成结束这个作业。
   一个人为命名的Activation group可以让你管理一个包含所有程序和服务应用程序集合的应用模块。
   QILE是CRTBNDRPG命令的命名的Activation group的默认值。如果,要把程序归集一个应用模块,需把这个参数人为的命名为其它的名字,如,包含这个应用名的名字。

  2)编译参数ACTGRP(*NEW)。系统命名activation group。
    如果一个程序是用编译参数ACTGRP(*NEW)创建的,当这个程序每次被调用,系统就分配一个系统命名新的的Activation group,这个系统命名唯一存在作业中。当这个程序return后,这个新的Activation group就结束了。如果,计划程序在return,且*inLR 为*off之后,程序可重如Activation group,就不能设置这个程序的Activation group为ACTGRP(*NEW)。
    服务应用程序不能使用ACTGRP(*NEW)的Activation group,只能使用一个命名的Activation group,或者调用程序的Activation grup。
注意:ACTGRP(*NEW)是命令CRTPGM的编译参数的默认值。
    用ACTGRP(*NEW)编译参数创建的程序,每次被调用时,都会创建一个程序的拷贝,每个程序拷贝都会有系统命名的Activation group。就是说,每个程序只能通过系统命名的Activation group,唯一的使用本身的系统资源,如,文件、事务控制、存储空间等。
  3) 编译参数ACTGRP(*CALLER)。程序采用调用程序的activation group。设置这个参数,程序或服务应用程序被调用程序激活进入调用程序的activation group。如果一个ILE程序用ACTGRP(*CALLER)参数创建,在它被一个OPM程序调用后,这个程序被激活,进入这个OPM默认的activation group(*DFTACTGRP)。
 
四、Activation group占用系统资源与回收
    当一个程序被激活,它的activation group占用使用存储空间、事物控制和打开文件等系统资源。
    如果很多ILE RPG程序被激活(至少一次被调用),系统存储空间可能会被耗尽。因此,你应该避免用ILE程序使用大量的静态存储空间,在OPM默认的activation group中运行,因为这些存储空间在作业未结束之前不能被重新回收。
    与服务应用程序的关联的存储空间只有在它关联的activation group的作业被结束时才可以被回收。如果这个服务应用程序被调用进入到默认的activation group,当作业结束时,它的资源被回收。
 
五、Activation group的存在、使用系统内存状态、结束(删除)
  用RCLACTGRP命令删除命名的activation group。
 
  1.OPM *DFTACTGRP activation group:
  当系统的一个作业开始运行,系统会创建一个用于OPM的activation group。这个activation group 标识为*DFTACTGRP。不能删除OPM默认的activation group,只有作业结束,系统才会删除用于这个作用的OPM activation group。
 
  2. ILE 模式的activation group:
一个ILE程序在在下列两种情况下,运行进入OPM activation group:
  1)程序用设置DFTACTGRP(*YES)参数的CRTBNDRPG命令创建的。
  2)程序用ACTGRP(*CALLER)创建,且被OPM程序调用。注意:一个被指定DFTACTGRP(*NO)的程序,用CRTBNDRPG创建,只能指定ACTGRP(*CALLER)编译参数。
    直到作业结束,一个被编译参数为ACTGRP(*CALLER),且运行在OPM activation group中程序的资源才会被释放。
   
    用RCLRSC命令释放不再处于激活状态下的程序的资源。
    如果程序是OPM程序,或创建程序时使用参数DFTACTGRP(*YES),RCLRSC命令将关闭打开的文件,并且释放存储空间。
    对那些采用编程参数ACTGRP(*CALLER),被激活后,进入到OPM默认的activation group的ILE程序,或服务应用程序,在发出RCLRSC命令之后,被打开的文件将被关闭。然而,对程序而言,存储空间将会被重新初始化,但是存储空间不被释放。对服务应用程序来说,存储空间不被重新初始化、不被释放。
    注意:这就意味着,当一个服务应用程序运行在默认activation group方式中,并且保持文件处于打开状态下,在发出RCLRSC命令后,这个服务应用程序被再一次调用,这些被打开的文件还要被打开,任何I/O操作的结果将会表示在一个错误中。
    对使用命名activation group的ILE程序来说,当job第一次需要使用这个Activation Group时,系统才创建它;对这类Activation group,用RCLRSC不会发生作用。必须用RLCACTGRP命令去释放这个命名的activation group。
 
    如果一个程序是用编译参数ACTGRP(*NEW)创建的,当这个程序每次被调用,系统就分配一个系统命名新的的Activation group。当这个程序return后,随着这个程序的结束,这个Activation group就结束了。
   
    采用默认值,或人为命名的Activation group都是常驻内存的。
   
    不可处理的一个例外情况:当一个程序进入过程(PEP)超出了它的控制区域,就会造成这个有能力处理多进程的作业结束。
   
    有多进程处理能力的作业,只有在这个作业的初始化进程中,才能用RCLACTGRP命令。如果在次级的进程中用到RCLACTGRP命名,将会出现CPF180B的错误信息。
 
 
阅读(1441) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~