martes, 7 de febrero de 2017

Compiladores e interpretes y maquina virtual

UNIDAD 1 ARQUITECTURA DE LOS COMPILADORES E INTERPRETES

Unidad de competencia

Determina la estructura general de los compiladores e intérpretes con base en la funcionalidad de sus etapas y fases
Concepto, características, aplicabilidad y 2 ejemplos
Arquitectura de compiladores e intérpretes, máquinas virtuales

Compiladores: Un traductor que transforma textos fuente de lenguajes de alto nivel a lenguajes de bajo nivel se le denomina compilador.

--El tiempo que se necesita para traducir un lenguaje de alto nivel a lenguaje objeto se denomina tiempo de compilación.
--El tiempo que tarda en ejecutarse un programa objeto se denomina tiempo de ejecución.

La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto.

*Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis léxico (que consiste en la descomposición del programa fuente en componentes léxicos), Análisis sintáctico (agrupación de los componentes léxicos en frases gramaticales) y Análisis semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).

*Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible).

TIPOS DE COMPILADORES
Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías:
*Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
*Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
*Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
*Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
*Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
Aplicabilidad
La función principal que cumple es traducir a un lenguaje mucho más sencillo y entendible por la máquina, informa al usuario si existen errores en el código fuente con el fin de ejecutar la aplicación sin problema, si existe algún error simplemente se detiene.


 
 Intérpretes
 Los intérpretes son programas que simplemente ejecutan las instrucciones que encuentran en el texto fuente. En muchos casos coexisten en memoria el programa fuente y el programa intérprete.
El encargado de hacer esto es un programa llamado intérprete. A diferencia del compilador, el intérprete de un lenguaje no produce una traducción a código máquina. El intérprete intenta realizar "al vuelo" lo que se expresa en los ficheros fuente. El intérprete contiene en su interior miles de porciones de código máquina, que combinándolas adecuadamente pueden realizar las mismas tareas que expresa una orden escrita en el lenguaje de alto nivel.
Cuando un programa es interpretado, el proceso que se sigue es el siguiente: el intérprete obtiene una instrucción del fichero fuente y la realiza inmediatamente. Para ello, ejecuta en secuencia varias de esas porciones de código máquina que comentábamos antes, y que residen en el interior del intérprete. Cuando la CPU termina la ejecución de esa secuencia, el resultado es que la CPU habrá hecho lo que la línea de código fuente expresaba.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).
Los programas interpretes clásicos son:
BASIC
QBASIC
QUICKBASIC
VISUALBASIC
SMALLTALK
JAVA


Máquina virtual

Una Máquina Virtual de Sistema es un programa que nos permite albergar un Ordenador Ficticio dentro de un Ordenador existente, es decir, un software que simula por completo el comportamiento de un Ordenador real sin que este exista, albergado virtualmente en un ordenador físico.
Este tipo de programas nos permitirán con un solo PC disponer de múltiples Sistemas Operativos funcionando simultáneamente usando tan solo una única máquina física.
una Virtual podemos por ejemplo instalar varios PCS virtuales con distintos sistemas operativos y estudiar la forma de conectarlos en una red a través también de routers virtuales.
Otra utilidad primordial consiste en poder trabajar con aplicaciones que funcionan sobre distintos sistemas operativos al que posee el ordenador anfitrión, disponiendo de un solo Ordenador físico, esto a veces, resulta prácticamente imprescindible, cuando un ordenador con un sistema Operativo Servidor necesita trabajar con un programa que no corre sobre ese sistema servidor.
Las máquinas virtuales se usan, por lo tanto, de forma muy frecuente en el ámbito profesional y en la enseñanza, podremos, usándolas, probar y estudiar cómodamente distintos sistemas operativos, plataformas de programación, comportamiento de programas inestables etc.
Los Emuladores son un tipo de máquinas virtuales cuya única diferencia es que solo soportan un sistema, por ejemplo existen emuladores de videoconsolas, de sistemas Operativos móviles, como Android o Symbian etc. esto también puede resultar de gran utilidad.
Aunque en este artículo nos referimos principalmente a las Máquinas Virtuales de Sistema debemos saber que existe otro tipo de Máquinas Virtuales, llamadas de proceso, la diferencia entre ellas es que las segundas solo pueden ejecutar un proceso simultáneamente y su comportamiento no se distingue en la práctica de un programa convencional, aunque sí que son máquinas virtuales puesto que a diferencia de una aplicación convencional trabajan aisladas del sistema anfitrión a pesar de estar alojadas en él, además su misión no es emular un sistema operativo si no funcionar como una plataforma independiente, un ejemplo de este tipo es la Máquina Virtual de Java.
Como principal inconveniente, las Máquinas Virtuales incrementan notablemente el trabajo que soporta el Equipo Físico anfitrión, cada Sistema Operativo en funcionamiento añade una carga de procesos enorme y ante todo ocupa una gran cantidad de memoria RAM, es imprescindible, por lo tanto, disponer de un Ordenador potente y con gran cantidad de memoria si queremos hacer correr a varios SO simultáneamente.






No hay comentarios:

Publicar un comentario