stringtranslate.com

Arquitectura Harvard modificada

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

Arquitectura de Harvard

La computadora original de arquitectura Harvard, la Harvard Mark I , empleaba sistemas de memoria completamente separados para almacenar instrucciones y datos. La CPU buscaba la siguiente instrucción y cargaba o almacenaba datos simultáneamente [1] e independientemente. 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 caché de CPU ) se debe acceder a ellos por turno.

La separación física de la memoria de instrucciones y de datos se considera a veces la característica distintiva de las computadoras modernas de arquitectura Harvard. Con los microcontroladores (sistemas informáticos completos integrados en chips individuales), el uso de diferentes tecnologías de memoria para instrucciones (por ejemplo, memoria flash ) y datos (normalmente memoria de lectura/escritura ) en las máquinas de von Neumann se está volviendo popular. La verdadera distinción de una máquina Harvard es que la memoria de instrucciones y 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 como se describió anteriormente 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, leer datos desde el almacenamiento en disco a la memoria y luego ejecutarlos como código, o sistemas de software autooptimizados 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 automodificable , 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.

Arquitectura Harvard modificada

En consecuencia, algunas máquinas Harvard puras son productos especializados. La mayoría de las computadoras modernas, en cambio, implementan una arquitectura Harvard modificada . Esas modificaciones son diversas formas de relajar la estricta separación entre código y datos, al tiempo que se sigue admitiendo el acceso simultáneo a datos e instrucciones de mayor rendimiento de la arquitectura Harvard.

Arquitectura de caché dividida (o casi de 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 único espacio de direcciones para instrucciones y datos, lo 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. [ cita requerida ] 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 necesitan ser conscientes de problemas como la coherencia de la caché , si el almacenamiento no modifica ni invalida una copia en caché de la instrucción en una caché de instrucciones.

Arquitectura de instrucciones-memoria-como-datos

Otro cambio preserva 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, dichas máquinas no siempre se consideran una arquitectura Harvard "modificada":

Arquitectura de datos y memoria como instrucción

Algunos procesadores de arquitectura Harvard, como el Maxim Integrated MAXQ, pueden ejecutar instrucciones extraídas de cualquier segmento de memoria, a diferencia del procesador Harvard original, que solo puede ejecutar instrucciones extraídas del segmento de memoria del programa. Estos procesadores, al igual que otros procesadores de arquitectura Harvard (y a diferencia de la arquitectura von Neumann pura), 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 independientes. La diferencia más obvia y visible para el programador entre este tipo de arquitectura Harvard modificada y una arquitectura von Neumann pura es que, cuando se ejecuta una instrucción desde un segmento de memoria, no se puede acceder simultáneamente al mismo segmento de memoria como datos. [3] [4]

Comparaciones

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

Las memorias de instrucciones y datos ocupan espacios de direcciones diferentes

En el caso de las máquinas Harvard puras, existe una dirección "cero" en el espacio de instrucciones que hace referencia a una ubicación de almacenamiento de instrucciones y una dirección "cero" independiente en el espacio de datos que hace referencia a una ubicación de almacenamiento de datos distinta. Por el contrario, las máquinas Harvard modificadas de von Neumann y de caché dividida almacenan tanto instrucciones como datos en un único espacio de direcciones, por lo que la dirección "cero" hace referencia a una única ubicación y el hecho de que el patrón binario en esa ubicación se interprete como una instrucción o como datos se define según cómo se escriba 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 independientes, por lo que tienen direcciones "cero" independientes para el espacio de instrucciones y datos, por lo que esto no distingue a ese tipo de máquinas Harvard modificadas de las máquinas Harvard puras.

Las memorias de instrucciones y datos tienen rutas de hardware separadas hacia 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 Harvard puras tienen rutas separadas con espacios de direcciones separados. Las máquinas Harvard modificadas de 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 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 memorias de instrucciones y datos comparten un espacio de direcciones generalmente se trata como una máquina von Neumann hasta que la coherencia de la caché se convierte en un problema, como con el código automodificable y la carga de programas. Esto puede ser confuso, pero estos problemas generalmente solo son visibles para los programadores e integradores de sistemas . [ aclaración necesaria ] 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 maneras

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

Usos modernos de la arquitectura Harvard modificada

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

También hay procesadores que son máquinas Harvard según la definición más rigurosa (la memoria de programa y de datos ocupan espacios de direcciones diferentes) y solo se modifican en el sentido débil de que hay operaciones para leer y/o escribir la memoria de programa como datos. Por ejemplo, las instrucciones LPM (cargar memoria de programa) y SPM (almacenar memoria de programa) en el AVR de Atmel implementan dicha modificación. Se encuentran soluciones similares en otros microcontroladores como el PIC y el 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 de von Neumann. El cableado externo también puede convertir un núcleo de CPU estrictamente Harvard en uno Harvard modificado, por ejemplo, simplemente combinando las señales `PSEN#` (lectura del espacio de programa) y `RD#` (lectura del espacio de datos externo) externamente a través de una compuerta AND en un microcontrolador de la familia Intel 8051 , se dice que el microcontrolador está "conectado a von Neumann", ya que los espacios de direcciones de programa y datos externos se unifican.

Tener espacios de direcciones separados crea ciertas dificultades en la programación con lenguajes de alto nivel que no admiten 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 normales que se pueden escribir (y, por lo tanto, deben leerse utilizando 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 [a] o a través de las extensiones ahora estandarizadas para admitir procesadores integrados .

Véase también

Notas

  1. ^ Los encargados de la biblioteca C estándar para el puerto GCC al microcontrolador Atmel AVR, que tiene espacios de direcciones separados para código y datos, afirman en Data in Program Space que los espacios de direcciones separados implican una arquitectura Harvard. Continúan explicando que el lenguaje C solo tiene un espacio de direcciones de puntero y, por lo tanto, no fue diseñado para máquinas con arquitectura Harvard. Luego describen las extensiones no estándar adoptadas por GCC para el AVR y la biblioteca C del AVR para permitir el acceso a los datos almacenados en la memoria de instrucciones (programa). Incluso explican por qué no se puede utilizar la palabra clave const para distinguir los objetos de datos que se colocarán en la memoria de instrucciones.

Referencias

  1. ^ Manual de funcionamiento de la calculadora automática controlada por secuencia. OXFORD UNIVERSITY PRESS. 1946. pág. 4.
  2. ^ "AVR109: Autoprogramación" (PDF) (Nota de aplicación). Atmel. Junio ​​de 2004. Consultado el 29 de enero de 2015 .
  3. ^ "Guía del usuario de la familia MAXQ". Maxim Integrated . Septiembre de 2008. Secciones 1.2 "Arquitectura de memoria de Harvard" y 2.5 "Acceso a memoria pseudo-Von Neumann".
  4. ^ Konark Goel et al. Acerca del puerto MAXQ GCC.