Programa informático

programa informático es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una computadora. Sin programas, estas máquinas no pueden funcionar correctamente.[1] [2] Al conjunto general de programas, se le denomina software y así, se refiere al equipamiento lógico o soporte lógico de una computadora digital.
En informática, se los denomina comúnmente binarios, (propio en sistemas unix, donde debido a la estructura de este

Ejecución [editar]

Una vez escritos, pueden ser ejecutados de diversas formas:
  • Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intérpretes. Ejemplos de esto son bash, clásico en estaciones Unix y que fue escrito para el proyecto GNU o Python, cuya peculiaridad además de ser multipropósito, está en su facilidad de uso y productividad y de hecho, es usado en parte de los proyectos Google y Youtube.[3]
  • Traduciendo el código escrito del programa (lo que se denomina código fuente), a su equivalente en lenguaje máquina. A este proceso se le llama compilar y al programa traductor se le denomina compilador. Ejemplos de esto son: El lenguaje C, que combina en su sintaxis características de medio y bajo nivel y el compilador gcc usado en el proyecto GNU.

Programas que se auto-modifican [editar]

Un programa en ejecución se trata de forma diferente que los datos en los cuales opera. De cualquier forma, en algunos casos ésta distinción es ambigua, especialmente cuando un programa se modifica a sí mismo. El programa modificado es secuencialmente ejecutado como parte del mismo programa. Se pueden escribir programas auto-modificables en lenguajes como Lisp, COBOL y Prolog.

Ejecución y almacenamiento de los programas [editar]

Típicamente, los programas se almacenan en una memoria no volátil (por ejemplo un disco), para que luego el usuario de la computadora, directa o indirectamente, solicite su ejecución. Al momento de dicha solicitud, el programa es cargado en la memoria de acceso aleatorio o RAM del equipo, bajo el control del software llamado sistema operativo, el cual puede acceder directamente al procesador. El procesador ejecuta (corre) el programa, instrucción por instrucción hasta que termina. A un programa en ejecución se le suele llamar también proceso. Un programa puede terminar su ejecución en forma normal o por causa de un error, dicho error puede ser de software o de hardware.

Programas empotrados en hardware [editar]

El microcontrolador a la derecha de la Memoria USB está controlada por un firmware empotrado.
Algunos programas están empotrados en el hardware. Una computadora con arquitectura de programas almacenados requiere un programa inicial almacenado en su ROM para arrancar. El proceso de arranque es para identificar e inicializar todos los aspectos del sistema, desde los registros del procesador, controladores de dispositivos hasta el contenido de la memoria RAM.[4] Seguido del proceso de inicialización, este programa inicial carga al sistema operativo e inicializa al contador de programa para empezar las operaciones normales. Independiente de la computadora, un dispositivo de hardware podría tener firmware empotrado para el control de sus operaciones. El firmware se utiliza cuando se espera que el programa cambie en raras ocasiones o nunca, o cuando el programa no debe perderse cuando haya ausencia de energía.[5]

Programas cargados manualmente [editar]

Interruptores para la carga manual en una Data General Nova 3.
Los programas históricamente se cargaron manualmente al procesador central mediante interruptores. Una instrucción era representada por una configuración de estado abierto o cerrado de los interruptores. Después de establecer la configuración, se ejecutaba un botón de ejecución. Este proceso era repetitivo. También, históricamente los programas se cargaban manualmente mediante una cinta de papel o tarjetas perforadas. Después de que el programa se cargaba, la dirección de inicio se establecía mediante interruptores y el botón de ejecución se presionaba.[6]

Programas generados automáticamente [editar]

La programación automática es un estilo de programación que crea código fuente mediante clases genéricas, prototipos, plantillas, aspectos, y generadores de código para aumentar la productividad del programador. El código fuente se genera con herramientas de programación tal como un procesador de plantilla o un IDE. La forma más simple de un generador de código fuente es un procesador macro, tal como el preprocesador de C, que reemplaza patrones de código fuente de acuerdo a reglas relativamente simples.
Un motor de software da de salida código fuente o lenguaje de marcado que simultáneamente se vuelve la entrada de otro proceso informático. Podemos pensar como analogía un proceso manejando a otro siendo el código máquina quemado como combustible. Los servidores de aplicaciones son motores de software que entregan aplicaciones a computadoras cliente. Por ejemplo, un software para wikis es un sevidor de aplicaciones que permite a los usuarios desarrollar contenido dinámico ensamblado a partir de artículos. Las Wikis generan HTML, CSS, Java, y Javascript los cuales son interpretados por un navegador web.

Ejecución simultánea [editar]

Véanse también: Proceso (informática) y Multiprocesamiento
Muchos programas pueden correr simultáneamente en la misma computadora, a lo cual se le conoce como multitarea y puede lograrse a través de mecanismos de software o de hardware. Los sistemas operativos modernos pueden correr varios programas a través del planificador de procesos — un mecanismo de software para conmutar con frecuencia la cantidad de procesos del procesador de modo que los usuarios puedan interactuar con cada programa mientras estos están corriendo.[7] También se puede lograr la multitarea por medio del hardware; las computadoras modernas que usan varios procesadores o procesadores con varios núcleos pueden correr muchos programas a la vez.[8]

Categorías funcionales [editar]

Los programas se pueden categorizar según líneas funcionales. Estas categorías funcionales son software de sistema y software de aplicación. El software de sistema incluye al sistema operativo el cual acopla el hardware con el software de aplicación.[9] El propósito del sistema operativo es proveer un ambiente en el cual el software de aplicación se ejecuta de una manera conveniente y eficiente.[9] Además del sistema operativo, el software de sistema incluye programas utilitarios que ayudan a manejar y configurar la computadora. Si un programa no es software de sistema entonces es software de aplicación. El middleware también es un software de aplicación que acopla el software de sistema con la interfaz de usuario. También son software de aplicación los programas utilitarios que ayudan a los usuarios a resolver problemas de aplicaciones, como por ejemplo la necesidad de ordenamiento.

Véase también [editar]

  • Software
  • Lenguajes de programación

Referencias [editar

último, los ficheros no necesitan hacer uso de extensiones. Posteriormente, los presentaron como ficheros ejecutables, con extensión .exe, en los sistemas operativos de la familia Windows) debido a que una vez que han pasado por el proceso de compilación y han sido creados, las instrucciones que se escribieron en un lenguaje de programación que los humanos usan para escribirlos con mayor facilidad, se han traducido al único idioma que la máquina comprende, combinaciones de ceros y unos llamada código máquina. El mismo término, puede referirse tanto a un programa ejecutable, como a su código fuente, el cual es transformado en un binario cuando es compilado.
Generalmente el código fuente lo escriben profesionales conocidos como programadores. Se escribe en un lenguaje que sigue uno de los siguientes dos paradigmas: imperativo o declarativo y que posteriormente puede ser convertido en una imagen ejecutable por un compilador. Cuando se pide que el programa sea ejecutado, el procesador ejecuta instrucción por instrucción.
De acuerdo a sus funciones, se clasifican en softw

Ejecución [editar]

Una vez escritos, pueden ser ejecutados de diversas formas:
  • Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intérpretes. Ejemplos de esto son bash, clásico en estaciones Unix y que fue escrito para el proyecto GNU o Python, cuya peculiaridad además de ser multipropósito, está en su facilidad de uso y productividad y de hecho, es usado en parte de los proyectos Google y Youtube.[3]
  • Traduciendo el código escrito del programa (lo que se denomina código fuente), a su equivalente en lenguaje máquina. A este proceso se le llama compilar y al programa traductor se le denomina compilador. Ejemplos de esto son: El lenguaje C, que combina en su sintaxis características de medio y bajo nivel y el compilador gcc usado en el proyecto GNU.

Programas que se auto-modifican [editar]

Un programa en ejecución se trata de forma diferente que los datos en los cuales opera. De cualquier forma, en algunos casos ésta distinción es ambigua, especialmente cuando un programa se modifica a sí mismo. El programa modificado es secuencialmente ejecutado como parte del mismo programa. Se pueden escribir programas auto-modificables en lenguajes como Lisp, COBOL y Prolog.

Ejecución y almacenamiento de los programas [editar]

Típicamente, los programas se almacenan en una memoria no volátil (por ejemplo un disco), para que luego el usuario de la computadora, directa o indirectamente, solicite su ejecución. Al momento de dicha solicitud, el programa es cargado en la memoria de acceso aleatorio o RAM del equipo, bajo el control del software llamado sistema operativo, el cual puede acceder directamente al procesador. El procesador ejecuta (corre) el programa, instrucción por instrucción hasta que termina. A un programa en ejecución se le suele llamar también proceso. Un programa puede terminar su ejecución en forma normal o por causa de un error, dicho error puede ser de software o de hardware.

Programas empotrados en hardware [editar]

El microcontrolador a la derecha de la Memoria USB está controlada por un firmware empotrado.
Algunos programas están empotrados en el hardware. Una computadora con arquitectura de programas almacenados requiere un programa inicial almacenado en su ROM para arrancar. El proceso de arranque es para identificar e inicializar todos los aspectos del sistema, desde los registros del procesador, controladores de dispositivos hasta el contenido de la memoria RAM.[4] Seguido del proceso de inicialización, este programa inicial carga al sistema operativo e inicializa al contador de programa para empezar las operaciones normales. Independiente de la computadora, un dispositivo de hardware podría tener firmware empotrado para el control de sus operaciones. El firmware se utiliza cuando se espera que el programa cambie en raras ocasiones o nunca, o cuando el programa no debe perderse cuando haya ausencia de energía.[5]

Programas cargados manualmente [editar]

Interruptores para la carga manual en una Data General Nova 3.
Los programas históricamente se cargaron manualmente al procesador central mediante interruptores. Una instrucción era representada por una configuración de estado abierto o cerrado de los interruptores. Después de establecer la configuración, se ejecutaba un botón de ejecución. Este proceso era repetitivo. También, históricamente los programas se cargaban manualmente mediante una cinta de papel o tarjetas perforadas. Después de que el programa se cargaba, la dirección de inicio se establecía mediante interruptores y el botón de ejecución se presionaba.[6]

Programas generados automáticamente [editar]

La programación automática es un estilo de programación que crea código fuente mediante clases genéricas, prototipos, plantillas, aspectos, y generadores de código para aumentar la productividad del programador. El código fuente se genera con herramientas de programación tal como un procesador de plantilla o un IDE. La forma más simple de un generador de código fuente es un procesador macro, tal como el preprocesador de C, que reemplaza patrones de código fuente de acuerdo a reglas relativamente simples.
Un motor de software da de salida código fuente o lenguaje de marcado que simultáneamente se vuelve la entrada de otro proceso informático. Podemos pensar como analogía un proceso manejando a otro siendo el código máquina quemado como combustible. Los servidores de aplicaciones son motores de software que entregan aplicaciones a computadoras cliente. Por ejemplo, un software para wikis es un sevidor de aplicaciones que permite a los usuarios desarrollar contenido dinámico ensamblado a partir de artículos. Las Wikis generan HTML, CSS, Java, y Javascript los cuales son interpretados por un navegador web.

Ejecución simultánea [editar]

Véanse también: Proceso (informática) y Multiprocesamiento
Muchos programas pueden correr simultáneamente en la misma computadora, a lo cual se le conoce como multitarea y puede lograrse a través de mecanismos de software o de hardware. Los sistemas operativos modernos pueden correr varios programas a través del planificador de procesos — un mecanismo de software para conmutar con frecuencia la cantidad de procesos del procesador de modo que los usuarios puedan interactuar con cada programa mientras estos están corriendo.[7] También se puede lograr la multitarea por medio del hardware; las computadoras modernas que usan varios procesadores o procesadores con varios núcleos pueden correr muchos programas a la vez.[8]

Categorías funcionales [editar]

Los programas se pueden categorizar según líneas funcionales. Estas categorías funcionales son software de sistema y software de aplicación. El software de sistema incluye al sistema operativo el cual acopla el hardware con el software de aplicación.[9] El propósito del sistema operativo es proveer un ambiente en el cual el software de aplicación se ejecuta de una manera conveniente y eficiente.[9] Además del sistema operativo, el software de sistema incluye programas utilitarios que ayudan a manejar y configurar la computadora. Si un programa no es software de sistema entonces es software de aplicación. El middleware también es un software de aplicación que acopla el software de sistema con la interfaz de usuario. También son software de aplicación los programas utilitarios que ayudan a los usuarios a resolver problemas de aplicaciones, como por ejemplo la necesidad de ordenamiento.



Unidad central de procesamiento

La unidad central de procesamiento o CPU (por el acrónimo en inglés de central processing unit), o simplemente el procesador o microprocesador, es el componente en un ordenador, que interpreta las instrucciones y procesa los datos contenidos en los programas de la computadora. Las CPU proporcionan la característica fundamental de la computadora digital (la programabilidad) y son uno de los componentes necesarios encontrados en las computadoras de cualquier tiempo, junto con el almacenamiento primario y los dispositivos de entrada/salida. Se conoce como microprocesador el CPU que es manufacturado con circuitos integrados. Desde mediados de los años 1970, los microprocesadores de un solo chip han reemplazado casi totalmente todos los tipos de CPU, y hoy en día, el término "CPU" es aplicado usualmente a todos los microprocesadores.
La expresión "unidad central de proceso" es, en términos generales, una descripción de una cierta clase de máquinas de lógica que pueden ejecutar complejos programas de computadora. Esta amplia definición puede fácilmente ser aplicada a muchos de los primeros ordenadores que existieron mucho antes que el término "CPU" estuviera en amplio uso. Sin embargo, el término en sí mismo y su acrónimo han estado en uso en la industria de la informática por lo menos desde el principio de los años 1960 . La forma, el diseño y la implementación de las CPU ha cambiado drásticamente desde los primeros ejemplos, pero su operación fundamental ha permanecido bastante similar.
Las primeras CPU fueron diseñadas a la medida como parte de una computadora más grande, generalmente una computadora única en su especie. Sin embargo, este costoso método de diseñar los CPU a la medida, para una aplicación particular, ha desaparecido en gran parte y se ha sustituido por el desarrollo de clases de procesadores baratos y estandarizados adaptados para uno o muchos propósitos. Esta tendencia de estandarización comenzó generalmente en la era de los transistores discretos, computadoras centrales, y microcomputadoras, y fue acelerada rápidamente con la popularización del circuito integrado (IC), éste ha permitido que sean diseñados y fabricados CPU más complejos en espacios pequeños (en la orden de milímetros). Tanto la miniaturización como la estandarización de los CPU han aumentado la presencia de estos dispositivos digitales en la vida moderna mucho más allá de las aplicaciones limitadas de máquinas de computación dedicadas. Los microprocesadores modernos aparecen en todo, desde automóviles, televisores, neveras, calculadoras, aviones, hasta teléfonos móviles o celulares, juguetes, entre otros.

Historia [editar]

El EDVAC, uno de los primeros computadores de programas almacenados electrónicamente.
Artículo principal: Historia del hardware de computador
Casi todos los CPU tratan con estados discretos, y por lo tanto requieren una cierta clase de elementos de conmutación para diferenciar y cambiar estos estados. Antes de la aceptación comercial del transistor, los relés eléctricos y los tubos de vacío (válvulas termoiónicas) eran usados comúnmente como elementos de conmutación. Aunque éstos tenían distintas ventajas de velocidad sobre los anteriores diseños puramente mecánicos, no eran fiables por varias razones. Por ejemplo, hacer circuitos de lógica secuencial de corriente directa requería hardware adicional para hacer frente al problema del rebote de contacto. Por otro lado, mientras que los tubos de vacío no sufren del rebote de contacto, éstos deben calentarse antes de llegar a estar completamente operacionales y eventualmente fallan y dejan de funcionar por completo.[1] Generalmente, cuando un tubo ha fallado, el CPU tendría que ser diagnosticado para localizar el componente que falla para que pueda ser reemplazado. Por lo tanto, los primeros computadores electrónicos, (basados en tubos de vacío), generalmente eran más rápidas pero menos confiables que las computadoras electromecánicas, (basadas en relés). Las computadoras de tubo, como el EDVAC, tendieron en tener un promedio de ocho horas entre fallas, mientras que las computadoras de relés, (anteriores y más lentas), como el Harvard Mark I, fallaban muy raramente . Al final, los CPU basados en tubo llegaron a ser dominantes porque las significativas ventajas de velocidad producidas generalmente pesaban más que los problemas de confiabilidad. La mayor parte de estos tempranos CPU síncronos corrían en frecuencias de reloj bajas comparadas con los modernos diseños microelectrónicos, (ver más abajo para una exposición sobre la frecuencia de reloj). Eran muy comunes en este tiempo las frecuencias de la señal del reloj con un rango desde 100 kHz hasta 4 MHz, limitado en gran parte por la velocidad de los dispositivos de conmutación con los que fueron construidos.

CPU de transistores y de circuitos integrados discretos [editar]

CPU, memoria de núcleo, e interfaz de bus externo de un MSI PDP-8/I.
La complejidad del diseño de los CPU se incrementó a medida que varias tecnologías facilitaron la construcción de dispositivos electrónicos más pequeños y confiables. La primera de esas mejoras vino con el advenimiento del transistor. Los CPU transistorizados durante los años 1950 y los años 1960 no tuvieron que ser construidos con elementos de conmutación abultados, no fiables, y frágiles, como los tubos de vacío y los relés eléctricos. Con esta mejora, fueron construidos CPUs más complejos y más confiables sobre una o varias tarjetas de circuito impreso que contenían componentes discretos (individuales).
Durante este período, ganó popularidad un método de fabricar muchos transistores en un espacio compacto. El circuito integrado (IC) permitió que una gran cantidad de transistores fueran fabricados en una simple oblea basada en semiconductor o "chip". Al principio, solamente circuitos digitales muy básicos, no especializados, como las puertas NOR fueron miniaturizados en IC. Los CPU basadas en estos IC de "bloques de construcción" generalmente son referidos como dispositivos de pequeña escala de integración "small-scale integration" (SSI). Los circuitos integrados SSI, como los usados en el computador guía del Apollo (Apollo Guidance Computer), usualmente contenían transistores que se contaban en números de múltiplos de diez. Construir un CPU completo usando IC SSI requería miles de chips individuales, pero todavía consumía mucho menos espacio y energía que diseños anteriores de transistores discretos. A medida que la tecnología microelectrónica avanzó, en los IC fue colocado un número creciente de transistores, disminuyendo así la cantidad de IC individuales necesarios para un CPU completo. Los circuitos integrados MSI y el LSI (de mediana y gran escala de integración) aumentaron el número de transistores a cientos, y luego a miles.
En 1964, IBM introdujo su arquitectura de computador System/360, que fue usada en una serie de computadores que podían correr los mismos programas con velocidades y desempeños diferentes. Esto fue significativo en un tiempo en que la mayoría de las computadoras electrónicas eran incompatibles una con la otra, incluso las hechas por el mismo fabricante. Para facilitar esta mejora, IBM utilizó el concepto de microprograma, a menudo llamado "microcódigo", que todavía ve un uso extenso en los CPU modernos . La arquitectura System/360 era tan popular que dominó el mercado del mainframe por las siguientes décadas y dejó una herencia que todavía es continuada por computadores modernos similares como el IBM zSeries. En el mismo año de 1964, Digital Equipment Corporation (DEC) introdujo otro computador influyente dirigido a los mercados científicos y de investigación, el PDP-8. DEC introduciría más adelante la extremadamente popular línea del PDP-11, que originalmente fue construido con IC SSI pero eventualmente fue implementado con componentes LSI cuando llegaron a ser prácticos. En fuerte contraste con sus precursores hechos con tecnología SSI y MSI, la primera implementación LSI del PDP-11 contuvo un CPU integrado por solamente cuatro circuitos integrados LSI .
Los computadores basados en transistores tenían varias ventajas distintas sobre sus predecesores. Aparte de facilitar una creciente confiabilidad y un más bajo consumo de energía, los transistores también permitían al CPU operar a velocidades mucho más altas debido al corto tiempo de conmutación de un transistor en comparación a un tubo o relé. Gracias tanto a la creciente confiabilidad como a la dramáticamente incrementada velocidad de los elementos de conmutación que por este tiempo eran casi exclusivamente transistores, fueron obtenidas frecuencias de reloj del CPU de decenas de megahertz. Además, mientras que los CPU de transistores discretos y circuitos integrados estaban en fuerte uso, comenzaron a aparecer los nuevos diseños de alto rendimiento como procesadores vectoriales SIMD (Single Instruction Multiple Data) (Simple Instrucción Múltiples Datos). Estos tempranos diseños experimentales dieron lugar más adelante a la era de los supercomputadoras especializados, como los hechos por Cray Inc.

Microprocesadores [editar]

Microprocesador Intel 80486DX2 en un paquete PGA de cerámica
Artículo principal: Microprocesador
Desde la introducción del primer microprocesador, el Intel 4004, en 1970, y del primer microprocesador ampliamente usado, el Intel 8080, en 1974, esta clase de CPUs ha desplazado casi totalmente el resto de los métodos de implementación de la Unidad Central de Proceso. Los fabricantes de mainframes y minicomputadores de ese tiempo lanzaron programas de desarrollo de IC propietarios para actualizar sus más viejas arquitecturas de computador, y eventualmente produjeron microprocesadores con conjuntos de instrucciones que eran compatibles hacia atrás con sus más viejos hardwares y softwares. Combinado con el advenimiento y el eventual vasto éxito del ahora ubicuo computadora personal, el término "CPU" es aplicado ahora casi exclusivamente a los microprocesadores.
Las generaciones previas de CPUs fueron implementadas como componentes discretos y numerosos circuitos integrados de pequeña escala de integración en una o más tarjetas de circuitos. Por otro lado, los microprocesadores son CPUs fabricados con un número muy pequeño de IC; usualmente solo uno. El tamaño más pequeño del CPU, como resultado de estar implementado en una simple pastilla, significa tiempos de conmutación más rápidos debido a factores físicos como el decrecimiento de la capacitancia parásita de las puertas. Esto ha permitido que los microprocesadores síncronos tengan tiempos de reloj con un rango de decenas de megahercios a varios gigahercios. Adicionalmente, como ha aumentado la capacidad de construir transistores excesivamente pequeños en un IC, la complejidad y el número de transistores en un simple CPU también se ha incrementado dramáticamente. Esta tendencia ampliamente observada es descrita por la ley de Moore, que ha demostrado hasta la fecha, ser una predicción bastante exacta del crecimiento de la complejidad de los CPUs y otros IC.
Mientras que, en los pasados sesenta años han cambiado drásticamente, la complejidad, el tamaño, la construcción, y la forma general del CPU, es notable que el diseño y el funcionamiento básico no ha cambiado demasiado. Casi todos los CPU comunes de hoy se pueden describir con precisión como máquinas de programa almacenado de von Neumann.
A medida que la ya mencionada ley del Moore continúa manteniéndose verdadera, se han presentado preocupaciones sobre los límites de la tecnología de transistor del circuito integrado. La miniaturización extrema de puertas electrónicas está causando los efectos de fenómenos que se vuelven mucho más significativos, como la electromigración, y el subumbral de pérdida. Estas más nuevas preocupaciones están entre los muchos factores que hacen a investigadores estudiar nuevos métodos de computación como la computadora cuántica, así como ampliar el uso de paralelismo, y otros métodos que extienden la utilidad del modelo clásico de von Neumann. mario pelado

Operación del CPU [editar]

La operación fundamental de la mayoría de las CPU, es ejecutar una secuencia de instrucciones almacenadas llamadas "programa". El programa es representado por una serie de números que se mantentienen en una cierta clase de memoria de computador. Hay cuatro pasos que casi todos los CPU de arquitectura de von Neumann usan en su operación: fetch, decode, execute, y writeback, (leer, decodificar, ejecutar, y escribir).
Diagrama mostrando como es decodificada una instrucción del MIPS32. (MIPS Technologies 2005)
El primer paso, leer (fetch), implica el recuperar una instrucción, (que es representada por un número o una secuencia de números), de la memoria de programa. La localización en la memoria del programa es determinada por un contador de programa (PC), que almacena un número que identifica la posición actual en el programa. En otras palabras, el contador de programa indica a la CPU, el lugar de la instrucción en el programa actual. Después de que se lee una instrucción, el Contador de Programa es incrementado por la longitud de la palabra de instrucción en términos de unidades de memoria.[2] Frecuentemente la instrucción a ser leída debe ser recuperada de memoria relativamente lenta, haciendo detener al CPU mientras espera que la instrucción sea retornada. Este problema es tratado en procesadores modernos en gran parte por los cachés y las arquitecturas pipeline (ver abajo).
La instrucción que el CPU lee desde la memoria es usada para determinar qué deberá hacer la CPU. En el paso de decodificación, la instrucción es dividida en partes que tienen significado para otras unidades del CPU. La manera en que el valor de la instrucción numérica es interpretado está definida por la arquitectura del conjunto de instrucciones (el ISA) del CPU.[3] A menudo, un grupo de números en la instrucción, llamados opcode, indica qué operación realizar. Las partes restantes del número usualmente proporcionan información requerida para esa instrucción, como por ejemplo, operandos para una operación de adición. Tales operandos se pueden dar como un valor constante (llamado valor inmediato), o como un lugar para localizar un valor, que según lo determinado por algún modo de dirección, puede ser un registro o una dirección de memoria. En diseños más viejos las unidades de la CPU responsables de decodificar la instrucción eran dispositivos de hardware fijos. Sin embargo, en CPUs e ISAs más abstractos y complicados, es frecuentemente usado un microprograma para ayudar a traducir instrucciones en varias señales de configuración para la CPU. Este microprograma es a veces reescribible de tal manera que puede ser modificado para cambiar la manera en que el CPU decodifica instrucciones incluso después de que haya sido fabricado.
Diagrama de bloques de un CPU simple
Después de los pasos de lectura y decodificación, es llevado a cabo el paso de la ejecución de la instrucción. Durante este paso, varias unidades del CPU son conectadas de tal manera que ellas pueden realizar la operación deseada. Si, por ejemplo, una operación de adición fue solicitada, una unidad aritmético lógica (ALU) será conectada a un conjunto de entradas y un conjunto de salidas. Las entradas proporcionan los números a ser sumados, y las salidas contendrán la suma final. La ALU contiene la circuitería para realizar operaciones simples de aritmética y lógica en las entradas, como adición y operaciones de bits (bitwise). Si la operación de adición produce un resultado demasiado grande para poder ser manejado por el CPU, también puede ser ajustada una bandera (flag) de desbordamiento aritmético localizada en un registro de banderas (ver abajo la sección sobre rango de números enteros).
El paso final, la escritura (writeback), simplemente "escribe" los resultados del paso de ejecución a una cierta forma de memoria. Muy a menudo, los resultados son escritos a algún registro interno del CPU para acceso rápido por subsecuentes instrucciones. En otros casos los resultados pueden ser escritos a una memoria principal más lenta pero más barata y más grande. Algunos tipos de instrucciones manipulan el contador de programa en lugar de directamente producir datos de resultado. Éstas son llamadas generalmente "saltos" (jumps) y facilitan comportamientos como bucles (loops), la ejecución condicional de programas (con el uso de saltos condicionales), y funciones en programas.[4] Muchas instrucciones también cambiarán el estado de dígitos en un registro de "banderas". Estas banderas pueden ser usadas para influenciar cómo se comporta un programa, puesto que a menudo indican el resultado de varias operaciones. Por ejemplo, un tipo de instrucción de "comparación" considera dos valores y fija un número, en el registro de banderas, de acuerdo a cuál es el mayor. Entonces, esta bandera puede ser usada por una posterior instrucción de salto para determinar el flujo de programa.
Después de la ejecución de la instrucción y la escritura de los datos resultantes, el proceso entero se repite con el siguiente ciclo de instrucción, normalmente leyendo la siguiente instrucción en secuencia debido al valor incrementado en el contador de programa. Si la instrucción completada era un salto, el contador de programa será modificado para contener la dirección de la instrucción a la cual se saltó, y la ejecución del programa continúa normalmente. En CPUs más complejos que el descrito aquí, múltiples instrucciones pueden ser leídas, decodificadas, y ejecutadas simultáneamente. Esta sección describe lo que es referido generalmente como el "entubado RISC clásico" (Classic RISC pipeline), que de hecho es bastante común entre las CPU simples usados en muchos dispositivos electrónicos, a menudo llamados microcontroladores.[5]

Diseño e implementación [editar]

Artículo principal: Diseño del CPU
Prerequisitos
Arquitectura informática
Circuitos digitales

Rango de enteros [editar]

La manera en que una CPU representa los números es una opción de diseño que afecta las más básicas formas en que el dispositivo funciona. Algunas de las primeras calculadoras digitales usaron, para representar números internamente, un modelo eléctrico del sistema de numeración decimal común (base diez). Algunas otras computadoras han usado sistemas de numeración más exóticos como el ternario (base tres). Casi todas las CPU modernas representan los números en forma binaria, en donde cada dígito es representado por una cierta cantidad física de dos valores, como un voltaje "alto" o "bajo".[6]
Microprocesador MOS 6502 en un dual in-line package (encapasulado en doble línea), un diseño extremadamente popular de 8 bits.
Con la representación numérica están relacionados el tamaño y la precisión de los números que una CPU puede representar. En el caso de una CPU binaria, un bit se refiere a una posición significativa en los números con que trabaja una CPU. El número de bits (o de posiciones numéricas, o dígitos) que una CPU usa para representar los números, a menudo se llama "tamaño de la palabra", "ancho de bits", "ancho de ruta de datos", o "precisión del número entero" cuando se ocupa estrictamente de números enteros (en oposición a números de coma flotante). Este número difiere entre las arquitecturas, y a menudo dentro de diferentes unidades de la misma CPU. Por ejemplo, una CPU de 8 bits maneja un rango de números que pueden ser representados por ocho dígitos binarios, cada dígito teniendo dos valores posibles, y en combinación los 8 bits teniendo 28 ó 256 números discretos. En efecto, el tamaño del número entero fija un límite de hardware en el rango de números enteros que el software corre y que la CPU puede usar directamente.[7]
El rango del número entero también puede afectar el número de posiciones en memoria que la CPU puede direccionar (localizar). Por ejemplo, si una CPU binaria utiliza 32 bits para representar una dirección de memoria, y cada dirección de memoria representa a un octeto (8 bits), la cantidad máxima de memoria que la CPU puede direccionar es 232 octetos, o 4 GB. Ésta es una vista muy simple del espacio de dirección de la CPU, y muchos diseños modernos usan métodos de dirección mucho más complejos como paginación para localizar más memoria que su rango entero permitiría con un espacio de dirección plano.
Niveles más altos del rango de números enteros requieren más estructuras para manejar los dígitos adicionales, y por lo tanto, más complejidad, tamaño, uso de energía, y generalmente costo. Por ello, no es del todo infrecuente, ver microcontroladores de 4 y 8 bits usados en aplicaciones modernas, aun cuando están disponibles CPU con un rango mucho más alto (de 16, 32, 64, e incluso 128 bits). Los microcontroladores más simples son generalmente más baratos, usan menos energía, y por lo tanto disipan menos calor. Todo esto pueden ser consideraciones de diseño importantes para los dispositivos electrónicos. Sin embargo, en aplicaciones del extremo alto, los beneficios producidos por el rango adicional, (más a menudo el espacio de dirección adicional), son más significativos y con frecuencia afectan las opciones del diseño. Para ganar algunas de las ventajas proporcionadas por las longitudes de bits tanto más bajas, como más altas, muchas CPUs están diseñadas con anchos de bit diferentes para diferentes unidades del dispositivo. Por ejemplo, el IBM Sistem/370 usó una CPU que fue sobre todo de 32 bits, pero usó precisión de 128 bits dentro de sus unidades de coma flotante para facilitar mayor exactitud y rango de números de coma flotante . Muchos diseños posteriores de CPU usan una mezcla de ancho de bits similar, especialmente cuando el procesador está diseñado para usos de propósito general donde se requiere un razonable equilibrio entre la capacidad de números enteros y de coma flotante.

Frecuencia de reloj [editar]

Artículo principal: Frecuencia de reloj
La mayoría de las CPU, y de hecho, la mayoría de los dispositivos de lógica secuencial, son de naturaleza síncrona.[8] Es decir, están diseñados y operan en función de una señal de sincronización. Esta señal, conocida como señal de reloj, usualmente toma la forma de una onda cuadrada periódica. Calculando el tiempo máximo en que las señales eléctricas pueden moverse en las varias bifurcaciones de los muchos circuitos de una CPU, los diseñadores pueden seleccionar un período apropiado para la señal del reloj.
Este período debe ser más largo que la cantidad de tiempo que toma a una señal moverse, o propagarse, en el peor de los casos. Al fijar el período del reloj a un valor bastante mayor sobre el retardo de la propagación del peor caso, es posible diseñar toda la CPU y la manera que mueve los datos alrededor de los "bordes" de la subida y bajada de la señal del reloj. Esto tiene la ventaja de simplificar la CPU significativamente, tanto en una perspectiva de diseño, como en una perspectiva de cantidad de componentes. Sin embargo, esto también tiene la desventaja que toda la CPU debe esperar por sus elementos más lentos, aun cuando algunas unidades de la misma son mucho más rápidas. Esta limitación ha sido compensada en gran parte por varios métodos de aumentar el paralelismo de la CPU (ver abajo).
Sin embargo, las solamente mejoras arquitectónicas no solucionan todas las desventajas de CPUs globalmente síncronas. Por ejemplo, una señal de reloj está sujeta a los retardos de cualquier otra señal eléctrica. Velocidades de reloj más altas en CPUs cada vez más complejas hacen más difícil de mantener la señal del reloj en fase (sincronizada) a través de toda la unidad. Esto ha conducido que muchas CPU modernas requieran que se les proporcione múltiples señales de reloj idénticas, para evitar retardar una sola señal lo suficiente significativamente como para hacer a la CPU funcionar incorrectamente. Otro importante problema cuando la velocidad del reloj aumenta dramáticamente, es la cantidad de calor que es disipado por la CPU. La señal del reloj cambia constantemente, provocando la conmutación de muchos componentes (cambio de estado) sin importar si están siendo usados en ese momento. En general, un componente que está cambiando de estado, usa más energía que un elemento en un estado estático. Por lo tanto, a medida que la velocidad del reloj aumenta, así lo hace también la disipación de calor, causando que la CPU requiera soluciones de enfriamiento más efectivas.
Un método de tratar la conmutación de componentes innecesarios se llama el clock gating, que implica apagar la señal del reloj a los componentes innecesarios, efectivamente desactivándolos. Sin embargo, esto es frecuentemente considerado como difícil de implementar y por lo tanto no ve uso común afuera de diseños de muy baja potencia.[9] Otro método de tratar algunos de los problemas de una señal global de reloj es la completa remoción de la misma. Mientras que quitar la señal global del reloj hace, de muchas maneras, considerablemente más complejo el proceso del diseño, en comparación con diseños síncronos similares, los diseños asincrónicos (o sin reloj) tienen marcadas ventajas en el consumo de energía y la disipación de calor. Aunque algo infrecuente, CPUs completas se han construido sin utilizar una señal global de reloj. Dos notables ejemplos de esto son el AMULET, que implementa la arquitectura del ARM, y el MiniMIPS, compatible con el MIPS R3000. En lugar de remover totalmente la señal del reloj, algunos diseños de CPU permiten a ciertas unidades del dispositivo ser asincrónicas, como por ejemplo, usar ALUs asincrónicas en conjunción con pipelining superescalar para alcanzar algunas ganancias en el desempeño aritmético. Mientras que no está completamente claro si los diseños totalmente asincrónicos pueden desempeñarse a un nivel comparable o mejor que sus contrapartes síncronas, es evidente que por lo menos sobresalen en las más simples operaciones matemáticas. Esto, combinado con sus excelentes características de consumo de energía y disipación de calor, los hace muy adecuados para los computadores empotrados .

Paralelismo [editar]

Artículo principal: Computación paralela
Modelo de un CPU subescalar. Note que toma quince ciclos para terminar tres instrucciones.
La descripción de la operación básica de un CPU ofrecida en la sección anterior describe la forma más simple que puede tomar un CPU. Este tipo de CPU, usualmente referido como subescalar, opera sobre y ejecuta una sola instrucción con una o dos piezas de datos a la vez.
Este proceso da lugar a una ineficacia inherente en CPUs subescalares. Puesto que solamente una instrucción es ejecutada a la vez, todo el CPU debe esperar que esa instrucción se complete antes de proceder a la siguiente instrucción. Como resultado, el CPU subescalar queda "paralizado" en instrucciones que toman más de un ciclo de reloj para completar su ejecución. Incluso la adición de una segunda unidad de ejecución (ver abajo) no mejora mucho el desempeño. En lugar de un camino quedando congelado, ahora dos caminos se paralizan y aumenta el número de transistores no usados. Este diseño, en donde los recursos de ejecución del CPU pueden operar con solamente una instrucción a la vez, solo puede, posiblemente, alcanzar el desempeño escalar (una instrucción por ciclo de reloj). Sin embargo, el desempeño casi siempre es subescalar (menos de una instrucción por ciclo).
Las tentativas de alcanzar un desempeño escalar y mejor, han resultado en una variedad de metodologías de diseño que hacen comportarse al CPU menos linealmente y más en paralelo. Cuando se refiere al paralelismo en los CPU, generalmente son usados dos términos para clasificar estas técnicas de diseño.
  • El paralelismo a nivel de instrucción, en inglés Instruction Level Parallelism (ILP), busca aumentar la tasa en la cual las instrucciones son ejecutadas dentro de un CPU, es decir, aumentar la utilización de los recursos de ejecución en la pastilla
  • El paralelismo a nivel de hilo de ejecución, en inglés thread level parallelism (TLP), que se propone incrementar el número de hilos (efectivamente programas individuales) que un CPU pueda ejecutar simultáneamente.
Cada metodología se diferencia tanto en las maneras en las que están implementadas, como en la efectividad relativa que producen en el aumento del desempeño del CPU para una aplicación.[10]

ILP: Entubado de instrucción y arquitectura superescalar [editar]

Artículo principal: Entubado de instrucción y superescalar
Tubería básica de cinco etapas. En el mejor de los casos, esta tubería puede sostener un ratio de completado de una instrucción por ciclo.
Uno de los más simples métodos usados para lograr incrementar el paralelismo es comenzar los primeros pasos de leer y decodificar la instrucción antes de que la instrucción anterior haya terminado de ejecutarse. Ésta es la forma más simple de una técnica conocida como instruction pipelining (entubado de instrucción), y es utilizada en casi todos los CPU de propósito general modernos. Al dividir la ruta de ejecución en etapas discretas, la tubería permite que más de una instrucción sea ejecutada en cualquier tiempo. Esta separación puede ser comparada a una línea de ensamblaje, en la cual una instrucción es hecha más completa en cada etapa hasta que sale de la tubería de ejecución y es retirada.
Sin embargo, la tubería introduce la posibilidad de una situación donde es necesario terminar el resultado de la operación anterior para completar la operación siguiente; una condición llamada a menudo como conflicto de dependencia de datos. Para hacer frente a esto, debe ser tomado un cuidado adicional para comprobar estas clases de condiciones, y si esto ocurre, se debe retrasar una porción de la tubería de instrucción. Naturalmente, lograr esto requiere circuitería adicional, los procesadores entubados son más complejos que los subescalares, pero no mucho. Un procesador entubado puede llegar a ser casi completamente escalar, solamente inhibido por las abruptas paradas de la tubería (una instrucción durando más de un ciclo de reloj en una etapa).
Tubería superescalar simple. Al leer y despachar dos instrucciones a la vez, un máximo de dos instrucciones por ciclo pueden ser completadas.
Una mejora adicional sobre la idea del entubado de instrucción (instruction pipelining) condujo al desarrollo de un método que disminuye incluso más el tiempo ocioso de los componentes del CPU. Diseños que se dice que son superescalares incluyen una larga tubería de instrucción y múltiples unidades de ejecución idénticas. En una tubería superescalar, múltiples instrucciones son leídas y pasadas a un despachador, que decide si las instrucciones se pueden o no ejecutar en paralelo (simultáneamente). De ser así, son despachadas a las unidades de ejecución disponibles, dando por resultado la capacidad para que varias instrucciones sean ejecutadas simultáneamente. En general, cuanto más instrucciones un CPU superescalar es capaz de despachar simultáneamente a las unidades de ejecución en espera, más instrucciones serán completadas en un ciclo dado.
La mayor parte de la dificultad en el diseño de una arquitectura superescalar de CPU descansa en crear un despachador eficaz. El despachador necesita poder determinar rápida y correctamente si las instrucciones pueden ejecutarse en paralelo, tan bien como despacharlas de una manera que mantenga ocupadas tantas unidades de ejecución como sea posible. Esto requiere que la tubería de instrucción sea llenada tan a menudo como sea posible y se incrementa la necesidad, en las arquitecturas superescalares, de cantidades significativas de caché de CPU. Esto también crea técnicas para evitar peligros como la predicción de bifurcación, ejecución especulativa, y la ejecución fuera de orden, cruciales para mantener altos niveles de desempeño.
  • La predicción de bifurcación procura predecir qué rama (o trayectoria) tomará una instrucción condicional, el CPU puede minimizar el número de tiempos que toda la tubería debe esperar hasta que sea completada una instrucción condicional.
  • La ejecución especulativa frecuentemente proporciona aumentos modestos del desempeño al ejecutar las porciones de código que pueden o no ser necesarias después de que una operación condicional termine.
  • La ejecución fuera de orden cambia en algún grado el orden en el cual son ejecutadas las instrucciones para reducir retardos debido a las dependencias de los datos.
En el caso donde una porción del CPU es superescalar y una parte no lo es, la parte que no es superescalar sufre en el desempeño debido a las paradas de horario. El Intel Pentium original (P5) tenía dos ALUs superescalares que podían aceptar, cada una, una instrucción por ciclo de reloj, pero su FPU no podía aceptar una instrucción por ciclo de reloj. Así el P5 era superescalar en la parte de números enteros pero no era superescalar de números de coma (o punto [decimal]) flotante. El sucesor a la arquitectura del Pentium de Intel, el P6, agregó capacidades superescalares a sus funciones de coma flotante, y por lo tanto produjo un significativo aumento en el desempeño de este tipo de instrucciones.
El entubado simple y el diseño superescalar aumentan el ILP de un CPU al permitir a un solo procesador completar la ejecución de instrucciones en ratios que sobrepasan una instrucción por ciclo (IPC).[11] La mayoría de los modernos diseños de CPU son por lo menos algo superescalares, y en la última década, casi todos los diseños de CPU de propósito general son superescalares. En los últimos años algo del énfasis en el diseño de computadores de alto ILP se ha movido del hardware del CPU hacia su interface de software, o ISA. La estrategia de la muy larga palabra de instrucción, very long instruction word (VLIW), causa a algún ILP a ser implícito directamente por el software, reduciendo la cantidad de trabajo que el CPU debe realizar para darle un empuje significativo al ILP y por lo tanto reducir la complejidad del diseño.

TLP: ejecución simultánea de hilos [editar]

Otra estrategia comúnmente usada para aumentar el paralelismo de los CPU es incluir la habilidad de correr múltiples hilos (programas) al mismo tiempo. En general, CPUs con alto TLP han estado en uso por mucho más tiempo que los de alto ILP. Muchos de los diseños en los que Seymour Cray fue pionero durante el final de los años 1970 y los años1980 se concentraron en el TLP como su método primario de facilitar enormes capacidades de computación (para su tiempo). De hecho, el TLP, en la forma de mejoras en múltiples hilos de ejecución, estuvo en uso tan temprano como desde los años 1950 . En el contexto de diseño de procesadores individuales, las dos metodologías principales usadas para lograr el TLP son, multiprocesamiento a nivel de chip, en inglés chip-level multiprocessing (CMP), y el multihilado simultáneo, en inglés simultaneous multithreading (SMT). En un alto nivel, es muy común construir computadores con múltiples CPU totalmente independientes en arreglos como multiprocesamiento simétrico (symmetric multiprocessing (SMP)) y acceso de memoria no uniforme (Non-Uniform Memory Access (NUMA)).[12] Aunque son usados medios muy diferentes, todas estas técnicas logran la misma meta: incrementar el número de hilos que el CPU(s) puede correr en paralelo.
Los métodos de paralelismo CMP y de SMP son similares uno del otro y lo más directo. Éstos implican algo más conceptual que la utilización de dos o más CPU completos y CPU independientes. En el caso del CMP, múltiples "núcleos" de procesador son incluidos en el mismo paquete, a veces en el mismo circuito integrado.[13] Por otra parte, el SMP incluye múltiples paquetes independientes. NUMA es algo similar al SMP pero usa un modelo de acceso a memoria no uniforme. Esto es importante para los computadores con muchos CPU porque el tiempo de acceso a la memoria, de cada procesador, es agotado rápidamente con el modelo de memoria compartido del SMP, resultando en un significativo retraso debido a los CPU esperando por la memoria. Por lo tanto, NUMA es considerado un modelo mucho más escalable, permitiendo con éxito que en un computador sean usados muchos más CPU que los que pueda soportar de una manera factible el SMP. El SMT se diferencia en algo de otras mejoras de TLP en que el primero procura duplicar tan pocas porciones del CPU como sea posible. Mientras es considerada una estrategia TLP, su implementación realmente se asemeja más a un diseño superescalar, y de hecho es frecuentemente usado en microprocesadores superescalares, como el POWER5 de IBM. En lugar de duplicar todo el CPU, los diseños SMT solamente duplican las piezas necesarias para lectura, decodificación, y despacho de instrucciones, así como cosas como los registros de propósito general. Esto permite a un CPU SMT mantener sus unidades de ejecución ocupadas más frecuentemente al proporcionarles las instrucciones desde dos diferentes hilos de software. Una vez más esto es muy similar al método superescalar del ILP, pero ejecuta simultáneamente instrucciones de múltiples hilos en lugar de ejecutar concurrentemente múltiples instrucciones del mismo hilo.

Procesadores vectoriales y el SIMD [editar]

Artículos principales: Procesador vectorial y SIMD
Un menos común pero cada vez más importante paradigma de CPU (y de hecho, de computación en general) trata con vectores. Los procesadores de los que se ha hablado anteriormente son todos referidos como cierto tipo de dispositivo escalar.[14] Como implica su nombre, los procesadores vectoriales se ocupan de múltiples piezas de datos en el contexto de una instrucción, esto contrasta con los procesadores escalares, que tratan una pieza de dato por cada instrucción. Estos dos esquemas de ocuparse de los datos son generalmente referidos respectivamente como SISD (Single Instruction, Single Data|) (Simple Instrucción, Simple Dato) y SIMD (Single Instruction, Multiple Data) (Simple Instrucción, Múltiples Datos). La gran utilidad en crear CPUs que se ocupen de vectores de datos radica en la optimización de tareas que tienden a requerir la misma operación, por ejemplo, una suma, o un producto escalar, a ser realizado en un gran conjunto de datos. Algunos ejemplos clásicos de este tipo de tareas son las aplicaciones multimedia (imágenes, vídeo, y sonido), así como muchos tipos de tareas científicas y de ingeniería. Mientras que un CPU escalar debe completar todo el proceso de leer, decodificar, y ejecutar cada instrucción y valor en un conjunto de datos, un CPU vectorial puede realizar una simple operación en un comparativamente grande conjunto de datos con una sola instrucción. Por supuesto, esto es solamente posible cuando la aplicación tiende a requerir muchos pasos que apliquen una operación a un conjunto grande de datos.
La mayoría de los primeros CPU vectoriales, como el Cray-1, fueron asociados casi exclusivamente con aplicaciones de investigación científica y criptografía. Sin embargo, a medida que la multimedia se desplazó en gran parte a medios digitales, ha llegado a ser significativa la necesidad de una cierta forma de SIMD en CPUs de propósito general. Poco después de que comenzara a ser común incluir unidades de coma flotante en procesadores de uso general, también comenzaron a aparecer especificaciones e implementaciones de unidades de ejecución SIMD para los CPU de uso general. Algunas de estas primeras especificaciones SIMD, como el MMX de Intel, fueron solamente para números enteros. Esto demostró ser un impedimento significativo para algunos desarrolladores de software, ya que muchas de las aplicaciones que se beneficiaban del SIMD trataban sobre todo con números de coma flotante. Progresivamente, éstos primeros diseños fueron refinados y rehechos en alguna de las comunes, modernas especificaciones SIMD, que generalmente están asociadas a un ISA. Algunos ejemplos modernos notables son el SSE de Intel y el AltiVec relacionado con el PowerPC (también conocido como VMX).

Historia de la computación

La computadora no es un invento de alguien en particular, sino el resultado evolutivo de ideas y realizaciones de muchas personas relacionadas con áreas tales como la electrónica, la mecánica, los materiales semiconductores, la lógica, el álgebra y la programación.

Siglo XVII

  • El matemático e ingeniero Muhammad ibn Musa al-Khwarizmi, inventó el algoritmo, es decir, la resolución metódica de problemas de álgebra y cálculo numérico mediante una lista bien definida, ordenada y finita de operaciones a fin de hallar la solución al problema que se plantea.
1617
  • Justo antes de morir, el matemático escocés John Napier (1550-1617), famoso por su invención de los logaritmos, desarrolló un sistema para realizar operaciones aritméticas manipulando barras, a las que llamó "huesos" ya que estaban construidas con material de hueso o marfil, y en los que estaban plasmados los dígitos. Dada su naturaleza, se llamó al sistema "Napier Bones". Los Huesos de Napier tuvieron una fuerte influencia en el desarrollo de la regla deslizante (cinco años más tarde) y las máquinas calculadoras subsecuentes, que contaron con logaritmos.
1623
  • La primera calculadora mecánica fue diseñada por Wilhelm Schickard en Alemania. Llamado "El Reloj Calculador", la máquina incorporó los logaritmos de Napier, hacia rodar cilindros en un albergue grande. Se comisionó un Reloj Calculador para Johannes Kepler, el matemático famoso, pero fue destruido por el fuego antes de que se terminara.
1624
  • La primera regla deslizante fue inventada por el matemático inglés William Oughtred. La regla deslizante (llamada "Círculos de Proporción") era un juego de discos rotatorios que se calibraron con los logaritmos de Napier. Se usó como uno de los primeros aparatos de la informática analógica. Su época de esplendor duró más o menos un siglo, el comprendido entre la segunda mitad del siglo XIX y el último cuarto del XX, hasta que a comienzos de 1970, calculadoras portátiles comenzaron a ser populares.
1642
Pascalina firmada por Pascal en 1652.
  • Blaise Pascal inventa la Pascalina. Con ésta máquina, los datos se representaban mediante las posiciones de los engranajes.
La Pascalina es una de las primeras calculadoras mecánicas, que funcionaba a base de ruedas de diez dientes en las que cada uno de los dientes representaba un dígito del 0 al 9. Las ruedas estaban conectadas de tal manera que podían sumarse números haciéndolas avanzar el número de dientes correcto. Fue inventada por Blaise Pascal en 1645, tras tres años de trabajo sobre la misma. Se fabricaron varias versiones y Pascal en persona construyó al menos cincuenta ejemplares. El primer uso de la Pascalina fue en la Hacienda francesa, debido a que Pascal diseñó la Pascalina para ayudar a su padre, que era contador en dicha entidad. Debido a ello la Pascalina estaba destinada básicamente a solucionar problemas de aritmética comercial. La Pascalina conoció un período de gloria en los años 1960, debido a que se usó de forma interna en la compañía IBM. Por aquellos tiempos era el único dispositivo que permitía efectuar muy rápidamente cálculos en numeración hexadecimal, lo que era necesario para la depuración de los programas. Se exponen varios ejemplares originales en Inglaterra, en el Museo de Artes y Oficios.
1666
  • La primera máquina de multiplicar se inventó por Sir Samuel Morland, entonces Amo de mecánicas a la corte de Rey Charles II de Inglaterra. El aparato constó de una serie de ruedas, cada una de las cuales representaba decenas, centenas, etc. Un alfiler de acero movía los diales para ejecutar los cálculos. A diferencia de la Pascalina, este aparato no tenía avance automático de columnas.
1673
  • La primera calculadora de propósito general fue inventada por el matemático alemán Gottfried von Leibniz. El aparato era una partida de la Pascalina, mientras opera usa un cilindro de dientes (la rueda de Leibniz) en lugar de la serie de engranajes. Aunque el aparato podía ejecutar multiplicación y división, padeció de problemas de fiabilidad que disminuyó su utilidad.

Siglo XVIII

1769
  • El Jugador de Ajedrez Autómata, "El Turco", fue inventado por el Barón Wolfgang von Kempelen, un noble húngaro. Pretendió ser una máquina pura, incluía un jugador de ajedrez "robótico", sin embargo fue una farsa, la cabina era una ilusión óptica bien planteada que permitía a un maestro del ajedrez esconderse en su interior y operar el maniquí, era una sensación dondequiera que iba pero se destruyó en un incendio en 1856.
1777
  • Se inventó la primera máquina lógica por Charles Mahon, el Conde de Stanhope. El "demostrador lógico" era un aparato tamaño bolsillo que resolvía silogismos tradicionales y preguntas elementales de probabilidad. Mahon es el precursor de los componentes lógicos en computadoras modernas.

Siglo XIX

1801
  • El francés Joseph Marie Jacquard, utilizó un mecanismo de tarjetas perforadas para controlar el dibujo formado por los hilos de las telas confeccionadas por una máquina de tejer. Estas plantillas o moldes metálicos perforados permitían programar las puntadas del tejido, logrando obtener una diversidad de tramas y figuras. Inspirado por instrumentos musicales que se programaban usando papel agujereado, la máquina se parecía a una atadura del telar que podría controlar automáticamente los dibujos usando una línea de tarjetas agujereadas. La idea de Jacquard, que revolucionó el hilar de seda, estaba por formar la base de muchos aparatos de la informática e idiomas de la programación.
1820
  • La primera calculadora de producción masiva se distribuyó por Charles Thomas de Colmar. Originalmente se les vendió a casas del seguro Parisienses, el aritmómetro de Colmar operaba usando una variación de la rueda de Leibniz. Más de mil aritmómetros se vendieron y eventualmente recibió una medalla a la Exhibición Internacional en Londres en 1862.
1822
  • Charles Babbage completó su Artefacto de la diferencia, una máquina de propósito específico que se podía usar para calcular valores de funciones polinómicas mediante el método de las diferencias. El Artefacto de la Diferencia era un ensamble complejo de ruedas, engranajes, y remaches. Babbage diseñó su "Artefacto Analítico", un aparato de propósito general que era capaz de ejecutar cualquier tipo de cálculo matemático. Los diseños del artefacto analítico eran la primera conceptualización clara de una máquina que podría ejecutar el tipo de cálculos computacionales que ahora se consideran el corazón de informática. Babbage nunca construyó su artefacto analítico, pero su plan influyó en toda computadora digital subsiguiente, incluidas las modernas. El artefacto analítico fue finalmente construido por un equipo moderno de ingenieros, en 1989, cien años después de la muerte de Babbage en 1871. Por su discernimiento, Babbage hoy se conoce como el "Padre de las Computadoras Modernas".
1837
  • Fue inicialmente descrita la máquina analítica de Charles Babbage. Es el diseño de un computador moderno de propósito general. 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 muy propenso a errores.
1843
  • Lady Ada Augusta Lovelace sugirió la idea de que las tarjetas perforadas se adaptaran de manera que causaran que el motor de Babbage repitiera ciertas operaciones. Debido a esta sugerencia algunos consideran a Lady Lovelace la primera programadora.
1854
  • El desarrollo del Álgebra de Boole fue publicado por el lógico inglés George Boole. El sistema de Boole redujo a argumentos lógicos las permutaciones de tres operadores básicos algebraicos: y, o, y no. A causa del desarrollo del álgebra de Boole, Boole es considerado por muchos como el padre de la teoría de la informática.
1869
  • La primera máquina lógica en usar el álgebra de Boole para resolver problemas más rápido que humanos, fue inventada por William Stanley Jevons. La máquina, llamada el Piano lógico, usó un alfabeto de cuatro términos lógicos para resolver silogismos complicados.
1878
  • Un comité de la Asociación Británica para el avance de la ciencia recomendó no construir la máquina analítica, por lo que Babbage no tuvo acceso a fondos del gobierno.
  • Ramón Verea, quien vivía en la ciudad de Nueva York, inventó una calculadora con una tabla interna de multiplicación; esto fue mucho más rápido que usar acarreos u otro método digital de aquel tiempo. Él no se interesó en poner su obra en producción, sólo quiso mostrar que un español podía inventar tanto como un americano.
1879
  • A los 19 años de edad, Herman Hollerith fue contratado como asistente en las oficinas del censo estadounidense y desarrolló un sistema de cómputo mediante tarjetas perforadas en las que los agujeros representaban el sexo, la edad, raza, entre otros. Gracias a la máquina tabuladora de Hollerith el censo de 1890 se realizó en dos años y medio, cinco menos que el censo de 1880.Se tardaba tanto en hacer el censo debido a la llegada masiva de inmigrantes.
1884
  • Dorr Felt desarrolló su Comptómetro, el cual fue la primera calculadora que se operaba con sólo presionar teclas en vez de, por ejemplo, deslizar ruedas.
1893
  • La primera máquina exitosa de multiplicación automática se desarrolló por Otto Steiger. "El Millonario", como se le conocía, automatizó la invención de Leibniz de 1673, y fue fabricado por Hans W. Egli de Zurich. Originalmente hecha para negocios, la ciencia halló inmediatamente un uso para el aparato, y varios miles de ellos se vendieron en los cuarenta años que siguieron.

Siglo XX

1906
  • El primer tubo de vacío fue inventado por el estadounidense, Lee De Forest. El "Audion", como se llamaba, tenía tres elementos dentro de una bombilla del vidrio evacuada. Los elementos eran capaces de hallar y amplificar señales de radio recibidas de una antena. El tubo al vacío encontraría uso en varias generaciones tempranas de 5 computadoras, a comienzos de 1930.
1919
  • El primer circuito multivibrador o biestable (en léxico electrónico flip-flop) fue desarrollado por los inventores americanos W.H. Eccles y F.W. Jordan. El flip-flop permitió diseñar circuitos electrónicos que podían tener dos estados estables, alternativamente, pudiendo representar así el 0 como un estado y el otro con un 1. Esto formó la base del almacenamiento y proceso del bit binario, estructura que utilizan las actuales computadoras.
1924
  • Walther Bothe construyó una puerta lógica AND para usarla en experimentos físicos, por lo cual recibió el premio Nobel de física en 1954.
1925
  • Se fundan los laboratorios Bell.
1930
  • Vannevar Bush construyó una máquina diferencial parcialmente electrónica, capaz de resolver ecuaciones diferenciales.
1931
  • Kurt Gödel publicó un documento sobre los lenguajes formales basados en operaciones aritméticas. Lo usó para codificar arbitrariamente sentencias y pruebas formales, y mostró que los sistemas formales, como las matemáticas tradicionales, son inconsistentes en un cierto sentido, o que contienen sentencias improbables pero ciertas. Sus resultados son fundamentales en las ciencias teóricas de la computación.
1936
  • Alan Turing describe la máquina de Turing, la cual formaliza el concepto de algoritmo.
1940
  • Samuel Williams y George Stibitz completaron en los laboratorios Bell una calculadora que podía manejar números complejos.
1941
  • La computadora Z3 fue creada por Konrad Zuse. Fue la primera máquina programable y completamente automática.
1942
  • John Vincent Atanasoff y Clifford Edward Berry completaron una calculadora de propósito especial para resolver sistemas de ecuaciones lineales simultáneas, la cual fue llamada la "ABC" ("Atanasoff Berry Computer").
1944
  • Se construyó en la Universidad de Harvard, la Mark I, diseñada por un equipo encabezado por Howard H. Aiken.
1945
  • El primer caso de malfuncionamiento en la computadora causado por la intrusión de una polilla al sistema fue documentado por los diseñadores del Mark II. Erróneamente se cree que de allí proviene el uso del término "bug", que significa insecto o polilla en inglés. Sin embargo este término ya se usaba mucho antes para referirse a malfuncionamientos de aparatos mecánicos, eléctricos y electrónicos. El "Oxford English Dictionary " documenta este uso de la palabra desde 1889.
  • Vannevar Bush desarrolló la teoría de Memex, un dispositivo de hipertexto ligado a una librería de libros y películas.
1946
ENIAC.
  • Se construye en la Universidad de Pennsylvania la ENIAC (Electronic Numerical Integrator And Calculator), que fue la primera computadora electrónica de propósito general. Esta máquina ocupaba todo un sótano de la Universidad, tenía más de 18.000 tubos de vacío, consumía 200kW de energía eléctrica y requería todo un sistema de aire acondicionado; tenía la capacidad para realizar cinco mil operaciones aritméticas por segundo.
1947
  • Se inventa el transistor, en Laboratorios Bell por John Bardeen, Walter H. Brattain, y William Shockley.
1949
  • Fue desarrollada la primera memoria, por Jay Forrester, la cual reemplazó los no confiables tubos al vacío como la forma predominante de memoria por los próximos diez años.
1950
  • Alan Turing expone un artículo que describe lo que ahora conocemos como la prueba de Turing. Su publicación explora el desarrollo natural y potencial de la inteligencia y comunicación humana y de computadoras.
1951
  • Comienza a operar la EDVAC, a diferencia de la ENIAC, no era decimal, sino binaria y tuvo el primer programa diseñado para ser almacenado.
  • Eckert y Mauchly entregan a la Oficina del Censo su primer computador: el UNIVAC I.
  • El Sistema A-0 fue inventado por Grace Murray Hopper. Fue el compilador desarrollado para una computadora electrónica.
1952
  • Shannon desarrolla el primer ratón eléctrico capaz de salir de un laberinto, considerada la primera red neural.
1953
  • IBM fabricó su primera computadora escala industrial, la IBM 650
  • Se amplía el uso del lenguaje ensamblador para la programación de las computadoras.
  • Se crean memorias a base de magnetismo (conocidas como memorias de núcleos).
1954
  • Se desarrolla el lenguaje de programación de alto nivel FORTRAN.
1956
  • Darthmouth da una conferencia en a partir de la que nace el concepto de inteligencia artificial.
  • Edsger Dijkstra inventa un algoritmo eficiente para descubrir las rutas más cortas en grafos como una demostración de las habilidades de la computadora ARMAC.
1957
  • Es puesta a la venta por parte de IBM la primera impresora de matriz de puntos.
1958
  • Comienza la segunda generación de computadoras, caracterizados por usar circuitos transistorizados en vez de válvulas al vacío.
  • El primer circuito integrado se construyó por Jack S. Kilby.
  • La organización ARPA es creada como consecuencia tecnológica de la llamada Guerra Fría.
1960
  • Se desarrolla COBOL, el primer lenguaje de programación de alto nivel transportable entre modelos diferentes de computadoras.
  • Aparece ALGOL, el primer lenguaje de programación estructurado y orientado a los procedimientos.
  • Se crea el primer compilador de compilador.
  • C. Antony R. Hoare desarrolla el algoritmo de ordenamiento o clasificación llamado quicksort.
1961
  • Kenneth Iverson inventa el lenguaje de programación APL en IBM.
  • Aparece el concepto de paginación de memoria, descrito por T. Kilburn y D. J. Howart.
1962
  • Los primeros programas gráficos que dejan que el usuario dibuje interactivamente en una pantalla fueron desarrollados por Iván Sutherland en MIT.
  • El primer compilador autocontenido, es decir, capaz de compilar su propio código fuente fue el creado para Lisp por Hart y Levin en el MIT.
  • Un equipo de la Universidad de Manchester completa la computadora ATLAS. Esta máquina introdujo muchos conceptos modernos como interrupciones, pipes (tuberías), memoria entrelazada, memoria virtual y memoria paginada. Fue la máquina más poderosa del mundo en ese año.
  • El estudiante del MIT Steve Russell escribe el primer juego de computadora, llamado Spacewar!.
1963
Caracteres ASCII imprimibles, del 32 al 126.
  • Un comité Industria-Gobierno define el código estándar de caracteres ASCII.
  • El primer minicomputador comercialmente exitoso es distribuido por DEC (Digital Equipment Corporation).
1964
  • La aparición del IBM 360 marca el comienzo de la tercera generación. Las placas de circuito impreso con múltiples componentes elementales pasan a ser reemplazadas con placas de circuitos integrados.
  • Aparece el CDC 6600, la primera supercomputadora comercialmente disponible.
  • Se desarrolla el lenguaje BASIC, John George Kemeny y Thomas Eugene Kurtz en el Dartmouth College
1965
  • Gordon Moore publica la famosa Ley de Moore.
  • La lógica difusa, diseñada por Lofti Zadeh, se usó para procesar datos aproximados.
  • J. B. Dennis introduce por primera vez el concepto de segmentación de memoria.
  • Los algoritmos de exclusión mutua (sistemas operativos) fueron tratados por primera vez en los clásicos documentos de Dijkstra.
1966
  • La mayoría de ideas y conceptos que existían sobre redes fueron aplicadas a ARPANET.
  • Aparecen los primeros ensayos que más tarde definirían lo que hoy es la programación estructurada.
1967
  • Los primeros programas exitosos de ajedrez fueron desarrollados por Richard Greenblatt en el MIT.
  • Es inventado el diskette (disco flexible) en IBM por David Noble, bajo la dirección de Alan Shugart.
1968
  • Robert Noyce y Gordon Moore fundan la corporación Intel.
1969
  • El protocolo de comunicaciones NCP fue creado para controlar la red ARPANET.
  • La primera minicomputadora de 16-bit es distribuida por la Data General Corporation.
  • Se desarrolla en los laboratorios Bell el lenguaje de programación B cuyos aportes fueron mayoritariamente de Ken Thompson y Dennis Ritchie.
  • Nace el sistema operativo UNICS en los laboratorios Bell de AT&T por un grupo de empleados de dicho laboratorio, entre los que se encuentran Ken Thompson, Dennis Ritchie y Douglas Mcllroy.
1970
  • El sistema UNICS, es renombrado como Unix.
  • El primer cable de fibra óptica fue comercialmente producido por Corning Glass Works, Inc.
  • Se publica el primer modelo de base de datos relacional, por E.F. Codd.
  • El profesor suizo Niklaus Wirth desarrolla el lenguaje de programación Pascal.
  • Brinch Hansen utiliza por primera vez la comunicación interprocesos en el sistema RC 400.
  • Intel crea la primera memoria dinámica RAM. Se le llamó 1103 y tenía una capacidad de 1024 bits (1Kbits).
1971
  • Se presenta el primer procesador comercial y a la vez el primer chip microprocesador, el Intel 4004.
  • Ray Tomlinson crea el primer programa para enviar correo electrónico, como consecuencia, la arroba se usa por primera vez con fines informáticos.
  • Un grupo de investigadores del MIT presentaron la propuesta del primer "Protocolo para la transmisión de archivos en Internet" (FTP).
  • Texas Instruments vende la primera calculadora electrónica portátil.
1972
  • Aparecen los disquetes de 5 1/4 pulgadas.
  • Se reconoce el primer virus informático, creado por Robert Thomas Morris. Atacó a una máquina IBM Serie 360 y fue llamado Creeper.
  • Ken Thompson y Dennis M. Ritchie crean el lenguaje de programación C en los Laboratorios Bell.
  • Nolan Bushnell y Ted Dabney fundan la Atari.
  • Intel desarrolla y pone a la venta el procesador 8008.
  • El concepto de región crítica fue sugerido por C. A. R. Hoare y Per Brinch Hansen.
1973
  • ARPA cambia su nombre por DARPA.
1974
  • Es creado el protocolo TCP por Vint Cerf y Robert Kahn.
  • Se crea el sistema Ethernet para enlazar a través de un cable único a las computadoras de una red local (LAN).
  • Gary Kildall crea el sistema operativo CP/M, en base al cual se desarrolla posteriormente, de manera polémica, MS-DOS, suponiendo una violación a los derechos de autor (copyright) del CP/M.
1975
  • En enero la revista Popular Electronics hace el lanzamiento del Altair 8800, el primer microcomputador personal reconocible como tal.
  • Se funda la empresa Microsoft.
1976
  • Se funda la empresa Apple.
1977
  • Se hace popular el ordenador Apple II, desarrollado por Steve Jobs y Steve Wozniak en un garaje.
1978
  • Se desarrolla el famoso procesador de textos WordStar, originalmente para plataforma CP/M (Control Program for Microcomputer).
1979
  • Dan Bricklin crea la primera hoja de cálculo, más tarde sería denominada VisiCalc.
  • Aparece el juego Pacman creado por Toru Iwatani de la empresa Namco.
1980
  • Surge el primer prototipo de Computadora de Instrucción Reducida (RISC), desarrollado por un grupo de investigación en IBM.
  • La empresa Mycron lanza la primera microcomputadora de 16 bits, llamada Mycron 2000.
  • Se desarrolla el primer microprocesador de 32-bit en un solo chip en Laboratorios Bell, llamado Bellmac-32.
1981
  • Se lanza al mercado el IBM PC, que se convertiría en un éxito comercial, marcaría una revolución en el campo de la computación personal y definiría nuevos estándares.
  • Se termina de definir el protocolo TCP/IP.
  • Apple presenta el primer computador personal que se vende a gran escala, el apple II.
  • Sony crea los disquetes de 3 1/2 pulgadas.
1982
  • La Asociación Internacional MIDI publica el MIDI.
  • Se funda Compaq Computer Corporation, una compañía de computadoras personales, por Rod Canion, Jim Harris y Bill Murto.

1983
Logo de GNU.
  • Microsoft ofrece la versión 1.0 del procesador de textos Word para DOS.
  • Compaq (Compaq Computer Corporation) fabrica el primer clon PC IBM compatible, el Compaq portable.
  • ARPANET se separa de la red militar que la originó, de modo que, ya sin fines militares, se puede considerar esta fecha como el nacimiento de Internet.
  • Se anuncia públicamente el proyecto GNU iniciado por Richard Stallman.
  • Aparece el lenguaje de programación C++ diseñado por Bjarne Stroustrup.
  • Nace el primer sistema operativo de Sun llamado SunOS.
  • Aparece el famoso Lotus 1-2-3, un programa de hoja de cálculo realizado por la compañía Lotus Software.
  • El sistema DNS consistía de 1000 hosts.
  • Se funda Borland.
1984
  • IBM presenta el PC-AT, con procesador Intel 80286, bus de expansión de 16 bits y 6 Mhz de velocidad. Tenía hasta 512 KB de memoria RAM, un disco duro de 20 MB y un monitor monocromático. Su precio en ese momento era de 5.795 dólares.
  • Apple Computer presenta su Macintosh 128K con el sistema operativo Mac OS, el cual introduce la interfaz gráfica ideada en Xerox.
  • Las compañías Philips y Sony crean los CD-Roms para computadores.
  • Se desarrolla el sistema de ventanas X bajo el nombre X1 para dotar de una interfaz gráfica a los sistemas Unix.
  • Aparece el lenguaje LaTeX para procesamiento de documentos.
  • Hewlett-Packard lanza su popular impresora LaserJet.
  • Leonard Bosack y Sandra Lerner fundan Cisco Systems que es líder mundial en soluciones de red e infraestructuras para Internet.
1985
  • Microsoft presenta el sistema operativo Windows 1.0.
  • Compaq saca a la venta la Compaq Deskpro 286, una PC IBM Compatible de 16-bits con microprocesador Intel 80286 corriendo a 6 MHz y con 7MB de RAM, fue considerablemente más rápida que una PC IBM. Fue la primera de la línea de computadoras Compaq Deskpro.
  • Bertrand Meyer crea el lenguaje de programación Eiffel.
  • Adobe crea el PostScript.
  • El ruso Alexey Pazhitnov crea el juego Tetris.
1986
  • ISO estandariza SGML, lenguaje en que posteriormente se basaría XML.
  • Compaq lanza el primer computador basado en el procesador de 32 bits Intel 80386, adelantándose a IBM.
  • El lenguaje SQL es estandarizado por ANSI.
  • Aparece el programa de cálculo algebraico de computadora MathCad.
  • Se registra la primera patente base de codificación de lo que hoy conocemos como MP3.
  • Compaq pone en venta la PC compatible Compaq Portable II, mucho más ligera y pequeña que su predecesora, usaba microprocesador de 8 MHz y 10MB de disco duro, y fue 30% más barata que la IBM PC/AT con disco rígido.
1987
  • Se desarrolla la primera versión del actual protocolo X11.
  • Larry Wall crea el lenguaje de programación Perl.
  • El proyecto GNU crea el conjunto de compiladores llamado "GNU Compiler Collection".
  • Compaq introdujo la primera PC basada en el nuevo microprocesador de Intel; el 80386 de 32 bits, con la Compaq Portable 386 y la Compaq Portable III. Aún IBM no estaba usando este procesador. Compaq marcaba lo que se conocería como la era de los clones de PC.
1988
  • Soft Warehouse desarrolla el programa de álgebra computacional llamado Derive.
  • Stephen Wolfram y su equipo sacan al mercado la primera versión del programa Mathematica.
  • Aparece el primer documento que describe lo que hoy se conoce como firewalls.
  • Aparece el estándar XMS.
1989
  • Creative Labs presenta la reconocida tarjeta de sonido Sound Blaster.
  • T. E. Anderson estudia las cuestiones sobre el rendimiento de las hebras o hilos en sistemas operativos (threads).
1990
  • Tim Berners-Lee ideó el hipertexto para crear el World Wide Web (www) una nueva manera de interactuar con Internet. También creó las bases del protocolo de transmisión HTTP, el lenguaje de documentos HTML y el concepto de los URL.
  • Se construye el primer prototipo de procesador óptico en AT&T (Laboratorios de Bell).
  • Guido van Rossum crea el lenguaje de programación Python.
1991
Tux (Logo de Linux).
  • Linus Torvalds comenzó a desarrollar Linux, un sistema operativo compatible con Unix.
  • Comienza a popularizarse la programación orientada a objetos.
  • Surge la primera versión del estándar Unicode.
  • Aparece la primera versión de Adobe Premiere.
  • Compaq puso a la venta al por menor con la Compaq Presario, y fue uno de los primeros fabricantes en los mediados de los 90's en vender una PC de menos de $1,000. Compaq se convirtió en una de los primeros fabricantes en usar micros de AMD y Cyrix.
1992
  • Es introducida la arquitectura de procesadores Alpha diseñada por DEC bajo el nombre AXP, como reemplazo para la serie de microcomputadores VAX que comúnmente utilizaban el sistema operativo VMS y que luego originaría el openVMS. El procesador Alpha 21064 de 64 bits y 200MHz es declarado como el más rápido del mundo.
  • Microsoft lanza Windows 3.1.
  • Aparece la primera versión del sistema operativo Solaris.
  • GNU comienza a utilizar el núcleo Linux.
1993
  • Un grupo de investigadores descubrieron que un rasgo de la mecánica cuántica, llamado entrelazamiento, podía utilizarse para superar las limitaciones de la teoría del cuanto (quantum) aplicada a la construcción de computadoras cuánticas y a la teleportación (teleportation).
  • Microsoft lanza al mercado la primera versión del sistema operativo multiusuario de 32 bits (cliente-servidor) Windows NT.
  • Se crea la lista TOP500 que recopila los 500 ordenadores más poderosos de la tierra.
1994
  • Marc Andreessen crea el famoso navegador web Netscape Navigator.
  • Es diseñado el PHP, originalmente en lenguaje Perl, seguidos por la escritura de un grupo de CGI binarios escritos en el lenguaje C por el programador danés-canadiense Rasmus Lerdorf.
1995
  • Lanzamiento de Windows 95 por parte de Microsoft.
  • Aparece la primera versión de MySQL.
  • Inicia el desarrollo del servidor Apache.
  • La implementación original y de referencia del compilador, la máquina virtual y las librerías de clases de Java fueron desarrollados por Sun Microsystems.
  • Se presenta públicamente el lenguaje de programación Ruby.
  • Se especifica la versión 1.5 del DVD, base actual del DVD.
1996
  • Se crea Internet2, más veloz que la Internet original.
  • Se publica la primera versión del navegador web Opera.
  • Se inicia el proyecto KDE.
  • La tecnología de DjVu fue originalmente desarrollada en los laboratorios de AT&T.
  • Aparece la primera versión de SuperCollider.
  • Sabeer Bhatia y Jack Smith fundan HotMail.
1997
  • Es creado reproductor multimedia Winamp, cuya distribución es realizada gratuitamente por la empresa estadounidense Nullsoft.
  • Aparece la primera versión pública de FlightGear.
  • Spencer Kimball y Peter Mattis crean la inicial librería GTK+.
1998
  • La W3C publica la primera versión de XML.
  • Es lanzado al mercado el sistema Windows 98 por parte de Microsoft.
  • Compaq adquirió Digital Equipment Corporation, la compañía líder en la anterior generación de las computadoras durante los años 70 y principios de los 80. Esta adquisición convertiría a Compaq en el segundo más grande fabricante de computadoras, en términos de ingresos.
  • Larry Page y Sergey Brin fundan Google Inc.
1999
GNOME.
  • Aparece el entorno de escritorio GNOME.
  • Se publica la primera versión de MSN Messenger.
  • Surge Mac OS 9.
2000
  • Es presentado el prototipo de computador cuántico construido por un equipo de investigadores de IBM.
  • Es lanzado el sistema operativo Windows 2000 por Microsoft.
  • Es lanzado el sistema operativo Windows Me por Microsoft.
  • Lanzamiento de Mac OS X.

Siglo XXI

2001
  • Microsoft desarrolla, como parte de su plataforma .NET, el lenguaje de programación C#, que después fue aprobado como un estándar por la ECMA e ISO.
  • Larry Sanger y Jimmy Wales fundan Wikipedia
  • Se lanza el sistema operativo Windows XP por parte de Microsoft.
2002
  • Lanzamiento del navegador web Mozilla Firefox, llamado en un primer momento Phoenix.
  • Puesta en marcha del supercomputador Earth Simulator que sería el ordenador más potente según el TOP500.
2005
  • Los usuarios de Internet con conexión de banda ancha superan a los usuarios de internet con conexión vía módem en la mayoría de países desarrollados.
  • Se lanza el programa Google Earth.
  • Lanzamiento de Windows XP Media Center Edition
  • Puesta en funcionamiento del supercomputador MareNostrum en el BSC.
  • Creación de YouTube.
2006
  • Lanzamiento del sistema operativo de Microsoft Windows Vista
  • Entra en servicio el supercomputador Magerit perteneciente al CeSViMa.

2007
  • La empresa Dell lanza al mercado la primera computadora portátil (laptop) con la distribución Linux Ubuntu preinstalada.
  • La empresa de Steve Jobs, Apple, lanza al mercado la nueva versión el Mac OS X Leopard 10.5

2008
  • Apple lanza al mercado la MacBook Air la cual, al parecer, es la laptop más delgada del mundo en ese momento.
  • Apple lanza el móvil más revolucionario de la historia en toda Europa y América, el iPhone 3G .
  • Google, contrarresta a Apple lanzando el G1 con su nuevo sistema Android para móviles.
  • Lanzamiento del navegador Google Chrome.
  • Lanzamiento de KDE 4.0.
  • El supercomputador Roadrunner es el primero en superar el PetaFLOP alcanzando el número 1 en la lista de los más veloces, TOP500.
2009
  • Debian GNU/Linux 5.0
  • KDE 4.2 RC
  • Apple, lanza al mercado la nueva versión el Mac OS X Snow Leopard 10.6
  • El 22 de octubre se lanza el sucesor de Windows Vista, el Windows 7.
2010
  • Se espera el lanzamiento de Google Chrome OS, un sistema operativo creado por la empresa Google y basado en Linux.
  • Se espera el lanzamiento de USB versión 3.0, que representaría un avance en la velocidad de transmisión de datos entre el dispositivo conectado y la computadora.


Powered by Blogger