Page 103 - 4875
P. 103
Лекція 9
РЕЗИДЕНТНІ ПРОГРАМИ (TSR)
Terminate But Stay Resident (TSR) – такі програми
представляють собою один із трьох основних класів програмних
модулів, що використовуються в DOS. Основною відмінністю між
резидентними і звичайними програмами є те, що після завершення
роботи звичайної програми операційна система вивільняє всю пам’ять,
яка використовується цією програмою. Після завершення резидентної
програми її частина (функціональний обробник) залишається в
оперативній пам’яті, при чому, на неї вказує попередньо змінений
вектор переривань.
Розрізняють також напіврезидентні програми — це програми,
що загружають і виконують іншу програму, залишаючись при цьому в
пам'яті, а потім, після того як завантажена програма виконана, вони теж
закриваються. Напіврезидентна програма може містити обробники
переривань, що будуть діяти увесь час, поки працює завантажена з-під
неї звичайна програма. Так що, з погляду даної дочірньої програми,
напіврезидентна програма функціонує як звичайна резидентна. Такі
програми зручно використовувати для внесення змін і доповнень в
існуючі програми, якщо не можна внести виправлення прямо в їх
виконавчий код. Так створюються загрузчики для ігор, що зберігають
свій код у зашифрованому чи упакованому виді. Такий загрузчик може
відслідковувати визначені комбінації клавіш і обманювати гру,
додаючи гравцю ті чи інші ресурси, або, наприклад, знаходити код
перевірки пароля і виключати його.
Резидентні програми прийнято розділяти на активні і пасивні, в
залежності від того, чи перехоплюють вони переривання від зовнішніх
пристроїв чи одержують керування, тільки якщо програма спеціально
викликає команду int з потрібним номером переривання і параметрами.
DOS – це система, яка не буде надавати ніяких спеціальних
можливостей для одночасного виконання декількох процесів, крім
можливості залишати програми резидентною в пам'яті. Тому, щоб
організувати загальну пам'ять для декількох процесів, треба
завантажити пасивну резидентну програму, що буде підтримувати
функції виділення блоку пам'яті (повертаючи ідентифікатор),
102