|
|
|
|
Перекрытия
Рано или поздно Вам придется писать программу, которая является слишком большой, чтобы разместиться в отведенном для нее месте памяти. Когда это
произойдет, одним из возможных способов выполнения таких программ является создание перекрытий (оверлеев-overlays). Перекрытие является разделом
программы, которому не нужно все время находиться в памяти. Он загружается в память тогда, когда это необходимо, но после того, как он станет ненужным,
пространство памяти, занимаемое им, может быть использовано некоторым другим перекрытием. Остаток программы, который не может быть помещен в перекрытие,
называется корнем (root). Все данные программы должны помещаться в корень, т.к. данные в перекрытии теряются при загрузке в него очередной части
программы. Перекрытия, в конце концов, являются только читаемыми.
Перекрытия являются очень полезными объектами, и MS-DOS поддерживает их достаточно эффективно. Одним из назначений функции EXEC (выполнить)
является загрузка перекрытий в память. Но перед рассмотрением этой опции, необходимо отметить, что компоновщик LINK MS-DOS имеет возможность создавать
перекрытия и автоматически управлять ими!
Правила использования управления перекрытиями в MS-DOS просты. Оверлейные (перекрываемые) модули не могут содержать глобальные или статические
данные, хотя постоянные данные допустимы. Другое правило заключается в том, что перекрытие может быть вызвано только с помощью вызова far (далекий)
либо корня, либо другого перекрытия. Перекрытие может вызвать корень через вызов near (близкий).
Способ создания перекрытия (оверлея) очень прост: при вызове команды LINK, объектные файлы, составляющие перекрытие, должны заключаться в круглые
скобки. Это все, что для них имеется. Следующая командная строка создает программный файл, использующий три перекрытия:
C> link root + (init + read) + (work) + (save + exit) ,myprog ;
|
Этот пример использует один набор подпрограмм для чтения некоторых данных и инициализации программы, другой набор для обработки данных и еще один
набор подпрограмм для сохранения обработанных данных и выхода. Поскольку ни одна из этих операций не выполняется одновременно, каждая их них
выполняется в перекрытии, и, таким образом, решается проблема гипотетической памяти.
|
|