Recientemente comencé a aprender ensamblaje y conocí los scripts de enlazador y otros detalles de bajo nivel de programación de hardware. También me estoy enseñando arquitectura de computadora y en algún punto de la línea llegué a temer que mi imagen del modelo de memoria podría haber estado equivocada todo el tiempo.
Según lo que entiendo actualmente, todo el código y los datos residen en la memoria no volátil justo después de que 'quememos' el binario en un procesador; la RAM volátil no contiene nada al reiniciar. Cuando el programa comienza a 'ejecutarse', lo hace desde la dirección 0x0000, que es casi siempre (AFAIK) la dirección más baja en Flash. Por lo tanto, las instrucciones se enganchan en el bus que conecta Flash al núcleo de la CPU y ahí es donde tiene lugar la ejecución real. Sin embargo, cuando hablamos de que la CPU está recuperando o almacenando datos de la memoria, generalmente estamos hablando de RAM: soy consciente de que también podemos leer / escribir datos de la memoria del programa (lo he visto en AVR) pero no es tan común? ¿Es porque la RAM es más rápida que la ROM que preferimos almacenar datos allí?
La respuesta aceptada a esta pregunta dice que la mayoría de las piezas de código se ejecutan sin RAM.
¿Significa esto que el código de tiempo de ejecución de inicio (que se ejecuta desde Flash) tiene que copiar todos los códigos de operación del programa de Flash a RAM y de alguna manera asigna las direcciones en Flash para apuntar a la RAM de modo que la CPU obtenga los códigos de operación desde allí? ¿Es similar al proceso en el que movemos las secciones .data de ROM a RAM al inicio?
Puedo imaginar que esto sea más simple en las arquitecturas de von Neumann, donde el programa y las memorias de datos comparten un bus, pero en las arquitecturas de Harvard, ¿no significaría que todo el código y los datos tienen que pasar primero por los registros de la CPU?
Como probablemente pueda adivinar, todo este asunto me confunde un poco. Habiendo programado siempre en un nivel de abstracción más alto, me molestan fácilmente con tales detalles. Cualquier ayuda es apreciada.