Page 114 - 4875
P. 114
частина перевіряє наявність резидента в пам’яті і у випадку
його знаходження, відповідне значення ключа вигружає з
пам’яті резидентну частину і повідомляє операційній
системі про звільнення відповідних блоків пам’яті.
2 Передача (активізація) команди на вигризку, в момент,
коли резидентна програма, вже активована (може бути
задана комбінацією клавіш, мишкою, тощо).
Для обох випадків функція вигрузки тотожна і повинна
виконувати:
- відновити таблицю векторів переривань;
- закрити всі відкриті резидентною програмою файли і потоки
(якщо такі є);
- вивільнити пам’ять, що займає резидентна частина;
- повернути управління в перервану програму.
При відновленні таблиці переривань використовуються змінні в
яких збережені адреси попереднього вектору під час встановлення
резидентної програми.
У випадку, коли після запуску резидентної програми запущені
інші резиденти, відновлення таблиці переривань найчастіше
призводить до обриву зв’язків (втрати адреси), з цими загруженими
резидентними програмами, і як наслідок, до зависання системи. В
цьому випадку використовують перевірку чи знаходиться першою в
ланцюжку ISR-резидентних програм задана програма. Критерієм цього
співпадання є співпадання адреси всіх обробників (що
використовуються резидентною програмою) з адресами в таблиці
переривань. У випадку, коли такі адреси не співпадають відновлювати
таблицю порядків і вивільняти пам’ять не рекомендується. Більш
ефективним буде виключення загруженого резиденту, що можна
зробити записавши в зовнішню змінну задане значення при якому
частина нового обробника не виконується, а виконується тільки виклик
на старий обробник переривань. Якщо ж запущена резидентна
програма перша в послідовності ISR, виконується очистка пам’яті
зайнятою програмою. В цьому випадку, можливе виникнення
фрагментації пам’яті, якщо після заданої програми були встановлені
інші обробники для інших переривань. Для звільнення пам’яті
використовується функція 49h переривання int 21h в регістр ES
113