
- •Алгоритмические языки программирования.
- •ОВЕРЛЕЙ
- •КАК СОЗДАТЬ ПРОГРАММУ БОЛЬШОГО РАЗМЕРА?
- •Оверлей - это такой способ использования оперативной памяти, при котором в один и
- •ГДЕ ХРАНЯТСЯ ОВЕРЛЕЙНЫЕ МОДУЛИ?
- •При выполнении программы, построенной по оверлейному принципу, в памяти находятся только те из
- •Программа
- •Оверлейный
- •Последовательность выполнения оверлейной программы
- •Загрузка нужных модулей в оверлейный буфер осуществляется автоматически и программисту не нужно об
- •Главное преимущество оверлейной структуры:
- •Главный недостаток оверлейной структуры:
- •ОБРАТИТЕ ВНИМАНИЕ!
- •Новые термины и понятия:
- •По умолчанию для оверлейн
- •Турбо Паскаль управляет оверлеями на уровне модулей
- •Файл с оверлейной частью программы должен размещаться в том же каталоге, что и
- •Оптимизация методов управления оверлейным буфером
- •АДМИНИСТРАТОР ОВЕРЛЕЕВ.
- •Подсистема управления оверлеями сохраняет в оверлейном буфере с
- •ОБРАТИТЕ ВНИМАНИЕ!
- •Оформление
- ••Поскольку оверлеи оформляются в виде модулей, то все правила построения модулей применимы и
- •ОФОРМЛЕНИЕ ОВЕРЛЕЕВ.
- •Директива компилятора
- •Пример:
- •ОБРАТИТЕ ВНИМАНИЕ!
- ••Если в оверлейном модуле есть раздел инициализации, то в нем, с одной стороны,
- •Последовательность создания оверлейных программ.
- •Процедуры и функции модуля Overlay
- •Инициализация
- •Процедура OvrInit(OvrFileName : STRING);
- •Условие:
- •Хотя использование кода инициализации и
- •Рациональный подход:
- •В модуле Overlay объявлена переменная
- •Возможные значения переменной OvrResult, а также список соответствующих им констант:
- •Для размещения оверлеев в расширенной памяти
- •Рекомендуется всегда использовать процедуру OvrInitEMS.
- •Управление
- •УПРАВЛЕНИЕ ОВЕРЛЕЙНЫМ БУФЕРОМ
- •Для управления оверлейным буфером применяется функция OvrGetBuf,
- ••Доступный объем памяти определяется разницей значений переменных MaxAvail, содержащей размер максимального непрерывного
- •УПРАВЛЕНИЕ ОВЕРЛЕЙНЫМ БУФЕРОМ
- •Оверлейный буфер Турбо Паскаля лучше всего представить в виде кольцевого буфера.
- •ПРОБЛЕМА В УПРАВЛЕНИИ ОВЕРЛЕЯМИ.
- •В Турбо Паскале найдено компромиссное решение этой
- •Оптимизация алгоритма управления оверлеями 57
- •Использование механизма испытаний (проб/отказов) приводит к тому, что часто используемые оверлеи будут сохраняться
- •УПРАВЛЕНИЕ МЕХАНИЗМОМ ИСПЫТАНИЙ.
- •По умолчанию механизм испытаний не используется.

Подсистема управления оверлеями сохраняет в оверлейном буфере с
Управление оверлейным буфером 21

ОБРАТИТЕ ВНИМАНИЕ!
Одной из очень важных возможностей администратора оверлеев является возможность загружать оверлейный файл в дополнительную память при наличии достаточного пространства.
Для этой цели в Турбо Паскале поддерживается средство расширения памяти EMS (Lotus/Intel/Microsoft Expanded Memory Specification)
Если оверлейный файл размещен в памяти EMS, все последующие загрузки оверлеев осуществляются путем быстрой передачи информации из одной области памяти в другую.
22

Оформление
оверлеев
23

•Поскольку оверлеи оформляются в виде модулей, то все правила построения модулей применимы и к оверлеям.
•Оверлей представляет собой обычный модуль, за исключением нескольких
особенностей, присущих только
оверлеям: в оверлейных модулях нельзя использовать процедуры обработки прерываний.
24

ОФОРМЛЕНИЕ ОВЕРЛЕЕВ.
В начале всех оверлейных модулей должна быть размещена директива компилятора {$О+}.
Процедуры и функции, прямо или косвенно вызывающие оверлейные подпрограммы, должны быть откомпилированы с ключом {$F+}.
В основной программе либо в первых строках, либо перед каждой процедурой, вызывающей оверлей, необходимо указать директиву {$F+}.
25

Если директива {$F+} указана перед процедурой, то после нее необходимо указать обратную директиву {$F-},
чтобы остальные процедуры, не вызывающие оверлей, не использовали
дальний тип вызова, т.к. это может несколько замедлить работу программы.
26

Директива компилятора
Оформление оверлеев |
27 |

Пример: |
|
PROGRAM Overlay; |
|
{Все программы должны иметь дальний тип вызова} |
|
{$F+} |
|
{Порядок подключения оверлейных модулей должен быть таким} |
|
USES Crt, Overlay, Init_Ovr, Ovr_1,0vr_2; |
|
{Указание компилятору, какие модули являются оверлейными} |
|
{$О Ovr_1} |
|
{$0 Ovr_2} |
|
Оформление оверлеев |
28 |
|

ОБРАТИТЕ ВНИМАНИЕ!
Если попытаться использовать в качестве оверлейного модуль, при компиляции которого не была указана директива {$О+}, компилятор выдаст сообщение об ошибке.
Из всех стандартных модулей оверлейным может быть только модуль Dos.
Другие стандартные модули не могут использоваться в качестве оверлейных.
Не могут быть оверлейными модули, которые содержат обработку прерываний
Программы, содержащие оверлейные модули, должны компилироваться на диск
Если попытаться выполнить компиляцию таких программ в память, то компилятор выдаст сообщение об ошибке.
29

•Если в оверлейном модуле есть раздел инициализации, то в нем, с одной стороны, нельзя инициализировать администратор оверлеев, а с другой стороны, нельзя производить какие-либо действия до инициализации администратора.
•Чтобы разрешить эту кажущуюся парадоксальной ситуацию необходимо ввести в программу дополнительный неоверлейный модуль, в разделе инициализации которого и будет включаться администратор оверлеев, и подключить его в директиве USES перед оверлейными модулями.
30