Job Control Language ( JCL ) es un lenguaje de programación utilizado en los sistemas operativos de mainframe de IBM OS /360 , MVS , OS/390 , z/OS y sus clones, incluidos EU OS , TKS y BOS . La línea IBM DOS/360 , DOS/VS , VSE , z/VSE implementó una versión parcialmente compatible de JCL. IBM GCS Guest OS implementa un subconjunto de JCL.
Se utiliza para controlar el lanzamiento de trabajos por lotes . Debido a su propósito funcional, tiene propiedades expresivas mínimas como, de hecho, un lenguaje de programación.
La sintaxis del operador estaba originalmente atada rígidamente a ciertas posiciones (columnas) en una tarjeta perforada :
Esta sintaxis se ha mantenido desde el momento en que se ingresó la tarea desde tarjetas perforadas (80 columnas) y le permite protegerse contra el lanzamiento accidental de información desde tarjetas insertadas incorrectamente (invertidas).
Por motivos de compatibilidad, no ha cambiado desde la década de 1960 . y se sigue utilizando en las versiones modernas de los sistemas operativos z/OS y z/VSE .
Esta secuencia de comandos (un "trabajo" en términos de EU OS) copia el contenido de un conjunto de datos IS198.TEST.INPUTen un conjunto de datos IS198.TEST.OUTPUT.
//IS198CPY JOB (IS198T3*0500),'COPY JOB',CLASS=L,MSGCLASS=X //COPY01 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=A //SYSUT1 DD DSN=IS198.TEST.INPUT,DISP=SHR //SYSUT2 DD DSN=IS198.TEST.OUTPUT, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(40,5),RLSE), // DCB=(LRECL=115,BLKSIZE=0), // DATACLAS=SEQFB //SYSIN DD DUMMY //
La copia la realiza una utilidad IEBGENERque copia el conjunto de datos de entrada ( SYSUT1) al conjunto de datos de salida ( SYSUT2). Al nuevo conjunto de datos de salida ( ) se le asignará espacio (parámetro ) en el dispositivo de acceso directo: 40 cilindros inicialmente y 15 veces 5 cilindros cuando se agote el espacio asignado inicialmente. Si el trabajo se completa con éxito, el nuevo conjunto de datos se catalogará ( ), y si falla, se eliminará ( ) DISP=(NEW,CATLG,DELETE)SPACEDISP=(NEW,CATLG,DELETEDISP=(NEW,CATLG,DELETE)
Además, el programa tiene un flujo de entrada ( SYSIN- not used (DUMMY)) y un flujo de salida ( SYSPRINT). El operador JOBdescribe la información de la cuenta del usuario (el formato depende de la configuración del sistema) y los parámetros de ejecución del trabajo. En este ejemplo, la tarea se ejecuta con una clase L(los parámetros de la clase los determina el administrador del sistema al configurar el sistema operativo), los mensajes de servicio se enviarán a la cola de salida de la clase A. El nombre proporcionado como etiqueta de la sentencia JOB (IS198CPY) se utilizará como ID de trabajo cuando se ejecute el trabajo.
En un sistema similar a Unix , una acción similar se vería como
cp IS198.TEST.INPUT IS198.TEST.OUTPUT
Sin embargo, debe tenerse en cuenta que la "tarea" en términos de sistema operativo "tradicional" para el mainframe todavía no es un análogo directo de un archivo por lotes en un sistema similar a Unix. Las tareas son procesadas por un programa de sistema especial: el Programador de tareas. Dado que el lenguaje de control de trabajos describe no solo el orden de ejecución de ciertos programas, sino también todos los recursos necesarios para esto (nombres de conjuntos de datos y un lugar para ellos, dispositivos de E / S, requisitos de RAM y tiempo de CPU, etc.) . El programador organiza el orden de ejecución de las tareas de tal manera que haga el uso más eficiente de los recursos informáticos disponibles con una mínima intervención del operador humano.