В общем вычислительном смысле наложение означает «процесс передачи блока программного кода или других данных в основную память с заменой того, что уже сохранено». [1] Наложение — это метод программирования , который позволяет программам занимать больше места, чем основная память компьютера . [2] Встроенная система обычно использует оверлеи из-за ограничения физической памяти , которая является внутренней памятью для системы-на-кристалле , и отсутствия средств виртуальной памяти .
Создание программы-наложения включает ручное разделение программы на автономные блоки объектного кода , называемые наложениями или ссылками , обычно расположенные в древовидной структуре . [b] Одноуровневые сегменты, находящиеся на одном и том же уровне глубины, используют одну и ту же память, называемую областью наложения [c] или областью назначения . Менеджер наложения, являющийся частью операционной системы или частью программы наложения, загружает необходимое наложение из внешней памяти в регион назначения, когда это необходимо; это может происходить автоматически или с помощью явного кода. Часто компоновщики обеспечивают поддержку наложений. [3]
В следующем примере показаны операторы управления, которые предписывают редактору связей OS/360 связать программу-наложение, содержащую одну область с отступом для отображения структуры (имена сегментов произвольны):
ВКЛЮЧИТЬ SYSLIB(MOD1) ВКЛЮЧИТЬ SYSLIB(MOD2) НАЛОЖЕНИЕ А ВКЛЮЧИТЬ SYSLIB(MOD3) НАВЕРХ AA ВКЛЮЧИТЬ SYSLIB(MOD4) ВКЛЮЧИТЬ SYSLIB(MOD5) НАЛОЖЕНИЕ AB ВКЛЮЧИТЬ SYSLIB(MOD6) НАЛОЖЕНИЕ Б ВКЛЮЧИТЬ SYSLIB (MOD7)
+--------------+ | Корневой сегмент | | МОД1, МОД2 | +--------------+ | +----------+----------+ | | +-------------+ +-------------+ | Наложение А | | Наложение Б | | МОД3 | | МОД7 | +-------------+ +-------------+ | +--------+--------+ | | +-------------+ +-------------+ | Наложение AA | | Наложение AB | | МОД4, МОД5 | | МОД6 | +-------------+ +-------------+
Эти операторы определяют дерево, состоящее из постоянно расположенного сегмента, называемого корнем , и двух наложений A и B, которые будут загружены после окончания MOD2. Само наложение A состоит из двух сегментов наложения: AA и AB. Во время выполнения оверлеи A и B будут использовать одни и те же ячейки памяти; После окончания MOD3 AA и AB будут использовать одни и те же места.
Все сегменты между корнем и данным сегментом наложения называются путем .
По состоянию на 2015 год [обновлять]большинство бизнес-приложений предназначены для работы на платформах с виртуальной памятью . Разработчик на такой платформе может спроектировать программу так, как будто ограничения памяти не существует, если только рабочий набор программы не превышает доступную физическую память. Самое главное, что архитектор может сосредоточиться на решаемой проблеме без дополнительных сложностей проектирования, связанных с разделением обработки на этапы, ограниченные размером наложения. Таким образом, разработчик может использовать языки программирования более высокого уровня, которые не позволяют программисту сильно контролировать размер (например, Java , C++ , Smalltalk ).
Тем не менее, наложения остаются полезными во встроенных системах. [4] Некоторые недорогие процессоры, используемые во встроенных системах, не имеют блока управления памятью (MMU). Кроме того, многие встроенные системы являются системами реального времени , и оверлеи обеспечивают более определенное время отклика, чем пейджинг . Например, программное обеспечение основной системы авионики космического корабля (PASS) использует запрограммированные наложения. [5]
Даже на платформах с виртуальной памятью программные компоненты , такие как кодеки , могут быть отделены до такой степени, что их можно будет загружать и выгружать по мере необходимости .
IBM представила концепцию цепочки заданий [6] в FORTRAN II . Программа должна была явно вызвать подпрограмму CHAIN для загрузки новой ссылки, и новая ссылка заменила все хранилище старой ссылки, за исключением области FORTRAN COMMON.
IBM представила более общую обработку наложений [7] в IBSYS / IBJOB , включая древовидную структуру и автоматическую загрузку ссылок как часть обработки CALL.
В OS/360 IBM расширила возможности наложения IBLDR, разрешив программе наложения иметь независимые области наложения, каждая со своим собственным деревом наложения. OS/360 также имела более простую систему наложения для временных подпрограмм SVC , используя 1024-байтовые временные области SVC.
В эпоху домашних компьютеров оверлеи были популярны, потому что операционная система и многие компьютерные системы, на которых она работала, не имели виртуальной памяти и имели очень мало оперативной памяти по нынешним стандартам: оригинальный IBM PC имел от 16 до 64 КБ, в зависимости от конфигурации. Наложения были популярным методом в Commodore BASIC для загрузки графических экранов. [2]
«Некоторые компоновщики DOS в 1980-х годах поддерживали [оверлеи] в форме, почти идентичной той, которая использовалась 25 годами ранее на мэйнфреймах». [4] [8] Двоичные файлы , содержащие наложения памяти, де-факто имели стандартные расширения .OVL [8] или .OVR [9] (но также использовались числовые расширения файлов, такие как .000 , .001 и т. д. для последующих файлов [10] ). . Этот тип файлов использовался, среди прочего, WordStar [11] (состоявший из основного исполняемого файла WS.COM
и модулей оверлея WSMSGS.OVR
, WSOVLY1.OVR
, MAILMERGE.OVR
и SPELSTAR.OVR
, где « толстые » файлы оверлея были даже двоично идентичными в своих портах для CP/M-86 и MS-DOS). [12] ), dBase , [13] и пакет программного обеспечения для автоматизации офиса Enable DOS от Enable Software . Borland Turbo Pascal [14] [15] и компилятор GFA BASIC могли создавать файлы .OVL.
Это позволяет запускать программы, размер которых, по сути, намного превышает объем памяти вашего компьютера.
{{cite book}}
: |magazine=
игнорируется ( помощь ){{cite book}}
: |work=
игнорируется ( помощь ) (52 страницы){{cite book}}
: |work=
игнорируется ( помощь ) (8 страниц)[…] Файл PRL — это
перемещаемый
двоичный файл, используемый
MP/M
и
CP/M Plus
для различных модулей, кроме
файлов .COM
. Этот формат файла также используется для файлов FID на
Amstrad PCW
. Существует несколько форматов файлов, в которых используются версии PRL: SPR (системный PRL), RSP (резидентный системный процесс). LINK-80 также может создавать файлы OVL (оверлеи), которые имеют заголовок PRL, но не подлежат перемещению. Драйверы
GSX
имеют формат PRL; то же самое относится и к
резидентным системным расширениям
(.RSX). […][3]
[…] Причина подозревать такую разницу заключается в том, что версия 3.2x также поддерживает
CP/M-86
(оверлеи идентичны между
DOS
и CP/M-86, отличается только основной исполняемый файл) […] файлы .OVR На 100% идентично DOS и CP/M-86, с флагом (четко показанным в руководстве
WordStar 3.20
), переключающимся между ними во
время выполнения
[…] интерфейс ОС в WordStar довольно узкий и хорошо абстрагированный […] WordStar 3.2x оверлеи на 100% идентичны в версиях DOS и CP/M-86. Существует переключатель времени выполнения, который выбирает между вызовом INT 21h (DOS) и INT E0h (CP/M-86). WS.COM не одинаков для DOS и CP/M-86, хотя, вероятно, и не сильно отличается. […]
Версия 1.1 имеет новую динамическую систему управления памятью (dMMS), которая более эффективно обрабатывает наложения: продукт требует меньше памяти, что приводит к увеличению доступности места для приложений. […] Более низкие требования к памяти продукта (всего 450 КБ ОЗУ) обеспечивают улучшенную поддержку сети, поскольку для поддержки сетей больше не требуется дополнительная аппаратная память. […] Ускоряя области dBASE IV, которые зависят от наложения, новый dMMS повышает производительность при работе в Центре управления и в программах, использующих меню и окна.(5 страниц)
{{cite book}}
: |work=
игнорируется ( помощь ) (2+244+4 страницы)[…] Причина, по которой Geos требует 16 прерываний, заключается в том, что схема используется для преобразования межсегментных («далеких») вызовов функций в прерывания без изменения размера кода. Причина, по которой это делается, заключается в том, что «что-то» (ядро) может подключиться к каждому межсегментному вызову, выполняемому приложением Geos, и убедиться, что правильные сегменты кода загружаются из виртуальной памяти и блокируются. В терминах DOS это можно сравнить с оверлейным загрузчиком, но его можно добавить, не требуя явной поддержки со стороны компилятора или приложения. Происходит примерно следующее: […] 1. Компилятор реального режима генерирует такую инструкцию: CALL <segment>:<offset> -> 9A <offlow><offhigh><seglow><seghigh> с <seglow>< seghigh> обычно определяется как адрес, который должен быть исправлен во время загрузки в зависимости от адреса, по которому был размещен код. […] 2. Компоновщик Geos превращает это во что-то другое: INT 8xh -> CD 8x […] DB <seghigh>,<offlow>,<offhigh> […] Обратите внимание, что это снова пять байт, поэтому это может быть установил "на место". Теперь проблема в том, что для прерывания требуется два байта, а для инструкции CALL FAR нужен только один. В результате 32-битный вектор (<seg><ofs>) необходимо сжать до 24 бит. […] Это достигается двумя способами: во-первых, адрес <seg> кодируется как «дескриптор» сегмента, младший полубайт которого всегда равен нулю. Это экономит четыре бита. Кроме того, […] оставшиеся четыре бита попадают в младший полубайт вектора прерывания, создавая таким образом что-то от INT 80h до 8Fh. […] Обработчик прерываний для всех этих векторов один и тот же. Он «распакует» адрес из нотации в три с половиной байта, найдет абсолютный адрес сегмента и перенаправит вызов после выполнения загрузки виртуальной памяти... Возврат из вызова также будет введите соответствующий код разблокировки. […] Младший полубайт вектора прерывания (80h–8Fh) содержит биты с 4 по 7 дескриптора сегмента. Биты от 0 до 3 дескриптора сегмента (по определению дескриптора Geos) всегда равны 0. […] все API Geos работают по схеме «оверлей» […]: когда приложение Geos загружается в память, загрузчик автоматически заменить вызовы функций в системных библиотеках соответствующими вызовами на основе INT. В любом случае, они не постоянны, а зависят от дескриптора, назначенного сегменту кода библиотеки.[…] Первоначально предполагалось, что Geos будет переведен в защищенный режим на очень раннем этапе […], с реальным режимомэто всего лишь «устаревший вариант» […] почти каждая строка ассемблерного кода готова для него […]