En informática , una imagen del sistema es una copia serializada del estado completo de un sistema informático almacenado en algún formato no volátil , como un archivo ejecutable binario .
Si un sistema tiene todo su estado escrito en un disco (es decir, en una imagen de disco ), se puede generar una imagen del sistema copiando el disco a un archivo en otro lugar, a menudo con aplicaciones de clonación de discos . En muchos sistemas, no se puede crear una imagen completa del sistema mediante un programa de clonación de discos que se ejecute dentro de ese sistema porque la información se puede almacenar fuera de los discos y la memoria volátil, por ejemplo, en la memoria no volátil como las ROM de arranque.
Se dice que un sistema es capaz de utilizar imágenes del sistema si se puede apagar y restaurar posteriormente exactamente al mismo estado. En tales casos, las imágenes del sistema se pueden utilizar para realizar copias de seguridad .
La hibernación es un ejemplo que utiliza una imagen de la RAM de toda la máquina .
Una imagen de proceso es una copia del estado de un proceso determinado en un momento dado. Se utiliza a menudo para crear persistencia dentro de un sistema que de otro modo sería volátil. Un ejemplo común es un sistema de gestión de bases de datos (DBMS). La mayoría de los DBMS pueden almacenar el estado de su base de datos o bases de datos en un archivo antes de cerrarse (consulte volcado de base de datos ). El DBMS se puede reiniciar más tarde con la información de la base de datos intacta y continuar como si el software nunca se hubiera detenido. Otro ejemplo sería la función de hibernación de muchos sistemas operativos. Aquí, el estado de toda la memoria RAM se almacena en el disco, la computadora se pone en un modo de ahorro de energía y luego se restaura al funcionamiento normal.
Algunos emuladores ofrecen una función para guardar una imagen del sistema que se está emulando. En los videojuegos, esto suele denominarse " estado guardado" .
Otro uso es la movilidad del código : un agente móvil puede migrar entre máquinas guardando su estado, luego copiando los datos a otra máquina y reiniciando allí.
Algunos lenguajes de programación proporcionan un comando para tomar una imagen del sistema de un programa. Esta es normalmente una característica estándar en Smalltalk (inspirado por FLEX) y Lisp , entre otros lenguajes. El desarrollo en estos lenguajes es a menudo bastante diferente de muchos otros lenguajes de programación. Por ejemplo, en Lisp el programador puede cargar paquetes u otro código en una implementación de Lisp en ejecución utilizando el bucle read-eval-print , que normalmente compila los programas. Los datos se cargan en el sistema Lisp en ejecución. El programador puede entonces volcar una imagen del sistema, que contiene ese código precompilado y posiblemente personalizado, y también todos los datos de la aplicación cargada. A menudo esta imagen es un ejecutable, y puede ejecutarse en otras máquinas. Esta imagen del sistema puede ser la forma en que se distribuyen los programas ejecutables; este método ha sido utilizado a menudo por programas (como TeX y Emacs ) implementados en gran medida en Lisp, Smalltalk o lenguajes idiosincrásicos para evitar perder tiempo repitiendo el mismo trabajo de inicialización cada vez que se inician.
De forma similar, las máquinas Lisp se iniciaban desde imágenes Lisp, llamadas mundos. El mundo contiene el sistema operativo completo, sus aplicaciones y sus datos en un único archivo. También era posible guardar mundos incrementales, que contienen sólo los cambios de un mundo base. Antes de guardar el mundo, el sistema operativo de la máquina Lisp podía optimizar el contenido de la memoria (mejor distribución de la memoria, compactación de las estructuras de datos, ordenación de los datos, etc.).
Aunque su propósito es diferente, una "imagen del sistema" suele ser similar en estructura a un volcado de núcleo .