14 votos

Flash y RAM : Ejecución de Código

Recientemente he comenzado a aprender de la asamblea y vine a saber acerca de vinculador de secuencias de comandos y otros detalles de bajo nivel de programación de hardware. También estoy enseñando a mí mismo de arquitectura de computadores y en algún lugar a lo largo de la línea que me llegó a temer que mi imagen de la modelo de memoria que podría haber estado equivocado todo el tiempo.

De acuerdo a lo que entiendo en la actualidad, todo el código y los datos residen en la memoria no-volátil, después de que nos 'quemar' el binario en un procesador, la memoria RAM que está siendo volátil contiene nada en el momento del restablecimiento. Cuando se inicia el programa 'ejecutar' lo hace a partir de la dirección 0x0000, que es casi siempre (AFAIK) la dirección más baja en Flash. Así, las instrucciones se pegó a la conexión de bus de Flash para el núcleo de la CPU y es que, cuando la ejecución se lleva a cabo. Sin embargo, cuando hablamos de la CPU para recoger o almacenar datos de la memoria, normalmente estamos hablando de RAM - soy consciente de que podemos leer/escribir datos desde la memoria de programa (yo lo he visto hacer en AVRs), pero no es tan común? Es porque la memoria RAM es más rápida que la ROM que preferimos para almacenar datos?

El aceptó responder a esta pregunta, dice que la mayoría de los fragmentos de código que se ejecute fuera de la RAM.

¿Significa esto que el inicio de código de tiempo de ejecución (que en sí se ejecuta desde una memoria Flash) tiene que copiar todo el programa de opcodes de Flash a la memoria RAM y de alguna manera los mapas de las direcciones en Flash para que apunte a la memoria RAM para que la CPU recupera los códigos de operación a partir de ahí? Es similar al proceso en el que nos movemos el .secciones de datos de la ROM a la RAM en el inicio?

Me imagino que esto sea más sencillo de von Neumann arquitecturas donde el programa y memoria de datos, compartir un autobús, pero en Harvard arquitecturas no quiere esto decir que todo el código y los datos tienen que pasar a través de los registros de la CPU en primer lugar?

Como usted probablemente puede adivinar, estoy un poco confundido por todo este asunto. Tener siempre programado en un nivel superior de abstracción soy fácilmente preocupada con tales detalles. Cualquier ayuda es muy apreciada.

14voto

jns Puntos 449

Esto depende del dispositivo.

La memoria RAM puede ser construido más rápido que Flash; esto empieza a ser importante en acerca de la gama de 100MHz.

Simple microcontroladores

Pequeño lento microcontroladores ejecutar directamente fuera de Flash. Estos sistemas por lo general tienen más de Flash de SRAM.

Sistemas de rango medio

Una vez que su dispositivo se hace más rápido, a continuación, la situación es un poco diferente. Gama media BRAZO sistemas pueden hacerlo así, o pueden tener una máscara ROM gestor de arranque que hace algo más inteligente: tal vez la descarga de código de USB o memorias eeprom externa en interna SRAM.

Sistemas de gran tamaño

Más grandes, más rápidos serán los sistemas externos de DRAM y Flash externo. Esto es típico de un teléfono móvil de la arquitectura. En este punto, hay un montón de memoria RAM disponible y es más rápido que el de Flash, por lo que el gestor de arranque se copia y ejecutarlo. Esto puede implicar el traspaleo a través de los registros de la CPU o puede implicar una transferencia DMA si un DMA unidad está disponible.

Harvard arquitecturas son típicamente pequeños, así que no te molestes con la copia de la fase. He visto un BRAZO con un "híbrido de harvard", que es un único espacio de direcciones que contiene varios recuerdos, sino dos diferentes fetch unidades. El código y los datos pueden ser recuperados en paralelo, siempre que no sean de la misma memoria. Así que usted puede recuperar el código de Flash y los datos de la SRAM, o código de SRAM y los datos de DRAM etc.

1voto

rahulb Puntos 314

Lo que usted está diciendo no es completamente cierto o falso. Hay diferentes escenarios de este.

Eso depende de la programación en el raw de hardware o en el hardware instalado con el sistema operativo.

El sistema operativo que se ejecuta en el equipo de propósito general obtiene el código de la H. D. D, y la almacena en la memoria RAM para un acceso más rápido. Si tu procesador al intentar recuperar directamente desde el disco duro en una base en curso, a continuación, las operaciones sería mucho más lento debido a la velocidad de la falta de coincidencia entre los dos. Por lo que su RAM entra en juego cuando una de las piezas de código repetitivo se almacena para un acceso más rápido. Y que también incluso más está disponible en los procesadores, la memoria caché para que sea aún más rápida.

Ahora, cuando usted está trabajando en micro controlador que depende totalmente de usted donde ubicar sus datos en el chip. Si los datos estáticos se puede querer en memoria de código que va a guardar su memoria RAM, que es comparativamente mucho menor que la memoria de Código. En lenguaje C cuando se inicializa el tipo de datos mediante estática o en algunos compilador const prefijo datos serán almacenados en la memoria de código o de lo contrario serán almacenados en la RAM. Y en la asamblea de utilizar directamente DB (a Definir de Bytes en el caso de Básica 8051) para inicializar los datos sobre la ubicación particular. Ahora incluso en algunos controladores como PIC BRAZO puede escribir de la ROM en el tiempo de ejecución pero obtención de datos va a tomar mucho tiempo.

Además, hay gestor de Arranque, el hardware en el nivel medio y sofisticados controladores que le dice al controlador o procesador de donde ejecutar la puesta en marcha del código de o es en sí misma el inicio de código que es en realidad es segmentado en la memoria Así que hay un montón de posibilidades debido adelanto, yo diría más bien híbridos advnacement en la industria que mishmashes el concepto convencional de RAM ROM y recuerdos. Así que, básicamente, su confusión es válido.

1voto

abby hairboat Puntos 130

La memoria RAM es generalmente más rápido que flash, pero realmente no importa hasta alcanzar velocidades de reloj en exceso de 80-100MHz o tan largo como el de flash tiempo de acceso es más rápido que el tiempo que se tarda en ejecutar una instrucción, no debería importar.

La construcción física de RAM nos permite construir muy rápido de los dispositivos; mucho más rápido que flash. En este punto, tiene sentido para copiar bloques de código en la memoria RAM antes de la ejecución. Esto también trae beneficios adicionales para el desarrollador, tales como ser capaz de modificar el código en tiempo de ejecución.

en von Neumann arquitecturas donde el programa y memoria de datos, compartir un autobús, pero en Harvard arquitecturas no quiere esto decir que todo el código y los datos tienen que pasar a través de los registros de la CPU en primer lugar?

No necesariamente. Aquí es donde virtuales de direccionamiento. En lugar de código de programa de referencia para el crudo de hardware de direcciones de la memoria RAM, en realidad hace referencia a un espacio de direcciones virtuales. Los bloques de espacio de direcciones virtuales se asignan a la memoria física de los dispositivos, lo que puede ser la memoria RAM, ROM, flash, o incluso dispositivo de búferes.

Por ejemplo, cuando se hace referencia a la dirección de 0x000f0004 en un micro, podría ser la lectura de la dirección de 0x0004 de la flash. La dirección virtual es 0x000f0004, pero la dirección física es sólo 0x0004 - toda la 0x000fxxxx espacio de direcciones se asignan a una de 4 kb de memoria física del dispositivo. Este es sólo un ejemplo, por supuesto, y el método de gestión y organización de espacio de direcciones virtual difiere enormemente entre arquitecturas.

Como tal, cuando dice que "el programa comienza a ejecutar [...] de la dirección 0x0000, que es casi siempre la dirección más baja en flash", no está garantizada para ser correcta. De hecho, muchos de los microcontroladores de inicio en 0x1000.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X