Занятие - часа
Модули входящие в программу могут быть указаны как оверлейные, то есть потенциально перекрывающие друг друга в памяти. На этапе выполнения основная программа и модули постоянно хранятся в памяти, а оверлеи заносятся в оверлейный буфер.
Оверлеи – это модули которые не нужны одновременно.
На рисунке 18 показана оверлейная структура, а под нею минимальный расход памяти для этой структуры, длина элементов изображает расходуемый
объем памяти.
Рисунок 18- оверлейная структура
Использование языка Turbo Pascal для программирования реальных задач в ряде случаев осложняется ограничениями, связанными с размещением
больших программ в оперативной памяти. В общем случае без использования специальных Средств максимальный размер программы не может превышать объем свободной оперативной памяти.
В целях преодоления этого естественного ограничения в системе Turbo Pascal имеется специальный механизм, который называется оверлейным. Применение оверлейного механизма позволяет разрабатывать большие и сложные программы, размер которых значительно превышает объем оперативной памяти.
Базовым принципом оверлейного механизма является представление программы в виде совокупности фрагментов, которые попеременно занимают одну и ту же область оперативной памяти. При необходимости выполнения того или иного фрагмента он загружается в оперативную память, быть может, вытесняя из нее ранее выполнявшийся фрагмент.
Оверлейный механизм является известным и наиболее распространенным методом преодоления ограничений по оперативной памяти в отсутствие у операционной системы средств виртуализации памяти. Кроме системы Turbo Pascal, развитый оверлейный механизм используется, например, при формировании объектного кода в системе Clipper. Как правило, алгоритм размещения и удаления оверлейных фрагментов реализуется специальным системным монитором, который поменяется в код разрабатываемой программы.
Естественно, оверлейная программа будет выполняться медленнее, чем выполняется (или могла бы выполняться) эквивалентная ей обычная программа, за счет времени подкачки оверлейных фрагментов. Однако это замедление является необходимой платой за выигрыш в общем размере программы.
Средства построения оверлейных структур в языке Turbo Pascal достаточно просты для использования (сохраняя в этом отношении общий дух ясности и компактности языка Pascal), и базируются на следующих основных принципах.
1 Оверлейная программа должнабыть реализована как управляющая (резидентная) часть, которая постоянно будет находиться в памяти, и несколько оверлейных фрагментов, коды которых будут попеременно загружаться в специальный оверлейный буфер в оперативной памяти, который автоматически выделяется между сегментом стека и динамической областью памяти. По умолчанию для оверлейного буфера выбирается минимальный возможный размер, но во время выполнения программы его размер может быть легко увеличен путем выделения дополнительной области.
2Оверлейные фрагменты должны быть оформлены в виде МОДУЛЕЙ, снабженных специальной директивой ( $0+).
3 Никаких дополнительных языковых конструкций для оверлейного механизма не предусматривается; все средства управления оверлеями сосредоточены в системном модуле Overlay.
4. При трансляции оверлейной программы Turbo Pascal-компилятор работает следующим образом: управляющая (неоверлейная) часть программы оформляется в виде ЕХЕ-файла; все оверлейные части (то есть коды модулей) объединяются в файл с тем же самым именем, но с расширением .ovr:
5. Все обращения к оверлейным процедурам и функциям должны осуществляться посредством дальнего типа вызовов. Для этого такие подпрограммы (или оверлейные модули в целом), а также основную программу необходимо компилировать с включенной директивой $F или добавив после заголовка подпрограмм служебное слово tar.