4to Software de Sistemas UNIDAD IV

14
2012 UNIDAD IV SOFTWARE DE SISTEMAS

Transcript of 4to Software de Sistemas UNIDAD IV

Page 1: 4to Software de Sistemas UNIDAD IV

2012

UNIDAD IV

SOFTWARE DE SISTEMAS

Page 2: 4to Software de Sistemas UNIDAD IV

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

Page 3: 4to Software de Sistemas UNIDAD IV

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

Page 4: 4to Software de Sistemas UNIDAD IV

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

Page 5: 4to Software de Sistemas UNIDAD IV

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

Page 6: 4to Software de Sistemas UNIDAD IV

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

Page 7: 4to Software de Sistemas UNIDAD IV

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

Page 8: 4to Software de Sistemas UNIDAD IV

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

Page 9: 4to Software de Sistemas UNIDAD IV

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

Page 10: 4to Software de Sistemas UNIDAD IV

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.

Page 11: 4to Software de Sistemas UNIDAD IV

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.

Page 12: 4to Software de Sistemas UNIDAD IV

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

Page 13: 4to Software de Sistemas UNIDAD IV

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

Page 14: 4to Software de Sistemas UNIDAD IV

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