Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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.
que
el
tamao
de
esta memoria
virtual,
junto
con
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:
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
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
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/