На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 3 / Перекрытия Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Перекрытия

Рано или поздно Вам придется писать программу, которая является слишком большой, чтобы разместиться в отведенном для нее месте памяти. Когда это произойдет, одним из возможных способов выполнения таких программ является создание перекрытий (оверлеев-overlays). Перекрытие является разделом программы, которому не нужно все время находиться в памяти. Он загружается в память тогда, когда это необходимо, но после того, как он станет ненужным, пространство памяти, занимаемое им, может быть использовано некоторым другим перекрытием. Остаток программы, который не может быть помещен в перекрытие, называется корнем (root). Все данные программы должны помещаться в корень, т.к. данные в перекрытии теряются при загрузке в него очередной части программы. Перекрытия, в конце концов, являются только читаемыми.


Перекрытия являются очень полезными объектами, и MS-DOS поддерживает их достаточно эффективно. Одним из назначений функции EXEC (выполнить) является загрузка перекрытий в память. Но перед рассмотрением этой опции, необходимо отметить, что компоновщик LINK MS-DOS имеет возможность создавать перекрытия и автоматически управлять ими!


Правила использования управления перекрытиями в MS-DOS просты. Оверлейные (перекрываемые) модули не могут содержать глобальные или статические данные, хотя постоянные данные допустимы. Другое правило заключается в том, что перекрытие может быть вызвано только с помощью вызова far (далекий) либо корня, либо другого перекрытия. Перекрытие может вызвать корень через вызов near (близкий).


Способ создания перекрытия (оверлея) очень прост: при вызове команды LINK, объектные файлы, составляющие перекрытие, должны заключаться в круглые скобки. Это все, что для них имеется. Следующая командная строка создает программный файл, использующий три перекрытия:



         C> link root + (init + read) + (work) + (save + exit) ,myprog ;

Этот пример использует один набор подпрограмм для чтения некоторых данных и инициализации программы, другой набор для обработки данных и еще один набор подпрограмм для сохранения обработанных данных и выхода. Поскольку ни одна из этих операций не выполняется одновременно, каждая их них выполняется в перекрытии, и, таким образом, решается проблема гипотетической памяти.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz