Page 110 - 4875
P. 110
Перший метод дозволяє ефективно виявляти наявність
резидентної (як і будь-якої іншої) програми в пам’яті, але є
трудомістким і не забезпечує діагностування працездатності програм.
Другий випадок передбачає, що у вибраному місці коду
програми записуються задана послідовність байт. В спеціальну змінну
заноситься зміщення до заданої сигнатури (спеціальний послідовний
байт) відносно початку резидентної частини. Виявлення програм
(перевірка) виконується наступним чином:
- отримується адреса вектора переривань, який використовує
ISR.
- добавляється зміщення, що буде вказувати на початок
сигнатури вказаної послідовності байт.
- перевіряються відповідні сигнатури, встановленого вектора
переривань і сигнатури в запущеній програмі. Якщо такі
сигнатури співпадають, то резидентна програма є вже в пам’яті,
і повторне встановлення не потрібне.
Як і попередній, цей метод не дозволяє виявити працездатність
резидентної програми і не спрацює, коли для тієї самої послідовності
ISR було виконане каскадне включення ще одного обробника (тобто,
коли в ланцюжку обробників цей обробник не перший).
Третій метод позбавлений вказаних недоліків. Використання
“ефекту відлуння” ґрунтується на тому, що до обробника добавляється
спеціальна функція (так званий фільтр), завдання якої полягає в
порівнянні значень регістрів процесора із заданими значеннями. У
випадку співпадання ці значення замінюються на інші, наперед
встановленні (так званий ефект „відлуння-відповіді”), тобто, якщо після
запуску програми ініціалізуюча частина отримує правильну відповідь
відлуння (резидентний обробник коректно відпрацював), то резидентна
програма повторно не встановлюється. Якщо ж такої відповіді не має,
то ініціалізуюча частина загружає резидентну частину в пам’ять.
Структурна схема резидентної програми
Спрощену структуру резидентної програми на мові Assembler
подано нижче:
109