- •Алгоритмические языки программирования.
- •ОВЕРЛЕЙ
- •КАК СОЗДАТЬ ПРОГРАММУ БОЛЬШОГО РАЗМЕРА?
- •Оверлей - это такой способ использования оперативной памяти, при котором в один и
- •ГДЕ ХРАНЯТСЯ ОВЕРЛЕЙНЫЕ МОДУЛИ?
- •При выполнении программы, построенной по оверлейному принципу, в памяти находятся только те из
- •Программа
- •Оверлейный
- •Последовательность выполнения оверлейной программы
- •Загрузка нужных модулей в оверлейный буфер осуществляется автоматически и программисту не нужно об
- •Главное преимущество оверлейной структуры:
- •Главный недостаток оверлейной структуры:
- •ОБРАТИТЕ ВНИМАНИЕ!
- •Новые термины и понятия:
- •По умолчанию для оверлейн
- •Турбо Паскаль управляет оверлеями на уровне модулей
- •Файл с оверлейной частью программы должен размещаться в том же каталоге, что и
- •Оптимизация методов управления оверлейным буфером
- •АДМИНИСТРАТОР ОВЕРЛЕЕВ.
- •Подсистема управления оверлеями сохраняет в оверлейном буфере с
- •ОБРАТИТЕ ВНИМАНИЕ!
- •Оформление
- ••Поскольку оверлеи оформляются в виде модулей, то все правила построения модулей применимы и
- •ОФОРМЛЕНИЕ ОВЕРЛЕЕВ.
- •Директива компилятора
- •Пример:
- •ОБРАТИТЕ ВНИМАНИЕ!
- ••Если в оверлейном модуле есть раздел инициализации, то в нем, с одной стороны,
- •Последовательность создания оверлейных программ.
- •Процедуры и функции модуля Overlay
- •Инициализация
- •Процедура OvrInit(OvrFileName : STRING);
- •Условие:
- •Хотя использование кода инициализации и
- •Рациональный подход:
- •В модуле Overlay объявлена переменная
- •Возможные значения переменной OvrResult, а также список соответствующих им констант:
- •Для размещения оверлеев в расширенной памяти
- •Рекомендуется всегда использовать процедуру OvrInitEMS.
- •Управление
- •УПРАВЛЕНИЕ ОВЕРЛЕЙНЫМ БУФЕРОМ
- •Для управления оверлейным буфером применяется функция OvrGetBuf,
- ••Доступный объем памяти определяется разницей значений переменных MaxAvail, содержащей размер максимального непрерывного
- •УПРАВЛЕНИЕ ОВЕРЛЕЙНЫМ БУФЕРОМ
- •Оверлейный буфер Турбо Паскаля лучше всего представить в виде кольцевого буфера.
- •ПРОБЛЕМА В УПРАВЛЕНИИ ОВЕРЛЕЯМИ.
- •В Турбо Паскале найдено компромиссное решение этой
- •Оптимизация алгоритма управления оверлеями 57
- •Использование механизма испытаний (проб/отказов) приводит к тому, что часто используемые оверлеи будут сохраняться
- •УПРАВЛЕНИЕ МЕХАНИЗМОМ ИСПЫТАНИЙ.
- •По умолчанию механизм испытаний не используется.
Рациональный подход:
•весь код инициализации собрать в оверлейный модуль инициализации,
•модуль инициализации вызывается только один раз при загрузке программы
•больше программа к нему не обращается.
41
В модуле Overlay объявлена переменная |
OvrResult : INTEGER; |
в которой хранится код завершения процедур и |
функций модуля. |
в том числе и код завершения процедуры OvrInit. |
Анализ результатов инициализации 42
Возможные значения переменной OvrResult, а также список соответствующих им констант:
Значение |
Константа |
Описание |
0 |
OvrOK |
Нормальное завершение |
-1 |
OvrError |
Ошибка управления оверлеями |
-2 |
OvrNotFound |
Файл .OVR не найден |
-3 |
OvrNoMemory |
Не хватает памяти для буфера |
-4 |
OvrIOError |
Ошибка при обращении к оверлейному файлу |
-5 |
OvrNoEMSDriver |
Драйвер EMS не установлен |
-6 |
OvrNoEMSMemory |
Размер EMS-памяти недостаточен |
Анализ результатов инициализации 43
Для размещения оверлеев в расширенной памяти |
(EMS-памяти), предназначена процедура |
OvrInitEMS, не имеющая параметров. |
Эта процедура проверяет возможность использования в системе расширенной памяти, и если это возможно, то оверлейный файл полностью размещается там.
Процедура OvrInitEMS не является обязательной и не заменяет процедуру OvrInit. При использовании расширенной памяти необходимо вызывать обе эти процедуры.
Использование расширенной памяти
Рекомендуется всегда использовать процедуру OvrInitEMS.
•в случае неудачного завершения она
никак не повлияет на работу программы и не вызовет появления фатальной ошибки
•в случае удачного завершения вся работа с оверлеями будет происходить в памяти, что приведет к значительному ускорению работы программы.
45
Управление
оверлейным
буфером
Механизм управления буфером.
Управление механизмом испытаний.
УПРАВЛЕНИЕ ОВЕРЛЕЙНЫМ БУФЕРОМ
Обычно размер оверлейного буфера автоматически определяется таким, что в нем может разместиться самый крупный из всех оверлейных модулей.
Для большинства программ этого может быть достаточно, однако возможна ситуация, при которой одна из функций программы реализуется с помощью двух или более модулей, каждый из которых является оверлейным.
Если суммарный размер таких модулей больше, чем размер наибольшего оверлея, то частое обращение модулей друг к другу приведет к слишком частому обмену информацией между диском и памятью, что замедлит работу программы.
Программист может увеличить размер буфера.
Тогда при загрузке в буфер очередного модуля программа проверит, достаточно ли в буфере свободного места, и, если места достаточно, загрузит новый модуль сразу за старым, который таким образом не будет уничтожен.
47
Для управления оверлейным буфером применяется функция OvrGetBuf,
а также процедуры OvrSetBuf и
OvrClearBuf.
Использование этих процедур необходимо в том случае, когда системные средства модуля по управлению оверлейным буфером по каким-либо причинам не устраивают программиста, и возникает необходимость самостоятельно управлять конфигурацией и содержимым буфера.
48
49
50