La máquina de von Neumann es un concepto teórico formulado por el matemático húngaro - estadounidense John von Neumann. La arquitectura Von Neumann es la arquitectura común de todos los procesadores para PC. Todas y cada una de las CPU, desde ARM a x86, desde 8086 al Ryzen pasando por los Pentium. Todas ellas son arquitecturas Von Neumann y todas ellas heredan cierto problema común. La arquitectura Von Neumann es en la que se basan todos los procesadores para PC, ya que todos ellos están organizados con una serie de componentes comunes, los cuales son los siguientes: Unidad de Control: Encargada de las etapas de captación y descodificación del ciclo de instrucción. Unidad lógico-aritmética o ALU: Encargada de realizar las operaciones matemáticas y de lógica que requieren los programas. Memoria: La memoria en la que se almacena el programa, la cual la conocemos como memoria RAM Dispositivo de entrada: Desde el que nos comunicamos con el ordenador. Dispositivo de Salida: Desde el que el ordenador se comunica con nosotros. Los datos y las instrucciones se almacenan en una sola memoria de lectura- escritura. Los contenidos de esta memoria se direccionan indicando su posición, sin considerar el tipo del dato contenido en la misma. La ejecución se produce siguiendo una secuencia de instrucción tras instrucción (a no ser que dicha secuencia se modifique explícitamente) MBR o Memory Buffer Register contiene una palabra que debe ser almacenada en la memoria, o es usado para recibir una palabra procedente de la memoria. MAR o Memory Address Register especifica la dirección en memoria de la palabra que va a ser escrita o leída en MBR. IR o Instruction Register Contiene los 8 bits del código de operación de la instrucción que se va a ejecutar. IBR o Instruction Buffer Register empleado para almacenar temporalmente la instrucción contenida en la parte derecha de una palabra en memoria. PC o Program Counter Contiene la dirección de la próxima pareja de instrucciones que van a ser captadas de la memoria. AC y MQ o Accumulator y Multiplier Quotient Se emplean para almacenar operandos y resultados de operaciones de la ALU temporalmente. Por ejemplo, el resultado de multiplicar dos números de 40 bits es un número de 80 bits; los 40 bits más significativos se almacenan en AC y los menos significativos se almacenan en MQ. Entre las principales tareas de la cpu están: Captar instrucciones, es decir la CPU lee una instrucción de la memoria. Interpretar instrucciones, es decir, la instrucción se decodifica para determinar qué acción es necesaria. Captar datos es decir la ejecución de una instrucción puede exigir leer datos de la memoria o de un módulo I/O. Procesar datos, es decir en la ejecución se puede exigir llevar a cabo alguna operación aritmética o lógica con los datos. Escribir datos, es decir, los resultados de la ejecución pueden exigir escribir datos en la memoria o en un módulo I/O. Un procesador incluye registros visibles para el usuario y registros de control/estado. Debido a que la memoria principal está separada de la Unidad Central de Procesamiento, se genera un cuello de botella o un rendimiento limitado entre estos dos componentes ya que la velocidad de transmisión de datos no está acorde a la cantidad de la misma. Para atenuar este inconveniente existen diferentes mecanismos. Unos de los más populares es la inclusión de una llamada memoria caché entre la CPU y la memoria o el denominado Pipeline que permite iniciar instrucciones antes de terminar el ciclo de instrucción del anterior, es decir que de esta forma existiría un trabajo en paralelo. Un ordenador digital de programa almacenado es aquel que mantiene sus instrucciones de programa, así como sus datos, en una memoria de acceso aleatorio (RAM) de lectura-escritura. Las computadoras de programa almacenado representaron un avance sobre los ordenadores controlados por programas de la década de 1940, como la Colossus y la ENIAC, que se programaron mediante el establecimiento de conmutadores y la inserción de cables de interconexión para enrutar datos y para controlar señales entre varias unidades funcionales. En la gran mayoría de las computadoras modernas, se utiliza la misma memoria tanto para datos como para instrucciones de programa, y la distinción entre von Neumann vs. Harvard se aplica a la arquitectura de memoria caché, pero no a la memoria principal. El National Semiconductor (Semiconductor nacional) COP8 se introdujo en 1986; tiene una arquitectura Harvard modificada. Tal vez el tipo más común de estructura no von Neumann se utiliza en las computadoras modernas es la memoria de contenido direccionable (CAM). A lo largo de las décadas de los años 1960 y 1970, las computadoras se 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 fueran tratados de la misma como la memoria. 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. En las décadas siguientes, los microcontroladores sencillos permitirían algunas veces omitir características del modelo a menor costo y tamaño. Las computadoras más grandes añadían características para un mayor rendimiento.