# data[].attributes.body
Esta arquitectura fue la propuesta por el matemático John von Neumann para la construcción de la computadora EDVAC en 1945 (la máquina se terminó de construir en 1949), sucesora de la que se considera la primer computadora electrónica, la ENIAC (1946)

# data[].attributes.attachment_caption
(Budapest, 1903 - Washington, 1957) Matemático húngaro nacionalizado estadounidense. Nacido en el seno de una familia de banqueros judíos, dio muestras desde niño de unas extraordinarias dotes para las matemáticas.

# data[].attributes.headline
Funciones de cada una de las partes de la arquitectura Neumann

# data[].attributes.subject
Funciones de cada una de las partes de la arquitectura Neumann

# data[].attributes.body
Unidad de control: Encargada de las etapas de captacion y decodificacion de los cilos de instruccion.

Unidad lógico-aritmética o ALU: Realiza las operaciones matemàticas y logicos que requiera el programa.

Memoria: Es la encargada de almacenar el programa, tambien conocida como memoria RAM

Dispositivos de entrada: Se refiere a cuando el usuario ingresa cualquier tipo de dato, como por ejemplo: Teclado.

Dispositivos de salida: son dispositivos que muestran la informacion al usuario de una forma comprensible, como por ejemplo: Pantalla, Altavoces, etc.

# data[].attributes.headline
                                                                                                                                     Estructura de memoria.               

# data[].attributes.subject
                                                                                                                                     Estructura de memoria.               

# data[].attributes.body
La arquitectura de von Neumman es un diseño que usa una memoria para almacenar instrucciones y datos. Éste tipo de máquina es la implementación de una máquina de Turing y la visión de una arquitectura secuencial en lugar de paralela.

# data[].attributes.body
Memoria principal del sistema y almacena las instrucciones del programa como los datos.

Cada ubicación de memoria tiene una dirección única, a la que se puede acceder para leer o escribir datos o instrucciones.

La memoria principal (memoria temporal) es volátil, lo que significa que pierde su contenido cuando se apaga la computadora.

# data[].attributes.body
Las computadoras modernas utilizan jerarquías de memoria para mejorar el rendimiento.

Esto implica usar diferentes tipos de memoria con diferentes velocidades y capacidades.

Los tipos comunes de memoria en una jerarquía de memoria son:

Memoria caché: Es una memoria pequeña y rápida que se encuentra cerca de la CPU. Almacena datos e instrucciones que se utilizan con frecuencia, lo que permite que la CPU acceda a ellos más rápido.

Memoria principal: Es la memoria principal del sistema y almacena tanto las instrucciones del programa como los datos.

Memoria secundaria: Es una memoria más lenta y económica que la memoria principal. Se utiliza para almacenar datos que no se necesitan con frecuencia, como archivos y programas grandes. Incluyen discos duros y unidades de estado sólido (SSD)..

# data[].attributes.body
Los buses son canales de comunicación que permiten transferir datos entre diferentes componentes del sistema.

Hay dos tipos principales de buses:

• Bus de datos: Transfiere datos entre la CPU, la memoria y otros dispositivos.

• Bus de direcciones: Transfiere las direcciones de las ubicaciones de memoria a las que se desea acceder.

# data[].attributes.headline
                                            Flujo de datos e instrucciones

# data[].attributes.subject
                                            Flujo de datos e instrucciones

# data[].attributes.body
1. Ciclo de fetch-decode-execute:

La CPU recupera una instrucción de la memoria principal utilizando el contador de programa (PC).

La instrucción se decodifica para determinar qué operación se debe realizar y qué datos se necesitan.

Los datos necesarios se recuperan de la memoria principal o de los registros de la CPU.

La instrucción se ejecuta, lo que puede implicar realizar una operación aritmética, mover datos o cambiar el flujo del programa.

El PC se incrementa para apuntar a la siguiente instrucción.

2. Almacenamiento de datos e instrucciones:

Tanto las instrucciones como los datos se almacenan en la memoria principal.

Cada ubicación de memoria tiene una dirección única a la que se puede acceder para leer o escribir datos o instrucciones.

# data[].attributes.headline
Evolución del flujo de datos e instrucciones:

# data[].attributes.subject
Evolución del flujo de datos e instrucciones:

# data[].attributes.body
Pipelining: El pipelining divide la ejecución de una instrucción en etapas más pequeñas que se pueden ejecutar simultáneamente. Esto mejora rendimiento de la CPU.

Ejecución fuera de orden: La ejecución fuera de orden permite que la CPU reordene la ejecución de las instrucciones para mejorar el rendimiento.

Paralelismo: Las computadoras modernas utilizan el paralelismo para mejorar el rendimiento. Esto implica usar múltiples CPU o núcleos de CPU para ejecutar instrucciones simultáneamente.

# data[].attributes.body
El usuario presiona una tecla en el teclado.

La señal de la tecla se envía a la CPU a través del bus de datos.

La CPU decodifica la señal de la tecla que se presiono para determinar qué carácter se ha introducido.

La CPU almacena el carácter en la memoria principal.

El programa de aplicación accede al carácter de la memoria principal y lo procesa.

El programa de aplicación genera un resultado, que se almacena en la memoria principal.

La CPU envía el resultado al monitor a través del bus de datos.

El resultado se muestra en la pantalla del monitor.

# data[].attributes.headline
                                      Ventajas y desventajas

# data[].attributes.subject
                                      Ventajas y desventajas

# data[].attributes.body
Simplicidad: Es relativamente simple y fácil de entender, lo que la hace fácil de implementar y programar.

Versatilidad: La arquitectura de Von Neumann es muy versátil y puede usarse para una amplia gama de aplicaciones.

Eficiencia: Puede ser muy eficiente si se diseña y programa correctamente.

Compatibilidad: La arquitectura de Von Neumann es la base de la mayoría de las computadoras modernas, lo que significa que hay una gran cantidad de software y hardware compatible disponible.

# data[].attributes.body
Cuello de botella de memoria: La memoria principal puede convertirse en un cuello de botella si la CPU necesita acceder a ella con frecuencia. Esto se debe a que la memoria principal es relativamente lenta en comparación con otros componentes del sistema, como la CPU y los cachés.

Dificultad para el paralelismo: La arquitectura de Von Neumann dificulta la implementación del paralelismo, lo que puede limitar el rendimiento de la computadora. Esto se debe a que las instrucciones y los datos se almacenan en la misma memoria, lo que puede generar conflictos cuando la CPU y otros componentes del sistema intentan acceder a la memoria al mismo tiempo.

Limitaciones de memoria: La cantidad de memoria principal está limitada por el tamaño físico de la computadora. Esto puede ser un problema para las aplicaciones que requieren grandes cantidades de memoria, como los programas de edición de video y los juegos.

# data[].attributes.body
Computación personal:

Computadoras de escritorio

Laptops

Tablets

Smartphones

2. Servidores:

Servidores web

Servidores de correo electrónico

Servidores de bases de datos

Servidores en la nube

3. Computación de alto rendimiento (HPC):

Supercomputadoras

Computación distribuida

Computación en la nube de alto rendimiento

4. Dispositivos integrados:

Microcontroladores

Internet de las cosas (IoT)

# data[].attributes.body
La arquitectura Harvard consta de dos memorias separadas y buses separados, una memoria para instrucciones y otra para datos.

# data[].attributes.attachment_caption
(Hoboken, 1900 - St. Louis, 1973) Matemático e ingeniero estadounidense que construyó la primera calculadora electrónica moderna, la Mark I, que perfeccionaría luego con un segundo modelo, la Mark II.

# data[].attributes.body
Se podria decir que la arquitectura Harvard tiene esta separacion de memoria para poder tener los datos mas ordenados, y al distribuirlos de mejor manera, el rendimiento mejora notablemente

# data[].attributes.headline
                                                Estructura de memoria.

# data[].attributes.subject
                                                Estructura de memoria.

# data[].attributes.body
A diferencia de la arquitectura Von Neumann que utiliza una memoria única para almacenar tanto instrucciones como datos, la arquitectura de Harvard se caracteriza por tener dos memorias separadas:

# data[].attributes.body
1. Memoria de instrucciones:

Almacena las instrucciones que el procesador debe ejecutar para llevar a cabo un programa.

Esta memoria puede ser de solo lectura (ROM), donde las instrucciones se graban durante la fabricación del dispositivo y no pueden ser modificadas, o de lectura y escritura (RAM), permitiendo la carga y modificación de instrucciones dinámicamente.

La organización de la memoria de instrucciones varía según el tipo de procesador y la complejidad del programa.

2. Memoria de datos:

Almacena los datos que el programa procesa y manipula.

Esta memoria siempre es de lectura y escritura (RAM), permitiendo el acceso y modificación de datos durante la ejecución del programa.

La organización de la memoria de datos depende del tipo de datos que se manejen (números, caracteres, estructuras de datos, etc.) y de la arquitectura del procesador.

# data[].attributes.headline
Características de la estructura de memoria Harvard:

# data[].attributes.subject
Características de la estructura de memoria Harvard:

# data[].attributes.body
Acceso independiente: El procesador puede acceder a la memoria de instrucciones y la memoria de datos de forma independiente y simultánea, mejorando el rendimiento y la velocidad de ejecución.

Simplicidad: La separación de instrucciones y datos simplifica el diseño del procesador y la unidad de control, reduciendo la complejidad del sistema.

Eficiencia: La arquitectura Harvard puede ser más eficiente en términos de consumo de energía, ya que solo se necesita acceder a una memoria a la vez.

# data[].attributes.body
Acceso independiente: El procesador accede a ambas memorias simultáneamente, mejorando el rendimiento.

Simplicidad: La separación simplifica el diseño del procesador y la unidad de control.

Eficiencia energética: Solo se accede a una memoria a la vez,

# data[].attributes.headline
                                                            Flujo de instrucciones.

# data[].attributes.subject
                                                            Flujo de instrucciones.

# data[].attributes.body
Recuperación de instrucción: La unidad de control (UC) busca la siguiente instrucción en la memoria de instrucciones utilizando el contador de programa (PC).

Decodificación de instrucción: La UC decodifica la instrucción para determinar la operación a realizar y los operandos necesarios (registros o direcciones de memoria).

Recuperación de datos: Si la instrucción requiere datos, la UC los recupera de la memoria de datos utilizando las direcciones de memoria especificadas en la instrucción.

Ejecución de instrucción: La UC ejecuta la instrucción en la Unidad Lógico Aritmética (ALU), aplicando la operación correspondiente a los datos recuperados.

Actualización del PC: El PC se incrementa para apuntar a la siguiente instrucción.

Almacenamiento de resultados: Si la instrucción genera un resultado, este se almacena en un registro o en la memoria de datos, según la instrucción.

# data[].attributes.body
Acceso simultáneo: La UC puede acceder a la memoria de instrucciones y a la memoria de datos al mismo tiempo, gracias a su separación. Esto permite una ejecución más rápida y eficiente del programa.

Superposición de instrucciones: La recuperación de una instrucción puede superponerse con la ejecución de la instrucción anterior, mejorando aún más el rendimiento.

Simplicidad: El flujo de datos es más simple y directo que en la arquitectura Von Neumann, ya que no hay que diferenciar entre instrucciones y datos.

# data[].attributes.body
1. Mayor velocidad:

El acceso simultáneo a las memorias de instrucciones y datos permite una ejecución más rápida de las instrucciones.

La superposición de la recuperación de instrucciones con la ejecución de instrucciones anteriores optimiza el rendimiento.

2. Menor complejidad:

El flujo de datos es más simple y directo, ya que no hay que diferenciar entre instrucciones y datos.

Esto reduce la complejidad del hardware y del software, facilitando el diseño y la implementación.

3. Mayor eficiencia energética:

El acceso selectivo a una memoria a la vez optimiza el consumo de energía.

Esto es particularmente relevante en sistemas embebidos y aplicaciones donde la eficiencia energética es crucial.

4. Altas velocidades de reloj:

La arquitectura Harvard permite alcanzar mayores velocidades de reloj debido a la simplicidad del diseño y al acceso independiente a las memorias.

5. Adecuada para procesamiento paralelo:

Facilita la implementación de procesamiento paralelo, ya que permite que múltiples unidades accedan simultáneamente a las instrucciones y datos.

# data[].attributes.headline
                           Ventajas y Desventajas

# data[].attributes.subject
                           Ventajas y Desventajas

# data[].attributes.body
Menor flexibilidad:

La rigidez en la separación de instrucciones y datos limita la modificación del programa durante la ejecución.

Esto puede dificultar la implementación de ciertas características o la adaptación a cambios en los requisitos.

Mayor costo:

La implementación de dos memorias separadas puede incrementar el costo del sistema, especialmente en comparación con la arquitectura Von Neumann que utiliza una memoria unificada.

Limitaciones en el tamaño del programa:

La memoria de instrucciones tiene un tamaño limitado, lo que puede restringir el tamaño y la complejidad de los programas que se pueden ejecutar.

Dificultad para el manejo de datos:

La separación de datos y la imposibilidad de almacenar datos en la memoria de instrucciones dificultan ciertas operaciones que requieren manipular datos como instrucciones.

# data[].attributes.headline
                               Aplicaciones típicas

# data[].attributes.subject
                               Aplicaciones típicas

# data[].attributes.body
Microcontroladores

Procesadores de señal digital (DSPs)

FPGAs

Computadoras de alto rendimiento (HPC)

Procesamiento de señales digitales a gran escala:

Control industrial

Robótica

Sistemas críticos

# data[].attributes.body
1. Rav, Y. (2002). PERSPECTIVES ON THE HISTORY OF THE CYBERNETICS MOVEMENT: THE PATH TO CURRENT RESEARCH THROUGH THE CONTRIBUTIONS OF NORBERT WIENER, WARREN McCULLOCH, AND JOHN VON NEUMANN. Cybernetics and Systems, 33(8), 779–804. https://doi.org/10.1080/01969720290040830

2. Teller, E., & Von Neumann, J. (1957). John Von Neumann. Bulletin of the Atomic Scientists, 13(4), 150–151. https://doi-org.vpn.ucacue.edu.ec/10.1080/00963402.1957.11457538

3. Wang, D. S. (2022). A prototype of quantum von Neumann architecture. Communications in Theoretical Physics, 74(9), 095103.

4. von Neumann, A. V. A. Tema 4. Estructura Tema 4. Estructura de un d d d d l tl l tl ordenador ordenador elemental elemental.

5. Vilaplana Mayoral, J., & Saiz Vela, A. (2020). Introducció al llenguatge assemblador: simulador de Von Neumann (Vol. 83). Universitat de Lleida.

6. Echeverría, J. (2023). Tecnomatemáticas experimentales y sociedad: Von Neumann y Wolfram: ciencias de la computación, software matemático, tecnopersonas, John von Neumann, Stephen Wolfram. Estudios Filosóficos, 72(210).

7. Buehrer, R., & Ekanadham, K. (1987). Incorporating data flow ideas into von Neumann processors for parallel execution. IEEE Transactions on Computers, 100(12), 1515-1522.

8. Pawson, R. (2022). The myth of the harvard architecture. IEEE Annals of the History of Computing, 44(3), 59-69.

9. Hennessy, J. L., & Patterson, D. A. (2011). Computer architecture: a quantitative approach. Elsevier.

10. Li, B., & Yan, X. Q. (2010, October). Berth allocation problem with Harvard architecture and agent-based computing. In 2010 International Conference on Computer Application and System Modeling (ICCASM 2010) (Vol. 1, pp. V1-197). IEEE.

# data[].attributes.body
1. https://prezi.com/i4ksayoj6yae/ventajas-y-desventajas-de-las-arquitecturad-de-von-neuman-y-harvard/

2. https://www-tandfonline-com.vpn.ucacue.edu.ec/doi/abs/10.9746/jcmsi.10.544

3. https://www.geeksforgeeks.org/harvard-architecture/

4. https://www.linkedin.com/pulse/computer-architecture-sandali-wijerathna/

5. https://www.tandfonline.com/doi/abs/10.1080/01969720290040830

6. https://eva.fing.edu.uy/pluginfile.php/28758/mod_resource/content/0/Notas_Teorico/13-von_neumann-2011-4.2.pdf

7. https://seus.com.ar/arquitectura-de-computadoras-harvard/#:~:text=Aplicaciones%20específicas%3A%20La%20arquitectura%20de,eficiente%20de%20datos%20y%20señales.

8. https://www.tme.eu/es/news/library-articles/page/56104/arquitectura-de-von-neumann-y-arquitectura-de-harvard/#:~:text=Este%20tipo%20de%20estructuras%20se,También%20llamados%20procesadores%20de%20señal.

9. https://www.biografiasyvidas.com/biografia/a/aiken_howard.htm

10. https://cv.uoc.edu/annotation/8255a8c320f60c2bfd6c9f2ce11b2e7f/619469/PID_00218274/PID_00218274.html#:~:text=3.-,Arquitectura%20Harvard,simultáneamente%20a%20las%20dos%20memorias.

# data[].attributes.body
Nombre: Anthony Piña.

Carrera: Ingeniería en Sistemas Computacionales.

Materia: Arquitectura de computadoras.

Profesora: Ing. Diana Poma.