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 para 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 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 sentencias de control que indican al OS/360 Linkage Editor que vincule un programa superpuesto que contiene una sola región, con sangría para mostrar la estructura (los nombres de los segmentos son arbitrarios):
INCLUIR SYSLIB(MOD1) INCLUIR SYSLIB(MOD2) SUPERPOSICIÓN A INCLUIR SYSLIB(MOD3) SUPERPOSICIÓN AA INCLUIR SYSLIB(MOD4) INCLUIR SYSLIB(MOD5) SUPERPOSICIÓN AB INCLUIR SYSLIB(MOD6) SUPERPOSICIÓN B INCLUIR 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 declaraciones definen un árbol que consta del segmento residente permanente, llamado raíz , y dos superposiciones A y B que se cargarán una vez finalizado MOD2. La propia superposición A 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 superpuesto determinado 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 dicha plataforma puede diseñar un programa como si la restricción de memoria no existiera a menos que el conjunto de trabajo del programa exceda la memoria física disponible. Lo más importante es que el arquitecto puede centrarse en el problema que se resuelve sin la dificultad de diseño añadida de forzar el procesamiento en pasos limitados por el tamaño de la superposición. Por lo tanto, el diseñador puede utilizar lenguajes de programación de nivel superior que no le permiten al programador mucho control sobre el tamaño (por ejemplo, Java , C++ , Smalltalk ).
Aún así, las superposiciones siguen siendo útiles en sistemas integrados. [4] Algunos procesadores de bajo costo utilizados en sistemas integrados no proporcionan una unidad de administració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 primario (PASS) del transbordador espacial utiliza superposiciones programadas. [5]
Incluso en plataformas con memoria virtual, los componentes de software, como los códecs , pueden desacoplarse hasta el punto de poder cargarse y descargarse según sea necesario .
IBM introdujo el concepto de trabajo en cadena [6] en FORTRAN II . El programa tuvo que llamar explícitamente a la subrutina CHAIN para cargar un nuevo enlace, y el nuevo enlace reemplazó todo el almacenamiento del enlace antiguo 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 LLAMADA.
En OS/360, IBM amplió la función de superposición de IBLDR al permitir que un programa de superposición tenga 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 las computadoras domésticas, 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: la PC IBM 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 de DOS en la década de 1980 admitían [superposiciones] en una forma casi idéntica a la utilizada 25 años antes en las computadoras centrales". [4] [8] Los archivos binarios que contienen superposiciones de memoria tenían extensiones estándar de facto .OVL [8] o .OVR [9] (pero también usaban extensiones de archivos numéricos como .000 , .001 , etc. para archivos posteriores [10] ) . Este tipo de archivo fue utilizado, entre otros, por WordStar [11] (que consta del ejecutable principal WS.COM
y los módulos de superposición WSMSGS.OVR
, y , donde los archivos de superposición " gordos " eran incluso binarios idénticos en sus puertos para CP/M-86 y MS-DOS WSOVLY1.OVR
. [12] ), dBase , [13] y el paquete de software de automatización de oficinas Enable DOS de Enable Software . Turbo Pascal de Borland [14] [15] y el compilador GFA BASIC pudieron producir archivos .OVL.MAILMERGE.OVR
SPELSTAR.OVR
Esto le permite ejecutar programas que, de hecho, 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 (Proceso del sistema residente).
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 del sistema residente
(.RSX).
[…][3]
[…] La razón para sospechar tal diferencia es que la versión 3.2x también soporta
CP/M-86
(las superposiciones son idénticas entre
DOS
y CP/M-86, sólo el ejecutable principal es diferente) […] los archivos .OVR son 100% idéntico entre DOS y CP/M-86, con una bandera (que se muestra claramente en el manual
de WordStar 3.20
) que cambia entre ellos en
tiempo de ejecución
[…] la interfaz del sistema operativo en WordStar es bastante estrecha y bien abstracta […] el WordStar 3.2x Las superposiciones 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ámica (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 requisitos de memoria más bajos del producto, de solo 450 KB de RAM, brindan soporte de red mejorado 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 llamadas a funciones entre segmentos ("lejos") 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 conectarse a 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 de superposición, pero se puede agregar sin requerir soporte explícito del compilador o la aplicación. Lo que sucede es algo como esto: […] 1. El compilador en modo real genera una instrucción como esta: CALL <segment>:<offset> -> 9A <offlow><offhigh><seglow><seghigh> with <seglow>< seghigh> normalmente se define 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> […] Tenga en cuenta que nuevamente son cinco bytes, por lo que puede ser fijado "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 mediante dos cosas: primero, la dirección <seg> se codifica como un "identificador" del segmento, cuyo cuarteto más bajo es siempre cero. Esto ahorra cuatro bits. Además […] los cuatro bits restantes van al cuarteto bajo del vector de interrupción, creando así cualquier valor desde INT 80h hasta 8Fh. […] El controlador de interrupciones para todos esos vectores es el mismo. "Descomprimirá" 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 hecho la carga de la memoria virtual... El regreso de la llamada también pasar por el código de desbloqueo correspondiente. […] El mordisco bajo del vector de interrupción (80h–8Fh) contiene los bits 4 a 7 del identificador del segmento. Los bits 0 a 3 de un identificador de segmento son (por definición de identificador de Geos) siempre 0. […] todas las API de Geos se ejecutan mediante el esquema de "superposición" […]: cuando una aplicación Geos se carga en la memoria, el cargador automáticamente reemplace las llamadas a funciones en las bibliotecas del sistema por las correspondientes llamadas basadas en INT. De todos modos, estos no son constantes, sino que dependen del identificador asignado al segmento de código de la biblioteca.siendo sólo una "opción heredada" […] casi todas las líneas de código ensamblador están listas para ello […]