Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCIÓN A LA PROGRAMACIÓN DE
SISTEMAS
Software de Sistemas | Varios Autores
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
2
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Índice
1. ESTRUCTURA DE LA COMPUTADORA........................................................................................ 4
2. ENSAMBLADORES................................................................................................................ 20
3. CARGADOR – LIGADOR............................................................................................................ 49
4. MACROPROCESADORES. ......................................................................................................... 68
5. GLOSARIO. ............................................................................................................................... 76
6. ANEXOS. .................................................................................................................................. 80
3
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
medio del lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin
lo cual sería muy difícil la interacción con la maquina.
1. ESTRUCTURA DE LA COMPUTADORA.
Objetivo: Entender con detalle los procesos lógicos que suceden en una
computadora para que pueda ejecutar un programa en lenguaje máquina
de una plataforma que en particular se define al iniciar el curso.
La unidad central de procesamiento, CPU (por sus siglas del inglés Central
Processing Unit), o, simplemente, el procesador, es el componente en una
computadora digital que interpreta las instrucciones y procesa los datos
contenidos en los programas de computadora. La CPU proporciona la
característica fundamental de la computadora digital: la programabilidad,
es uno de los componentes necesarios encontrados en las computadoras
4
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
1.1.1 CPU.
5
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
1.1.2 Memoria.
6
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Estructuras de interconexión
Existen dos organizaciones físicas de operaciones E/S que tienen que ver
con los buses que son:
7
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
8
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Ciclo maquina
La función básica de una computadora es ejecutar programas, el cual está
compuesto de un conjunto de instrucciones almacenadas en memoria. La
CPU es la encargada de ejecutar las instrucciones específicas del
programa. Para comprender esta función debe considerarse el detalle del
proceso de ejecución del programa.
9
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
10
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Entonces recapitulemos:
Lenguajes
Las instrucciones deben darse en un lenguaje de programación, es decir,
en una determinada configuración de información digital binaria. En las
primeras computadoras, la programación era una tarea difícil y laboriosa
ya que los conmutadores ON-OFF de las válvulas de vacío debían
configurarse a mano. Programar tareas tan sencillas como ordenar una
lista de nombres requería varios días de trabajo de equipos de
programadores. Desde entonces se han inventado varios lenguajes
informáticos, algunos orientados hacia funciones específicas y otros
centrados en la facilidad de uso.
Lenguaje máquina
El lenguaje propio del ordenador, basado en el sistema binario, o código
máquina, resulta difícil de utilizar para las personas. El programador debe
introducir todos y cada uno de los comandos y datos en forma binaria, y
una operación sencilla como comparar el contenido de un registro con los
11
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Lenguaje ensamblador
Al asignar un código mnemotécnico (por lo general de tres letras) a cada
comando en lenguaje máquina, es posible escribir y depurar o eliminar los
errores lógicos y de datos en los programas escritos en lenguaje
ensamblador, empleando para ello sólo una fracción del tiempo necesario
para programar en lenguaje máquina. En el lenguaje ensamblador, cada
comando mnemotécnico y sus operadores simbólicos equivalen a una
instrucción de máquina. Un programa ensamblador traduce el código
fuente, una lista de códigos de operación mnemotécnicos y de operadores
simbólicos, a código objeto (es decir, a lenguaje máquina) y, a
continuación, ejecuta el programa.
Intérpretes y compiladores
La traducción de una serie de instrucciones en lenguaje ensamblador (el
código fuente) a un código máquina (o código objeto) no es un proceso
muy complicado y se realiza normalmente por un programa especial
llamado compilador. La traducción de un código fuente de alto nivel a un
código máquina también se realiza con un compilador, en este caso más
complejo, o mediante un intérprete. Un compilador crea una lista de
instrucciones de código máquina, el código objeto, basándose en un
código fuente. El código objeto resultante es un programa rápido y listo
para funcionar, pero que puede hacer que falle el ordenador si no está
12
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
bien diseñado. Los intérpretes, por otro lado, son más lentos que los
compiladores ya que no producen un código objeto, sino que recorren el
código fuente una línea cada vez. Cada línea se traduce a código máquina
y se ejecuta.
Cuando la línea se lee por segunda vez, como en el caso de los programas
en que se reutilizan partes del código, debe compilarse de nuevo. Aunque
este proceso es más lento, es menos susceptible de provocar fallos en la
computadora.
Todo sistema numérico parte del 0 y tiene tantos dígitos como su sistema
lo marque. Tomando en cuenta esto, tenemos que el sistema binario
empieza con 0 y contiene solo 2 (binario) dígitos por lo tanto el siguiente
dígito es 1. El sistema decimal igual empieza de 0 y termina en 9 (sumando
así 10 dígitos) y así sucesivamente.
13
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
14
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Modo de direccionamiento:
Por la manera en como las instrucciones acceden a los datos en memoria
o en los registros, éstas se pueden clasificar en los siguientes
direccionamientos (para el HC12):
15
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
16
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Esto permite al usuario flexibilidad para escribir programas que son más
eficientes en cuanto a número de instrucciones y tiempo de ejecución. Es
tal la importancia de los modos de direccionamiento que la potencia de
una máquina se mide tanto por su repertorio de instrucciones como por la
variedad de modos de direccionamiento que es capaz de admitir. Los
modos de direccionamiento de un micro son las diferentes formas de
transformación del campo de operando de la instrucción en la dirección
del operando. En esta definición el término dirección debe interpretarse
en su sentido más general de localización del operando, en cualquier
lugar, y no en el sentido más estricto de dirección de memoria. A la
dirección obtenida de las transformaciones anteriores la llamaremos
dirección efectiva. Esta dirección, en el caso de tratarse de una dirección
de memoria, es la que se cargará en el M.A.R. o registro de dirección de
memoria.
Inherente:
Instrucciones que usan este método de direccionamiento no tienen
operando externos (solo el mnemónico o instrucción), o si los tiene son
registros, estos son registros internos del CPU. En cualquier caso el CPU no
accesa a ninguna localidad de memoria para completar la instrucción.
EJEMPLOS: NOP; esta instrucción, no tiene operando INX; esta instrucción
tiene operando del CPU.
Inmediato:
El símbolo de (#) es usado para indicar un operando en modo de
direccionamiento inmediato. Un error común de programación es el
omitir accidentalmente el símbolo #. Esto causa que el ensamblador
malinterprete la expresión que sigue como una dirección.
17
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Directo:
Este modo es llamado algunas veces "direccionamiento de PAGINA CERO"
porque opera en un rango de $0000 hasta $00FF.
Extendido:
En este modo, los 16 bits de memoria son ocupados, es decir la localidad
de memoria accesada en ambos casos es de 0100, o sea 2 bytes.
18
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
19
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
2. ENSAMBLADORES.
Objetivo: Entender y manejar los diferentes esquemas de ensamblado.
Diseñar un ensamblador de dos pasos.
20
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
21
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
22
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
23
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Una vez que hemos visto la evolución de los lenguajes, cabe preguntarse:
¿En estos tiempos "modernos", qué quiero del Lenguaje Ensamblador?, he
aquí algunas ventajas y desventajas.
Ventajas:
• Velocidad:
El proceso de traducción que realizan los intérpretes, implica un proceso
de cómputo adicional al que el programador quiere realizar. Por ello, nos
encontraremos con que un intérprete es siempre más lento que realizar la
misma acción en Lenguaje Ensamblador, simplemente porque tiene el
costo adicional de estar traduciendo el programa, cada vez que lo
ejecutamos. De ahí nacieron los compiladores, que son mucho más
rápidos que los intérpretes, pues hacen la traducción una vez y dejan el
código objeto, que ya es Lenguaje de D máquina, y se puede ejecutar muy
rápidamente.
• Eficiencia en el tamaño:
Por las mismas razones que vimos en el aspecto de velocidad, los
compiladores e intérpretes generan más código máquina del necesario;
por ello, el programa ejecutable crece. Así, cuando es importante reducir
24
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
• Flexibilidad:
Las razones anteriores son cuestión de grado: podemos hacer las cosas en
otro lenguaje, pero queremos hacerlas más eficientemente. Pero todos los
lenguajes de alto nivel tienen limitantes en el control; al hacer
abstracciones, limitan su propia capacidad. Es decir, existen tareas que la
máquina puede hacer, pero que un lenguaje de alto nivel no permite. Por
ejemplo, en Visual Basic no es posible cambiar la resolución del monitor a
medio programa; es una limitante, impuesta por la abstracción del GUI
Windows. En cambio, en ensamblador es sumamente sencillo, pues
tenemos el acceso directo al hardware del monitor.
Desventajas:
• Tiempo de programación:
Al ser de bajo nivel, el Lenguaje Ensamblador requiere más instrucciones
para realizar el mismo proceso, en comparación con un lenguaje de alto
nivel. Por otro lado, requiere de más cuidado por parte del programador,
pues es propenso a que los errores de lógica se reflejen más fuertemente
en la ejecución. Por todo esto, es más lento el desarrollo de programas
comparables en Lenguaje Ensamblador que en un lenguaje de alto nivel,
pues el programador goza de una menor abstracción.
25
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
que todo error que podamos cometer, o todo riesgo que podamos tener,
podemos tenerlo también en este Lenguaje. En ciertos casos extremos,
puede llegarse a sobrescribir información del CMOS de la máquina.
• Falta de portabilidad:
Como ya se mencionó, existe un lenguaje ensamblador para cada
máquina; por ello, evidentemente no es una selección apropiada de
lenguaje cuando deseamos codificar en una máquina y luego llevar los
programas a otros sistemas operativos o modelos de computadoras. Si
bien esto es un problema general a todos los lenguajes, es mucho más
notorio en ensamblador: yo puedo reutilizar un 90% o más del código que
desarrollo en "C", en una PC, al llevarlo a una RS/6000 con UNIX, y lo
mismo si después lo llevo a una Macintosh, siempre y cuando esté bien
hecho y siga los estándares de "C", y los principios de la programación
estructurada. En cambio, si escribimos el programa en Ensamblador de la
PC, por bien que lo desarrollemos y muchos estándares que sigamos,
tendremos prácticamente que reescribir el 100 % del código al llevarlo a
UNIX, y otra vez lo mismo al llevarlo a Mac.
26
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Segmento de código:
El segmento de código (CS) contiene las instrucciones de máquina que son
ejecutadas por lo común la primera instrucción ejecutable esta en el inicio
27
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Segmento de datos:
El segmento de datos (DS) contiene datos, constantes y áreas de trabajo
definidos por el programa. El registro DS direcciona el segmento de datos.
Si su área de datos requiere más de 64K, su programa puede necesitar
definir más de un segmento de datos.
Segmento de pila:
En términos sencillos, la pila contiene los datos y direcciones que usted
necesita guardar temporalmente o para uso de sus "llamadas" subrutinas.
El registro de segmento de la pila (SS) direcciona el segmento de la pila.
28
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Note que un programa tiene uno o más segmentos, los cuales pueden
iniciar casi en cualquier lugar de memoria, variar en tamaño y estar en
cualquier orden.
29
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
30
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
31
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
32
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
33
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
34
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
35
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
entrada, que dependen del lenguaje de que se trate, tienen muy diversas
estructuras: formato y longitud fijos, formato variable y longitud fija o
formato y longitud variable, aparte de que el número de operandos y
expresiones permitidas varían desde un mínimo de dos campos a cuatro o
cinco por término medio.
36
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
completa los valores. Así, si este indicador era de definición por etiqueta,
respeta el. Valor almacenado; si era definición por pseudo-instrucción,
evalúa las correspondientes cadenas de equivalencia; o si era de
indefinición, le da una dirección que haya quedado libre de acuerdo con la
estrategia del ensamblador, siempre que no se trate de una variable
externa.
37
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
SEGUNDO PASO.
Lectura del programa de memoria secundaria.
o Tratamiento de sentencias o instrucciones. En el primer paso sólo se
analizaban las sentencias para ver si eran correctas.
o Tratamiento del código de operación (SEGUNDO PASO). En el
primer paso el código de operación se trataba Simplemente para
ver si era correcto o no.
o Buscaren tabla de código de operación. Obtener código de máquina
y su longitud.
o Actualizar contador de direcciones.
38
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
39
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
ENSAMBLADORES CRUZADOS.
Un ensamblador cruzado es el polo opuesto del ensamblador nativo. El
ensamblador cruzado es aquel que se ejecuta sobre un computador con
un procesador diferente de aquel para el que se ensambla el código. OS
ensambladores cruzados permiten a un programador desarrollar
programas para diferentes sistemas sobre un computador. Sin embargo,
excepto en el caso de minicomputadores y grandes computadores que
pueden ofrecer un simulador de microprocesador destinatario real, no se
puede normalmente probar y depurar el código creado por un
ensamblador cruzado sin ejecutarse sobre una maquina real que utilice
este procesador. En cualquier caso, siempre se debe utilizar la sintaxis
40
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
41
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
META ENSAMBLADOR.
42
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Código absoluto.
La asignación no se puede cambiar nunca.
Ejemplo: programas .COM en MS-DOS, asignación de direcciones en
tiempo de carga.
Código generado por el montador o el cargador.
La asignación se hace en el momento de lanzar el programa.
Código reubicable.
43
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
• Dirección lógica
o La generada por la CPU durante la ejecución del programa.
o Llamada también dirección virtual.
• Dirección física
o La usada realmente en el Registro de Direcciones de Memoria.
• Carga dinámica
o Se trata de no perder tiempo cargando código que luego no se
ejecuta.
o Al empezar solo se carga el programa principal.
o Las subrutinas no se cargan hasta que son llamadas.
o Solo hace falta tener una tabla de rutinas cargadas y una forma
especial de llamarlas
o No hace falta un SO especial, solo un cargador reubicable.
o El espacio en memoria está reservado para el proceso, pero no
se utiliza siempre.
• Enlace dinámico
o Se trata de no reservar espacio para las subrutinas hasta el
momento de la ejecución.
o Cada llamada lleva asociada un código para localizar la dirección
de la rutina en memoria.
o Ese código se sustituye por la dirección de la rutina una vez
cargada.
o Consume menos memoria y menos disco.
o Solo hay una copia de la biblioteca en memoria
o El código del programa no incluye el de las bibliotecas
o Se pueden tener varias versiones de la misma biblioteca o
Bibliotecas Compartidas
o Necesita que el SO compruebe que no se vulnera la protección
de memoria.
• Solapamientos (overlays)
o Técnica que permite ejecutar un programa que sea mayor que la
memoria principal disponible.
o Se basa en mantener en memoria solo las instrucciones y Tatos
que se necesita en cada momento.
o No hace falta soporte Tel SO.
o Hace falta programar el traductor y el montador ® Hace falta un
programador experto
44
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Fase de Análisis:
• En el llamado análisis lexicográfico o léxico, el compilador revisa y
controla que las "palabras" estén bien escritas y pertenezcan a
algún tipo de token (cadena) definido dentro del lenguaje, como por
ejemplo que sea algún tipo de palabra reservada, o si es el nombre
de una variable que este escrita de acuerdo a las pautas de
definición del lenguaje. En esta etapa se crea la tabla de símbolos, la
cual contiene las variables y el tipo de dato al que pertenece, las
constantes literales, el nombre de funciones y los argumentos que
reciben etc.
45
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Fase de Síntesis:
• Etapa de generación de código intermedio, aunque algunos
compiladores no la tienen, es bueno saber de su existencia, en esta
etapa se lleva el código del programa fuente a un código interno
para poder trabajar más fácilmente sobre él. Esta representación
interna debe tener dos propiedades, primero debe ser fácil de
representar y segundo debe ser fácil de traducir al código objeto.
46
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Se puede dar una descripción general de las funciones de los 2 pasos del
ensamblador simple propuesto. 1 (define los símbolos):
1. Asignar direcciones a todas las proposiciones del programa.
2. Guardar los valores (direcciones) asignados a todas las etiquetas para
usarse en el paso 2.
3. Realizar algún procesamiento de las instrucciones para el ensamblador.
(Esto incluye el procesamiento que afecta a la asignación de direcciones,
como la determinación de la longitud de las áreas de datos definidas por
BYTE, RESP, etc.).
47
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
48
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
3. CARGADOR – LIGADOR.
Un ejemplo muy conocido está en los mainframes IMB Sistema 360 y sus
descendientes, incluyendo la serie de los sistemas Z9. Los ligadores
dinámicos son otro tipo de cargador que carga y liga librerías dinámicas
(como dll's).
Muchos cargadores permiten al usuario especificar opciones que
modificar el procesamiento estándar descrito. Muchos cargadores tienen
un lenguaje especial de mandatos que se utiliza para especificar opciones.
49
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
CARGADOR LIGADOR.
50
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
51
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Entrada manual:
Mediante el teclado el usuario teclea el cargador BOOTSTRAP. Después de
esto, el cargador se carga así mismo en la memoria del computador.
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.
52
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
53
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
54
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Esos 4 bits se utilizan para codificar las posibles antes listadas, y también
para especificar si la dirección base del programa se suma o resta a cada
valor relocalizable. 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 3 niveles. Cada
segmento está identificado por un par ordenado de enteros, y un
segmento solamente puede tener un punto de entrada.
55
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Cada segmento, excepto la raíz, debe cargarse por medio de una solicitud
explícita; no existe la carga automática de segmentos. El programa de
aplicación puede solicitar la carga de un segmento por medio de una
llamada de servicio al sistema operativo. Como alternativa, en el
segmento raíz puede haber un pequeño cargador residente para manejar
el proceso de superposición.
El editor de ligado del sistema 370 puede realizar todas las funciones
estándar analizadas, las secciones de control pueden ser eliminadas,
reemplazadas o reordenadas.
56
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
57
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
58
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
59
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
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.
60
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Existen algunos pasos necesarios para ejecutar el editor de enlace, los que
finalmente dependen de las directrices de importación-exportación de
objetos:
1. Probar directrices, el micro tiene 2 sentencias en el lenguaje
ensamblador: directivas e instrucciones,
2. Referencias externas, crear tabla de símbolos: Establecer la
correspondencia entre símbolos definidos en un archivo objeto y su
empleo en otro archivo de la misma naturaleza. El enlazador debe
combinar varios archivos objeto con su acervo respectivo de datos
en un archivo ejecutable.
3. Abrir archivos objeto y formatear datos.
4. Combinar archivos objeto.
5. Enlazar código intermedio compilado.
6. Incorpora rutinas de librerías en caso de solicitarlas el propio
programa.
7. Su función es reducir procedimientos traducidos por separado y
enlazarlos para que se ejecuten como una unidad llamada programa
binario ejecutable.
61
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
62
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
código lo que implica que entre el código estarán estén implícitos los
datos necesarios para realizar las tareas específicas.
63
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
64
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Otra forma de escribir esto es decir que el ligamiento del nombre a una
dirección real se retrasa del tiempo de carga al tiempo de ejecución. Como
ya se había expuesto, este ligamiento retardado da como resultado una
mayor flexibilidad, y también requiere mayor sobrecarga, ya que el
sistema operativo debe intervenir en el proceso de llamada.
65
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
66
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Relocalización.
Los cargadores que permiten la relocalización de programas se denominan
cargadores relocalizadores o cargadores relativos. Existen dos métodos
para la relocalización. El primer método utiliza un registro de modificación
para describir cada parte del código que se ha de cambiar al relocalizar el
programa. La necesidad de relocalizar los programas es una consecuencia
directa del cambio a computadoras más grandes y potente. La forma de
efectuar la relocalización en un cargador también depende de las
características de la máquina.
67
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
4. MACROPROCESADORES.
Una tabla de macro nombres que consiste de los nombres de las macros y
un índice que le permite localizar la definición de la macro en otra tabla
llamada tabla de macro definiciones.
68
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Rutina vs macro
Una rutina es un procedimiento (en este caso un conjunto de código) que
es usado cada vez que se le llame. Una rutina al ser llamada dentro de un
programa hace que el código principal y se dirija a ejecutar el código de la
rutina, en cambio cuando se llama a una macro, el ensamblador llama al
código de la macro y lo implanta donde fue llamado, aumentando así el
código fuente y por consiguiente el objeto.
69
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
70
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Claro que también se paga un precio alto por el empleo de las llamadas,
pues se pierde tiempo importante en la gestión de la pila, donde
usualmente se pasan los parámetros. El macroprocesador requiere tres
estructuras de datos para su exitosa operación.
• La tabla de nombres de macros (TABNOM).
• La tabla de código de macros (TABDEF).
• La tabla de argumentos (TABARG).
71
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Ejemplos:
MULT_BY_16 MACRO (no parameters)
DIRECTADD MACRO DESTINATION,SOURCE (two parameters)
“c”, Cuando este símbolo precede a un carácter este es tomado como una
literal y pasa al cuerpo de la macro sin este es útil cuando es necesario
delimitar el cuerpo del macro. Por ejemplo en la lista de parámetro
siguiente, el parámetro segundo pasa a la macro seria una COMA (,):
GENERAR INST 75, STK_VALOR. & Los símbolos de ambos lados se
concatenan y el símbolo es removido.
72
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Expansión:
Cuando el ensamblador se encuentra con una cabecera de MACRO, lo que
hace es almacenarla con su cuerpo correspondiente en una tabla.
Posteriormente, cuando en el programa se utilice la cabecera o el nombre
de esa MACRO, el ensamblador accederá a la tabla mencionada y
sustituirá, en el programa, ese nombre de MACRO por el cuerpo de la
misma. A la operación de búsqueda en la tabla de macros se le conoce
como "Llamada a la MACRO", y a la sustitución del nombre de la MACRO
por el cuerpo de la misma se denomina "Expansión de la MACRO". En
otras palabras, El ensamblador sustituye cada vez que aparezca la macro.
No es como los procedimientos, que se "llaman" pero no repiten el
código.
Recursividad:
La ventaja de la directiva LOCAL:
En general, el conjunto de valores de un tipo recursivo T, puede ser
definido por un conjunto de ecuaciones recursivas de la forma: T=T. El
conjunto de ecuaciones recursivas puede tener muchas soluciones. Si una
macro es recursiva, es decir, si se llama a sí misma, deberá pasarse a sí
misma un parámetro que se modificará en cada expansión, y la macro
deberá probar el parámetro y terminar la recursión cuando llegue a cierto
valor. En caso contrario, el ensamblador podría ingresar en un ciclo
infinito. Si esto sucede, el usuario deberá suspender explícitamente el
ensamblador.
73
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Por otra parte está la solución de Intel, la cual nos dice que los símbolos
internos de las macros los deberemos marcar como "LOCAL", para que la
reubicación de los mismos sea factible en la segunda pasada del
ensamblador. Directiva que le indica al ensamblador que dentro de la
macro van a existir una serie de etiquetas que deben de ser identificadas
de una forma especial al realizar la expansión de la macro y siempre
considerando la relación que existe con la tabla de símbolos.
74
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Ventajas:
• Grupos pequeños Repetidos de instrucciones reemplazadas por 1 macro.
• Errores en macros son fijos solo una vez, en la Duplicación.
• Por definición el esfuerzo es reducido.
• En efecto, instrucciones de nivel más alto nuevo puede ser creado.
• Programa es hecho más fácil, error menos boca abajo.
• Generalmente más rápido en ejecución que subrutinas.
75
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Desventajas:
• En programas grandes, el tamaño de código de producto es mayor que
el de los procedimientos.
5. GLOSARIO.
Cargador
Es una rutina que lee un programa ejecutable y lo almacena en la
memoria principal antes de su ejecución.
Código maquina
Representación de instrucciones y datos de un programa ejecutables
directamente por una computadora.
Compilador
Programa traductor de un lenguaje de alto nivel a su código de máquina
absoluto o reubicable equivalente. La traducción se realiza de tal forma
que una sentencia fuente se convierte en varias instrucciones máquina,
efectuando además un control previo de errores de todo el programa. Si
existen errores, la traducción se interrumpe.
Compilador Cruzado
Programa traductor de lenguaje de alto nivel a lenguaje de máquina que
se ejecuta en una computadora, generando el código para ser ejecutado
en otra distinta.
76
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Depurador
Es un programa de ayuda que permite ejecutar un programa fuente paso a
paso investigando la imagen del mismo, que se va creando en la memoria
con el fin de analizarlo: y corregir posibles errores.
Editor
Los sistemas operativos para la construcción de programas suelen además
contar con las siguientes utilidades o utilitarios: Editor, Editor de Enlace,
Cargador, Depuradora Este es un programa que permite escribir o corregir
archivos de texto, generalmente programas fuente.
Editor de enlace
También denominado montador, es un programa para crear un código
ejecutable a partir) de uno o más módulos objeto resolviendo las
referencias existentes entre los mismos y asignando direcciones
definitivas a los elementos reubicables. También extraen las rutinas
necesarias de las librerías para incluirlas en el programa ejecutable final.
Ejecución
Proceso de llevar a efecto las instrucciones de un programa ejecutable
previamente cargado en la memoria principal.
Ensamblador
En la traducción de un programa fuente a código máquina se utilizan
diversos programas que forman parte del sistema operativo. Estos
programas traductores pueden ser: Ensamblador, Ensamblador Cruzado,
Compilador, Compilador cruzado, Intérprete. Programa Utilizado para
traducir un programa escrito en lenguaje ensamblador a lenguaje de
máquina de tal forma que la traducción se realiza convirtiendo cada
sentencia fuente en una instrucción de máquina. En la traducción se
sustituyen las direcciones simbólicas por direcciones absolutas.
Ensamblador Cruzado
Programa traductor de lenguaje ensamblador a lenguaje de máquina que
se ejecuta en una computadora y traduce para ejecutar en otro distinto.
Instrucción o sentencia
Línea o líneas de un programa donde se da la orden de realización de un
operación o conjunto de operaciones particulares. Además del término
general, distinguiremos dos tipos de instrucciones.
77
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Instrucción privilegiada
Es aquella que para ser ejecutada necesita que el programa o usuario
tengan ciertos privilegios.
Interprete
Programa traductor de lenguaje de alto nivel a código máquina, de tal
forma que una sentencia fuente se convierte en varias instrucciones
máquina y tras la traducción de cada una de ellas se ejecutan sin esperar a
traducir la siguiente.
Librería de Programas
Archivo que contiene una colección organizada de programas.
Librería Objeto
Archivo compuesto de una colección de rutinas que pueden ser solicitadas
e incorporadas por los distintos programas al hacer referencia a las
mismas.
Macroinstrucción
Instrucción en el lenguaje fuente que es reemplazada por una secuencia
definida de instrucciones en el mismo lenguaje fuente, todas las
macroinstrucciones son expandidas por el compilador o ensamblador al
conjunto de instrucciones que representan.
Módulo
Unidad de programa que puede ser compilada y unida a otros módulos
para formar un programa completo, también lo podemos definir como
una parte separable de un programa. Los programas o módulos, según el
proceso de conversión a código máquina, pueden ser Programa Fuente y
Programa Objeto o Programa Ejecutable.
Módulo Objeto
Es un módulo fuente ensamblado o compilado que está listo para ser
unido a otros para formar un programa ejecutable. Si se trata de todo un
programa (un solo módulo) se denomina programa objeto.
78
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
Proceso
Se utiliza este término para hacer referencia a un programa en ejecución.
Programa
Secuencia de instrucciones que representan la resolución de un algoritmo
y que pueden ser ensambladas, compiladas o interpretadas con el fin de
obtener un programa ejecutable en código máquina para realizar un
trabajo útil para el usuario.
Programa Ejecutable
Programa construido por el editor de enlace o montador (linker) a partir
de uno o más módulos objeto y de rutinas de librería. Este programa
puede ser cargado en memoria y ejecutado. En el proceso de traducción o
conversión de un programa fuente a ejecutable entran en juego unos
archivos cuya composición es un conjunto de módulos que puede-ser
reclamados por los distintos elementos a traducir, denominados librerías.
Pueden ser tres clases: Librería de Programas, Librería Objeto, Librerías
del Sistema.
Programa Fuente
Programa escrito en ensamblador o lenguaje de alto nivel (FORTRAN,
COBOL, PASCAL, C, etc.) que debe ser ensamblado, compilado o
interpretado antes de ejecutarse en la computadora. Normalmente son
editados por el usuario o programador por medio de un editor.
79
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
6. ANEXOS.
Jerarquía de memoria
En una computadora hay una jerarquía de memorias atendiendo al tiempo
de acceso y a la capacidad que normalmente son factores contrapuestos
80
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
81
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
• Memorias ROM (Read Only Memory): Son memorias en las que sólo se
puede leer. Pueden ser:
o ROM programadas por máscara, cuya información se graba en
fábrica y no se puede modificar, PROM, o ROM programable una
sola vez.
o EPROM (erasable PROM) o RPROM (reprogramable ROM), cuyo
contenido puede borrarse mediante rayos ultravioletas para
regrabarlas.
o EAROM (electrically alterable ROM) o EEROM (electrically erasable
ROM), que son memorias que está en la frontera entre las RAM y las
ROM ya que su contenido puede regrabarse por medios eléctricos,
estas se diferencian de las RAM en que no son volátiles.
82
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS
83