Материалы

Прерывания

Рейтинг:   / 0
ПлохоОтлично 

Запросы на прерывания (IRQ), или аппаратные прерывания, используются различными устройствами для сообщения системной плате (процессору) о необходимости обработки определенного запроса. Эта процедура подобна поднятию руки студентом, чтобы привлечь внимание преподавателя.

Каналы прерываний представляют собой проводники на системной плате и соответствующие контакты в разъемах. После получения запроса IRQ компьютер приступает к выполнению специальной процедуры его обработки, первым шагом которой является сохранение в стеке содержимого регистров процессора. Затем происходит обращение к таблице векторов прерываний, в которой содержится список адресов памяти, соответствующих определенным номерам (каналам) прерываний. В зависимости от номера полученного прерывания запускается программа, относящаяся к данному каналу.

Указатели в таблице векторов определяют адреса памяти, по которым записаны программы-драйверы для обслуживания платы, пославшей запрос. Например, для сетевой платы вектор прерывания содержит адрес сетевых драйверов, предназначенных для работы с ней; для контроллера жесткого диска вектор указывает на программный код BIOS, обслуживающий контроллер.

После выполнения необходимых действий по обслуживанию устройства, пославшего запрос, процедура обработки прерывания восстанавливает содержимое регистров процессора (извлекая его из стека) и возвращает управление компьютером той программе, которая выполнялась до возникновения прерывания.

Благодаря прерываниям компьютер может своевременно реагировать на внешние события. Каждый раз, когда последовательный порт передает байт данных системе, генерируется соответствующее прерывание, благодаря которому система должна обработать байт данных до поступления следующих данных. Учтите, что в некоторых случаях устройство, подключаемое к порту (например, модем с микросхемой UART 16550 или выше), может содержать специальный буфер, позволяющий сохранять несколько символов перед генерированием прерывания.

Аппаратные прерывания имеют иерархию приоритетов: чем меньше номер прерывания, тем выше приоритет. Прерывания с более высоким приоритетом обладают преимуществом и могут, так сказать, прерывать обработку других прерываний. В результате в компьютере может возникнуть несколько “вложенных” прерываний.

При генерации большого количества прерываний стек может переполниться и компьютер “зависнет”. При этом будет выдано сообщение Internal stack overflow — system halted. Если при работе в DOS такая ошибка возникает слишком часто, попытайтесь исправить ситуацию, увеличив значения параметра Stacks (размер стека) в файле Config.sys.

По шине ISA запросы на прерывание передаются в виде перепадов логических уровней, причем для каждого из них предназначена отдельная линия, подведенная ко всем разъемам. Каждому номеру аппаратного прерывания соответствует свой проводник. Системная плата не может определить, в каком разъеме находится пославшая прерывание плата, поэтому возможно возникновение неопределенной ситуации в том случае, если несколько плат используют один канал. Чтобы этого не происходило, система настраивается так, чтобы каждое устройство (адаптер) использовало свою линию (канал) прерывания. Использование одной линии сразу несколькими разными устройствами в большинстве случаев недопустимо.

Компания IBM в свое время разработала методы совместного использования прерываний на шине ISA, однако лишь некоторые устройства придерживались необходимых правил, и данная методология так и не была воплощена в жизнь. В то же время в шине PCI изначально предусмотрена возможность совместного использования прерываний. На самом деле все устройства, подключенные к шине PCI, используют прерывание A — прерывание самой шины. Реальная проблема состоит в том, что в действительности в системе одновременно используются два набора прерываний: ISA и PCI. Чтобы карты PCI могли работать в системе, прерывания PCI отображаются на прерывания ISA, которые уже не допускают совместного использования. Таким образом, лучше назначить всем картам (даже с интерфейсом PCI) различные прерывания. Конфликты, возникающие между прерываниями PCI и ISA, были свойственны ранним поколениям компьютеров и вызывали множество проблем. И они не самоустранились после выхода в свет операционной системы Windows 95 и технологии Plug and Play.

Технология совместного использования прерываний для адаптеров PCI называется PCI IRQ Steering и поддерживается уже более десятилетия операционными системами, начиная с Windows 95 OSR 2.x, а также BIOS системной платы. Эта технология дает возможность Windows с поддержкой устройств Plug and Play динамически распределять стандартные прерывания для плат PCI (обычно использующих прерывание PCI INTA#), а также назначать одно прерывание нескольким платам PCI.

Внешние аппаратные прерывания часто называются маскируемыми , т.е. их можно отключить (“замаскировать”) на время, пока процессор выполняет другие важные операции. В целом же вопросы правильной обработки прерываний являются уделом системной BIOS и отдельных программ.

Поскольку в шине ISA совместное использование прерываний обычно не допускается, при установке новых плат может обнаружиться недостаток линий прерываний. Если две платы используют одну и ту же линию IRQ, то их нормальную работу нарушит возникший конфликт.

 



Sitelinkx by eXtro-media.de
Яндекс.Метрика