IRQ: различия между версиями
Nil (обсуждение | вклад) (Новая страница: «'''IRQ''' — Interrupt Request, то есть запрос на прерывание процессора. Если данный IRQ не замаскирован, …») |
Nil (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | '''IRQ''' — Interrupt Request, то есть запрос на прерывание процессора. Если данный IRQ не замаскирован, то контроллер прерываний генерирует прерывание [[INT | + | '''IRQ''' — Interrupt Request, то есть запрос на прерывание процессора. Если данный IRQ не замаскирован, то контроллер прерываний генерирует прерывание [[INT]] как сигнал процессору. При этом процессор прекращает вычисления, останавливая выполнение программы, и переходит в процедуру обработки прерывания. Процедура обработки прерывания обязана сохранить контекст процессора (иначе станет невозможно восстановить работу прерванной программы), после чего выполнить свой код и вернуть управление прерванной программе. |
Строка 74: | Строка 74: | ||
|} | |} | ||
− | Зачастую старые звуковые карты и прочие устройства (особенно не [[PnP]]) вызывают конфликты прерываний — Например, если два устройства настроены использовать IRQ 7, то сначала в таблицу прерываний в вектор 15 заносится адрес драйвера первого устройства, а затем при загрузке драйвера второго устройства этот адрес перезаписывается. Однако драйвер может быть умнее и не перезаписать вектор, а сохранить его, и если драйвер не распознает, что за сообщение пришло | + | Зачастую старые звуковые карты и прочие устройства (особенно не [[PnP]]) вызывают конфликты прерываний — Например, если два устройства настроены использовать IRQ 7, то сначала в таблицу прерываний в вектор 15 заносится адрес драйвера первого устройства, а затем при загрузке драйвера второго устройства этот адрес перезаписывается. Однако драйвер может быть умнее и не перезаписать вектор, а сохранить его, и если драйвер не распознает, что за сообщение пришло от устройства, то он вызывает другой драйвер по сохранёному адресу. |
Версия 17:28, 6 октября 2011
IRQ — Interrupt Request, то есть запрос на прерывание процессора. Если данный IRQ не замаскирован, то контроллер прерываний генерирует прерывание INT как сигнал процессору. При этом процессор прекращает вычисления, останавливая выполнение программы, и переходит в процедуру обработки прерывания. Процедура обработки прерывания обязана сохранить контекст процессора (иначе станет невозможно восстановить работу прерванной программы), после чего выполнить свой код и вернуть управление прерванной программе.
IRQ | Описание | INT |
0 | Системный таймер | 8 |
1 | Клавиатура | 9 |
2 | Используется самим контроллером прерываний | 10 |
3 | Или последовательные порты COM 2 и COM 4, или доступен для других устройств. | 11 |
4 | Или последовательные порты COM 1 и COM 3, или доступен для других устройств. | 12 |
5 | Параллельный порт LPT2 или Звуковая карта. | 13 |
6 | Контроллер накопителя на гибких магнитных дисках. | 14 |
7 | Параллельный порт LPT1 или Звуковая карта. | 15 |
8 | Часы реального времени (часть SMOS) | 74 |
9 | Хост адаптер SCSI или доступен для других устройств. Прерывания IRQ2 от других устройств превращаются в IRQ9. | 113 |
10 | Свободное сквозное (разделяемое) прерывание. | 114 |
11 | Свободное сквозное (разделяемое) прерывание. | 115 |
12 | Прерывание мыши PS/2 (COM мыши вызывают 3 или 4 прерывание) | 116 |
13 | Сопроцессор | 117 |
14 | Первый ATA канал. | 118 |
15 | Второй ATA канал. | 119 |
Зачастую старые звуковые карты и прочие устройства (особенно не PnP) вызывают конфликты прерываний — Например, если два устройства настроены использовать IRQ 7, то сначала в таблицу прерываний в вектор 15 заносится адрес драйвера первого устройства, а затем при загрузке драйвера второго устройства этот адрес перезаписывается. Однако драйвер может быть умнее и не перезаписать вектор, а сохранить его, и если драйвер не распознает, что за сообщение пришло от устройства, то он вызывает другой драйвер по сохранёному адресу.