МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НУ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра САПР
Лабораторна робота №7
«Обробка переривань»
Виконав:
Ст.гр.КН-24
Перевірив: Колесник К.К.
Львів 2007
МЕТА РОБОТИ
Мета роботи - вивчення основ організації та реалізації апаратурних та програмних переривань.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
В процесі виконання деякої програми іноді виникає необхідність негайної обробки деякої ситуації, яка ідентифікується апаратурними сигналами чи програмно (наприклад, натискання клавіші клавіатури, отримання сигналу від таймера, програмне переривання (int 21h). Відповідно до причини, переривання бувають програмні та апаратурні. Особливістю апаратурних переривань є відсутність часової координації з програмою, що виконується. Крім того, апаратурні переривання в першу чергу потребують програмної обробки.
В процесі виникнення і обробки переривання процесор призупиняє виконання програми, запам’ятовує місце призупинки, переходить на програму обробки відповідного переривання, а по її завершенню відновлює виконання перерваної програми з запам’ятованого місця. Такою є схема обробки переривання. Точка переривання (адреса CS:IP) запам’ятовується в стеці разом з регістром прапорців. Потім в CS:IP завантажується адреса точки входу програми обробки переривання і їй передається управління. Програми обробки переривань іноді називають драйверами переривань. Програма обробки переривань закінчується оператором IRET (повернення із переривання), яка завершує процес обробки переривання, відновлюючи значення CS:IP і регістра прапорців точки переривань, продовжуючи виконання перерваної програми.
В процесі виконання програми обробки переривань можливі нові переривання, тобто переривання і відповідні програми обробки можуть бути вкладеними. Запам’ятовування CS:IP та RF забезпечує безконфліктність.
Строго кажучи, програмні переривання не є перериваннями,бо вони здійснюються із звичайних програм. Тобто в даному випадку механізм переривань використовується для виклику певних процедур. Однак на відміну від звичайних процедур та підпрограм програми переривання містяться в операційній системі і призначені для виконання певних системних функцій (ввід-вивід символа, ввід командної стрічки, байта, тощо).
Адреси програм обробки переривань називають векторами. Кожен вектор має довжину 4 байти. В першому слові зберігається IP, у другому – CS. Таким чином у виділених 1024 байтах оперативної пам’яті зберігається 256 векторів Ця область називається таблицею векторів. (Вектор переривання 0 починається з 0000:0000, переривання 1 – 0000:0004, 2 – 0000:0008 і т.д.).
Для управління апаратними перериваннями використовується мікросхема програмного контроллера переривань (керуюча мікроЕОМ) Intel 8259 (або її еквівалент). Оскільки в будь-який момент часу може відбутися не один, а кілька запитів на переривання, то ця схема має 8 рівнів пріоритетів (IRQ 0 – IRQ 7 (IRQ 15)). IRQN – запит на переривання. Максимальний пріоритет відповідає рівню 0. Для машин АТ додаткові 8 рівнів обробляються другою мікросхемою 8259. Цей другий набір рівнів має пріоритет між IRQ 2 та IRQ 3.
Переривання 0-7 відповідають векторам від 8Н до OFH. Апаратні переривання впорядковані по зменшенню пріоритету: IRQ 0 – таймер, 1 – клавіатура, 2 – канали в/в, (8 годинник реального часу (АТ), 9 – програмно переводиться в IRQ 2 (AT), 10 -резерв, 12 - резерв, 13 – математичний сопроцесор (АТ), 14 – контроллер жорсткого диску (АТ), 15 – резерв, 3 – COM1 (СОМ2 (АТ)), 4 – СОМ2 (СОМ1 (АТ)), жорсткий диск (LPT2 (AT)), 6 – контроллер дискет, 7 – LPT1.
Максимальний пріоритет таймера встановлюється з метою забезпечення правильності системного годинника (відсутність втрат часу за рахунок очікування). Переривання від клавіатури ініціюється натисненням/відпусканням клавіші і його обробка полягає в занесенні коду клавіші в буфер (цей код може бути вибраний за допомогою відповідного програмного переривання).
В програмах на Асемблері апаратні переривання можуть бути замасковані (тимчасово заборонена їх обробка). Деякі апаратні переривання (наприклад, ділення на 0) не можуть бути замасковані. Є дві причини блокування переривань:
Блокування на час критичної частини коду програми обробки - поки не буде замінений вектор переривань цілком, а не частково).
Маскування переривань при виконанні критичних до часу операцій (наприклад, робота з диском, швидкий ввід/вивід)
Якщо біт 9 регістру прапорців рівний 0, то дозволені всі переривання, які дозволяє маска, при RF9 = 1 - всі апаратні переривання заборонені. Заборона переривань здійснюється командою CLI, дозвіл – STI. Заборона переривань на довгий період може порушити роботу ОС (зокрема, порушення роботи системного годинника - пропуск синхросигналів).
При виклику програми обробки програмних переривань ПЕОМ автоматично забороняє апаратні переривання до їх закінчення. Якщо у програмах обробки програмних переривань допускаються апаратурні, то їх можна дозволити командою STI. Якщо після CLI не вказати пізніше STI, то машина блокується (недоступна клавіатура).
Для маскування певних апаратних переривань необхідно заслати послідовність бітів в порт за адресою 21H (адреса регістра маски переривань IMR).
Команди роботи з маскою IMR
MOV AL,01000000B ; маскування 6 біта (0-7)
OUT 21H,AL
-------------------
MOV AL,0
OUT 21H,AL ; відновлення маски переривань
Встановлення переривання
PUSH DS
MOV DX,OFFSET ROUT
MOV AX,SEGROUT
MOV DS,AX
MOV AH,25H
MOV AH,60H
INT 21H
POP DS
Процедура обробки переривання
ROUT PROC FAR
PUSH AX
--------------
POP AX
MOV AL,20H
OUT 20H,AL
IRET
ROUT ENDP
Заміна вектора
MYPG PROC FAR
PUSH DS PUSH AX
MOV AX,SEGMYPG PUSH CX
MOV DS,AX PUSH DX
MOV AL,1CH MOV AH, 0
MOV AH,25H INT 1AH
INT 21H MOV CX,NTIME
POP DS CMP DX,CX
JNE M1
CALL BEEP
M1: POP DX
POP CX
POPAX
IRET
MYRG ENDP
Відновлення вектора
MOV DX,0FF53H
MOV AX,F000H
MOV DX,AX
MOV AL,1CH
MOV AH,25H
INT 21H
Переривання по часу доби
MOV CH,GG ; встановлення часу сигналізації
MOV CL,MM
MOV DH,SS
MOV AH,06H
INT 1AH
---------------------
MOV AH, 07H ; відміна сигналізації
INT 1AH
Заміна вектора програми обробки переривання INT 4AH по часу доби.
PUSH DS
MOV AX,SEGMYPG
MOV DS,AX
MOV DX,OFFSET MYPG
MOV AL,4AH ; номер вектора переривань
MOV AH,25H ; функція заміни вектора переривань
INT 21H
POP DS
КОНТРОЛЬНІ ЗАПИТАННЯ
1. Для чого служить апаратні переривання ?
2. В чому різниця між апаратними та програмними перериваннями ?
3. Як здійснюється обробка апаратних переривань ?
Яка роль механізму пріоритетів ?
Як використовуються програмні переривання ?
Що таке таблиця векторів переривань ?
Як і для чого здійснюється заміна вектора переривання ?
4. ЛАБОРАТОРНЕ ЗАВДАННЯ
1. Ознайомтесь з механізмом обробки переривань.
2. Напишіть програми обробки переривань по таймеру і по часу доби.
Перевірте роботоздатність програм на прикладах.
5. ОФОРМЛЕННЯ ЗВІТУ
1. Загальна характеристика механізму обробки переривань.
2. Опис алгоритму обробки переривань по таймеру та по часу доби.
3. Тексти програм.
4. Результати тестування програм.