Общие представления о системных ресурсах
14. Диагностика и устранение конфликтов из-за ресурсов
Своей необыкновенной популярностью IBM совместимые персональные компьютеры в значительной степени обязаны своей открытой архитектуре. Такой принцип построения систем позволяет различным фирмам разработчикам создавать для них свои устройства — видеоадаптеры, модемы, звуковые платы и т.п. Когда новая плата расширения устанавливается в компьютер, она начинает использовать различные системные ресурсы для того, чтобы обратить на себя внимание процессора и обмениваться данными через шину расширения. Никакие два устройства, входящие в состав компьютера, не могут использовать одни и те же ресурсы — в противном случае возникает аппаратный конфликт. Программы низкого уровня (драйверы и резидентные программы), использующие системные ресурсы, также в процессе работы могут конфликтовать друг с другом. Прочитав эту главу, вы получите общее представление о системных ресурсах и о возникающих из-за них конфликтах, как на аппаратном, так и на программном уровне, а также о методах их выявления и устранения.
14.1. Общие представления о системных ресурсах
Для того чтобы успешно выявлять и устранять конфликты, вы должны хорошо представлять себе значение каждого из доступных (поддающихся настройке) системных ресурсов. В персональных компьютерах три типа таких ресурсов: прерывания (IRQ — Interrupt Re Quest), каналы прямого доступа к памяти (DMA — Direct Memory Access) и адреса портов ввода/вывода (I/0 — Input/Output). Кроме того, в некоторых контроллерах и сетевых платах имеются собственные BIOS, для которых должны быть выделены определенные диапазоны адресов системной памяти. Важность этих ресурсов трудно переоценить конфликты могут возникнуть из-за любого из них, что может привести к фатальным последствиям для всей системы.
14.1.1. Прерывания (IRQ)
Прерывания являются, пожалуй, самым известным и простым для понимания системным ресурсом. С технической точки зрения они представляют собой электрические сигналы со стандартными логическими уровнями, используемые для привлечения внимания процессора. Устройство или подсистема компьютера может работать в автономном режиме до тех пор, пока не произойдет какое-либо событие, требующее системной обработки. Таким событием может быть ввод символа с клавиатуры, появление очередной порции данных в регистре последовательного порта и т.д. При этом соответствующее устройство (в рассматриваемом примере — контроллер клавиатуры или порта) вырабатывает сигнал с определенным логическим уровнем, поступающий на одну из линий запроса прерывания, которые подведены ко всем разъемам (слотам) шины расширения системной платы. В компьютерах класса AT таких линий 15 (IRQO, IRQ1, IRQ3 и IRQ15). расширения с выводами интегральной схемы (ИС) программируемого контроллера прерываний (PIC — Programmable Interrupt Controller), расположенной на системной плате (в современных компьютерах такой микросхемы нет — соответствующие узлы встроены в один из корпусов комплекта ИС системной платы). Выходные сигналы, генерируемые РIС, инициируют прерывание процессора.
Ситуация, сложившаяся в компьютерах класса AT с прерываниями IRQ2 и IRQ9, нуждается в некоторых пояснениях. Дело в том, что изначально, стремясь увеличить количество доступных линий прерываний по сравнению с компьютерами XT, разработчики AT просто установили на системную плату еще один контроллер (микросхема Intel 8259), выход которого подключили к входу IRQ2 уже имевшегося контроллера. В результате линия
Рекомендуем посмотреть лекцию "Лекция 5".
Линии прерываний 0, 1, 2, 8 и 13 не выведены на разъемы шины и не могут быть использованы платами адаптеров. IRQ2 стала недоступной, а общее количество прерываний увеличилось до 15, а не до 16, как можно было бы ожидать, исходя из удвоения количества контроллеров.
Для того чтобы адаптеры, настроенные на использование линии IRQ2, могли работать в новых системах, вместо “оторванной” линии IRQ2 к тем же контактам разъемов системной шины была подведена линия IRQ9. Соответственно была скорректирована и таблица векторов прерываний. На старых платах адаптеров, предназначенных для установки в компьютеры XT, возможные положения перемычек или переключателей выбора линии прерывания обычно маркируются как “IRQ2”, а в более современных устройствах они помечаются как “IRQ2÷9” или просто “IRQ9”. Об этой особенности надо помнить — если в вашем компьютере будут установлены две платы, одна из которых будет настроена на использование линии IRQ2, а другая — IRQ9, то они обязательно будут конфликтовать между собой. При получении запроса на прерывание компьютер переходит к специальной процедуре его обработки, первым шагом которой является сохранение в специально отведенной для этого небольшой области памяти (стеке) содержимого всех регистров процессора, а затем происходит обращение к таблице векторов прерываний. Эта таблица содержит список адресов памяти, на которые осуществляется переход (т.е. вызов записанного по данному адресу операнда) при появлении того или иного прерывания. В зависимости от номера полученного прерывания запускается обрабатывающая его программа.
Обычно указатели в таблице векторов определяют начальные адреса памяти, по которым записаны программы-драйверы, обслуживающие пославшую запрос плату. Например, для сетевой платы вектор прерывания содержит адрес загруженного сетевого драйвера, предназначенного для работы с ней; для контроллера жесткого диска вектор указывает на подпрограмму BIOS, обслуживающую контроллер.
После выполнения необходимых действий по обслуживанию устройства, пославшего запрос, процедура обработки прерывания восстанавливает содержимое регистров процессора (извлекая его из стека) и возвращает управление компьютером той программе, которая выполнялась до появления прерывания.
Как специалисту по обслуживанию компьютеров, вам совсем не обязательно во всех подробностях представлять, как формируются и обрабатываются прерывания, но основную терминологию знать необходимо. Назначить (assign) прерывание — значит настроить устройство на выдачу сигнала запроса по конкретной линии IRQ. Например, на типичной плате контроллера накопителей на жестких дисках первичному контроллеру назначается прерывание IRQ14, а вторичному — IRQ15. Назначение обычно осуществляется либо с помощью одной или нескольких расположенных на плате устройства перемычек или DJP-переключателей, либо автоматически при использовании технологии PnP (plug-and-play — “вставляй и работай”) и выборе соответствующего режима в BIOS. Прерывания могут быть выборочно разрешены или запрещены программным способом. Если РIС запрограммирован так, что какое-либо прерывание передается в процессор для обработки, то его называют разрешенным. Это не означает, что разрешенное прерывание обязательно должно быть назначено какому либо устройству. Наконец, активность прерывания означает, что на соответствующей линии IRQ присутствует сигнал запроса. Активным может быть, очевидно, только назначенное прерывание, поскольку должно существовать устройство, его формирующее. Однако оно не обязательно является разрешенным (если активное прерывание запрещено, то процессор его просто “не заметит”).
Прерывания являются эффективным и надежным средством оповещения процессора о нуждах различных устройств.