5 min
Editar

La arquitectura de von Neumann

La arquitectura de von Neumann (en inglés, von Neumann architecture) es el diseño en el que se basan casi todos los ordenadores desde 1945: una unidad que calcula, una unidad que controla, una memoria y unos dispositivos de entrada y salida, con una particularidad decisiva, que el programa se guarda en la misma memoria que los datos. Las instrucciones son números, como cualquier otro dato, y la máquina las va leyendo de la memoria una detrás de otra para ejecutarlas. Es lo que se llama programa almacenado (stored program), y es la razón de que un mismo aparato sirva para escribir un texto, ver una película o calcular una órbita sin tocar un solo cable: basta con cargar en la memoria otros números.

Los componentes siguen hoy los nombres que les dio el informe original. La unidad central de procesamiento (central processing unit, CPU) reúne la unidad aritmético-lógica (arithmetic logic unit), que suma, compara y combina bits, y la unidad de control (control unit), que lleva un contador con la posición de la siguiente instrucción, la trae de la memoria, la descifra y ordena a las demás partes lo que tienen que hacer. La memoria (memory) es una larga fila de casillas numeradas, cada una con un número dentro que puede ser un dato o una instrucción. Y los dispositivos periféricos comunican ese conjunto con el exterior. Lo que hace un procesador actual, miles de millones de veces por segundo, es repetir ese ciclo de traer, descifrar y ejecutar.

Antes no era así. El ENIAC, que se terminó en Filadelfia en 1945 y fue el primer ordenador electrónico de propósito general, se programaba conectando cables y girando interruptores en sus paneles, y cambiar de problema llevaba días. Lo hacían seis programadoras, Kathleen McNulty, Jean Jennings, Betty Snyder, Marlyn Wescoff, Frances Bilas y Ruth Lichterman, cuyo trabajo pasó casi inadvertido durante décadas. Mientras se construía, sus diseñadores, John Presper Eckert y John Mauchly, discutían con el matemático John von Neumann, que asesoraba al proyecto, cómo debía ser la máquina siguiente, el EDVAC. En junio de 1945 von Neumann escribió un borrador de informe con el diseño, y Herman Goldstine lo hizo circular con su nombre como único autor. El documento se copió en laboratorios de medio mundo y dio a la idea el nombre que tiene, lo que Eckert y Mauchly consideraron siempre una apropiación de un trabajo colectivo. Nueve años antes, la máquina de Turing universal había descrito en abstracto lo mismo: una máquina que lee su propio programa como un dato más.

El primer ordenador que ejecutó un programa guardado en su memoria fue el Manchester Baby, en la Universidad de Mánchester, el 21 de junio de 1948. El primero que prestó servicio de forma regular fue el EDSAC de Maurice Wilkes, en Cambridge, en mayo de 1949. El EDVAC, que había dado origen a todo, no funcionó hasta 1951. Desde entonces, el esquema básico apenas ha cambiado, aunque todo lo demás, el tamaño, la velocidad y el precio, lo ha hecho en un factor de miles de millones.

El precio de la idea es el cuello de botella de von Neumann (von Neumann bottleneck). Como las instrucciones y los datos viajan por el mismo canal entre la memoria y el procesador, el procesador pasa buena parte del tiempo esperando a que lleguen. El nombre se lo dio John Backus, el creador de FORTRAN, en su discurso del premio Turing de 1978, en el que proponía además una forma de programar que no dependiera de ir moviendo palabras de la memoria una a una. El problema se ha agravado desde entonces, porque la velocidad de los procesadores ha crecido mucho más deprisa que la de la memoria: un acceso a la memoria principal cuesta hoy lo mismo que varios cientos de operaciones del procesador. La respuesta de la industria han sido las cachés, memorias pequeñas y rápidas junto al procesador que guardan lo que se ha usado hace poco, como explica el artículo sobre la caché LRU.

La alternativa se llama arquitectura Harvard (Harvard architecture), por el Harvard Mark I de 1944, que leía las instrucciones de una cinta perforada y guardaba los datos en otro sitio. Con dos memorias y dos canales separados, el procesador puede leer una instrucción y un dato a la vez. Se usa en muchos microcontroladores, los procesadores pequeños de los electrodomésticos, y en los procesadores de señal. Los procesadores de un ordenador o un teléfono son una mezcla: tienen memoria única, al estilo von Neumann, pero dentro del chip separan la caché de instrucciones y la de datos, al estilo Harvard.

Guardar el programa como un dato tiene además una consecuencia de seguridad que tardó décadas en entenderse. Si las instrucciones y los datos son lo mismo, un dato puede acabar ejecutándose como instrucción. Buena parte de los ataques informáticos clásicos, como el desbordamiento de búfer que usó el gusano de Morris en 1988, consisten en conseguir que un programa escriba en la memoria unos datos preparados por el atacante y luego salte a ejecutarlos. Los procesadores actuales marcan zonas de la memoria como no ejecutables para impedirlo, lo que es, en el fondo, reintroducir un poco de separación entre programa y datos.

La arquitectura de von Neumann es la forma que adoptó la idea de un programa informático: una máquina universal cuyo comportamiento no está en sus cables sino en lo que se le carga. Casi ochenta años después, el hardware de un teléfono sigue organizado según un borrador escrito en unas semanas de 1945.

§

Fuentes

  1. John von NeumannFirst Draft of a Report on the EDVACIEEE Annals of the History of Computing 15 (4), reedición del informe de 19451993enlace
  2. John BackusCan Programming Be Liberated from the von Neumann Style?Communications of the ACM 21 (8)1978enlace
  3. Martin Campbell-Kelly, William Aspray, Nathan Ensmenger y Jeffrey R. YostComputer: A History of the Information MachineWestview Press2014
  4. John L. Hennessy y David A. PattersonComputer Architecture: A Quantitative ApproachMorgan Kaufmann2017
Sarasola, Josemari (2025). "La arquitectura de von Neumann". Ikusmira. Recuperado de https://ikusmira.org/p/la-arquitectura-de-von-neumann/

Una errata, un dato desfasado, un párrafo que falta: edítalo y la redacción revisa tu propuesta.

Sugerir una mejora