INDICE. Pág. Introducción 2. Cargadores y Ligadores 3. Funciones Básicas del Cargador 3. Características del Cargador Dependientes de la Maquina 5

Documentos relacionados
Programación de Sistemas. Unidad 1. Programación de Sistemas y Arquitectura de una Computadora

Procesadores de Macros. MIS. Lizbeth Alejandra Hernández González Programación de Sistemas

Macro Procesadores Universidad Autónoma Metropolitana - Azcapotzalco

Repaso concepto de programa

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Evolución del software y su situación actual

Programación de Sistemas Depuradores (Debugger) MIS. Lizbeth Hdz. Glz.

TEMA 3: El proceso de compilación, del código fuente al código máquina

Convivencia Introducción

CICLOS DEL PROCESADOR

Introducción a la programación: Contenido. Introducción

Qué es un programa informático?

Unidad IV: Programación de microcontroladores

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

Computación I (CI-2125) Clase 1. Prof. Mireya Morales Primera

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Tema 2: Conceptos básicos. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

Usuario. Programas de Aplicación. Sistema Operativo. Hardware. Figura 1. Sistema de cómputo estructurado por capas.

PUERTOS DE ENTRADA / SALIDA EN UN MICROCONTROLADOR

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

Unidad I: Organización del Computador. Ing. Marglorie Colina

Tema 2 Introducción a la Programación en C.

Un diagrama de flujo es un dibujo que utiliza símbolos estándar de diagramación de algoritmos para computadora, en el que cada paso del algoritmo se

Conceptos y definiciones básicos en computación

Todos los comandos de DEBUG se invocan usando una sola letra y son los siguientes:

Programación de Ordenadores

ENSAMBLADOR DE ARCHIVO TASM MASM NASM GAS. Características de un Ensamblador de Archivo

UNIDAD I. Universidad del Zulia Costa Oriental del Lago. Conceptos Básicos

Tema: Operaciones de Carga, Transferencia, Comparación y Aritméticas del S7-1200

Unidad 2. Introducción Lenguajes y Compiladores

ENTRADA-SALIDA. 2. Dispositivos de Carácter: Envía o recibe un flujo de caracteres No es direccionable, no tiene operación de búsqueda

Unidad Nº II Capacidad de la unidad central. de procesamiento. Instituto Universitario Politécnico. Santiago Mariño

MODULO SOBRE PROGRAMACION MATLAB

Estructura de los sistemas de cómputo

Laboratorio 1 Entorno de desarrollo y subrutinas

UNIDAD I CONCEPTOS GENERALES. Conceptos Generales Microprocesadores Otoño 2011

Semana Lenguajes 7de programación Tipos de lenguajes de programación

DISEÑO CURRICULAR ARQUITECTURA DEL COMPUTADOR

Sistemas Operativos. Curso 2017 Administración de memoria I

Modelo Dinámico del Diseño del Software y Representación en UML. UNIDAD 9 Análisis y Diseño de Sistemas de Información

UNIVERSIDAD DE GUADALAJARA

2.1 METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS

ANÁLISIS ESTRUCTURADO

SISTEMAS OPERATIVOS Y TCP/IP. - El Modelo de Referencia TCP/IP -

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Conceptos de Arquitectura de Computadoras Curso 2015

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

UNIDAD NO. 01 CONCEPTOS INFORMÁTICOS BÁSICOS

Organización de Computadoras. Clase 7

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

Un. VIII. Generación de Código Objeto

Cruz García Karen Ilzette González Mendoza María del Rosario Hernández Castañeda Alan Eliseo Sánchez Quiroz Sheila Mariana Varela García Tania

Diseño de Compiladores I. Estructura General de un Compilador

Introducción a los Sistemas Operativos

CAPÍTULO IV: GESTIÓN DE ARCHIVOS. 1. Introducción a la Gestión de Archivos 2. Organización y acceso a los ficheros 3. Directorios

FASES DE UN COMPILADOR

INDICE Programa Entrada Unidad de control Unidad aritmética y lógica (ALU)

Procesadores de Macros Parte 2. MIS. Lizbeth Alejandra Hernández González Programación de Sistemas

Implementación de una unidad procesadora de cuatro bits, como material didáctico

TEMA V SISTEMAS DE NUMERACIÓN

INTRODUCCIÓN A LA INFORMÁTICA

Un sistema de bases de datos sirve para integrar los datos. Lo componen los siguientes elementos:

Esp. Alexis Olvany Torres ch. Datos de salida. Datos de salida. Datos de salida

Unidad 2: Taller de Cómputo. Estructura y Componentes de la Computadora UNIDAD DOS: INTRODUCCIÓN

Tipos de datos y Operadores Básicos

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS

Metodología de Desarrollo de Programas

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

Funcionamiento de las computadoras

INSTITUTO NACIONAL SUPERIOR DEL PROFESORADO TÉCNICO - TÉCNICO SUPERIOR EN INFORMÁTICA APLICADA - PROGRAMACIÓN I

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Conceptos Programa Programa objeto Pseudocódigo Algoritmos y Diagramas de flujo 1) Finitud 2) Definición 3) Entrada

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

Manual de referencia de C++ Parte IV Variables Punteros. Preparado por Prof. Luis A. Ortiz Ortiz

Conocimientos previos

1. Computadores y programación

n 6 Logro Conocimientos previos Tema: Datos y # Ficha de aprendizaje

Arquitectura de Computadores II Clase #3

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

Organización de Computadoras. Clase 6

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Principios de Computadoras II

ORGANIZACIÓN DE COMPUTADORAS

SISTEMAS. UNIDAD VI Parte A ADMINISTRACION DE MEMORIA ING. AGUILERA SERGIO OMAR

Arquitectura del MIPS: Introducción

Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos

INTRODUCCION A LA PROGRAMACION (C.U.) PROGRAMACION (T.I.G.)

Facultad de Ingeniería Industrial y de Sistemas v2.0 MA781U MEMORIA VIRTUAL

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Programación en Pascal Capítulo 2. Acciones Primitivas.

MOMENTO I. BLOQUE 1. Opera las funciones básicas del sistema operativo y garantiza la seguridad de la información

Tema 13: Manejo de archivos en lenguaje C

COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO

Práctica de Arquitectura de Computadores Sistemas de Entrada/Salida: Entrada/Salida Programada Curso 2016/2017

Técnicas de Programación

Nombre del estudiante: Gustavo Antonio González Morales. Nombre del trabajo: Tarea 2. Investigación sobre Paginación y Segmentacion.

Introducción al PLC Simatic Siemens S7-200.

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

GESTION DE LA MEMORIA

Transcripción:

INDICE Pág. Introducción 2 Cargadores y Ligadores 3 Funciones Básicas del Cargador 3 Características del Cargador Dependientes de la Maquina 5 Relocalización 5 Tablas y Lógica de un Cargador Ligador 6 Características del Cargador Independientes de la Maquina 7 Búsqueda Automática en Biblioteca 7 Opciones del Cargador 7 Programas de Superposiciones 8 Opciones de Diseño del Cargador 9 Editores de Ligado 9 Ligado Dinámico 9 Cargadores de Arranque 10 Ejemplos de Cargadores y Ligadores Reales 11 Editor de Ligado del Sistema/370 11 Ligador del Sistema VAX 11 Cargador del CYBER 12 Anexos 13 Conclusiones 22 Bibliografía 23 INTRODUCCION En el trabajo que se presenta a continuación damos las definiciones de cargadores y ligadores, también hacemos referencia a las funciones básicas, características y opciones de diseño de estos programas del 1

sistema; además agregamos algunos ejemplos de cargadores y ligadores reales así como en la parte de anexos incluimos las tablas, códigos y diagramas sobre los que hacemos referencia. CARGADORES Y LIGADORES Un programa objeto contiene instrucciones traducidas y valores de datos del programa fuente, y especifica direcciones en memoria donde se cargarán estos elementos. Un cargador es un programa del sistema que realiza la función de carga (llevar el programa objeto a la memoria para su ejecución). Algunos sistemas tienen un ligador o editor de ligado (combina dos o más programas objeto independientes y proporciona la información necesaria para realizar referencias entre ellos) para realizar las operaciones de enlace, y un cargador separado para manejar la relocalización (modificar el programa objeto de forma que puede cargarse en una dirección diferente de la localidad especificada originalmente) 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 forma puede usarse el cargador o ligador del sistema con independencia del lenguaje de programación fuente original. FUNCIONES BÁSICAS DEL CARGADOR Las funciones más importantes del cargador son colocar un programa objeto en la memoria e iniciar su ejecución. Se considera un cargador absoluto que podría ser utilizado como el tipo de ensamblador. En la figura 3.1(a) se muestra un ejemplo del programa objeto de dicho ensamblador. Como este cargador 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 si se ha presentado el programa correcto para la carga (y que tendrá cabida 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 la dirección especificada para iniciar la ejecución del programa cargado. En la figura 3.1(b) se muestra una representación del programa de la figura 3.1(a) después de la carga. El contenido de las localidades de memoria para las cuales no hay registro de texto se representa por xxxx. Esto indica que el contenido previo de esas localidades no se altera. En la figura 3.2 se muestra un algoritmo para la lógica del cargador sencillo analizado. Aunque este proceso es muy simple, hay un aspecto que merece ser comentado. En el programa objeto de ejemplo los bytes de código ensamblado se expresan en representación hexadecimal en forma de caracteres. Por ejemplo, el código de operación de máquina para una instrucción STL se representaría por el par de caracteres 14. Así durante la carga, cada pareja de bytes del registro del programa objeto debe empaquetarse en un byte. Es muy importante tener en cuenta que en la figura 3.1(a), cada carácter impreso representa un byte del registro del programa objeto. Por otra parte en la figura 3.1(b), cada carácter impreso representa un digito hexadecimal de la memoria (esto es, medio byte). Este método de representar un programa objeto es eficiente desde el punto de vista del espacio y el tiempo de ejecución por lo que la mayoría de las máquinas almacenan los programas objeto en forma binaria almacenándose cada byte en el programa objeto. Lógicamente, con este tipo de representación un byte puede contener cualquier valor binario. Hay que estar seguro de que las convenciones de archivo y dispositivos no hacen que algunos bytes del programa objeto sean interpretados como caracteres de control, en la que se indica el final de un registro con un byte que contiene un 00 hexadecimal, es inapropiada para usar con un programa objeto binario. CARACTERÍSTICAS DEL CARGADOR DEPENDIENTES DE LA MAQUINA 2

El cargador absoluto es simple y eficiente; sin embargo, este esquema tiene varias desventajas potenciales. Una de las más obvias es que el programador necesita especificar (al ensamblar el programa) la dirección real en la que se cargará la memoria. Si se trata de un computador muy sencillo con poca memoria, esto no crea muchas dificultades, ya que solo hay espacio para ejecutar un programa a la vez. En maquinas mas grandes y avanzadas, la situación no es tan fácil porque a menudo se quieren ejecutar a la vez varios programas independientes compartiendo la memoria. En esta sección se consideran el diseño e implantación de un cargador más complejo. Este cargador se encarga de la relocalización y ligado del programa, además de las funciones básicas. La necesidad de relocalizar los programas es una consecuencia directa del cambio a computadores mas grandes y potentes. La forma de efectuar la relocalización en un cargador también depende de las características de la maquina. 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. Tablas y Lógica de un Cargador Ligador El algoritmo de un cargador ligador es mucho más complicado que el del cargador absoluto. La entrada de este cargador consta de un conjunto de programas objeto que se van a ligar. Una sección de control puede hacer una referencia externa a un símbolo cuya definición aparece mas adelante en este flujo de entrada. En ese caso, la operación de ligado requerida no se puede realizar hasta haber asignado una dirección al símbolo externo implicado. Así pues, un cargador ligador suele dar dos pasos sobre su entrada, al igual que hace un ensamblador. El paso 1 asigna direcciones a todos los símbolos externos, y el paso 2 realiza la carga, la relocalización y el ligado. La principal estructura de datos necesaria para el cargador ligador es una tabla de símbolos externos TABSE. Esta tabla, análoga a TABSIM del algoritmo del ensamblador, se usa par almacenar el nombre y la dirección de los símbolos externos en el conjunto de secciones de control que se está cargando. Otras dos variables importantes son DIRPROG (dirección de carga del programa) y DIRSC (dirección de la sección de control). DIRPROG es la dirección inicial de la memoria donde se va a cargar el programa ligado, DIRSC contiene la dirección inicial asignada a la sección de control que está examinando el cargador. CARACTERISTICAS DEL CARGADOR INDEPENDIENTES DE LA MAQUINA Con frecuencia se piensa que el cargado y el ligado son funciones de servicio del sistema operativo. La 3

conexión del programador con estos servicios no es tan directa como la que tiene con, por ejemplo, el ensamblador durante el desarrollo del programa. Por tanto, la mayoría de los cargadores tienen menos características diferentes que las que se pueden encontrar en un ensamblador típico. Búsqueda Automática en Biblioteca En la mayoría de los casos se emplea una biblioteca estándar del sistema, pero se pueden especificar para el cargador otras bibliotecas, mediante proposiciones de control o parámetros. En algunos sistemas, esta característica se denomina llamada automática a biblioteca o búsqueda en biblioteca. Opciones del Cargador Muchos cargadores tienen un lenguaje especial de mandatos que se utiliza para especificar opciones. En algunos sistemas, las opciones se especifican como parte de un lenguaje de control de trabajos que procesa el sistema operativo. Cuando se usa este enfoque el sistema operativo incorpora las opciones especificadas a un bloque de control que se pone a disposición del cargador cuando se le invoca. Lógicamente, la realización de tales opciones es la misma, con independencia del medio empleado para seleccionarla. Los cargadores a menudo incluyen otras opciones; una es la posibilidad de especificar la localidad donde se inicia la ejecución y otra es la posibilidad de controlar si el cargador debe intentar o no la ejecución del programa si se detectan errores durante la carga. Programas de Superposiciones Este método de implantación reduce la cantidad total de memoria requerida para el ensamblado. En la figura 3.12 (a) se muestra la estructura de superposiciones del programa de ejemplo. Las letras representan nombres de secciones de control y las líneas, transferencias de control entre estas secciones. La estructura de un programa de superposiciones se define al cargador utilizando mandatos; en la figura 3.13 se muestra un conjunto típico de mandatos para definir la estructura de superposiciones mostrada en la figura 3.12 (a). En la estructura 3.14 (a) se muestra la longitud y la dirección real inicial de cada segmento del programa de ejemplo, y la dirección real inicial. En la figura 3.14 (b) se muestran 3 de esas posibilidades; las demás se dejan como ejercicio. En la figura 3.15 (a) se representa el contenido de la memoria en un momento de la ejecución. Los segmentos 1, 2 y 4 están cargados y se están ejecutando las instrucciones de la sección de control A. Los segmentos 2 y 4 se cargaron en respuesta a transferencias de control previas. Las áreas de transferencia de control de los segmentos 2 y 4 contienen a las secciones de control B y H; las otras áreas contienen instrucciones que invocan a MANSUP. Por otra parte, supóngase que A ejecuta una llamada a B. El área de transferencia del segmento 6 contiene instrucciones que invocan a MANSUP, como se ilustra en la figura 3.15 (b). El segmento 4 debe eliminarse debido a que su segmento padre ha sido eliminado. Entonces el control se pasa al punto de entrada del segmento 6, completando la transferencia de control a D. [véase fig. 3.15 (c)]. OPCIONES DE DISEÑO DEL CARGADOR En esta sección se analiza algunas alternativas comunes de organización de las funciones de carga, incluidas la relocación y ligado. Los cargadores ligadores realizan el ligado y la relocación en el momento de la carga. Se analizan dos opciones: los editores de ligado, que realizan el ligado antes del momento de la carga, y el ligado dinámico, en el cuál la función de ligado se realiza en el momento de la ejecución. Editores de Ligado La diferencia fundamental entre un editor de ligado y un cargador ligador se ilustra en la figura 3.16. Primero se ensambla o compila el programa fuente, produciendo un programa objeto (que puede contener varias 4

secciones de control diferentes). Un cargador ligador realiza todas las operaciones de ligado y relocalización, incluyendo búsqueda automática en bibliotecas, si se especifica, y carga el programa de ligado directamente en la memoria para su ejecución. Por otro lado, un editor de ligado produce una versión ligada del programa (llamada a menudo módulo de carga o imagen ejecutable), que se escribe en un archivo o biblioteca para su ejecución posterior. Cuando el usuario está listo para ejecutar el programa ligado, se puede utilizar un cargador relocalizador simple para cargar el programa en la memoria. La única modificación necesaria al código objeto es la suma de una dirección de carga real a los valores relativos del programa. El editor de ligado realiza la relocación de todas las secciones de control relativas al inicio del programa de ligado. Ligado Dinámico En esta sección se analiza un esquema que pospone la función de ligado hasta el momento de la ejecución: una subrutina se carga y liga al resto del programa al llamarla por primera vez. Este tipo de función se suele denominar ligado dinámico, cargado dinámico o carga por llamada. El ligado dinámico proporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan, también evita la necesidad de cargar la biblioteca completa para cada ejecución. Para realizar la carga y ligado de una subrutina llamada se pueden utilizar varios mecanismos distintos. En lugar de ejecutar una instrucción JSUB que hace referencia a un símbolo externo, el programa hace una solicitud de servicio de carga y llamada al sistema operativo. El parámetro de esta solicitud es el nombre simbólico de la rutina llamada. [Véase fig. 3.17(a)] El sistema operativo examina sus tablas internas para determinar si la rutina ya se ha cargado o no; en caso necesario, la rutina se carga desde la biblioteca de un usuario o desde el sistema especificado, como se ilustra en la figura 3.17(b). Entonces el control pasa del sistema operativo a la rutina llamada [Fig. 3.17(c)]. Cuando se completa el procesamiento de la subrutina llamada, vuelve a quien la llamó. Entones, el sistema operativo devuelve el control al programa que hizo la solicitud; este proceso se ilustra en la fig. 3.17(d). El control puede pasarse del cargador dinámico a la rutina llamada, como en la Fig. 3.17(e). Cargadores de Arranque Si el proceso de carga requiere más instrucciones de las que pueden leerse en un solo registro, el primer registro causa la lectura de otros y estos, a su vez, pueden originar la lectura aún de más registros; de ahí el término arranque (bootstrap). El primer registro suele denominarse cargador de arranque, y se coloca al inicio de todos los programas objeto que se van a cargar en un sistema vacío e inactivo. Esto incluye, por ejemplo, al propio sistema operativo y a todos los programas independientes que se ejecutan sin sistema operativo. EJEMPLOS DE CARGADORES Y LIGADORES REALES 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. El programa de salida del editor de ligado se llama módulo de carga, y puede cargarse en la memoria para su ejecución, y suele contener suficiente información para permitir que el editor de ligado los reprocese. El usuario tiene la posibilidad de especificar que un módulo de carga sea no editable, en cuyo caso puede omitirse gran parte de la información de control, para producir un módulo de carga más pequeño. El editor de ligado 370 puede manejar programas de superposiciones, con diversas características extendidas. En cada segmento puede haber varios puntos de entrada. Para manejar esta característica, el editor de ligado crea automáticamente tablas de entradas en todos los segmentos que contienen una llamada que puede causar 5

superposiciones. El proceso de superposiciones tiene lugar automáticamente al llamar a un segmento. La mayoría de los sistemas 370 disponen de un cargador ligador, así como de un editor de ligado. El cargador ofrece menos opciones y posibilidades que las que presenta el editor de ligado. Si no se necesitan las funciones especializadas del editor de ligado, por razones de eficiencia se recomienda utilizar el cargador. Ligador del Sistema VAX El ligador de VAX es un editor de ligado. La acción del ligador en la creación de las secciones de imagen está controlada por el ensamblador o compilador por medio de una secuencia de mandatos que forman parte del programa objeto. El ligador usa una pila interna como almacenamiento de trabajo. Los mandatos del programa objeto pueden especificar el apilamiento de valores a partir de diversas fuentes, guardar valores de la pila en la imagen que se esta creando y realizar operaciones con valores de la pila. El lenguaje de mandatos ofrece una gran diversidad de posibilidades: hay mas de 50 códigos de mandatos posibles. El ligador de VAX puede generar tres tipos de imágenes. Una imagen ejecutable es aquella adecuada para la carga y ejecución; una imagen compartible no es ejecutable, pero el ligador puede reprocesarla. El tercer tipo de imagen que puede crear el ligador es una imagen de sistema, concebida para ser ejecutada directamente en la maquina VAX, sin los servicios del sistema operativo. El ligador de VAX realiza las funciones usuales de ligado y relocalización. Además, hace parte del trabajo que en otros sistemas realizan el ensamblador o el compilador. El ligador de VAX no utiliza programas de superposiciones, debido en parte a la gran memoria virtual de que disponible VAX. Cargador de CYBER El formato del programa objeto utilizado por el cargador de CYBER es un poco más complejo que el descrito para SIC/XE; sin embargo, dispone de la misma información básica. La técnica de máscara de bits es especialmente útil en CYBER, por no disponer de direccionamiento relativo. Una palabra de CYBER puede contener más de una instrucción, por lo que no es posible usar un solo bit de relocalización por palabra. El cargador de CYBER puede utilizar programas de superposiciones de un tipo más restringido que el descrito. Una estructura de superposiciones está limitada a un máximo de tres niveles. Cada segmento está identificado por un par ordenado de enteros, y un segmento solamente puede tener un punto de entrada. ANEXOS HCOPY 00100000107A T0010001E1410334820390010362810303010154820613C100300102A0C103900102D T00101E150C1036482061081033400000454F46000003000000 6

T0020391E041030001030E0205D30205D30203FD8205D3020575490392C205E38203F T002057 C1010364C0000F1001000041030E02079302064509039DC20792C1036 T002073073820644C000005 E001000 (a) Programa Objeto (b) Programa cargado en memoria comienza lee el registro de encabezamiento verifica el nombre del programa y la longitud lee el primer registro de texto mientras el tipo del registro <> `E' haz comienza {si el código objeto está en forma de caracteres, se convierte en una representación interna} pasa el código objeto a la localidad de memoria especificada lee el siguiente registro del programa objeto termina salta a la dirección especificada en el registro de fin 7

termina 8

9

10

(a) (b) Fig. 3.16 Procesamiento de un programa objeto por medio de (a) cargador ligador y (b) editor de ligado. Carga y ejecución MANEJA ERROR (b) FIGURA 3.17.Cargador y llamada de una Subrutina por medio de ligado dinámico. (c) (d) (e) 5 0000 COPY STARD 0 10 0000 FIRST STL RETADR 17202D 11

12 0003 LDB # LENGH 69202D 13 BASE LENGTH 15 0006 CLOOP +JSUB RDREC 4B101036 20 000A LDA LENGTH 032026 25 000D COMP # 0 290000 30 0010 JEQ ENDFIL 332007 35 0013 +JSUB WRREC 4B10105D 40 0017 J CLOOP 3F2FEC 45 001A ENDFIL LDA EOF 032010 50 001D STA BUFFER 0F2016 55 0020 LDA # 3 010003 60 0023 STA LENGTH 0F200D 65 0026 +JSUB WRREC 4B10105D 70 002A J @RETADR 3E2003 80 002D EOF BYTE C'EOF' 454F46 95 0030 RETADR RESW 1 100 0033 LENGTH RESW 1 105 0036 BUFFER RESB 1 110. 4096 115. 120. 125 1036 RDREC CLEAR X B410 130 1038 CLEAR A B400 132 103A CLEAR S B440 133 103C +LDT # 4096 75101000 135 1040 RLOOP TD INPUT E32019 140 1043 JEQ RLOOP 332FFA 145 1046 RD INPUT DB2013 150 1049 COMPR A,S A004 155 104B JEQ EXIT 332008 160 104E STCH BUFFER,X 57C003 165 1051 TIXR T B850 170 1053 JLT RLOOP 3B2FEA 175 1056 EXIT STX LENGTH 134000 180 1059 RSUB 4F0000 185 105C INPUT BYTE X'F1' F1 195. 200. 205. 210 105D WRREC CLEAR X B410 212 105F LDT LENGTH 774000 215 1062 WLOOP TD OUTPUT E32011 220 1065 JEQ WLOOP 332FFA 12

225 1068 LDCH BUFFER,X 53C003 230 106B WD OUTPUT DF2008 235 106E TIXR T B850 240 1070 JLT WLOOP 3B2FEF 245 1073 RSUB 4F0000 250 1076 OUTPUT BYTE X'05' 05 255 END FIRST Figura 3.3 H,COPY,000000,001077 T,000000,1D,17202D,69202D,4B101036,032026,290000,332007,4B10105D,3F2FEC,032010 T,00001S,13,0F2016,010003,0F200D,4B10105D,3E2003,454F46 T,001036,1D,410,B400,B440,75101000,E32019,332FFA,DB2013,A004,332008,57C003,B850 T,001053,1D,B2FEA,134000,4F0000,F1,B410,774000,E32011,332FFA,53C003,DF2008,B850 T,001070,07,3B2FEF,4F0000,05 M,000007,05+COPY M,000014,05+COPY M,000027,05+COPY E,000000 Figura 3.4 (Programa objeto con relocalización por medio de registros de modificación) CONCLUSIONES Este trabajo nos ayudo a comprender el significado y la importancia de los conceptos de cargadores y ligadores. Hemos visto la necesidad y utilidad de dichos programas y también aprendimos su funcionamiento. BIBLIOGRAFÍA Libro : Software de Sistemas. Autor : Leland L. Beck. Editorial : Addison. Software de Sistemas 20 13

Cargadores y Ligadores Unidad III Figura 3.12 Figura 3.1 Figura 3.13 Figura 3.14 Figura 3.15 Figura 3.15 Biblioteca Cargador ligador Programa(s) objeto Memoria Biblioteca Editor De ligado Programa(s) objeto Programas ligados Cargador Relocalizador Memoria Cargador Dinámico (parte del 14

sistema operativo) Programas de usuario Cargador Dinámico ) Programa de usuario MANEJA ERROR Biblioteca Cargador Dinámico ) Programas de usuario MANEJA ERROR Cargador Dinámico ) Programas de usuario MANEJA ERROR Cargador Dinámico ) Programas de usuario MANEJA ERROR Figura 3.2 Línea 15

Loc Código Objeto Proposición fuente Subrutina que lee un registro en el Buffer Subrutina que escribe el registro en el Buffer (b) 16