El Ordenador
Este elemento es un complemento de los cursos y guías de Lawi. Ofrece hechos, comentarios y análisis sobre el ordenador. [aioseo_breadcrumbs]
Visualización Jerárquica de Ordenador
A continuación se examinará el significado.
¿Cómo se define? Concepto de Ordenador
Véase la definición de ordenador en el diccionario.
Otra palabra para designar una computadora. Mientras las palabras computadora, o computador provienen del inglés computer, ordenador proviene de la versión francesa ordinateur.
Ordenadores de Escritorio (Mesa) y Otros
Una computadora u ordenador es un aparato construido para realizar cálculos de rutina con rapidez, fiabilidad y facilidad.
Observación
Además de esta función básica, el avance de la tecnología ha permitido que las computadoras proporcionen numerosos servicios a un número cada vez mayor de personas. Desde su introducción en la década de 1940, las computadoras se han convertido en una parte integral del mundo moderno.
Observación
Además de los sistemas fácilmente aparentes que se encuentran en sitios gubernamentales, industrias, oficinas y hogares, las microcomputadoras ahora también están incrustadas discretamente en una multitud de lugares cotidianos. Son una parte integral de los automóviles, teléfonos, sistemas de entretenimiento y aparatos de cocina, entre otros artículos.
Los tres tipos básicos son computadoras digitales, analógicas e híbridas. Las computadoras digitales funcionan internamente y realizan operaciones exclusivamente con números digitales o discretos (véase tecnología digital). Estos son el tema del siguiente artículo. Las computadoras analógicas utilizan partes continuamente variables exclusivamente para la representación interna de magnitudes y para realizar sus operaciones incorporadas (véase dispositivos analógicos). Las computadoras híbridas utilizan tanto técnicas continuamente variables como técnicas digitales discretas en funcionamiento.
Las computadoras digitales, analógicas e híbridas son conceptualmente similares en el sentido de que todas dependen de instrucciones externas.Entre las Líneas En la práctica, difieren más notablemente en los medios que proporcionan para recibir nuevos programas para realizar nuevos trabajos de cálculo.
Más Información
Los ordenadores digitales reciben nuevos programas con bastante facilidad, ya sea a través de instrucciones manuales o por medios automáticos.
Puntualización
Sin embargo, en el caso de los ordenadores analógicos o híbridos, es probable que la reprogramación implique el desmontaje parcial y la reconexión de los componentes.Entre las Líneas En la medida en que las máquinas analógicas pueden considerarse programables, su programa se reconstruye en su estructura para cada trabajo.
El Ordenador y su Historia
El uso generalizado de los ordenadores ha sido posible gracias a los avances tecnológicos que se han producido a un ritmo constante desde los primeros tiempos de la informática. Estos avances han hecho posible el diseño de máquinas cada vez más pequeñas, potentes y flexibles de utilizar, a un coste cada vez menor.
Historia
El uso de ordenadores se basa en el principio de que cualquier cálculo complicado puede descomponerse en una serie de operaciones más sencillas que pueden realizarse automáticamente. Las primeras máquinas de calcular, diseñadas por Wilhelm Schickard, Pascal y Leibniz, datan de principios del siglo XVII. Realizaban operaciones aritméticas básicas (sumas y restas, y también conversiones monetarias en el caso de la máquina de Pascal, mientras que las otras máquinas también realizaban multiplicaciones y divisiones). En 1801, Joseph-Marie Jacquard (1752-1834) diseñó el primer telar para evitar el trabajo infantil de los tejedores. Hoy en día se siguen utilizando versiones modernizadas de esta máquina en la industria textil.
A principios del siglo XIX, Charles Babbage (1792-1871) construyó una máquina que puede considerarse la precursora de los ordenadores. Por desgracia, nunca llegó a funcionar correctamente, ya que la tecnología de la época era demasiado rudimentaria. George Boole (1815-1864) creó una nueva forma de lógica simbólica para traducir conceptos e ideas en ecuaciones. El álgebra de Boole es la base teórica del funcionamiento de la electrónica digital y los ordenadores.
No fue hasta finales del siglo XIX y el uso de la electromecánica cuando aparecieron las máquinas mecanográficas. Muy específicas para un proceso determinado (clasificadoras, tabuladoras, etc.), requerían numerosas operaciones manuales, lo que iba en detrimento de su eficacia. Todo tratamiento que debía realizar la máquina se especificaba mediante un esquema eléctrico. Esta programación podía durar desde unas horas hasta varios días, en función de la complejidad del problema. Más adelante, los ordenadores que utilizaban esta técnica de programación se denominarían máquinas programables por pantalla.
Poco antes de la Segunda Guerra Mundial, aparecieron las primeras calculadoras electromecánicas, basadas en las ideas de Babbage. Uno de los principales fabricantes de estas máquinas, Hermann Hollerith, estuvo detrás de la creación de la empresa I.B.M. (Industrial Business Machines). Estas máquinas pronto fueron sustituidas por las primeras calculadoras electrónicas, mucho más potentes. El primer ordenador totalmente electrónico, llamado ENIAC (Electronic Numerical Integrator and Computer), fue construido en 1946 por John Presper Eckert y John Mauchly utilizando tubos de vacío. Al igual que las máquinas mecanográficas de las que fue heredero, ENIAC era una máquina con un programa visualizado.
Los inconvenientes de esta técnica de programación condujeron a la definición y desarrollo de las máquinas de programas almacenados, es decir, máquinas con una memoria capaz de contener tanto los programas como los datos que debían procesarse. La estructura de las máquinas de programas almacenados fue descrita en 1946 por el matemático estadounidense de origen húngaro John von Neumann (1903-1957). Esta arquitectura de máquina sigue siendo válida hoy en día, y la mayoría de los ordenadores actuales se basan en ella.
La arquitectura von Neumann
John von Neumann propuso una estructura universal para una máquina calculadora y definió sus componentes básicos. La máquina está formada por los siguientes componentes
– una unidad de cálculo, denominada unidad aritmética y lógica, para realizar operaciones aritméticas y lógicas;
– una memoria, o memoria principal, en la que se almacenan tanto los programas (el software) que describen cómo llegar a los resultados como los datos que hay que procesar; toda la información se almacena en forma binaria;
– periféricos o unidades de entrada-salida, utilizados para comunicarse con el entorno y con el ser humano;
– una unidad de control para garantizar el funcionamiento coherente de los elementos anteriores.
El conjunto formado por la unidad aritmética y lógica, por un lado, y la unidad de control, por otro, constituye la unidad central o procesador. Todos los componentes físicos, denominados hardware, están controlados por el software, una secuencia coherente de instrucciones y datos estructurados almacenados en la memoria y que ejecutan un algoritmo.
La CPU sólo puede realizar un conjunto restringido de operaciones elementales, especificadas mediante instrucciones. El conjunto de instrucciones ejecutables constituye el juego de instrucciones; éste caracteriza una arquitectura hardware determinada.
Una instrucción se compone de varias partes, los campos, que incluyen principalmente el código de operación, que define la operación a realizar, y la dirección, que especifica la ubicación en memoria del elemento al que se refiere la operación (u operando). Las instrucciones de la máquina descrita por von Neumann sólo tenían una dirección, pero la mayoría de las máquinas posteriores tenían varias: dos direcciones (dirección del primer operando, dirección del segundo operando) o incluso tres (dirección del primer operando, dirección del segundo operando y dirección donde se almacena el resultado).
Las distintas generaciones de ordenadores: los ordenadores de tubo
Aunque en un principio los ordenadores se diseñaron para realizar cálculos numéricos demasiado largos o complicados para hacerlos a mano, pronto se vio que estas máquinas también podían procesar información no numérica (por ejemplo, reconocer una cadena de caracteres en un texto). Las calculadoras se convirtieron en máquinas universales de tratamiento de la información, de ahí la palabra ordinateur, acuñada en 1955 para encontrar un equivalente francés a la expresión inglesa data processing machine. Propuesta por el latinista Jacques Perret, profesor de la Sorbona, en respuesta a una petición del I.B.M.-Francia, esta palabra es ahora la que utiliza todo el mundo; se prefiere al término calculateur, que tiene un significado demasiado restringido.
Al mismo tiempo que se ha producido un aumento espectacular del rendimiento, también se ha producido una mejora de las técnicas de escritura de programas, es decir, de la metodología de programación. En general, los avances tecnológicos de cada generación de ordenadores se corresponden más o menos con los avances de los programas informáticos.
La primera generación (1950-1959)
Las primeras máquinas construidas industrialmente a principios de los años 50 constituyen claramente la primera generación de ordenadores. Se caracterizaban por una tecnología basada en tubos de vacío miniaturizados, más fiables y que consumían menos energía que los utilizados en los primeros prototipos. Una vez resueltos los problemas de fiabilidad de los componentes de la CPU, se estableció rápidamente la necesidad de disponer de memorias centrales fiables, rápidas y con capacidad suficiente. Las memorias utilizadas en los primeros ordenadores eran líneas de retardo que ofrecían, por el mismo volumen, una capacidad de almacenamiento mucho mayor que los tubos de vacío. Sin embargo, en pocos años, las memorias con núcleo de ferrita suplantaron a las demás tecnologías de memoria central.
Al mismo tiempo que se trabajaba en la mejora de las memorias centrales, también se investigaba en los periféricos, en particular para desarrollar soportes de almacenamiento de datos menos costosos que las memorias centrales. Estas memorias secundarias (también denominadas memorias externas, auxiliares o de masa) se diseñaron para almacenar una cantidad de información cada vez mayor, para un procesamiento cada vez más complejo. Así nacieron los tambores magnéticos, las cintas magnéticas y los discos. Estos soportes de datos, que siguen utilizándose hoy en día (a excepción de los tambores magnéticos), se han mejorado constantemente desde su creación.
Durante esta década, el software evolucionó significativamente: se mejoraron los lenguajes de programación disponibles, así como las técnicas para gestionar los diferentes tipos de memoria utilizados en un ordenador.
Mejoras en los lenguajes de programación
Los lenguajes de programación de las primeras máquinas eran rudimentarios, y la programación se realizaba en representación binaria, instrucción por instrucción. Esta programación era lenta y tediosa, y fuente de numerosos errores. Además, era prácticamente inutilizable en cuanto el programa se volvía complejo. Esto llevó al desarrollo de lenguajes de programación más fáciles de usar: los lenguajes ensambladores y los lenguajes avanzados o de alto nivel.
Los lenguajes ensambladores permitían escribir instrucciones de lenguaje máquina en forma simbólica; esta forma simbólica es traducida a binario por un programa, suministrado por el fabricante, llamado ensamblador.
Los lenguajes avanzados permiten al usuario describir el procesamiento a realizar, independientemente del conjunto de instrucciones de la máquina. Los programas escritos en lenguaje fuente (el lenguaje de programación utilizado) se traducen bien a una secuencia de instrucciones en lenguaje máquina, bien a un lenguaje intermedio más próximo al lenguaje máquina que el lenguaje fuente. Los programas traductores, conocidos como compiladores, son más complejos cuanto más se aleja el lenguaje fuente del lenguaje máquina. El primero de estos lenguajes avanzados, Fortran (FORmula TRANslation), apareció en 1954 y se diseñó para escribir programas científicos. Tras algunas modificaciones necesarias debido a la evolución de los ordenadores, Fortran sigue utilizándose en los potentes ordenadores científicos actuales.
Jerarquía de memoria
En una máquina von Neumann, la memoria central se utiliza para almacenar tanto programas como datos. Pronto se hizo imposible almacenar toda esta información en una sola memoria, por lo que hubo que aumentar la capacidad de almacenamiento de la máquina con memorias secundarias. Éstas tienen una capacidad de almacenamiento mucho mayor que las memorias centrales, pero su tiempo de acceso (el tiempo tras el cual la información está disponible) es mucho más largo. La disparidad entre los tiempos de acceso de los distintos tipos de memoria ha obligado a priorizar la información, almacenando la más prioritaria (o la más utilizada por la unidad de cálculo) en las memorias más rápidas. Esta limitación complicó considerablemente la gestión de los recursos de la máquina, y asistimos a la aparición de los primeros monitores, programas que gestionaban los recursos de la máquina y controlaban automáticamente la ejecución de las entradas de datos, la secuencia de tratamiento y la salida de los resultados de los programas.
La segunda generación (1959-1963): los ordenadores de transistores
En la actualidad se acepta generalmente que la aparición de la segunda generación coincidió con el uso de transistores en las unidades centrales de procesamiento. El uso de esta tecnología, por la que sus autores (John Bardeen, William Shockley, Walter Brattain) recibieron el Premio Nobel en 1956, permitió mejorar la velocidad de procesamiento y aumentar el diferencial de velocidad entre el procesamiento propiamente dicho y la entrada-salida. Esta última utilizaba dispositivos electromecánicos cuyos tiempos de respuesta eran muy superiores a los tiempos de procesamiento en el procesador. Desde entonces, esta diferencia no ha dejado de crecer y sigue siendo hoy un factor limitante del rendimiento de las máquinas. El uso de transistores también condujo a la miniaturización de las CPU y a una reducción significativa del consumo de energía. La segunda generación también puede considerarse como la era de los grandes avances en software, ya que la mayoría de los conceptos desarrollados entonces siguen siendo válidos en los ordenadores actuales.
Mejoras en el hardware de segunda generación
En un ordenador, la ejecución de un programa puede depender de eventos externos, como la espera de datos de un periférico, o del resultado de la instrucción que se está ejecutando, como un intento de dividir por cero. Estos eventos se producen en momentos impredecibles y hay que ocuparse de ellos en cuanto llegan. En los ordenadores de la primera generación, requerían la intervención humana y, por tanto, provocaban la parada de la máquina. Una de las primeras mejoras introducidas por la segunda generación fue incluir en el hardware la posibilidad de tener en cuenta eventos ajenos al programa (excepciones e interrupciones). Esta modificación permitió la gestión automática de los eventos (externos e internos a la máquina) y contribuyó a un aumento significativo del rendimiento al reducir los tiempos de espera de la CPU. Sin embargo, sólo se lograron avances decisivos con la aparición de los canales, auténticos procesadores especializados en el tratamiento de E/S, que permitían ejecutar simultáneamente el programa de tratamiento y el programa de gestión de E/S. A pesar del mayor rendimiento de los periféricos, la CPU seguía estando muy infrautilizada. Los canales permitían liberar a la CPU de la tarea de gestionar la transferencia de datos entre los periféricos y la memoria central: una vez que la CPU ha inicializado la operación de entrada/salida, la transferencia de datos relativa a esta operación se realiza bajo el control exclusivo del canal. Aún en pañales durante la segunda generación, los canales mejorarán considerablemente en la generación siguiente. Estos avances en las arquitecturas de segunda generación provocaron profundos cambios en el software utilizado.
Conceptos de software introducidos en la segunda generación
Para aprovechar las ventajas de los nuevos dispositivos de hardware, era esencial disponer de un nuevo software. En primer lugar, a medida que la gestión de los periféricos se hacía más onerosa, resultaba imposible para un programador diseñar a la vez software de aplicación y software de gestión de la máquina. Así pues, se estableció una distinción entre aplicaciones (programas de usuario) y programas de sistema (software de gestión de los recursos de la máquina).
En una primera etapa, el software de sistema de las máquinas de segunda generación consistía en programas del sistema de control de entradas y salidas (IOCS), que liberaban a los programadores de las pesadas limitaciones de la gestión de periféricos. Por tanto, el IOCS permitía una aparente simultaneidad entre el programa de usuario único y la gestión de E/S. A pesar de las disparidades de velocidad antes mencionadas, la CPU seguía estando infrautilizada. Además, pasar de un programa a otro requería la intervención humana. Los monitores de secuenciación permitieron prescindir de esta operación manual al garantizar la secuenciación automática de las aplicaciones. Con este tipo de sistema, los programas (o trabajos) que debían ejecutarse se colocaban uno detrás de otro, y cada trabajo y sus conjuntos de datos constituían un lote, que no podía ejecutarse hasta que el lote anterior hubiera finalizado. Este modo de funcionamiento, conocido como procesamiento por lotes, minimizaba la intervención manual y, al final de la primera generación, casi todos los ordenadores funcionaban de este modo. En cuanto al software, la principal innovación de la segunda generación fue la multiprogramación, que puso remedio a la infrautilización crónica de la unidad central de proceso.
Cuando un ordenador funciona en modo multiprogramación, varias aplicaciones se cargan en la memoria y “comparten” la unidad central de proceso (CPU). En cuanto se produce una espera en la ejecución del programa en curso (solicitud de entrada/salida, por ejemplo), el procesador abandona la ejecución de este programa e inicia (o continúa) la ejecución de otro programa. A continuación, este programa se ejecuta hasta que finaliza o hasta que él mismo solicita una operación de E/S.
Al autorizar la ejecución pseudosimultánea de varios programas, la multiprogramación provocó un aumento considerable de la complejidad del software de los sistemas, ya que los IOCS ya sólo constituyen una parte de los sistemas operativos de los ordenadores. Numerosas operaciones y comprobaciones, innecesarias en las máquinas monousuario, se hicieron indispensables en las máquinas multiusuario: decisión de asignar la unidad central de proceso a un programa determinado, control de la ejecución de los programas, transferencia de los programas que deben ejecutarse de la memoria secundaria a la memoria principal y transferencia de los programas inactivos de la memoria principal a la memoria secundaria (swapping), mecanismos de protección de los programas contra los errores de ejecución de otros programas, etc.
La siguiente etapa, el tiempo compartido, permitió a los usuarios recuperar el acceso directo a los ordenadores, que habían perdido en las máquinas de procesamiento por lotes. A cada usuario del sistema se le asigna el procesador periódicamente, durante un periodo de tiempo determinado. Para un usuario, la frecuencia de asignación del procesador es lo suficientemente alta como para dar la ilusión de que es el único que trabaja en la máquina. En la mayoría de los casos, el acceso al ordenador se realiza a través de terminales (inicialmente máquinas de escribir conectadas y más tarde combinaciones de teclado y pantalla); el uso intensivo de terminales es una característica dominante de los sistemas de tercera generación.
Otro tipo de sistemas, los sistemas en tiempo real, también aparecieron en esta época. Estos sistemas, muy especiales, se diseñaron para gestionar procesos industriales con grandes limitaciones de tiempo, como el funcionamiento de un alto horno. Un sistema en tiempo real tiene que reaccionar ante determinados acontecimientos en un tiempo acotado. Un acontecimiento específico en el proceso que debe controlarse desencadena la ejecución del programa de gestión de acontecimientos correspondiente.
La tercera generación: ordenadores con circuitos integrados
Los avances de la tercera generación han sido posibles gracias al aumento de la potencia de procesamiento y al espectacular incremento de la capacidad de memoria (central y secundaria). Este progreso depende a su vez de los avances logrados en la integración de los componentes electrónicos. El conjunto de componentes electrónicos implantados en una sola pieza de silicio se denomina circuito integrado. La densidad de integración corresponde a la relación entre el número de componentes y la superficie de silicio ocupada, para una tecnología de fabricación dada.
La utilización de técnicas de microprogramación (véase más adelante Principios de funcionamiento de un procesador) en los equipos informáticos de tercera generación ha facilitado la implementación de un mismo conjunto de instrucciones en máquinas de distintos niveles de potencia, con el objetivo de crear una gama de máquinas compatibles entre sí desde el punto de vista del software.
Los sistemas operativos siguen complicándose y proliferan las aplicaciones. Los usuarios no informáticos pueden ahora acceder a datos y utilizar servicios a través de aplicaciones específicas (por ejemplo, para reservar un vuelo, comprobar la situación de la cuenta bancaria de un cliente, etc.).
De hecho, la tercera generación se caracteriza más por la continua evolución y mejora del hardware y el software que por un replanteamiento de las arquitecturas de las generaciones anteriores. A medida que se ha ido intensificando el uso de los ordenadores y los servicios que pueden prestar, los sistemas operativos y las aplicaciones se han hecho cada vez más complejos y voluminosos.
Los sistemas de los años 70 permitían a los usuarios acceder a las máquinas a distancia: a través de terminales conectados a las máquinas por enlaces telefónicos, el usuario remoto podía enviar lotes de trabajo o utilizar el tiempo compartido. Los sistemas operativos diferían mucho de un fabricante a otro, e incluso de una máquina a otra dentro del mismo fabricante. Desde finales de los años 70, el coste del software se ha convertido en una parte importante del precio de coste de los sistemas, mientras que antes el hardware representaba la mayor parte de la inversión. Los usuarios están cada vez más preocupados por proteger sus inversiones en software, y temen la perspectiva de cambiar de máquina y tener que reescribir los programas. La compatibilidad al alza de las máquinas con los programas existentes se está convirtiendo en una exigencia importante para los usuarios, que se oponen a cambios radicales en el hardware, como ocurría en los primeros tiempos de la informática. Los fabricantes de ordenadores han tenido que plegarse a esta exigencia.
La quinta generación japonesa: un sueño nunca realizado
A principios de los años 80, el Ministerio japonés de Comercio Exterior e Industria (M.I.T.I.) quiso recuperar la iniciativa en la industria informática. Para ello, presentó al mundo un ambicioso proyecto de investigación sobre nuevas arquitecturas de máquinas destinadas a generalizar el uso de los ordenadores. El propio nombre de quinta generación mostraba el deseo de romper con las arquitecturas tradicionales, ya que las máquinas de la época pertenecían a la tercera generación… La quinta generación japonesa se basaba en un lenguaje de programación común a todas las máquinas y en redes de comunicación avanzadas que pudieran ser utilizadas por diferentes estructuras sociales. También suponía el uso de interfaces “inteligentes” para simplificar al máximo el diálogo hombre-máquina, con el fin de acceder a vastas bases de conocimiento que pudieran ser consultadas por todos gracias a eficaces herramientas de exploración. Hoy no queda nada de este proyecto, aparte de una presentación bastante futurista del uso de los ordenadores en la vida cotidiana.
Evolución de los sistemas informáticos
El impresionante progreso tecnológico que comenzó en los años 70 (con una densidad de integración que se duplicaba cada dos años aproximadamente) permitió poner en práctica conceptos arquitectónicos que ya se conocían pero que no se habían aplicado debido a las dificultades técnicas y al coste exorbitante de tales proyectos. El aumento de la densidad de integración, a partir de los circuitos MSI (Medium Scale Integration) y luego VLSI (Very Large Scale Integration), fue una condición previa para el desarrollo de arquitecturas de máquinas científicas extremadamente potentes (véase más adelante, Mejoras de la arquitectura de von Neumann) y propició la aparición de los primeros microprocesadores (procesadores cuyos componentes están integrados en uno o varios circuitos). Al mismo tiempo, la memoria se ha beneficiado de las mejoras tecnológicas, ofreciendo una mayor capacidad de almacenamiento a un coste cada vez menor. Los periféricos también se han beneficiado de estos avances, haciéndose más rápidos, compactos y baratos. La aparición de los microprocesadores y las memorias de bajo coste marcó el advenimiento de los ordenadores personales (PC) y las estaciones de trabajo. Estas máquinas convirtieron la informática en omnipresente en todos los sectores de actividad. Los ordenadores personales igualaron rápidamente la potencia de los mainframes de principios de los 70, ocupando muy poco espacio y costando muy poco en comparación con el precio de las máquinas de la época. Las estaciones de trabajo, para uso profesional, son máquinas potentes con un tamaño reducido, orientadas a las aplicaciones gráficas.
En los años 80 aparecieron los procesadores RISC (Reduced Instruction Set Computers). Desde principios de los 90, los procesadores son capaces de ejecutar varias instrucciones simultáneamente (véase más adelante, Máquinas superescalares).
Podemos considerar que existe una continuidad en las arquitecturas de las máquinas, ya que los progresos observados se deben esencialmente a la creciente integración de los componentes. Sigue habiendo grandes diferencias entre los distintos sistemas operativos, pero las tendencias actuales de la informática contribuyen a borrar sus incompatibilidades.
Mejoras de las herramientas informáticas
A medida que aumentaba el uso de la informática, se hacía imprescindible facilitar su acceso, tanto a los diseñadores de nuevas aplicaciones (desarrolladores) como a los usuarios de las mismas. Con el aumento de la capacidad de almacenamiento y de la potencia de los procesadores, la interfaz hombre-máquina ha mejorado mucho (interfaz gráfica, utilización del ratón para facilitar el uso del ordenador). Adquirir, procesar, archivar y reproducir sonido e imágenes se han convertido en operaciones habituales en todos los ordenadores. Los programas que manipulan estos distintos soportes se denominan aplicaciones multimedia. Además, se han desarrollado herramientas para proporcionar asistencia técnica a los usuarios en ámbitos de especialización muy concretos (asistencia en el diagnóstico médico, investigación en yacimientos petrolíferos, etc.). Para mejorar la productividad de todas las partes, se ha hecho necesario poner en común los recursos de software y hardware de los distintos sistemas.
Generadores de aplicaciones y talleres de software
Los generadores de aplicaciones son herramientas que integran en un solo producto funciones que normalmente se encontrarían en varios paquetes de software independientes. Proporcionan al desarrollador una biblioteca de programas y los medios para definir el orden en que se ejecutan algunos de ellos para producir una aplicación determinada. Su principal ventaja es que permiten escribir aplicaciones más rápidamente que con los métodos de programación tradicionales. Incluso pueden utilizarlos especialistas en un campo de aplicación (gestión, etc.) que no tengan necesariamente conocimientos informáticos avanzados.
Al igual que los generadores de aplicaciones, los talleres de software reúnen en una misma plataforma un conjunto de herramientas informáticas interoperables. Están diseñados para ayudar a los desarrolladores a producir un producto específico. En este sentido, los talleres de software son herramientas de diseño especializadas en una clase de aplicaciones (multimedia, diseño de circuitos integrados, etc.).
Interconexión de máquinas e Internet
En los años 70, las redes informáticas se construían en torno a ordenadores centrales (mainframes o sitios centrales o sistemas host) que contenían aplicaciones y datos, a los que se conectaban terminales mediante enlaces dedicados o líneas de red telefónica. Los usuarios accedían a los servicios y datos a través de terminales pasivos (en los años 80, los ordenadores personales suplantaron a los terminales pasivos y explotaron sus capacidades de procesamiento y almacenamiento de datos).
Durante esta misma década, la interconexión de los sistemas informáticos fue objeto de una normalización internacional que dio lugar a una arquitectura de comunicaciones conocida como modelo de referencia o modelo OSI (véase REDES INFORMÁTICAS). En los años 90, la popularidad de la arquitectura TCP/IP dejó obsoleto el modelo anterior. Sin embargo, los conceptos y la estratificación del modelo OSI se siguen utilizando para describir las arquitecturas de comunicación actuales.
Con el considerable crecimiento del número de ordenadores personales en los años 80, los usuarios querían poner en común los recursos de sus máquinas, tanto de hardware (impresoras láser, etc.) como de software (aplicaciones). Así surgieron las redes de área local (LAN), frente a las redes de área amplia (WAN) utilizadas en décadas anteriores. Las WAN siguen siendo la infraestructura de interconexión de las redes locales; pertenecen a operadores o empresas muy grandes.
Las redes locales ofrecen velocidades de transmisión de datos mucho mayores que las WAN (varios cientos de millones de bits por segundo en lugar de unas decenas de kilobits por segundo). Cualquier ordenador de una red puede ahora ofrecer servicios como servidor o utilizar los servicios de otros sistemas como cliente. El modelo cliente-servidor ha permitido la aparición de nuevas técnicas de trabajo y la cooperación entre ordenadores personales, estaciones de trabajo y sitios centrales. Las redes de empresa integran redes locales y de área amplia en el sistema de información de la empresa. Permiten a los usuarios acceder a aplicaciones repartidas por todas las sedes de la organización.
Internet es el resultado directo de una investigación iniciada a mediados de los años 70 por iniciativa de la Agencia de Proyectos de Investigación Avanzada de Defensa (DARPA). A partir de 1985, Internet federó las redes de las universidades y centros de investigación estadounidenses, seguidas por las de los organismos de investigación del resto del mundo. Desde mediados de los años 90, Internet permite a empresas y particulares comunicarse con máquinas de todo el mundo. Se ha extendido a todos los continentes y está experimentando un crecimiento considerable (véase INTERNET).
Funcionamiento de un procesador
Un ordenador, según el modelo de John von Neumann, contiene un conjunto de procesadores, memorias y periféricos de entrada y salida interconectados. El procesador, o unidad central de procesamiento, puede considerarse con razón el “cerebro” del ordenador, ya que todo ocurre bajo su control. En un procesador, la información se representa en forma binaria (codificada en dos estados), porque es mucho más sencillo diseñar, construir y utilizar componentes básicos que funcionen en dos estados físicamente cuantificables.
El procesador procesa programas cargando instrucciones de la memoria, descodificándolas y ejecutándolas una tras otra. Las instrucciones de un procesador pueden dividirse a grandes rasgos en tres categorías: instrucciones de cálculo aritmético y lógico, instrucciones de acceso a la memoria (lectura o escritura de información en la memoria) e instrucciones de salto (condicional o incondicional), que permiten realizar las pruebas y bucles esenciales para cualquier algoritmo.
Por razones obvias de rendimiento, esta unidad central está fabricada con electrónica digital, la tecnología que hoy en día ofrece la máxima velocidad y flexibilidad de uso. La unidad central contiene recursos de hardware para el cálculo, el almacenamiento y la secuenciación, todos ellos expresados en forma de componentes digitales con interfaces claramente definidas.
Los componentes básicos
La ejecución de una instrucción requiere dos categorías principales de componentes básicos: los operadores de almacenamiento, que suministran los operandos y almacenan el resultado, y los operadores combinatorios, que utilizan los operandos para producir un resultado parcial o definitivo.
Registro
Un registro de n bits se utiliza para almacenar una palabra de información de n bits en la CPU. Este componente básico tiene tres entradas y una salida. La entrada al registro es la palabra binaria a almacenar, la señal de control y la señal de reloj, y la salida es el valor almacenado. La señal de control indica si el registro debe o no almacenar los nuevos datos presentes en su entrada; la señal de reloj define su frecuencia de funcionamiento.
Memoria
Una memoria es un conjunto de celdas idénticas, cada una de las cuales puede almacenar un elemento de información. Cada célula de memoria (o palabra de memoria) se designa por su número, la dirección.
Una memoria se caracteriza por dos magnitudes independientes: su capacidad, expresada en número de palabras, y su longitud de palabra, cuyos valores actuales son potencias de 2 (8, 16, 32 bits, etc.).
Sobre una palabra de memoria designada por el valor de la dirección pueden realizarse dos operaciones: una lectura (consulta del contenido de una celda, sin modificación de la información que contiene) y una escritura (sustitución del contenido de una celda, perdiéndose el contenido antiguo).
Una memoria tiene entradas de dirección, entradas y salidas de información (a menudo confundidas) y una entrada de comando que define la operación a realizar (lectura o escritura).
El tiempo de acceso de una memoria es el intervalo de tiempo entre la designación de una palabra de memoria (posicionamiento de la dirección) y la disponibilidad de su contenido en las salidas durante una operación de lectura.
Unidad aritmética y lógica
Una unidad aritmética lógica permite combinar dos operandos de n bits para obtener un resultado de n bits. Esta unidad tiene dos grupos de entradas de n bits correspondientes a los operandos y n o más salidas correspondientes al resultado posiblemente truncado. Las entradas de mando definen la operación que debe realizarse sobre los operandos (suma, resta, desplazamiento, bit a bit, etc.). Las salidas suplementarias (banderas o indicadores) caracterizan el resultado de la operación realizada. Consultando estas banderas mediante instrucciones adecuadas, es posible, por ejemplo, saber si el resultado de una suma es cero, positivo o negativo, o si el acarreo es cero o uno.
Enlaces, buses y multiplexores
Los enlaces interconectan los componentes básicos anteriores, permitiendo mover información de un punto a otro del procesador. Por ejemplo, para transferir la información contenida en un registro E de n bits a un registro R de n bits, cada entrada del registro R debe enlazarse directamente con la salida correspondiente del registro E. El registro E es el transmisor, el registro R el receptor.
Un bus es un mecanismo complejo que enlaza varios transmisores con un único receptor. Las entradas de control se utilizan para seleccionar el transmisor que se conectará físicamente a los cables de salida. En algunos casos, el bus puede inducir comportamientos eléctricos indeseables. Los procesadores integrados suelen preferir estructuras puramente combinatorias denominadas multiplexores.
Comportamiento temporal de los componentes
La implementación física de un componente digital desarrollado mediante álgebra booleana está limitada por restricciones tecnológicas inherentes a las leyes de la física. Una puerta lógica electrónica sólo entrega su información binaria tras un tiempo de propagación medido en picosegundos; una memoria tiene un tiempo de acceso expresado en nanosegundos. El aumento de la frecuencia de funcionamiento de un ordenador provoca un calentamiento térmico (efecto Joule). El procesador, como cualquier circuito digital que contenga registros, funciona de forma sincrónica: evoluciona al ritmo del reloj, una única señal de sincronización que adopta la forma de una onda cuadrada periódica. Por tanto, el diseñador del procesador debe evaluar cuidadosamente el tiempo máximo de propagación entre dos registros en el peor de los casos para determinar el periodo mínimo de este reloj. Reducir el periodo del reloj se reduce siempre a minimizar el número de puertas lógicas cruzadas entre la salida de un registro emisor y la entrada de un registro receptor. El overclocking consiste en reducir el periodo de reloj, es decir, aumentar la frecuencia de funcionamiento, para que el procesador alcance sus límites de funcionamiento temporal, térmico y eléctrico.
Estructura de un procesador
Un procesador es una unidad de hardware capaz de ejecutar de forma autónoma una secuencia de instrucciones que representan el tratamiento de la información. Está conectado a una memoria que contiene las instrucciones y los datos que deben procesarse. El procesador se compone de dos partes, el camino de datos (datapath), en el que se procesa la información, y una unidad de control que acciona el camino de datos.
Ruta de datos
En la trayectoria de datos de una máquina de von Neumann, el recorrido de los datos se compone de: un conjunto de registros, una unidad de cálculo aritmético y lógico y multiplexores. Los registros incluyen el contador ordinal (CO), el registro de instrucciones (RI), el registro de datos (DT), el registro de direcciones (AD) y dos registros generales (R0) y (R1). El contador ordinal y los registros de instrucción juegan un papel muy importante: el contador ordinal da la posición en memoria de la siguiente instrucción a ejecutar y el registro de instrucción contiene la palabra binaria que representa la instrucción a ejecutar. Los contenidos de CO y RI se renuevan tras la ejecución de cada nueva instrucción.
Los tres multiplexores MUX, MUXY y MUXAD designan respectivamente el primer operando, el segundo operando y la dirección a utilizar para el siguiente acceso a memoria. Las entradas de control de los registros, multiplexores y unidad de cálculo están conectadas a las salidas correspondientes de la unidad de control. La unidad de control establece el valor de todas las señales de control en cada ciclo básico. Por ejemplo, si el control del registro CO se pone a 1 durante un ciclo básico, el registro CO toma un nuevo valor al final del ciclo. En función del valor de su entrada de control, la unidad de cálculo realiza cualquier operación aritmética y lógica de su conjunto de instrucciones. La salida de la unidad de cálculo se realimenta a la entrada de los registros de la ruta de datos.
Nociones de transferencia elemental y ciclo básico
Una transferencia elemental se define como el movimiento de un elemento de información cuyo origen es un registro o una palabra de memoria y cuyo destino es un registro o una palabra de memoria. La información transferida puede modificarse a su paso por la unidad aritmética lógica. La ejecución de cada instrucción se divide en una serie de transferencias elementales. Una transferencia elemental no es instantánea porque la información, representada por señales eléctricas, tarda en pasar por los distintos componentes.
Un ciclo básico corresponde al intervalo de tiempo necesario para ejecutar una transferencia elemental que se origina en un registro y termina en otro registro. Por ejemplo, para sumar los registros R0 y AD y almacenar el resultado en R1, se necesitan dos transferencias elementales simultáneas: “tomar el contenido del registro R0, enviarlo a la entrada X de la unidad aritmética” y “tomar el contenido del registro AD, enviarlo a la entrada Y de la unidad aritmética, pedir a la unidad aritmética que sume y almacene el resultado en el registro R1”. Estas dos transferencias elementales tienen lugar durante el mismo ciclo básico. Para ejecutar la operación, los comandos asignados por la unidad de control son : MUXX selecciona R0, MUXY selecciona AD, la unidad de cálculo realiza una suma. El comando de escritura “WRITE R1″ en el registro R1 se activa para que R1 reciba el resultado de la suma al final del ciclo básico. La ejecución de una instrucción consiste por tanto en encadenar transferencias elementales de forma coherente, en un mínimo de ciclos básicos.
En la mayoría de los casos, el tiempo de acceso a la memoria es superior al ciclo básico. Por lo tanto, una transferencia elemental que utilice el contenido de una palabra de memoria se repartirá en varios ciclos básicos.
La duración mínima del ciclo básico depende tanto de la organización de la ruta de datos como de la tecnología utilizada para construir los componentes. Una vez determinada esta duración, se utiliza un oscilador para suministrar una señal periódica llamada reloj, cuyo periodo se ajusta para que sea igual a la duración del ciclo básico.
Unidad de control
La unidad de control de un procesador, también conocida como la parte de control, puede considerarse como la forma de optimizar las secuencias de transferencia elementales durante y entre el procesamiento de instrucciones. La unidad de control tiene una representación de la secuencia de comandos necesaria para ejecutar cada instrucción. Generalmente adopta la forma de un secuenciador microprogramado.
En la relación entre la unidad de control y la ruta de datos, durante cada ciclo básico, los comandos de la unidad de control definen una o más transferencias elementales en la ruta de datos. A cambio, la ruta de datos proporciona estados (por ejemplo, el valor de los indicadores de la unidad aritmética y lógica, el código de operación de la instrucción), que son utilizados por la unidad de control para seleccionar nuevos comandos que enviar a la ruta de datos durante el siguiente ciclo básico.
Firmware
Es una de las posibles técnicas de implementación de la unidad de control. Consiste en utilizar una memoria de control en la que se almacenan las diferentes combinaciones de comandos. Una microinstrucción representa los comandos activados durante un ciclo básico. Cada microinstrucción se almacena en una palabra de la memoria de control y su contenido se fija cuando se construye la memoria. El conjunto de microinstrucciones (el microprograma) constituye la secuencia de comandos necesaria para ejecutar el conjunto de instrucciones. La microprogramación permite crear un conjunto de instrucciones tan complejo como se desee y que puede ejecutarse en toda una gama de máquinas.
La unidad de control de una máquina microprogramada se compone de tres partes: una memoria que contiene las microinstrucciones, un secuenciador que ejecuta la secuencia de microinstrucciones y un reloj que representa la referencia temporal.
Ejecución de una instrucción
El procesador ejecuta una secuencia de instrucciones de forma secuencial. La posición en memoria de la instrucción que se va a ejecutar viene dada por el contador ordinal o contador de programa, cuyo contenido se actualiza durante la ejecución de cada instrucción. Hay cinco etapas en la ejecución de una instrucción por la unidad de control. Dependiendo de la estructura del procesador y de sus características arquitectónicas, las etapas pueden ejecutarse simultáneamente durante el mismo ciclo básico. Las diferentes etapas son :
– Instruction Fetch” (IF), para leer la instrucción cuya dirección de memoria está contenida en el contador ordinal y cargarla en el registro de instrucción;
– Decodificación de instrucciones” (ID), para decodificar la instrucción contenida en el registro de instrucciones, averiguar su significado y actualizar el contador ordinal para que contenga la dirección de la siguiente instrucción que se va a ejecutar;
– Ejecución de la instrucción” (EX), para ejecutar la instrucción utilizando la unidad aritmética lógica;
– Acceso a memoria” (MEM), para realizar un acceso a memoria si lo requiere la instrucción descodificada;
– Write Back” (WB), para almacenar el resultado de la instrucción en un registro o en la memoria.
Al final del quinto paso, basta con volver al primer paso para ejecutar la siguiente instrucción. La figura 5a muestra la ejecución de dos instrucciones a lo largo de 10 ciclos básicos.
Mejoras de la arquitectura de von Neumann
El rendimiento de los ordenadores ha aumentado espectacularmente, multiplicándose aproximadamente por diez la velocidad de cálculo cada cinco años. Sin embargo, las sucesivas mejoras tecnológicas sólo han alterado ligeramente la organización interna de los procesadores.
En el modelo de von Neumann, el rendimiento de la memoria determina el rendimiento de todo el sistema, ya que toda la información pasa a través de ella. Por ello, las técnicas que se describen a continuación se han desarrollado para mejorar el rendimiento de la memoria e introducir un mayor o menor grado de paralelismo en la ejecución de las instrucciones. Estas técnicas pueden combinarse en un mismo ordenador para aumentar el rendimiento, sin alterar el tiempo de ciclo básico del procesador.
Máquinas RISC
Para ejecutarse con eficacia, las instrucciones deben ser sencillas y rápidas de descodificar. El paso de identificación debe ser lo más pequeño posible. También es importante limitar el número de puertas lógicas que deben atravesarse durante las transferencias elementales. Los procesadores modernos se caracterizan por un gran número de registros, con el fin de limitar los accesos a la memoria. Sólo las instrucciones de carga y almacenamiento hacen referencia directa a la memoria durante la etapa MEM. Los esfuerzos para optimizar la ejecución de las instrucciones deben centrarse en las instrucciones realmente utilizadas en un programa. Antes de fijar una arquitectura de procesador, se realizaba un estudio estadístico para identificar las instrucciones más utilizadas.
A principios de los años 80, las nuevas arquitecturas que incorporaban estas optimizaciones se bautizaron como máquinas RISC (Reduced Instruction Set Computer). Su aparición redujo el tiempo de diseño de las máquinas y simplificó enormemente la escritura de compiladores. En cambio, las máquinas anteriores con conjuntos de instrucciones complejos pasaron a llamarse máquinas CISC (Complex Instruction Set Computer).
Las arquitecturas RISC se caracterizan no sólo por un conjunto de instrucciones limitado (formado esencialmente por operaciones entre registros y operaciones de transferencia entre memoria y registros), sino también por un gran número de registros (hasta 512 o más). Las instrucciones son de longitud fija (32 o 64 bits) para una descodificación rápida.
El concepto de pipeline
El principio del pipeline es conocido en informática desde hace mucho tiempo, ya que se utilizaba en los primeros ordenadores científicos. La ejecución de una instrucción bajo el control de la unidad de control pasa por varias etapas, como en la cadena de montaje de un coche.
Una mirada más atenta a la secuencia de microinstrucciones para una instrucción dada muestra que cada paso implica recuperar datos binarios de uno o más registros de origen, modificarlos combinatoriamente y luego ordenarlos en uno o más registros de destino. La figura 5a muestra que la ejecución de una instrucción RISC da lugar a una sucesión coherente de transferencias elementales entre varias capas sucesivas de registros.
Si conseguimos que las etapas tengan la misma duración y que se lleven a cabo utilizando recursos de hardware independientes, entonces es posible procesar varias instrucciones en paralelo y eliminar por completo el firmware. Al distribuir el procesamiento realizado inicialmente por la unidad de control entre las distintas etapas, el flujo de entrada de instrucciones en el procesador aumenta considerablemente: en lugar de ejecutar una instrucción cada 4 o 5 ciclos de reloj como en la versión firmware, se puede iniciar una nueva instrucción en cada ciclo básico. La figura 5b muestra cómo se inician varias instrucciones en cada ciclo de reloj. El CPI (ciclo por instrucción) es el número aparente de ciclos necesarios para ejecutar una instrucción. En la versión firmware, el CPI era 4 ó 5; en la versión pipelined, es 1. Un procesador pipelined se denomina procesador escalar porque, en estado estacionario, completa la ejecución de una instrucción en cada ciclo básico, aunque la ejecución de cada instrucción tarda varios ciclos. La figura 5b muestra un ejemplo de procesador en cadena de cinco etapas: en el ciclo 4, todas las etapas de la cadena están trabajando en cinco instrucciones diferentes. La implementación práctica de una pipeline es complicada: resulta de un compromiso entre el número de etapas que la componen y la forma en que la ejecución de las instrucciones se descompone en suboperaciones independientes. Los procesadores modernos contienen pipelines de hasta 20 etapas, y el procesador Intel Pentium 4 Prescott tiene 31.
Máquinas superescalares
Mientras que las máquinas RISC se diseñaron para ejecutar una instrucción por ciclo básico, los procesadores superescalares alcanzan el objetivo aún más ambicioso de ejecutar varias instrucciones por ciclo. Para conseguirlo, estos procesadores están equipados con varias unidades de cálculo en cadena, de propósito general o especializadas en la ejecución de un tipo de operación (suma de enteros, multiplicación de enteros, suma de números en coma flotante, multiplicación de números en coma flotante, etc.). Un procesador superescalar adquiere y descodifica varias instrucciones simultáneamente, y lanza su ejecución en paralelo en las distintas unidades. La figura 5c muestra un procesador superescalar de segundo orden capaz de ejecutar dos instrucciones por ciclo. En el ciclo 4, el procesador procesa diez instrucciones en paralelo.
La eficacia de un procesador superescalar depende en gran medida de la programación de las instrucciones, ya que las unidades de cálculo deben poder alimentarse continuamente para aprovechar al máximo sus estructuras canalizadas (por ejemplo, el programa debe disponer de un número suficiente de instrucciones que invoquen a los distintos operadores disponibles). Esto implica utilizar compiladores que reorganicen y optimicen la secuencia de instrucciones para aprovechar al máximo los recursos del hardware.
Técnicas de ejecución en procesadores superescalares
En los procesadores superescalares se explotan otras técnicas muy avanzadas: la ejecución fuera de orden, la predicción de bifurcaciones y la ejecución anticipada. Estas técnicas se combinan para mejorar significativamente la velocidad de ejecución de las instrucciones.
La ejecución fuera de orden es una técnica utilizada para alimentar de forma óptima los distintos pipelines. Para mejorar la eficacia de las unidades de cálculo, los procesadores superescalares están equipados con una unidad interna de reordenación de instrucciones, que analiza las dependencias entre instrucciones antes de activar la ejecución de instrucciones independientes en las unidades de cálculo disponibles.
La predicción de bifurcaciones se basa en la siguiente observación: la eficacia de un pipeline depende estrechamente de la estructura del programa y del número de instrucciones de salto que contenga. De hecho, cualquier instrucción de salto provoca una ruptura en la secuencia y, por tanto, una falta temporal de potencia del pipeline, que debe reiniciarse con una nueva secuencia de instrucciones. Al mantener un historial de las bifurcaciones realizadas y su frecuencia, el procesador puede predecir con exactitud los fallos de alimentación del pipeline para mantener el IPC lo más bajo posible.
La ejecución especulativa es una optimización compleja que refuerza la unidad de predicción de bifurcaciones. Hace que el procesador ejecute instrucciones después de una instrucción de salto, aunque ésta aún no se haya ejecutado. El procesador se comporta de forma optimista y mantiene un pipeline constantemente lleno, siempre que la unidad de predicción no desafíe estas suposiciones.
Memoria virtual y memoria caché
La memoria virtual se utilizó en las primeras generaciones de máquinas para remediar la falta crónica de espacio de memoria para almacenar programas y datos. Ahora se utiliza más para dar a una aplicación la impresión de que es la única en el sistema y que puede acceder libremente a todo el espacio de memoria. De este modo, protege al sistema operativo de errores y malware, al tiempo que evita que las aplicaciones interfieran entre sí.
Una memoria caché es una memoria intermedia situada entre el procesador y la memoria principal. Tiene un tiempo de acceso cercano al ciclo básico del procesador, pero su tamaño es mucho menor que el de la memoria principal. Esto significa que la información contenida en la caché puede ser utilizada por el procesador más rápidamente que la información ubicada en la memoria principal. Una caché contiene una copia de una parte de la memoria principal. El procesador utiliza una caché para las instrucciones (caché de instrucciones) y otra para los datos (caché de datos).
El procesador busca sistemáticamente en la caché la siguiente instrucción a ejecutar. Si está en la caché, el procesador la procesa en un ciclo básico. Si no, la caché provoca una lectura en la memoria principal antes de enviar la instrucción al procesador. La lectura de la memoria principal hace que se cargue en la caché una zona de memoria que contiene la instrucción y las 4, 8 o 16 instrucciones vecinas (véase MEMORIAS DIGITALES).
El aumento de rendimiento que proporciona la caché se debe al principio de localidad: en la mayoría de los programas, el 90% del tiempo de ejecución se emplea en ejecutar el 10% de las instrucciones. Esto significa que ciertas partes de un programa se ejecutan con mucha frecuencia. El rendimiento del procesador mejora considerablemente cuando estas partes del programa están presentes en la caché. El conjunto de registros del procesador, memoria caché y memoria principal representa la parte superior de la jerarquía de memoria. Cuanto más se desciende en la jerarquía, más costoso resulta el acceso a la información en términos de número de ciclos. Incluso es posible incluir varios niveles de caché (por ejemplo, cachés L1 y L2 de primer y segundo nivel) para optimizar aún más los tiempos de acceso.
Procesadores vectoriales y técnicas de vectorización
Las máquinas científicas muy potentes, diseñadas para trabajar eficazmente con vectores, disponen de unidades funcionales controladas por un conjunto específico de instrucciones, con el fin de realizar simultáneamente la misma operación (por ejemplo, la suma) sobre un gran número de elementos de datos (los componentes de los dos vectores que hay que sumar). Estas máquinas utilizan generalmente procesadores superescalares especializados, o procesadores vectoriales. Con sólo especificar la operación a realizar y la ubicación de los componentes en la memoria, la unidad funcional del procesador vectorial puede realizar la operación sobre todos los componentes de los vectores a procesar. Las unidades funcionales pueden ser especializadas, es decir, que sólo pueden realizar un determinado tipo de operación (por ejemplo, la suma en coma flotante), o de propósito general. En este último caso, pueden realizar diversas funciones de evaluación (como la suma, la multiplicación o la división).
Basado en la experiencia de varios autores, mis opiniones, perspectivas y recomendaciones se expresarán a continuación (o en otros lugares de esta plataforma, respecto a las características en 2026 o antes, y el futuro de esta cuestión):
La eficacia de una unidad funcional depende en gran medida de la relación entre el tiempo necesario para cargar los datos/descargar los resultados y la duración de la operación en sí. Cuanto menor sea esta relación, mayor será el rendimiento de un procesador vectorial en comparación con un procesador escalar (máquinas sin recursos hardware especiales para procesar vectores). Por tanto, el rendimiento de un procesador vectorial depende en gran medida de cómo se programe.
La vectorización es un método de programación que aprovecha al máximo los dispositivos disponibles en las máquinas vectoriales. De hecho, se ha calculado que los ratios de velocidad en una máquina vectorial entre un programa bien escrito y otro mal escrito pueden llegar a ser de 1 a 100. Esto demuestra el valor de las técnicas algorítmicas que permiten escribir programas y representar datos de una forma completamente distinta a las técnicas utilizadas habitualmente en las máquinas escalares. En última instancia, los programas antiguos tendrían que reescribirse por completo para aprovechar al máximo el rendimiento de las máquinas vectoriales. Para evitar semejante despilfarro de software, los compiladores vectoriales transforman los programas antiguos en programas que puedan ejecutarse en las nuevas máquinas. Los compiladores optimizadores también pueden ayudar a los programadores poco familiarizados con las técnicas de vectorización. La vectorización automática así obtenida no puede pretender rivalizar con los mejores programas escritos específicamente para la máquina en la que se ejecuta el programa, pero representa una solución de compromiso, que permite utilizar programas científicos muy complejos o muy grandes escritos para procesadores escalares.
Procesadores modernos
Los procesadores modernos incorporan cientos de millones de transistores y aprovechan todas las optimizaciones anteriores. En particular, el circuito del procesador contiene memorias caché de gran capacidad. Hasta principios de este milenio, los principales fabricantes de procesadores se centraban en la potencia bruta de cálculo y buscaban aumentar la frecuencia de sus procesadores. Esto llevó a la creación de procesadores que funcionaban a 4 gigahercios, es decir, con un ciclo básico de 250 picosegundos (es decir, 0,000 000 000 25 s), disipando una potencia de 100 vatios. La carrera hacia frecuencias más elevadas se detuvo recientemente, ya que los fabricantes alcanzaron ciertos límites tecnológicos (problemas de evacuación de la potencia disipada, comportamiento cuántico de los transistores). Hoy en día, el gran reto industrial es el número de núcleos de procesador que pueden colocarse simultáneamente en un mismo circuito integrado. Los procesadores con dos núcleos (dual core), cuatro núcleos (quadri core) o incluso dieciséis núcleos (hexa core) son moneda corriente. Este cambio radical de estrategia tiene consecuencias trascendentales para la programación de aplicaciones, ya que pasamos de un modelo de programación secuencial a un modelo de programación paralela mucho más complejo de comprender para los programadores.
Rendimiento del procesador y del sistema
Desde los inicios de la informática, los diseñadores de ordenadores han tratado de evaluar y comparar la velocidad de ejecución de los procesadores, utilizando unidades de medida como el número de instrucciones por segundo (IPS), el número de operaciones por segundo (OPS) o el número de operaciones en coma flotante por segundo (FLOPS) y sus múltiplos (kilo, mega, tera, etc.). Posteriormente se definieron dhrystones, whetstones, etc.
MIPS (millón de instrucciones por segundo) representa el número de millones de instrucciones que ejecuta un procesador en un segundo. Los MOPS o MFLOPS (léase mega-FLOPS) se utilizan para programas que contienen un gran número de cálculos científicos. Sin embargo, los valores obtenidos con estas unidades no son representativos del funcionamiento de un procesador, ya que se puede obtener un pico máximo (en MIPS o MFLOPS) diseñando programas que nada tienen que ver con las aplicaciones reales. Además, el rendimiento del ordenador depende en gran medida del rendimiento de las jerarquías de memoria, que no se refleja en el número de instrucciones u operaciones que puede ejecutar un procesador. La idea de diseñar conjuntos de programas estándar para comparar arquitecturas de máquinas muy diferentes no tardó en hacerse realidad. En los años 60, en la localidad inglesa de Whetstone (el nombre de esta pequeña ciudad ha quedado unido al propio banco de pruebas), B. Wichmann diseñó un banco de pruebas (benchmark) que mide la velocidad de ejecución de programas que contienen instrucciones en coma flotante, cálculos sobre números enteros, escalares y vectores. El rendimiento se expresa en MWIPS (millones de instrucciones de coma flotante por segundo).
A finales de los 80 y principios de los 90, se hizo evidente que Whetstone no medía correctamente el rendimiento de los superordenadores científicos. También era necesario desarrollar herramientas para medir las nuevas arquitecturas de procesadores. Así que se crearon nuevos bancos de pruebas, entre ellos Dhrystone. La primera versión de este banco de pruebas, diseñada por R. P. Weicker en 1984, no incluía operaciones en coma flotante e integraba programas escritos en varios lenguajes de alto nivel con diferentes construcciones de programa (llamadas a procedimientos, asignaciones, uso de punteros, etc.).
Whetstone y Dhrystone son bancos de pruebas sintéticos que siguen utilizándose ampliamente y reproducen el comportamiento de programas reales; Whetstone es adecuado para aplicaciones que implican muchos cálculos y Dhrystone da una indicación de la universalidad (propósito general) de los procesadores modernos. Ambos contribuyen al desarrollo de compiladores eficientes.
La SPEC (Standard Performance Evaluation Corporation), una organización sin ánimo de lucro, se creó en 1988 para producir bancos de pruebas (la suite “SPECint”) que miden objetivamente el rendimiento de los nuevos sistemas. CPU89 forma parte de esta suite, que está llamada a sustituir a Dhrystone.
Clasificación de las arquitecturas de máquinas
La clasificación de arquitecturas de máquinas más conocida y utilizada es la de Michael J. Flynn. Se basa en la noción de flujo, un conjunto ordenado de elementos de la misma naturaleza. Las instrucciones de un programa y los datos que deben tratarse están contenidos en uno o varios flujos. La existencia de uno o varios flujos de cada tipo define cuatro categorías de máquinas. Paradójicamente, esta clasificación no se basa en la estructura de los ordenadores, sino en la forma en que enlazan sus flujos de instrucciones con los flujos de datos. Aunque esta clasificación es imperfecta, permite identificar rápidamente las diferentes arquitecturas. Se han identificado cuatro clases de máquinas:
– Máquinas SISD (Single Instruction Stream, Single Data Stream);
– Máquinas SIMD (Single Instruction Stream, Multiple Data Stream);
– Máquinas MISD (Multiple Instructions Stream, Single Data Stream);
– máquinas MIMD (Multiple Instructions Stream, Multiple Data Stream).
Máquinas SISD
Esta clase incluye las máquinas con un único procesador. Una instrucción define una única operación que utiliza un único flujo de datos cuyos diferentes tipos (argumentos, resultados, etc.) están lógicamente vinculados entre sí. La clase SISD incluye tanto máquinas de un solo procesador con canalizaciones como máquinas sin canalizaciones.
Máquinas SIMD
Esta categoría incluye máquinas con un único flujo de instrucciones que trabajan sobre datos separados. Incluye máquinas con instrucciones vectoriales. Las distintas arquitecturas SIMD son muy adecuadas para el tratamiento de matrices. Son difíciles de programar, debido a la estrecha interacción entre la arquitectura subyacente y la técnica de programación que debe utilizarse.
Máquinas MISD
Esta clase es puramente teórica, ya que es difícil prever la ejecución simultánea de varias instrucciones que actúan sobre los mismos datos. Ninguna máquina existente puede incluirse en esta categoría.
Máquinas MIMD
La clase MIMD incluye máquinas con varios flujos de instrucciones, ejecutadas por varios procesadores (por lo que hay tantos contadores ordinales como procesadores), cada uno trabajando sobre su propio flujo de datos. Esta categoría incluye todas las máquinas multiprocesador y multicomputador. En esta clase de máquinas es posible aprovechar al máximo el paralelismo existente en los programas. Por otro lado, es difícil encontrar aplicaciones que se presten fácilmente a la descomposición en tareas elementales que proporcionen trabajo a todos los procesadores.
Máquinas paralelas y máquinas masivamente paralelas
Con el fin de mejorar el rendimiento de los ordenadores, desde los inicios de la informática se diseñaron máquinas paralelas, principalmente para aplicaciones científicas. Las máquinas masivamente paralelas son máquinas con un número muy elevado de procesadores, desde al menos un centenar de procesadores hasta varias decenas de miles. Las arquitecturas paralelas utilizan ampliamente las técnicas de optimización descritas anteriormente (véase más arriba, Mejoras de la arquitectura von Neumann).
El funcionamiento de estas máquinas se basa en el principio de que un programa puede descomponerse en un conjunto de tareas independientes que se comunican entre sí y se ejecutan simultáneamente en distintos procesadores. En función del modo en que los procesadores cooperan durante el procesamiento, se distingue entre sistemas fuertemente acoplados y sistemas débilmente acoplados. Además, existen dos tipos de arquitecturas paralelas concurrentes: los multiprocesadores y los multicomputadores, pero las diferencias entre ambos tipos de sistemas tienden a desaparecer. Los multiprocesadores comparten una memoria común (memoria compartida), mientras que los multicomputadores se componen de la interconexión de varios ordenadores (a menudo denominados nodos), que disponen de su propio espacio de memoria, sus propias memorias y, eventualmente, sus propias unidades de E/S.
Cabe señalar que, sea cual sea el tipo de máquina paralela utilizado, el rendimiento depende en gran medida del tipo de aplicaciones que se vayan a procesar. En particular, requieren que sus usuarios conozcan muy bien la arquitectura de la máquina para poder escribir programas eficaces. Además, los problemas a procesar deben ser programables mediante métodos específicos que varían de un sistema a otro, de lo contrario el rendimiento de estas arquitecturas se degradará tanto que ya no se justifica el uso de máquinas paralelas.
📬Si este tipo de historias es justo lo que buscas, y quieres recibir actualizaciones y mucho contenido que no creemos encuentres en otro lugar, suscríbete a este substack. Es gratis, y puedes cancelar tu suscripción cuando quieras: Qué piensas de este contenido? Estamos muy interesados en conocer tu opinión sobre este texto, para mejorar nuestras publicaciones. Por favor, comparte tus sugerencias en los comentarios. Revisaremos cada uno, y los tendremos en cuenta para ofrecer una mejor experiencia.Estos sistemas se caracterizan por la comunicación entre procesadores a través de la memoria común, que comparten todos los procesadores. El rendimiento de la memoria común determina, por tanto, las prestaciones del sistema. También limita el número de procesadores posibles: a medida que aumenta el número de procesadores, también aumenta la probabilidad de conflictos de acceso a la memoria (por ejemplo, solicitudes simultáneas de una operación de memoria en la misma palabra de memoria). La simultaneidad de ejecución en el sistema disminuye entonces muy rápidamente, lo que provoca caídas de rendimiento muy importantes. La Figura 6 muestra un diagrama esquemático de un sistema muy acoplado.
Sistemas poco acoplados
Por el contrario, los sistemas poco acoplados no presentan el mismo grado de conflicto de acceso a la memoria, ya que cada procesador dispone de sus propios periféricos y de una gran memoria local de la que obtiene instrucciones y datos. Por tanto, los procesadores se comunican entre sí con menos frecuencia, utilizando mensajes intercambiados a través de un dispositivo de transferencia de mensajes específico de un sistema determinado.
Así pues, los sistemas débilmente acoplados pueden utilizarse eficazmente cuando las interacciones entre tareas son muy reducidas. Si las interacciones entre tareas requieren numerosas transferencias de mensajes entre procesadores, el rendimiento se degrada gravemente. La figura 7 muestra un sistema débilmente acoplado.
Multiprocesadores
Por definición, las arquitecturas multiprocesador contienen varios procesadores. Éstos pueden comunicarse y cooperar a distintos niveles para ejecutar una o varias aplicaciones paralelas. Los distintos procesadores tienen capacidades de procesamiento comparables y comparten el acceso a un espacio de direcciones común, memorias comunes, canales de entrada/salida y periféricos comunes. Un espacio de direcciones común significa que cualquier procesador de la arquitectura puede acceder a todos los recursos de forma libre y uniforme. Esta uniformidad de acceso a los recursos simplifica la programación de aplicaciones, pero plantea complejos problemas de coherencia de memoria (todos los procesadores que acceden a una celda de memoria compartida deben ver el mismo valor al mismo tiempo).
Las arquitecturas multiprocesador pueden ser controladas por un único sistema operativo que autoriza las interacciones, a diferentes niveles, entre los procesadores y sus aplicaciones.
Las arquitecturas multiprocesador utilizan una red de interconexión para intercambiar datos. Una red de interconexión es un dispositivo hardware que permite establecer una conexión entre dos procesadores cualesquiera, o entre un procesador y una memoria común.
Multiordenadores
La idea básica de los multicomputadores es sencilla: construir un potente sistema MIMD simplemente interconectando un gran número de ordenadores existentes. Así, la estructura (hardware y software) de un sistema multicomputador puede modularse en función de las necesidades de procesamiento. Estos sistemas pueden diseñarse para ser tolerantes a fallos, lo que significa que un sistema con n ordenadores puede seguir funcionando como un sistema con n – 1 ordenadores, si uno de ellos falla. Las máquinas MIMD se construyen interconectando los procesadores a través de un único bus o enlazándolos a través de una red de interconexiones. La figura 8 muestra un diagrama esquemático de un sistema multicomputador.
La ejecución en paralelo de distintos ordenadores está limitada por la necesidad de coordinar sus actividades cuando operan con datos compartidos. Cuanto mayor sea el número de ordenadores, más difícil será sincronizarlos (mecanismo que impide que un ordenador empiece a trabajar sobre un dato compartido antes de que otro haya terminado de procesar el mismo dato). Las restricciones vinculadas a la sincronización limitan el grado de paralelismo en la ejecución de la aplicación distribuida sobre estructuras MIMD.
El desarrollo de la informática se explica por los avances tecnológicos que se han producido a un ritmo muy sostenido desde hace más de cuatro décadas. Estos avances han permitido ofrecer una potencia de cálculo y una capacidad de memoria cada vez mayores, al tiempo que han provocado una reducción considerable del precio de coste de las máquinas, ya que ahora es el software el que representa la inversión más importante en un sistema informático. La evolución de los ordenadores hasta la fecha muestra una cierta continuidad en las arquitecturas de las máquinas. Sin embargo, la necesidad de preservar la enorme inversión en software está frenando el desarrollo de arquitecturas originales. Por estas razones, las nuevas arquitecturas sólo se impondrán si aportan un avance decisivo en la producción y fiabilidad del software de aplicación.
Revisor de hechos: EJ
Características de Ordenador
[rtbs name=”educacion-y-comunicacion”]Recursos
Traducción de Ordenador
Inglés: Computer
Francés: Ordinateur
Alemán: Computer
Italiano: Calcolatore elettronico
Portugués: Computador
Polaco: Komputer
Tesauro de Ordenador
Educación y Comunicación > Informática y tratamiento de datos > Industria informática > Equipo informático > Ordenador
Educación y Comunicación > Comunicación > Sistema de comunicación > Tratamiento de datos > Ordenador
Véase También
- Tratamiento de datos
- Datos personales
- Recogida de datos
- Registro de datos
- Base de datos
- Memorización de datos
- Codificación
- Microordenador
- Informática doméstica
- Computadora electrónica
- Miniordenador
Historia de la informática
Técnicas Informática
Hardware informático
Procesadores
▷ Esperamos que haya sido de utilidad. Si conoces a alguien que pueda estar interesado en este tema, por favor comparte con él/ella este contenido. Es la mejor forma de ayudar al Proyecto Lawi.