1. CARGADORES Y EDITORES DE ENLACE
La mayor parte de los programas se componen de más de un
procedimiento.
Los compiladores y ensambladores suelen traducir un
procedimiento a la vez y guardan en memoria secundaria el
resultado de esta traducción. Antes de que pueda ejecutarse
el programa, todos los procedimientos traducidos deben
recuperarse y ligarse correctamente. Si no se dispone de
memoria virtual, el programa enlazado debe cargarse
explícitamente en memoria.
Los programas que realizan estas funciones reciben varios
nombres, como cargador (loader), cargador montado (linking
loader) y editor de enlaces (linkage editor).
La traducción completa de un programa fuente se efectúa en
dos pasos:
Compilación o ensamblaje de los procedimientos fuente
Encadenamiento (linking) o montaje de los módulos objeto.
Cargador:
Es un programa especial, parte del sistema operativo que
tiene como propósito colocar en la memoria las instrucciones
y datos de un programa o información codificada en lenguaje
máquina, para que entonces la computadora pueda procesarla.
Un cargador es un programa que realiza la función de carga,
pero muchos cargadores también incluyen relocalización y
ligado.
Algunos sistemas tienen un ligador para realizar las
operaciones de enlace, y un cargador separado para manejar la
relocalización y la carga. Los procesos de ensamblado y carga
están íntimamente relacionados.
Ligador:
Es un programa que enlaza todos los programas o módulos
obteniendo lo que denominamos programa ejecutable.
Es un programa que enlaza distintos módulos o programas que
poseen subprogramas. Además incorporan las denominadas
rutinas de librerías en caso de solicitarlas el propio
programa.
2. La generación de un módulo ejecutable a partir de una
colección de procedimientos traducidos independientemente
requiere un ligador.
FUNCION DE UN CARGADOR Y UN LIGADOR
Las funciones de un cargador son:
Colocar un programa objeto en la memoria e iniciar su
ejecución.
Si tenemos un cargador que no necesita realizar las funciones
de ligado y relocalización de programas, su operación es muy
simple, pues todas las funciones se realizan en un solo paso.
Se revisa el registro de encabezamiento para comprobar se ha
presentado el programa correcto para la carga (entrando en la
memoria disponible). A medida que se lee cada registro de
texto, el código objeto que contiene pasa a la dirección de
memoria indicada. Cuando se encuentra el registro de fin, el
cargador salta a al dirección especificada para iniciar la
ejecución del programa cargado. Un programa objeto contiene
instrucciones traducidas y valores de datos del programa
fuente, y específica direcciones en memoria donde se cargarán
estos elementos.
Las funciones de un cargador son relativamente sencillas y
consisten en extraer información de algún medio exterior de
la memoria (por ejemplo: CD Discos) y chocarlo en celdas
sucesivas de la memoria a partir de una celda pre
especificada. El cargador realiza la última etapa del proceso
de traducción: cargar el programa en memoria donde puede ser
ejecutado.
Una opción típica del cargador permite la selección de
fuentes alternativas de entrada. Otros mandatos permiten al
usuario eliminar símbolos externos o secciones de control
completas.
3. También es posible cambiar referencias externas dentro del
programa que se está cargando, La mayoría de los cargadores
permiten al usuario especificar alternativas para búsqueda
por medio de una proposición de tipo LIBRARY.
Las funciones de un ligador:
Los editores de ligado pueden efectuar varias funciones
últimas a demás de la simple preparación de un programa
objeto para su ejecución estos también se pueden utilizar
para construir paquetes de subrutinas u otras secciones que
suelen utilizar juntas. Esto puede ser útil al tratar con
bibliotecas de subrutinas que manejan lenguajes de
programación de alto nivel. Comparados con los cargadores de
ligadores los editores de ligado en general tienden a ofrecer
mayor flexibilidad y control con el correspondiente
incremento e complejidad y sobrecarga.
La tarea principal del enlazador es resolver referencias
externas lleva a cabo la siguiente etapa del proceso de
traducción enlazando los módulos ensambladores y los acervos
para formar un programa completo. En algunos sistemas el
cargador simplemente copia el programa ejecutable a las
posiciones de memorias apropiadas.
Sus principales funciones son:
Enlazar código intermedio compilado independientemente en
un solo módulo de carga resolviendo las diferencias entre
Tokens.
Incorpora las denominadas rutinas de librerías en caso de
solicitarlas el propio programa.
Su función es reducir procedimientos traducidos por
separado y enlazarlos para que se ejecuten como una
unidad llamada programa binario ejecutable.
TIPOS DE CARGADORES Y LIGADORES
TIPOS DE CARGADORES:
o Cargadores iniciales.- Indican a la computadora la forma de
poner, dentro de la memoria principal, unos datos que están
guardados en un periférico de memoria externa (cinta, disco,
etc.). Sirven para cargar en la memoria pequeños programas
que inician el funcionamiento de una computadora.
Algunas computadoras de carácter general no tienen en memoria
ningún programa de forma permanente y cuando se desconectan
pierden toda la información de su memoria interna. Al
volverlos a conectar no son capaces de controlar ningún
4. periférico (teclado, discos, etc.). Esto se hace así para que
sea el usuario el que ponga los programas que le interese
ejecutar.
o Cargadores absolutos.- Como ya se menciono el programa
cargador pone en memoria las instrucciones guardadas en
sistemas externos. Independientemente de que sea un cargador
inicial o no, si dichas instrucciones se almacenan siempre en
el mismo espacio de memoria (cada vez que se ejecuta el
programa cargador), se dice que es un cargador absoluto.
o Cargadores con reubicación.- En ocasiones, un mismo
programa necesita ejecutarse en diferentes posiciones de
memoria. Para esto la traducción debe estar realizada en
forma adecuada, es decir, no utilizando referencias absolutas
a direcciones de memoria, sino referencias relativas a una
dirección especial llamada dirección de reubicación.
El cálculo de las direcciones reubicables lo realiza el
propio cargador a medida que va guardando las instrucciones
en el espacio de memoria que le indique el usuario o el
propio sistema operativo de la máquina.
A los cargadores que permiten estas operaciones se les
denominan cargadores con reubicación.
o Cargadores ligadores.- Conocidos también por su término
inglés Link editor o simplemente Linker, es muy común también
referirse a él por la castellanización del nombre inglés,
<<lincador>>. A la acción de montar se le llama asimismo
vulgarmente <<lincar>>.
Montar un programa consiste en añadir al programa objeto
obtenido en la traducción las rutinas externas a las que hace
referencia dicho programa. El ensamblador debe permitir
dichas referencias y las rutinas deben estar a su vez en
lenguaje máquina guardadas en algún elemento accesible por el
montador. Generalmente, dichas rutinas se encuentran
guardadas en un fichero especial al que suele denominarse
librería, porque están almacenadas todas las rutinas externas
susceptibles de ser utilizadas por los diferentes programas
del usuario. Allí va el programa ligador cuando esta
realizando el montaje de un programa a buscarlas y las
adjunta al programa objeto.
CARGADORES BOOTSTRAP. El programa cargador, una vez situado
en la memoria del computador, cargará el programa de
aplicación y los datos. Pero, previamente, se ha debido
cargar el cargador en la memoria y esto se puede realizar por
uno de los métodos siguientes:
5. Entrada Manual: Mediante el teclado, el usuario teclea en la
máquina el cargador bootstrap. Después de esto, el cargador
se carga a sí mismo en la memoria del computador. A partir de
este momento, es el cargador el encargado de cargar el
programa de aplicación en la memoria.
Entrada por ROM: Es posible tener las instrucciones de
inicialización almacenadas permanentemente en alguna porción
de la ROM, en lugar de introducirlas manualmente por teclado
o por el panel frontal. Cuando se requiere el programa de
bootstrap, el operador simplemente dirige al computador,
mediante los conmutadores del panel, a ejecutar las
instrucciones memorizadas en ROM: Al estar el programa
almacenado en ROM se elimina también la posibilidad de
borrados accidentales.
CARGADORES ABSOLUTOS. Este es un programa que carga cada
instrucción del programa objeto en una posición fija y
preestablecida. Por tanto, cada instrucción tiene una
dirección absoluta. El cargador absoluto lee simplemente la
línea de código objeto que contiene la dirección de inicio de
las instrucciones y datos, y carga las palabras (o bytes)
sucesivas en posiciones de memoria sucesivas.
El cargador absoluto tiene un serio inconveniente cuando se
utiliza en sistemas computadores grandes.
Esto significa que los programas y datos se deben almacenar
cada vez en posiciones de memoria distintas. Si se utilizan
cargadores absolutos, el programa objeto se tendrá que
modificar para que refleje la nueva posición de inicio de
memoria. Esta es una actividad larga y sujeta a errores. En
tales situaciones, se utilizan cargadores relocatables.
Los cargadores absolutos están diseñados generalmente para
verificar cada instrucción que leen. Si se detecta una
instrucción ilegal, se interrumpe el proceso de carga.
CARGADORES RELOCATABLES. Este cargador evita el principal
inconveniente del cargador absoluto. El cargador relocatable
es un programa más sofisticado, tiene las características del
cargador absoluto, y además permite al usuario seleccionar y
especificar las posiciones de memoria en las que se debe
almacenar las palabras de instrucciones y datos.
De esta forma, el mismo programa se puede cargar en distintas
zonas de la memoria sin necesidad de reensamblarlo o
recompilarlo. Durante el ensamblado o compilación del
programa objeto, éste empieza con la dirección. Las sucesivas
instrucciones quedan asignadas a posiciones de memoria
consecutivas. No obstante, las direcciones no son absolutas,
es decir, no representan las verdaderas posiciones de memoria
en las que se está almacenando el programa.
6. Se trata de direcciones relativas. El programador inserta la
dirección se añade a cada una de las posiciones de memoria
asignadas en el programa, obteniéndose
Las direcciones reales de las instrucciones y datos del
programa. El cargador relocatable ofrece algunas ventajas.
TIPOS DE LIGADORES:
EDITORES DE LIGADO. La diferencia fundamental entre un editor
de ligado y un cargador ligador es: Primero se ensambla o
compila el programa fuente, produciendo un programa objeto
(que puede contener varias secciones de control diferentes).
Un cargador ligador realiza todas las operaciones de ligado y
relocalización, incluyendo búsqueda automática en
bibliotecas, si se especifica, y carga el programa ligado
directamente en la memoria para su ejecución. Por otro lado,
un editor de ligado produce una versión ligada del programa
(llamada a menudo módulo de carga o imagen ejecutable), que
se escribe un archivo o biblioteca para su ejecución
posterior. Cuando el usuario esta listo para ejecutar el
programa ligado, se puede utilizar un cargador relocalizador
simple para cargar el programa en la memoria.
El editor de ligado realiza relocalización de todas las
secciones de control relativas al inicio del programa ligado.
LIGADOR DINAMICO. El ligador dinámico ofrece algunas ventajas
sobre los otros tipos de ligado. Proporciona la posibilidad
de cargar las rutinas sólo cuando y si se necesitan. Si las
subrutinas son grandes o tienen muchas referencias externas,
se pueden conseguir ahorros considerables de tiempo y espacio
de memoria.
Cuando se utiliza el ligador dinámico, la asociación de una
dirección real y el nombre simbólico de la rutina llamada no
se hace hasta que se ejecuta la proposición llamada.
LIGADOR DEL SISTEMA VAX. El ligador VAX es un editor de
ligado que realiza las mismas funciones básicas alcanzadas
con anterioridad. La acción del ligador en la creación de las
secciones de imagen está controlada por ensamblador o
compilador por medio de una secuencia de mandatos que forman
parte del programa objeto.
El lenguaje de mandatos ofrece una gran diversidad de
posibilidades: hay más de 50 códigos de mandatos posibles. El
ligador VAX puede generar tres tipos de imágenes. Una imagen
ejecutable es aquella adecuada para la carga y ejecución; sin
embargo, el ligador no puede reprocesar este tipo de imagen.
Una imagen compartible no es ejecutable, pero el ligador
7. puede reprocesarla, y se puede utilizar, por ejemplo como
tapa intermedia en el ligado de un programa muy grande. Las
imágenes compartibles también hacen posibles que diferentes
Programas compartan la misma copia de ciertas instrucciones o
área de datos. El tercer tipo de imagen que puede crear el
ligado es una imagen de sistema, concebida para ser ejecutada
directamente en la máquina VAX.
EDITOR DE LIGADO DEL SISTEMA /370. El formato de los
programas objeto manejado por el editor de ligado del SISTEMA
/370 es muy parecido al analizado para SIC/XE. La técnica de
referencia a un número se usa para mejorar la eficiencia. El
programa de salida del editor de ligado se llama módulo de
carga, y puede cargarse en la memoria para su ejecución, y
suele contener suficiente información para permitir que el
editor de ligado los reprocese.