stringtranslate.com

Arquitectura de von Neumann

Un esquema de arquitectura de von Neumann

La arquitectura de von Neumann , también conocida como modelo de von Neumann o arquitectura de Princeton , es una arquitectura informática basada en una descripción de 1945 de John von Neumann y de otros en el Primer borrador de un informe sobre el EDVAC . [1] El documento describe una arquitectura de diseño para una computadora digital electrónica con estos componentes:

El término "arquitectura de von Neumann" ha evolucionado para referirse a cualquier computadora con programa almacenado en la que no se puede realizar una búsqueda de instrucciones y una operación de datos al mismo tiempo (ya que comparten un bus común ). Esto se conoce como el cuello de botella de von Neumann, que a menudo limita el rendimiento del sistema correspondiente. [3]

La arquitectura de von Neumann es más simple que la arquitectura de Harvard (que tiene un conjunto dedicado de buses de direcciones y datos para leer y escribir en la memoria y otro conjunto de buses de direcciones y datos para buscar instrucciones ).

Una computadora con programa almacenado utiliza el mismo mecanismo subyacente para codificar tanto las instrucciones como los datos del programa , a diferencia de los diseños que utilizan un mecanismo como un cableado discreto en un tablero de conexiones o circuitos de control fijos para la implementación de las instrucciones . Las computadoras con programa almacenado fueron un avance con respecto a las computadoras de función fija o reconfiguradas manualmente de la década de 1940, como la Colossus y la ENIAC . Estas se programaban configurando interruptores e insertando cables de conexión para enrutar datos y señales de control entre varias unidades funcionales.

La gran mayoría de las computadoras modernas utilizan el mismo mecanismo de hardware para codificar y almacenar tanto datos como instrucciones de programa, pero tienen cachés entre la CPU y la memoria y, para los cachés más cercanos a la CPU, tienen cachés separados para instrucciones y datos, de modo que la mayoría de las búsquedas de instrucciones y datos utilizan buses separados ( arquitectura de caché dividida ).

Historia

Las primeras máquinas de computación tenían programas fijos. Algunas computadoras muy simples aún usan este diseño, ya sea por simplicidad o por propósitos de entrenamiento. Por ejemplo, una calculadora de escritorio (en principio) es una computadora de programa fijo. Puede hacer matemáticas básicas , pero no puede ejecutar un procesador de textos o juegos. Cambiar el programa de una máquina de programa fijo requiere recablear, reestructurar o rediseñar la máquina. Las primeras computadoras no estaban tanto "programadas" como "diseñadas" para una tarea particular. La "reprogramación" -cuando era posible- era un proceso laborioso que comenzaba con diagramas de flujo y notas en papel, seguido de diseños de ingeniería detallados y luego el proceso a menudo arduo de recablear y reconstruir físicamente la máquina. Podía llevar tres semanas configurar y depurar un programa en ENIAC . [4]

Con la propuesta de la computadora con programa almacenado, esto cambió. Una computadora con programa almacenado incluye, por diseño, un conjunto de instrucciones y puede almacenar en la memoria un conjunto de instrucciones (un programa ) que detalla el cálculo .

Un diseño de programa almacenado también permite la modificación automática del código . Una de las primeras motivaciones para esta función fue la necesidad de que un programa incrementara o modificara de otro modo la parte de dirección de las instrucciones, algo que los operadores tenían que hacer manualmente en los primeros diseños. Esto perdió importancia cuando los registros de índice y el direccionamiento indirecto se convirtieron en características habituales de la arquitectura de las máquinas. Otro uso era incorporar datos de uso frecuente en el flujo de instrucciones mediante el direccionamiento inmediato .

Capacidades

A gran escala, la capacidad de tratar las instrucciones como datos es lo que hace posible los ensambladores , compiladores , enlazadores , cargadores y otras herramientas de programación automatizada. Hace posible los "programas que escriben programas". [5] Esto ha hecho que florezca un sofisticado ecosistema informático autoalojado alrededor de las máquinas de arquitectura de von Neumann.

Algunos lenguajes de alto nivel aprovechan la arquitectura de von Neumann al proporcionar una forma abstracta e independiente de la máquina de manipular código ejecutable en tiempo de ejecución (por ejemplo, LISP ), o al usar información en tiempo de ejecución para ajustar la compilación justo a tiempo (por ejemplo, lenguajes alojados en la máquina virtual Java o lenguajes integrados en navegadores web ).

En una escala menor, algunas operaciones repetitivas como BITBLT o sombreadores de píxeles y vértices se pueden acelerar en procesadores de propósito general con técnicas de compilación en tiempo real. Este es un uso del código automodificable que sigue siendo popular.

Desarrollo del concepto de programa almacenado

El matemático Alan Turing , que había sido alertado sobre un problema de lógica matemática por las conferencias 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 las Actas de la London Mathematical Society . [6] En él describió una máquina hipotética a la que llamó máquina de computación universal , ahora conocida como la " máquina universal de Turing ". La máquina hipotética tenía un almacenamiento infinito (memoria en la terminología actual) que contenía tanto instrucciones como datos. John von Neumann conoció a Turing mientras era profesor visitante en Cambridge en 1935, y también durante el año de doctorado de Turing en el Instituto de Estudios Avanzados en Princeton, Nueva Jersey durante 1936-1937. No está claro si conocía el artículo de Turing de 1936 en ese momento.

En 1936, Konrad Zuse también anticipó, en dos solicitudes de patente, que las instrucciones de las máquinas podrían almacenarse en el mismo almacenamiento utilizado para los datos. [7]

De forma independiente, J. Presper Eckert y John Mauchly , que estaban desarrollando el ENIAC en la Escuela Moore de Ingeniería Eléctrica de la Universidad de Pensilvania , escribieron sobre el concepto de programa almacenado en diciembre de 1943. [8] [9] Al planificar una nueva máquina, EDVAC , Eckert escribió en enero de 1944 que almacenarían datos y programas en un nuevo dispositivo de memoria direccionable, una memoria de línea de retardo de metal de mercurio . Esta fue la primera vez que se propuso la construcción de una máquina de programa almacenado práctica. En ese momento, él y Mauchly no conocían el trabajo de Turing.

Von Neumann participó en el Proyecto Manhattan en el Laboratorio Nacional de Los Álamos . Requería una enorme cantidad de cálculos, y por eso se unió al proyecto ENIAC, durante el verano de 1944. Allí se unió a las discusiones en curso sobre el diseño de esta computadora de programa almacenado, la EDVAC. Como parte de ese grupo, escribió una descripción titulada Primer borrador de un informe sobre el EDVAC [1] basado en el trabajo de Eckert y Mauchly. Estaba inacabado cuando su colega Herman Goldstine lo distribuyó, y solo llevaba el nombre de von Neumann (para consternación de Eckert y Mauchly). [10] El documento fue leído por docenas de colegas de von Neumann en Estados Unidos y Europa, e influyó [ vague ] en la siguiente ronda de diseños de computadoras.

Jack Copeland considera que es "históricamente inapropiado referirse a las computadoras digitales con programas almacenados electrónicos como 'máquinas de von Neumann ' ". [11] Su colega de Los Álamos, Stan Frankel, dijo sobre la consideración de von Neumann por las ideas de Turing [12]

Sé que en 1943 o 1944, aproximadamente, von Neumann era plenamente consciente de la importancia fundamental del artículo de Turing de 1936... Von Neumann me presentó ese artículo y, a instancias suyas, lo estudié con atención. Mucha gente ha aclamado a von Neumann como el "padre de la computadora" (en un sentido moderno del término), pero estoy seguro de que él nunca habría cometido ese error. Bien podría llamársele la partera, tal vez, pero me recalcó firmemente, y estoy seguro de que también a otros, que la concepción fundamental se debe a Turing, en la medida en que no fue anticipada por Babbage... Tanto Turing como von Neumann, por supuesto, también hicieron contribuciones sustanciales a la " reducción a la práctica " de estos conceptos, pero no las consideraría comparables 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 esas actividades.

En el momento en que se distribuyó el informe del "Primer borrador", Turing estaba elaborando un informe titulado Calculadora electrónica propuesta . En él se describía con todo detalle de ingeniería y programación su idea de una máquina a la que llamó Motor de cálculo automático (ACE) . [13] Lo presentó al comité ejecutivo del Laboratorio Nacional de Física británico el 19 de febrero de 1946. Aunque Turing sabía por su experiencia en tiempos de guerra en Bletchley Park que lo que proponía era factible, el secreto que rodeaba a Colossus , que se mantuvo posteriormente durante varias décadas, le impidió decirlo. Se produjeron varias implementaciones exitosas del diseño de ACE.

Tanto el artículo de von Neumann como el de Turing describían ordenadores con programa almacenado, pero el artículo anterior de von Neumann alcanzó una mayor circulación y la arquitectura informática que describía pasó a conocerse como la "arquitectura de von Neumann". En la publicación de 1953 Faster than Thought: A Symposium on Digital Computing Machines (editada por B. V. Bowden), una sección del capítulo sobre los ordenadores en Estados Unidos dice lo siguiente: [14]

La máquina del Instituto de Estudios Avanzados de Princeton

En 1945, el profesor J. von Neumann, que trabajaba en la Escuela Moore de Ingeniería de Filadelfia, donde se había construido la ENIAC, publicó, en nombre de un grupo de sus colaboradores, un informe sobre el diseño lógico de los ordenadores digitales. El informe contenía una propuesta detallada para el diseño de la máquina que desde entonces se conoce como EDVAC (computadora automática electrónica de variables discretas). Esta máquina se ha completado recientemente en Estados Unidos, pero el informe de von Neumann inspiró la construcción de la EDSAC (calculadora automática electrónica de almacenamiento diferido) en Cambridge (véase pág. 130).

En 1947, Burks, Goldstine y von Neumann publicaron otro informe que esbozaba el diseño de otro tipo de máquina (esta vez una máquina paralela) que sería extremadamente rápida, capaz quizás de 20.000 operaciones por segundo. Señalaron que el problema pendiente en la construcción de una máquina de este tipo era el desarrollo de una memoria adecuada con contenidos accesibles instantáneamente. Al principio sugirieron utilizar un tubo de vacío especial —llamado el " Selectron "— que los Laboratorios Princeton de RCA habían inventado. Estos tubos eran caros y difíciles de fabricar, por lo que von Neumann decidió posteriormente construir una máquina basada en la memoria Williams . Esta máquina —terminada en junio de 1952 en Princeton— se ha hecho conocida popularmente como la Maniac. El diseño de esta máquina inspiró al menos media docena de máquinas que ahora se construyen en Estados Unidos, todas conocidas cariñosamente como "Johniacs".

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

Computación automática en el Laboratorio Nacional de Física

Uno de los ordenadores digitales más modernos, que incorpora avances y mejoras en la técnica del cálculo electrónico automático, fue presentado recientemente en el Laboratorio Nacional de Física de Teddington, donde fue diseñado y construido por un pequeño equipo de matemáticos e ingenieros de investigación electrónica del personal del Laboratorio, asistidos por varios ingenieros de producción de la English Electric Company, Limited. El equipo instalado hasta ahora en el Laboratorio es sólo el modelo piloto de una instalación mucho mayor que se conocerá como la Máquina de Cálculo Automático, pero aunque comparativamente pequeña en volumen y conteniendo sólo unas 800 válvulas termoiónicas, como se puede juzgar por las láminas XII, XIII y XIV, es una máquina de cálculo extremadamente rápida y versátil.

Los conceptos básicos y los principios abstractos de la computación por una máquina fueron formulados por el Dr. A. M. Turing, FRS, en un documento 1 . leído ante la Sociedad Matemática de Londres en 1936, pero el trabajo sobre tales máquinas en Gran Bretaña se vio retrasado por la guerra. Sin embargo, en 1945, el Sr. J. R. Womersley, entonces superintendente de la División de Matemáticas del Laboratorio, realizó un examen de los problemas en el Laboratorio Nacional de Física. Se le unieron el Dr. Turing y un pequeño equipo de especialistas y, en 1947, la planificación preliminar estaba lo suficientemente avanzada como para justificar la creación del grupo especial ya mencionado. En abril de 1948, este último se convirtió en la Sección de Electrónica del Laboratorio, a cargo del Sr. F. M. Colebrook.

Los primeros ordenadores con arquitectura von Neumann

El primer borrador describía un diseño que fue utilizado por muchas universidades y corporaciones para construir sus computadoras. [16] Entre estas diversas computadoras, solo ILLIAC y ORDVAC tenían conjuntos de instrucciones compatibles.

Las primeras computadoras con programa almacenado

Es difícil ordenar correctamente la información de fechas que aparece en la siguiente cronología. Algunas fechas corresponden a la primera ejecución de un programa de prueba, otras corresponden a la primera demostración o finalización del equipo y otras corresponden a la primera entrega o instalación.

Evolución

Evolución de la arquitectura del bus de sistema único

Durante las décadas de 1960 y 1970, las computadoras en general se volvieron más pequeñas y más rápidas, lo que llevó a evoluciones en su arquitectura. Por ejemplo, la E/S mapeada en memoria permite que los dispositivos de entrada y salida sean tratados de la misma manera que la memoria. [24] Se podría utilizar un solo bus de sistema para proporcionar un sistema modular con un menor costo [ aclaración necesaria ] . Esto a veces se llama una "racionalización" de la arquitectura. [25] En las décadas posteriores, los microcontroladores simples a veces omitían características del modelo para reducir el costo y el tamaño. Las computadoras más grandes agregaron características para un mayor rendimiento.

Limitaciones de diseño

Cuello de botella de von Neumann

El uso compartido del bus por instrucciones y datos conduce al cuello de botella de von Neumann , el rendimiento limitado (velocidad de transferencia de datos) entre la unidad central de procesamiento (CPU) y la memoria en comparación con la cantidad de memoria. Debido a que el bus único solo puede acceder a una de las dos clases de memoria a la vez, el rendimiento es menor que la velocidad a la que puede trabajar la CPU. Esto limita seriamente la velocidad de procesamiento efectiva cuando se requiere que la CPU realice un procesamiento mínimo en grandes cantidades de datos. La CPU se ve obligada continuamente a esperar a que los datos necesarios se muevan hacia o desde la memoria. Dado que la velocidad de la CPU y el tamaño de la memoria han aumentado mucho más rápido que el rendimiento entre ellos, el cuello de botella se ha convertido en un problema mayor, un problema cuya gravedad aumenta con cada nueva generación de CPU.

El cuello de botella de von Neumann fue descrito por John Backus en su conferencia del Premio Turing de la ACM de 1977. Según Backus:

Seguramente debe haber una manera menos primitiva de hacer grandes cambios en el almacén que enviando grandes cantidades de palabras de un lado a otro a través del cuello de botella de von Neumann. Este tubo no sólo es un cuello de botella literal para el tráfico de datos de un problema, sino, más importante aún, es un cuello de botella intelectual que nos ha mantenido atados a pensar palabra por palabra en lugar de alentarnos a pensar en términos de las unidades conceptuales más grandes de la tarea en cuestión. Por lo tanto, la programación es básicamente la planificación y el detalle del enorme tráfico de palabras a través del cuello de botella de von Neumann, y gran parte de ese tráfico no se refiere a los datos significativos en sí, sino a dónde encontrarlos. [26] [27]

Mitigaciones

Existen varios métodos conocidos para mitigar el cuello de botella de rendimiento de Von Neumann. Por ejemplo, los siguientes pueden mejorar el rendimiento [ ¿por qué? ] :

El problema también se puede evitar en cierta medida utilizando computación paralela , utilizando por ejemplo la arquitectura de acceso a memoria no uniforme (NUMA), un enfoque que emplean habitualmente las supercomputadoras . No está tan claro si el cuello de botella intelectual que Backus criticó ha cambiado mucho desde 1977. La solución propuesta por Backus no ha tenido una influencia importante. [ cita requerida ] La programación funcional moderna y la programación orientada a objetos están mucho menos orientadas a "enviar grandes cantidades de palabras de un lado a otro" que los lenguajes anteriores como FORTRAN , pero internamente, eso es lo que las computadoras siguen haciendo durante gran parte de su tiempo, incluso las supercomputadoras altamente paralelas.

En 1996, un estudio comparativo de bases de datos descubrió que tres de cada cuatro ciclos de CPU se gastaban esperando memoria. Los investigadores esperan que aumentar la cantidad de flujos de instrucciones simultáneos con subprocesos múltiples o multiprocesamiento de un solo chip empeore aún más este cuello de botella. [28] [29] En el contexto de procesadores multinúcleo , se requiere una sobrecarga adicional para mantener la coherencia de la caché entre procesadores e subprocesos.

Código automodificable

Aparte del cuello de botella de von Neumann, las modificaciones de los programas pueden ser bastante dañinas, ya sea por accidente o por diseño. [ cita requerida ] En algunos diseños de computadoras con programas almacenados simples, un programa que funciona mal puede dañarse a sí mismo, a otros programas o al sistema operativo , lo que posiblemente provoque un bloqueo de la computadora . Sin embargo, este problema también se aplica a los programas convencionales que carecen de verificación de límites . La protección de la memoria y varios controles de acceso generalmente protegen contra cambios de programa tanto accidentales como maliciosos.

Véase también

Referencias

  1. ^ abc von Neumann, John (1945), Primer borrador de un informe sobre el EDVAC (PDF) , archivado desde el original (PDF) el 14 de marzo de 2013 , consultado el 24 de agosto de 2011.
  2. ^ Ganesa 2009.
  3. ^ Markgraf, Joey D. (2007), El cuello de botella de Von Neumann, archivado desde el original el 12 de diciembre de 2013.
  4. ^ Copeland 2006, pág. 104.
  5. ^ Entrada de MFTL (My Favorite Toy Language) en el archivo de jerga 4.4.7 , consultado el 11 de julio de 2008.
  6. ^ Turing, Alan M. (1936), "Sobre números computables, con una aplicación al problema de Entscheidung", Actas de la London Mathematical Society , 2, vol. 42 (publicado en 1937), págs. 230-265, doi :10.1112/plms/s2-42.1.230, S2CID  73712y Turing, Alan M. (1938), "Sobre números computables, con una aplicación al problema de Entscheidung. Una corrección", Actas de la London Mathematical Society , 2, vol. 43, núm. 6 (publicado en 1937), págs. 544–546, doi :10.1112/plms/s2-43.6.544.
  7. ^ Williams, FC; Kilburn, T. (25 de septiembre de 1948), "Computadoras digitales electrónicas", Nature , 162 (4117): 487, Bibcode :1948Natur.162..487W, doi : 10.1038/162487a0 , S2CID  4110351.
  8. ^ Lukoff, Herman (1979). From Dits to Bits: A personal history of the electronic computer [De Dits a Bits: Una historia personal de la computadora electrónica] . Portland, Oregón: Robotics Press. ISBN 0-89661-002-0. Número de LCCN  79-90567.
  9. ^ El informe de progreso de diciembre de 1943 del administrador del proyecto ENIAC, Grist Brainerd, para el primer período del desarrollo del ENIAC propuso implícitamente el concepto de programa almacenado (mientras que simultáneamente rechazaba su implementación en el ENIAC) al afirmar que "para tener el proyecto más simple y no complicar las cosas", el ENIAC se construiría sin ninguna "regulación automática".
  10. ^ Copeland 2006, pág. 113.
  11. ^ Copeland, Jack (2000), Una breve historia de la informática: ENIAC y EDVAC , consultado el 27 de enero de 2010.
  12. ^ Copeland, Jack (2000), Una breve historia de la informática: ENIAC y EDVAC , consultado el 27 de enero de 2010(un trabajo que cita a Randell, Brian (1972), Meltzer, B.; Michie, D. (eds.), "Sobre Alan Turing y los orígenes de las computadoras digitales", Machine Intelligence , 7 , Edimburgo: Edinburgh University Press : 10, ISBN 0-902383-26-4.
  13. ^ Copeland 2006, págs. 108-111.
  14. ^ Bowden 1953, págs. 176, 177.
  15. ^ Bowden 1953, pág. 135.
  16. ^ "Proyecto de Computadora Electrónica". Instituto de Estudios Avanzados . 11 de septiembre de 2009. Consultado el 26 de mayo de 2011 .
  17. ^ ab Campbell-Kelly, Martin (abril de 1982). "El desarrollo de la programación informática en Gran Bretaña (1945 a 1955)". IEEE Annals of the History of Computing . 4 (2): 121–139. doi :10.1109/MAHC.1982.10016. S2CID  14861159.
  18. ^ Robertson, James E. (1955), Illiac Design Techniques , número de informe UIUCDCS-R-1955–146, Laboratorio de Computación Digital, Universidad de Illinois en Urbana-Champaign.
  19. ^ Calculadora electrónica de secuencia selectiva (sitio web de la USPTO) .
  20. ^ Calculadora electrónica de secuencia selectiva (Patentes de Google) .
  21. ^ Grosch, Herbert RJ (1991), Computadora: fragmentos de una vida, Third Millennium Books, ISBN 0-88733-085-1.
  22. ^ Lavington, Simon, ed. (2012). Alan Turing y sus contemporáneos: la construcción de las primeras computadoras del mundo . Londres: British Computer Society . pág. 61. ISBN. 978-1906124908.
  23. ^ Johnson, Roger (abril de 2008). "Escuela de Ciencias de la Computación y Sistemas de Información: Una Breve Historia" (PDF) . Birkbeck College . Universidad de Londres . Consultado el 23 de julio de 2017 .
  24. ^ Bell, C. Gordon ; Cady, R.; McFarland, H.; O'Laughlin, J.; Noonan, R.; Wulf, W. (1970), "Una nueva arquitectura para minicomputadoras: la DEC PDP-11" (PDF) , Conferencia conjunta de informática de primavera , págs. 657–675.
  25. ^ Null, Linda; Lobur, Julia (2010), Los elementos esenciales de la organización y la arquitectura de computadoras (3.ª ed.), Jones & Bartlett Learning, págs. 36, 199–203, ISBN 978-1-4496-0006-8.
  26. ^ Backus, John W. (agosto de 1978). "¿Puede la programación liberarse del estilo von Neumann? Un estilo funcional y su álgebra de programas". Comunicaciones de la ACM . 21 (8): 613–641. doi : 10.1145/359576.359579 . S2CID  16367522.
  27. ^ Dijkstra, Edsger W. "Archivo EW Dijkstra: una reseña de la conferencia del premio Turing de 1977" . Consultado el 11 de julio de 2008 .
  28. ^ Sites, Richard L. (5 de agosto de 1996). "Los arquitectos miran hacia los procesadores del futuro" (PDF) . Microprocessor Report . 10 (10). ¡Es la memoria, estúpido!
  29. ^ Patt, Yale (5 de agosto de 1996). "Los arquitectos miran hacia los procesadores del futuro" (PDF) . Microprocessor Report . 10 (10). En primer lugar, hagamos bien el monoprocesador.

Lectura adicional

Enlaces externos