Este artículo es el
primero de una serie dedicado a los Grupos de Activación.
El tema es algo
extenso cuando se explica en detalle y requiere tiempo para entender las
implicaciones que puede tener a nivel práctico usar o no usar Grupos de
activación.
Generalmente los
desarrolladores en RPG no tenemos ni idea del impacto que tiene nuestro código
en cuanto al nivel de performance: los tiempos de respuesta ni el consumo de
recursos, de nuestros programas. El estudio de los grupos de activación y su
funcionamiento nos ayuda a entender cómo podemos optimizar el uso de la memoria
y de los recursos del equipo, para que los procesos se ejecuten de manera óptima.
Empecemos…
Un grupo de activación
es un “contenedor de recursos” dentro de un trabajo. El
contenedor contiene un montón de activaciones, de ahí el término grupo de
"activación". Una activación es una referencia a la asignación de
almacenamiento y a las actividades de enlace de programas en tiempo de
ejecución que realizan los sistemas operativos cuando se ejecuta un programa.
Cuando compilamos un
programa RPGILE por la opción 14 del strpdm, vemos una serie de parámetros
entre los que se encuentra este:
Default activation group . . Dftactgrp *YES
Cuando este parámetro esta
activado con *Yes, el programa RPG que se está compilando no puede
utilizar procedures internos ni externos, programas de servicios
ni directorios de enlace. El sistema entiende que se trata de un
programa RPG tradicional. El Grupo de
activación por defecto es QILE.
Si queremos compilar un
programa que admita enlaces, módulos, Procedimientos (procedures) y lo
relacionado con ILE, entonces debemos colocar *NO. Lo más cómodo es colocar
esta especificación en la Hoja ‘H’ para evitarnos el tener que
acordarnos de colocarlo cada vez que debamos recompilar el programa.
En un RPG fon formato
sería: h DftActgrp(*no)
En un RPG Free format
sería: ctl-opt dftactgrp(*no);
Ambas declaraciones
permiten al programa funcionar como un programa ILE
Cuando creamos un
programa RPG que enlaza directorios y módulos con el comando CRTPGM
Podemos ver el
siguiente parámetro:
Activation group .
. . . . . . . ACTGRP *ENTMOD (módulo
de entrada)
Esto significa que el
grupo de activación que se tomará en cuenta para ejecutar el programa será el
que sea establecido por el modulo “padre” o el “Entry Point” que inicia la
ejecución de toda la serie de invocaciones a procedimientos (procedures) y
programas de servicios y módulos de los códigos entre sí.
Si definimos que NO
queremos un grupo de activación por defecto… ¿qué sucede?
Cuando colocamos *NO en
la compilación por via Strpdm opción 14, al presionar enter, el sistema nos
trae dos parametros por default
Default activation group . . . . DFTACTGRP > *NO
Activation group . . . . . . . . ….ACTGRP *STGMDL
Storage model
. . . . . . . . . ……STGMDL
*SNGLVL
Para el parámetro Activation
Group el valor *STGMDL indica que se va a seleccionar un modelo de
memoria pre-establecido por el sistema.
Hay tres tipos de
modelo de memoria. Estos tres tipos de modelos se especifican en el parámetro: Storage
model y tiene tres valores posibles: