Arquitectura de Von Neumann



Desarrollo del concepto de programa almacenado




El matemático Alan Turing, quien había sido alertado de un problema de lógica matemática por las lecciones de Max Newman en la Universidad de Cambridge, escribió un artículo en 1936 titulado On Computable Numbers, with an Application to the Entscheidungsproblem, que fue publicado en los Proceedings of the London Mathematical Society. En él describía una máquina hipotética que llamó "máquina computadora universal", y que ahora es conocida como la "Máquina de Turing universal". La máquina hipotética tenía un almacenamiento infinito (memoria en la terminología actual) que contenía tanto las instrucciones como los datos. John Von Neumann conoció a Turing cuando ejercía de profesor sustituto en Cambridge en 1935 y también durante el año PhD que Turing pasó en la Institute for Advanced Study en Princeton, Nueva Jersey durante 1936-37. Cuándo supo del artículo de 1936 de Turing no está claro.

En 1936, Konrad Zuse también anticipó en dos solicitudes de patente que instrucciones de la máquina podían ser almacenadas en el mismo almacenamiento utilizado para los datos.

Independientemente, J. Presper Eckert y John Mauchly, quienes estaban desarrollando el ENIAC en la Escuela Moore de Ingeniería Eléctrica en la Universidad de Pennsylvania, escribieron sobre el concepto de “programa almacenado” en diciembre de 1943. En enero de 1944, mientras diseñaba una nueva máquina, EDVAC, Eckert escribió que se almacenarían datos y programas en un nuevo dispositivo de memoria direccionable, una memoria de línea de retardo. Ésta fue la primera vez que se propuso la construcción de un práctico programa almacenado. Por esas fechas, no tenían conocimiento del trabajo de Turing.

Von Neumann estaba involucrado en el Proyecto Manhattan en el Laboratorio Nacional Los Álamos, el cual requería ingentes cantidades de cálculos. Esto le condujo al proyecto ENIAC, en verano de 1944. Allí se incorporó a los debates sobre el diseño de un ordenador con programas almacenados, el EDVAC. Como parte del grupo, se ofreció voluntario a escribir una descripción de él. El término "von Neumann architecture" surgió del primer artículo de von Neumann: "First Draft of a Report on the EDVAC", fechado el 30 de junio de 1945, el cual incluía ideas de Eckert y Mauchly. Estaba inconcluso cuando su compañero Herman Goldstine lo hizo circular con sólo el nombre de von Neumann escrito en él, para consternación de Eckert y Mauchly. El artículo fue leído por docenas de compañeros de trabajo de Von Neumann en América y Europa, e influenció la siguiente hornada de diseños de computadoras.

Por lo tanto, Von Neumann no se encontraba solo en el desarrollo de la idea de la arquitectura de programa almacenado, y Jack Copeland considera que es "históricamente inapropiado referirse a las computadoras electrónicas digitales de programa almacenado como 'máquinas de von Neumann'". Su colega del colegio Los Álamos, Stan Frankeldijo de las consideraciones de von Neumann con respecto a las ideas de Turing:


Sé que en o alrededor de 1943 o '44 von Neumann era muy consciente de la importancia fundamental del papel de 1936 de Turing... Von Neumann me introdujo a ese papel y en su insistencia lo estudié con cuidado. Muchas personas han aclamado a von Neumann como el "padre de la computadora" (en el sentido moderno del término), pero estoy seguro de que nunca habría hecho que el propio error. Él bien podría haberse llamado tal vez la partera, pero con firmeza enfatizó para mí, y para otros, que estoy seguro, que la concepción fundamental se debe a Turing—en la medida en que no anticipado por Babbage... Por supuesto, tanto Turing como von Neumann también hicieron importantes contribuciones a la "reducción a la práctica" de estos conceptos, pero yo no consideraría esto como comparable en importancia con la introducción y explicación del concepto de una computadora capaz de almacenar en su memoria su programa de actividades y de modificar ese programa en el curso de estas actividades.

En el mismo momento en que el informe "Primer Borrador" fue distribuido, Turing desarrolló un informe técnico detallado, Proposed Electronic Calculator, que describe en detalle la ingeniería y la programación, su idea de una máquina que fue llamada la Automatic Computing Engine (ACE). Presentó éste al Laboratorio Nacional de FísicaBritánico el 19 de febrero de 1946. A pesar de que Turing sabía por su experiencia de guerra en el Parque Bletchley que su propuesta era factible, el secretismo mantenido durante muchas décadas acerca de los ordenadores Colossus le impidió manifestarlo. Se produjeron varias implementaciones del diseño ACE de forma exitosa.

Los trabajos tanto de von Neumann como de Turing, describían computadoras de programas almacenados, pero al ser anterior el artículo de von Neumann, consiguió mayor circulación y repercusión, así que la arquitectura de computadoras que esbozó adquirió el nombre de "arquitectura von Neumann". En la publicación de 1953 Faster than Thought: A Symposium on Digital Computing Machines (Más rápido que el pensamiento: Un Simposio sobre Máquinas informáticas digitales -editado por BV Bowden-), una sección en el capítulo sobre Computers in America (Computadoras en América) dice lo siguiente:

La Máquina del Instituto de Estudios Avanzados, Princeton


En 1945, el profesor J. von Neumann, que en ese entonces trabajaba en la Escuela Moore de Ingeniería en Filadelfia, donde se había construido el ENIAC, emitido en nombre de un grupo de sus compañeros de trabajo un informe sobre el diseño lógico de las computadoras digitales. El informe contenía una propuesta bastante detallada para el diseño de la máquina que, desde entonces, se conoce como la EDVAC (computadora de retardo variable discreta). Esta máquina ha sido recientemente completada en América, pero el informe von Neumann inspiró la construcción de la EDSAC (calculadora automática de almacenamiento electrónico de retardo) en Cambridge (véase página 130).


En 1947, Burks, Goldstine y Von Neumann, publicaron un informe en el que describen el diseño de otro tipo de máquina (una máquina paralela en este momento) que debería ser muy rápida, capaz de hacer 20.000 operaciones por segundo. Señalaron que el problema persistente en la construcción de tal máquina estaba en el desarrollo de una memoria adecuada, todos los contenidos de los cuales fueron instantáneamente accesibles, y al principio se sugirió el uso de un tubo especial -llamado Selectron- que había sido inventado por los laboratorios de Princeton de la RCA. Estos tubos son caros y difíciles para fabricar, así Von Neumman decidió construir una máquina basada en la memoria de Williams. Esa máquina que se completó en junio de 1952 en Princeton se ha conocido como MANIAC I. El diseño de esta máquina que ha sido inspirado de una docena o más de máquinas que están actualmente en construcción en América.

En el mismo libro, los dos primeros párrafos de un capítulo sobre ACE dicen lo siguiente:


Cálculo automático en el laboratorio nacional de física


Uno de los equipos digitales más modernos que incorpora novedades y mejoras en la técnica de la computación electrónica ha sido demostrado en el laboratorio nacional de física, Teddington, donde ha sido diseñado y construido por un pequeño equipo de matemáticos e ingenieros electrónicos investigadores sobre el personal del laboratorio, asistido por ingenieros de producción de la compañía eléctrica inglesa. El equipo construido hasta ahora en el laboratorio es solo el modelo piloto de muchas instalaciones muy grandes que se va a conocer como el motor de cálculo automático, pero aunque es relativamente pequeño en volumen y contiene solo 800 válvulas termoiónicas, es una máquina de cálculo muy rápido y versátil.


Los conceptos básicos y principios abstractos de la computación por una máquina fueron formuladas por el Dr A. M. Turing, en un papel1 leído ante la Sociedad Matemática de Londres en 1936, pero el trabajo en dichas máquinas en el Reino Unido se retrasó por la guerra. En 1945, se hizo una revisión al problema en el laboratorio nacional de Física por el profesor J. R. Womersley. Se le adjuntó al Dr. Turing un pequeño equipo de especialistas, y en 1947 la planificación preliminar fue lo suficientemente avanzada como para justificar el establecimiento del grupo especial ya mencionado. En abril de 1948, estos últimos pasaron a estar en la sección de electrónica del laboratorio, bajo el cargo del Sr. F. M. Colebrook.
Definición formal


Las computadoras son máquinas de arquitectura von Neumann cuando:


  • Tanto los programas como los datos se almacenan en una memoria en común. Esto hace posible la ejecución de comandos de la misma forma que los datos.
  • Cada celda de memoria de la máquina se identifica con un número único, llamado dirección.
  • Las diferentes partes de la información (los comandos y los datos) tienen diferente modos de uso, pero la estructura no se representa en memoria de manera codificada.
  • Cada programa se ejecuta de forma secuencial que, en el caso de que no haya instrucciones especiales, comienza con la primera instrucción. Para cambiar esta secuencia se utiliza el comando de control de transferencia.

Estructura clásica de las máquinas von Neumann




Una máquina Von Neumann, al igual que prácticamente todos los computadores modernos de uso general, consta de cuatro componentes principales:


  1. Dispositivo de operación (DO), que ejecuta instrucciones de un conjunto especificado, llamado sistema (conjunto) de instrucciones, sobre porciones de información almacenada, separada de la memoria del dispositivo operativo (aunque en la arquitectura moderna el dispositivo operativo consume más memoria -generalmente del banco de registros-), en la que los operandos son almacenados directamente en el proceso de cálculo, en un tiempo relativamente corto
  2. Unidad de control (UC), que organiza la implementación consistente de algoritmos de decodificación de instrucciones que provienen de la memoria del dispositivo, responde a situaciones de emergencia y realiza funciones de dirección general de todos los nodos de computación. Por lo general, el DO y la UC conforman una estructura llamada CPU. Cabe señalar que el requisito es consistente, el orden de la memoria (el orden del cambio de dirección en el contador de programa) es fundamental a la hora de la ejecución de la instrucción. Por lo general, la arquitectura que no se adhiere a este principio no se considera von Neumann
  3. Memoria del dispositivo — un conjunto de celdas con identificadores únicos (direcciones), que contienen instrucciones y datos.
  4. Dispositivo de E/S (DES), que permite la comunicación con el mundo exterior de los computadores, son otros dispositivos que reciben los resultados y que le transmiten la información al computador para su procesamiento.

Primeras computadoras basadas en arquitectura von Neumann




La primera saga se basaba en un diseño que fue utilizado por muchas universidades y empresas para construir sus computadoras. Entre estas, solo ILLIAC y ORDVAC tenían un conjunto de instrucciones compatible.

  • Máquina Experimental de Pequeña Escala de Mánchester (SSEM), apodada "Baby" (Universidad de Mánchester, Inglaterra) hizo su primera ejecución exitosa de un programa almacenado el 21 de junio de 1948.
  • EDSAC (Universidad de Cambridge, Inglaterra) fue el primer computador electrónico práctico de programa almacenado (mayo de 1949)
  • Manchester Mark I (Universidad de Mánchester, Inglaterra) Desarrollado a partir de la SSEM (junio de 1949)
  • CSIRAC (Consejo de Investigación Científica e Industrial) Australia (noviembre de 1949)
  • EDVAC (Laboratorio de Investigación Balística, Laboratorio de Informática de Aberdeen Proving Ground, 1951)
  • ORDVAC (U-Illinois) en Aberdeen Proving Ground, Maryland (completado en noviembre de 1951)
  • IAS machine en Princeton University (enero 1952)
  • MANIAC I en Laboratorio Científico Los Álamos (marzo de 1952)
  • ILLIAC en la Universidad de Illinois, (septiembre de 1952)
  • AVIDAC en Laboratorios Argonne National (1953)
  • ORACLE en Laboratorio Nacional de Oak Ridge (junio de 1953)
  • JOHNNIAC en RAND Corporation (enero de 1954)
  • BESK en Estocolmo (1953)
  • BESM-1 en Moscú (1952)
  • DASK en Dinamarca (1955)
  • PERM en Múnich (1956?)
  • SILLIAC en Sídney (1956)
  • WEIZAC en Rehovoth (1955)

Primeras computadoras de programa almacenado




La información de la fecha en la siguiente cronología es difícil de establecer en el orden correcto. Algunas fechas son de la primera ejecución de un programa de pruebas, algunas fechas son de la primera vez que el equipo se demostró o completó, y algunas fechas son de la primera entrega o instalación.

  • La IBM SSEC tenía la capacidad para tratar instrucciones como datos, y se demostró públicamente el 27 de enero de 1948. Esta capacidad fue reivindicada en una patente estadounidense. Sin embargo, fue parcialmente electromecánica, no totalmente electrónica. En la práctica, las instrucciones eran leídas desde una cinta de papel debido a su memoria limitada.
  • La Manchester SSEM (la bebé) fue la primera computadora completamente electrónica que ejecutaba un programa almacenado. Se corrió un programa de factoraje durante 52 minutos el 21 junio de 1948, después de ejecutar un simple programa de división y un programa para demostrar que dos números eran primos entre sí.
  • La ENIAC fue modificada para funcionar como un computador primitivo con programa almacenado de solo lectura (usando la tabla de funciones de programa ROM) y se demostró como tal el 16 de septiembre de 1948, ejecutando un programa de Adele Goldstine para von Neumann.
  • La BINAC corrió algunos programas de prueba en febrero, marzo y abril de 1949, aunque no se terminó hasta septiembre de 1949.
  • La Manchester Mark I desarrollada basada en el proyecto SSEM. En abril de 1949, con el fin de para ejecutar programas, se hizo disponible una versión intermedia de la Mark 1, pero no se terminó hasta octubre de 1949.
  • La EDSAC corrió su primer programa el 6 de mayo de 1949.
  • La EDVAC fue presentada en agosto de 1949, pero tuvo problemas que la mantenía de su puesta en funcionamiento regular hasta 1951.
  • La CSIR Mark I corrió su primer programa en noviembre de 1949.
  • La SEAC fue demostrada en abril de 1950.
  • La Pilot ACE corrió su primer programa el 10 de mayo 1950 y fue demostrada en diciembre de 1950
  • La SWAC se completó en julio de 1950.
  • La Computadora Whirlwind se completó en diciembre de 1950 y estuvo en uso real en abril de 1951.
  • La ERA 1101 (más tarde la ERA 1101/UNIVAC 1101 comercial) se instaló en diciembre de 1950.

Evolución

             

Evolución de la arquitectura del bus simple del sistema


A lo largo de las décadas de los años 1960 y 1970, las computadoras hicieron, en general, tanto más pequeñas como rápidas, lo que llevó a algunas evoluciones en su arquitectura. Por ejemplo, el mapeado en memoria de E/S permitió que los dispositivos de entrada y salida sean tratados de la misma como la memoria.16 Un único bus de sistema podría ser utilizado para proporcionar un sistema modular con un menor coste. A veces esto se denomina "racionalización" de la arquitectura.17 En las décadas siguientes, losmicrocontroladores sencillos serían algunas veces omitir características del modelo a menor costo y tamaño. Las computadoras más grandes añaden características para un mayor rendimiento.

Cuello de botella de von Neumann (von Neumann bottleneck)




El canal de transmisión de los datos compartido entre CPU y memoria genera un cuello de botella de Von Neumann, un rendimientolimitado (tasa de transferencia de datos) entre la CPU y la memoria en comparación con la cantidad de memoria. En la mayoría de computadoras modernas, la velocidad de comunicación entre la memoria y la CPU es más baja que la velocidad a la que puede trabajar esta última, reduciendo el rendimiento del procesador y limitando seriamente la velocidad de proceso eficaz, sobre todo cuando se necesitan procesar grandes cantidades de datos. La CPU se ve forzada a esperar continuamente a que lleguen los datos necesarios desde o hacia la memoria. Puesto a que la velocidad de procesamiento y la cantidad de memoria han aumentado mucho más rápidamente que el rendimiento de transferencia entre ellos, el cuello de botella ha vuelto más que un problema, un problema cuya gravedad aumenta con cada nueva generación de CPU.

El término “cuello de botella de von Neumann” fue acuñado por John Backus en su conferencia de la concesión del Premio Turing ACM de 1977. Según Backus:


«Seguramente debe haber una manera menos primitiva de realizar grandes cambios en la memoria, que empujando tantas palabras hacia un lado y otro del cuello de botella de von Neumann. No solo es un cuello de botella para el tráfico de datos, sino que, más importante, es un cuello de botella intelectual que nos ha mantenido atados al pensamiento de "una palabra a la vez" en vez de fomentarnos el pensar en unidades conceptuales mayores. Entonces la programación es básicamente la planificación del enorme tráfico de palabras que cruzan el cuello de botella de von Neumann, y gran parte de ese tráfico no concierne a los propios datos, sino a dónde encontrar éstos.»18 19

El problema de rendimiento puede ser aliviado (hasta cierto punto) utilizando diversos mecanismos. Ofreciendo una memoria caché entre la CPU y la memoria principal, proporcionando cachés separadas o vías de acceso independientes para datos e instrucciones (la llamada arquitectura Harvard modificada), utilizando algoritmos y lógica depredictor de saltos y proporcionando una limitada pila de CPU u otro en el chip de memoria reutilizable para reducir el acceso a memoria, son cuatro de las maneras que se dispone para aumentar el rendimiento. El problema también se puede eludirse, cierta medida, usando computación paralela, utilizando por ejemplo la arquitectura de acceso a memoria no uniforme (NUMA), —este enfoque es comúnmente empleado por las supercomputadoras. Está menos claro si el cuello de botella intelectual que criticaba Backus ha cambiado mucho desde 1977. La solución que propuso Backus no ha tenido influencia importante.[cita requerida] La moderna programación funcional y la programación orientada a objetos se preocupan mucho menos de "empujar un gran número de palabras hacia un lado a otro" que los lenguajes anteriores como era Fortran, pero internamente, esto sigue siendo lo que las computadoras pasan gran parte del tiempo haciendo, incluso las supercomputadoras altamente paralelas.

A partir de 1996, un estudio de referencia de base de datos se encontró que tres de cada cuatro ciclos de CPU se dedican a la espera de memoria. Los investigadores esperan que el aumento del número de instrucciones simultáneas arroye con el multihilo o el multiprocesamiento de un solo chip hará que este cuello de botella aún peor.

0 comentarios:

Publicar un comentario