Для того чтобы программы могли взаимодействовать со своими устройствами, не мешая другим (и не получая от них помех), все системные ресурсы — адреса памяти и ввода-вывода, запросы прерываний и каналы DMA — должны быть бесконфликтно распределены между устройствами, подключенными к системной шине.
Для адресов памяти и портов ввода-вывода бесконфликтность означает, что диапазоны соответствующих адресов всех имеющихся устройств не должны перекрываться. Это в первую очередь касается адресов, по которым выполняется чтение. Если устройства, конфликтующие по чтению, находятся на одной физической шине, то результат чтения из-за электрического конфликта оказывается неопределенным. Если конфликтующие устройства находятся на разных шинах, то будет прочитаны данные только одного устройства, но какого именно — зависит от настройки мостов, соединяющих шины. Конфликт по адресам для записи часто сознательно используют для одновременной передачи информации в несколько устройств (например, в PnP ISA, см. [6]). Информация при этом не искажается. Однако незапланированные конфликты по записи могут приводить к неожиданным побочным эффектам в работе устройств, не ожидающих данной записи. Для самого главного ведущего устройства — центрального процессора — безразлично, к какой из шин подключено устройство: он задает только адрес и тип операции. Операции записи могут выполняться широковещательно — распространяться по всем шинам. Операции чтения маршрутизируются — фактически, чтение по конкретному адресу памяти или порта обычно выполняется только с одной из шин. В иерархии шин PCI мосты выполняют маршрутизацию для всех транзакций.
Для линий запросов прерываний бесконфликтность трактуется несколько сложнее. В классической системе ISA одну линию запроса может использовать только одно устройство, все остальные варианты — конфликтные. В системах РпР ISA (имеющих PnP BIOS, более гибко программируемый контроллер прерываний и устройства ISA PnP) при корректных настройках устройства РпР аппа-ратно могут использовать разделяемые (общие для нескольких устройств) линии прерываний (см. 4.4). На обычные карты (устройства) ISA эта возможность, как правило, не распространяется. Однако и для устройств РпР возможны конфликты программ, работающих с этими устройствами, если в них не заложена возможность разделяемости прерываний. В системах с PCI разделяемость прерываний аппаратно предусмотрена, но опять-таки возможны программные конфликты (и некорректно спроектированные карты). В комбинированных системах ISA/PCI доступные линии запросов прерываний делятся между устаревшими (legacy) устройствами ISA и устройствами PnP ISA и PCI, во второй группе разделяемые прерывания, в принципе, допустимы (но при «правильном» ПО).
Для каналов DMA (контроллеров 8237А) бесконфликтным, как правило, является лишь монопольное использование канала одним устройством (хотя бывают редкие исключения). На устаревших устройствах каналы выбираются двумя джамперами — один для линии DRQx, другой для DACKx#. Естественно, они должны устанавливаться согласованно, на один и тот же номер канала.
Периферийные устройства могут быть встроены в системную плату, а также устанавливаться в слоты шин расширения. Системные ресурсы должны распределяться между всеми этими устройствами. В распределении всегда имеются относительно неизменная часть (устройства системной платы, установленные ее изготовителем) и переменная часть, определяемая составом карт, установленных пользователем. Настройкой CMOS Setup могут быть заданы ресурсы устройств системной платы, а часть из них может быть даже отключена, если вместо них используются адаптеры, установленные в слоты расширения. Правда, бывают случаи, когда штатное отключение (настройкой CMOS Setup) не помогает: отключают обычно неисправную периферию, но «сгореть» она может и вместе со своим «выключателем». В этом случае приходится неисправную периферийную микросхему отключать физически (отпаивать; для микросхем CMOS по крайней мере отпаять вывод питания +5 В).
Ресурсы устанавливаемых карт задаются либо вручную, либо автоматически, в зависимости от возможностей шин, карт расширения и BIOS. Цель полной автоматизации — достичь идеала PnP (Plug-and-Play — «вставляй и играй»), когда от пользователя требуется лишь механически установить новое устройство, а дальше все распределения и установки драйверов выполняются без его участия. Однако у скептиков есть и другая расшифровка акронима РпР — Plug-and-Pray («включай и... молись»), имеющая под собой вполне реальную основу.
Наиболее распространенными для подключения карт расширения PC являются шины ISA и PCI. В шину PCI изначально были заложены возможности автоматического конфигурирования устройств, и она поддерживает механизм РпР в полном объеме (см. 14.7). Шина ISA не имела механизмов автоматического конфигурирования и распределения ресурсов, так что все заботы по конфигурированию устанавливаемых адаптеров и разрешению конфликтов ложились на пользователя. Задача конфигурирования осложнялась и из-за отсутствия общих средств автоматической передачи установленных параметров прикладному и системному программному обеспечению. После конфигурирования адаптеров, выполняемого обычно переключением джамперов (хорошо, если имелась документация с их описанием), установленные параметры заносились в какие-либо конфигурационные файлы, специфичные для каждого программного продукта. Для смены конфигурации (а такая необходимость обычно возникает только в процессе использования устройств или при добавлении новых) всю кропотливую работу по конфигурированию приходилось проводить повторно. При этом, естественно, возможны ошибки. Неподготовленному пользователю эта работа может показаться непосильной, и он зовет на помощь профессионала.
Некоторое облегчение конфигурирования принесло применение в адаптерах энергонезависимой памяти (NVRAM или ее разновидности — EEPROM), хранящей параметры, в том числе параметры использования системных ресурсов. Конфигурирование этих адаптеров выполняется программно специальной утилитой, а не с помощью джамперов. Отсюда и два их названия: Software Configured (программно конфигурируемые) или Jumperless (свободные от джамперов). Сейчас большинство карт ISA поддерживают спецификацию PnP ISA, благодаря чему во многих случаях с пользователя действительно снимаются заботы по конфигурированию.
Помимо «явно полезных» устройств конфигурированию подлежат и мосты PCI, соединяющие все шины современных ПК. При конфигурировании мостов им указывается распределение системных ресурсов по шинам, которые они связывают. Таким образом задаются пути транслирования управляющих сигналов по шинам с соответствующим управлением буферами данных. Конфигурирование мостов, как правило, происходит незаметно для пользователя, хотя некоторыми параметрами (выделением определенных ресурсов) можно управлять с помощью CMOS Setup.