Di recente ho iniziato a studiare assembly e sono venuto a conoscenza degli script dei linker e di altri dettagli di basso livello della programmazione hardware. Sto anche insegnando a me stesso l'architettura del computer e da qualche parte lungo la linea ho avuto paura che la mia immagine del modello di memoria potesse essere stata sbagliata da sempre.
Secondo quello che ho capito attualmente, tutto il codice e i dati risiedono sulla memoria non volatile subito dopo aver "masterizzato" il binario su un processore: la RAM volatile non contiene nulla al momento del ripristino. Quando il programma inizia a "eseguirsi", lo fa dall'indirizzo 0x0000 che è quasi sempre (AFAIK) l'indirizzo più basso in Flash. Pertanto, le istruzioni vengono bloccate sul bus che collega Flash al core della CPU ed è qui che avviene l'esecuzione effettiva. Tuttavia, quando parliamo della CPU che recupera o memorizza dati dalla memoria, di solito parliamo di RAM - Sono consapevole che possiamo leggere / scrivere anche dati dalla memoria del programma (l'ho visto fatto su AVR) ma non è così comune? È perché la RAM è più veloce della ROM che preferiamo archiviare i dati lì?
La risposta accettata a questa domanda afferma che la maggior parte dei pezzi di codice viene eseguita dalla RAM.
Questo significa che il codice di runtime di avvio (che viene eseguito da Flash) deve copiare tutti i codici operativi del programma da Flash a RAM e in qualche modo mappa gli indirizzi in Flash per puntare alla RAM in modo che la CPU recuperi i codici operativi da lì? È simile al processo in cui spostiamo le sezioni .data dalla ROM alla RAM all'avvio?
Posso immaginare che ciò sia più semplice nelle architetture von Neumann in cui il programma e le memorie dei dati condividono un bus, ma nelle architetture di Harvard non significherebbe che tutto il codice e i dati devono passare prima attraverso i registri della CPU?
Come probabilmente puoi immaginare, sono un po 'troppo confuso da tutta questa faccenda. Avendo sempre programmato a un livello di astrazione più elevato, sono facilmente turbato da tali dettagli. Qualsiasi aiuto è apprezzato.