На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 4 / Удаление TSR из памяти Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Удаление TSR из памяти

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


При инициализации TSR должна записать начальное содержимое векторов, которые она будет изменять в процессе своей работы. Если отсутствует другая TSR, загружаемая после захвата этих векторов, то можно восстановить эти векторы прерываний в их первоначальные значения и освободить память, занимаемую TSR. Если интересующие Вас векторы прерываний все еще указывают на Вашу программу, то это является надежным подтверждением того, что другая программа TSR не захватила их. Но, допустим, что Ваша TSR использует вектор прерывания совместно с другой TSR, которая загружается после нее. Тогда, каждая TSR должна иметь записанное первоначальное содержимое вектора и вставленный вход IVT, указывающий на свою собственную программу. Существующий вход IVT указывает на TSR, загруженную последней, которая должна иметь сохраненный вектор для первой TSR. Первая TSR, в свою очередь, должна иметь сохраненный вектор для исходной ISR.


Если текущий вход IVT замещается сохраненным значением, то тем самым из цепочки ISR эффективно удаляется другая TSR. Если вторая TSR могла быть введена только с помощью этого единственного вектора, то все, что Вы получите, будет потеря памяти. Если вторая TSR имеет другую точку входа и пытается включиться в цепочку к сохраненному вектору прерывания, который изменен Вами, то эта ссылка будет указывать на незанятый блок памяти.


Наиболее чистым решением этой проблемы является разработка TSR, которая управляет другими TSR. Имеется превосходный пакет общего назначения Mark/Release (отметить/освободить), который доступен из многих информационных источников.TSR Mark (отметить), выполняемая перед другими программами, загружается и делает копию IVT, а также записывает текущее состояние памяти. Другие TSR пользователь загружает по мере необходимости. Выполнение TSR Release (освободить) восстанавливает память и таблицу IVT значениями, записанными с помощью программы Mark. Возможна вложенность вызовов программы Mark.


Программы Mark/Release работают в большинстве, но не во всех случаях. Они перезапоминают IVT и память. Если TSR изменила некоторую другую структуру данных DOS, то после удаления TSR из памяти эта структура данных так и останется измененной.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz