¿Cuál es una explicación de la arquitectura de Harvard?

Harvard es muy similar a von Neumann, excepto que tiene un espacio de memoria separado para datos e instrucciones.

Esos podrían tener diferentes anchuras de bits. O las instrucciones pueden almacenarse en la ROM mientras los datos están en la RAM (por ejemplo, una MCU integrada). En algunos sistemas, hay mucha más memoria de instrucciones que memoria de datos, por lo que las direcciones de instrucciones son más amplias que las direcciones de datos.

Las arquitecturas del mundo real son en realidad híbridas o “harvard modificadas”: en realidad tienen arquitectura de Harvard en algunos lugares porque tendrá un caché separado para la instrucción y los datos (I-cache y D-cache), que luego comparten la memoria principal

Harvard se usa comúnmente en DSP y microcontroladores (por ejemplo, PIC). De hecho, algunos DSP usan “Super Harvard” con dos memorias de datos separadas (X e Y)

HARVARD VS VON NEUMANN <papel de ARM
Harvard vs Von Nuemann Arquitectura

Es difícil mejorar la otra respuesta. La arquitectura de Harvard se desarrolló para tratar el problema del acceso limitado a la memoria por parte de la CPU y el reconocimiento de que, en general, el programa y los datos a menudo eran áreas separadas de la memoria. Y dado eso, uno podría diseñar una computadora con una memoria separada para cada una de estas áreas, así como un bus separado para estas memorias separadas. Y como dijo el otro encuestado, si estuvieran separados para un mejor ancho de banda y un mejor rendimiento de acceso, podrían optimizarse aún más a diferentes tamaños para datos y código de operación del programa, etc.

El problema con la arquitectura de Harvard es que los programas no están tan separados de los datos como uno podría pensar. Un compilador es un buen ejemplo en el que la salida del compilador debe tratarse como datos mientras el compilador se está ejecutando, pero realmente está generando un programa para ejecutar. Esto podría manejarse moviéndose de la memoria de datos a la memoria del programa, pero hay compiladores “justo a tiempo” o JIT que no quieren sufrir esta penalización de copia, enlazadores dinámicos, código auto modificable, metaprogramación y otros ejemplos en los que el programa debe ser residente tanto en la memoria de datos como en la memoria del programa. Como tal, la mayoría de las computadoras, excepto algunas arquitecturas DSP, son arquitectura VonNeuman desde una perspectiva de programación. Dicho todo esto, desde una perspectiva de implementación de hardware, la mayoría de los procesadores modernos se implementan en más de un mecanismo de arquitectura de Harvard. Los procesadores tienen cachés de datos e instrucciones separados con buses de acceso separados desde la CPU a estos cachés que permiten el acceso a ambas memorias simultáneamente. Sin embargo, ambas memorias caché provienen de la misma memoria principal integrada de estilo “von neuman”. Uno podría preguntarse si la memoria está separada en 2 cachés separadas cerca del procesador … qué sucede si un programa intenta modificarse a sí mismo … creando una situación en la que un área de memoria necesitaría residir en la caché de instrucciones y datos simultáneamente, y si se modifica en el caché de datos, de alguna manera necesitaría reaparecer de repente en el caché de instrucciones. Esta condición de “peligro” es manejada por el hardware “snoop” en las cachés, donde la caché de instrucciones constantemente necesita estar espiando todas las escrituras en la memoria por el lado de datos del procesador para determinar si algo que contiene está siendo modificado de alguna manera. detecta dicho evento, puede invalidar la entrada en el caché y volver a cargarlo (ya sea desde la memoria principal (después de un vaciado del caché de datos), o posible a través de un bus de derivación de mayor rendimiento desde el caché de datos directamente en el caché de instrucciones. Este concepto de indagación puede sonar algo complejo, pero es un concepto que se hace necesario en muchos casos, especialmente en sistemas multiprocesador. Esto se debe a que uno debe preocuparse no solo de que un programa escriba en una ubicación de memoria contenida en su propio caché de instrucciones , pero posiblemente cualquier programa podría estar escribiendo en una ubicación contenida dentro de una caché de instrucciones o datos en cualquiera de los otros procesadores en una arquitectura de memoria compartida multiprocesador. Por lo tanto, puede imaginarse … que hay mucho espionaje en las computadoras modernas.