Está en la página 1de 22

Capítulo 10

Compilando y link-editando un
programa en z/OS

Introducción al Sistema Operativo z/OS CP3000 1


Objetivos
Después de completar este capítulo usted será capaz
de:
• Explicar el propósito de un compilador.
• Compilar un programa fuente.
• Explicar la diferencia entre el linkeditor y el binder.
• Crear un código ejecutable a partir de un programa
compilado.
• Explicar la diferencia entre un “conjunto objeto”
(object deck) y un “módulo de carga” (load module).
• Ejecutar un programa en z/OS.

Introducción al Sistema Operativo z/OS CP3000 2


Módulo fuente, objeto y de carga
• Un programa fuente puede dividirse en unidades
lógicas – ó módulos – que pueden realizar funciones
específicas.
• Cada módulo es compilado por uno de los
compiladores de lenguaje.
• La entrada para un compilador es un módulo fuente.
• La salida del compilador es un módulo objeto.
• Los módulos objetos deben ser procesados por el
binder antes de poder ser ejecutados.
• La salida del binder es un módulo de carga.

Módulo Módulo Módulo de


Compilador Binder
fuente objeto carga

Introducción al Sistema Operativo z/OS CP3000 3


Librerías fuente
• Dependiendo del estado del módulo (fuento, objeto ó de carga)
puede ser almacenado en una librería (PDS ó PDSE)
• Los programas fuente (código fuente) son un conjunto de
enunciados escritos en algún lenguaje de programación. Cuando
están libres de errores son almacenados en una librería fuente
(source library)
• Un copybook es una librería fuente con texto, es usada para copiar
texto en un programa fuente, al momento de compilación, como un
atajo para evitar escribir el mismo código una y otra vez.
• Una subrutina ejecuta una función predefinida, sin embargo a
diferencia del copybook la subrutina es un pequeño programa
(compilado, linkeditado, y ejecutable).
//COBOL.SYSLIB DD DISP=SHR,DSN=DEPT88.BOBS.COBLIB
//SYSIN DD *
IDENTIFICATION DIVISION.
. . .
COPY INPUTRCD
. . .
Introducción al Sistema Operativo z/OS CP3000 4
Modulo Objeto y Módulo de Carga
• Módulo Objeto
– Es una colección de una ó más unidades de compilación
producidas por un ensamblador, compilador ú otro traductor
de lenguajes y usada como entrada para el binder (ó
linkeditor).
– Está en un formato reubicable con código máquina que no es
ejecutable.
– Es almacenado en una librería objeto.
• Módulo de Carga
– También es reubicable, pero con código ejecutable.
– Está en un formato que puede ser cargado en memoria
virtual y reubicado por el program manager, que es un
programa que prepara los módulos de carga para ser
ejecutados, cargándolos en ubicaciones de memoria
específicas.

Introducción al Sistema Operativo z/OS CP3000 5


Compilando Programas en z/OS
• Compiladores:
– Traducen el código fuente en código objeto.
– Asignan direcciones relativas a todas las
instrucciones, datos, y etiquetas.
• Las direcciones están en la forma de una
dirección base más un desplazamiento (para
permitir a los programas ser reubicados)
• Las referencias a los programas externos, ó
subrutinas se dejan sin resolver.

Introducción al Sistema Operativo z/OS CP3000 6


Compilando Programas en z/OS

• Hay varias maneras de compilar


programas en z/OS:
– A través de un trabajo batch
– En TSO/E a través de comandos, CLISTs, ó
paneles de ISPF
– Para programas COBOL, se pueden
compilar en el shell de UNIX de z/OS
usando el comando cob2.

Introducción al Sistema Operativo z/OS CP3000 7


Compilando con Procedimientos
Catalogados (PROCs)
• Una forma común de compilar un programa bajo
z/OS es usando un trabajo batch con un
procedimiento catalogado ó PROC
• Un PROC contiene un conjunto de enunciados
de JCL guardados en un data set llamado
procedure library (PROCLIB)
• El PROC debe incluir la siguiente información:
– Descripción del Job
– Enunciado de ejecución para invocar al compilador
– Definiciones para los data sets necesarios para la
compilación (el programa a ser compilado)

Introducción al Sistema Operativo z/OS CP3000 8


Ejemplo de un JCL para compilar un
programa COBOL
//COMP JOB
//COMPILE EXEC IGYWC
//SYSIN DD *
IDENTIFICATION DIVISION (source
program)
...
/*
//

Introducción al Sistema Operativo z/OS CP3000 9


¿Cómo Trabaja la Administración de
Programas?
Módulos
Fuente

Ensamblador
ó Compilador

Módulos
Objeto

Program AA
management
binder

Linkeditor Batch loader


Program object
PDSE program
library

Módulos de Carga
en PDS

A
A
Program Módulos de carga
Management en memoria virtual
loader para ejecución

Introducción al Sistema Operativo z/OS CP3000 10


¿Cómo se usa el linkeditor?
• El linkeditor prepara el módulo de carga para
ser guardado en memoria real para ejecución.
• Como entrada, el linkeditor acepta módulos
objeto, enunciados de control, y entradas
especificadas por el usuario.
• La salida del linkeditor es:
– Un módulo de carga, el cual almacena como
miembro de una librería.
– Salida de diagnóstico producida como un data set
secuencial.

Introducción al Sistema Operativo z/OS CP3000 11


¿Cómo es creado un módulo de carga?

• El linkeditor asigna direcciones de memoria


virtual a las secciones de control del módulo y
resuelve las referencias entre ellas.

• El modulo de carga que sale está compuesto


de todos los módulos objetos de entrada
procesados por el linkeditor.

• El módulo de carga también contiene un


indicador de fin-de-módulo.

Introducción al Sistema Operativo z/OS CP3000 12


¿Cómo es creado un módulo de carga?

Código Fuente Módulo Objeto Módulo de Carga

Introducción al Sistema Operativo z/OS CP3000 13


Utilizando el binder
• Realiza todas las funciones del linkeditor.
• También puede procesar modulos objeto
almacenados en PDSEs.
• El binder elimina las restricciones del linkeditor:
– Permite a un módulo de carga tener cuantos alias se
deseen, el linkeditor sólo permite 64.
– Acepta cualquier tamaño de bloque soportado por el
sistema para el data set de entrada, eliminando el
máximo tamaño de bloque de 3200 bytes del
linkeditor.
• La entrada puede incluir data sets tradicionales
y archivos de z/OS UNIX.

Introducción al Sistema Operativo z/OS CP3000 14


Creando módulos de carga para
programas ejecutables
• Un módulo de carga es un programa ejecutable
almacenado en una librería de programas (PDS ó
PDSE)
• Al crear un módulo de carga para ejecutarse sólo se
requerirá que se utilice un batch loader ó program
management loader
• Para crear un módulo de carga que pueda ser
almacenado en una librería de programas se requiere
usar el binder ó linkeditor.
• En todos los casos, el módulo de carga es reubicable
– Puede ser ubicado en cualquier dirección de memoria virtual
• Los programas reubicables permiten que una copia
idéntica del programa sea cargada en diferentes
address spaces, cada una cargada en una diferente
dirección inicial.
Introducción al Sistema Operativo z/OS CP3000 15
El Batch Loader
• Realiza la linkedición y la carga en un job step.
• Acepta módulos objeto y módulos de carga, y
los carga en memoria virtual para ejecución.
• Prepara el programa ejecutable en memoria y le
pasa el control directamente.
• En algunos releases de z/OS más recientes el
batch loader es reemplazado por el binder.

Introducción al Sistema Operativo z/OS CP3000 16


Program Management Loader
• Puede cargar programas objeto.
• Lee ambos, programas objeto y módulos
de carga en memoria virtual y los prepara
para ejecución.
• Resuelve cualquier dirección constante en
el programa para apuntar a las áreas
apropiadas en memoria virtual.

Introducción al Sistema Operativo z/OS CP3000 17


Librería de carga
• Contiene programas listos para ser
ejecutados.
• Una librería de carga puede ser:
– Librería de sistema
– Librería privada
– Librería temporal

Introducción al Sistema Operativo z/OS CP3000 18


Librería de Sistema
• A menos que un job especifique una librería
privada, el sistema busca los programas en las
librerías de sistema con el siguiente enunciado:
//stepname EXEC PGM=program-name
• El sistema busca en las librerías por un miembro
con el nombre ó alias especificado en program-
name.
• La librería de sistema más utilizada es la
SYS1.LINKLIB, que contiene programas
ejecutables que han sido procesados por el
linkeditor.

Introducción al Sistema Operativo z/OS CP3000 19


Librería Privada
• Cada programa ejecutable escrito por un usuario es miembro de
una librería privada.
• Para decirle al sistema que un programa está en una librería
privada, el enunciado DD se debe codificar así:
– Usando un enunciado DD con el nombre JOBLIB después del
enunciado JOB, y antes del primer enunciado EXEC en el job.
– Si la librería sólo será usada en un step, se utiliza el enunciado DD con
el ddname STEPLIB en el step.
• Para ejecutar un programa desde una librería privada:
//stepname EXEC PGM=program-name
• Al usar JOBLIB ó STEPLIB, el sistema busca el programa a ser
ejecutado en la librería definida por el enunciado JOBLIB ó
STEPLIB DD antes de buscar en las librerías de sistema.
• Si un enunciado DD previo en el job define el programa como
miembro de una librería privada se hace referencia al enunciado DD
para ejecutar el programa:
//stepname EXEC PGM=*.stepname.ddname

Introducción al Sistema Operativo z/OS CP3000 20


Librería Temporal
• Son PDSs creados para almacenar un
programa hasta que sea utilizado en un
step posterior del mismo job.
• Una librería temporal es creada y
eliminada dentro del mismo job.
• Son útiles cuando se prueba un programa
nuevo para almacenar el módulo de carga
generado por el linkeditor hasta que es
ejecutado por un step posterior.

Introducción al Sistema Operativo z/OS CP3000 21


De Compilación a Ejecución
Después de linkeditar 2 GB
Después de compilar Address Space

PROGRAM B
PROGRAMA A
140 KB
0 80 KB

PROGRAM A

0 80 KB

PROGRAMA B Módulo de Carga


MIPROG
60 KB
0

LIBRERÍA DE
PROGAMAS
Módulos Objeto

MIPROG

Introducción al Sistema Operativo z/OS CP3000 22

También podría gustarte