Четвертый BORLAND С++ и его окружение



         

Работа программ с оверлеями - часть 2


сегменты для выгрузки? Действующий здесь алгоритм очень сложен.

Упрощенная версия его такова: если в области свопинга имеется неактивный сегмент, то для выгрузки выбирается он. Неактивными считаются сегменты, в которых в текущий момент нет выполняемых функций. В противном случае берется активный сегмент. Удаление

сегментов из памяти продолжается до тех пор, пока в области свопинга не образуется достаточно свободной памяти для размещения

там требуемого сегмента. Такой метод называется динамическим свопингом.

Чем больше памяти выделено для области свопинга, тем лучше

работает программа. Область свопинга работает как кэш-память: чем

больше кэш, тем быстрее работает программа. Наилучшие значения

размера области свопинга определяются размерами рабочего множества данной программы.

После загрузки оверлея в память он помещается в оверлейный

буфер, который расположен в памяти между сегментом стека и дальней динамически распределяемой областью. По умолчанию размер

оверлейного буфера вычисляется и устанавливается при загрузке

программы, но его можно изменить при помощи глобальной переменной

_ovrbuffer. Если достаточный размер памяти недоступен, то появляется либо сообщение об ошибке DOS ("Program too big to fit in memory" - "Программа слишком велика для имеющейся памяти").

Важной возможностью программы управления оверлеями является

ее способность при удалении моделей из оверлейного буфера выполнять их свопинг с дополнительной расширенной памятью. Следующий

раз, как только данный модуль понадобится, он в этом случае будет

не считываться с диска, а просто копироваться из этой памяти. Это

существенно ускоряет свопинг.

При использовании оверлеев память распределяется, как показано на следующем рисунке:




Содержание  Назад  Вперед