Вы находитесь на странице: 1из 15

Enlazador

DEFINICIN:
Un enlazador es un programa de sistema que combina dos o ms mdulos o
programas objeto separados y permite que se hagan referencias unos a otros,
o sea, que cada uno de estos programas pueda hacer referencia a cdigo o
variables de los otros programas con los que est enlazado.

En muchos programas el cargador hace la labor del programa de enlace, porque


existe solo un enlazador cargador y no existe programa de enlace
independiente. Es importante sealar que no se necesita un programa de enlace
ni un cargador separado para cada traductor en el sistema, ya que los
programas trabajan con el programa objeto, sin importar el lenguaje fuente.
Por otro lado es importante que cada compilador o ensamblador produzca el
programa objeto usando el mismo formato. Cada programa objeto es un archivo
record.
Algunos sistemas tienen un enlazador para realizar las operaciones de enlaces
y un cargador separado para manejar la relocalizacin y la carga.
FUNCIONES:
Enlazar cdigo intermedio compilado independientemente en un solo mdulo de
carga.
Incorpora las denominadas rutinas de libreras en caso de solicitarlas el propio
programa. Esto puede ser til al tratar con bibliotecas de subrutinas que
manejan lenguajes de programacin de alto nivel.
Reducir procedimientos traducidos por separado y enlazarlos para que se
ejecuten como una unidad llamada programa ejecutable.
Resolver referencias externas lleva a cabo la siguiente etapa del proceso de
traduccin enlazando los mdulos ensambladores y los acervos para formar un
programa completo.

TIPOS DE LIGADORES
Editores de Enlazado: La diferencia fundamental entre un editor enlazador es
que este realiza las operaciones de enlazado y relocalizacin, incluyendo la
bsqueda automtica en bibliotecas, si se especifica, y carga el programa
enlazado directamente en la memoria para su ejecucin. Los editores de
enlazado en general tienden a ofrecer mayor flexibilidad y control con el
correspondiente incremento, complejidad y sobrecarga, produce una versin
enlazada del programa (llamada a menudo mdulo de carga o imagen
ejecutable), que se escribe un archivo o biblioteca para su ejecucin posterior.
Cuando el usuario est listo para ejecutar el programa enlazado, se puede
utilizar un cargador relocalizador simple para cargar el programa en la
memoria.

Enlazador DINAMICO. El Enlazador dinmico ofrece algunas ventajas sobre


los otros tipos de ligado. Proporciona la posibilidad de cargar las rutinas slo
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 enlazador dinmico, la asociacin de una direccin real y el


nombre simblico de la rutina llamada no se hace hasta que se ejecuta la
proposicin llamada.
De forma similar, supngase que en cualquier ejecucin un programa usa slo
pocas de una gran cantidad de subrutinas posibles, pero el nmero exacto de
rutinas necesarias no puede predecirse hasta que el programa examina su
entrada.
Esta situacin podra presentarse, con un programa que permita al usuario
llamar interactivamente a cualquiera de las subrutinas de una gran biblioteca
matemtica y estadstica. El usuario podra suministrar la entrada de datos
desde un terminal de tiempo compartido, y los resultados podran exhibirse en
el terminal. En este caso podran ser necesarias todas las subrutinas de la
biblioteca, pero en cualquier sesin de terminal solo se usaran unas cuantas.
El enlazado dinmico evita la necesidad de cargar la biblioteca completa para
cada ejecucin. El enlazado dinmico puede incluso hacer innecesario que el
programa conozca el conjunto de subrutinas que se podra utilizar. El nombre
de la subrutina se tratara simplemente como otro elemento de entrada. Para
realizar la carga de ligado de una subrutina llamada se puede utilizar varios
mecanismos distintos.
En el mtodo que se analiza aqu, las rutinas que se carguen dinmicamente
deben llamarse por medio de una solicitud de servicio al sistema operativo.
Este mtodo tambin podra considerarse como una solicitud a una parte del
cargador que se mantiene en la memoria durante la ejecucin del programa.
Cuando se utiliza enlazado dinmico, la asociacin de una direccin real y el
nombre simblico de la rutina llamada no se hace hasta que se ejecuta la
proposicin llamada
El enlazado se pospone para el tiempo de ejecucin del proceso
Se requiere de un pequeo cdigo para localizar la rutina residente en
memoria.

Este cdigo se modifica as mismo, de tal manera de poder invocar y


ejecutar la rutina.
El SO requiere comprobar si la rutina se encuentra en el espacio de
memoria del proceso.
El enlazado dinmico es muy til para bibliotecas de sistema, tambin
conocidas como bibliotecas compartidas.

ENLAZADOR DEL SISTEMA VAX (Virtual Address Extended). El enlazador


VAX es un editor de enlazado que realiza las mismas funciones bsicas
alcanzadas con anterioridad. La accin del enlazador en la creacin 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 ms
de 50 cdigos de mandatos posibles. El enlazador VAX puede generar tres
tipos de imgenes.

Imagen ejecutable: Es aquella adecuada para la carga y ejecucin; sin


embargo, el enlazador no puede reprocesar este tipo de imagen.

Imagen compartible: No es ejecutable, pero el enlazador puede


reprocesarla, y se puede utilizar, por ejemplo como tapa intermedia en el
enlazado de un programa muy grande. Las imgenes compartidas tambin
hacen posibles que diferentes programas comparten la misma copia de
ciertas instrucciones o rea de datos.

Imagen de sistema, concebida para ser ejecutada directamente en la


mquina VAX. Los mandatos del programa objeto pueden especificar el
apilamiento de valores a partir de diversas fuentes, guardar valores de
la pila en la imagen que se est creando y realizar operaciones con
valores de pila sin los servicios del sistema operativo.

Este tipo de imagen solo se utiliza en circunstancias especiales. La estructura y


contenido de una imagen de sistema son ms sencillo que en cualquiera de los
otros dos tipos.
El enlazador de VAX realiza las funciones usuales de enlazado y relocalizacin.
Adems, hace parte del trabajo que en otros sistemas realizan el ensamblador
o el compilador.
El enlazador de VAX no utiliza programas de superposiciones, debido en parte
a la gran memoria virtual que dispone VAX. Los diseadores del sistema
consideraron

que

el

tamao

de

esta memoria

virtual,

junto

con

los algoritmos para la administracin de la memoria, hacan innecesaria la


utilizacin de las superposiciones.

EDITOR DE ENLAZADO DEL SISTEMA /370.


El formato de los programas objeto manejado por el editor de enlazado del
SISTEMA /370 es muy parecido al analizado para SIC/XE. La tcnica de
referenciar a un nmero se usa para mejorar la eficiencia. El programa de
salida del editor de enlazado se llama mdulo de carga, y puede cargarse en la
memoria para su ejecucin, y suele contener suficiente informacin para
permitir que el editor de enlazado los reprocese.
El usuario tiene la posibilidad de especificar que un mdulo de carga sea "no
editable", en cuyo caso puede omitirse gran parte de la informacin de control,
para producir un mdulo de carga ms pequeo.
El editor de ligado del Sistema 370 puede realizar todas las funciones
estndar analizadas, las secciones de control pueden ser eliminadas,
reemplazadas o reordenadas. Los smbolos utilizados en referencias externas
se pueden cambiar o eliminar. Para facilitar la edicin, el editor de enlazador
se encarga del reemplazo automtico de secciones de control. Si se estn
procesando dos o ms secciones de control que tienen el mismo nombre, solo se
incluye la primera en el mdulo de carga; las otras se eliminan sin ser
consideradas como errores. El editor de enlazado busca automticamente en
las bibliotecas del sistema o en las especificadas por el usuario para resolver

referencias externas. Sin embargo, el usuario puede suprimir la bsqueda de


algunas o de todas las referencias externas.
El editor de enlazado tambin almacena otro tipo de informacin con el mdulo
de carga, que incluye el traductor de lenguaje empleado para cada seccin de
control y la fecha de ensamblado o compilacin. El editor de enlazado tambin
proporciona fechas de edicin y modificacin para mantener una historia del
procesamiento. Cuando se coloca un mdulo de carga en una biblioteca, el
editor de enlazado hace una entrada en el directorio de esa biblioteca que
especifica si el mdulo puede ser reprocesado por el editor de enlazado, si es
un programa de superposiciones, si es reutilizable o compartible, y muchos
otros atributos, algunos de estos los especifica el usuario, y otros son
generados por el editor de enlazado a partir de la informacin reunida durante
el procesamiento.
Los programas superposiciones del Sistema/370 se pueden dividir en varias
regiones para mejorar la utilizacin del almacenamiento. Cada regin contiene
una superposicin con estructura de rbol; dentro de una regin, se aplican las
reglas usuales de referencias entre segmentos; sin embargo, las regiones son
independientes entre s. Un segmento de una regin es libre de llamar a
cualquier segmento de otra regin.

ENLAZADOR ESTTICO
Cuando se utilizan subrutinas en un programa, el cdigo ejecutable de cada una
de ellas debe encontrarse en memoria al tiempo de ejecucin. Para esto, antes
de cargar un programa, debe enlazarse su cdigo objeto con los cdigos objeto
(guardados en uno o ms archivos) de cada una de las subrutinas invocadas por
l, obteniendo as un programa ejecutable que contiene tanto el cdigo del
mdulo invocador como el cdigo de los mdulos invocados.
En este punto, es posible guardar el resultado del proceso de enlazado en un
archivo que podr ser utilizado por un cargador, o el mismo programa enlazador
puede tambin realizar la tarea de carga. Esto ltimo evita el tener que
guardar el cdigo ejecutable en un archivo, con lo que se ahorra espacio en
disco.

Este ahorro de espacio en disco se paga con el tiempo gastado al tener que
enlazar todos los mdulos cada vez que se necesite ejecutar el programa. En
conclusin se le llama esttico porque se enlaza antes de ejecutar el programa.

ENLAZADOR DE SUBRUTINAS
Al estudiar subrutinas es conveniente identificar dos funciones distintas: el
invocador y el invocado.
El invocador: es la seccin de cdigo que inicia la llamada a la subrutina.
El invocado: es la subrutina llamada por el invocador.
Examinaremos las transferencias de control necesarias para implantar la
invocacin de subrutinas. Al efectuar una llamada se transfiere el control al
cuerpo de la subrutina; cuando esta concluye, devuelve el control a la
instruccin que est inmediatamente despus de la llamada a la subrutina
desde diversos puntos en el programa, las subrutinas deben ser capaces de
regresar a distintos lugares del programa. La direccin de retorno es la
direccin de la instruccin que esta inmediatamente despus de la instruccin
que transfiere el control al invocado. El invocador proporciona la direccin del
retorno al invocado como parte de enlace de la subrutina.
El enlace de subrutina es la estructura con que se comparte informacin sobre
el invocador y el invocado. El invocador establece parte del enlace de subrutina
en una secuencia de instrucciones llamada secuencia de arranque. El invocado
establece lo que resta del enlace de subrutina en el prlogo de subrutina, el
cul puede estar vaco como suponemos de todas las rutinas estn bien
estructuradas, las instrucciones al final de la subrutina regresan al invocador.
Est secuencia de instrucciones se denomina eplogo de subrutina. Cuando el
control regresa al invocador, es posible que este tenga que limpiar el enlace;
este conjunto de instrucciones se denomina secuencia de limpieza y tambin
puede estar vaca.

PROCESO DE ENLAZADO
Enlazar, como compilar o ensamblar es fundamentalmente un proceso de dos
pasos:

Un enlazador toma desde una hasta varias entradas de archivos objeto,


libreras y probablemente archivos de comando.

Produce como resultado un archivo objeto de salida, y probablemente


informacin como un mapa cargado o un archivo que contiene smbolos
del depurador.

Cada uno de los archivos de entrada contiene un conjunto de segmentos


(pedazos) contiguos de cdigo o datos, para ser colocados en el archivo de
salida, tambin contienen al menos una tabla de smbolo. Algunos smbolos son
exportados, definidos dentro del archivo para ser usado en otros archivos,
generalmente los nombres de rutinas dentro del archivo pueden ser llamados
desde donde sea. Otros smbolos son importados, usados en el archivo pero no
definidos, generalmente los nombres de las rutinas son llamados pero no estn
presentes en el archivo.

Cuando un enlazador se ejecuta, primero tiene que escanear los archivos de


entrada para encontrar el tamao de los segmentos recolectar las definiciones
y referencias de todos los smbolos. Crea una tabla de segmento preparando
todos los segmentos definidos en los archivos de entrada, y una tabla con
todos los smbolos importados o exportados.
Con los datos del primer paso (tomar las entradas del archivo objeto) el
enlazador asigna locaciones numricas a los smbolos, determina los tamaos y
locaciones de los segmentos en el espacio de direccin de salida, y determina
donde ira todo el archivo de salida ya terminado.
En el segundo paso (producir archivo objeto de salida) usa la informacin
recolectada (en el primer paso) para tomar control del proceso actual de
enlazado. Lee y recopila el cdigo objeto, sustituyendo direcciones numricas
por referencias de smbolo y ajustando las direcciones de memoria en el cdigo
y los datos, para reflejar las direcciones de segmento relocalizadas, y escribe
el cdigo relocalizado en el archivo de salida. Despus escribe el archivo de
salida, generalmente con informacin de encabezado, los segmentos
relocalizados e informacin de la tabla de smbolo.
Si el programa utiliza enlazado dinmico, la tabla de smbolo contiene la
informacin que el tiempo de ejecucin del enlazador necesitar para resolver

los smbolos dinmicos. En muchos casos, el enlazador por si solo generar


pequeas cantidades de cdigo o datos en el archivo de salida, como cdigo
pegamento usado para llamar rutinas en libreras enlazadas dinmicamente o
superpuestas, o en un arreglo de punteros para la iniciacin de rutinas que
necesitan ser llamadas en el momento de inicio de un programa. Utilice o no el
programa el enlazado dinmico, el archivo tambin debe contener su tabla de
smbolo para el re enlazado o depurado que no est siendo usado por el
programa, pero puede ser usado por otros programas que interactan con el
archivo de salida.
Con lo anterior podemos ver que alguno formatos de cdigo objeto son re
enlazables, lo que significa que el archivo de salida de un enlazador en
ejecucin, puede ser usado como la entrada a un enlazador subsecuente en
ejecucin.
Esto requiere que el archivo de salida y el de entrada contengan su tabla de
smbolo, as como toda la dems informacin auxiliar presente en el archivo de
entrada.
CDIGO DE AGLUTAMIENTO (GLUE CODE)
Es un cdigo informtico que une a los programas o componentes de software
que no seran compatibles de otra manera. No tiene como propsito la
computacin o clculo, sino que sirve exclusivamente como un intermediario
entre dos piezas incompatibles de software. Con este cdigo los lenguajes de
programacin orientados a objetos se pueden conectar a los lenguajes Script,
dos lenguajes objetos pueden conectarse entre s, o grandes piezas en el
mismo idioma pueden ser unidos por este cdigo. Por ejemplo, para conectar C
++ con Java, el cdigo generado puede incluir tanto un archivo de C ++ y un
archivo Java.
Aunque el cdigo se puede utilizar para transferir informacin entre los
lenguajes de programacin, no est obligado a hacerlo. Generalmente, permite
que una pieza de cdigo pueda llamar a las funciones en otra, o permite que los
valores de los datos pequeos pasen entre los bloques de cdigo.
Este cdigo se puede utilizar para conectar mdulos de cdigo de cualquier
tamao, desde pequeas a grandes libreras. Ya que este cdigo suele generar
una cantidad significativa de espacio no es muy recomendable conectar

pequeas piezas de cdigo de esta manera, sin embargo sincronizar las


llamadas a grandes libreras o la fusin de grandes repositorios de cdigos
grandes de esta manera puede ser una forma muy valiosa de traer
funcionalidad donde podra no estar disponible de otra manera.
TABLA DE SIMBOLO (TABSE)
Esta tabla es una estructura de datos utilizada por el enlazador para traducir
cada identificador en el cdigo fuente de un programa que se asocia con la
informacin relativa a su declaracin o aparicin en la fuente.
Un archivo obtendr una tabla de smbolo de los identificadores que contiene,
que son visibles externamente. Durante el enlazado de los diferentes archivos
objeto el enlazador utilizar esta tabla para interpretar cualquier referencia
que no comprenda.
Esta tabla solo puede existir durante el proceso de traduccin o puede ser
incrustada en el archivo objeto de salida para su exploracin posterior, como
por ejemplo una depuracin interactiva, o como un recurso para dar formato
uniforme de diagnstico despus de la ejecucin del programa, o incluso
tambin durante un enlazado dinmico.
Si un archivo objeto antes de ser convertido en un ejecutable, no cuenta con
esta tabla de smbolo las herramientas tendrn dificultad para determinar las
direcciones asignadas a las variables y este no entender nada acerca del
programa (el programa fallar).
A cada una de las partes de una lnea de cdigo en ensamblador se le conoce
como token, por ejemplo en la lnea de cdigo:
MOV AX,Var
Tenemos tres tokens, la instruccin MOV, el operando AX, y el operando VAR.
El ensamblador lo que hace para generar el cdigo OBJ es leer cada uno de los
tokens y buscarlo en una tabla interna de equivalencias conocida como tabla de
palabras reservadas, que es donde se encuentran todos los significados de los
mnemnicos que utilizamos como instrucciones.
El ensamblador lee MOV, lo busca en su tabla y al encontrarlo lo identifica
como una instruccin del procesador, as mismo lee AX y lo reconoce como un
registro del procesador, pero al momento de buscar el token Var en la tabla de

palabras reservadas no lo encuentra y entonces lo busca en la tabla de smbolo


que es una tabla donde se encuentran los nombres de las variables, constantes
y etiquetas utilizadas en el programa donde se incluye su direccin en memoria
y el tipo de datos que contiene.
Algunas veces el ensamblador se encuentra con algn token no definido en el
programa, lo que hace en estos casos es dar una segunda pasada por todo el
programa fuente para verificar todas las referencias a ese smbolo y colocarlo
en la tabla de smbolo. Existen smbolos que no los va a encontrar ya que no
pertenecen a ese segmento y el programa no sabe en qu parte de la memoria
se encontrar dicho segmento, en ese momento entra en accin el enlazador, el
cual crea la estructura que necesita el cargador para que el segmento y el
token sean definidos cuando se cargue el programa y antes de que el mismo sea
ejecutado.
Ejemplo de una tabla de smbolo
Tenemos este cdigo en C:
// Declare an external function
extern double bar(double x);
// Define a public function
double foo(int count)
{
double sum = 0.0;
// Sum all the values bar(1) to bar(count)
for (int i = 1; i <= count; i++)
sum += bar((double) i);
return sum;
}
Ahora un compilador en C que analiza el cdigo contendr al menos las
siguientes entradas de la tabla de smbolo.

Symbol name

Bar

Type

function, double

Scope

extern

double

function parameter

Foo

function, double

global

Count

int

function parameter

Sum

double

block local

int

for-loop statement

En esta tabla de smbolo podemos observar que la primera columna es donde se


encuentra el smbolo en la memoria, en la segunda es " el tipo de smbolo " y en
la tercera es el nombre del smbolo. Con la aprobacin de los parmetros
adecuados, se tom la tabla de smbolos para ordenar en funcin de la
direccin.
Address

Type

Name

00000020

T_BIT

00000040

F_BIT

00000080

I_BIT

20000004

irqvec

20000008

fiqvec

2000000c

InitReset

20000018

_main

20000024

End

20000030

AT91F_US3_CfgPIO_useB

2000005c

AT91F_PIO_CfgPeriph

200000b0

main

Referencias:

http://programaciondesistemasligadores.blogspot.mx/

http://os-krnaranjo.blogspot.mx/

http://xikotenkaltsb.blogspot.mx/2011/04/41-cargadores-y-ligadores.html

Leland L. Beck. (1998 ). Software de sistemas : introduccin a la programacin


de sistemas. Mxico: Addison-Wesley.

John L. Levine. (1999). Linkers & Loaders. USA: Morgan Kaufmann.

http://www.cs.cornell.edu/courses/cs3410/2012sp/lecture/15-linkers-i.pdf

http://www.wisegeek.com/what-is-a-glue-code.htm

https://en.wikipedia.org/wiki/Symbol_table

https://prezi.com/dj-nui57o-uz/algoritmo-para-un-cargador/