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

       

Работа программ с оверлеями


Программа управления оверлеями (VROOMM, или Virtual Run-time

Object-Oriented Memory Manager) выполняет за вас большую часть

работы по организации оверлеев. В обычных оверлейных системах модули группируются в базовый и набор оверлейных модулей. Подпрограммы в данном оверлейном модуле могут вызывать подпрограммы из

этого же модуля и из базового модуля, но не из других модулей.

Оверлейные модули перекрывают друг друга, т.е. одновременно в памяти может находиться только один оверлейный модуль, и все они

при активизации занимают один и тот же участок физической памяти.

Общий объем памяти, необходимой для запуска данной программы, определяется размером базового, плюс максимального оверлейного модуля.

Эта обычная схема не обеспечивает достаточной гибкости. Она

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

программы и, соответственно, планируемой вами, группировки оверлеев. Если вы не можете разбить вашу программу в соответствии со

взаимозависимостью обращений между ее модулями, то вы не сможете

и разбить ее на оверлеи.

Схема VROOMM совершенно иная. Она обеспечивает динамический

свопинг сегментов. Основной единицей свопинга является сегмент.

Сегмент может состоять из одного или нескольких модулей. И что

еще более важно, любой сегмент может вызывать любой другой сегмент.

Вся память делится на базовую область и область свопинга.

Как только встречается вызов функции, которая не находится ни в

базовой, ни в области свопинга, сегмент, содержащий вызываемую

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

при этом другие сегменты. Это мощное средство - подобное виртуальной программной памяти. От вас больше не требуется разбивать

код на статические, отдельные оверлейные блоки. Вы просто запускаете программу!

Что происходит, когда возникает необходимость поместить сегмент в область свопинга? Если эта область имеет достаточно свободного места, то данная задача выполняется просто. Если же нет,

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



Содержание раздела