¿Qué es una imagen de software?

Debido a la redacción que está utilizando, me parece que está hablando de software que se ejecutará en algún tipo de sistema integrado en lugar de software que se implementará como una aplicación de escritorio u otra variante.

Antes de que pueda ejecutar un programa en una pieza específica de hardware, hay varios pasos que deben seguirse para convertir el código fuente que escribió en algo que realmente pueda ser interpretado por una máquina.

Su código fuente está escrito en un lenguaje que tiene cierta sintaxis y semántica y que es legible para usted, mientras que un procesador espera y entiende solo 1s y 0s.

Cuando se trabaja con lenguajes compilados, hay una serie de herramientas que, cuando se usan en un orden específico y se alimentan con las entradas correctas, producirán lo que comúnmente se conoce como imagen de software. Esta imagen de software es lo que finalmente cargará en el objetivo.

Dependiendo de su hardware y de cómo construya su cadena de herramientas, las herramientas para producir la imagen del software variarán, pero seguramente necesitará un preprocesador, un compilador y un vinculador.

El código fuente se pasa al preprocesador que resolverá algunas cosas (macros, incluye, directivas de preprocesador y otras), en este punto tiene un archivo intermedio que aún puede leer. Luego, el archivo preprocesado se pasa al compilador que generará un archivo objeto. Tienes que decirle al compilador cómo y qué archivos tomar para producir los archivos de objetos correctos.

Finalmente, el enlazador combinará los diversos archivos de objetos del paso anterior en la forma en que se lo indica y producirá la imagen binaria como resultado (el enlazador manejará el enlace de bibliotecas y otras cosas que no se pudieron resolver en la fase de compilación) .

Instalar o probar una imagen de software significa cargar la imagen binaria que produjo en el último paso en el hardware de destino. La carga normalmente se realiza copiando la imagen en un almacenamiento de memoria no volátil.

Esta es una descripción amplia del proceso y no pretende ser exhaustiva.

Solo he escuchado ese término utilizado para ciertos lenguajes de programación como Forth, Lisp y Smalltalk. Una imagen es una instantánea del estado de ejecución de un programa. Se puede serializar para almacenamiento persistente. Se puede volver a cargar y la ejecución del programa se puede reanudar desde donde se dejó. Es un mecanismo muy poderoso en la programación y es una lástima que no haya tenido una adopción mucho más amplia.

Para obtener más información, lea Dirty Little Secret.