You are on page 1of 11

CONCEPTO DE CARGADORES Y LIGADORES La mayor parte de los programas se componen de ms de un procedimiento.

Los compiladores y ensambladores suelen traducir un procedimiento a la vez y guardan en memoria secundaria el resultado de esta traduccin. 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 explcitamente 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 traduccin completa de un programa fuente se efecta en dos pasos: Compilacin o ensamblaje de los procedimientos fuente Encadenamiento (linking) o montaje de los mdulos objeto. Cargador: Es un programa especial, parte del sistema operativo que tiene como propsito colocar en la memoria las instrucciones y datos de un programa o informacin codificada en lenguaje mquina, para que entonces la computadora pueda procesarla. Un cargador es un programa que realiza la funcin de carga, pero muchos cargadores tambin incluyen relocalizacin y ligado. Algunos sistemas tienen un ligador para realizar las operaciones de enlace, y un cargador separado para manejar la relocalizacin y la carga. Los procesos de ensamblado y carga estn ntimamente relacionados. Ligador: Es un programa que enlaza todos los programas o mdulos obteniendo lo que denominamos programa ejecutable. Es un programa que enlaza distintos mdulos o programas que poseen subprogramas. Adems incorporan las denominadas rutinas de libreras en caso de solicitarlas el propio programa.

La generacin de un mdulo ejecutable a partir de una coleccin 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 ejecucin. Si tenemos un cargador que no necesita realizar las funciones de ligado y relocalizacin de programas, su operacin 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 cdigo objeto que contiene pasa a la direccin de memoria indicada. Cuando se encuentra el registro de fin, el cargador salta a al direccin especificada para iniciar la ejecucin del programa cargado. Un programa objeto contiene instrucciones traducidas y valores de datos del programa fuente, y especfica direcciones en memoria donde se cargarn estos elementos. Las funciones de un cargador son relativamente sencillas y consisten en extraer informacin de algn 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 traduccin: cargar el programa en memoria donde puede ser ejecutado. Una opcin tpica del cargador permite la seleccin de fuentes alternativas de entrada. Otros mandatos permiten al usuario eliminar smbolos externos o secciones de control completas.

Tambin es posible cambiar referencias externas dentro del programa que se est cargando, La mayora de los cargadores permiten al usuario especificar alternativas para bsqueda por medio de una proposicin de tipo LIBRARY. Las funciones de un ligador: Los editores de ligado pueden efectuar varias funciones ltimas a dems de la simple preparacin de un programa objeto para su ejecucin estos tambin 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 programacin 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 traduccin enlazando los mdulos 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 cdigo intermedio compilado independientemente en un solo mdulo de carga resolviendo las diferencias entre Tokens. Incorpora las denominadas rutinas de libreras en caso de solicitarlas el propio programa. Su funcin 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: Cargadores iniciales.- Indican a la computadora la forma de poner, dentro de la memoria principal, unos datos que estn guardados en un perifrico de memoria externa (cinta, disco, etc.). Sirven para cargar en la memoria pequeos programas que inician el funcionamiento de una computadora. Algunas computadoras de carcter general no tienen en memoria ningn programa de forma permanente y cuando se desconectan pierden toda la informacin de su memoria interna. Al volverlos a conectar no son capaces de controlar ningn perifrico (teclado, discos, etc.). Esto se hace as para que sea el usuario el que ponga los programas que le interese ejecutar.

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 ele mismo espacio de memoria (cada vez que se ejecuta el programa cargador), se dice que es un cargador absoluto. Cargadores con reubicacin.- En ocasiones, un mismo programa necesita ejecutarse en diferentes posiciones de memoria. Para esto la traduccin debe estar realizada en forma adecuada, es decir, no utilizando referencias absolutas a direcciones de memoria, sino referencias relativas a una direccin especial llamada direccin de reubicacin. El clculo 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 mquina. A los cargadores que permiten estas operaciones se les denominan cargadores con reubicacin. Cargadores ligadores.- Conocidos tambin por su trmino ingls Link editor o simplemente Linker, es muy comn tambin referirse a l por la castellanizacin del nombre ingls, <<lincador>>. A la accin de montar se le llama asimismo vulgarmente <<lincar>>. Montar un programa consiste en aadir al programa objeto obtenido en la traduccin 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 mquina guardadas en algn elemento accesible por el montador. Generalmente, dichas rutinas se encuentran guardadas en un fichero especial al que suele denominarse librera, porque estn 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 aplicacin y los datos. Pero, previamente, se ha debido cargar el cargador en la memoria y esto se puede realizar por uno de los mtodos siguientes: Entrada Manual: Mediante el teclado, el usuario teclea en la mquina el cargador bootstrap. Despus 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 aplicacin en la memoria.

Entrada por ROM: Es posible tener las instrucciones de inicializacin almacenadas permanentemente en alguna porcin 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 tambin la posibilidad de borrados accidentales. CARGADORES ABSOLUTOS. Este es un programa que carga cada instruccin del programa objeto en una posicin fija y preestablecida. Por tanto, cada instruccin tiene una direccin absoluta. El cargador absoluto lee simplemente la lnea de cdigo objeto que contiene la direccin 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 posicin de inicio de memoria. Esta es una actividad larga y sujeta a errores. En tales situaciones, se utilizan cargadores relocatables. Los cargadores absolutos estn diseados generalmente para verificar cada instruccin que leen. Si se detecta una instruccin ilegal, se interrumpe el proceso de carga. CARGADORES RELOCATABLES. Este cargador evita el principal inconveniente del cargador absoluto. El cargador relocatable es un programa ms sofisticado, tiene las caractersticas del cargador absoluto, y adems 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 compilacin del programa objeto, ste empieza con la direccin. 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. Se trata de direcciones relativas. El programador inserta la direccin se aade a cada una de las posiciones de memoria asignadas en el programa, obtenindose

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 relocalizacin, incluyendo bsqueda automtica en bibliotecas, si se especifica, y carga el programa ligado directamente en la memoria para su ejecucin. Por otro lado, un editor de ligado produce una versin ligada 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 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 relocalizacin de todas las secciones de control relativas al inicio del programa ligado. LIGADOR DINAMICO. El ligador 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 ligador 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. LIGADOR DEL SISTEMA VAX. El ligador VAX es un editor de ligado que realiza las mismas funciones bsicas alcanzadas con anterioridad. La accin del ligador 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 ligador VAX puede generar tres tipos de imgenes. Una imagen ejecutable es aquella adecuada para la carga y ejecucin; 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 imgenes compartibles tambin 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 mquina 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 tcnica de referencia a un nmero se usa para mejorar la eficiencia. El programa de salida del editor de ligado 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 ligado los reprocese.

EL PROCESO DE CARGA ABSOLUTA Los cargadores absolutos existen en sistemas de los que los compiladores generan cdigo absoluto (no relocalizables).De esta forma se obliga a que el programa se obliga a cargar las mismas posiciones son relativamente pero no permiten tener multiprogramacin. La carga absoluta necesita que el modulo de carga ocupe siempre la misma posicin de memoria principal. As pues, todas las referencias del modulo de carga para el cargador deben ser direcciones especificas o absolutas en memoria principal. La asignacin de direcciones especfica a la referencia de memoria de un programa puede ser realizada tanto por el programador en tiempo de compilacin o ensamblaje. Con este mtodo se tienen varias desventajas las cuales son: Todos los programadores tendrn que conocer la estrategia de asignacin deseada para situar los mdulos en memoria principal. Si se hace alguna modificacin en el programa que se suponga inserciones o borrados en el cuerpo modulo tendrn que cambiarse las direcciones por consiguiente es expresar simblicamente y que se resuelvan en el momento de la compilacin o ensamblaje. Cuando se prepara el modulo para la entrada a un cargador absoluto, el ensamblador o el compilador convertir todas esas diferencias a direcciones. Se denomina cargador absoluto porque carga el programa ejecutable en una posicin fija. En algunas cargadores absolutos la direccin de carga esta

denominada por un campo en el encabezado del archivo ejecutable .Aunque esta estrategia es un poco mas general que el empleo de una constante predefinida, la posicin usada para el programa se sigue determinando al ensamblar y enlazar el programa. En esencia el cargador copia los segmentos de texto y datos de un archivo ejecutable a la memoria de la maquina. A continuacin se presenta el pseudo cdigo para un cargador sencillo /***definir la estructura del registro de encabezado ***/ struct enc_ejec{ unsigned int dir_ini; /* las otras partes del encabezado del archivo ejecutable */ }; /***prototipos para las funciones usadas por el cargador***/ struct enc_ejec leer_enc( FILE *); char leer_byte ( FILE *); /***--------el cargador ---------***/ char *carga (File *arch_ejec); { struct enc enc_ejec encabezado ; char *dire_byte; /* leer encabezado del archivo */* encabezado = leer enc(arch_ejec); /*copiar a la memoria los segmentos de texto y datos */ dir_byte = DIR_CARGA; while(leof(arch_ejec)){ dir_byte=leer (arch_ejec); dir_byte= dir_byte+1 ; } return (char*) encabezado dir_ini); } En este cdigo, el cargador comienza leyendo la porcin de encabezado contiene la direccin de inicio , sea la direccin de la primera instruccin que ese ejecuta la .Despus de leer el encabezado el cargador entra a u lazo en el cual se copian a la memoria de la maquina los dems bytes del archivo ejecutable (los segmentos de texto y datos ).Por ultimo , el cargador devuelve el valor del campo de direccin inicial del encabezado. Supuestamente, este valor se usa como destino de una instruccin de ramificacin (o de salto o subrutina) cuando se ejecuta el programa.

Hay dos aspectos del programa cargador que requiera una mayor explicacin: la variable dir_ byte el campo dir_ini. Comenzaremos por la variable dir_byte , que se declara como apuntadores a un carcter, sea, es la direccin de un carcter. Es razonable suponer que la almacena un carcter usando un byte de memoria y que, por consiguiente, la variable dir_byte contiene la direccin de un byte de memoria .Inicialmente, esta variable se asigna igual a la constante DIR_CARGA. En cada interaccin el lazo while, a la posicin de memoria identificada por dir_byte se le asigna el siguiente byte del archivo ejecutable; despus se incrementa en un valor de dir_byte. De esta manera, el contenido del archivo ejecutable se copia a posiciones consecutivas de la memoria de DIR_CARGA EL PROCESO DE CARGA RELOCALIZABLE En la relocalizacin dinmica se establece la correspondencia entre las direcciones usadas en el programa a y direcciones fsicas cada vez que se utilizan durante la ejecucin del programa. Las direcciones 1gicas generadas por el ensamblador y el enlazador no se alteran durante la carga. Comenzaremos por ver un sencillo mtodo en el cual el programa se carga en posiciones contiguas de la memoria; es decir, el programa no esta disperso por la memoria. En la figura 1.2 se presenta un cargador sencillo que puede usarse con la relocalizacin dinmica. En este caso, el cargador lee el encabezado del archivo ejecutable y determina la cantidad de espacio necesaria para el programa. Despus asigna espacio suficiente para el programa y copia el archivo ejecutable a memoria. Cuando se carga el programa en la memoria, el cargador establece la correspondencia necesaria para el programa, pasando la direccin de carga y el tamao del programa a una rutina llamada establecer_ correspondencia. AI leer este cdigo, observe que la funcin de carga devuelve un entero sin signo en lugar de un apuntador. Esto refleja el hecho de que la direccin inicial es una direccin 1gica y no una direccin fsica. Pseudo cdigo para un cargador sencillo (relocalizacin dinmica) Struct enc_ejc{ Unsigned int dir_ini; Unsigned int tamao_texto, tamao_datos, tamao_bss; /*otros campos del registro de encabezado*/ }; /***prototipo para las funciones usadas por el cargador***/ struct enc_leer_enc(FILE*); char leer_byte(FILE*); char*obtener_memoria(unsigned int); void establecer_correspondencia(char*unsigned int); /***el cargador***/ unsigned int*carga (FILE*arch_ejec) 9

{ struct enc_ejec encabezado; char*dir-byte, *dir_carga; unsigned int tamao_prog; encabezado=leer_rnc(arch_ejec); /*determinar el tamao del programa y asignar el espacio*/ tamao_prog=encabezado.tamao_texto + encabezado. Tamao_datos+ encabezado.tamao_bss; dir_carga=obtener_memoria (tamao_prg); /*copiar los segmentos de texto y datos*/ dir_byte =dir_carga; while(!eof(arch_ejec){ *dir_byte=leer_byte(arch_ejec); dir_byte=dir_byte+1; } /*establecer la correspondencia de direcciones*/ establecer_correspondencia(dir_carga,tamao_prog); return ((char*)encabezado.dir_ini); } Con esto llegamos al hardware de correspondencia de direcciones, ilustrado en la figura 1.3. Cuando la UCP tiene que realizar un acceso a memoria (lectura o escritura), presenta al hardware de correspondencia de memoria el resultado del clculo de la direccin efectiva. El hardware de correspondencia de direcciones traduce la direccin 1gica a una direccin fsica.

Perspectiva operacional de la correspondencia de direcciones.

10

LIGADURA DE SUBRUTINAS El enlace de una subrutina es la estructura con que se comparte la informacin entere el involucrado. El involucrado proporciona la direccin 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 aadir 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 algn elemento accesible por el que se suele denominarse librera porque ah estn 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: Vincular entre lenguajes es decir combinar el poder computacional de un lenguaje de alto nivel con el eficiente procesamiento del lenguaje ensamblador. Facilitar el desarrollo de proyectos largos en los cuales equipos diferentes proceden sus mdulos separadamente. Incrustar partes de un programa durante su ejecucin a causa del gran tamao del programa. Cuando se utilizan subrutinas en unos programas, el cdigo ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecucin. Para esto antes de cargar un programa debe ligarse su cdigo objeto de cada una de las subrutinas involucradas por el obtenido as por un programa ejecutable que tiene tanto el cdigo del modulo involucrado como el cdigo de los mdulos involucrados.

11

You might also like