3.4. Ejecución de un programa.
3.4. Ejecución de un programa.
Generación de código ejecutable.
La
fase final del compilador es la generación de código ejecutable.
Toma como entrada la representación intermedia del programa fuente y produce
como salida un programa objeto equivalente.
Las
exigencias tradicionalmente impuestas a un compilador son duras. El código de
salida debe ser correcto y de gran calidad, lo que significa que debe utilizar
de forma eficaz los recursos de la computadora. Además, el propio generador de
código debe ejecutarse eficientemente.
Matemáticamente,
el problema de generar código óptimo es indecidible. En la práctica, hay que
conformarse con técnicas heurísticas que generan código bueno pero no siempre
óptimo. La elección de las heurísticas es importante, ya que un algoritmo de
generación de código cuidadosamente diseñado puede producir fácilmente código
que sea más rápido que el producido por un algoritmo diseñado precipitadamente.
Pasos para la elaboración y ejecución de un programa:
Los pasos a
seguir los podemos resumir de la siguiente manera:
1 º. Escribir
el código fuente, por ejemplo con el editor del EID.
2 º. Compilar
el fichero fuente
3 º. Si se
producen errores de sintaxis (o warnings) volver al editor y eliminar los
errores de sintaxis.
4 º. Si no hay
errores se obtendrá el código objeto y el enlazador construirá el archivo
ejecutable.
5 º. Una vez
tengamos el archivo ejecutable, será el sistema operativo el encargado de
colocar el programa en la memoria central y ejecutarlo.
6 º. Comprobar
el funcionamiento del programa.
7 º. Si se
detecta errores o un mal funcionamiento del programa, activar el depurador para
trazar el programa y ejecutarlo sentencia a sentencia.
8 º. Una vez
que hayamos encontrado la causa del error, volveremos al editor y lo
corregimos.
9 º. El proceso
de compilar, enlazar y ejecutar el programa lo repetiremos hasta que no se
produzcan errores.
Fase de ejecución de
un programa
Una vez que
tenemos el programa en lenguaje máquina, para poderlo ejecutar hay que
introducirlo en la memoria.
1. Una utilidad
del S.O. llamada cargador colocará el programa, y sus datos de entrada, en
memoria principal, preparándolo para su ejecución.
2. El S.O. le
pasa el control a la C.P.U. para que comience la ejecución del programa,
realizando la Unidad de Control los siguientes pasos (fases):
Captación de la instrucción: Lee de la Memoria Principal
la instrucción a ejecutar.
Ejecución de la instrucción: Interpreta la instrucción leída
y envía señales de control a las unidades que deban intervenir en su ejecución.
Tras dicha ejecución se establece cuál será la siguiente instrucción a
ejecutar.
PROCESO DE EJECUCION DE UN PROGRAMA EN C
Edición. El código se escribe en un editor de texto o en un editor de código preparado para esta acción. El archivo se suele guardar con extensión .cpp (también en cxx, c++ o cc).
Preprocesado. Antes de compilar el código, el preprocesador lee las instrucciones de preprocesador y las convierte al código fuente equivalente.
Compilación. El código fuente resultante en lenguaje C++ se compila mediante el software apropiado, obteniendo un código máquina llamado archivo objeto (cuya extensión suele ser .obj). Este código aún no es ejecutable ya que necesita incluir el código máquina relativo a las funciones y módulos que se utilizaban en nuestro código. Estas funciones están incluidas en archivos externos (librerías).
Enlazado. El código objeto se une al código compilado de las librerías y módulos invocados por el código anterior. El resultado es un archivo ejecutable (extensión .exe en Windows)
Cargado. Normalmente lo realiza el propio entorno de ejecución. El archivo ejecutable se lanza en el Sistemas Operativo.
Ejecución de las instrucciones por la CPU. Es entonces cuando el procesador accede al código máquina del programa ya convertido y ejecuta las acciones. Será entonces cuando veamos los resultados.
Estas dos últimas fases cubren lo que se conoce como ejecución del programa
No comments