lunes, 3 de noviembre de 2014

Historia de los lenguajes de programación

Historia de los lenguajes de programación


La historia de la informática y de la computación se ha caracterizado fundamentalmente en la existencia de centenares de lenguajes de programación, de forma tal que siempre se ha hablado de “la Babel de los lenguajes”, aunque bien es cierto que son solo unas decenas escasas los que han tenido un impacto significativo, y uno pocos los utilizados en la industria, los negocios y la ciencia.

Muchos de los lenguajes de programación actuales tienen sus raíces en los lenguajes que nacieron a finales de los cincuenta y primeros años de los sesenta, tales como COBOL (1960) , FORTRAN IV(1961), BASIC (1964), LOGO (1967). Estos lenguajes representaron la primera alternativa a los lenguajes ensambladores. En la década de los setenta y primeros años de los ochenta emergieron nuevos lenguajes, como Pascal (1971), C (1972) y Ada (1979), que se convirtieron en dominantes, desplazando por ejemplo a otros como ALGOL Y BASIC. Otros lenguajes, como COBOL y FORTRAN, lograron adaptarse y se mantuvieron como lenguajes de referencia en el mundo de los negocios y en el campo científico, respectivamente, con versiones actualizadas y estandarizadas por organizaciones como ANSI.

Todos esto lenguajes anteriores seguían el estilo de programación estructurada y se conocían lenguajes de programación imperativos o estructurados. En paralelo con el desarrollo de estos lenguajes surgieron dos nuevos estilos o paradigmas de programación; programación funcional y programación orientada a objetos. Posteriormente a principios de los ochenta apareció C++ como lenguaje imperativo con propiedades de orientación a objetos y que durante la década de los noventa ha sido el lenguaje de programación orientada a objetos por excelencia. En 1995 se presento oficialmente por el constructor Sun el lenguaje Java, un lenguaje orientado a objetos y con una funcionalidad muy dirigida a la red Internte. En el año 2000 Microsoft presento C#.

El lenguaje C: historia y características


C es el lenguaje de programación de propósito general asociado, de modo universal, al sistema operativo UNIX. Sin embargo la popularidad, eficacia y potencia de C se ha producido porque este lenguaje no esta prácticamente asociado a ningún sistema operativo, ni a ninguna maquina en especial. Esta es la razón fundamental por la cual C es conocido como el lenguaje de programación de sistemas por excelencia.

C es una evolución de los lenguajes BCPL – desarrollado por Martin Richards- y B- desarrollado por Ken Thompson en 1970—para el primitivo UNIX de la computadora DEC PDP-7.
C nació realmente en 1978. Desde su nacimiento, C fue creciendo en popularidad y los sucesivos cambios en el lenguaje a lo largo de los años junto a la creación de compiladores por grupos no involucrados en su diseño hicieron necesario pensar en la estandarizacion de la definición del lenguaje C.

C es un lenguaje de alto nivel, que permite programar con instrucciones de lenguajes de propósito genera. También C se define como un lenguaje de programación estructurado de propósito general; aunque en su diseño también primo el hecho de fuera especificado como un lenguaje de programación de sistemas, lo que proporciona una enorme cantidad de potencia y flexibilidad.

Ventajas de C


El lenguaje C tiene una gran cantidad de ventajas sobre otros lenguajes y constituye precisamente la razón fundamental de que después de casi dos décadas de uso C siga siendo uno de los lenguajes mas populares, utilizados en empresas, organizaciones y fabricas de software de todo el mundo.

Algunas ventajas que posee este lenguaje son:

  • El lenguaje C es poderoso y flexible, con ordenes, operaciones y funciones de biblioteca que se pueden utilizar para escribir la mayoría de los programas que corren en la computadora.
  • C se utiliza por programadores profesionales para desarrollar software en la mayoría de los modernos sistemas de computadora.
  • Se puede utilizar C para desarrollar sistema operativos, compiladores, sistemas de tiempo real y aplicaciones de comunicaciones.
  • Un programa C puede ser escrito para un tipo de computadora y trasladarse a otro computadora con pocas o ninguna modificación .   
C se caracteriza por su velocidad de ejecución. En los primeros días de la informática los problemas de tiempo de ejecución se resolvían escribiendo todo o parte de una aplicación en lenguaje ensamblador. Debido a que existen mucho programas escritos en C se han creado numerosas bibliotecas C para programadores profesionales que soportan gran variedad de aplicaciones.

 Características técnicas de C


Hay numerosas características que diferencias a C de otros lenguajes y lo hacen eficiente y potente a la vez

  • Una nueva sintaxis para declarar funciones. Una declaración de función puede añadir una descripción de los argumentos de la función. Esta información adicional sirve para que los compiladores detecten mas fácilmente los errores causados por argumentos que no coinciden.
  • Asignación de estructuras y enumeraciones.
  • Pre-procesador mas sofisticado.
  • Una nueva definición de la biblioteca que acompaña a C. Entre otras funciones se incluyen: acceso al sistema operativo (por ejemplo, lectura y escritura de archivos), entrada y salida con formato, asignación dinámica de memoria, manejo de cadenas de caracteres.
  • Una colección de cabeceras estándar que proporciona acceso uniforme a las declaraciones de funciones y tipos de datos.

 Breve historia de C++


C++ es heredero directo del lenguaje C que a su vez se deriva del lenguaje B. C se mantiene como un subconjunto de C++. El lenguaje de programación C fue desarrollado por Dennos Ritche de AT&T Bell Laboratorios que se utilizo para escribir y mantener el sistema operativo Unix. C es un lenguaje de propósito general que se puede utilizar para escribir cualquier tipo de programa. Aunque C es un lenguaje muy potente, tiene dos características que lo hacen inapropiado como una introducción moderna a la programación. Primero, C requiere un nivel de sofisticacion a sus usuarios que les obliga a un difícil aprendizaje para los programadores principiantes, ya que es de comprensión difícil. Segundo, C fue diseñado al principio de los setenta, y la naturaleza de la programación ha cambiado de modo significativo en la década de los ochenta y noventa.

Para subsanar estas deficiencias Bjarne Stroustrup de AT&T Bell Laboratorios desarrollo C++ al principio de la década de los ochenta. Stroustrup diseño C++ como un mejor C. En general, C estándar es un subconjunto de C++ y la mayoría de los programas C son también programas C++. C++, ademas de añadir propiedades a C, presenta características y propiedades de programación orientada a objetos, que es una técnica de programación muy potente.

Se han presentado varias versiones de C++ y su evolución continua en la actualidad. Las características mas notables que han ido incorporándose a C++ son : herencia múltiple, genericidad, plantillas, funciones virtuales, excepciones, etc.


Breve historia de Java


Ocho años después de su lanzamiento, Java se convirtió  en un estándar de la industria, en un lenguaje de programación para desarrollo de aplicaciones tanto de propósito general como de Internet y también en un lenguaje para comenzar la formación en programación, al tener características excelentes para el aprendizaje.

Java, desarrollado por Sun Microsystems en 1995, es un magnifico y completo lenguaje de programación orientado a objetos diseñado para distribuir contenidos a través de una red. Una de sus principales características es que permite operar de forma independiente de la plataforma y del sistema operativo que se este utilizando. Esto quiere decir que permite crear una aplicación que podrá descargarse de la red y funcionar posteriormente en cualquier tipo de plataforma de hardware o software. Generalmente, por el contrario, todo programa o aplicación queda atado a dos cosas: a hardware y al sistema operativo.

La idea de Java por el contrario, es poner una capa sobre cualquier plataforma de hardware y sobre cualquier sistema operativo para permitir que cualquier aplicación desarrollada en Java quede ligada únicamente a Java, independizada por lo tanto de la plataforma. Esta concepción queda recogida en el concepto de maquina virtual JVM (Java Virtual Machina), un software que interpreta instrucciones para cualquier maquina sobre la que este corriendo y que permite, una vez instalado, que una misma aplicación pueda funcionar en un PC o en un Mac sin tener que tocarla. Hoy en día cualquier sistema operativo (Windows, Macintosh, Linux, Unix, Solaris, etc.) cuenta con una JVM, Así que, lo que hace java en combinación con esta “maquina” es funcionar como hardware y como sistema operativo virtual, emulando en software una CPU universal. Al instalar Java esta actuara como una capa de abstracción entre un programa y el sistema operativo, otorgando una total independencia de lo que haya por debajo, es decir; cualquier aplicación funcionara en cualquier maquina e incluso en cualquier dispositivo.

Otra gran ventaja es que los programadores no tendrán que desarrollar varias versiones de la misma aplicación, puesto que el modelo de desarrollo es el mismo se trate del dispositivo mas pequeño o del mas grande de los servidores. Otra gran ventaja es que permite que todas las maquinas, plataformas y aplicaciones se comuniquen entre si accediendo desde cualquier equipo, donde quiera que este. En definitiva, se puede decir que Java es lo mas cercano a un lenguaje de computación universal que existe hoy día, lo que significa que puede correr en cualquier plataforma siempre y cuando una maquina virtual haya sido escrita para ella.

C# el mas joven


A pesar del éxito de java, indudable por otra parte, también tiene sus lagunas. Entre ellas la dificultad para la interoperabilidad de lenguajes cruzados o programación de lenguajes mezclados. ES decir, la capacidad para que el código producido por un lenguaje funcione fácilmente con el código producido por otro. La interoperabilidad de lenguajes cruzados se requiere para la creación de sistemas de software grandes y distribuidos, así como para la construcción de componentes de software.

Otra carencia notable de Java es la no integración completa de la plataforma Java, aunque los programas java se pueden ejecutar en un entorno Windows ( suponiendo que se ha instalado la Maquina Virtual Java). Para responder a estas necesidades Microsoft creo C# dentro de su estrategia global .NET y nombro arquitecto jefe del proyecto a Anders Hejlsberg , uno de los grandes expertos mundiales en lenguajes de programación (entre otros proyectos creo en los ochenta el popular Turbo Pascal).

C# esta relacionado directamente con C, C++ y Java. De C ha heredado su sintaxis, muchas de las palabras reservadas y sus operadores. De C++ ha heredado su modelo de objetos. La relación con Java es mas bien de “amor/odio”. C# y Java son familia, mas bien primos hermanos, sin embargo C# no es descendiente de Java, aunque compartan unos descendientes comunes, C y C++. Por ejemplo, ambos soportan programación distribuida y ambos utilizan código intermedio para conseguir portabilidad, pero difieren en los detalles. C# añade importantes innovaciones al arte de la programación. Por ejemplo, C# incluye delegados, propiedades, indexadores y eventos como elementos del lenguaje.

También añade sintaxis que soporta atributos. Además C# racionaliza la creación de componentes, eliminado los problemas asociados con COM. También, en este caso como Java, ofrece una cantidad significativa de verificación de errores en tiempo de ejecución , seguridad y gestión de la ejecución. En resumen C# reúne la potencia de C++ con la seguridad de tipos de Java.

 C# representa en la primera década del siglo XXI (21) a un lenguaje de programación con la mayoría de las grandes propiedades que todo buen lenguaje debe cumplir. Por esta razón es un lenguaje que ningún programador profesional puede ignorar si desea realizar desarrollador elegantes y eficientes.

Lenguajes de Programación

Lenguajes de Programación


Los lenguajes de programación sirven para escribir programas que permitan la comunicación usuario/maquina. Unos programas especiales llamados traductores (compiladores o interpretes) convierten las instrucciones escritas en lenguajes de programación en instrucciones escritas en lenguajes maquina (0 y 1, bits) que la computadora pueda entender.

Los programas de utilidad facilitan el uso de la computadora. Un ejemplo es un editor de textos que permite la escritura y edición de documentos. Los programas que realizan tareas concretas, nominas, contabilidad etc.., se denominan programas de aplicación.

Se debe diferenciar entre el acto de crear un programa y la acción de la computadora cuando ejecuta las instrucciones del programa. La creación de un programa se hace inicialmente en papel y a continuación se introduce en la computadora y se convierte en lenguaje entendible por la computadora.

El propósito de un lenguaje informático (lenguaje de computadora) es permitir a las personas comunicarse con una computadora. Los lenguajes de los humanos y los lenguajes de la maquina son muy diferentes, ya que las características y posibilidades de las personas y de las maquinas son muy diferentes. Los lenguajes de computadoras permiten a las personas escribir en un lenguaje que sea mas apropiado a las características humanas y se puedan traducir al lenguaje maquina de diferentes tipos de maquinas.

Los principales tipos de lenguajes utilizados en la actualidad son tres:

  1. Lenguaje maquina
  2. Lenguaje de bajo nivel (ensamblador)
  3. Lenguajes de alto nivel


Lenguajes maquinas


Los lenguajes maquina son aquellos que están escritos en lenguajes directamente inteligibles por la maquina (computadora), ya que sus instrucciones son cadenas binarias (cadenas o series de caracteres—dígitos—0 y 1)que especifican una operación, y las posiciones (dirección) de memoria implicadas en la operación se denominan instrucciones de maquina o código maquina. El código maquina es el conocido código binario.

Las instrucciones en lenguaje maquina dependen del hardware de la computadora y, por tanto diferirán de una computadora a otra. El lenguaje maquina de un PC sera diferente de un sistema HP, Dell, Compaq etc…


 Las ventajas de programar en lenguaje maquina se refieren, fundamentalmente, a la posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción posterior, lo que supone una velocidad de ejecución superior a cualquier otro lenguaje de programación.

Los inconvenientes superan a las ventajas, lo que hace prácticamente no recomendables los lenguajes maquina al programador de aplicaciones. Estos inconvenientes son:

  • Dificultad y lentitud en la codificación.
  • Poca fiabilidad,
  • Dificultad grande de verificar y poner a punto los programas,
  • Los programas solo son ejecutables en el mismo procesador (UCP),

 Para evitar los lenguajes maquina, desde el punto de vista del usuario, se han creado otros lenguajes que permiten escribir programas con instrucciones similares al lenguaje humano. Esto lenguajes se denominan de alto y bajo nivel.

Lenguajes de bajo nivel


Los lenguajes de bajo nivel son mas fáciles de utilizar que los lenguajes maquina, pero al igual que ellos, dependen de la maquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotécnicos . Por ejemplo, nemotécnicos típicos de operaciones aritméticas son: en ingles ADD, SUB, DIV, etc., en español, SUM, RES, DIV, etc.

Una instrucción típica de suma seria:

ADD, M, N, P

Esta instrucción podía significar “sumar el numero contenido en la posición de memoria M al numero almacenado en la posición de memoria N y situar el resultado en la posición de memoria P”. Evidentemente , es mucho mas sencillo recordar la instrucción anterior con un nemotécnico que su equivalente en código maquina:

0110 1001 1010 1011

Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la computadora – en esto se diferencia esencialmente del lenguaje maquina- , sino que requiere una fase de traducción al lenguaje maquina.

El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje maquina se conoce como programa objeto, ya directamente inteligible por la computadora.

El traductor de programas fuente a objeto es un programa llamado ensamblador, existente en casi todas las computadoras.

No se debe confundir el programa ensamblador, encargado de efectuar la traducción del programa fuente escrito a lenguaje maquina, que el lenguaje ensamblador, lenguaje de programación con una estructura y gramática definidas.

Los lenguajes ensambladores presentan la ventaja frente a los lenguajes maquina de su mayor facilidad de codificación y , en general, su velocidad de calculo.

Los inconvenientes mas notables de los lenguajes ensambladores son:

  • Dependencia total de la maquina, lo que impide la transportabilidad de los programas (posibilidad de ejecutar un programa en diferentes maquinas).
  • La formación de los programadores es mas compleja que la correspondiente a los programadores de alto nivel, ya que exige no solo las técnicas de programación, sino también el conocimiento del interior de la maquina.

Lenguajes de alto nivel


Los lenguajes de alto nivel son los mas utilizados por los programadores. Están diseñados para que las personas escriban y entiendan los programas de un modo mucho mas fácil que los lenguajes maquina y ensambladores. Otra razón es que un programa escrito en lenguaje de alto nivel es independiente de la maquina; esto es, las instrucciones del programa de la computadora no dependen del diseño del hardware o de una computadora en particular. En consecuencia, los programas escritos en lenguaje de alto nivel son portables o transportables, lo que significa la posibilidad de poder ser ejecutados con poca o ninguna modificación en diferentes tipos de computadoras; al contrario que los programas en lenguaje maquina o ensamblador, que solo se pueden ejecutar en un determinado tipo de computadora. Los lenguajes de alto nivel presentan las siguientes ventajas:

  • El tiempo de formación de los programadores es relativamente corto comparado con otros lenguajes.
  • La escritura de programas se basa en reglas sintácticas similares a los lenguajes humanos. Nombres de las instrucciones, pueden ser READ, WRITE, PRINT, OPEN, etc.
  • Las modificaciones puestas a punto de los programas son mas fáciles.
  • Reducción del conste de los programas.
  • Transportabilidad.

Los inconvenientes se concretan en:

  • Incremento del tiempo de puesta a punto, al necesitarse diferentes traducciones del programa fuente para conseguir el programa definitivo.
  • No se aprovechan los recursos internos de la maquina, que se explotan mucho mejor en lenguajes máquina y ensambladores.
  • Aumento de la ocupación de memoria.
  • El tiempo de ejecución de los programas es mucho mayor.

 Al igual que sucede con los lenguajes ensambladores, los programas fuente tienen que ser traducidos por los programas traductores, llamados en este caso compiladores e interpretes.

Traductores de lenguaje


Los traductores de lenguaje son programas que traducen a su vez los programas fuente escritos en lenguajes de alto nivel a código maquina. Los traductores se dividen en:
  • Compiladores
  •  Interpretes

Interpretes


Un interprete es un traductor que toma un programa fuente, lo traduce y a continuación lo ejecuta. Los programas interpretes clásicos, como BASIC, prácticamente ya no se utilizan, aunque puede encontrarse una vieja computadora que funcione con la versión QBASIC bajo el sistema operativo DOS que corre en las computadoras personales.


Compiladores


Después que se ha diseñado el algoritmo y escrito el programa en un papel, se debe comenzar el proceso de introducir el programa en un archivo (fichero) en el disco duro de la computadora. La introducción y modificación de su programa en un archivo se hace utilizando un editor de texto o simplemente un editor, un programa que viene con su computadora, normalmente, y que le permite el almacenamiento y recuperaron de lo que se ha escrito en el disco. El aprendizaje de cómo utilizar un editor hace la tarea de introducir un programa una tarea muy fácil.

El programa que se ha introducido esta escrito en C o en Java, pero ni C ni java son lenguajes maquina de su computadora, muy al contrario son lenguajes de alto nivel diseñados para hacer mas fácil la programación que utilizando el lenguaje maquina. Una computadora no entiende los lenguajes de alto nivel. En consecuencia, un programa escrito en un lenguaje de alto nivel debe ser traducido a un lenguaje que la maquina pueda comprender. Los lenguajes que la computadora puede comprender mas o menos directamente se llaman lenguajes de bajo nivel. La traducción de un programa escrito en en lenguaje de alto nivel, como C++ o Java, a un lenguaje que pueda entender la computadora se hace mediante otro programa conocido como compilador.

Los lenguajes de bajo nivel que la computadora puede entender directamente se conocen como lenguajes ensamblador o lenguajes maquina. En realidad, aunque son muy similares y en ocasiones se les considera sinónimos, tienen algunas pequeñas diferencias. El lenguaje que la computadora puede comprender directamente se denomina lenguaje maquina. El lenguaje ensamblador es casi la misma cosa, pero necesita un paso adicional para que la traducción pueda ser entendida por la maquina. Si un compilador traduce su programa de alto nivel a algún lenguaje de bajo nivel, no es exactamente lenguaje de maquina, se necesitara, por tanto una pequeña traducción adicional antes de ser ejecutado en la computadora, pero normalmente este proceso suele ser automático y no es problemático.

Cuando se ejecuta un programa en lenguaje de alto nivel, tal como C, C++ o Java, se esta ejecutando realmente una traducción de ese programa a un lenguaje de bajo nivel. Por consiguiente, antes de que se ejecute un programa escrito en un lenguaje de alto nivel, se debe ejecutar en primer lugar el compilador en el programa. Cuando se ejecuta un compilador sobre sus programa se dice que se compila el programa.

Una desventaja del proceso de traducción que se acaba de describir es que se necesita un compilador diferente para cada tipo de computadora y cada sistema operativo. Si se desea ejecutar su programa en lenguaje de alto nivel en tres maquinas diferentes, se necesitaran utilizar tres diferentes compiladores y se debe compilar su programa tres veces.

En resumen , para crear y ejecutar un programa en un lenguaje tal como C, C++ o Java, se necesita introducir el programa utilizando un editor de texto; ejecutar un programa especial denominado compilador, traducir el lenguaje de alto nivel a lenguaje maquina y a continuación cargar el lenguaje maquina en memoria principal y ejecutarlo.

La compilación y sus fases


La compilación es el proceso de traducción de programas fuente a programas objeto. El programa objeto obtenido de la compilación ha sido traducido normalmente a código maquina.

Para conseguir el programa maquina real se debe utilizar un programa llamado montador o enlazador. El proceso de montaje conduce a un programa en lenguaje maquina directamente ejecutable.

El proceso de ejecución de un programa escrito en un lenguaje de programación y mediante un compilador suele tener los siguientes pasos:

  1. Escritura del programa fuente con un editor y guardarlo en un dispositivo de almacenamiento.
  2. Introducir el programa fuente en memoria.
  3. Compilar el programa con el compilador 
  4. Verificar y corregir errores de compilación (listado de errores),
  5. Obtención del programa objeto.
  6. El enlazador obtiene el programa ejecutable
  7. Se ejecuta el programa y, si no existen errores, se tendrá la salida del programa.

miércoles, 26 de febrero de 2014

Fundamentos de hardware y software

Fundamentos de hardware y software

La simple verdad es que las computadoras realizan solo cuatro funciones básicas:

·        Recibir una entrada: Aceptan información del mundo exterior.
·  Procesar información: Realizar operaciones aritméticas o lógicas (toma de decisiones) sobre la información.
·        Producir una salida: Comunican información al mundo exterior.
·        Almacenar información: Desplazan y mueven información en la memoria.

Cada sistema de computadora contiene componentes hardware (partes físicas) especializadas en cada una de estas cuatro funciones:

Dispositivos de entrada: aceptan una entrada del mundo exterior. Los dispositivos más comunes de entrada hoy día, desde luego, son los teclados y los dispositivos para señalar, como el ratón.

Dispositivos de salida: envían información al mundo exterior. Todas las computadoras utilizan una pantalla o un monitor de video como dispositivo principal de salida, una impresora para producir papeles impresos y altavoces para dar salida a los sonidos.

Un microprocesador, también llamado procesador o unidad central de procesamiento (CPU) es en efecto el cerebro de la computadora. La CPU procesa información, realiza cálculos aritméticos y toma decisiones básicas comparando valores de información.

La memoria y los dispositivos de almacenaje: almacenan ambos información, pero sirven a diferentes propósitos. La memoria de la computadora o RAM se utiliza para almacenar programas y datos que necesitan ser instantáneamente accesibles para la CPU. Los dispositivos de almacenamiento, incluyendo las unidades de disco duro, CD grabables, unidades de DVD sirven como repositorios de datos. Un dispositivo de almacenamiento (por ejemplo un disco duro), puede considerarse como un dispositivo combinado de entrada y salida, porque la computadora envía información al dispositivo de almacenamiento (salida) y más tarde recupera esa información de allí (entrada).

Una computadora consta de dos partes bien diferenciadas, hardware y software. El hardware consta de las partes físicas, tangibles de la computadora. Es software consta de programas, también llamados aplicaciones, que contienen instrucciones que la computadora ejecuta o corre. Una computadora necesita tanto del hardware como del software para poder ser usada real y prácticamente.

Hardware

Cuando un usuario interactúa con una computadora, proporciona una entrada; en respuesta, la computadora procesa la entrada devolviendo una salida valiosa al usuario. La entrada puede ser en formato de órdenes o instrucciones dadas, texto, números o imágenes escaneadas. La salida puede ser el resultado: cálculos en una hoja de cálculo, una carta impresa en una impresora o un auto moviéndose por la pantalla en un juego de carreras de autos. Una computadora necesita disponer de un conjunto de funcionalidades y proporcionar la capacidad de:

1.      Aceptar la entrada
2.      Visualizar o presentar la salida
3.      Almacenar la información en un formato consistente lógicamente.
4.   Ejecutar operaciones aritméticas o lógicas bien sobre datos de entrada o bien sobre datos de salida.
5.     Monitorizar, controlar y dirigir las operaciones globales y de secuencia del sistema.

Dispositivos de entrada/Salida (E/S)

Para que el usuario pueda introducir la entrada, la computadora tiene varios dispositivos de entrada como parte de su hardware: el teclado y el ratón son los más populares. La salida al usuario se le proporciona mediante dispositivos de salida, tales como impresora o pantalla.

Los dispositivos de Entrada/Salida (E/S) permiten la comunicación entre la computadora y el usuario. Los dispositivos de entrada, como su nombre indica, sirven para introducir datos (información) en la computadora para su proceso. Los datos se leen de los dispositivos de entrada y se almacenan en la memoria central o interna. Los dispositivos de entrada convierten la información de entrada en señales eléctricas que se almacenan en la memoria central.

Los dispositivos de salida permiten representar los resultados (salida) del proceso de los datos. El dispositivo de salida típico es la pantalla o monitor.

El teclado y la pantalla constituyen, en muchas ocasiones un único dispositivo denominado Terminal. Un teclado de Terminal es similar al teclado de una maquina de escribir con la diferencia de algunas teclas extras que tiene el Terminal para funciones especiales.

El procesador

El procesador es el dispositivo interior de la computadora que ejecuta las instrucciones del programa. Otros términos sinónimos utilizados para nombrar al procesador son: UCP (Unidad Central de Proceso, en ingles CPU, Central Proscessing Unit) o chip. El procesador solo puede ejecutar instrucciones simples, tales como cálculos aritméticos sencillos o desplazamientos de números por diferentes posiciones. Sin embargo, la velocidad a la cual se realizan estos cálculos debe ser muy grande y esta característica le permite ejecutar instrucciones que realizan cálculos complejos.

La UCP procesa o manipula la información almacenada en memoria; puede recuperar información desde memoria (esta información son datos o instrucciones: programas). También puede almacenar los resultados de estos procesos en memoria para su uso posterior.


La CPU, a menudo llamada solo procesador, realiza las transformaciones de entrada en salida. Cada computadora tiene al menos una CPU para interpretar y ejecutar las instrucciones de cada programa, para hacer las manipulaciones aritméticas y lógicas de datos, y para comunicarse con las otras partes del sistema indirectamente a través de la memoria.

La CPU contiene circuitería para realizar una variedad de tareas sencillas llamadas instrucciones. Una instrucción individual solo realiza una pequeña cantidad de trabajo. Una instrucción típica podría ser “leer los contenidos de la ubicación X de la memoria y añadir el numero Y a ella”. La mayoría de las CPU tiene un vocabulario de menos de 1000 instrucciones distintas.

Todos los programas informáticos están compuestos de instrucciones extraídas de este pequeño vocabulario. Un programa típico está compuesto de millones de instrucciones, y la CPU puede procesar millones de instrucciones por segundo. Le ejecución de instrucciones, rápida como el fuego, crea la ilusión de movimiento, del mismo modo que una película simula el movimiento a partir de una secuencia de fotos fijas.

La CPU típica está dividida en varias unidades funcionales: control, cálculo o aritmética, decodificación, bus y pre búsqueda. Estas unidades funcionan juntas como operarios en una línea de ensamblaje para completar la ejecución de las instrucciones del programa.

En la mayoría de los casos la ejecución de instrucciones es realizada por la unidad aritmético-lógica (UAL) de la CPU. La UAL incluye registros, cada uno de los cuales tiene generalmente un tamaño de 32 o 64 bits.

Las instrucciones del programa se guardan en el almacén primario (memoria), que esta generalmente en los chips exteriores de la CPU. La primera tarea de la CPU es leer una instrucción de la memoria. La unidad de bus manipula toda la comunicación entre la CPU y el almacenamiento principal.

La unidad de pre búsqueda indica  a la unidad de bus que lea la instrucción almacenada en una dirección particular de la memoria. Esta unidad toma no solo la próxima instrucción a ejecutar, sino también varias instrucciones siguientes, para asegurarse de que una instrucción este siempre lista para ejecutarse.

La unidad de decodificación toma la instrucción leída por la unidad de pre búsqueda y la traduce a un formato apropiado para el procesador interno de la CPU. Esto lo hace siguiendo los pasos requeridos para completar una instrucción en la unidad de control.

Si una instrucción requiere que la información se envíe fuera de la CPU entonces la fase final de ejecución es la de contestar, en la que la unidad de bus escribe los resultados de la instrucción de nuevo en la memoria o en algún otro dispositivo.


La memoria central (interna)

Otra parte muy importante de una computadora es la memoria. La unidad memoria almacena la información en un formato lógicamente consistente. Normalmente, tanto las instrucciones como los datos se almacenan en memoria, con frecuencia en áreas distintas y separadas. La memoria se divide en dos categorías: memoria principal y memoria auxiliar. La memoria principal (central) contiene el programa en ejecución y los resultados de los cálculos intermedios de la computadora. Se conoce normalmente como memoria RAM. La memoria auxiliar o almacenamiento secundario consta de dispositivos utilizados para almacenar los datos de modo permanente. Cuando se necesitan los datos se pueden recuperar de estos dispositivos. El programa se almacena en memoria externa de modo permanente pero cuando se ha de ejecutar debe transferirse a la memoria central .Este proceso se realiza mediante órdenes al sistema operativo que realiza las operaciones correspondientes.

Con el propósito de almacenar datos, una computadora consta de una gran colección de pequeños circuitos electrónicos capaces de almacenar un bit. Estos circuitos son como pequeños interruptores de luz que puedan estar en dos estados: uno para “encendido” y otro para “apagado”.

Un bit es un circuito o un digito que puede tener exactamente dos valores: cero y uno (0 y 1).

La memoria central o simplemente memoria se utiliza para almacenar información. Se divide a su vez en memoria RAM y memoria ROM. La memoria RAM es normalmente volátil, lo que significa que todo cuanto se almacena o guarda en ella se pierde cuando se apaga la computadora. En general, la información almacenada en memoria puede ser de dos tipos: las instrucciones de un programa y los datos con los que operan las instrucciones. Por ejemplo para que un programa se pueda ejecutar (correr o funcionar) debe ser situado en la memoria central, en una operación denominada carga (load) del programa. Después, cuando se ejecuta el programa, cualquier dato a procesar por el programa se debe llevar a la memoria mediante las instrucciones del programa. En la memoria  central hay también datos diversos y espacios de almacenamiento temporal que necesita el programa cuando se ejecuta con el fin de poder funcionar. Los programas y datos se almacenan en RAM mientras se esta utilizando la computadora. La memoria RAM puede ser estática o dinámica según sea el proceso de fabricación.

Con el objetivo de que el procesador pueda obtener los datos de la memoria central más rápidamente, la mayoría de los procesadores actuales utilizan con frecuencia una memoria denominada cache, que sirve para almacenamiento intermedio de datos entre el procesador y la memoria principal. La memoria cache se incorpora casi siempre al procesador.

La memoria central de una computadora es una zona de almacenamiento organizada en centenares o millares de unidades de almacenamiento individual o celdas. La memoria central consta de un conjunto de celdas de memoria (estas celdas o posiciones de memoria se denominan también palabras). El número de celdas de memoria de la memoria central, depende del tipo y modelo de computadora; hoy el numero suele ser millones. Cada celda de memoria consta de un cierto número de bits.

La unidad elemental de memoria se llama byte (octeto). Un byte tiene la capacidad de almacenar un carácter de información y esta formado por un conjunto de unidades más pequeñas de almacenamiento denominadas  bits, que son dígitos binarios (0 o 1).

La memoria ROM (memoria de solo lectura) contiene instrucciones fundamentales que no se pueden modificar o perder de modo accidental por el usuario. Estas memoria incluyen aquellas instrucciones que son necesarias para cargar inicialmente al software cuando se enciende la maquina y cualesquiera  otras instrucciones que el fabricante requiere para estar accesible desde un modo personal cuando el computador esta funcionado. La ROM es no volátil, su contenido no se pierde cuando se apaga la computadora. Al ser esta memoria de solo lectura, los programas almacenados en los chips ROM no se pueden modificar y suelen utilizarse para almacenar los programas del sistema que sirven para arrancar la computadora.


Los chips de memoria están generalmente agrupados en pequeños paneles de circuitos llamados SIMM (módulos sencillos de memoria en línea) y DIMM (módulos duales de memoria en línea), y conectados a la placa madre.

Los bytes de memoria tienen direcciones únicas que los identifican y ayudaran a la CPU a mantener el registro de donde se almacenan las cosas.

La CPU solo puede mirar en la memoria de acceso. Las direcciones de la memoria constituyen todo el universo de la CPU, así que cualquier programa que necesita ejecutarse o los datos que deben modificarse deben colocarse en la memoria.

Cuando enciende la computadora, la CPU empieza automáticamente a ejecutar las instrucciones almacenadas en la memoria de solo lectura (ROM). En la mayoría de los sistemas informáticos, la ROM también contiene partes del sistema operativo. Los programas firmware de la ROM se conocen a veces como BIOS (basic input/output system, sistema básico de entrada/salida).

Las instrucciones que se ejecutan ayudan al sistema a iniciarse y le indican como cargar el sistema operativo (copiarlo del disco a la memoria).

Una vez que las instrucciones de ejecución están cargadas en la memoria, la CPU es capaz de ejecutarlas.


Direcciones de memoria

Existen dos conceptos importantes asociados a cada celda o posición de memoria: su dirección y su contenido. Cada celda o byte tiene asociada una única dirección que indica su posición relativa en memoria y mediante la cual se puede acceder a la posición para almacenar o recuperar información. El contenido de estas direcciones o posiciones de memoria se llaman palabras, de modo que existen palabras de 8, 16,32, y 64 bits. Por consiguiente, si trabaja con una maquina de 32 bits, significa que en cada posición de memoria de su computadora puede alojar 32 bits, es decir, 32 dígitos, bien ceros y unos.

Siempre que una nueva información se almacena en una posición se destruye cualquier información que en ella hubiera y no se puede recuperar. La dirección es permanente y única, el contenido puede cambiar mientras se ejecuta un programa.


Unidades de medida de almacenamiento de la computadora
                      
Byte
Byte (B)
Equivale a
8 bits
Kilobyte
Kbyte (KB)
Equivale a
1.024 bytes
Megabyte
Mbyte (MB) 
Equivale a
1.024 Kilobytes
Gigabyte
Gbyte (GB)
Equivale a
1.024 Megabytes
Terabyte
Tbyte (TB)
Equivale a
1.024 Gigabytes
Petabyte
Pbyte (PB)
Equivale a
1.024 Terabytes
Exabyte
Ebyte (EB)
Equivale a
1.024 Petabytes
Zettabyte
Zbyte (ZB)
Equivale a
1.024 Exabytes
Yotta
Ybyte (YB)
Equivale a
1.024 Yottabytes


Bytes y direcciones

La memoria principal se divide en posiciones numeradas denominadas bytes. El número asociado con un byte es su dirección en alusión a la técnica de identificar las casas de una ciudad por su dirección. Un grupo de bytes consecutivos se utiliza como la posición de un elemento de datos, tal como un número o letra. La dirección del primer byte del grupo se utiliza como la dirección de esta posición de memoria más alta.

La memoria principal es la encargada de almacenar los programas y datos que se están ejecutando y su principal característica es que el acceso a los datos o instrucciones desde esta memoria es muy rápido.

En la memoria principal se almacenan:

·        Los datos enviados para procesarse desde los dispositivos de entrada
·        Los programas que realizaran los procesos
·        Los resultados obtenido preparados para enviarse a un dispositivo de Salida


Memoria Auxiliar

Cuando un programa se ejecuta, se debe situar primero en memoria central de igual modo que los datos. Sin embargo, la información almacenada en la memoria se pierde (borra) cuando se apaga la computadora y, por otra parte la memoria central es limitada en capacidad. Por esta razón, para poder disponer de almacenamiento permanentes, tanto para programas como para datos, se necesitan dispositivos de almacenamiento secundario, auxiliar o masivo.

Los dispositivos de almacenamiento o memorias auxiliares mas comúnmente utilizados son: cintas magnéticas, discos magnéticos, discos compactos.

La información almacenada en la memoria central es volátil (desaparece cuando se apaga la computadora) y la información almacenada en la memoria auxiliar es permanente. Esta información se organiza en unidades independiente llamadas archivos (ficheros, file en ingles). Los resultados de los programas se pueden guardar como archivos de datos y los programas que se escriben se guardan como archivos de programas, ambos en la memoria auxiliar. Cualquier tipo de archivo se puede trasferir fácilmente desde la memoria auxiliar hasta la memoria central para su proceso posterior.

La memoria auxiliar permanente almacena gran cantidad  de archivos en los diferentes dispositivos mencionados anteriormente. Cada archivo normalmente tiene un nombre arbitrario y una extensión que indica el tipo de archivo que se esta tratando (tales como .doc que indica un archivo de un procesador de textos, Word.

Los archivos pueden contener cualquier tipo de datos. Ejemplos pueden ser una imagen, un archivo de sonido, un programa de computadora, una letra o simplemente una lista de números.

  
El software (Los programas)

Las operaciones que debe realizar el hardware son especificadas por una lista de instrucciones, llamadas programas software. El software se divide en dos grandes grupos: software del sistema y software de aplicaciones.

El software del sistema es el conjunto de programas indispensables para que la maquina funcione; se denomina también programas del sistema. Estos programas son, básicamente, el sistema operativo, los editores de texto, los compiladores/interpretes (lenguajes de programación) y los programas de utilidad.

Uno de los programas mas importante es el sistema operativo, que sirve, esencialmente, para facilitar la escritura y uso de sus propios programas. El sistema operativo dirige las operaciones globales de la computadora, instruye a la computadora para ejecutar otros programas y controla el almacenamiento y recuperación de archivos (programas y datos) de cintas y discos. Gracias al sistema operativo es posible que el programador pueda introducir y grabar nuevos programas, así como  instruir a la computadora para que los ejecute. Los sistemas operativos pueden ser: monousuarios (un solo usuario) y multiusuarios, o tiempo compartido (diferentes usuarios), atendiendo al número de usuarios, y monotarea (una sola tarea) o multitarea (múltiples tareas), según las tareas (procesos) que puede realizar simultáneamente. Los sistemas operativos más populares son Windows XP, Vista, 7 ,8 y Linux en sus distintas distribuciones (Ubuntu, Debian, Fedora, etc.). El único sistema operativo, prácticamente gratis, es Linux que cada día tiene mayor aceptación.


Un sistema operativo permite utilizar el hardware y comunicarse con el resto del software del sistema. El sistema operativo consta de varios componentes importantes. Kernel del sistema el cual esel componente central del sistema; sistema de administración de memoria el cual asigna un área de memoria para cada programa que se esta ejecutando; administrador del sistema de archivos, que organiza y controla el uso de los discos; controladores de dispositivos, que controla los dispositivos de hardware conectados a la computadora, y bibliotecas del sistema que contiene todos los tipos de  programas de utilidad que se pueden llamar por programas de usuario.

Un programa es un conjunto de instrucciones que controlan (dirigen) a una computadora; mas formalmente, un programa de computadora es un conjunto de instrucciones internas utilizadas para ejecutarse en una computadora y que produzca un resultado concreto. Otro termino para un programa o conjunto de programas es software; ambos términos se utilizan indistintamente. El proceso de escribir un programa o software se denomina programación y el conjunto de instrucciones que se pueden utilizar para construir un programa se denomina lenguaje de programación. Así pues, los lenguajes utilizados para escribir programas de computadoras son los lenguajes de programación y programadores son los escritores y diseñadores de programas.

Cuando un programa se ejecuta normalmente hay dos tipos de entrada a una computadora. El programa es un tipo de entrada (contiene instrucciones que la computadora debe realizar y seguir). El otro tipo de entrada son los datos para el programa. Es la información que procesara la computadora. Por ejemplo, si es un programa de corrección de textos, los datos como el propio programa son entradas. La salida es el resultado (o resultados) producidos cuando la computadora sigue las instrucciones del programa. Si el programa es el de corrección de la sintaxis de un texto, la salida del programa es una lista de palabras que están mal escritas. Cuando se proporciona a la computadora un programa y datos y se dice a la computadora que siga las instrucciones del programa, se realiza una operación que se denomina ejecución del programa con los datos y el computador se dice que ejecuta el programa con los datos.