Lenguajes de programación

Evolución histórica y generaciones. Ensamblador. Lenguaje de alto nivel. Código máquina

  • Enviado por: Rocio
  • Idioma: castellano
  • País: República Dominicana República Dominicana
  • 11 páginas
publicidad
publicidad

UNIVERSIDAD DEL CARIBE

INFORMATICA I

SANTO DOMINGO, REP. DOM.

20/04/2001

Lenguajes de Programación

Al desarrollarse las primeras computadoras electrónicas, se vio la necesidad de programarlas, es decir, de almacenar en memoria la información sobre la tarea que iban a ejecutar. Las primeras se usaban como calculadoras simples; se les indicaban los pasos de cálculo, uno por uno.

John Von Neumann desarrolló el modelo que lleva su nombre, para describir este concepto de "programa almacenado". En este modelo, se tiene una abstracción de la memoria como un conjunto de celdas, que almacenan simplemente números. Estos números pueden representar dos cosas: los datos, sobre los que va a trabajar el programa; o bien, el programa en sí.

¿Cómo es que describimos un programa como números? Se tenía el problema de representar las acciones que iba a realizar la computadora, y que la memoria, al estar compuesta por switches correspondientes al concepto de bit, solamente nos permitía almacenar números binarios.

La solución que se tomó fue la siguiente: a cada acción que sea capaz de realizar nuestra computadora, asociarle un número, que será su código de operación (opcode) . Por ejemplo, una calculadora programable simple podría asignar los opcodes :

1 = SUMA, 2 = RESTA, 3 = MULTIPLICA, 4 = DIVIDE.

Supongamos que queremos realizar la operación 5 * 3 + 2, en la calculadora descrita arriba. En memoria, podríamos "escribir" el programa de la siguiente forma:

Localidad Opcode Significado Comentario 0 5 5 En esta localidad, tenemos el primer número de la fórmula 1 3 * En esta localidad, tenemos el opcode que representa la multiplicación. 2 3 3 En esta localidad, tenemos el segundo número de la fórmula 3 1 + En esta localidad, tenemos el opcode que representa la suma. 4 2 2 En esta localidad, tenemos el último número de la fórmula

Podemos ver que con esta representación, es simple expresar las operaciones de las que es capaz el hardware (en este caso, nuestra calculadora imaginaria), en la memoria.

La descripción y uso de los opcodes es lo que llamamos lenguaje de máquina . Es decir, la lista de códigos que la máquina va a interpretar como instrucciones, describe las capacidades de programación que tenemos de ella; es el lenguaje más primitivo, depende directamente del hardware, y requiere del programador que conozca el funcionamiento de la máquina al más bajo nivel.

Los lenguajes más primitivos fueron los lenguajes de máquina. Esto, ya que el hardware se desarrolló antes del software, y además cualquier software finalmente tiene que expresarse en el lenguaje que maneja el hardware.

La programación en esos momentos era sumamente tediosa, pues el programador tenía que "bajarse" al nivel de la máquina y decirle, paso a pasito, cada punto de la tarea que tenía que realizar. Además, debía expresarlo en forma numérica; y por supuesto, este proceso era propenso a errores, con lo que la productividad del programador era muy limitada. Sin embargo, hay que recordar que en estos momentos, simplemente aún no existía alternativa.

El primer gran avance que se dio, como ya se comentó, fue la abstracción dada por el Lenguaje Ensamblador, y con él, el nacimiento de las primeras herramientas automáticas para generar el código máquina. Esto redujo los errores triviales, como podía ser el número que correspondía a una operación, que son sumamente engorrosos y difíciles de detectar, pero fáciles de cometer. Sin embargo, aún aquí es fácil para el programador perderse y cometer errores de lógica, pues debe bajar al nivel de la forma en que trabaja el CPU, y entender bien todo lo que sucede dentro de él.

Con el desarrollo en los 50s y 60s de algoritmos de más elevado nivel, y el aumento de poder del hardware, empezaron a entrar al uso de computadoras científicos de otras ramas; ellos conocían mucho de Física, Química y otras ramas similares, pero no de Computación, y por supuesto, les era sumamente complicado trabajar con lenguaje Ensamblador en vez de fórmulas. Así, nació el concepto de Lenguaje de Alto Nivel, con el primer compilador de FORTRAN (FORmula TRANslation), que, como su nombre indica, inició como un "simple" esfuerzo de traducir un lenguaje de fórmulas, al lenguaje ensamblador y por consiguiente al lenguaje de máquina. A partir de FORTRAN, se han desarrollado innumerables lenguajes, que siguen el mismo concepto: buscar la mayor abstracción posible, y facilitar la vida al programador, aumentando la productividad, encargándose los compiladores o intérpretes de traducir el lenguaje de alto nivel, al lenguaje de computadora.

Hay que notar la existencia de lenguajes que combinan características de los de alto nivel y los de bajo nivel (es decir, Ensamblador). Mi ejemplo favorito es C: contiene estructuras de programación de alto nivel, y la facilidad de usar librerías que también son características de alto nivel; sin embargo, fue diseñado con muy pocas instrucciones, las cuales son sumamente sencillas, fáciles de traducir al lenguaje de la máquina; y requiere de un entendimiento apropiado de cómo funciona la máquina, el uso de la memoria, etcétera. Por ello, muchas personas consideramos a lenguajes como C (que fue diseñado para hacer sistemas operativos), lenguajes de nivel medio.

Evolución Generacional

Generaciones de Computadoras

Desde que en la primera parte de la década del 50 se empezaron a utilizar las computadoras con fines comerciales, estas han evolucionado de manera tal que pueden diferenciarse cinco generaciones.

La tecnología empleada para la fabricación de las computadoras y la arquitectura de las mismas, son los dos factores a tener en cuenta para decidir cuándo termina una generación y empieza otra.

Describiremos a continuación las diferencias existentes entre las generaciones.

Primera Generación. (1951-l956)

Estas computadoras estaban basadas fundamentalmente en válvulas electrónicas. Por este motivo, su tamaño era grande y su mantenimiento complicado: Se calentaban rápidamente, obligando esto a utilizar costosos sistemas de refrigeración. Los equipos valvulares, poseían escasa confiabilidad ya que por ejemplo el tiempo medio entre fallas era inferior a una hora, esto implica que para garantizar el buen funcionamiento de un equipo se necesitaba la dedicación de un grupo de personas encargadas de su mantenimiento. Los tiempos de respuesta de los circuitos eran de varios rnil segundos con lo cual un programa largo tardaba varias horas, incluso días en procesarse.

La forma de procesar de estos equipos era estrictamente secuencial. Primero el programa se perforaba en tarjetas, luego se ingresaba en la memoria de la computadora y a continuación se ejecutaba procesando las instrucciones una a una. En cada instante la computadora se dedicaba a una sola tarea, por lo cual si se realizaba un proceso de Lectura de tarjetas perforadas, los restantes componentes del sistema permanecían inactivos a la espera de la finalización del proceso de lectura.

Con el objeto de colaborar con el sector militar estadounidense, se trabajó con una computadora que fuese capaz de calcular tablas de trayectoria de cañones. Se denominó a esta computadora ENIAC.

Si bien el objetivo recién se cumplió finalizada la guerra, sus inventores John Mauchhly y Presper Eckert, se convencieron de que las computadoras a gran escala eran viables, con lo que pusieron en marcha una compañía privada y así crearon en 1951 el Univac I, con el cual la oficina dc censos de los Estados Unidos comenzó a trabajar. Esto representó lo que se conoce como la primera generación de computadores representada por cl ENIAC con 18000 válvulas. 30 toneladas de peso y una avería cada 7 minutos. No obstante efectuaba cálculos 500 veces más rápido que cualquier calculadora electromecánica de ese tiempo.

A pesar de su gran costo, este tipo dc máquina se convirtió en una herramienta sumamente necesaria para los científicos e ingenieros de la época.

Segunda Generación.(1957-1963)

En las computadoras de segunda generación se reemplazaron las válvulas por los transistores. Este avance tecnológico, supuso una reducción considerable del tamaño y un aumento importante de la confiabilidad de los equipos. De todas maneras, si bien esta segunda generación permitió realizar simultáneamente operaciones de cálculo y de entrada-salida, éstas últimas eran lo suficientemente lentas como para lograr un aumento de las velocidades de procesamiento bastante relativo. El transistor inventado en 1948, desempeñaba la misma función de un tubo de vacío (válvula). Los mismos, se emplearon por primera vez en 1956, suceso que dio origen a la segunda generación de computadoras.

Gracias a las mejoras ocurridas en la época, también fue más fácil y rápido programar y usar estas computadoras. Como resultado el uso de las computadoras se difundió no solo en las empresas estatales, sino también a nivel privado, en las ciencias y en la ingeniería.

El control del clima en los laboratorios, si bien existía no era tan preocupante como antes ya que no existían más las válvulas con sus filamentos incandescentes que irradiaban calor.

Tercera Generación.(1964-1974)

El paso dado entre la segunda y tercera generación de computadoras fue de una gran magnitud. Esto se debió a la aparición del circuito integrado. Esto llevó a una nueva miniaturización de los equipos, a

incrementar el tiempo medio entre fallas de la unidad central de procesamiento y a procesar instrucciones en tiempos del orden del milisegundo (10 -9 seg.).

En esta tercera generación, es posible la ejecución de varios programas simultáneamente, pero cada programa está ocupando la actividad de la unidad central en un tiempo dado, mientras que los restantes, trabajaban con las unidades de Entrada-Salida. Este método de funcionamiento se denomina multiprogramación.

La tercera generación también permitió acercar la información a los usuarios finales, tanto a profesionales informáticos como a los de otras especialidades. En aquellos tiempos, el creciente programa espacial de los Estados Unidos requería computadoras más pequeñas y veloces que las de segunda generación. Esta fue como los investigadores desarrollaron una tecnología que permitiera integrar cientos de transistores en un circuito integrado, el cual rápidamente reemplazó a los equipos transistorizados.

Cuarta Generación (1975-....?)

A fines de la década del setenta. y con la aparición del Microprocesador, se produjo una nueva convulsión en el mundo de la informática. Es en esta generación en la que la microelectrónica ha volcado todo su potencial en el hardware de las computadoras, aportando circuitos integrados de media, alta y muy alta escala de integración (cientos de miles de componentes integrados).

La invención del microprocesador causó cambios inmediatos y profundos en la apariencia y en la capacidad de procesamiento de las computadoras de aquel entonces.

Es la P.C. (Computadora Personal) la protagonista indiscutible de esta cuarta generación Llegando a prestaciones similares a las de minicomputadores de pocos años antes. Con ella la computación ha logrado una enorme popularidad y la herramienta computadora está presente en la mesa de trabajo de muchísimos profesionales, como así también en fábricas, escuelas y hogares.

En la división de generaciones hasta aquí desarrollada, la tecnología utilizada permitió que una generación presentase mayor velocidad, mayor capacidad de memoria y menor tamaño que su generación predecesora.

En estas cuatro generaciones predomina la construcción de computadoras según el modelo de Von Newmann. El denominado proyecto de quinta generación plantea el desarrollo de computadores con procesadores en paralelo.

Proyecto de Quinta Generación. (....actual?)

Se anunció en Japón en 1982 el proyecto de computadoras dc quinta generación. El nuevo modelo de computador pretendía innovar las técnicas informáticas en especial en los aspectos de velocidad de procesamiento, operaciones con lógica simbólica y aplicaciones orientadas a Inteligencia Artificial.

Esta generación se caracteriza por poseer una arquitectura paralela, esto implica varios procesadores realizando varias tareas en forma simultánea y coordinados por otro procesador. Es evidente, que la computación paralela necesita un mercado donde se realicen grandes cálculos numéricos. Todavía no existe una demanda amplia de computadores paralelos, por otro lado, el boom que en los años 80 provocó el tema de la inteligencia artificial tampoco tuvo la repercusión esperada. o. (no es el ultimo punto)