stringtranslate.com

arquitectura von Neumann

Un esquema arquitectónico de von Neumann

La arquitectura 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 realizada por John von Neumann , y por 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 von Neumann" ha evolucionado para referirse a cualquier computadora con programa almacenado en la que una búsqueda de instrucciones y una operación de datos no pueden ocurrir al mismo tiempo (ya que comparten un bus común ). Esto se conoce como cuello de botella de von Neumann y, 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 cableado de tablero discreto o circuitos de control fijos para la implementación de 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 . Estos se programaron 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 datos e instrucciones de programas, 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 recuperaciones de instrucciones y datos utilizan buses separados ( arquitectura de caché dividida ).

Historia

Las primeras máquinas informáticas tenían programas fijos. Algunas computadoras muy simples todavía usan este diseño, ya sea por simplicidad o con fines de capacitación. 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 ni 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. Podría llevar tres semanas configurar y depurar un programa en ENIAC . [4]

Con la propuesta de la computadora con programas almacenados, 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 una instalación de este tipo fue la necesidad de un programa para incrementar o modificar la parte de dirección de las instrucciones, lo que los operadores tenían que hacer manualmente en los primeros diseños. Esto se volvió menos importante cuando los registros de índice y el direccionamiento indirecto se convirtieron en características habituales de la arquitectura de las máquinas. Otro uso fue incorporar datos de uso frecuente en el flujo de instrucciones mediante direccionamiento inmediato .

Capacidades

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

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

A menor escala, algunas operaciones repetitivas como BITBLT o sombreadores de píxeles y vértices se pueden acelerar en procesadores de uso general con técnicas de compilación justo a tiempo. 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 gracias a las conferencias de Max Newman en la Universidad de Cambridge , escribió un artículo en 1936 titulado Sobre números computables, con una aplicación al Entscheidungsproblem , que se publicó en Proceedings . de la Sociedad Matemática de Londres . [6] En él describía una máquina hipotética a la que llamó máquina informática universal , ahora conocida como la " máquina universal de Turing ". La máquina hipotética tenía un almacén infinito (memoria en la terminología actual) que contenía tanto instrucciones como datos. John von Neumann conoció a Turing mientras era profesor invitado en Cambridge en 1935, y también durante el año de doctorado de Turing en el Instituto de Estudios Avanzados de 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 que se utiliza para los datos. [7]

Independientemente, 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 mercurio metálico . Esta fue la primera vez que se propuso la construcción de una máquina práctica de programa almacenado. 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 . Requirió enormes cantidades de cálculos y, por lo tanto, lo atrajo 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, redactó 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 hizo circular y sólo llevaba el nombre de von Neumann (para consternación de Eckert y Mauchly). [10] El artículo fue leído por docenas de colegas de von Neumann en América y Europa, e influyó [ vago ] 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 von Neumann ' ". [11] Su colega de Los Álamos, Stan Frankel, dijo sobre el respeto de von Neumann por las ideas de Turing [12]

Sé que alrededor de 1943 o 1944 von Neumann era muy 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 el sentido moderno del término), pero estoy seguro de que él nunca habría cometido ese error. Bien podría llamarse la partera, tal vez, pero me enfatizó firmemente a mí, y estoy seguro a otros, que la concepción fundamental se debe a Turing, en la medida en que Babbage no lo anticipó... 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 los consideraría comparables en importancia a la introducción y explicación del concepto de una computadora capaz de almacenar en su memoria su programa de actividades y de modificar dicho programa en el curso de dichas actividades.

En el momento en que se distribuyó el informe "Primer borrador", Turing estaba elaborando un informe titulado Calculadora electrónica propuesta . Describió con detalle de ingeniería y programación su idea de una máquina a la que llamó Motor de Computación Automática (ACE) . [13] Presentó esto 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 varios décadas, le impidieron decirlo. Se produjeron varias implementaciones exitosas del diseño ACE.

Tanto los artículos de von Neumann como los de Turing describían computadoras con programas almacenados, pero el artículo anterior de von Neumann logró una mayor circulación y la arquitectura de la computadora que describió se conoció como la "arquitectura de von Neumann". En la publicación de 1953 Más rápido que el pensamiento: un simposio sobre máquinas de computación digital (editado por B. V. Bowden), una sección del capítulo sobre Computadoras 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 entonces trabajaba en la Escuela de Ingeniería Moore de Filadelfia, donde se había construido el ENIAC, publicó, en nombre de un grupo de sus compañeros de trabajo, un informe sobre el diseño lógico de 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 variable discreta). Esta máquina se completó recientemente en Estados Unidos, pero el informe von Neumann inspiró la construcción de la EDSAC (calculadora automática electrónica de almacenamiento de retardo) en Cambridge (ver página 130).

En 1947, Burks, Goldstine y von Neumann publicaron otro informe que describía 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 realizar 20.000 operaciones por segundo. Señalaron que el problema pendiente al construir 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 " Selectron "— que habían inventado los Laboratorios Princeton de RCA. Estos tubos eran caros y difíciles de fabricar, por lo que posteriormente von Neumann decidió construir una máquina basada en la memoria Williams . Esta máquina, terminada en junio de 1952 en Princeton, se conoce popularmente como 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 de la computación electrónica automática se demostró recientemente en el Laboratorio Nacional de Física de Teddington, donde ha sido diseñado y construido por un pequeño equipo de matemáticos e ingenieros de investigación electrónica del personal. del Laboratorio, asistido por varios ingenieros de producción de 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 Motor de Computación Automática, pero aunque es comparativamente pequeño en volumen y contiene sólo unas 800 válvulas termoiónicas, como puede juzgarse por las láminas XII. XIII y XIV, es una máquina calculadora extremadamente rápida y versátil.

Los conceptos básicos y los principios abstractos de la computación mediante una máquina fueron formulados por el Dr. A. M. Turing, FRS, en un artículo 1 . leído ante la Sociedad Matemática de Londres en 1936, pero el trabajo en tales máquinas en Gran Bretaña se vio retrasado por la guerra. En 1945, sin embargo, el Sr. J. R. Womersley, entonces superintendente de la División de Matemáticas del Laboratorio, examinó 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 el establecimiento del grupo especial ya mencionado. En abril de 1948, esta última pasó a ser la Sección de Electrónica del Laboratorio, a cargo del Sr. F. M. Colebrook.

Primeras computadoras 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.

Primeras computadoras con programas almacenados

Es difícil poner en orden la información de fechas en la siguiente cronología. Algunas fechas son para ejecutar por primera vez un programa de prueba, algunas fechas son para la primera vez que se demostró o completó la computadora y algunas fechas son para la primera entrega o instalación.

Evolución

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

A lo largo de las décadas de 1960 y 1970, las computadoras generalmente se volvieron más pequeñas y más rápidas, lo que condujo a evoluciones en su arquitectura. Por ejemplo, las E/S asignadas en memoria permiten que los dispositivos de entrada y salida se traten igual que la memoria. [24] Se podría utilizar un bus de sistema único para proporcionar un sistema modular con un costo menor [ aclaración necesaria ] . A esto a veces se le llama "simplificación" de la arquitectura. [25] En las décadas siguientes, 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 funciones para un mayor rendimiento.

Limitaciones de diseño

El cuello de botella de Von Neumann

El bus compartido entre la memoria de programa y la memoria de 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 un único bus sólo puede acceder a una de las dos clases de memoria a la vez, el rendimiento es menor que la velocidad a la que puede funcionar 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 ACM Turing de 1977 . Según Backus:

Seguramente debe haber una manera menos primitiva de hacer grandes cambios en la tienda que empujar 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 que, lo que es más importante, es un cuello de botella intelectual que nos ha mantenido atados al pensamiento de palabra a palabra en lugar de alentarnos a pensar en términos de unidades conceptuales más grandes de la tarea en cuestión. Por lo tanto, la programación consiste básicamente en planificar y detallar el 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 datos significativos en sí, sino a dónde encontrarlos. [26] [27] [28]

Mitigaciones

Existen varios métodos conocidos para mitigar el cuello de botella en el rendimiento de Von Neumann. Por ejemplo, todo lo siguiente puede mejorar el rendimiento [ ¿por qué? ] :

El problema también se puede evitar en cierta medida mediante el uso de 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 Backus criticó ha cambiado mucho desde 1977. La solución propuesta por Backus no ha tenido una influencia importante. [ cita necesaria ] La programación funcional moderna y la programación orientada a objetos están mucho menos orientadas a "impulsar una gran cantidad de palabras de un lado a otro" que los lenguajes anteriores como FORTRAN , pero internamente, eso es todavía lo que las computadoras dedican gran parte de su tiempo a hacer, incluso Supercomputadores altamente paralelos.

En 1996, un estudio comparativo de bases de datos encontró que tres de cada cuatro ciclos de CPU se gastaban esperando memoria. Los investigadores esperan que el aumento del número 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. [29] [30] En el contexto de los procesadores multinúcleo , se requiere una sobrecarga adicional para mantener la coherencia de la caché entre los procesadores y los subprocesos.

Código automodificable

Aparte del cuello de botella de von Neumann, las modificaciones del programa pueden ser bastante dañinas, ya sea por accidente o por diseño. [ cita necesaria ] En algunos diseños de computadoras simples con programas almacenados, un programa que funciona mal puede dañarse a sí mismo, a otros programas o al sistema operativo , lo que posiblemente provoque una falla 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 programas tanto accidentales como maliciosos.

Ver 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 , recuperado 24 de agosto 2011.
  2. ^ Ganesano 2009.
  3. ^ Markgraf, Joey D. (2007), The Von Neumann Bottleneck, archivado desde el original el 12 de diciembre de 2013.
  4. ^ Copeland 2006, pag. 104.
  5. ^ Archivo de jerga de entrada MFTL (Mi lenguaje de juguetes favorito) 4.4.7 , consultado el 11 de julio de 2008.
  6. ^ Turing, Alan M. (1936), "Sobre números computables, con una aplicación al Entscheidungsproblem", Actas de la Sociedad Matemática de Londres , 2 (publicado en 1937), vol. 42, 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 Entscheidungsproblem. Una corrección", Actas de la Sociedad Matemática de Londres , 2 (publicado en 1937), vol. 43, núm. 6, págs. 544–546, doi :10.1112/plms/s2-43.6.544.
  7. ^ Williams, FC; Kilburn, T. (25 de septiembre de 1948), "Electronic Digital Computers", Nature , 162 (4117): 487, Bibcode :1948Natur.162..487W, doi : 10.1038/162487a0 , S2CID  4110351, archivado desde el original en abril 6 de diciembre de 2009 , consultado el 10 de abril de 2009..
  8. ^ Lukoff, Herman (1979). De Dits a Bits: una historia personal de la computadora electrónica . Portland, Oregón: Robotics Press. ISBN 0-89661-002-0. LCCN  79-90567.
  9. ^ El informe de progreso de diciembre de 1943 del administrador del proyecto ENIAC, Grist Brainerd, para el primer período de desarrollo de ENIAC propuso implícitamente el concepto del programa almacenado (al mismo tiempo que rechazaba su implementación en el ENIAC) al afirmar que "para tener el proyecto más simple y no complicar las cosas ", la ENIAC se construiría sin ninguna "regulación automática".
  10. ^ Copeland 2006, pag. 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.), "On Alan Turing and the Origins of Digital Computers", Machine Intelligence , Edimburgo: Edinburgh University Press , 7 : 10 , ISBN 0-902383-26-4.
  13. ^ Copeland 2006, págs. 108-111.
  14. ^ Bowden 1953, págs.176, 177.
  15. ^ Bowden 1953, pag. 135.
  16. ^ "Proyecto de Computación 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)". Anales IEEE de la historia de la informática . 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, Libros del tercer milenio, ISBN 0-88733-085-1.
  22. ^ Lavington, Simón, ed. (2012). Alan Turing y sus contemporáneos: construyendo las primeras computadoras del mundo . Londres: Sociedad Británica de Computación . pag. 61.ISBN _ 978-1906124908.
  23. ^ Johnson, Roger (abril de 2008). "Facultad de Ciencias de la Computación y Sistemas de Información: una breve historia" (PDF) . Colegio Birkbeck . Universidad de londres . Consultado el 23 de julio de 2017 .
  24. ^ Campana, C. Gordon ; Cady, R.; McFarland, H.; O'Laughlin, J.; Noonan, R.; Wulf, W. (1970), "Una nueva arquitectura para minicomputadoras: DEC PDP-11" (PDF) , Spring Joint Computer Conference , págs..
  25. ^ Nulo, Linda; Lobur, Julia (2010), Los fundamentos de la organización y arquitectura de las computadoras (3.ª ed.), Jones & Bartlett Learning, págs. 36, 199–203, ISBN 978-1-4496-0006-8.
  26. ^ Backus, John W. "¿Se puede liberar la programación del estilo von Neumann? Un estilo funcional y su álgebra de programas". doi : 10.1145/359576.359579 . {{cite journal}}: Citar diario requiere |journal=( ayuda )
  27. ^ Dijkstra, Edsger W. "Archivo EW Dijkstra: una revisión de la conferencia del Premio Turing de 1977" . Consultado el 11 de julio de 2008 .
  28. ^ Backus, John (agosto de 1978). "¿Se puede liberar la programación del estilo von Neumann? Un estilo funcional y su álgebra de programas" (PDF) . Comunicaciones de la ACM . 21 (8): 613–641. doi : 10.1145/359576.359579 . S2CID  16367522 . Consultado el 19 de septiembre de 2020 a través de Karl Crary, Facultad de Ciencias de la Computación, Universidad Carnegie Mellon.
  29. ^ Sitios, Richard L. (5 de agosto de 1996). "Los arquitectos miran hacia los procesadores del futuro" (PDF) . Informe del microprocesador . 10 (10). ¡Es el Recuerdo, Estúpido!.
  30. ^ Patt, Yale (5 de agosto de 1996). "Los arquitectos miran hacia los procesadores del futuro" (PDF) . Informe del microprocesador . 10 (10). Primero, consigamos el monoprocesador correcto.

Otras lecturas

enlaces externos