Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2. Архітектура ПЕОМ.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
237.56 Кб
Скачать

23.Особливості обробки апаратних переривань, пріоритети обслуговування запитів на переривання та їх зміна.

Особливості обробки апаратних переривань.

Апаратні переривання виробляються пристроями комп'ютера, коли виникає необхідність їх обслуговування. Наприклад, по перериванню таймера відповідний обробник переривання збільшує вміст комірок пам'яті, використовуваних для зберігання часу. На відміну від програмних переривань, що викликаються заплановано самої прикладної програмою, апаратні переривання завжди відбуваються асинхронно по відношенню до виконуєтьсяпрограмою. Крім того, може виникнути одночасно відразу кілька переривань!

Для того, щоб система "не розгубилася", вирішуючи яке переривання обслуговувати в першу чергу, існує спеціальна схема пріоритетів. Кожному перериванню призначається свій унікальний пріоритет. Якщо відбувається одночасно кілька переривань, то система віддає перевагу самому високопріоритетних, відкладаючи на час обробку інших переривань.

Система пріоритетів реалізована на двох мікросхемах Intel 8259 (для машин класу XT - на одній такій мікросхемі). Кожна мікросхема обслуговує до восьми пріоритетів. Мікросхеми можна об'єднувати (каскадувати) для збільшення кількості рівнів пріоритетів в системі.

Рівні пріоритетів позначаються скорочено IRQ0 - IRQ15 (для машин класу XT існують тільки рівні IRQ0 - IRQ7).

Для машин XT пріоритети лінійно залежали від номера рівня переривання. IRQ0 відповідало найвищій пріоритету, за ним йшли IRQ1, IRQ2, IRQ3 і так далі. Рівень IRQ2 в машинах класу XT був зарезервований для подальшого розширення системи. І починаючи з машин класу AT IRQ2 став використовуватися для каскадування контролерів переривання 8259. Додані пріоритетні рівні IRQ8 - IRQ15 в цих машинах розташовуються по пріоритету між IRQ1 і IRQ3.

Наведемо таблицю апаратних переривань, розташованих в порядку пріоритету:

Номер Опис

8 IRQ0 переривання інтервального таймера, виникає 18,2 рази в секунду.

9 IRQ1 переривання від клавіатури. Генерується при натисненні і при отжатии клавіші. Використовується для читання даних з клавіатури.

A IRQ2 використовується для каскадування апаратних переривань в машинах класу AT.

70 IRQ8 переривання від годинника реального часу.

71 IRQ9 переривання від контролера EGA.

72 IRQ10 зарезервовано.

73 IRQ11 зарезервовано.

74 IRQ12 зарезервовано.

75 IRQ13 переривання від математичного співпроцесора.

76 IRQ14 переривання від контролера жорсткого диска.

77 IRQ15 зарезервовано.

B IRQ3 переривання асинхронного порту COM2.

C IRQ4 переривання асинхронного порту COM1.

D IRQ5 переривання від контролера жорсткого диска для XT.

E IRQ6 переривання генерується контролером флоппі диска після завершення операції

F IRQ7 переривання принтера. Генерується принтером, коли він готовий до виконання чергової операції. Багато адаптери принтера не використовують це переривання.

З таблиці видно, що найвищий пріоритет у переривань від інтервального таймера, потім йде переривання від клавіатури.

Для управління схемами пріоритетів необхідно знати внутрішній устрій контролера переривань 8259. Вступники переривання запам'ятовуються в регістрі запиту на переривання IRR. Кожен біт з восьми в цьому регістрі відповідає перериванню. Після перевірки на обробку в даний момент іншого переривання запитується інформація з регістра обслуговування ISR. Перед видачею запиту на переривання в процесор перевіряється вміст восьмибитового регістра маски переривань IMR. Якщо переривання даного рівня не замасковано, то видається запит на переривання.

Найбільш цікавими з точки зору програмування контролера переривань є регістри маски переривань IMR і керуючий регістр переривань.

У машинах класу XT регістр маски переривань має адресу 21h, керуючий регістр переривань - 20h. Для машин AT перший контролер 8259 має такі ж адреси, що і в машинах XT, регістр маски переривань другого контролера має адресу A1h, керуючий регістр переривань - A0h.

Розряди регістра маски переривань відповідають номерам IRQ. Для того, щоб замаскувати апаратне переривання-якого рівня, треба заслати в регістр маски байт, в якому біт, відповідний цьому рівню, встановлений в 1. Наприклад, для маскування переривань від НГМД в порт 21h треба заслати двійковечисло 01000000.

Наведемо приклад програми, що маскує переривання від флоппі-диска:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void main(void);

void main(void) {

outp(0x21,0x40);

printf("\nПрерывания от флоппи-диска запрещены.\n");

exit(0);

}