Vous êtes sur la page 1sur 21

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.

FUNCIN
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 FUNCIONES PRINCIPALES 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 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 re localizador 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.
LIGADOR 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 ligarse 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 liga en un archivo que
podr ser utilizado por un cargador, o el mismo programa ligador 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 ligar
todos los mdulos cada vez que se necesite ejecutar el programa.
LIGADURAS 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 prologo 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.

LIGADOR EN C++
Si algn archivo fuente hace referencia a funciones de una biblioteca o de
funciones que estn definidas en otros archivos fuentes, el ligador combina
estas funciones (con main ()) para crear un archivo ejecutable. Las referencias
a variables externas en esta etapa son resueltas.

USO DE LAS BIBLIOTECAS


C es un lenguaje extremadamente pequeo. Muchas de las funciones que
tienen otros lenguajes no estn en C, por ejemplo, no hay funciones para E/S,
manejo de cadenas o funciones matemticas.
La funcionalidad de C se obtiene a travs de un rico conjunto de bibliotecas de
funciones.
Como resultado, muchas implementaciones de C incluyen bibliotecas estndar
de funciones para varias finalidades. Para muchos propsitos bsicos estas
podran ser consideradas como parte de C. Pero pueden variar de mquina a
mquina.
Un programador puede tambin desarrollar sus propias funciones de biblioteca
e incluso bibliotecas especiales de terceros, por ejemplo, NAG o PHIGS
Publicadas por Cargadores, Ligadores y Enlazadores a la/s 11:33 a. m. No hay
comentarios.:
Enviar esto por correo electrnicoBlogThis!Compartir en TwitterCompartir en
FacebookCompartir en Pinterest
ENLAZADOR
Es un programa que toma los objetos generados en los primeros pasos del
proceso de compilacin, la informacin de todos los recursos necesarios
(biblioteca), quita aquellos recursos que no necesita, y enlaza el cdigo objeto
con su(s) biblioteca(s) con lo que finalmente produce un fichero ejecutable o
una biblioteca. En el caso de los programas enlazados dinmicamente, el
enlace entre el programa ejecutable y las bibliotecas se realiza en tiempo de
carga o ejecucin del programa.

De igual modo se puede decir que tambin es un mdulo que junta los
ficheros de cdigo objetos(generados en la primer parte de la compilacin), la
informacin de todos los recursos necesarios (biblioteca), elimina los recursos
que no se necesitan y enlaza el cdigo objeto con sus bibliotecas. Finalmente
produce el fichero ejecutable o una biblioteca.
Existen programas que se enlazan dinmicamente, esto significa que este
proceso se hace en el momento que se carga el programa.
TIEMPO DE EJECUCIN:
Se denomina tiempo de ejecucin al intervalo de tiempo en el que un
programa de computadora se ejecuta en un sistema operativo. Este tiempo se
inicia con la puesta en memoria principal del programa, por lo que el sistema
operativo comienza a ejecutar sus instrucciones. El intervalo finaliza en el
momento en que ste enva al sistema operativo la seal de terminacin, sea
sta una terminacin normal, en que el programa tuvo la posibilidad de
concluir sus instrucciones satisfactoriamente, o una terminacin anormal, en el
que el programa produjo algn error y el sistema debi forzar su finalizacin.
Este trmino suele emplearse, en oposicin a tiempo de compilacin, para
indicar si una accin o hecho sucede en uno u otro tiempo.

BIBLIOTECA INFORMATICA
En ciencias de la computacin, una biblioteca (del ingls library) es un
conjunto de subprogramas utilizados para desarrollar software. Las bibliotecas
contienen cdigo y datos, que proporcionan servicios a programas
independientes, es decir, pasan a formar parte de estos. Esto permite que el
cdigo y los datos se compartan y puedan modificarse de forma modular.
Algunos programas ejecutables pueden ser a la vez programas independientes
y bibliotecas, pero la mayora de estas no son ejecutables. Ejecutables y
bibliotecas hacen referencias (llamadas enlaces) entre s a travs de un

proceso conocido como enlace, que por lo general es realizado por un software
denominado enlazador.
La mayora de los sistemas operativos modernos proporcionan bibliotecas
que implementan los servicios del sistema. De esta manera, estos servicios se
han convertido en una "materia prima" que cualquier aplicacin moderna
espera que el sistema operativo ofrezca. Como tal, la mayor parte del cdigo
utilizado por las aplicaciones modernas se ofrece en estas bibliotecas.
El GM ENLAZADOR:

Que es:
Son aquellos utilizaran su poder para aumentar tu articulo con LAPICES
repetidos o donde no deben estar . Si tienes un articulo con huecos , ser
enlazado con 2 lpices iguales o en lugares donde no deben y lo mejor: 100%
de probabilidad de xito!.
Cmo conseguimos un GM ENLAZADOR?
Se consigue mediante AeriaPoints, Ya NO aparecer en eventos ocasionales, es
decir, no es un articulo permanente en el Almacn del artculos AP. Estos
eventos solian estar en escalas de premios, ruleta de premios, otros.
Cmo hacer para enlazar el artculo que queremos? :
1) Este "GM Enlazador" bajo ningn concepto debamos sacarlo del banco, as
que NO LO QUITES DEL BANCO.
2) Ahora que ya tenemos el artculo en el banco debemos proceder al
siguiente paso. Nos dirigimos a la bodega npc, donde guardamos:
La pieza de armadura, arma o accesorio que queran que se enlazarla.
El lpiz que quieras para enlazar la pieza de armadura, arma o accesorio que
queremos.
Cuntos tipos de enlazadores existen?

GM Enlazador accesorios

GM Enlazador Normal.

GM Enlazador Premium.

#GM Enlazador Premium Super# .

Cuantos enlaces son por GM enlazador?


Cada GM Enlazador vale solamente un enlace.
Poda utilizar un GM Enlazase normal para enlazar elementales lvl2 ?
Si, ya no se puede, cada GM Enlazador normal tenia un valor especfico.

As que ya no puedes utilizar un GM Enlazador normal para que te hagan lo


quieras.
Poda enlazar cualquier artculo con el GM Enlazador normal?
Si, el nivel de conocimiento sobre los artculos que deseas enlazar, es
irrelevante, solo necesita ser mas listo que los dems.
Enlazadores referentes a la Programacion:
Enlazado: Este es el concepto detrs de toda la programacin: que una
mquina adecuada de computacin en general puede emular los ms
especficos. Un programa de ordenador no es ms que un medio de convertir
un motor de computacin de uso general en uno de propsito especial.
Sinopsis:
El proceso de crear un ejecutable comienza por la compilacin de varias
unidades de compilacin independientes. Los ficheros objeto resultantes, junto
con libreras ya existentes y algn trozo de cdigo aadido, son despus
agrupados de forma ordenada en un solo fichero que constituye el ejecutable.
Este proceso de agrupacin y ordenacin es realizado por un programa
especial, el enlazador ("Linker"), cuyo nombre evoca una de sus principales
funciones, el enlazado ("Binding"). Este proceso es responsable de que, en el
ejecutable, cada instancia de un identificador sea asociada correctamente con
una funcin u objeto particular. A efectos prcticos esto significa que la
mayora de los identificadores utilizados por el programador desaparecen y son
sustituidos por direcciones concretas de memoria donde se encuentran los
objetos referenciados.
Destacar que el enlazado es un proceso independiente del lenguaje de
programacin utilizado. Es decir, no es especfico de C++. Para obtener un
ejecutable, el linker puede partir de una serie de objetos que se han obtenido
de la compilacin de distintos fuentes, incluso escritos originalmente en
lenguajes distintos. La nica condicin exigida es que tales ficheros-objeto,
producidos por un compilador o por un macro-ensamblador, sean del formato
adecuado.
De forma sinptica el proceso responde al siguiente esquema:
En el cdigo fuente:
...
func1();

// invocacin de una funcin

...
El compilador traslada la sentencia anterior a una instruccin del siguiente
aspecto:
call func1

El enlazador sustituye el nemnico func1 por una direccin concreta, donde


comienza el cdigo correspondiente a la funcin. Algo parecido a:
call 0x4000000
Sin embargo, aunque la funcin primordial del enlazador es resolver todas las
referencias que puedan existir en el programa y agrupar todos los mdulos en
un solo fichero, que pueda ser cargado y ejecutado por el Sistema Operativo,
realiza adems otras funciones. Por ejemplo, insertar en el fichero resultante el
cdigo del mdulo inicial, que es el encargado de iniciar la ejecucin.
Nota: En el caso concreto de Borland C++ el "Linker" es el programa
ILINK32.EXE. Pero es bastante raro que sea ejecutado explcitamente durante
el proceso de construccin de un ejecutable. Lo normal es que sea invocado
indirectamente, a travs del programa supervisor. En concreto, el compilador
BCC32.EXE invoca al enlazador incluso cuando no hay nada que compilar. Por
ejemplo, el comando:
BCC32 mainfile.obj sub1.obj mylib.lib.
Conduce al enlazado de los ficheros MAINFILE.OBJ, SUB1.OBJ y MYLIB.LIB para
producir el ejecutable MAINFILE.EXE. Para ello, no solo invoca al enlazador, con
los argumentos adecuados, tambin incluye por su cuenta el mdulo de inicio
C0W32.OBJ; la librera CW32.LIB y la librera de importacin IMPORT32.LIB.
Adems, le pasa la opcin /c (distinguir maysculas y minsculas).
Por su parte, el enlazador GNU es el programa ld.exe (suponemos la versin
MinGW para Windows) y para la construccin de proyectos C++, generalmente
suele ser invocado por el compilador (g++.exe). Por ejemplo, para enlazar los
ficheros del ejemplo anterior en un solo ejecutable main.exe, se utilizara el
siguiente comando:
g++ mainfile.o sub1.o mylib.lib -o "main.exe"
Propiedades del enlazado:
Respecto al enlazado existen dos aspectos a tener en cuenta: uno de ellos
tiene que ver con una especie de "mbito" de nombres dentro del ejecutable.
El otro se refiere a "cmo" se enlaza un identificador con el objeto al que
representa.
Tipos de Enlazados:
a)

Enlazado Esttico:

Empezaremos por la segunda de las consideraciones: Hemos dicho que


durante el enlazado, el "Linker" asocia cada identificador con el objeto
correspondiente. Lo que equivale a decir que asocia el identificador con la
direccin del objeto. Esto puede efectuarse en tiempo de compilacin o en
runtime. Cuando esto puede quedar completamente definido en tiempo de
compilacin, se dice que se trata de un enlazado previo o esttico
("Earlybinding"). As pues, enlazado esttico significa que cuando, por ejemplo,

el compilador genera una llamada a una funcin determinada, el enlazador


puede resolverla mediante la direccin absoluta del cdigo que debe
ejecutarse. En el caso del esquema anterior , el enlazador pudo determinar
que func1comienza en la direccin 0x4000000. Puede ser el caso de una
funcin sobrecargada en la que el compilador puede saber que instancia
corresponde a una invocacin por el anlisis de los argumentos utilizados.
Para la resolucin antes descrita, cada vez que el enlazador encuentra el
identificador de una variable o de una funcin, debe buscar en la unidad de
compilacin que est utilizando y en caso de no encontrarlo en ella, en el resto
de mdulos .obj; en los ficheros de recursos .res, y en las libreras .lib que
hemos ordenado enlazar juntos. Si finalmente la variable, funcin o recurso no
aparece, el enlazador lanza un mensaje de error:
unresolvedexternalreference...
A efectos prcticos, lo anterior supone que cdigo responsable de la
funcionalidad del programa, se encuentran en el propio ejecutable, lo que
presenta la ventaja de que la aplicacin no depende de la existencia de
mdulos exteriores. Sin embargo, esto es rarsimo en la programacin actual.
Sobre todo porque en los entorno multiusuario, las aplicaciones no pueden
controlar directamente los dispositivos del Sistema, sino que debe hacerlo
mediante llamadas a determinados servicios situados fuera del ejecutable (lo
contrario, adems de ser imposible, exigira que cada ejecutable englobara
gran parte del propio SO).
b) Enlazado Dinmico:
En ocasiones las cosas no suceden como se han descrito en el prrafo
anterior. Hay veces en que hasta el momento de la ejecucin, el programa no
puede (o no quiere) determinar la direccin de la funcin que se invoca. Esta
situacin se presenta tpicamente cuando se usan las denominadas libreras
dinmicas y en la POO, cuando se programan operaciones genricas con
objetos sin saber que objeto concreto (instancia de la clase) la utilizar en su
momento. Es decir, se utilizan clases polimrficas.
Para comprender el proceso, supongamos una variacin del esquema anterior,
en el que la funcin invocada no se encuentra en un mdulo objeto, sino en
una librera dinmica (DLL) que solo ser cargada en el momento de la
ejecucin del programa o incluso ms tarde; no cuando este arranca, sino
cuando se realiza la invocacin a la funcin. En estas condiciones, el enlazador
no puede conocer la direccin de func1. La solucin adoptada es precisamente
el enlazado o dinmico ("Late binding").
En este tipo de enlazado, parte del cdigo necesitado por la aplicacin se
encuentra en ficheros distintos del propio ejecutable. Por ejemplo, en las
conocidas libreras .DLL. El inconveniente es que la ejecucin exige la
presencia de todos los mdulos externos (que pueden estar efectivamente
presentes o no). La ventaja es que determinadas habilidades, sobre todo las
del propio Sistema Operativo, y otras muy comunes, no necesitan estar
duplicadas en cada ejecutable, con la consiguiente economa de espacio. Los

ejecutables resultan as ms pequeos. Adems, mltiples programas pueden


compartir los mismos mdulos.
Como ejemplo ilustrativo de lo anterior, podemos citar la utilidad Linux que
permite encadenar (link) ficheros y directorios. Esta utilidad est disponible en
dos versiones: La primera sln, utiliza enlazado esttico; la segunda ln, enlazado
dinmico. En mi sistema (SuSE 9.0), el tamao de ambos ejecutables es el
siguiente:
/sbin/sln

429308 Bytes

/bin/ln

22864 Bytes

Linux dispone incluso de la utilidad ldd que permite conocer el tipo de enlazado
que tiene un ejecutable y, en su caso, de qu mdulos depende. En mi sistema
obtengo el siguiente resultado para el encadenador dinmico [3]:
# ldd -v /bin/ln
libc.so.6 => /lib/i686/libc.so.6 (0x40028000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Versioninformation:
/bin/ln:
libc.so.6 (GLIBC_2.3) => /lib/i686/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i686/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i686/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i686/libc.so.6
libc.so.6 (GLIBC_2.2) => /lib/i686/libc.so.6
/lib/i686/libc.so.6:
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
Libreras de enlazado dinmico:
Cuando los recursos a utilizar se encuentran en libreras de enlazado
dinmico y en consecuencia, su ubicacin exacta no puede ser establecida en
tiempo de enlazado, se recurre a un artificio algo ms tortuoso que en el caso
de enlazado esttico. En principio, la informacin sobre la localizacin de las
funciones externas, estn contenidas en las denominadas libreras de
importacin que tienen la misma terminacin .lib/.a que las libreras normales,
aunque en realidad, no contienen cdigo, sino registros con el nombre del
mdulo que contiene la funcin (fichero .dll), as como el nombre o nmero del

punto de entrada a la funcin dentro del fichero. El enlazador busca en estas


libreras de importacin de la misma forma que lo hace con el resto de
ficheros .obj, .res y .lib que se compilan. Cuando el enlazador encuentra esta
informacin la anota en la forma que se describe a continuacin y da el asunto
por resuelto sin original ningn error de enlazado.
Nota: Las libreras de importacin pueden contener datos sobre una o varias
DLLs. En el caso de la programacin C++ para Windows, esta situacin es
frecuentsima, ya que la mayor parte de propio Sistema Operativo est
repartido en multitud de DLLs. En dicho Sistema, las libreras de importacin
ms importantes estn en los ficheros kernel32.lib; user32.lib ygdi32.lib.
Recordar tambin que entre las herramientas que acompaan al compilador
C++ de Borland, est la utilidad implib.exe, que puede crear una librera de
importacin a partir de una DLL. El resto de compiladores suelen disponer de
herramientas anlogas.
Los compiladores C++ construyen en cada ejecutable una tabla de entradas
que contiene la direccin de todas las funciones de direccin conocida, y
adems, para poder realizar el enlazado dinmico, con la informacin obtenida
de las libreras de importacin construyen otra tabla denominada Tabla de
Direcciones Importadas o Itable ("ImportAddressTable"). Cada funcin cuya
direccin no pueda ser conocida en tiempo de compilacin, tiene un sitio en la
tabla, en el que se inserta un pequeo trozo de cdigo ("thunk") que ms
tarde, en tiempo de ejecucin, podr establecer la verdadera direccin.
La invocacin de una funcin como func1 que est situada en una librera de
enlazado dinmico, da lugar a un "thunk" del siguiente aspecto:

jmp DWORD PTR __imp_func1


En este caso __imp_func1 es una direccin conocida: la del "slot" de func1 en la
tabla de direcciones importadas del ejecutable. Para que todo funcione
correctamente solo es preciso que el cargador de la DLL, que utiliza la
informacin obtenida de la librera de importacin, actualice dicha tabla en el
momento de la carga.
Funciones Virtual:
Tambin existen situaciones en las que es preciso utilizar enlazado dinmico
aunque el ejecutable no utilice DLLs. En la POO se presentan situaciones en las
que se programan operaciones (mediante funciones virtuales) cuya definicin
es distinta para distintos objetos. En estos casos, cuando se necesita que un
objeto ejecute uno de sus mtodos, el cdigo que deber llamarse no est
determinado hasta el momento de la ejecucin, porque depende del objeto que
realiza la invocacin.
Los compiladores pueden utilizar cualquier mecanismo para resolver el
problema, pero el ms comn consiste en la utilizacin de tres elementos:

Para cada clase en la que existan mtodos susceptibles de este


comportamiento (mtodos virtuales), se crea una tabla denominada vtable [2],
de punteros con las direcciones de dichas funciones. La vtable realiza en este
caso la misma funcin que la Itable cuando el programa utiliza enlazado
dinmico debido a la existencia de libreras DLL.
En cada objeto que se instancia de estas clases, se incluye automticamente
un puntero oculto vptr a la vtable.
En cada invocacin a un mtodo de un objeto, se aade un pequeo trozo de
cdigo ("thunk"), que permite calcular la direccin de la funcin que debe
utilizarse. Este cdigo suele ser pequeo, contiene solo unas pocas
instrucciones ensamblador, y utiliza la vtable y el vptr para seleccionar en
tiempo de ejecucin la funcin correspondiente. Cada objeto puede
comportarse de forma distinta segn este cdigo especial. As que cuando se
le enva un mensaje, es este cdigo el que calcula y decide que hacer con el
mensaje (el proceso se describe con ms detalle al tratar de las funciones
virtuales 4.11.8a). Naturalmente esta versatilidad tiene su coste de eficacia,
de forma que las funciones con enlazado dinmico sonmenos eficientes que las
de enlazado esttico.
En C++ el programador puede decidir en que funciones desea esta capacidad
de enlazado retrasado utilizando la palabra-clave virtual. Cada vez que en una
clase C se declara una funcin virtual, la case deviene en polimrfica ( 4.11.8)
o abstracta ( 4.11.8c), lo que obliga al compilador a incluir en la estructura de
la clase un puntero vptr que seala a una estructura de tipo matriz, la vtable,
que contiene un "slot" o espacio para un puntero-a-funcin por cada funcin
virtual que se haya declarado. Si C es a su vez derivada de una clase-base B,
la vtable incluye espacio para las direcciones de cualquier funcin virtual que
pudiera existir en B y en cualquier clase antecesora de esta. A su vez, obliga
tambin a incluir una vtable en cualquier clase derivada de C. Existe una sola
vtable para cada clase y los datos (punteros-a-funcin) contenidos en ella son
estticos, en el sentido de que no dependen de ninguna instancia u objeto
particular de la clase.
Atributos de enlazado:

Todos los identificadores tienen alguno de los tres atributos de enlazado


(estrechamente relacionados con su mbito): externo, interno, o sin enlazado.
Estos atributos son propios para cada identificador en cada unidad de
compilacin, y vienen determinados por la situacin y el formato de la
declaracin en que se introdujo cada identificador, as como del uso explcito o
implcito (por defecto) de los especificadores de tipo de almacenamiento static
y extern.
El tipo de enlazado define una especie de mbito, pues indica si el mismo
nombre en otro mbito se refiere al mismo objeto (variable o funcin) o a otro
distinto.

Cada instancia de un identificador con enlazado externo representa el mismo


objeto o funcin a travs del total de ficheros y libreras que componen el
programa. Es el tipo de enlazado a utilizar con objetos cuyo identificador
puede ser utilizado en unidades de compilacin distinta de aquella en la que se
ha definido. Por esta razn se dice que las etiquetas con enlazado externo son
"globales" para el programa.
Recuerde: enlazado externo visibilidad global.
Cada instancia de un identificador con enlazado interno representa el mismo
objeto o funcin solo dentro del mismo fichero. Los objetos con el mismo
nombre en otros ficheros son objetos distintos. Este tipo de objetos solo
pueden utilizarse en la unidad de compilacin en que se han definido, por lo
que suele decirse que las etiquetas con enlazado interno son "locales" a sus
unidades de compilacin.
Recuerde: enlazado interno visibilidad de fichero.
Las unidades sin enlazado representan entidades nicas. Por ejemplo, las
variables declaradas dentro de un bloque, que no contengan el modificador
extern, representan entidades nicas dentro del bloque, sin relacin con nada
en el exterior del mismo. Los objetos con el mismo nombre en otros bloques
son objetos distintos. No obstante, es posible asignar punteros a este tipo de
objetos sin enlazado, de forma que puedan ser accedidos desde cualquier
punto del programa, incluso desde otras unidades de compilacin.
Recuerde: sin enlazado visibilidad de bloque.
Como puede verse, el hecho que un identificador utilizado en diversas
unidades de compilacin seale potencialmente a la misma entidad en todos
los mdulos, depende exclusivamente del tipo de enlazado que tenga en cada
uno de ellos.
Reglas de enlazado:
En un fichero, cualquier objeto o identificador que tenga mbito global deber
tener enlazado interno si su declaracin contiene el especificador static.
Si el mismo identificador aparece con ambos enlazados externo e interno,
dentro del mismo fichero, tendr enlazado externo.

Si en la declaracin de un objeto o funcin aparece el especificador de tipo de


almacenamiento extern, el identificador tiene el mismo enlazado que cualquier
declaracin visible del identificador con mbito global. Si no existiera tal
declaracin visible, el identificador tiene enlazado externo.
Si una funcin es declarada sin especificador de tipo de almacenamiento, su
enlazado es el que correspondera si se hubiese utilizado extern ( es decir,
extern se supone por defecto en los prototipos de funciones).

Si un objeto (que no sea una funcin) de mbito global a un fichero es


declarado sin especificar un tipo de almacenamiento, dicho identificador tendr
enlazado externo (mbito de todo el programa). Como excepcin, los objetos
declarados const que no hayan sido declarados explcitamente extern tienen
enlazado interno.
Los identificadores que respondan a alguna de las condiciones que siguen
tienen un atributo sin enlazado:
a) Cualquier identificador distinto de un objeto o una funcin (por ejemplo, un
identificador typedef ).
b) Parmetros de funciones.
c) Identificadores para objetos de mbito de bloque, entre corchetes { } , que
sean declarados sin el especificador de clase extern.
Ejemplo:
int x;
staticst = 0;
voidfunc(int);
intmain() {
for (x = 0; x < 10; x++) func(x);
}
voidfunc(int j) {
st += j;
cout<<st<<endl;
}
Publicadas por Cargadores, Ligadores y Enlazadores a la/s 9:59 a. m. No hay
comentarios.:
Enviar esto por correo electrnicoBlogThis!Compartir en TwitterCompartir en
FacebookCompartir en Pinterest
CARGADOR
En informtica, un cargador es la parte de un sistema operativo que es
responsable de cargar programas en memoria desde los ejecutables (por
ejemplo, archivos ejecutables). El cargador es usualmente una parte del ncleo
del sistema operativo y es cargado al iniciar el sistema y permanece en
memoria hasta que el sistema es reiniciado o apagado. Algunos sistemas
operativos que tienen un ncleo paginable pueden tener el cargador en una
parte paginable de la memoria, entonces a veces el cargador intercambia de
memoria (swapping).

Todos los sistemas operativos que soportan la carga de programas tienen


cargadores. Algunos sistemas operativos empotrados de computadoras
altamente especializadas corren un nico programa y no existen capacidades
de carga de programas, por lo tanto no usan cargadores. Ejemplos de estos
sistemas embebidos se encuentran en equipos de audio para automviles. En
los sistemas Unix, el cargador es el manejador para la llamada del sistema
execve(). Algunas computadoras necesitan cargadores relocalizables, los
cuales ajustan direcciones de memoria (punteros) en un ejecutable para
compensar las variaciones en la cual la memoria disponible de la aplicacin
empieza.
Las computadoras que necesitan de los cargadores relocalizables son aquellos
en los cuales los punteros son direcciones absolutas en vez de compensaciones
de direcciones base del programa. Un ejemplo muy conocido est en los
mainframes IMB Sistema 360 y sus descendientes, incluyendo la serie de los
sistemas Z9. Los ligadores dinmicos son otro tipo de cargador que carga y liga
libreras dinmicas (como dll's). Muchos cargadores permiten al usuario
especificar opciones que modificar el procesamiento estndar descrito. Muchos
cargadores tienen un lenguaje especial de mandatos que se utiliza para
especificar opciones.
Algunas veces existe un archivo independiente de entrada al cargador que
contiene esas proposiciones de control. En ocasiones esas mismas
proposicio3nes tambin pueden estar intercaladas en el flujo primario de
entrada entre los programas objeto. En ciertos sistemas el programador puede
incluso introducir proposiciones de control del cargador en el programa fuente,
y el ensamblador o el compilador retienen esos mandatos como parte del
programa objeto.
Una opcin tpica del cargador permite la seleccin de fuentes alternativas de
entrada, por ejemplo el mandato INCLUDE, puede indicar al cargador que lea el
programa objeto designado en una biblioteca y que lo trate como si fuera parte
de la entrada primaria del cargador. Otros mandatos permiten al usuario
eliminar smbolos externos o secciones de control completas.
CARGADOR LIGADOR
Un cargador es un programa del sistema que realiza la accin de carga.
Algunos sistemas tienen un ligador para realizar las operaciones de enlace, y
un cargador separado para manejar la relocalizacin y la carga. El cargador es
normalmente un programa pequeo que permite al usuario entrar
directamente las palabras de instruccin y datos a direcciones concretas de la
memoria, mediante un teclado o una cinta magntica.
El cargador consiste en un juego de instrucciones que permiten al dispositivo
de entrada (teclado o unidad distinta) asignar la direccin de inicio de la
memoria y asegurar que el computador leer el programa y lo largar byte a
byte. La ligadura de tales recursos puede ser de naturaleza esttica o
dinmica. Esto nos lleva al siguiente proceso: carga: lleva el programa objeto a
la memoria para su ejecucin relocalizacin: modifica el programa objeto de

forma que puede cargarse en una direccin diferente de la localidad


especificada originalmente ligado: combina 2 o ms programas objeto
independientes y proporciona la informacin necesaria para realizar referencias
entre ellos. El ligador realiza la operacin de enlazar programas objetos
independientes. Los editores de ligado pueden efectuar varias funciones
ultimas adems de la simple preparacin de un programa objeto para su
ejecucin estos tambin se pueden utilizar para construir paquetes de
subrutinas u otras secciones de control que suelen utilizar juntas.
Estos pueden ser tiles 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 en complejidad y sobrecarga. La
tarea primaria del enlazador es resolver referencias externas lleva acabo la
siguiente etapa del proceso de traduccin enlazado 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 Funciones:
- Enlazar cdigo intermedio compilado independiente en un solo modulo de
cara resolviendo las diferencias entre Tokens. Incorporada las denominadas
rutinas de librera en caso de solicitarlas el propio programa.
- reunir procedimientos traducidos por separado y enlazarlos para que se
ejecuten como una unidad llamada programa binario ejecutable.
Ahora si mostrar algunos tipos de cargadores.
Arranque Bootstrap Cargadores inciales:
Con la maquina vaca e inactiva, no hay necesidad recoleccin de
programacin, tan solo se puede especificar la direccin especifica del
programa que se carga en primer lugar. En la mayora de los casos este
programa es el sistema operativo, que ocupa un lugar en la memoria. Esto
significa para realizar las funciones. Una opcin es que el operador introduzca
en la memoria el cdigo objeto de un cargador absoluto, utilizando los
interruptores en la consola del computador. Algunos computadores requeran
que el operador hiciera exactamente eso. Sin embargo este proceso es
demasiado incomodo y propenso a errores para hacer una buena solucin del
problema. Ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona
la posibilidad de cargare las rutinas solo cuando y si se necesitan. Si las
subrutinas son grandes o tiene muchas referencias externas se pueden
conseguir ahorros considerables de tiempo y espacio de memoria.
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 los siguientes mtodos:
.

Entrada manual:
Mediante el teclado el usuario teclea el cargador BOOTSTRAP. Despus de
esto, el cargador se carga as mismo en la memoria del computador.
Entrada por ROM:
Es posible tener las instrucciones de inicializacin almacenados
permanentemente en alguna porcin de la ROM, en lugar de introducirlas
manualmente por teclado o por 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.
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 aconectar no son capaces de controlar ningn perifrico. Se hace as
para que sea el usuario el que ponga los programas que le interese ejecutar.

Cargadores ligadores (linker).


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 en
memoria, sino referencias a una direccin especial llamada de reubicacin.
Cargadores absolutos:
El programa cargador pone en memoria las instrucciones guardadas en
sistemas externos.
Independientemente de que sea un cargador inicial, o no sin dichas
instrucciones se almacenan siempre en el mismo espacio de memoria ( cada
vez que se ejecuta el programa cargador ) se dice que es un cargador absoluto.

Montar un programa consiste en aadir al programa objeto obtenido a la


traduccin las rutinasexternas 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 est realizando el
montaje de un programa a buscarlas y las adjunta al programa objeto.

Caractersticas del cargador que dependen de la arquitectura de la


computadora:
1. Relocalizacin:
La primera caracterstica que puede tener un cargador, que depende de la
arquitectura de la computadora es el poder realizar las funciones de
relocalizacin. Un cargador que posee esta capacidad se llama cargador
relativo ("relativeloader"). Este cargador, a medida que va colocando las
instrucciones del programa objeto en memoria, va actualizando las que sean
necesarias para que contengan las direcciones correctas de los datos en
memoria.
Recordemos que en una computadora como la SIC, cada programa se
ensambla con las direcciones de memoria que el programa ocupar, ya que
esta mquina es para un solo usuario y ste puede saber o hasta escoger
dnde su programa se cargar en memoria cuando se ejecute. Pero en una
computadora como la SIC/XE, que posee multiprogramacin (que significa
memoria compartida por varios usuarios a la vez), los diferentes
programadores no saben en qu lugar de memoria se cargar el programa, por
lo que se codifica partiendo de la direccin 0 de memoria, y las direcciones se
modificaran ms tarde. Esa modificacin la hace el cargador relativo.

Recordemos tambin que no todas las instrucciones del programa


ensamblado para la SIC/XE deben relocalizarse o modificarse. La mayora de
las instrucciones se ensamblan relativo al registro Base o al ProgramCounter,
por lo que esas instrucciones no contienen direcciones, si no desplazamientos,
los cuales no se relocalizan. As que solo una pequea fraccin de las
instrucciones de un programa deben relocalizarse.
Estudiaremos dos mtodos para realizar la relocalizacin:
El primer mtodo consiste en usar rcords adicionales en el programa objeto.
Estos rcords se llaman Rcords de Modificacin ("Modification Records"), y es
el ensamblador quien los coloca en el programa objeto, ya que es el
ensamblador el que puede determinar cules instrucciones del programa se
deben relocalizar y cules no. El ensamblador coloca un Rcord de Modificacin
por cada modificacin que haya que hacer a una instruccin. El Rcord de
Modificacin comienza con una M, luego tiene la direccin en memoria que hay
que modificar, y luego tiene el valor que hay que sumar para hacer la
modificacin, o sea, el nombre del programa. El cargador relativo toma el
programa, carga las instrucciones en los "Text Records" a memoria, y cuando
encuentra los Rcords de Modificacin, sustituye ese nombre del programa por
la direccin del programa en memoria para hacer las modificaciones cuando
carga el programa.
Este mtodo no es muy eficiente si hay muchas instrucciones a ser
modificadas, pues se necesita un Rcord de Modificacin para cada
modificacin a realizarse.
El segundo mtodo consiste en modificar el formato de los "Text Records" para
que stos contengan unos bits adicionales, llamados Bits de Relocalizacin. En
cada "Text Record" hay un bit asociado por posicin a cada instruccin en ese
rcord. Si el bit es 1, hay que modificar la instruccin asociada; si el bit es 0, no
hay que modificar el rcord.
Este mtodo es ms eficiente que el anterior pues economiza espacio, pero el
mtodo anterior es ms verstil. Ahora veremos cmo.
2. Resolucin de referencias externas enlace:
La segunda caracterstica que puede tener un cargador, que depende de la
arquitectura de la computadora es el poder resolver las referencias externas en
un programa objeto, esto es, poder enlazar un programa objeto a otro. Un
cargador que posee esta capacidad se llama "linkingloader".
El mecanismo para poder resolver las referencias externas requiere de
comunicacin entre el programador, el ensamblador y el programa de enlace
,El programador tiene a su disposicin dos nuevas directrices al ensamblador.
EXTDEF o "ExternalDefinition" es utilizada para avisar al ensamblador que las
etiquetas en la directriz son definiciones externas, o sea, que son etiquetas
definidas en ese programa pero pueden ser usadas por otros programas.
EXTREF o "External Reference" es la directriz usada para avisar al ensamblador

que las etiquetas en la directriz son referencias externas, es decir, que son
definidas en otro programa pero ese programa las usa.
Cuando el ensamblador encuentra la directriz EXTDEF coloca un nuevo
rcord en el programa objeto, llamado "Define record" con las etiquetas que
pueden ser usadas por otros programas. Luego el ensamblador, a medida que
va ensamblando las instrucciones, trata de resolver toda referencia a etiqueta
hallada, y cuando no puede hacerlo pues es una etiqueta externa, aade un
Rcord de Modificacin al programa objeto para modificar la instruccin con la
referencia externa. De ah la ventaja de los Rcords de Modificacin sobre los
Bits de Relocalizacin: con stos ltimos no podemos resolver referencias
externas.
Cuando se van a cargar los diferentes programas (en este punto no se llaman
programas, si no secciones de control), el "linkingloader" realiza dos pasadas
sobre los programas objetos. En la primera pasada crea una tabla llamada
ESTAB o "External Symbol Table" con las direcciones de todas las etiquetas que
son referencias externas. En la segunda pasada es que se carga, relocaliza y
enlaza el programa. ESTAB es una tabla "hash", similar a SYMTAB.
Caractersticas del cargador que no dependen de la arquitectura de la
computadora.
1. Bsqueda automtica en libreras
A veces queremos usar una subrutina (por ejemplo, SquareRoot) que est
definida en una librera o archivo donde se encuentran numerosas subrutinas
prehechas. Al usar una subrutina de una librera, estamos haciendo una
referencia externa en nuestro programa. El programa de enlace debe buscar
automticamente esa subrutina en la librera y enlazarla con nuestro
programa. Debemos ser capaces de indicar al programa de enlace los nombres
de las librerias en las que se deben buscar las referencias externas, si es que
no estn en otro programa objeto a enlazarse con el programa. En general, se
buscan estas referencias en una librera general del sistema, pero podemos
indicar al programa de enlace que busque en libreras especficas, como por
ejemplo de Input/Output, matemtica, grfica, etc.
2. Comandos al cargador/programa de enlace:
Muchos cargadores y/o programas de enlace permiten que se incluyan
comandos a ste en el programa fuente. El traductor sabe que son comandos
al "loader" y no los procesa, si no que los pasa al programa objeto. Ejemplos de
estos comandos pueden ser:
- incluir una librera especfica para que se busquen subrutinas ah
- cambiar nombres a subrutinas
- que NO se resuelvan referencias externas (por ejemplo si no deseamos
ejecutar el programa en ese momento, pues el resolver referencias externas
hace que el programa ocupe ms espacio en memoria

Opciones en el diseo de un cargador:


Las opciones en el diseo del cargador responden a cmo se combinan las
tres funciones bsicas estudiadas en este captulo, cargar, relocalizar y enlazar.
La primera opcin es el "linkingloader" ya discutido, donde un solo programa
hace todas las tareas.
La segunda opcin es el uso de un "linkage editor" para enlazar solamente,
creando un programa enlazado, es decir, con las referencias externas resuelta.
A este programa se le llama "load module". Luego el cargador hace la
relocalizacin mientras va cargando el programa. El "load module" o imagen
ejecutable se guarda en disco hasta que se vaya a ejecutar. Esta alternativa es
til si el programa se va a ejecutar muchas veces sin modificarse, pues se
guarda la imagen con las referencias externas resueltas, y cada vez que se
vaya a ejecutar el programa solo se carga y se relocaliza, ahorrando tiempo
La tercera opcin es posponer la resolucin de referencias externas hasta
que el programa est ejecutndose, usando una tcnica llamada
"dynamiclinking". Cuando se ejecuta una instruccin con una referencia
externa, en ese momento el sistema operativo interrumpe brevemente al
programa, carga la seccin de control que contiene la referencia externa, y
contina la ejecucin del programa. Esta alternativa es til cuando el programa
hace referencia a muchas rutinas que se ejecutarn con poca probabilidad (por
ejemplo, rutinas de manejo de errores). De esta forma solo se carga a memoria
loque seguramente se usar; las rutinas que se invocan solo en casos
excepcionales se cargan si se invocan

Vous aimerez peut-être aussi