La carga en cadena es un método utilizado por los programas de computadora para reemplazar el programa que se está ejecutando actualmente con un programa nuevo, utilizando un área de datos común para pasar información del programa actual al nuevo programa. Ocurre 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 en su totalidad el programa que se está ejecutando actualmente. Las superposiciones generalmente reemplazan solo una parte del programa en ejecución. Al igual que el uso de superposiciones, el uso de carga en cadena aumenta la carga de E/S de una aplicación.
En los programas de administrador de arranque del sistema operativo , la carga en cadena se utiliza para pasar el control desde el administrador 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 cual se arrancó y ejecutó el administrador de arranque.
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 con una imagen completamente nueva y el hilo actual comienza la ejecución de esa imagen. El área de datos común comprende las variables de entorno del proceso , que se conservan durante la llamada al sistema.
Además de la carga de cadena a nivel de proceso exec(), Linux admite la llamada al sistema kexec () para reemplazar todo el kernel del sistema operativo con una versión diferente. El nuevo kernel arranca como si se hubiera iniciado desde el encendido y no se conserva ningún proceso en ejecución.
En los programas BASIC , la carga en cadena es competencia de la CHAIN
declaración (o, en Commodore BASIC , la LOAD
declaración), que hace que el programa actual finalice y el programa encadenado se cargue e invoque (con, en esos dialectos de BASIC que lo admiten, un parámetro opcional que especifica el número de línea a partir del cual comenzará la ejecución, en lugar del valor predeterminado de la primera línea del nuevo programa). El área de datos común 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 en una CADENA. En otros BASIC, la COM
declaración [1] se puede utilizar junto con CHAIN
para especificar qué variables se conservarán como datos comunes en una operación en cadena.
La carga en cadena permite que los programas BÁSICOS ejecuten más código de programa del que podría caber en la memoria de programas y variables disponible. Por lo tanto, las aplicaciones escritas en BASIC podrían 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
van y vienen 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
o CALL LINK
que realiza la carga en cadena, preservando el contenido del almacenamiento COMÚN . [2] Esta no es la misma 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 la memoria del sistema operativo, esto puede resultar o no en la sustitución del código del programa que realiza la llamada en la memoria.