В общем вычислительном смысле наложение означает «процесс переноса блока программного кода или других данных в основную память , заменяя то, что уже сохранено». [1] Наложение — это метод программирования , который позволяет программам быть больше основной памяти компьютера . [2] Встроенная система обычно использует наложения из-за ограничений физической памяти , которая является внутренней памятью для системы на кристалле , и отсутствия возможностей виртуальной памяти .
Создание оверлейной программы включает в себя ручное разделение программы на автономные блоки объектного кода , называемые оверлеями или ссылками , обычно выложенные в древовидной структуре . [b] Родственные сегменты, находящиеся на одном уровне глубины, совместно используют одну и ту же память, называемую областью оверлея [c] или областью назначения . Менеджер оверлеев, являющийся либо частью операционной системы , либо частью оверлейной программы, загружает требуемый оверлей из внешней памяти в его область назначения, когда это необходимо; это может быть автоматически или посредством явного кода. Часто компоновщики обеспечивают поддержку оверлеев. [3]
В следующем примере показаны управляющие операторы, которые предписывают редактору связей OS/360 связать оверлейную программу, содержащую один регион, с отступом для отображения структуры (имена сегментов произвольны):
ВКЛЮЧИТЬ SYSLIB(MOD1) ВКЛЮЧИТЬ SYSLIB(MOD2) НАКЛАДКА А ВКЛЮЧИТЬ SYSLIB(MOD3) НАКЛАДКА АА ВКЛЮЧИТЬ SYSLIB(MOD4) ВКЛЮЧИТЬ SYSLIB(MOD5) НАЛОЖЕНИЕ AB ВКЛЮЧИТЬ SYSLIB(MOD6) НАКЛАДКА B ВКЛЮЧИТЬ SYSLIB(MOD7)
+-------------+ | Корневой сегмент | | МОД1, МОД2 | +-------------+ | +----------+----------+ | | +-------------+ +-------------+ | Наложение А | | Наложение Б | | МОД3 | | МОД7 | +-------------+ +-------------+ | +--------+--------+ | | +-------------+ +-------------+ | Наложение AA | | Наложение AB | | МОД4, МОД5 | | МОД6 | +-------------+ +-------------+
Эти операторы определяют дерево, состоящее из постоянно резидентного сегмента, называемого корнем , и двух оверлеев A и B, которые будут загружены после окончания MOD2. Сам оверлей A состоит из двух сегментов оверлея, AA и AB. Во время выполнения оверлеи A и B будут использовать одни и те же ячейки памяти; AA и AB будут использовать одни и те же ячейки после окончания MOD3.
Все сегменты между корнем и заданным сегментом наложения называются путем .
По состоянию на 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
, где файлы оверлея " fat " были даже двоично идентичны в своих портах для CP/M-86 и MS-DOS [12] ), dBase , [13] и пакет программного обеспечения для автоматизации делопроизводства Enable DOS от Enable Software . Turbo Pascal от Borland [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 прерываний, заключается в том, что схема используется для преобразования межсегментных ("far") вызовов функций в прерывания, без изменения размера кода. Причина, по которой это делается, заключается в том, что "что-то" (ядро) может подключиться к каждому межсегментному вызову, сделанному приложением Geos, и убедиться, что правильные сегменты кода загружены из виртуальной памяти и заблокированы. В терминах DOS это можно сравнить с загрузчиком оверлея, но таким, который можно добавить, не требуя явной поддержки со стороны компилятора или приложения. Происходит что-то вроде этого: […] 1. Компилятор реального режима генерирует инструкцию вроде этой: CALL <segment>:<offset> -> 9A <offflow><offhigh><seglow><seghigh>, где <seglow><seghigh> обычно определяется как адрес, который должен быть исправлен во время загрузки в зависимости от адреса, по которому был помещен код. […] 2. Компоновщик Geos превращает это во что-то другое: INT 8xh -> CD 8x […] DB <seghigh>,<offflow>,<offhigh> […] Обратите внимание, что это снова пять байтов, поэтому его можно исправить «на месте». Теперь проблема в том, что прерывание требует два байта, в то время как инструкция CALL FAR требует только один. В результате 32-битный вектор (<seg><ofs>) должен быть сжат до 24 бит. […] Это достигается двумя вещами: во-первых, адрес <seg> кодируется как «дескриптор» сегмента, чей младший полубайт всегда равен нулю. Это экономит четыре бита. Кроме того, […] оставшиеся четыре бита идут в младший полубайт вектора прерывания, таким образом создавая что-либо от INT 80h до 8Fh. […] Обработчик прерываний для всех этих векторов один и тот же. Он «распаковывает» адрес из трех с половиной байтовой нотации, ищет абсолютный адрес сегмента и перенаправляет вызов после того, как выполнит свою загрузку виртуальной памяти... Возврат из вызова также пройдет через соответствующий код разблокировки. […] Младший полубайт вектора прерывания (80h–8Fh) содержит биты с 4 по 7 дескриптора сегмента. Биты 0–3 дескриптора сегмента (по определению дескриптора Geos) всегда равны 0. […] все API Geos работают по схеме «наложения» […]: когда приложение Geos загружается в память, загрузчик автоматически заменяет вызовы функций в системных библиотеках соответствующими вызовами на основе INT. В любом случае, они не являются константами, а зависят от дескриптора, назначенного сегменту кода библиотеки.[…] Geos изначально планировалось перевести в защищенный режим на очень раннем этапе […], с реальным режимомбудучи всего лишь «устаревшим вариантом» […] почти каждая строка ассемблерного кода готова к этому […]