Page 114 - 4875
P. 114

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
















                                                           113
   109   110   111   112   113   114   115   116   117   118