Organizacion del computador
SECC 6
JOSE LEDEZMA C.I. 17.352.958
LENGUAJES DE ALTO NIVEL
Son aquellos que se encuentran más cercanos al lenguaje natural que al lenguaje máquina y además se caracterizan por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas. En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área especÃfica y sus instrucciones requerÃan de una sintaxis predefinida. Se clasifican como lenguajes procedimentales. Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de muy alto nivel se crearon para que el usuario común pudiese solucionar tal problema de procesamiento de datos de una manera más fácil y rápida.
Ante estas limitaciones surge la necesidad de crearlo para que sea más fácil de utilizar y que sirva para cualquier ordenador, es asà como nacen los lenguajes de nivel alto, con unas caracterÃsticas principales para satisfacer la necesidad:
Universalidad: Posibilidad de utilización en cualquier computador.
Orientación al problema: es decir, creados para un determinado problema.
Su importancia radica en que un programador no tiene porque tener un conocimiento sobre el ordenador, simplemente se puede limitar a preocuparse del lenguaje en si mismo. Esto acarrea el consiguiente problema de que se necesitara de un “traductor†posteriormente para pasarse al lenguaje máquina: los llamados compiladores.
Estos lenguajes se podrÃan dividir en tres: Procedurales, por bloques, orientados a objetos.
Lenguajes Procedurales:
Los lenguajes procedurales están fundamentados en la utilización de variables para almacenar valores y en la realización de operaciones con los datos almacenados.
Algunos ejemplos son: FORTRAN, PASCAL, C, ADA, ALGOL...
En este tipo de lenguajes, cuyo origen está ligado a la propia arquitectura de Von Neumann, la arquitectura consta de una secuencia de celdas, llamadas memoria, en la cual se pueden guardar en forma codificada, lo mismo datos que instrucciones; y de un procesador, el cual es capaz de ejecutar de manera secuencial una serie de operaciones, principalmente aritméticas y booleanas, llamadas comandos. En general, un lenguaje procedural ofrece al programador conceptos que se traducen de forma natural al modelo de la máquina. El programador por lo general tiene que traducir la solución abstracta del problema a términos muy primitivos, cercanos a la máquina. La distancia entre el nivel del razonamiento humano y lo expresable por los lenguajes imperativos causa que sus programas sean más "comprensibles" para la máquina que para el hombre.
Con un lenguaje procedural el usuario (normalmente será un programador) especifica qué datos se necesitan y cómo hay que obtenerlos. Esto quiere decir que el usuario debe especificar todas las operaciones de acceso a datos llamando a los procedimientos necesarios para obtener la información requerida. Estos lenguajes acceden a un registro, lo procesan y basándose en los resultados obtenidos, acceden a otro registro, que también deben procesar. Asà se va accediendo a registros y se van procesando hasta que se obtienen los datos deseados. Las sentencias de un lenguaje procedural deben estar embebidas en un lenguaje de alto nivel, ya que se necesitan sus estructuras (bucles, condicionales, etc.) para obtener y procesar cada registro individual. A este lenguaje se le denomina lenguaje anfitrión.
Orientados a objetos
Un objeto se puede definir como un grupo de procedimientos que comparten un estado. Se define al conjunto de datos como “estadoâ€, y “métodos†como el conjunto de procedimientos que pueden alterar ese estado. Un programa orientado a objeto es un método de implementación en el que los programas están organizados como colecciones de objetos, donde cada uno es una instancia de alguna clase, y donde todas las clases son miembros de una jerarquÃa de clases conectadas por relaciones de herencia.
Son aquellos en los que el lenguaje obliga a seguir una determinada metodologÃa.
Son lenguajes recientes y como ejemplos de ellos tendrÃamos:
 SMALLTALK: SerÃa el primer lenguajes relevante orientado a objetos. Es principalmente un lenguaje interpretado, es decir es un lenguaje compilado en forma incremental: tanto el compilador como el lenguaje son parte del ambiente de programación smalltalk, cuando se utiliza smalltalk nunca se sale del ambiente de programación.
 C++: Es una versión ampliada de C. Es un lenguaje de propósito bastante general que tiene su fundamento obviamente en el antiguo C, pero que utiliza algunas sentencias de smalltalk. Es un programa compilado.
 JAVA: Se diseñó para ser pequeño, sencillo y portátil a través de plataformas y sistemas operativos, tanto a nivel de código fuente como binario, lo que significa que los programas en Java pueden ejecutarse en cualquier computadora que tenga instalada una máquina virtual de Java. Es un lenguaje ideal para distribuir programas ejecutables via WWW, además de un lenguaje de programación de propósito general para desarrollar programas que sean fáciles de usar. Otra caracterÃstica es que es interpretado ya que corre en máquina virtual.
Lenguajes Concurrentes, Paralelos y Distribuidos:
La necesidad de ofrecer concurrencia en el acceso a los recursos computacionales se remonta a los primeros sistemas operativos. Mientras que un programa realizaba una operación de entrada o salida otro podrÃa gozar del tiempo del procesador para realizar otra distinta. Aprovechar al máximo los recursos computacionales fue una necesidad apremiante, sobre todo en la época en que las computadoras eran caras y escasas; el sistema operativo tenÃa que ofrecer la ejecución concurrente y segura de programas de varios usuarios, que desde distintas terminales utilizaban un solo procesador, y asà surgió la necesidad de introducir algunos conceptos de programación concurrente para programar los sistemas operativos.
Posteriormente, cuando los procesadores cambiaron de tamaño y de precio, se abrió la posibilidad de contar con varios procesadores en una máquina y ofrecer el procesamiento en paralelo, es decir, procesar varios programas al mismo tiempo. Esto dio el impulso a la creación de lenguajes que permitÃan expresar el paralelismo.
Finalmente, llegaron las redes de computadoras, que también ofrecen la posibilidad de ejecución en paralelo, pero con procesadores distantes, lo cual conocemos como la programación distribuida.
En resumen, el origen de los conceptos para el manejo de concurrencia, paralelismo y distribución está en el deseo de aprovechar al máximo la arquitectura Von Neumann y sus modalidades reflejadas en conexiones paralelas y distribuidas.
Históricamente encontramos en la literatura soluciones conceptuales y mecanismos tales como: semáforos, regiones crÃticas, monitores, envÃo de mensajes (CSP), llamadas a procedimientos remotos (RPC), que posteriormente se incluyeron como partes de los lenguajes de programación en Concurrent Pascal, Modula, Ada, OCCAM, y últimamente en Java.
Ventajas- La escritura es similar al lenguaje humano (PRINT, WRITE, READ, etc.).
- Modificaciones son más fáciles.
- Transportabilidad.
Desventajas- Aumenta la ocupación de memoria.
- El tiempo de ejecución de los programas es mucho mayor.
