4.1 Ligadores
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.
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.
La generación de un módulo ejecutable a partir de una colección de procedimientos traducidos independientemente requiere un ligador.
FUNCION DE UN LIGADOR
Las funciones de un cargador son:
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 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 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.
LIGADURA DE SUBRUTINAS
El enlace de una subrutina es la estructura con que se comparte la información entere el involucrado. El involucrado proporciona la dirección de retorno al involucrado como parte del enlace de subrutina .El involucrado establece lo que resta del enlacen de subrutina en el programa el cual puede establecer estar vació.
Ligar un programa consiste en añadir al programa objeto u programa ejecutable .El ensamblador debe permitir dichas referencias y las rutinas deben esta a su vez en lenguaje maquina guardadas en alguna elemento accesible por el montador .Dichas subrutinas se encuentran guardadas en algún elemento accesible por el que se suele denominarse librería porque ahí están almacenados todas las rutinas externas susceptibles de ser utilizadas por los diferentes programas del usuario ahí va el programa ligado cuando esta realizando el montaje de un programa a buscarlas y las adjunta sal programa objeto as esto a este proceso se le llama ligadura de rutinas y subrutinas.
Los siguientes puntos son razones para un programa en subprogramas:
1. Vincular entre lenguajes es decir combinar el poder computacional de un lenguaje de alto nivel con el eficiente procesamiento del lenguaje ensamblador.
2. Facilitar el desarrollo de proyectos largos en los cuales equipos diferentes proceden sus módulos separadamente.
3. Incrustar partes de un programa durante su ejecución a causa del gran tamaño del programa. Cuando se utilizan subrutinas en unos programas, el código ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecución. Para esto antes de cargar un programa debe ligarse su código objeto de cada una de las subrutinas involucradas por el obtenido así por un programa ejecutable que tiene tanto el código del modulo involucrado como el código de los módulos involucrados.