En un sentido informático general, superposición significa "el proceso de transferir un bloque de código de programa u otros datos a la memoria principal , reemplazando lo que ya está almacenado". [1] La superposición es un método de programación que permite que los programas sean más grandes que la memoria principal de la computadora . [2] Un sistema integrado normalmente usaría superposiciones debido a la limitación de la memoria física , que es la memoria interna de un sistema en chip , y la falta de instalaciones de memoria virtual .
La construcción de un programa de superposición implica dividir manualmente un programa en bloques de código objeto autónomos llamados superposiciones o enlaces , generalmente dispuestos en una estructura de árbol . [b] Los segmentos hermanos , aquellos que están en el mismo nivel de profundidad, comparten la misma memoria, llamada región de superposición [c] o región de destino . Un administrador de superposición, ya sea parte del sistema operativo o parte del programa de superposición, carga la superposición requerida desde la memoria externa en su región de destino cuando es necesario; esto puede ser automático o mediante código explícito. A menudo, los enlazadores brindan soporte para superposiciones. [3]
El siguiente ejemplo muestra las instrucciones de control que instruyen al Editor de vínculos de OS/360 a vincular un programa superpuesto que contiene una sola región, sangrada para mostrar la estructura (los nombres de los segmentos son arbitrarios):
INCLUYE SYSLIB(MOD1) INCLUYE SYSLIB(MOD2) SUPERPOSICIÓN A INCLUYE SYSLIB(MOD3) SUPERPOSICIÓN AA INCLUYE SYSLIB(MOD4) INCLUYE SYSLIB(MOD5) SUPERPOSICIÓN AB INCLUYE SYSLIB(MOD6) SUPERPOSICIÓN B INCLUYE SYSLIB(MOD7)
+--------------+ | Segmento raíz | | MOD1, MOD2 | +--------------+ | +----------+----------+ | | +-------------+ +-------------+ | Superposición A | | Superposición B | | MOD3 | | MOD7 | +-------------+ +-------------+ | +--------+--------+ | | +-------------+ +-------------+ | Superposición AA | | Superposición AB | | MOD4, MOD5 | | MOD6 | +-------------+ +-------------+
Estas instrucciones definen un árbol que consta del segmento residente permanente, llamado raíz , y dos superposiciones A y B que se cargarán después del final de MOD2. La superposición A en sí consta de dos segmentos superpuestos, AA y AB. En el momento de la ejecución, las superposiciones A y B utilizarán las mismas ubicaciones de memoria; AA y AB utilizarán las mismas ubicaciones después del final de MOD3.
Todos los segmentos entre la raíz y un segmento de superposición dado se denominan ruta .
A partir de 2015 [actualizar], la mayoría de las aplicaciones empresariales están pensadas para ejecutarse en plataformas con memoria virtual . Un desarrollador en una plataforma de este tipo puede diseñar un programa como si la restricción de memoria no existiera a menos que el conjunto de trabajo del programa superponga la memoria física disponible. Lo más importante es que el arquitecto puede centrarse en el problema que se está resolviendo sin la dificultad de diseño añadida de forzar el procesamiento en pasos restringidos por el tamaño de la superposición. Por tanto, el diseñador puede utilizar lenguajes de programación de nivel superior que no permiten al programador mucho control sobre el tamaño (por ejemplo, Java , C++ , Smalltalk ).
Aun así, las superposiciones siguen siendo útiles en los sistemas integrados. [4] Algunos procesadores de bajo coste utilizados en sistemas integrados no proporcionan una unidad de gestión de memoria (MMU). Además, muchos sistemas integrados son sistemas en tiempo real y las superposiciones proporcionan un tiempo de respuesta más determinado que la paginación . Por ejemplo, el software del sistema de aviónica primaria (PASS) del transbordador espacial utiliza superposiciones programadas. [5]
Incluso en plataformas con memoria virtual, los componentes de software como los códecs pueden estar desacoplados hasta el punto en que se pueden cargar y descargar según sea necesario .
IBM introdujo el concepto de trabajo en cadena [6] en FORTRAN II . El programa tenía que llamar explícitamente a la subrutina CHAIN para cargar un nuevo enlace, y el nuevo enlace reemplazaba todo el almacenamiento del enlace anterior, excepto el área COMÚN de Fortran.
IBM introdujo un manejo de superposición más general [7] en IBSYS / IBJOB , incluida una estructura de árbol y carga automática de enlaces como parte del procesamiento de CALL.
En OS/360, IBM amplió la función de superposición de IBLDR al permitir que un programa de superposición tuviera regiones de superposición independientes, cada una con su propio árbol de superposición. OS/360 también tenía un sistema de superposición más simple para rutinas SVC transitorias , utilizando áreas transitorias SVC de 1024 bytes.
En la era de los ordenadores domésticos, las superposiciones eran populares porque el sistema operativo y muchos de los sistemas informáticos en los que se ejecutaba carecían de memoria virtual y tenían muy poca RAM según los estándares actuales: el IBM PC original tenía entre 16K y 64K, según la configuración. Las superposiciones eran una técnica popular en Commodore BASIC para cargar pantallas gráficas. [2]
"Varios enlazadores DOS en la década de 1980 admitían [superposiciones] en una forma casi idéntica a la utilizada 25 años antes en los ordenadores mainframe". [4] [8] Los archivos binarios que contenían superposiciones de memoria tenían extensiones estándar de facto .OVL [8] o .OVR [9] (pero también se usaban extensiones de archivo numéricas como .000 , .001 , etc. para los archivos posteriores [10] ). Este tipo de archivo fue utilizado, entre otros, por WordStar [11] (que constaba del ejecutable principal WS.COM
y los módulos de superposición WSMSGS.OVR
, WSOVLY1.OVR
, MAILMERGE.OVR
y SPELSTAR.OVR
, donde los archivos de superposición " gordos " eran incluso idénticos en binario en sus puertos para CP/M-86 y MS-DOS [12] ), dBase [ 13] y el paquete de software de automatización de oficina Enable DOS de Enable Software . Turbo Pascal de Borland [14] [15] y el compilador GFA BASIC pudieron producir archivos .OVL.
Esto le permite ejecutar programas que, en efecto, son mucho más grandes que la cantidad de memoria de su computadora.
{{cite book}}
: |magazine=
ignorado ( ayuda ){{cite book}}
: |work=
ignorado ( ayuda ) (52 páginas){{cite book}}
: |work=
ignorado ( ayuda ) (8 páginas)[…] Un archivo PRL es un archivo binario
reubicable
, utilizado por
MP/M
y
CP/M Plus
para varios módulos distintos de
los archivos .COM
. El formato de archivo también se utiliza para archivos FID en
Amstrad PCW
. Hay varios formatos de archivo que utilizan versiones de PRL: SPR (System PRL), RSP (Resident System Process). LINK-80 también puede producir archivos OVL (superposición), que tienen un encabezado PRL pero no son reubicables. Los controladores
GSX
están en formato PRL; también lo son
las extensiones de sistema residente
(.RSX). […][3]
[…] La razón para sospechar tal diferencia es que la versión 3.2x también soportaba
CP/M-86
(las superposiciones son idénticas entre
DOS
y CP/M-86, solo el ejecutable principal es diferente) […] los archivos .OVR son 100% idénticos entre DOS y CP/M-86, con una bandera (claramente mostrada en el
manual
de WordStar 3.20 ) que cambia entre ellos en
tiempo de ejecución
[…] la interfaz del SO en WordStar es bastante estrecha y bien abstraída […] las superposiciones de WordStar 3.2x son 100% idénticas entre las versiones DOS y CP/M-86. Hay un interruptor de tiempo de ejecución que elige entre llamar a INT 21h (DOS) e INT E0h (CP/M-86). WS.COM no es lo mismo entre DOS y CP/M-86, aunque probablemente tampoco sea muy diferente. […]
La versión 1.1 tiene un nuevo sistema de administración de memoria dinámico (dMMS) que maneja las superposiciones de manera más eficiente: el producto requiere menos memoria, lo que resulta en una mayor disponibilidad de espacio para las aplicaciones. […] Los menores requisitos de memoria del producto de solo 450K de RAM brindan un mejor soporte de red porque ya no se requiere memoria de hardware adicional para admitir redes. […] Al acelerar las áreas de dBASE IV que dependen de la superposición, el nuevo dMMS mejora el rendimiento cuando se trabaja en el Centro de control y en programas que usan menús y ventanas.(5 páginas)
{{cite book}}
: |work=
ignorado ( ayuda ) (2+244+4 páginas)[…] La razón por la que Geos necesita 16 interrupciones es porque el esquema se utiliza para convertir las llamadas de función entre segmentos ("lejanos") en interrupciones, sin cambiar el tamaño del código. La razón por la que esto se hace es para que "algo" (el núcleo) pueda engancharse a sí mismo en cada llamada entre segmentos realizada por una aplicación Geos y asegurarse de que los segmentos de código adecuados se carguen desde la memoria virtual y se bloqueen. En términos de DOS , esto sería comparable a un cargador superpuesto, pero uno que se puede agregar sin requerir soporte explícito del compilador o la aplicación. Lo que ocurre es algo como esto: […] 1. El compilador de modo real genera una instrucción como esta: CALL <segment>:<offset> -> 9A <offlow><offhigh><seglow><seghigh> con <seglow><seghigh> normalmente definida como una dirección que debe corregirse en el momento de la carga dependiendo de la dirección donde se haya colocado el código. […] 2. El enlazador Geos convierte esto en otra cosa: INT 8xh -> CD 8x […] DB <seghigh>,<offlow>,<offhigh> […] Nótese que esto es nuevamente cinco bytes, por lo que se puede corregir "en su lugar". Ahora el problema es que una interrupción requiere dos bytes, mientras que una instrucción CALL FAR solo necesita uno. Como resultado, el vector de 32 bits (<seg><ofs>) debe comprimirse en 24 bits. […] Esto se logra de dos maneras: primero, la dirección <seg> se codifica como un "identificador" para el segmento, cuyo nibble más bajo siempre es cero. Esto ahorra cuatro bits. Además […] los cuatro bits restantes van al nibble bajo del vector de interrupción, creando así cualquier cosa desde INT 80h a 8Fh. […] El manejador de interrupciones para todos esos vectores es el mismo. "Desempaquetará" la dirección de la notación de tres bytes y medio, buscará la dirección absoluta del segmento y reenviará la llamada, después de haber realizado su tarea de carga de memoria virtual... El retorno de la llamada también pasará por el código de desbloqueo correspondiente. […] El nibble bajo del vector de interrupción (80h–8Fh) contiene los bits 4 a 7 del manejador de segmento. Los bits 0 a 3 de un manejador de segmento son (por definición de un manejador Geos) siempre 0. […] todas las API Geos se ejecutan a través del esquema de "superposición" […]: cuando una aplicación Geos se carga en la memoria, el cargador reemplazará automáticamente las llamadas a funciones en las bibliotecas del sistema por las llamadas basadas en INT correspondientes. De todos modos, estas no son constantes, sino que dependen del manejador asignado al segmento de código de la biblioteca.[…] Originalmente, Geos estaba previsto que se convirtiera al modo protegido desde el principio […], con el modo realsiendo solo una "opción heredada" […] casi cada línea de código ensamblador está lista para ello […]