4to Software de Sistemas UNIDAD IV
-
Upload
nehalenia-irais-cruz-sauceda -
Category
Documents
-
view
26 -
download
4
Transcript of 4to Software de Sistemas UNIDAD IV
2012
UNIDAD IV
SOFTWARE DE SISTEMAS
Unidad 4 Ligadores y cargadores
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.
Cargador:
Es un programa especial, parte del sistema operativo que tiene como propósito
colocar en la memoria las instrucciones y datos de un programa o información
codificada en lenguaje máquina, para que entonces la computadora pueda
procesarla. Un cargador es un programa que realiza la función de carga, pero
muchos cargadores también incluyen relocalización y ligado.
Algunos sistemas tienen un ligador para realizar las operaciones de enlace, y un
cargador separado para manejar la relocalización y la carga. Los procesos de
ensamblado y carga están íntimamente relacionados.
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 CARGADOR Y UN LIGADOR
Las funciones de un cargador son:
Colocar un programa objeto en la memoria e iniciar su ejecución.
Si tenemos un cargador que no necesita realizar las funciones de ligado y
relocalización de programas, su operación 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 código
objeto que contiene pasa a la dirección de memoria indicada. Cuando se
encuentra el registro de fin, el cargador salta a al dirección especificada para
iniciar la ejecución del programa cargado. Un programa objeto contiene
instrucciones traducidas y valores de datos del programa fuente, y específica
direcciones en memoria donde se cargarán estos elementos.
Las funciones de un cargador son relativamente sencillas y consisten en extraer
información de algún 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 traducción: cargar
el programa en memoria donde puede ser ejecutado.
Una opción típica del cargador permite la selección de fuentes alternativas de
entrada. Otros mandatos permiten al usuario eliminar símbolos externos o
secciones de control completas.
También es posible cambiar referencias externas dentro del programa que se está
cargando, La mayoría de los cargadores permiten al usuario especificar
alternativas para búsqueda por medio de una proposición de tipo LIBRARY.
Las funciones de un ligador:
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.
4.1.1 Liga de bibliotecas de codigo objeto
Liga de bibliotecas de codigo objeto
Ligadores Estaticos
Ligador estatico
Cuando se utilizan subrutinas en un programa, 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 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 liga en un archivo que podrá ser utilizado por
un cargador, o el mismo programa ligador puede también realizar la tarea de
carga. Esto último 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 ligar todos los módulos cada vez que se
necesite ejecutar el programa.
ESTE ENLACE SE LLAMA ESTÁTICO porque se realiza antes de ejecutar el
programa.
Ligadores Dinamicos
. Ligado dinámico El ligado 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. De
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 ligado dinámico evita
la necesidad de cargar la biblioteca completa para cada ejecución. El ligado
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. Para realizar la carga de ligado de
una subrutina llamada se puede utilizar varios mecanismos distintos. En el método
que se analiza aquí, las rutinas que se carguen dinámicamente deben llamarse
por medio de una solicitud de servicio al sistema operativo. Este método también
podría considerarse como una solicitud a una parte del cargador que se mantiene
en la memoria durante la ejecución del programa. Cuando se utiliza ligado
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.
4.1.2 Ligadores Estaticos
Ligado estatico
Cuando se utilizan subrutinas en un programa, 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 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 liga en un archivo que podrá ser utilizado por
un cargador, o el mismo programa ligador puede también realizar la tarea de
carga. Esto último 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 ligar todos los módulos cada vez que se
necesite ejecutar el programa.
4.1.3 Ligadores Dinamicos
Ligado dinámico El ligado 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. De
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 ligado dinámico evita
la necesidad de cargar la biblioteca completa para cada ejecución. El ligado
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. Para realizar la carga de ligado de
una subrutina llamada se puede utilizar varios mecanismos distintos. En el método
que se analiza aquí, las rutinas que se carguen dinámicamente deben llamarse
por medio de una solicitud de servicio al sistema operativo. Este método también
podría considerarse como una solicitud a una parte del cargador que se mantiene
en la memoria durante la ejecución del programa. Cuando se utiliza ligado
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.
4.2 Cargadores
Un cargador es un programa que coloca en la memoria para su ejecución, el
programa guardado en algún dispositivo de almacenamiento secundario.
El cargador consiste en un juego de instrucciones que permiten al dispositivo de
entrada ( teclado ó unidad de cinta ) asignar la dirección de inicio de la memoria y
asegurar que el computador leerá el programa y lo cargara byte a byte.
Las funciones mas importantes de un cargador son: colocar un programa objeto
en la memoria e iniciar su ejecución. Si tenemos un cargador que no necesita
realizar las funciones de ligado y relocalización de programas, su operación es
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 lee cada registro de
texto, el código objeto que contiene pasa a dirección de la memoria indicada.
Cuando se encuentra el registro de fin, el cargador salta a la dirección
especificada para iniciar la ejecución del programa cargado. Un programa objeto
contiene instrucciones traducidas y valores de datos del programa fuente y
específica direcciones en memoria dónde cargaran estos elementos. Carga, que
lleva el programa objeto a la memoria para su ejecución.
Relocalización, que modifica el programa objeto de forma que puede cargarse en
una dirección diferente de la localidad especificada originalmente. Ligado, que
combina dos o más programas objeto independientes y proporciona la información
necesaria para realizar referencias entre ellos.
Un cargador es un programa del sistema que realiza la función de carga, pero
muchos cargadores también incluyen relocalización y ligado. Algunos sistemas
tienen un ligador( o editor de ligado) para realizar las operaciones de enlace, y un
cargador separado para manera la relocalización y la carga.
En la mayoría de los casos todos los traductores de programas (esto es,
ensambladores y compiladores) de un sistema en particular producen programas
objeto en el mismo formato. De esta misma forma, puede usarse el cargador o
ligador del sistema con independencia del lenguaje de programación fuente
original, se suele utilizar el término cargador en lugar de cargador y ligador, los
procesos de ensamblado y carga están íntimamente relacionados entre sí. Se han
desarrollado herramientas especiales de software, llamadas cargadores, para
asistir al programados en la carga del programa. El cargador es normalmente un
programa pequeño que permite al usuario entrar directamente las palabras de
instrucción y datos a direcciones concretas de la memoria, mediante un teclado o
una cinta magnética.
4.2.1 Carga Absoluta y Relocalizable
El proceso de carga absoluta consiste en que con la máquina vacía ó inactiva no
hay necesidad de hacer relocalización de programas tan solo se puede especificar
la dirección absoluta del programa que se cargue en primer lugar.
En la mayoría de los casos este programa es el sistema operativo que ocupa un
lugar predefinido en la memoria. Esto significa que se necesitan algunos medios
para realizar las funciones de el cargador absoluto. Una opción es que el operador
introduzca en la memoria el código objeto de un cargador absoluto, utilizando los
interruptores en la consola del computador.
Algunos computadores requerían que el operador hiciera exactamente eso. Sin
embargo este proceso es demasiado incomodo y propenso a errores para ser una
buena solución del problema.
Relocalización:
Los cargadores que permiten la relocalización de programas se denominan
cargadores relocalizadores o relativos.
El primer método se utiliza un registro de modificación para describir cada parte
del código objeto que se ha de cambiar al relocalizar el programa. En la Fig. 3.3 se
muestra un programa SIC/XE que se emplea para ilustrar este primer método de
especificación de la relocalización. La mayoría de las instrucciones de este
programa manejan direccionamiento relativo o inmediato. Las únicas partes del
programa ensamblado que contienen direcciones reales son las instrucciones con
formato extendido de las líneas 15, 35 y 65.
En la Fig. 3.4 se muestra el código objeto correspondiente al código fuente de la
Fig. 3.3. Obsérvese que hay un registro de modificación para cada valor que se ha
de cambiar durante la relocalización (en este caso, 15, 35 y 65). Cada registro de
modificación especifica la dirección inicial y la longitud del campo cuyo valor se va
alterar y después describe la modificación a realizar. En este Ejemplo, todas las
modificaciones suman el valor del símbolo COPY, que representa la dirección
inicial del programa.
Algunos computadores proporcionan una posibilidad de relocalización por
hardware que elimina en parte la necesidad de que el cargador efectúe la
relocalización de programas.
es todo las imagenes quedan pendientes.
4.2.2 Cargadores Estaticos
EL TEMA Cargadores Estaticos SE ENCUENTRA ESPERANDO TUS
CONOCIMIENTOS.
Estoy invitando a todos los maestros y profesionales de esta area y/o carrera a
colaborar construyendo este sitio dedicado a esta hermosa y util profesion
aportando el material apropiado a cada uno de los mas de 1,000 temas que lo
componen.
4.2.3 Cargadores Dinamicos
CARGADORES DINAMICOS
El cargador dinámico (dld.so) se utiliza para cargar dinámicamente bibliotecas
compartidas durante el inicio ejecutable.
� Un cargador dinámico es útil cuando no es posible asignar en memoria un
programa completo, dicho cargador se basa en el binder para operar de esta
forma. Cada estructura se coloca dinámicamente en memoria. En este esquema
cada módulo se va intercalando en memoria conforme se requiere, ese es el
concepto de cargador dinámico.
*4.3 Paso del control al sistema operativo