Автор: Пользователь скрыл имя, 14 Декабря 2011 в 20:25, курсовая работа
Резидентні програми - програми, які потрапляють у оперативну пам'ять при запуску і знаходяться там до вимкнення програми, або, що найбільш типово, перезавантаження комп'ютера. Резидентна програма активізується кожного разу при
виникненні переривання, вектор якого, ця програма змінила на адресу однієї зі своїх
процедур. При роботі з MS-DOS резидентні програми широко використовувалися для
досягнення різних цілей (наприклад,русифікатори клавіатури, програми доступу до
локальной мережі,менеджери відкладеного друку, віруси).
Вступ……………………………………………………………………………………………...6
Концепція створення резидентних програм…………………………………………………...7
Основні поняття ………………………………………………………………...7
Загальні відомості про резидентні програми ....................................................7
Структура резидентних програм …...…………………………………….....9
Ініціалізація резидентної програми…………………………………………….9
Рішення пpоблеми повтоpного запуску……………………………………….10
Опис алгоритму реалізації і виконання програми…………………………………………...12
Постановка задачі………………………………………….................................12
Розробка алгоритму. Блок-схема алгоритму. ………………………………...13
Розбиття задачі на блоки……………………………………………………….14
Вивчення технології розробки…………………………………………............14
Реалізація програми (проекту) …………………………………………..........15
Текст програми …………. ……………………………………………………………………..16
Результати роботи програми…………………………………………………………………..18
Висновки………………………………………………………………………………………..19
Список використаної літератури………………………………………………………………20
Структура резидентних програм
Резидентна програма складається з двох частин: резидентна частина - один або декілька обробників переривань; секція ініціалізації - запускається, розміщує в оперативній пам'яті відповідні обробники переривань, настроює на ці обробники вектори переривань, далі завершує роботу так, щоб в оперативній пам'яті залишилась резидентна частина.
Спочатку в пам'яті розміщуються дані,
потім обpобники переривань (вектоpів),
і нарешті секція ініціалізації (яка має
точку входу INIT і саме в цю точку передається
упpавління пpи запуску пpогpам). Основне
завдання секції ініціалізації - встановити
pезидент в пам'яті. Цю секцію розміщують
в стаpших адресах (тому що "обpізати"
ми можемо тільки стаpші адреси).
Функції
секції ініціалізації полягають у наступному:
1. Пеpехоплюються вектоpи переривань (встановлення
своїх обpобників).
2. Програма завеpшуєтся, тобто в пам'яті
залишається тільки pезидентна частина.
3. Пеpедача паpаметpів обpобникам переривання-TSR.
Значення цих паpаметpів поміщаються в
pезидентну область даних ( паpаметpом може
бути "гаряча" клавіша виклику pезидента).
4. Вирішення пpоблеми повтоpного запуску
TSR (щоб не pазмножувати копії TSR в пам'яті),
тобто секція ініціалізації повинна визначати,
є пpогpамма в пам'яті чи ні.
5. Видалення pезидента з пам’яті. По-пеpше
відновити старий вектоp переривань (з
сегменту даних), і по-друге видалити оточення
TSR і видалити PSP TSR.
6. Функція мінімізації пам'яті, зайнятої
pезидентом.
Ініціалізація резидентної програми
Для використання
переривання 27h сегментний регістр CS повинен
вказувати на PSP програми, а в регістрі
DX має бути записано зсув останього байта
програми плюс один байт. Неважко помітити,
що цей спосіб залишатися резидентними
найбільше підходить для програм у форматі
COM. Ви не зможете запустити резидентну
програму довшу 64 кілобайт.
Інший, більш
зручний спосіб - використовувати функцію
31h переривання INT 21h. У регістрі AL ви можете
вказати код завершення програми, регістр
DX в цьому випадку повинен містити довжину
резидентної частини програми в параграфах. Тут
вже немає обмеження 64 кілобайт на довжину
програми. Використання цієї функції -
єдина можливість запускати резидентні
програми довші 64 кілобайт.
Але не варто захоплюватися довгими TSR-програмами,
так як зазвичай звільнити пам'ять, яку
займала резидентна програма і яка вже
не використовується, можна тільки за
допомогою перезавантаження операційної
системи.
Рішення пpоблеми повтоpного запуску
Потрібно визначити,
була вже запущена TSR чи ні. Можливо кілька
ваpіантів визначення запуску TSR:
Опис
алгоритму реалізації
і виконання програми
Загальний алгоритм можна звести до таких кроків:
1)Постановка задачі
2)Розробка алгоритму
3)Розбиття задачі на блоки
4)Вивчення технології розробки
5)Реалізація програми (проекту)
Дещо детальніше зупинимося на деяких пунктах.
Розглянем
детальніше кожен з кроків.
Постановка задачі
Розробити і реалізувати резидентну програму, яка має блокувати процес перезавантаження операційної системи MS – DOS. Дана програма являє собою COM модуль.
Розробка алгоритму
Дана
програма написана під операційну систему
MS – DOS, при чому вона буде працювати
тільки на ,,чистому” DOS, оскільки перехоплює
його переривання на системному рівні.
Ця програма блокує первинний процес перезапуску
комп’ютера, який викликається за допомогою
натискання комбінацій наступних клавіш
<ctrl+alt+del>. Для цього в цій програмі перехоплюється
апаратне переривання від клавіатури
int 09h. В процедурі її обробки перевіряються
біти прапорців стану клавіатури BIOS, і
якщо виявляється, що натиснуті <ctrl+alt+del>,
в прапорцях стану скидається біт <ctr>.
Тоді комп’ютер можна
перезапустити за допомогою
натиснення наступної
комбінації клавіш <ctrl+alt+правий shift+del>.
Блок-схема
алгоритму має наступний
вигляд :
Розбиття задачі на блоки
Дану програму розбивається на такі блоки :
Конкретний
розгляд кожного з блоків наведений
нижче
Вивчення технології розробки
Дана програма реалізується на компіляторі MASM 6.11. Оскільки дана програма резидентна, тому вона виконана в вигляді COM-програми. Зазначаю, що при компілюванні COM-програми потрібно вказувати додатковий параметр в командні стрічці, для того щоб компілятор розпізнав її належним чином. Це виглядає так :
ml new.asm /AT .
В системах DOS , файл COM - простий тип виконуваного файла, розмір якого не може перевищувати 64Кбайт-256 байт COM-файли для DOS можна виконувати також на емуляторах, наприклад в середовищі Windows. В COM-програмах
використовується модель
пам'яті tiny, тобтоPSP, код,
При запуску такої програми
спочатку створюється Префікс програмного сегменту,
встановлюється на кінець сегмента.
Обовязковим в коді є
org 100h ;Зміщення відносно початку сегменту(PSP)
яке фактично
і визначає COM-програму.
Реалізація програми (проекту)
Опис
фрагментів коду вище
перелічених блоків
Визначення значення старого вектора перериваннь.
За домогою функції 3509h визначається старе значення переривання , в даному випадку, клавіатури. Переривання 21h підтверджує виконання вищевказаної функції.
mov ax,3509h
int 21h
mov word ptr old_interrupt9,bx
mov word ptr old_interrupt9+2,es
Останні
дві команди зберігають старий вектор
у відповідній змінні.
Встановлення нового вектора переривань.
За
допомогою функції 2509h встановлюється
новий вектор переривання, в нашому випадку
це переривання int 09h. Функція 3100h закінчую
програму і залишає її відповідну частину
резидентною в пам’яті.
Перевірка натиснутих клавіш.
Перевірка
здійснюється тоді, коли перехоплюється
апаратне переривання від клавіатури
int 09h. В процедурі її обробки перевіряються
біти прапорців стану клавіатури BIOS, і
якщо виявляється, що натиснуті <ctrl+alt+del>,
в прапорцях стану скидається біт <ctr>.
Блокування перезавантаження операційної системи.
Після запуску нашої програми при натисненні комбінації клавіш <ctrl+alt+del>,
комп'ютер
не перезавантажується. Це пояснюється
тим, що в таблиці векторів переривань,
відповідне переривання не спрацьовує,
оскільки дана програма перехоплює це
переривання і блокує його, натомість
встановлює своє.
Текст
програми
.model tiny
.code
rt_shift EQU 01h
ctrl_key EQU 04h
alt_key EQU 08h
del_key EQU 53h
kybd_port
EQU 60h
ORG
100h
start:
jmp
setup
int9_handler PROC FAR
sti
pushf
push es
push ax
push
di
L1:
mov ax,40h
mov es,ax
mov di,17h
mov
ah,es:[di]
L2:
test ah,ctrl_key
jz L5
test ah,alt_key
jz
L5
L3:
in al,kybd_port
cmp al,del_key
jne L5
test ah,rt_shift
jnz
L5
L4:
and ah,NOT ctrl_key
mov
es:[di],ah
L5:
pop di
pop ax
pop es
popf
jmp
cs:[old_interrupt9]
old_interrupt9 DWORD ?
int9_handler ENDP
Информация о работе Створення і управління процесами в ОС (резидентні програми)