La carga en cadena es un método que utilizan los programas informáticos para reemplazar el programa que se está ejecutando actualmente por un programa nuevo, utilizando un área de datos común para pasar información del programa actual al nuevo. Se da en varias áreas de la informática.
La carga en cadena es similar al uso de superposiciones . Sin embargo, a diferencia de las superposiciones, la carga en cadena reemplaza el programa que se está ejecutando en ese momento en su totalidad. Las superposiciones generalmente reemplazan solo una parte del programa en ejecución. Al igual que el uso de superposiciones, el uso de la carga en cadena aumenta la carga de E/S de una aplicación.
En los programas de gestión de arranque del sistema operativo , la carga en cadena se utiliza para pasar el control del gestor de arranque a un sector de arranque . El sector de arranque de destino se carga desde el disco , reemplazando el sector de arranque en memoria desde el que se inició el propio gestor de arranque y se ejecutó.
En Unix (y en sistemas operativos similares a Unix ), la llamada al sistema exec() se utiliza para realizar la carga en cadena. La imagen del programa del proceso actual se reemplaza por una imagen completamente nueva y el hilo actual comienza la ejecución de esa imagen. El área de datos comunes comprende las variables de entorno del proceso , que se conservan a lo largo de la llamada al sistema.
Además de la carga de la cadena a nivel de proceso exec(), Linux admite la llamada al sistema kexec () para reemplazar todo el núcleo del sistema operativo con una versión diferente. El nuevo núcleo se inicia como si se hubiera iniciado al encender el sistema y no se conserva ningún proceso en ejecución.
En los programas BASIC , la carga en cadena es competencia de la CHAIN
sentencia (o, en Commodore BASIC , de la LOAD
sentencia), que hace que el programa actual se termine y que el programa encadenado se cargue y se invoque (con, en aquellos dialectos de BASIC que lo admiten, un parámetro opcional que especifica el número de línea desde el que debe comenzar la ejecución, en lugar del valor predeterminado de la primera línea del nuevo programa). El área de datos comunes varía según el dialecto particular de BASIC que se esté utilizando. En BBC BASIC , por ejemplo, solo se conserva un subconjunto específico de todas las variables a lo largo de una CADENA. En otros BASIC, la COM
sentencia [1] se puede utilizar junto con CHAIN
para especificar qué variables se conservarán como datos comunes a lo largo de una operación en cadena.
La carga en cadena permite que los programas BASIC ejecuten más código de programa del que cabe en la memoria de programa y variable disponible. Las aplicaciones escritas en BASIC pueden ser mucho más grandes que el tamaño de la memoria de trabajo, a través de un conjunto de programas cooperativos que CHAIN
se intercambian entre sí a medida que el flujo del programa se mueve dentro de la aplicación general.
Muchas versiones de Fortran incluyen una declaración CALL CHAIN
or CALL LINK
que realiza la carga en cadena, preservando el contenido del almacenamiento COMÚN . [2] Esto no es lo mismo que la LINK
subrutina no relacionada en GNU Fortran . [3]
OS/360 y sus sucesores utilizan la XCTL
macro (para "control de transferencia") para la carga en cadena. Debido a la gestión de memoria del sistema operativo, esto puede o no resultar en el reemplazo del código del programa que realiza la llamada en la memoria.