Arquitectura de Harvard modificada - Modified Harvard architecture

La arquitectura de Harvard modificada es una variación de la arquitectura de computadora de Harvard que, a diferencia de la arquitectura pura de Harvard, permite acceder a los contenidos de la memoria de instrucciones como datos. La mayoría de las computadoras modernas que están documentadas como arquitectura de Harvard son, de hecho, arquitectura de Harvard modificada.

Arquitectura de Harvard

La computadora original de la arquitectura de Harvard, la Harvard Mark I , empleaba sistemas de memoria completamente separados para almacenar instrucciones y datos. La CPU obtuvo la siguiente instrucción y cargó o almacenó datos de forma simultánea e independiente. Esto contrasta con una computadora de arquitectura von Neumann , en la que tanto las instrucciones como los datos se almacenan en el mismo sistema de memoria y (sin la complejidad de una memoria caché de CPU ) deben accederse a su vez.

A veces se considera que la separación física de la instrucción y la memoria de datos es la característica distintiva de las computadoras modernas con arquitectura de Harvard. Con los microcontroladores (sistemas informáticos completos integrados en un solo chip), el uso de diferentes tecnologías de memoria para instrucciones (por ejemplo, memoria flash ) y datos (típicamente memoria de lectura / escritura ) en máquinas von Neumann se está volviendo popular. La verdadera distinción de una máquina de Harvard es que las instrucciones y la memoria de datos ocupan diferentes espacios de direcciones . En otras palabras, una dirección de memoria no identifica de forma única una ubicación de almacenamiento (como lo hace en una máquina de von Neumann); también es necesario conocer el espacio de memoria (instrucción o datos) al que pertenece la dirección.

Arquitectura de von Neumann

Una computadora con una arquitectura de von Neumann tiene la ventaja sobre las máquinas Harvard puras en que también se puede acceder al código y tratarlo de la misma manera que los datos, y viceversa. Esto permite, por ejemplo, que los datos se lean desde el almacenamiento en disco en la memoria y luego se ejecuten como código, o sistemas de software de optimización automática que utilizan tecnologías como la compilación justo a tiempo para escribir código de máquina en su propia memoria y luego ejecutarlo. . Otro ejemplo es el código auto modificable , que permite que un programa se modifique a sí mismo.

Una desventaja de estos métodos son los problemas con la protección del espacio ejecutable , que aumentan los riesgos de malware y defectos de software. Además, en estos sistemas es notoriamente difícil documentar el flujo del código y también puede hacer que la depuración sea mucho más difícil.

Arquitectura de Harvard modificada

En consecuencia, algunas máquinas Harvard puras son productos especiales. En cambio, la mayoría de las computadoras modernas implementan una arquitectura Harvard modificada . Esas modificaciones son varias formas de aflojar la estricta separación entre código y datos, al mismo tiempo que respaldan el acceso simultáneo de datos e instrucciones de mayor rendimiento de la arquitectura de Harvard.

Arquitectura de caché dividida (o casi von Neumann)

La modificación más común crea una jerarquía de memoria con cachés de CPU separados para instrucciones y datos en niveles inferiores de la jerarquía. Hay un solo espacio de direcciones para instrucciones y datos, que proporciona el modelo de von Neumann, pero la CPU obtiene instrucciones de la caché de instrucciones y obtiene datos de la caché de datos. La mayoría de los programadores nunca necesitan ser conscientes del hecho de que el núcleo del procesador implementa una arquitectura Harvard (modificada), aunque se benefician de sus ventajas de velocidad. Solo los programadores que generan y almacenan instrucciones en la memoria deben estar al tanto de problemas como la coherencia de la caché , si la tienda no modifica o invalida una copia en caché de la instrucción en una caché de instrucciones.

Arquitectura de memoria de instrucciones como datos

Otro cambio conserva la naturaleza de "espacio de direcciones separado" de una máquina Harvard, pero proporciona operaciones especiales de la máquina para acceder al contenido de la memoria de instrucciones como datos. Debido a que los datos no se pueden ejecutar directamente como instrucciones, estas máquinas no siempre se ven como una arquitectura de Harvard "modificada":

  • Acceso de lectura: los valores de datos iniciales se pueden copiar de la memoria de instrucciones a la memoria de datos cuando se inicia el programa. O, si los datos no se van a modificar (puede ser un valor constante, como pi , o una cadena de texto ), el programa en ejecución puede acceder a ellos directamente desde la memoria de instrucciones sin ocupar espacio en la memoria de datos (que es a menudo con una prima).
  • Acceso de escritura: generalmente se requiere una capacidad de reprogramación; pocas computadoras están basadas exclusivamente en ROM . Por ejemplo, un microcontrolador generalmente tiene operaciones para escribir en la memoria flash que se usa para contener sus instrucciones. Esta capacidad se puede utilizar para fines que incluyen actualizaciones de software. El reemplazo de EEPROM / PROM es un método alternativo.

Arquitectura de memoria de datos como instrucción

Algunos procesadores de arquitectura Harvard, como el MAXQ, pueden ejecutar instrucciones obtenidas de cualquier segmento de memoria, a diferencia del procesador Harvard original, que solo puede ejecutar instrucciones obtenidas del segmento de memoria del programa. Dichos procesadores, como otros procesadores de la arquitectura de Harvard, y a diferencia de la arquitectura pura de von Neumann, pueden leer una instrucción y leer un valor de datos simultáneamente, si están en segmentos de memoria separados, ya que el procesador tiene (al menos) dos segmentos de memoria separados con buses de datos. La diferencia más obvia visible para el programador entre este tipo de arquitectura de Harvard modificada y una arquitectura pura de von Neumann es que, al ejecutar una instrucción desde un segmento de memoria, no se puede acceder al mismo segmento de memoria simultáneamente como datos.

Comparaciones

Se pueden utilizar tres características para distinguir las máquinas Harvard modificadas de las máquinas Harvard y von Neumann puras:

Las memorias de instrucciones y datos ocupan diferentes espacios de direcciones

Para las máquinas Harvard puras, hay una dirección "cero" en el espacio de instrucciones que se refiere a una ubicación de almacenamiento de instrucciones y una dirección separada "cero" en el espacio de datos que se refiere a una ubicación de almacenamiento de datos distinta. Por el contrario, von Neumann y las máquinas Harvard modificadas con caché dividida almacenan tanto las instrucciones como los datos en un solo espacio de direcciones, por lo que la dirección "cero" se refiere a una sola ubicación y si el patrón binario en esa ubicación se interpreta como una instrucción o se define como datos. por cómo está escrito el programa. Sin embargo, al igual que las máquinas Harvard puras, las máquinas Harvard modificadas con memoria de instrucciones como datos tienen espacios de direcciones separados, por lo que tienen direcciones separadas "cero" para el espacio de instrucciones y datos, por lo que esto no distingue ese tipo de máquinas Harvard modificadas de Harvard puro. máquinas.

Las memorias de instrucciones y datos tienen rutas de hardware separadas a la unidad central de procesamiento (CPU)

Este es el punto de las máquinas Harvard puras o modificadas, y por qué coexisten con la arquitectura von Neumann más flexible y general: las rutas de memoria separadas a la CPU permiten obtener instrucciones y acceder a los datos al mismo tiempo, mejorando el rendimiento. . Las máquinas de Harvard puras tienen vías separadas con espacios de direcciones separados. Las máquinas Harvard modificadas con caché dividida tienen rutas de acceso separadas para cachés de CPU u otras memorias estrechamente acopladas, pero una ruta de acceso unificada cubre el resto de la jerarquía de memoria . Un procesador de von Neumann solo tiene esa ruta de acceso unificada. Desde el punto de vista de un programador, un procesador Harvard modificado en el que las instrucciones y las memorias de datos comparten un espacio de direcciones suele tratarse como una máquina de von Neumann hasta que la coherencia de la caché se convierte en un problema, como ocurre con el código auto modificable y la carga de programas. Esto puede resultar confuso, pero estos problemas suelen ser visibles solo para los programadores e integradores de sistemas . Otras máquinas Harvard modificadas son como máquinas Harvard puras en este sentido.

Se puede acceder a las memorias de instrucciones y datos de diferentes formas

La máquina original de Harvard, la Mark I , almacenaba instrucciones en una cinta de papel perforada y datos en contadores electromecánicos. Sin embargo, esto se debió enteramente a las limitaciones de la tecnología disponible en ese momento. Hoy en día, una máquina de Harvard como el microcontrolador PIC podría usar una memoria flash de 12 bits de ancho para instrucciones y una SRAM de 8 bits de ancho para datos. Por el contrario, un microcontrolador de von Neumann, como un ARM7TDMI , o un núcleo Harvard ARM9 modificado , necesariamente proporciona un acceso uniforme a la memoria flash y SRAM (como bytes de 8 bits, en esos casos).

Usos modernos de la arquitectura de Harvard modificada

Fuera de las aplicaciones donde se requiere un DSP sin caché o un microcontrolador , la mayoría de los procesadores modernos tienen una caché de CPU que particiona instrucciones y datos.

También hay procesadores que son máquinas Harvard según la definición más rigurosa (que el programa y la memoria de datos ocupan espacios de direcciones diferentes), y solo se modifican en el sentido débil de que existen operaciones para leer y / o escribir la memoria del programa como datos. Por ejemplo, las instrucciones LPM (Load Program Memory) y SPM (Store Program Memory) en el Atmel AVR implementan dicha modificación. Se encuentran soluciones similares en otros microcontroladores como el PIC y Z8Encore. , muchas familias de procesadores de señales digitales como los núcleos TI C55x , y más. Debido a que la ejecución de instrucciones todavía está restringida al espacio de direcciones del programa, estos procesadores son muy diferentes a las máquinas von Neumann.

Tener espacios de direcciones separados crea ciertas dificultades en la programación con lenguajes de alto nivel que no respaldan directamente la noción de que las tablas de datos de solo lectura pueden estar en un espacio de direcciones diferente al de los datos de escritura normales (y, por lo tanto, deben leerse usando instrucciones diferentes) . El lenguaje de programación C puede admitir múltiples espacios de direcciones, ya sea a través de extensiones no estándar o mediante las extensiones ahora estandarizadas para admitir procesadores integrados .

Ver también

Notas

Referencias