Guía 1 Teoría - Alemansistem

Anuncio
Universidad de Oriente
Núcleo de Monagas
Programación Orientada a Objetos
Unidad I V 9.5
Historia de la Computación, Introducción a los lenguajes de
programación y al proceso de compilación de programas
Prof. Fabricio Bravo Guevara
UNIDAD I
1. Historia de las Computación
Uno de los primeros dispositivos mecánicos para contar fue el ábaco, cuya historia se remonta a
las antiguas civilizaciones griega y romana. Este dispositivo es muy sencillo, consta de cuentas
ensartadas en varillas que a su vez están montadas en un marco rectangular. Al desplazar las
cuentas sobre varillas, sus posiciones representan valores almacenados, y es mediante dichas
posiciones que este representa y almacena datos. A este dispositivo no se le puede llamar
computadora por carecer del elemento fundamental llamado programa.
Otro de los inventos mecánicos fue la Pascalina inventada por Blaise Pascal (1623 - 1662) de
Francia y la de Gottfried Wilhelm von Leibniz (1646 - 1716) de Alemania. Con estas máquinas,
los datos se representaban mediante las posiciones de los engranajes, y los datos se introducían
manualmente estableciendo dichas posiciones finales de las ruedas, de manera similar a como
leemos los números en el cuentakilómetros de un automóvil.
La primera computadora fue la máquina analítica creada por Charles Babbage, profesor
matemático de la Universidad de Cambridge en el siglo XIX. La idea que tuvo Charles Babbage
sobre un computador nació debido a que la elaboración de las tablas matemáticas era un
proceso tedioso y propenso a errores. En 1823 el gobierno Británico lo apoyo para crear el
proyecto de una máquina de diferencias, un dispositivo mecánico para efectuar sumas
repetidas.
Mientras tanto Charles Jacquard (francés), fabricante de tejidos, había creado un telar que
podía reproducir automáticamente patrones de tejidos leyendo la información codificada en
patrones de agujeros perforados en tarjetas de papel rígido. Al enterarse de este método
Babbage abandonó la máquina de diferencias y se dedico al proyecto de la máquina analítica
que se pudiera programar con tarjetas perforadas para efectuar cualquier cálculo con una
precisión de 20 dígitos. La tecnología de la época no bastaba para hacer realidad sus ideas.
El mundo no estaba listo, y no lo estaría por cien años más.
En 1944 se construyó en la Universidad de Harvard, la Mark I, diseñada por un equipo
encabezado por Howard H. Aiken. Esta máquina no está considerada como computadora
electrónica debido a que no era de propósito general y su funcionamiento estaba basado en
dispositivos electromecánicos llamados relevadores.
En 1947 se construyó en la Universidad de Pennsylvania la ENIAC (Electronic Numerical
Unidad I, POO
Página 2
Integrator And Calculator) que fue la primera computadora electrónica, el equipo de diseño lo
encabezaron los ingenieros John Mauchly y John Eckert. Esta máquina ocupaba todo un sótano
de la Universidad, tenía más de 18 000 tubos de vacío, consumía 200 KW de energía eléctrica y
requería todo un sistema de aire acondicionado, pero tenía la capacidad de realizar cinco mil
operaciones aritméticas en un segundo.
El proyecto, auspiciado por el departamento de Defensa de los Estados Unidos, culminó dos
años después, cuando se integró a ese equipo el ingeniero y matemático húngaro John Von
Neumann (1903 - 1957). Las ideas de von Neumann resultaron tan fundamentales para su
desarrollo posterior, que es considerado el padre de las computadoras.
La EDVAC (Electronic Discrete Variable Automatic Computer) fue diseñada por este nuevo
equipo. Tenía aproximadamente cuatro mil bulbos y usaba un tipo de memoria basado en
tubos llenos de mercurio por donde circulaban señales eléctricas sujetas a retardos.
La idea fundamental de von Neumann fue: permitir que en la memoria coexistan datos con
instrucciones, para que entonces la computadora pueda ser programada en un lenguaje, y no
por medio de alambres que eléctricamente interconectaban varias secciones de control,
como en la ENIAC.
Todo este desarrollo de las computadoras suele divisarse por generaciones y el criterio que
se determinó para determinar el cambio de generación no está muy bien definido, pero
resulta aparente que deben cumplirse al menos los siguientes requisitos:
• La forma en que están construidas.
•
Forma en que el ser humano se comunica con ellas.
Primera Generación
En esta generación había un gran desconocimiento de las capacidades de las computadoras,
puesto que se realizó un estudio en esta época que determinó que con veinte computadoras
se saturaría el mercado de los Estados Unidos en el campo de procesamiento de datos.
Esta generación abarco la década de los cincuenta. Y se conoce como la primera
generación. Estas máquinas tenían las siguientes características:
•
Estas máquinas estaban construidas por medio de tubos de vacío.
•
Eran programadas en lenguaje de máquina.
En esta generación las máquinas son grandes y costosas (de un costo aproximado de
cientos de miles de dólares).
En 1951 aparece la UNIVAC (NIVersAl Computer), fue la primera computadora comercial, que
Unidad I, POO
Página 3
disponía de mil palabras de memoria central y podían leer cintas magnéticas, se utilizó para
procesar el censo de 1950 en los Estados Unidos.
En las dos primeras generaciones, las unidades de entrada utilizaban tarjetas perforadas,
retomadas por Herman Hollerith (1860 - 1929), quien además fundó una compañía que con
el paso del tiempo se conocería como IBM (International Bussines Machines).
Después se desarrolló por IBM la IBM 701 de la cual se entregaron 18 unidades entre 1953 y
1957.
Posteriormente, la compañía Remington Rand fabricó el modelo 1103, que competía con la
701 en el campo científico, por lo que la IBM desarrollo la 702, la cual presentó problemas en
memoria, debido a esto no duró en el mercado.
La computadora más exitosa de la primera generación fue la IBM 650, de la cual se
produjeron varios cientos. Esta computadora que usaba un esquema de memoria secundaria
llamado tambor magnético, que es el antecesor de los discos actuales.
Otros modelos de computadora que se pueden situar en los inicios de la segunda generación
son: la UNIVAC 80 y 90, las IBM 704 y 709, Burroughs 220 y UNIVAC 1105.
Segunda Generación
Cerca de la década de 1960, las computadoras seguían evolucionando, se reducía su
tamaño y crecía su capacidad de procesamiento. También en esta época se empezó a definir
la forma de comunicarse con las computadoras, que recibía el nombre de programación de
sistemas.
Las características de la segunda generación son las siguientes:
•
Están construidas con circuitos de transistores.
•
Se programan en nuevos lenguajes llamados lenguajes de alto nivel.
En esta generación las computadoras se reducen de tamaño y son de menor costo.
Aparecen muchas compañías y las computadoras eran bastante avanzadas para su época
como la serie 5000 de Burroughs y la ATLAS de la Universidad de Manchester.
Algunas de estas computadoras se programaban con cintas perforadas y otras más por
medio de cableado en un tablero. Los programas eran hechos a la medida por un equipo de
expertos: analistas, diseñadores, programadores y operadores que se manejaban como una
orquesta para resolver los problemas y cálculos solicitados por la administración. El usuario
final de la información no tenía contacto directo con las computadoras. Esta situación en un
principio se produjo en las primeras computadoras personales, pues se requería saberlas
Unidad I, POO
Página 4
“programar” (alimentarle instrucciones) para obtener resultados; por lo tanto su uso estaba
limitado a aquellos audaces pioneros que gustaran de pasar un buen número de horas
escribiendo instrucciones, “corriendo” el programa resultante y verificando y corrigiendo los
errores o bugs que aparecieran. Además, para no perder el “programa” resultante había que
“guardarlo” (almacenarlo) en una grabadora de astte, pues en esa época no había discos
flexibles y mucho menos discos duros para las PC; este procedimiento podía tomar de 10 a
45 minutos, según el programa. El panorama se modificó totalmente con la aparición de las
computadoras personales con mejores circuitos, más memoria, unidades de disco flexible y
sobre todo con la aparición de programas de aplicación general en donde el usuario compra
el programa y se pone a trabajar. Aparecen los programas procesadores de palabras como el
célebre Word Star, la impresionante hoja de cálculo (spreadsheet) Visicalc y otros más que
de la noche a la mañana cambian la imagen de la PC. El sortware empieza a tratar de
alcanzar el paso del hardware. Pero aquí aparece un nuevo elemento: el usuario.
El usuario de las computadoras va cambiando y evolucionando con el tiempo. De estar
totalmente desconectado a ellas en las máquinas grandes pasa la PC a ser pieza clave en el
diseño tanto del hardware como del software. Aparece el concepto de human interface que
es la relación entre el usuario y su computadora. Se habla entonces de hardware ergonómico
(adaptado a las dimensiones humanas para reducir el cansancio), diseños de pantallas
antirreflejos y teclados que descansen la muñeca. Con respecto al software se inicia una
verdadera carrera para encontrar la manera en que el usuario pase menos tiempo
capacitándose y entrenándose y más tiempo produciendo. Se ponen al alcance programas
con menús (listas de opciones) que orientan en todo momento al usuario (con el consiguiente
aburrimiento de los usuarios expertos); otros programas ofrecen toda una artillería de teclas
de control y teclas de funciones (atajos) para efectuar toda suerte de efectos en el trabajo
(con la consiguiente desorientación de los usuarios novatos). Se ofrecen un sinnúmero de
cursos prometiendo que en pocas semanas hacen de cualquier persona un experto en los
programas comerciales. Pero el problema “constante” es que ninguna solución para el uso de
los programas es “constante”. Cada nuevo programa requiere aprender nuevos controles,
nuevos trucos, nuevos menús. Se empieza a sentir que la relación usuario-PC no está
acorde con los desarrollos del equipo y de la potencia de los programas. Hace falta una
relación amistosa entre el usuario y la PC.
Las computadoras de esta generación fueron: la Philco 212 (esta compañía se retiró del
mercado en 1964) y la UNIVAC M460, la Control Data Corporation modelo 1604, seguida por
la serie 3000, la IBM mejoró la 709 y sacó al mercado la 7090, la National Cash Register
empezó a producir máquinas para proceso de datos de tipo comercial, introdujo el modelo
NCR 315.
La Radio Corporation of America introdujo el modelo 501, que manejaba el lenguaje COBOL,
para procesos administrativos y comerciales. Después salió al mercado la RCA 601.
Tercera generación
Con los progresos de la electrónica y los avances de comunicación con las computadoras en la
década de los 1960, surge la tercera generación de las computadoras. Se inaugura con la IBM
360 en abril de 1964.
Unidad I, POO
Página 5
Las características de esta generación fueron las siguientes:
• Su fabricación electrónica está basada en circuitos integrados.
•
Su manejo es por medio de los lenguajes de control de los sistemas operativos.
La IBM produce la serie 360 con los modelos 20, 22, 30, 40, 50, 65, 67, 75, 85, 90, 195 que
utilizaban técnicas especiales del procesador, unidades de cinta de nueve canales, paquetes
de discos magnéticos y otras características que ahora son estándares (no todos los
modelos usaban estas técnicas, sino que estaba dividido por aplicaciones).
El sistema operativo de la serie 360, se llamó OS que contaba con varias configuraciones,
incluía un conjunto de técnicas de manejo de memoria y del procesador que pronto se
convirtieron en estándares.
En 1964 CDC introdujo la serie 6000 con la computadora 6600 que se consideró durante
algunos años como la más rápida.
En la década de 1970, la IBM produce la serie 370 (modelos 115, 125, 135, 145, 158, 168).
UNIVAC compite con los modelos 1108 y 1110, máquinas en gran escala; mientras que CDC
produce su serie 7000 con el modelo 7600. Estas computadoras se caracterizan por ser muy
potentes y veloces.
A finales de esta década la IBM de su serie 370 produce los modelos 3031, 3033, 4341.
Burroughs con su serie 6000 produce los modelos 6500 y 6700 de avanzado diseño, que se
reemplazaron por su serie 7000. Honey - Well participa con su computadora DPS con varios
modelos.
A mediados de la década de 1970, aparecen en el mercado las computadoras de tamaño
mediano, o minicomputadoras que no son tan costosas como las grandes (llamadas
también como mainframes que significa también, gran sistema), pero disponen de gran
capacidad de procesamiento. Algunas minicomputadoras fueron las siguientes: la PDP - 8 y
la PDP - 11 de Digital Equipment Corporation, la VAX (Virtual Address eXtended) de la
misma compañía, los modelos NOVA y ECLIPSE de Data General, la serie 3000 y 9000 de
Hewlett - Packard con varios modelos el 36 y el 34, la Wang y Honey - Well -Bull, Siemens
de origen alemán, la ICL fabricada en Inglaterra. En la Unión Soviética se utilizó la US
(Sistema Unificado, Ryad) que ha pasado por varias generaciones.
Cuarta Generación
Aquí aparecen los microprocesadores que es un gran adelanto de la microelectrónica, son
Unidad I, POO
Página 6
circuitos integrados de alta densidad y con una velocidad impresionante. Las
microcomputadoras con base en estos circuitos son extremadamente pequeñas y baratas, por lo
que su uso se extiende al mercado industrial. Aquí nacen las computadoras personales que han
adquirido proporciones enormes y que han influido en la sociedad en general sobre la llamada
“revolución informática”.
En 1976 Steve Wozniak y Steve Jobs inventan la primera microcomputadora de uso masivo y
más tarde forman la compañía conocida como la Apple que fue la segunda compañía más
grande del mundo, antecedida tan solo por IBM; y esta por su parte es aún de las cinco
compañías más grandes del mundo.
En 1981 se vendieron 80000 computadoras personales, al siguiente subió a 1400000. Entre
1984 y 1987 se vendieron alrededor de 60 millones de computadoras personales, por lo que
no queda duda que su impacto y penetración han sido enormes.
Con el surgimiento de las computadoras personales, el software y los sistemas que con ellas
de manejan han tenido un considerable avance, porque han hecho más interactiva la
comunicación con el usuario. Surgen otras aplicaciones como los procesadores de palabra,
las hojas electrónicas de cálculo, paquetes gráficos, etc. También las industrias del Software
de las computadoras personales crece con gran rapidez, Gary Kildall y William Gates se
dedicaron durante años a la creación de sistemas operativos y métodos para lograr una
utilización sencilla de las microcomputadoras (son los creadores de los productos de
Microsoft).
No todo son microcomputadoras, por supuesto, las minicomputadoras y los grandes sistemas
continúan en desarrollo. De hecho las máquinas pequeñas rebasaban por mucho la
capacidad de los grandes sistemas de 10 o 15 años antes, que requerían de instalaciones
costosas y especiales, pero sería equivocado suponer que las grandes computadoras han
desaparecido; por el contrario, su presencia era ya ineludible en prácticamente todas las
esferas de control gubernamental, militar y de la gran industria. Las enormes computadoras
de las series CDC, CRAY, Hitachi o IBM por ejemplo, eran capaces de atender a varios
cientos de millones de operaciones por segundo.
Quinta Generación
En vista de la acelerada marcha de la microelectrónica, la sociedad industrial se ha dado a la
tarea de poner también a esa altura el desarrollo del software y los sistemas con que se
manejan las computadoras. Surge la competencia internacional por el dominio del mercado
de la computación, en la que se perfilan dos líderes que, sin embargo, no han podido
alcanzar el nivel que se desea: la capacidad de comunicarse con la computadora en un
lenguaje más cotidiano y no a través de códigos o lenguajes de control especializados.
Unidad I, POO
Página 7
Japón lanzó en 1983 el llamado “programa de la quinta generación de computadoras”, con
los objetivos explícitos de producir máquinas con innovaciones reales en los criterios
mencionados. Y en los Estados Unidos ya está en actividad un programa en desarrollo que
persigue objetivos semejantes, que pueden resumirse de la siguiente manera:
•
Procesamiento en paralelo mediante arquitecturas y diseños especiales y circuitos de
gran velocidad.
•
Manejo de lenguaje natural y sistemas de inteligencia artificial.
El futuro previsible de la computación es muy interesante, y se puede esperar que esta
ciencia siga siendo objeto de atención prioritaria de gobiernos y de la sociedad en conjunto.
2, ¿Qué es una computadora?
Una computadora es un dispositivo capaz de realizar cálculos y tomar decisiones lógicas a
velocidades hasta miles de millones de veces más rápidas que las alcanzables por los seres
humanos. Por ejemplo, muchas de las computadoras personales actuales pueden realizar
decenas de millones de sumas por segundo, y lo más sorprendente es que pueden hacer
todo eso sin cometer errores, se imaginan a una persona provista de una calculadora cuánto
tiempo le tomaría realizar el mismo cálculo
3, Componentes de una computadora
Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El
Hardware (Parte Física) y el Software (Parte Lógica).
4. Hardware
Llamamos Hardware a la parte física de la computadora, pues vienen a ser las partes que
podamos percibir con el sentido del tacto. El hardware que compone a una computadora es
muy complejo, pues una pequeña pieza puede contener millones de transistores. Ejemplo de
Hardware podría ser la Tarjeta Madre, Memoria Principal, CPU, etc.
5. Partes del Hardware de una computadora
El Hardware está compuesto por seis unidades o secciones básicas y son las siguientes:
1. Unidad de entrada. Que es la sección de recepción de la computadora: obtiene
información (datos y programas de computadora) y lo coloca a disposición de las demás
unidades para que sea procesada. La información se introduce por medio del teclado o del
Mouse (ratón). Otros dispositivos pueden ser los escáneres, los lápices ópticos, las pantallas
touch screen, cámaras, etc.
Unidad I, POO
Página 8
2. Unidad de salida. La computadora muestra las respuestas a través de esta unidad, estas
respuestas son el resultado del procesamiento que realiza la computadora con los datos que
hemos introducido. Por ejemplo mediante un dispositivo de entrada como el teclado,
podemos escribir palabras la cuales las podremos observar por un dispositivo de salida como
el monitor o la pantalla.
Otros dispositivos de salida son también la impresora, los parlantes, tarjetas de video.
3. Unidad de memoria. También se la conoce como memoria RAM, es el almacén primario
de la computadora por lo que es relativamente de baja capacidad. Esta memoria es la más
importante de la computadora, porque guarda información necesaria para que la
computadora pueda arrancar y funcionar, en otras palabras guarda información de todos los
programas que se ejecutan en una computadora incluyendo al Sistema Operativo.
4. Unidad aritmética y lógica (ALU). Esta es la parte de la computadora en donde se realizan
los cálculos como sumas, restas, multiplicación y división.. Aquí están también los
mecanismos de decisión que permiten a la computadora, por ejemplo, comparar dos
elementos de la unidad de memoria para determinar si son iguales o no.
5. Unidad central de procesamiento (CPU). Es el cerebro de la computadora, pues es el
coordinador de la máquina y la parte encargada de supervisar el funcionamiento de las otras
secciones. La CPU le dice a la unidad de entrada cuándo debe leerse información para
introducirla en la unidad de memoria, le dice a la ALU cuando la información de la unidad de
memoria debe utilizarse en los cálculos y le dice la unidad de salida cuando debe enviar la
información que está en la unidad de memoria a ciertos dispositivos de salida.
6. Unidad de almacenamiento secundario. Esta es el almacén de largo plazo y de alta
capacidad de la computadora. Los programas y datos que no están siendo utilizados por las
otras unidades normalmente se colocan en dispositivos de almacenamiento secundario hasta
que se necesiten, posiblemente horas, días, meses o incluso años después. El acceso es
más lento comparado con el de la memoria primaria o memoria RAM.
6. Software
Nos referimos con software a la parte lógica de la computadora, a los procedimientos que el
hardware realiza inducidos por el software y este a su vez por nosotros. El software es como
un traductor que hace que nuestras órdenes se conviertan en realidad, manipulando el
hardware o la parte física.
Unidad I, POO
Página 9
El software está compuesto por programas de computadora.
7. Clasificación del software
A los fines prácticos se puede clasificar al software en tres grandes tipos:
o
Software de sistema: Su objetivo es desvincular adecuadamente al usuario y
al programador de los detalles del computador en particular que se use, aislándolo especialmente del procesamiento referido a las características internas de:
memoria, discos, puertos y dispositivos de comunicaciones, impresoras, pantallas, teclados, etc. El software de sistema le procura al usuario y programador
adecuadas interfaces de alto nivel, herramientas y utilidades de apoyo que permiten su mantenimiento. Ejemplo. Sistemas Operativos, Controladores de dispositivos, Herramientas de diagnóstico, Herramientas de Corrección y
Optimización, etc…
o
Software de programación: Es el conjunto de herramientas que permiten al
programador desarrollar programas informáticos, usando diferentes alternativas
y lenguajes de programación, de una manera práctica. Incluye entre otros:
Editores de texto, Compiladores, Intérpretes, Enlazadores, Depuradores, Entornos de Desarrollo Integrados (IDE).
o
Software de aplicación: Aquel que permite a los usuarios llevar a cabo una o
varias tareas específicas, en cualquier campo de actividad susceptible de ser
automatizado o asistido, con especial énfasis en los negocios. Incluye entre
otros: Aplicaciones de Sistema de control y automatización industrial,
Aplicaciones ofimáticas, Software educativo, Software empresarial, Bases de
datos, Telecomunicaciones (p.ej. internet y toda su estructura lógica),
Videojuegos, Software médico, etc…
8. Programa
Un programa es un conjunto de instrucciones lógicas que le dicen a la computadora que
debe hacer, además un programa debe satisfacer las necesidades de los usuarios utilizando
eficientemente los recursos disponibles.
Los programas que escribiremos más adelante serán en un lenguaje de programación muy
popular: Java.
9. Código Fuente
Le daremos el nombre de código fuente a los programas que escribamos en un determinado
lenguaje de programación, que simplemente estará compuesto por instrucciones escritas por
un programador. El código fuente no constituye software propiamente dicho pero es una
instancia mediante la cual se llega al Software
Unidad I, POO
Página 10
10. Sistema Operativo
Es el programa más importante que se ejecuta en una computadora. Cualquier computadora
de propósito general debe operar con un sistema operativo para lograr ejecutar otros
programas. El sistema operativo ejecuta las tareas básicas, como de reconocer entradas
desde el teclado, enviar mensajes a pantalla manteniendo rastro de los archivos y directorios
en el disco y controlar los dispositivos periféricos como las impresoras.
Para grandes sistemas, el sistema operativo tiene una gran responsabilidad y cualidades. Es
como un policía de tránsito, quien se asegura de que los diferentes programas que se
ejecutan
al
mismo
tiempo
no
interfieran
unos
con
otros.
También es responsable de la seguridad, asegurando que usuarios no autorizados accedan
al
sistema.
El sistema operativo provee de una plataforma de software por encima de la cual otros
programas, llamados aplicaciones, pueden ejecutarse. Los programas de aplicación tienen
que crearse de acuerdo a la plataforma en donde se van a ejecutar. La elección de sistema
operativo, entonces, determina el tipo de uso que se le va a dar a la PC como también el tipo
de aplicaciones que se puedan ejecutar.
Para las PCs (computadoras personales) los más populares sistemas operativos son el DOS,
OS/2, y Windows, además de otros de libre distribución como el Linux.
11. Evolución de los Sistemas Operativos
1. Procesamiento por lotes (batch): las primeras computadoras eran capaces de realizar
solamente una tarea o trabajo a la vez. La computadora ejecuta un solo programa a la
vez, mientras procesa los datos en grupos o lotes.
2. Multiprogramación: operación simultánea de muchas tareas dentro de la computadora
(esta comparte sus recursos entre los trabajos que compiten por su atención).
3. Tiempo compartido: es un caso especial de la multiprogramación en el cual los
usuarios acceden a la computadora a través de terminales, que por lo general son
dispositivos compuestos por un teclado y un monitor. Pueden existir docenas o incluso
cientos de usuarios compartiendo la computadora al mismo tiempo.
12. Lenguajes de alto nivel, ensambladores y de máquina
Los programadores escriben instrucciones en diversos lenguajes de programación. La
computadora puede entender directamente algunos de ellos, pero otros requieren pasos de
traducción intermedios. Hoy día se utilizan cientos de lenguajes de computadora, los cuales
pueden dividirse en tres tipos generales:
1. Lenguajes máquina
Una computadora sólo puede entender el lenguaje máquina. El lenguaje de máquina ordena
a la computadora realizar sus operaciones fundamentales una por una. Dicho lenguaje es
difícil de usar para las personas, porque trabajar con números no es muy cómodo además
estos números están en formato binario.
2. Lenguajes ensambladores
Para facilitar y agilizar su labor a los programadores, se buscaron nuevos lenguajes. El
Unidad I, POO
Página 11
lenguaje ensamblador consiste en pequeñas abreviaturas de palabras en ingles. Se crearon
los programas traductores para convertir los programas escritos en lenguaje ensamblador a
lenguaje máquina a velocidades de computadora. Estos lenguajes aun requerían muchas
instrucciones para realizar simples operaciones.
3. Lenguajes de alto nivel
Para acelerar, aún más, el proceso de programación se desarrollaron los lenguajes de alto
nivel, en los que se podía escribir una instrucción para realizar tareas sustanciales. Los
lenguajes de alto nivel permiten a los programadores escribir instrucciones que asemejan al
inglés cotidiano y contiene notaciones matemáticas de uso común.
13. Traductor de lenguajes de programación
A grandes rasgos, un traductor (compilador o intérprete) es un software que lee un programa
escrito en un lenguaje (lenguaje fuente) y lo traduce a un programa equivalente en otro
lenguaje (lenguaje objeto). Como parte importante de este proceso de traducción, el traductor
informa a su usuario de la presencia de errores en el programa fuente.
El proceso de traducción se divide en dos fases o etapas:
• Fase de análisis.- La parte del análisis divide al programa fuente en sus elementos
componentes y crea una representación intermedia del programa fuente.
• Fase de síntesis.- La parte de la síntesis construye el programa objeto deseado a
partir de la representación intermedia.
De las dos partes, la síntesis es la que requiere las técnicas más especializadas.
Además de un traductor, se pueden necesitar otros programas para crear un programa
objeto ejecutable. Un programa fuente se puede dividir en módulos almacenados en archivos
distintos. La tarea de reunir el programa fuente a menudo se confía a un programa distinto,
llamado preprocesador..
14. Proceso de traducción de programas
El proceso de traducción se compone internamente de varias etapas o fases, que realizan
distintas operaciones lógicas. Es útil pensar en estas fases como en piezas separadas dentro
del traductor, y pueden en realidad escribirse como operaciones codificadas separadamente
aunque en la práctica a menudo se integren juntas.
Fase de análisis
Análisis léxico
El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a
derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres
que tienen un significado. Además, todos los espacios en blanco, líneas en blanco,
comentarios y demás información innecesaria se elimina del programa fuente. También se
comprueba que los símbolos del lenguaje (palabras clave, operadores,...) se han escrito
correctamente.
Unidad I, POO
Página 12
Análisis sintáctico
En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases
gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido
de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). Por lo
general, las frases gramaticales del programa fuente se representan mediante un árbol de
análisis sintáctico.
Análisis semántico
La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores
semánticos y reúne la información sobre los tipos para la fase posterior de generación de
código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico
para identificar los operadores y operandos de expresiones y proposiciones.
Un componente importante del análisis semántico es la verificación de tipos. Aquí, el
compilador verifica si cada operador tiene operandos permitidos por la especificación del
lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programación
requieren que el compilador indique un error cada vez que se use un número real como
índice de una matriz. Sin embargo, la especificación del lenguaje puede imponer
restricciones a los operandos, por ejemplo, cuando un operador aritmético binario se aplica a
un número entero y a un número real.
Fase de síntesis
Consiste en generar el código objeto equivalente al programa fuente. Sólo se genera código
objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir que
el programa se ejecute correctamente, ya que un programa puede tener errores de concepto
o expresiones mal calculadas. Por lo general el código objeto es código de máquina
relocalizable o código ensamblador. Las posiciones de memoria se seleccionan para cada
una de las variables usadas por el programa. Después, cada una de las instrucciones
intermedias se traduce a una secuencia de instrucciones de máquina que ejecuta la misma
tarea. Un aspecto decisivo es la asignación de variables a registros.
Generación de código intermedio
Después de los análisis sintáctico y semántico, algunos compiladores generan una
representación intermedia explícita del programa fuente. Se puede considerar esta
representación intermedia como un programa para una máquina abstracta. Esta
representación intermedia debe tener dos propiedades importantes; debe ser fácil de
producir y fácil de traducir al programa objeto.
Optimización de código
La fase de optimización de código consiste en mejorar el código intermedio, de modo que
resulte un código máquina más rápido de ejecutar. Esta fase de la etapa de síntesis es
posible sobre todo si el traductor es un compilador (difícilmente un intérprete puede optimizar
Unidad I, POO
Página 13
el código objeto). Hay mucha variación en la cantidad de optimización de código que
ejecutan los distintos compiladores. En los que hacen mucha optimización, llamados
"compiladores optimizadores", una parte significativa del tiempo del compilador se ocupa en
esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo
de ejecución del programa objeto sin retardar demasiado la compilación.
Árbol sintáctico
Si el analizador sintáctico genera un árbol sintáctico, por lo regular se construye como una
estructura estándar basada en un puntero que se asigna de manera dinámica a medida que
se efectúa el análisis sintáctico. El árbol entero puede entonces conservarse como una
variable simple que apunta al nodo raíz. Cada nodo en la estructura es un registro cuyos
campos representan la información recolectada tanto por el analizador sintáctico como,
posteriormente, por el analizador semántico. Por ejemplo, el tipo de datos de una expresión
puede conservarse como un campo en el nodo del árbol sintáctico para la expresión.
En ocasiones, para ahorrar espacio, estos campos se asignan de manera dinámica, o se
almacenan en otras estructuras de datos, tales como la tabla de símbolos, que permiten una
asignación y desasignación selectivas. En realidad, cada nodo del árbol sintáctico por sí
mismo puede requerir de atributos diferentes para ser almacenado, de acuerdo con la clase
de estructura del lenguaje que represente. En este caso, cada nodo en el árbol sintáctico
puede estar representado por un registro variable, con cada clase de nodo conteniendo
solamente la información necesaria para ese caso.
Tabla de símbolos
Esta estructura de datos mantiene la información asociada con los identificadores: funciones,
variables, constantes y tipos de datos. La tabla de símbolos interactúa con casi todas las
fases del compilador: el analizador léxico, el analizador sintáctico o el analizador semántico
pueden introducir identificadores dentro de la tabla; el analizador semántico agregará tipos
de datos y otra información; y las fases de optimización y generación de código utilizarán la
información proporcionada por la tabla de símbolos para efectuar selecciones apropiadas de
código objeto.
Puesto que la tabla de símbolos tendrá solicitudes de acceso con tanta frecuencia, las
operaciones de inserción, eliminación y acceso necesitan ser eficientes, preferiblemente
operaciones de tiempo constante. Una estructura de datos estándar para este propósito es la
tabla de dispersión o de cálculo de dirección, aunque también se pueden utilizar diversas
estructuras de árbol. En ocasiones se utilizan varias tablas y se mantienen en una lista o pila.
15. Compilador
Para traducir un programa escrito en un lenguaje de alto nivel (programa fuente) a lenguaje
de máquina se utiliza un programa llamado compilador. Este programa tomará como datos
nuestro programa escrito en lenguaje de alto nivel y dará como resultado el mismo programa
pero escrito en lenguaje de máquina, programa que ya puede ejecutar directa o
indirectamente el ordenador.
Unidad I, POO
Página 14
Programa escrito en
lenguaje de alto nivel
un ->
Compilador
-> Programa escrito en
lenguaje de máquina
Por ejemplo, un programa escrito en el lenguaje C necesita del compilador C para poder ser
traducido. Posteriormente el programa traducido podrá ser ejecutado directamente por el
ordenador. En cambio, para traducir un programa escrito en el lenguaje Java necesita del
compilador Java; en este caso, el lenguaje de máquina no corresponde al del ordenador sino
al de una maquina ficticia, denominada maquina virtual java, que será puesta en marcha por
el ordenador para ejecutar el programa.
¿Qué es una maquina virtual? Una maquina que no existe físicamente sino que es simulada
en un ordenador por un programa. ¿Por qué utilizar una maquina virtual? Porque, por
tratarse de un programa, es muy fácil instalarla en cualquier ordenador, basta con copiar ese
programa en su disco duro, por ejemplo. Y, ¿qué ventajas reporta? Pues, en el caso de Java,
que un programa escrito en este lenguaje y compilado, puede ser ejecutado en cualquier
ordenador del mundo que tenga instalada esa máquina virtual. Esta solución hace posible
que cualquier ordenador pueda ejecutar un programa escrito en Java independientemente de
la plataforma que utilice, lo que se conoce como transportabilidad de programas.
Unidad I, POO
Página 15
16. Partes de un compilador
Normalmente los compiladores están divididos en dos partes:
• Front End: es la parte que analiza el código fuente, comprueba su validez, genera el
árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser
independiente de la plataforma o sistema para el cual se vaya a compilar.
• Back End: es la parte que genera el código máquina, específico de una plataforma, a
partir de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de
varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar
el código fuente de un lenguaje de programación concreto sirva para generar código máquina
en varias plataformas distintas.
El código que genera el Back End normalmente no se puede ejecutar directamente, sino que
necesita ser enlazado por un programa enlazador (linker)
17. 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.
18. Interprete
A diferencia de un compilador, un intérprete no genera un programa escrito en lenguaje
maquina a partir del programa fuente, sino que efectúa la traducción y ejecución
simultáneamente para cada una de las sentencias del programa. Por ejemplo, un programa
escrito en el lenguaje Basic necesita el interprete Basic para ser ejecutado. Durante la
ejecución de cada una de las sentencias del programa, ocurre simultáneamente la
traducción.
A diferencia de un compilador, un intérprete verifica cada línea del programa cuando se
escribe, lo que facilita la puesta a punto del programa. En cambio la ejecución resulta más
lenta ya que acarrea una traducción simultánea.
Unidad I, POO
Página 16
Ojo
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).
19. Ejemplos de lenguajes interpretados
Algunos ejemplos de lenguajes que son normalmente interpretados en vez de compilados
son:
•
•
•
•
•
•
•
•
•
•
Perl
PHP
Java
Javascript
Logo
ASP (hasta la versión 3)
Python
C#
J#
ASP
20. Diferencia entre Compilador e Intérprete
Los
compiladores
difieren
de
los
intérpretes
en
varios
aspectos:
Un programa que ha sido compilado puede correr por sí solo, pues en el proceso de
compilación
se
lo
transformo
en
otro
lenguaje
(lenguaje
máquina).
Un intérprete traduce el programa cuando lo lee, convirtiendo el código del programa
directamente en acciones.
La ventaja del intérprete es que cualquier programa se puede interpretar en cualquier
plataforma (sistema operativo), en cambio el archivo generado por el compilador solo
funciona
en
la
plataforma
en
donde
se
lo
ha
creado.
Pero por otro lado un archivo compilado puede ser distribuido fácilmente conociendo la
plataforma, mientras que un archivo interpretado no funciona si no se tiene el intérprete.
Unidad I, POO
Página 17
Hablando de la velocidad de ejecución un archivo compilado es de 10 a 20 veces más rápido
que un archivo interpretado.
21. Maquina Virtual
En informática una máquina virtual es un software que emula a un ordenador y puede
ejecutar programas como si fuese un ordenador real. Este software en un principio fue
definido como "un duplicado eficiente y aislado de una máquina física". La acepción del
término actualmente incluye a máquinas virtuales que no tienen ninguna equivalencia directa
con ningún hardware real.
Una característica esencial de las máquinas virtuales es que los procesos que ejecutan están
limitados por los recursos y abstracciones proporcionados por ellas. Estos procesos no
pueden escaparse de este "ordenador virtual".
Uno de los usos domésticos más extendidos de las máquinas virtuales es ejecutar sistemas
operativos para "probarlos". De esta forma podemos ejecutar un sistema operativo que
queramos probar (Linux, por ejemplo) desde nuestro sistema operativo habitual (Windows
por ejemplo) sin necesidad de instalarlo directamente en nuestro ordenador y sin miedo a
que se desconfigure el sistema operativo primario.
22. Tipos de Maquinas Virtuales
Las máquinas virtuales se pueden clasificar en dos grandes categorías según su
funcionalidad y su grado de equivalencia a una verdadera máquina.
• Máquinas virtuales de sistema (en inglés System Virtual Machine)
• Máquinas virtuales de proceso (en inglés Process Virtual Machine)
23. Máquinas virtuales de sistema
Las máquinas virtuales de sistema, también llamadas máquinas virtuales de hardware,
permiten a la máquina física subyacente multiplexarse entre varias máquinas virtuales, cada
una ejecutando su propio sistema operativo. A la capa de software que permite la
virtualización se la llama monitor de máquina virtual o "hypervisor". Un monitor de máquina
virtual puede ejecutarse o bien directamente sobre el hardware o bien sobre un sistema
operativo ("host operating system").
24. Aplicaciones de las máquinas virtuales de sistema
• Varios sistemas operativos distintos pueden coexistir sobre el mismo ordenador, en
sólido aislamiento el uno del otro, por ejemplo para probar un sistema operativo nuevo
sin necesidad de instalarlo directamente.
• La máquina virtual puede proporcionar una arquitectura de instrucciones (ISA) que sea
algo distinta de la de la verdadera máquina. Es decir, podemos simular hardware.
• Varias máquinas virtuales (cada una con su propio sistema operativo llamado sistema
operativo "invitado" o "guest"), pueden ser utilizadas para consolidar servidores. Esto
permite que servicios que normalmente se tengan que ejecutar en ordenadores
distintos para evitar interferencias, se puedan ejecutar en la misma máquina de
Unidad I, POO
Página 18
manera completamente aislada y compartiendo los recursos de un único ordenador.
La consolidación de servidores a menudo contribuye a reducir el coste total de las
instalaciones necesarias para mantener los servicios, dado que permiten ahorrar en
hardware.
• La virtualización es una excelente opción hoy día, ya que las maquinas actuales
(Laptops, desktops, servidores) en la mayoría de los casos están siendo "subutilizados" (gran capacidad en disco, memoria RAM, en la mayoría de los casos se
utiliza entre 30% a 60% de su capacidad). al virtualizar la necesidad de nuevas
maquinas en una ya existencia se ahorra GRANDEMENTE EN COSTOS Asociados
(energía, mantenimiento, espacio, etc.
Funcionamiento de VMWare,
una de las máquinas virtuales
de sistema más populares
25. Máquinas virtuales de proceso
Una máquina virtual de proceso, a veces llamada "máquina virtual de aplicación", se ejecuta
como un proceso normal dentro de un sistema operativo y soporta un solo proceso. La
máquina se inicia automáticamente cuando se lanza el proceso que se desea ejecutar y se
para cuando éste finaliza. Su objetivo es el de proporcionar un entorno de ejecución
independiente de la plataforma de hardware y del sistema operativo, que oculte los detalles
de la plataforma subyacente y permita que un programa se ejecute siempre de la misma
forma sobre cualquier plataforma.
El ejemplo más conocido actualmente de este tipo de máquina virtual es la máquina virtual
de Java. Otra máquina virtual muy conocida es la del entorno .Net de Microsoft que se llama
"Common Language Runtime".
Funcionamiento de la máquina
virtual de Java, una de las
máquinas virtuales de proceso
más populares.
Unidad I, POO
Página 19
26. Inconvenientes de las máquinas virtuales
Uno de los inconvenientes de las máquinas virtuales es que agregan gran complejidad al
sistema en tiempo de ejecución. Esto tiene como efecto la ralentización del sistema, es decir,
el programa no alcanzará la misma velocidad de ejecución que si se instalase directamente
en el sistema operativo "anfitrión" (host) o directamente sobre la plataforma de hardware. Sin
embargo, a menudo la flexibilidad que ofrecen compensa esta pérdida de eficiencia.
27. Lista de máquinas virtuales
Máquinas virtuales de proceso
Máquinas virtuales de sistema
• Common Language Runtime - C#,
• VThere (de Sentillion, Inc. [1])
Visual Basic .NET, J#, Managed C++
• ATL (A MTL Virtual Machine)
• EiffelStudio, para el lenguaje de
• Bochs emulador de PC x86 y AMD64,
programación Eiffel
portátil y open source
• Lenguaje de programación Erlang
• CoLinux Open Source Linux inside
• Forth virtual machine - Forth
Windows
• Glulx - Glulx, Z-code
• Denali, uses paravirtualization of x86 for
running para-virtualized PC operating
• Harbour - Harbour virtual machine
systems.
• Hec - Hasm Assembler
• FAUmachine
• Inferno - Limbo
• Hercules emulator, free System/370,
• Java virtual machine - Java, Nice,
ESA/390, z/Mainframe
NetREXX
• Integrity Workstation Green Hills
• Low Level Virtual Machine (LLVM) Software[2]
actualmente C, C++, Stacker
• LilyVM
is
a
lightweight
virtual
• Lua
machineAn
introduction
• Macromedia Flash Player - SWF
• Microsoft Virtual PC y Microsoft Virtual
• MMIX - MMIXAL
Server
• Neko virtual machine actualmente Neko
• OKL4
y haXe
• Parallels Workstation, virtualización de
• O-code machine - BCPL
x86 para ejecutar sistemas operativos
• P-code machine - Pascal
• Parallels Desktop for Mac, virtualización
• Parrot - Perl 6
de x86 para ejecutar máquinas virtuales
• Perl virtual machine - Perl
en Mac OS X
• Portable.NET - C#, Visual Basic .NET,
• QEMU, muy popular en entornos Linux
J#, Managed C++
• SheepShaver.
• YARV - Ruby
• Simics
• Rubinius - Ruby
• SVISTA
• ScummVM - Scumm
• Trango Virtual Processors
• SECD machine - ISWIM, Lispkit Lisp
• TwoOStwo
• Sed the stream-editor can also be seen
• User-mode Linux
as a VM with 2 storage spaces.
• VirtualBox
• Smalltalk virtual machine - Smalltalk
• Virtual Iron (Virtual Iron 3.1)
• SQLite virtual machine - SQLite
• Virtual Operating System de Star Virtual
opcodes
Unidad I, POO
Página 20
•
•
•
•
Machines
Squeak virtual machine - Squeak
•
VM de IBM
SWEET16
• VMware (ESX Server, Fusion, Virtual
TrueType virtual machine - TrueType
Server, Workstation, Player y ACE)
Valgrind - chequeo de accesos a
• Xen
memoria y "leaks" en x86/x86-64 code
under Linux
• KVM
• VX32 virtual machine - application-level
• IBM POWER SYSTEMS
virtualization for native code
Máquinas virtuales a nivel de sistema
• Virtual Processor (VP) from Tao Groupoperativo
(UK).
• OpenVZ
• Waba - similar a Java, para dispositivos
• Virtuozzo
pequeños
• FreeVPS
• Warren Abstract Machine - Prolog,
• Linux-VServer
CSC GraphTalk
• FreeBSD Jails
• Z-machine - Z-Code
• Solaris Containers
• Zend Engine - PHP
• AIX Workload Partitions
28. Virtualización
La virtualización es un término amplio que se refiere a la abstracción de los recursos de una
computadora. Este término es bastante antiguo: viene siendo usado desde antes de 1960, y
ha sido aplicado a diferentes aspectos y ámbitos de la informática, desde sistemas
computacionales completos hasta capacidades o componentes individuales. El tema en
común de todas las tecnologías de virtualización es la de ocultar los detalles técnicos a
través de la encapsulación. La virtualización crea un interfaz externo que esconde una
implementación subyacente mediante la combinación de recursos en locaciones físicas
diferentes, o mediante la simplificación del sistema de control. Un reciente desarrollo de
nuevas plataformas y tecnologías de virtualización han hecho que se vuelva a prestar
atención a este maduro concepto. De modo similar al uso de términos como “abstracción” y
“orientación a objetos”, virtualización es usado en muchos contextos diferentes.
29. Depurador
En informática, programa diseñado para ayudar a depurar otro programa al permitir al
programador observar su ejecución instrucción por instrucción. Se pueden visualizar los
valores de las variables en cada momento y establecer puntos de ruptura (instrucción que se
marca indicando donde detener la ejecución del programa para ver hasta ese momento el
resultado de la ejecución). Los depuradores a nivel de código máquina presentan las
instrucciones de máquina reales (desensambladas en lenguaje ensamblador) y permiten al
programador observar los registros y ubicaciones en la memoria.
Bibliografía
Deitel Harvey y Deitel Paul. “Como Programar en Java, Quinta edición. Editorial Prentice Hall. 2004.
Gálvez, Sergio y Moramata Miguel. “Java a Tope: TRADUCTORES Y COMPILADORES CON LEX/
YACC , JFLEX /CUP Y JAVACC”. Universidad de Málaga, Depto. De lenguajes y Ciencias de la
Computación. España 2005
www.wikipedia.com/
UDO Monagas, Semestre I-2009
Prof. Fabricio Bravo Guevara
Unidad I, POO
Página 21
Descargar