Enlazador DEFINICIÓN: Un enlazador es un programa de sistema que combina dos o más módulos 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 código o variables de los otros programas con los que está enlazado.
En muchos programas el cargador hace la labor del programa de enlace, porque exi xist stee sol oloo un en enla lazzad adoor car arga gad dor y no exi xisste pr proogr gram amaa de enl nlac acee independiente. Es importante sealar que no se necesita un programa de enlace ni un ca carg rgad ador or se sepa para rado do pa para ra ca cada da tr trad aduc ucto torr en el si sist stem ema, a, ya qu quee lo loss programas trabajan con el programa objeto, sin importar el lenguaje fuente. !or otro lado es importante que cada compilador o ensamblador produzca el programa objeto usando el mismo formato. "ada programa objeto es un archivo
record. #lgunos sistemas tienen un enlazador para realizar las operaciones de enlaces y un cargador separado para manejar la relocalización relocalización y la carga.
FUNCIONES: Enlazar código intermedio compilado independientemente en un solo módulo de carga. $ncorpora las denominadas rutinas de librer%as en caso de solicitarlas el propio programa. Esto puede ser &til al tratar con bibliotecas de subrutinas que manejan lenguajes de programación de alto nivel. 'educi 'ed ucirr pro proced cedimi imient entos os tra traduc ducido idoss por sep separa arado do y enl enlaza azarlo rloss par paraa que se ejecuten como una unidad llamada llamad a programa ejecutable. 'esolver 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.
TIPOS DE LIGADORES Editores de Enlazado( )a diferencia fundamental entre un editor enlazador es que este realiza las operaciones de enlazado y relocalización, incluyendo la b&squeda automática en bibliotecas, si se especifica, y carga el programa enlazado directamente en la memoria para su ejecución. )os editores de enlazado en general tienden a ofrecer mayor flexibilidad y control con el correspondiente incremento, complejidad y sobrecarga, produce una versión enlazada del programa *llamada a menudo módulo de carga o imagen ejecutable+, que se escribe un archivo o biblioteca para su ejecución posterior. "uando 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 dinámico ofrece algunas ventajas sobre los otros tipos de ligado. !roporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan. i las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria.
"uando se utiliza el enlazador 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. -e forma similar, supóngase que en cualquier ejecución un programa usa sólo pocas de una gran cantidad de subrutinas posibles, pero el n&mero exacto de rutinas necesarias no puede predecirse hasta que el programa examina su entrada. Esta situación podr%a presentarse, con un programa que permita al usuario llamar interactivamente a cualquiera de las subrutinas de una gran biblioteca matemática y estad%stica. El usuario podr%a suministrar la entrada de datos desde un terminal de tiempo compartido, y los resultados podr%an exhibirse en el terminal. En este caso podr%an ser necesarias todas las subrutinas de la biblioteca, pero en cualquier sesión de terminal solo se usar%an unas cuantas. El enlazado dinámico evita la necesidad de cargar la biblioteca completa para cada ejecución. El enlazado dinámico puede incluso hacer innecesario que el programa conozca el conjunto de subrutinas que se podr%a utilizar. El nombre de la subrutina se tratar%a simplemente como otro elemento de entrada. !ara 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 dinámicamente deben llamarse por medio de una solicitud de servicio al sistema operativo. Este mtodo tambin podr%a considerarse como una solicitud a una parte del cargador que se mantiene en la memoria durante la ejecución del programa. "uando se utiliza enlazado 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 •
El enlazado se pospone para el tiempo de ejecución del proceso
•
e requiere de un pequeo código para localizar la rutina residente en memoria.
•
Este código se modifica as% mismo, de tal manera de poder invocar y ejecutar la rutina.
•
El / requiere comprobar si la rutina se encuentra en el espacio de memoria del proceso.
•
El enlazado dinámico es muy &til para bibliotecas de sistema, tambin conocidas como bibliotecas compartidas.
ENLAZADOR DEL SISTEMA VA !V"r#$al Addre%% Eended'. El enlazador 0#1 es un editor de enlazado que realiza las mismas funciones básicas alcanzadas con anterioridad. )a acción del enlazador 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 23 códigos de mandatos posibles. El enlazador 0#1 puede generar tres tipos de imágenes. •
$magen ejecutable( Es aquella adecuada para la carga y ejecución4 sin embargo, el enlazador no puede reprocesar este tipo de imagen.
•
$magen compartible( 5o es ejecutable, pero el enlazador puede reprocesarla, y se puede utilizar, por ejemplo como tapa intermedia en el enlazado de un programa muy grande. )as imágenes compartidas tambin hacen posibles que diferentes programas comparten la misma copia de ciertas instrucciones o área de datos.
•
$magen de sistema, concebida para ser ejecutada directamente en la máquina 0#1. )os 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. )a estructura y contenido de una imagen de sistema son más sencillo que en cualquiera de los otros dos tipos. El enlazador de 0#1 realiza las funciones usuales de enlazado y relocalización. #demás, hace parte del trabajo que en otros sistemas realizan el ensamblador o el compilador. El enlazador de 0#1 no utiliza programas de superposiciones, debido en parte a la gran memoria virtual que dispone 0#1. )os diseadores del sistema consideraron
que
el
tamao
de
esta memoria
virtual,
junto
con
los algoritmos para la administración de la memoria, hac%an innecesaria la utilización de las superposiciones.
EDITOR DE ENLAZADO DEL SISTEMA ()*+. El formato de los programas objeto manejado por el editor de enlazado del $6E7# 89:3 es muy parecido al analizado para $"81E. )a tcnica de referenciar a un n&mero se usa para mejorar la eficiencia. El programa de salida del editor de enlazado 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 enlazado los reprocese. El usuario tiene la posibilidad de especificar que un módulo de carga sea ;no editable;, en cuyo caso puede omitirse gran parte de la información de control, para producir un módulo de carga más pequeo. El editor de ligado del istema 9:3 puede realizar todas las funciones estándar analizadas, las secciones de control pueden ser eliminadas, reemplazadas o reordenadas. )os s%mbolos utilizados en referencias externas se pueden cambiar o eliminar. !ara facilitar la edición, el editor de enlazador se encarga del reemplazo automático de secciones de control. i se están procesando dos o más secciones de control que tienen el mismo nombre, solo se incluye la primera en el módulo de carga4 las otras se eliminan sin ser consideradas como errores. El editor de enlazado busca automáticamente en las bibliotecas del sistema o en las especificadas por el usuario para resolver
referencias externas. in embargo, el usuario puede suprimir la b&squeda de algunas o de todas las referencias externas. El editor de enlazado tambin almacena otro tipo de información con el módulo de carga, que incluye el traductor de lenguaje empleado para cada sección de control y la fecha de ensamblado o compilación. El editor de enlazado tambin proporciona fechas de edición y modificación para mantener una historia del procesamiento. "uando se coloca un módulo de carga en una biblioteca, el editor de enlazado hace una entrada en el directorio de esa biblioteca que especifica si el módulo 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 información reunida durante el procesamiento. )os programas superposiciones del istema89:3 se pueden dividir en varias regiones para mejorar la utilización del almacenamiento. "ada región contiene una superposición con estructura de árbol4 dentro de una región, se aplican las reglas usuales de referencias entre segmentos4 sin embargo, las regiones son independientes entre s%. Un segmento de una región es libre de llamar a cualquier segmento de otra región.
ENLAZADOR EST,TICO "uando se utilizan subrutinas en un programa, el código ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecución. !ara esto, antes de cargar un programa, debe enlazarse su código objeto con los códigos objeto *guardados en uno o más archivos+ de cada una de las subrutinas invocadas por l, obteniendo as% un programa ejecutable que contiene tanto el código del módulo invocador como el código de los módulos 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 <imo evita el tener que guardar el código 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 módulos cada vez que se necesite ejecutar el programa. En conclusión se le llama estático porque se enlaza antes de ejecutar el programa.
ENLAZADOR DE SU-RUTINAS #l estudiar subrutinas es conveniente identificar dos funciones distintas( el invocador y el invocado. El "nocador: es la sección de código que inicia la llamada a la subrutina. El "nocado: es la subrutina llamada por el invocador. Examinaremos las transferencias de control necesarias para implantar la invocación de subrutinas. #l efectuar una llamada se transfiere el control al cuerpo de la subrutina4 cuando esta concluye, devuelve el control a la instrucción 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. )a dirección de retorno es la dirección de la instrucción que esta inmediatamente despus de la instrucción que transfiere el control al invocado. El invocador proporciona la dirección del retorno al invocado como parte de enlace de la subrutina. El enlace de %$/r$#"na es la estructura con que se comparte información sobre el invocador y el invocado. El invocador establece parte del enlace de subrutina en una secuencia de instrucciones llamada %ec$enc"a de arran0$e . El invocado establece lo que resta del enlace de subrutina en el prólogo de subrutina, el cuál puede estar vac%o como suponemos de todas las rutinas están bien estructuradas, las instrucciones al final de la subrutina regresan al invocador. Está secuencia de instrucciones se denomina ep%logo de subrutina. "uando el control regresa al invocador, es posible que este tenga que limpiar el enlace4 este conjunto de instrucciones se denomina secuencia de limpieza y tambin puede estar vac%a.
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, librer%as y probablemente archivos de comando.
•
!roduce como resultado un archivo objeto de salida, y probablemente información como un mapa cargado o un archivo que contiene s%mbolos del depurador.
"ada uno de los archivos de entrada contiene un conjunto de segmentos *pedazos+ contiguos de código o datos, para ser colocados en el archivo de salida, tambin contienen al menos una tabla de s%mbolo. #lgunos s%mbolos 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. /tros s%mbolos son importados, usados en el archivo pero no definidos, generalmente los nombres de las rutinas son llamados pero no están presentes en el archivo.
"uando 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 s%mbolos. "rea una tabla de segmento preparando todos los segmentos definidos en los archivos de entrada, y una tabla con todos los s%mbolos importados o exportados. "on los datos del primer paso *tomar las entradas del archivo objeto+ el enlazador asigna locaciones numricas a los s%mbolos, determina los tamaos y locaciones de los segmentos en el espacio de dirección de salida, y determina donde ira todo el archivo de salida ya terminado. En el segundo paso *producir archivo objeto de salida+ usa la información recolectada *en el primer paso+ para tomar control del proceso actual de enlazado. )ee y recopila el código objeto, sustituyendo direcciones numricas por referencias de s%mbolo y ajustando las direcciones de memoria en el código y los datos, para reflejar las direcciones de segmento relocalizadas, y escribe el código relocalizado en el archivo de salida. -espus escribe el archivo de salida, generalmente con información de encabezado, los segmentos relocalizados e información de la tabla de s%mbolo. i el programa utiliza enlazado dinámico, la tabla de s%mbolo contiene la información que el tiempo de ejecución del enlazador necesitará para resolver
los s%mbolos dinámicos. En muchos casos, el enlazador por si solo generará pequeas cantidades de código o datos en el archivo de salida, como c1d"2o 3e2a4en#o usado para llamar rutinas en librer%as enlazadas dinámicamente o superpuestas, o en un arreglo de punteros para la iniciación de rutinas que necesitan ser llamadas en el momento de inicio de un programa. Utilice o no el programa el enlazado dinámico, el archivo tambin debe contener su tabla de s%mbolo para el re enlazado o depurado que no está siendo usado por el programa, pero puede ser usado por otros programas que interact&an con el archivo de salida. "on lo anterior podemos ver que alguno formatos de código objeto son re enlazables, lo que significa que el archivo de salida de un enlazador en ejecución, puede ser usado como la entrada a un enlazador subsecuente en ejecución. Esto requiere que el archivo de salida y el de entrada contengan su tabla de s%mbolo, as% como toda la demás información auxiliar presente en el archivo de entrada.
CÓDIGO DE AGLUTAMIENTO !GLUE CODE' Es un código informático que une a los programas o componentes de soft
ava, el código generado puede incluir tanto un archivo de " == y un archivo >ava. #unque el código se puede utilizar para transferir información entre los lenguajes de programación, no está obligado a hacerlo. ?eneralmente, permite que una pieza de código pueda llamar a las funciones en otra, o permite que los valores de los datos pequeos pasen entre los bloques de código. Este código se puede utilizar para conectar módulos de código de cualquier tamao, desde pequeas a grandes librer%as. @a que este código suele generar una cantidad significativa de espacio no es muy recomendable conectar
pequeas piezas de código de esta manera, sin embargo sincronizar las llamadas a grandes librer%as o la fusión de grandes repositorios de códigos grandes de esta manera puede ser una forma muy valiosa de traer funcionalidad donde podr%a no estar disponible de otra manera.
TA-LA DE SIM-OLO !TA-SE' Esta tabla es una estructura de datos utilizada por el enlazador para traducir cada identificador en el código fuente de un programa que se asocia con la información relativa a su declaración o aparición en la fuente. Un archivo obtendrá una tabla de s%mbolo de los identificadores que contiene, que son visibles externamente. -urante 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 traducción o puede ser incrustada en el archivo objeto de salida para su exploración posterior, como por ejemplo una depuración interactiva, o como un recurso para dar formato uniforme de diagnóstico despus de la ejecución del programa, o incluso tambin durante un enlazado dinámico. i un archivo objeto antes de ser convertido en un ejecutable, no cuenta con esta tabla de s%mbolo las herramientas tendrán dificultad para determinar las direcciones asignadas a las variables y este no entenderá nada acerca del programa *el programa fallará+. # cada una de las partes de una l%nea de código en ensamblador se le conoce como toAen, por ejemplo en la l%nea de código( 7/0 #1,0ar 6enemos tres toAens, la instrucción 7/0, el operando #1, y el operando 0#'. El ensamblador lo que hace para generar el código /B> es leer cada uno de los toAens y buscarlo en una tabla interna de equivalencias conocida como tabla de palabras reservadas, que es donde se encuentran todos los significados de los mnemónicos que utilizamos como instrucciones. El ensamblador lee 7/0, lo busca en su tabla y al encontrarlo lo identifica como una instrucción del procesador, as% mismo lee #1 y lo reconoce como un registro del procesador, pero al momento de buscar el toAen 0ar en la tabla de
palabras reservadas no lo encuentra y entonces lo busca en la tabla de s%mbolo que es una tabla donde se encuentran los nombres de las variables, constantes y etiquetas utilizadas en el programa donde se incluye su dirección en memoria y el tipo de datos que contiene. #lgunas veces el ensamblador se encuentra con alg&n toAen 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 s%mbolo y colocarlo en la tabla de s%mbolo. Existen s%mbolos 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 acción el enlazador, el cual crea la estructura que necesita el cargador para que el segmento y el toAen sean definidos cuando se cargue el programa y antes de que el mismo sea ejecutado.
E5e43lo de $na #a/la de %64/olo 6enemos este código en "( 88 -eclare an external function extern double bar*double x+4 88 -efine a public function double foo*int count+ C double sum D 3.34 88 um all the values bar*+ to bar*count+ for *int i D 4 i FD count4 i==+ sum =D bar**double+ i+4 return sum4 G #hora un compilador en " que analiza el código contendrá al menos las siguientes entradas de la tabla de s%mbolo.
Symbol name
Bar
Type
function, double
Scope
extern
X
double
function parameter
Foo
function, double
global
Count
int
function parameter
Sum
double
block local
I
int
for-loop statement
En esta tabla de s%mbolo podemos observar que la primera columna es donde se encuentra el s%mbolo en la memoria, en la segunda es ; el tipo de s%mbolo ; y en la tercera es el nombre del s%mbolo. "on la aprobación de los parámetros adecuados, se tomó la tabla de s%mbolos para ordenar en función de la dirección. Address
Type
Name
00000020
a
T_BIT
00000040
a
F_BIT
00000080
a
I_BIT
20000004
t
ir!ec
20000008
t
fi!ec
2000000c
t
Init"eset
200000#8
T
_main
20000024
t
$nd
200000%0
T
&T'#F_()%_*fg+I_useB
200000c
t
&T'#F_+I_*fg+erip.
200000b0
T
main
Referencias:
http(88programaciondesistemasligadores.blogspot.mx8
http(88osHArnaranjo.blogspot.mx8
http(88xiAotenAaltsb.blogspot.mx8I383J8JHcargadoresHyHligadores.html
)eland ). BecA. *KKL +. oft
>ohn ). )evine. *KKK+. )inAers N )oaders. U#( 7organ Oaufmann.
http(88<<<.cs.cornell.edu8courses8cs9J38I3Isp8lecture82HlinAersHi.pdf
http(88<<<.
https(88en.
https(88prezi.com8djHnui2:oHuz8algoritmoHparaHunHcargador8