2. Работа системы прерываний в реальном режиме работы процессора
В микропроцессорах семейства i80x86 система прерываний построена таким образом, чтобы, с одной стороны, обеспечить возможность создавать эффективные и надежные мультипрограммные операционные системы, которые должны функционировать в защищенном режиме, а с другой стороны – обеспечить возможность выполнять программы, разработанные для реального режима.
В реальном режиме работа системы прерываний использует понятие вектора прерывания. Термин «вектор прерываний» используется потому, что для указания адреса используется не одно значение, а два, то есть имеем дело не со скалярной величиной, а с «векторной». Каждый вектор прерываний состоит из 4 байтов или 2 слов. Таблица векторов прерываний занимает 1024 байта. Таким образом, в ней может быть задано 256 векторов прерываний.
Таблица векторов прерываний заполняется (инициализируется) при запуске системы, но в принципе может быть изменена или перемещена. Каждый вектор прерываний имеет свой номер, называемый номером прерывания, который указывает его номер в таблице.
Подобно вызову процедуры, прерывание заставляет микропроцессор сохранить в стеке для последующего возврата, а затем перейти к группе команд, адрес которых определяется вектором прерывания. Таким образом, прерывание вызывает косвенный переход к своей подпрограмме обработки за счет получения ее адреса из вектора прерывания.
В персональных компьютерах класса IBM PC прерывания бывают двух видов: внутренние и внешние.
Внутренние прерывания возникают в результате работы процессора. Они возникают в ситуациях, которые нуждаются в специальном обслуживании, или при выполнении специальных инструкций INT или INTO. Это следующие прерывания:
прерывание при делении на ноль; номер прерывания – 0;
прерывание по флагу TF (trap flag – специальный бит в регистре PSW (слова состояния программы)). В этом случае прерывание обычно используется специальными программами отладки типа DEBUG. Номер прерывания – 1.
инструкция INT (interrupt – выполнить прерывание с соответствующим номером) и INTO (interrupt of overflow – прерывание по переполнению). Эти прерывания называются программными.
Внешние прерывания возникают по сигналу какого-нибудь внешнего устройства. Существуют два специальных внешних сигнала среди входных сигналов процессора, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы NMI (no mask interrupt – не маскируемое прерывание) и INTR (interrupt request – запрос на прерывание). Соответственно внешние прерывания подразделяются на немаскируемые и маскируемые.
Маскируемые прерывания генерируются контроллером прерываний по заявке определенных периферийных устройств. Сигнал запроса на прерывание чаще всего является сигналом готовности периферийного устройства на выполнение следующей команды, связанной с управлением операциями ввода/вывода. Маскируемые прерывания также называют аппаратными прерываниями.
Традиционно в современных компьютерах используется 15 линий IRQ (запросов на прерывание), часть из которых используется внутренними контроллерами системной платы, а остальные заняты стандартными адаптерами либо не используются. Прерывания с меньшими номерами обладают более высоким приоритетом.
IRQ |
Применение |
0 |
Системный таймер, представляющий для операционной системы такт длительностью 18,21 мс. |
1 |
Клавиатура |
2 |
Не доступно на 16-ти разрядной шине ISA, поскольку используется для подключения ввода контроллера прерываний, чтобы получить прерывания 8 – 15. Вывод прерывания 2 на 16-ти разрядной шинеISAподключен к выводу прерывания 9 контроллера прерываний. ПК настрое таким образом, чтобы вызывать обработчик прерывания 2 при активизации прерывания 9. |
3 |
Порт 2 последовательной передачи данных (COM2), а иногда порт СОМ 4, если последний установлен. |
4 |
Порт 1 последовательной передачи данных (COM1), а иногда порт СОМ 3, если последний установлен. |
5 |
Первоначально применялось для контроллера жестких дисков. Затем было зарезервировано для второго параллельного порта принтера (LPT2). Поскольку в ПК редко устанавливается более одного параллельного порта принтера,BIOSПК вообще не пользуется прерываниями для печати, то это прерываниеIRQ, как правило, доступно для использования. Нередко используется сетевым адаптером либо звуковой платой (soundblaster). |
6 |
Контроллер гибких дисков. |
7 |
Первый параллельный порт принтера LPT1. Это прерывание самым низким приоритетом. |
8 |
ИС часов реального времени в ПК, содержащая КМОП-память с резервным батарейным питанием и часы истинного времени, показания которых считываются при включении ПК, может быть установлена для формирования прерывания 8 с частотой кратной двум, от 2 до 8192 раз в секунду. Прерывание 8 обладает более низким приоритетом, чем прерывание 1, но более высоким приоритетом, чем прерывание 9. |
9 |
Используется для работы с платами, формирующими прерывание 2, поскольку настоящее прерывание 2 используется для каскадного подключения прерываний 8-15. |
10 |
Доступно |
11 |
Доступно |
12 |
Может быть использовано мышью, подключаемой к шине типа IBMPS/2, но обычно этого не делается и поэтому, как правило, оно доступно. |
13 |
Зарезервировано для указания ошибок математического сопроцессора. Недоступно шине ISA. |
14 |
Используется контроллером жестких дисков с отличным от SCSIинтерфейсом (обычно с интерфейсомIDE). |
15 |
Нередко используется дисковыми контроллерами с интерфейсом SCSI, однако установка дискового контроллераSCSIне является «стандартной». Обладает более низким приоритетом, чем прерывание 14, но более высоким, чем прерывание 3. |
Номер прерывания и его приоритет устанавливаются на этапе инициализации системы. После запуска операционной системы пользователь в некоторых случаях может изменить таблицу векторов прерывания, поскольку она ему доступна.