Наложение (программирование)
В общем вычислительном смысле наложение означает «процесс передачи блока программного кода или других данных в основную память с заменой того, что уже сохранено». [1] Наложение — это метод программирования компьютера , который позволяет программам занимать больше места, чем основная память . [2] Встроенная система обычно использует оверлеи из-за ограничения физической памяти , которая является внутренней памятью для системы на кристалле , и отсутствия средств виртуальной памяти .
Использование
[ редактировать ]Создание программы-наложения включает ручное разделение программы на автономные блоки объектного кода , называемые наложениями или ссылками , обычно расположенные в древовидной структуре . [б] Одноуровневые сегменты, находящиеся на одном уровне глубины, используют одну и ту же память, называемую областью наложения. [с] или регион назначения . Менеджер оверлеев, являющийся частью операционной системы или частью программы оверлея, загружает необходимое оверлей из внешней памяти в регион назначения, когда это необходимо; это может происходить автоматически или с помощью явного кода. Часто компоновщики обеспечивают поддержку наложений. [3]
Пример
[ редактировать ]В следующем примере показаны операторы управления, которые предписывают OS/360 редактору связей связать программу-наложение, содержащую одну область с отступом для отображения структуры (имена сегментов произвольны):
INCLUDE SYSLIB(MOD1) INCLUDE SYSLIB(MOD2) OVERLAY A INCLUDE SYSLIB(MOD3) OVERLAY AA INCLUDE SYSLIB(MOD4) INCLUDE SYSLIB(MOD5) OVERLAY AB INCLUDE SYSLIB(MOD6) OVERLAY B INCLUDE SYSLIB(MOD7)
+--------------+ | Root Segment | | MOD1, MOD2 | +--------------+ | +----------+----------+ | | +-------------+ +-------------+ | Overlay A | | Overlay B | | MOD3 | | MOD7 | +-------------+ +-------------+ | +--------+--------+ | | +-------------+ +-------------+ | Overlay AA | | Overlay AB | | MOD4, MOD5 | | MOD6 | +-------------+ +-------------+
Эти инструкции определяют дерево, состоящее из постоянно расположенного сегмента, называемого корнем , и двух наложений A и B, которые будут загружены после окончания MOD2. Само наложение A состоит из двух сегментов наложения: AA и AB. Во время выполнения оверлеи A и B будут использовать одни и те же ячейки памяти; После окончания MOD3 AA и AB будут использовать одни и те же места.
Все сегменты между корнем и данным сегментом наложения называются путем .
Приложения
[ редактировать ]По состоянию на 2015 год [update]Большинство бизнес-приложений предназначены для работы на платформах с виртуальной памятью . программы Разработчик на такой платформе может спроектировать программу так, как будто ограничения памяти не существует, если только рабочий набор не превышает доступную физическую память. Самое главное, что архитектор может сосредоточиться на решаемой проблеме без дополнительных сложностей проектирования, связанных с разделением обработки на этапы, ограниченные размером наложения. Таким образом, разработчик может использовать языки программирования более высокого уровня, которые не позволяют программисту сильно контролировать размер (например, Java , C++ , Smalltalk ).
Тем не менее, наложения остаются полезными во встроенных системах. [4] Некоторые недорогие процессоры, используемые во встроенных системах, не имеют модуля управления памятью (MMU). Кроме того, многие встроенные системы являются системами реального времени , и оверлеи обеспечивают более определенное время отклика, чем пейджинг . Например, программное обеспечение основной системы авионики космического корабля «Шаттл» (PASS) использует запрограммированные наложения. [5]
Даже на платформах с виртуальной памятью программные компоненты , такие как кодеки, могут быть отделены до такой степени, что их можно будет загружать и выгружать по мере необходимости .
Историческое использование
[ редактировать ]IBM представила концепцию цепочки заданий [6] на ФОРТРАНЕ 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] или .ОВР [9] (но также использовал числовые расширения файлов, такие как .000 , .001 и т. д. для последующих файлов [10] ). Этот тип файла использовался, среди прочего, WordStar. [11] (состоящий из основного исполняемого файла WS.COM
и оверлейные модули WSMSGS.OVR
, WSOVLY1.OVR
, MAILMERGE.OVR
и SPELSTAR.OVR
, где " толстые " файлы оверлеев были даже двоично идентичны в своих портах для CP/M-86 и MS-DOS [12] ), дБаза , [13] и Enable пакет программного обеспечения для автоматизации офиса DOS от Enable Software . Borland. от Турбо Паскаль [14] [15] и компилятор GFA BASIC могли создавать файлы .OVL.
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Это не имеет ничего общего с термином «регион» в управлении хранилищем MVT .
- ^ В OS/360 и последующих версиях может быть несколько регионов. [а] каждый из которых содержит полное дерево наложения.
- ^ Номенклатура различается в зависимости от системы, например, в OS/360 регионе относится ко всему дереву наложения.
Ссылки
[ редактировать ]- ^ «Оксфордские словари» . 26 ноября 2015 г. Архивировано из оригинала 10 июля 2022 г. Проверено 10 июля 2022 г.
- ^ Jump up to: Перейти обратно: а б Баттерфилд, Джеймс «Джим» , изд. (июнь 1986 г.). «Часть 4: Наложение». Загрузка и связывание программ Commodore . п. 74. Архивировано из оригинала 10 июля 2022 г. Проверено 10 июля 2022 г.
Это позволяет запускать программы, размер которых, по сути, намного превышает объем памяти вашего компьютера.
{{cite book}}
:|magazine=
игнорируется ( помогите ) - ^ «Документация GNU Linker: Описание наложения» . 3 июня 2008 г. Архивировано из оригинала 23 июня 2022 г. Проверено 10 июля 2022 г. [1]
- ^ Jump up to: Перейти обратно: а б Левин, Джон Р. (2000). Линкеры и загрузчики . Издательство Морган Кауфманн . п. 177. ИСБН 1-55860-496-0 . Архивировано из оригинала 6 апреля 2022 г. Проверено 10 июля 2022 г. [2]
- ^ Национальный исследовательский совет (ноябрь 1993 г.) [июнь 1993 г.]. Оценка процессов разработки программного обеспечения для полетов космических кораблей (2-е изд.). Вашингтон, округ Колумбия, США: Национальная академия наук , The National Academies Press . дои : 10.17226/2222 . hdl : 2060/19930019745 . ISBN 978-0-309-04880-4 . LCCN 93-84549 . Проверено 29 октября 2012 г. (208 страниц)
- ^ «Глава 12: Цепная работа» (PDF) . Системы программирования IBM 7090/7094 — Программирование на FORTRAN II (PDF) . Покипси, Нью-Йорк, США: Корпорация IBM . Август 1963. стр. 34–35. Форма С28-6054-4 Файл №7090-25. Архивировано (PDF) из оригинала 15 марта 2022 г. Проверено 10 июля 2022 г.
{{cite book}}
:|work=
игнорируется ( помощь ) (52 страницы) - ^ Системы программирования IBM 7090/7094 - Процессор IBJOB - Функция наложения IBLDR (PDF) (1-е изд.). Покипси, Нью-Йорк, США: Корпорация IBM . Май 1963 г. Форма C28-6331, файл № 7090-27. Архивировано (PDF) из оригинала 15 марта 2022 г. Проверено 26 декабря 2021 г.
{{cite book}}
:|work=
игнорируется ( помощь ) (8 страниц) - ^ Jump up to: Перейти обратно: а б Эллиотт, Джон К. (5 июня 2012 г.) [02 января 2000 г.]. «Формат файла PRL» . seasip.info . Архивировано из оригинала 26 января 2020 г. Проверено 26 января 2020 г.
[…] Файл PRL — это перемещаемый двоичный файл, используемый MP/M и CP/M Plus для различных модулей, кроме файлов .COM . Этот формат файла также используется для файлов FID на Amstrad PCW . Существует несколько форматов файлов, в которых используются версии PRL: SPR (системный PRL), RSP (резидентный системный процесс). LINK-80 также может создавать файлы OVL (оверлей), которые имеют заголовок PRL, но не подлежат перемещению. Драйверы GSX имеют формат PRL; то же самое относится и к резидентным системным расширениям (.RSX). […]
[3] - ^ Домен, Норберт (1990). «Создание пространства путем наложения — структуры наложения в Турбо Паскале» . MC (на немецком языке). Том 90, № 12. С. 124–130. Архивировано из оригинала 4 августа 2022 г. Проверено 4 августа 2022 г. [4]
- ^ Гэвин, Брюс. «Создание наложений программы». В Пирсоне, Дэйв (ред.). Турбо Паскаль — Руководство по Нортону . v3. п. 149. Архивировано из оригинала 4 августа 2022 г. Проверено 4 августа 2022 г.
- ^ Маббетт, Алан (1985). Начало работы с WordStar, MailMerge + SpellStar . Издательство Кембриджского университета . ISBN 0-521-31805-Х .
- ^ Некасек, Михал (30 января 2018 г.) [28 января 2018 г., 26 января 2018 г.]. «Снова WordStar» . Музей OS/2 . Архивировано из оригинала 28 июля 2019 г. Проверено 28 июля 2019 г.
[…] Причина подозревать такую разницу заключается в том, что версия 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, хотя, вероятно, и не сильно отличается. […]
- ^ Сиднэм-Райт, Лиз; Стивенс, Брэд, ред. (31 июля 1990 г.). «Эштон-Тейт поставляет dBASE IV версии 1.1» (PDF) . Торранс, Калифорния, США: Эштон Тейт . п. 2-2-2. Архивировано из оригинала (PDF) 4 апреля 2017 г. Проверено 13 февраля 2014 г.
Версия 1.1 имеет новую динамическую систему управления памятью (dMMS), которая более эффективно обрабатывает наложения: продукт требует меньше памяти, что приводит к увеличению доступности места для приложений. […] Более низкие требования к памяти продукта (всего 450 КБ ОЗУ) обеспечивают улучшенную поддержку сети, поскольку для поддержки сетей больше не требуется дополнительная аппаратная память. […] Ускоряя области dBASE IV, которые зависят от наложения, новый dMMS повышает производительность при работе в Центре управления и в программах, использующих меню и окна.
(5 страниц) - ^ Гершель, Рудольф; Дитрих, Эрнст Вольфганг (2000). Turbo Pascal 7.0 (на немецком языке) (2-е изд.). Р. Ольденбург Верлаг . п. 249. ИСБН 3-486-25499-5 .
- ^ Эссер, Ханс-Георг (июнь 2009 г.). «Глава 6. Управление памятью и файловые системы. Часть 5: несмежное распределение памяти». Операционные системы I (PDF) (на немецком языке). Мюнхен, Германия: Мюнхенский университет прикладных наук. Архивировано (PDF) из оригинала 8 мая 2022 г. Проверено 13 февраля 2014 г. (9 страниц)
Дальнейшее чтение
[ редактировать ]- Редактор и загрузчик IBM OS Linkage — номера программ 360S-ED-510, 360S-ED-521, 360S-LD-547 (PDF) . Выпуск 21 (10-е изд.). Уайт-Плейнс, Нью-Йорк, США: Корпорация IBM . Март 1972 г. [январь 1972 г.]. Заказ № GC28-6538-9, файл № S360-31. Архивировано (PDF) из оригинала 10 июля 2022 г.
{{cite book}}
:|work=
игнорируется ( помощь ) (2+244+4 страницы) - Гребер, Маркус; Ди Джеронимо-младший, Эдвард «Эд»; Пол, Матиас Р. (2 марта 2002 г.) [24 февраля 2002 г.]. «Информация GEOS/NDO для RBIL62?» . Группа новостей : comp.os.geos.programmer . Архивировано из оригинала 20 апреля 2019 г. Проверено 20 апреля 2019 г.
[…] Причина, по которой 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. В любом случае, они не постоянны, а зависят от дескриптора, назначенного сегменту кода библиотеки. […] Первоначально Геос планировалось преобразовать в защищенный режим очень рано […], а реальный режим является только «устаревшим вариантом» […] почти каждая строка ассемблерного кода готова для него […]