lunes, 11 de julio de 2016

Calcular pistas (TRK) y cilindros (CYL)

Este es un artículo enviado por la compañera SonAle Lg que habréis visto comentar en el blog alguna vez.
Esperamos verla publicando a menudo a partir de ahora :-)
 
Muchas veces nos preguntamos como coboleros, ¿Cómo especificar el tamaño que tendrá un archivo, dependiendo de la cantidad de datos a procesar?
Primero, nótese que ocupamos el concepto de "posiciones" lo cual para nosotros es un equivalente a "bytes".
Segunda, te mostraremos donde se especifica lo del tamaño que se va a calcular, dentro del JCL como se muestra a continuación en este ejemplo:

//******************************************************
//******************** BORRADO *************************
//BORRADO EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
  DEL FICHERO.DE.SALIDA
  SET MAXCC = 0
//******************************************************
//*********** EJECUCION DEL PROGRAMA PRUEBA3 ***********
//P001 EXEC PGM=PRUEBA7
//SYSOUT DD SYSOUT=*
//ENTRADA DD DSN=FICHERO.DE.ENTRADA,DISP=SHR
//SALIDA DD DSN=FICHERO.DE.SALIDA,
//      DISP=(NEW,CATLG,DELETE),SPACE=(TRK,(50,10)),
//      DCB=(RECFM=FB,LRECL=107,BLKSIZE=0)
/*

Sin más preámbulos, comencemos. Primeramente que nada tendremos que guiarnos por lo siguiente:
1 Track = 48 KB
1 Cylinder = 720 KB
1 Cylinder = 15 Tracks

Estableceremos el tamaño de los archivos o lo que estos ocupan de espacio determinando la cantidad de datos que se están generando. Sin embargo a veces es complicado saber el tamaño, por lo cual es preferible tener un cálculo al azar de la cantidad de datos que se generaran u ocuparan el archivo (con esto me refiero a que sepamos aproximadamente a cuantos KB, MB, GB, TB nos estamos refiriendo).

Haremos un paréntesis para decirte que si lo que quieres es crear un dataset, con espacio suficiente, pero cuando termine el job, y si no quieres tener espacio desperdiciado, puedes hacer algo como lo siguiente:
SPACE= (TRK (30,15), RLSE)

Así al final se le da un "free" al dataset.
El cálculo de espacio depende del tipo de discos que tenga la instalación. Se tomara como ejemplo los discos 3390. Aunque te diré que la mayoría de discos que nosotros ocupamos en el mainframe son de 3390, aunque hay algunas excepciones.

La longitud máxima que puede tener un bloque es de 27998 posiciones.
Para calcular el bloqueo óptimo hay que dividir

Longitud Máxima (que puede tener el bloque 27998 posiciones)
---------------------------------------------------------------------------------------------------
Longitud de Registro (que en este caso es de 310 posiciones)

El valor de la división es: 90,31 tomamos la parte entera (90) y la multiplicamos por la longitud del registro:
90 * 310 = 27900.           27900 es el bloqueo óptimo (BLKSIZE).

Ahora teniendo en cuenta que 27998 posiciones es el valor de medio track (sería equivalente a 27998 bytes) y teniendo en cuenta que el sistema siempre graba a medias pistas, el valor 90 de la cuenta anterior indica que en un bloque de media pista entraran 90 registros de 310 posiciones, es decir que en una pista completa entrarían 180 registros de 310 posiciones (90*2).

Conclusión: 180 es el valor del Factor de bloqueo para este caso.

Para validar el número de tracks, de acuerdo a los registros que se necesitan quedaría:

Cantidad de registros / Factor de bloqueo = Cantidad de Tracks

Si el resultado que es expresado en Tracks da un valor con decimales le sumamos 1 a la parte entera.
Para calcular la cantidad de cilindros que va a ocupar es:

Cantidad de Tracks / 15 = Cantidad de CYL

Y pasa lo mismo que con los tracks, si da con decimales le sumamos 1 a la parte entera.

Estos son los cálculos para 1000 registros de 310 posiciones en un disco 3390:

Calculo bloqueo óptimo:
27998 / 310 = 90,31
310 * 90 = 27900 (bloqueo óptimo)

Calculo Factor de bloqueo:
90 * 2 = 180 (factor de bloqueo)

Calculo Tracks:
1000 / 180 = 5,55
5 + 1 = 6 Tracks (le sumamos uno a la parte entera)

Calculo CYL:
6 / 15 = 0,4
0 + 1 = 1 CYL (le sumamos uno a la parte entera)

//******************************************************
//******************** BORRADO *************************
//BORRADO EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
  DEL FICHERO.DE.SALIDA
  SET MAXCC = 0
//******************************************************
//*********** EJECUCION DEL PROGRAMA PRUEBA3 ***********
//P001 EXEC PGM=PRUEBA7
//SYSOUT DD SYSOUT=*
//ENTRADA DD DSN=FICHERO.DE.ENTRADA,DISP=SHR
//SALIDA DD DSN=FICHERO.DE.SALIDA,
//       DISP=(NEW,CATLG,DELETE),SPACE=(CYL,(6,2)),
//       DCB=(RECFM=FB,LRECL=107,BLKSIZE=180)

¿Te ha gustado el tema?...

1 comentario:

Carlos "Gurko" Toloza dijo...

MUCHAS GRACIAS, NECESITABA ESTOS TIPS YA QUE AHORA ESTOY TRABAJANDO EN TESTING Y ES MUY DISTINTO AL AREA DE DESARROLLO.